2016-11-30 104 views
2

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

不过,我想
cjk.md:

Hello 
你好 

与(在bash)

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

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

+1

字体可能丢失?或者修改生成乳胶的pandoc模板,参见http://tex.stackexchange.com/questions/17611/how-does-one-type-chinese-in-latex(也可以尝试'-o cjk.tex' ,然后使用'xelatex cjk.tex'来调试问题) – mb21

回答

3

已解决。 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 

在过去的I型中国字符(或更一般地,中日韩),我用

\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,保险费可予退回模板已经定义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多个小时,但从现在开始,我可以愉快地在降价文件中输入中文。 我为了后人的缘故写下了这篇文章。

+0

很高兴你有它的工作!我不熟悉中国乳胶,但我知道潘多克......所以看看我的编辑:) – mb21

+0

这是非常友善的你,先生。我知道在文档的开头就可以设置这样的东西,但我不知道它们是'CJKmainfont'和'CJKoptions'。由于我不会随时更改字体,因此可以将它们记录在通用模板中(复制一份)。另外,如果尽可能使用拉丁字体,它看起来更令人满意。 – Aminopterin