我正在尝试在Windows系统上使用pandoc
将markdown文件转换为pdf。由于我的降价包含中文字符,因此我使用以下命令生成pdf:
pandoc --pdf-engine=xelatex -V CJKmainfont=KaiTi test.md -o test.pdfbut
但是pandoc抱怨该文件包含无法处理的非utf8字符,确切的错误信息是:
生成PDF时出错。
!未定义的控制顺序。
pandoc.exe:无法解码字节'\ xae':> Data.Text.Internal.Encoding.streamDecodeUtf8With:无效的UTF-8流
根据我在互联网上找到的内容。这主要是由于markdown文件的编码,可能与pandoc无关。我的文件包含很多中文字符和英文字符。我已将其转换为utf-8编码。
按照说明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字符,以便我可以编译错误?
您可以找到降价文件here。
如果您使用的是Linux系统,则可能需要将CJKmainfont
设置为系统中其他有效的中文字体名称。
答案 0 :(得分:1)
问题是由于在没有转义的情况下在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,可以更好地处理此行为:
允许对乳胶错误日志进行宽松解码,这些日志并不总是正确的UTF8编码
现在,调试此类问题更容易。