pandoc不识别汉字

时间:2016-11-30 15:57:34

标签: markdown pandoc cjk xelatex

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

然而,我试过了 cjk.md:

Hello
你好

用(在bash中)编译

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

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

1 个答案:

答案 0 :(得分:4)

解决。 Tl; dr:它不足以将编译器设置为xelatex而不是pdflatex;一个必须包括包xeCJK,但是它应该包含在哪里,请参见下文。

修改:通过设置这些pandoc template变量也可以实现以下目标:

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

Hello 你好

就我而言,pandoc读取.md,将其转换为.tex,并调用编译器将其编译为.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-provied模板中时,会出现许多含义错误的错误消息

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

即,删除if,以便始终执行xeCJK;否则,xeCJK行将不会复制到中间.tex文件。 并删除\usepackage{fontspec},因为它默认由pandoc调用,否则会在中间.tex文件中调用两次包的错误消息。

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

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

我在这个问题上花了大约10多个小时,但从现在开始,我可以愉快地在markdown文件中键入中文。 为了后人的缘故,我写下了这篇文章。