Pandoc无法识别中文字符

Vio*_*rin 2 markdown cjk xelatex pandoc

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

但是,我尝试了
cjk.md:

Hello
??
Run Code Online (Sandbox Code Playgroud)

用(bash)编译

pandoc -s -o cjk.pdf --latex-engine=xelatex cjk.md
Run Code Online (Sandbox Code Playgroud)

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

Vio*_*rin 5

解决了。Tl; dr:仅将编译器设置为xelatex而不是pdflatex; 一个也必须包括软件包xeCJK,但是对于应该包含的软件包,请参见下文。


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

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

Hello ??
Run Code Online (Sandbox Code Playgroud)

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

pandoc调用它自己的乳胶的模板,我们可以cat在一个预先写好的命令终端:

pandoc -D latex > default.latex
Run Code Online (Sandbox Code Playgroud)

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

--template=my-directory/my-template.latex
Run Code Online (Sandbox Code Playgroud)

过去,我输入汉字(或更常见的是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
Run Code Online (Sandbox Code Playgroud)

字体应该是系统允许的字体。上面显示的这些是Mac随附的。

但是当我只是简单地将其粘贴到pandoc提供的模板中时,就会出现许多隐秘的错误消息

option clash for package XXXX....
Run Code Online (Sandbox Code Playgroud)

这是因为已经定义了pandoc提供的模板xeCJK。确实,搜索以下行:

$if(CJKmainfont)$
    \usepackage{xeCJK}
    \setCJKmainfont[$for(CJKoptions)$$CJKoptions$$sep$,$endfor$]{$CJKmainfont$}
$endif$
Run Code Online (Sandbox Code Playgroud)

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

\usepackage{xeCJK}
\setCJKmainfont[BoldFont=STHeiti,ItalicFont=STKaiti]{STSong}
% .... and so on, whatever you call from xeCJK
Run Code Online (Sandbox Code Playgroud)

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


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

抱歉,我没有跟踪所引用的每个网站,但是无论如何都无法正常运行,或者过时了。最有用的mb21,他在我输出.tex 到debug的注释中建议,此后我发现xeCJK没有包含在内。

我已经在这个问题上花费了10多个小时,但是从现在开始,我可以在markdown文件中愉快地键入中文。为了后代的可怜,我写下了这个。