我正在尝试在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

遵循herehere指令。我已验证系统语言环境设置为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.mdpandoc转换为pdf时。我仍然遇到相同的错误消息,这表明该文件仍然包含非utf8字符。

我的问题

如何确定导致问题的文件的哪个部分,或者如何真正从文件中删除非utf8字符,以便可以错误地对其进行编译?

其他资讯
  • 您可以找到 Markdown 文件here
  • 如果使用的是Linux系统,则可能需要在系统中将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序列。有关更多信息,请参见herehere

    更新2017.12.29
    使用release of Pandoc 2.0.6,可以更正确地处理此行为:



    现在,调试此类问题更加容易。

    关于bash - 即使我的文件是有效的utf-8编码文件,pandoc也提示utf-8解码错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47954642/

    10-14 16:52
    查看更多