pandoc markdown 中的 Macron。(Mh\={a}v\={\i}ra)

pandoc markdown 中的 Macron。(Mh\={a}v\={\i}ra)

我正在使用pandocmarkdown 生成 PDF,但无法让它接受我的特殊字符。

例如,我想Mah\={a}v\={\i}ra在文档中将长音符号放在相应的字母上。当我发布时:

pandoc -o mydoc.pdf mydoc.md

我的文档包含Mah={a}v={i}ra。 点已从 中删除i,正如我通过使用 所请求的那样\i,但\=仅转换为=

使用相似重音字符进行的一些测试揭示了同样的问题。

我怎样才能在我的文档中添加长音符?

答案1

通常,当pandoc发现某些内容看起来像 latex 命令时(即转义字符\后跟字母,以及括号中可能出现的多个参数,例如 in \emph{xxx}),它会传递命令及其参数,而不直接处理生成的.tex文件。当输出格式与 latex 无关时,它会忽略完整的命令及其参数(例如:在 html 输出中)。

在您的例子中,\i它具有 tex 命令的结构,但\=实际上却不是,因为它不包含任何字母(并且显然pandoc不支持活动字符)。这解释了您得到的结果。

可能的解决方法:

  1. “破解”tex 输出。您可以在 latex 模板中(甚至在 pandoc 文档中)定义以下命令:

    \def\passthrulatex#1{#1}
    

    然后,当您将此命令用作 pandoc 文档的一部分时,命令及其论证将被传递,而不会对结果.tex文件进行更改。因此,例如,您可以\passthrulatex{Mah\={a}v\={\i}ra}在 中写入并获取所需的输出pdf。但是,如果您尝试生成html此命令(及其参数),则整个命令(及其参数)将在 html 版本中消失,因此此解决方案不是最佳的。

  2. 使用 unicode。不要使用 tex 重音基元,而是直接在 pandoc 源中输入 unicode 字符。在我看来,这是一个更明智的解决方案,因为毕竟 pandoc 源应该尽可能独立于最终格式(因此也独立于 tex)。在这种情况下,您可以直接Mahāvīra在 pandoc 源中写入,并使用 utf8 编码保存该文件。

    Pandoc 会将 unicode 直接传递给输出,因此它将适用于 html 输出,并且pdf 如果使用的 latex 模板已准备好处理 utf8,它还将适用于输出。Pandoc 的默认模板附带 utf8 支持,因此它应该可以立即使用。您甚至可以使用pandoc来生成中间tex文件,然后使用xelatex而不是“手动” 编译该文件以pdflatex确保完全支持 unicode。

相关内容