我正在尝试在Windows系统上使用pandoc
将markdown文件转换为pdf。由于我的markdown包含中文字符,因此我使用以下命令来生成pdf:
pandoc --pdf-engine=xelatex -V CJKmainfont=KaiTi test.md -o test.pdfbut
但是pandoc提示该文件包含无法处理的非utf8字符,确切的错误消息是:
根据我在互联网上找到的信息。这主要是由于markdown文件的编码,可能与pandoc无关。我的文件包含很多汉字和英文字符。我已经将其转换为utf-8编码。
我尝试过但没有成功的事情
非UTF8字符的Grep
遵循here和here指令。我已验证系统语言环境设置为UTF-8,
localectl status
的输出为: System Locale: LANG=en_US.UTF-8
VC Keymap: us
X11 Layout: us
我试图grep表示非utf8字符。使用的命令是
grep -axv '.*' test.md
。但是该命令什么也不输出。 (我认为这意味着没有utf-8无法解码的无效字符。)尝试丢弃无效字符
我按照here指令尝试从文件中删除非utf8字符。我使用的命令是:
iconv -f utf-8 -t utf-8 -c test.md > output.md
之后,当我尝试使用
output.md
将pandoc
转换为pdf时。我仍然遇到相同的错误消息,这表明该文件仍然包含非utf8字符。我的问题
如何确定导致问题的文件的哪个部分,或者如何真正从文件中删除非utf8字符,以便可以错误地对其进行编译?
其他资讯
CJKmainfont
设置为其他有效的中文字体名称。 最佳答案
该问题是由于在markdown中使用反斜杠而不进行转义引起的。 Pandoc将反斜杠后跟Markdown中的文本视为LaTeX命令。使用以下命令生成pdf:
pandoc -f markdown-raw_tex --pdf-engine=xelatex -V CJKmainfont=KaiTi test.md -o test.pdf
然后错误消失了,并且可以成功生成pdf文件。
后续行动
感谢tex.stackexchange中的专家,终于找到了原因。本质上,如果xelatex在处理tex文件的过程中遇到无效的控制序列,它将产生无效的utf-8序列。有关更多信息,请参见here和here。
更新2017.12.29
使用release of Pandoc 2.0.6,可以更正确地处理此行为:
现在,调试此类问题更加容易。
关于bash - 即使我的文件是有效的utf-8编码文件,pandoc也提示utf-8解码错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47954642/