保留 Pandoc Markdown 转换到 LaTeX 中的换行符

25
我希望将以下的*.md文件转换成适合LaTeX的*.tex文件。
Lorem *ipsum* something.
Does anyone know lorem by heart?

That would *sad* because there's always Google.

期望的行为 / 由Pandoc生成的LaTeX

Lorem \emph{ipsum} something.
Does anyone know lorem by heart?

That would \emph{sad} because there's always Google.

观察到的行为/由Pandoc生成的LaTeX结果

Lorem \emph{ipsum} something. Does anyone know lorem by heart?

That would \emph{sad} because there's always Google.
为什么我关心这个问题? 1. 我正在将一个更大的 git 仓库从 markdown 转换成 LaTeX,我想要一个干净的差异和历史记录。 2. 我实际上喜欢我的 LaTeX 每行只有一句话,即使对于排版来说没有影响。
如何让 Pandoc 实现这个? 注:我知道选项 "hard_line_breaks",但它只在前两行之间添加 "\ \",并没有真正保留我的换行符。
3个回答

25

更新

自从pandoc 1.16版本以来,这是可能的:

pandoc --wrap=preserve

旧回答

由于Pandoc将Markdown转换为类似AST的内部表示形式,因此您的非语义换行符会丢失。因此,除非进行一些自定义脚本(比如使用--no-wrap,然后通过在每个句点后面插入换行符来处理输出),否则您所需的内容是不可能实现的。

但是,您可以使用--columns NUMBER选项来指定每行字符数。因此,您不会每行一个句子,而是每行NUMBER个字符。


非常感谢 - 我看到这在 Pandoc 应该做的事情方面是有意义的。 我最终不得不手动重新格式化它; 这是我在项目中更改标记的最后一次 :) - maxheld
4
不知为何,这对我不起作用。有任何想法吗? - Michael
谢谢,这正是我正在寻找的! - v01pe

8
一种更简单的解决方案是在“...something.”后面添加两个空格。这将添加手动换行(该方法在Pandoc手册中提到)。

感谢@René,我明白这种可能性。 这里的重点是找出一种将*.md转换为带有最小差异污染的*.tex*文件的方法。我想添加两个空格可能会增加这样的虚假差异。 无论如何,我理解@mb21之前所写的内容- tex中的换行符是非语义化的,因此它们在Pandoc转换时必须丢失。 我只是“用错了它”。 - maxheld
这应该被标记为正确答案,因为它提供了解决方案,并且具有最少的开销。 - user657127

2
我找到了另一种解决这个问题的方法 - 不要更改原始的在版本控制下的 *.md 文件,而是在构建PDF时仅读取它们并将它们“ pandoced ”。
具体步骤如下:
1. 在项目根目录中有一些 markdown.md 文件。
2.
Happy one-sentence-per-line **markdown** stuff.
And another line – makes for clear git diffs!

在项目根目录中有一些latexify.tex

\documentclass{article}
\begin{document}

\immediate\write18{pandoc markdown.md -t latex -o tmp.tex}
\input{tmp.tex}

\end{document}

如果您在LaTeX项目中使用一些Markdown组件,例如GitHub README或其他内容,那么这将非常有用。

不需要特殊的软件包,但需要启用shell-escape编译。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接