3

我想用 编译pandoc一个包含 CJK 元素(实际上是中文)的 Markdown 文档。据说--latex-engine=xelatex选项允许编译pandocUnicode 字符。

但是,我尝试
了 cjk.md:

Hello
你好

用(在 bash 中)编译

pandoc -s -o cjk.pdf --latex-engine=xelatex cjk.md

但结果.pdfHello显示了,而你好丢失了。我错过了什么吗? pandoc已更新;我正在使用更新到 Sierra 的 Macbook Air(2012 年购买)。我已经正确安装xelatex(我想是在 MacTex 中),因为当我texstudio以前编译xelatex时,没有问题。

4

1 回答 1

8

解决了。xelatexTl; dr:将编译器设置为pdflatex;是不够的 一个也必须包括包xeCJK,但它应该在哪里,见下文。


编辑:以下也可以通过设置这些pandoc 模板变量来实现:

---
CJKmainfont: STSong
CJKoptions:
  - BoldFont=STHeiti
  - ItalicFont=STKaiti
---

Hello 你好

在我的情况下,pandoc读取 a .md,将其转换为 a .tex,然后调用编译器将其编译为 a .pdf。因此,理论上,我通常可以使用类似 tex 的编译器完成的工作也可以完成pandoc--- 只是我必须指定所需的模板。

调用它自己的pandoc乳胶模板,我们可以cat在终端中通过预先编写的命令:

pandoc -D latex > default.latex

这实际上将一个新文件复制default.latex.(当前目录)。这就是我现在修改的。pandoc编译时将此选项附加到:

--template=my-directory/my-template.latex

过去我输入汉字(或更一般地,CJK),我使用以开头的模板

\documentclass[12pt]{article}
\usepackage{xeCJK}% use Latin font whenever possible
\usepackage{fontspec}% set Chinese fonts, as follows
\setCJKmainfont[BoldFont=STHeiti,ItalicFont=STKaiti]{STSong}
\setCJKsansfont[BoldFont=STHeiti]{STXihei}
\setCJKmonofont{STFangsong}
% .... whatever xeCJK commands you use

字体应该是您的系统允许的字体;上面显示的这些是随 mac 一起提供的。

但是当我简单地将它粘贴到 pandoc 提供的模板中时,有许多神秘的错误消息

option clash for package XXXX....

这是因为 pandoc-proviede 模板已经定义xeCJK。事实上,搜索这些行:

$if(CJKmainfont)$
    \usepackage{xeCJK}
    \setCJKmainfont[$for(CJKoptions)$$CJKoptions$$sep$,$endfor$]{$CJKmainfont$}
$endif$

这些行(引用的部分)应替换为

\usepackage{xeCJK}
\setCJKmainfont[BoldFont=STHeiti,ItalicFont=STKaiti]{STSong}
% .... and so on, whatever you call from xeCJK

即 delete if,因此xeCJK始终执行;否则,xeCJK行将不会被复制到中间.tex文件。还有 delete \usepackage{fontspec},因为它是默认调用的,否则在中间文件pandoc中调用两次包会出现错误消息。.tex


确认:[1] [2] [3]

抱歉,我没有跟踪我引用的每个网站,但无论如何都没有得到它,或者已经过时了。帮助最多的是mb21 ,他在我输出.tex 到 debug的评论中建议,之后我发现xeCJK不包括在内。

我在这个问题上花了大约 10 多个小时,但从现在开始,我可以愉快地在 markdown 文件中输入中文了。为了可怜的后人,我把它写下来了。

于 2016-12-01T18:58:40.553 回答