Pandoc 报错 “Unicode character … not set up for use with LaTeX”(中日韩文字)

简短回答

Pandoc 默认使用 pdflatex,而 pdflatex 不支持中日韩文字,遇到第一个汉字就会中止。改用 --pdf-engine=xelatex 并加上 -V CJKmainfont="<中文字体>" 即可。字体要覆盖你写的语言:微软雅黑没有韩文字形,韩文会被悄悄丢掉。

报错复现

$ pandoc test.md -o out.pdf
Error producing PDF.
! LaTeX Error: Unicode character 学 (U+5B66)
               not set up for use with LaTeX.

使用 Pandoc 3.5 和 MiKTeX 25.12(pdfTeX 4.23),在横评测试文件上复现。

原因

pdflatex 使用 8 位字体,只认识宏包映射过的字符,汉字默认没有映射。xelatex 和 lualatex 直接读取 Unicode,使用系统中的 OpenType 字体,只要选了含中文字形的字体就能排版。

不用安装任何软件,直接转换中文文档

打开中文示例

修法:xelatex + 中文字体

pandoc input.md -o output.pdf \
  --pdf-engine=xelatex \
  -V CJKmainfont="Noto Sans CJK SC"
  • 实测:在 Windows 上把字体换成 -V CJKmainfont="Microsoft YaHei"(Pandoc 3.5、XeTeX 4.16),中文和日文都能正确生成。
  • 字体必须已安装:Linux/macOS 可用 fc-list :lang=zh family 查看,Windows 在“设置 → 字体”中查看。
  • 字体要和语言对应:简体用 SC,繁体用 TC,日文用 JP,韩文用 KR。用中文字体排日文时,部分汉字会显示成中文字形,见汉字字形不对。
  • 韩文需要含韩文字形的字体。 实测 CJKmainfont="Microsoft YaHei" 能顺利生成 PDF,但韩文那一行是空的。请改用 Malgun Gothic、Noto Sans CJK KR 等韩文字体。
  • Windows 常用:"Microsoft YaHei"(简体)、"Yu Gothic"(日文)、"Malgun Gothic"(韩文)。macOS:"PingFang SC"、"Hiragino Sans"、"Apple SD Gothic Neo"。

实测踩过的坑

  • xelatex 不指定字体不会报错。 不加 CJKmainfont 时,xelatex 照样生成了 PDF,但所有中日韩文字都是空白。一定要打开 PDF 检查。
  • 混合文字的文档。 测试文件里还有带零宽不连字(U+200C)的波斯文。设置 CJKmainfont 后,Pandoc 3.5 的模板报错 ! Missing control sequence inserted … \protected\def ^^^^200c;只含中日韩文字的文件则正常。
  • 阿拉伯文、印地文、孟加拉文需要各自的字体和文字设置,见阿拉伯文、波斯文。

不想折腾 TeX?

MarkPDF 在浏览器里用 Noto 字体把 Markdown 转成 PDF,不需要安装 TeX。它没有交叉引用、参考文献这类 LaTeX 功能,需要这些时还是用 Pandoc。

常见问题

能继续用 pdflatex 吗?

需要 CJKutf8 等宏包,并在中文内容外手动加标记。直接改用 xelatex 或 lualatex 更简单。

xelatex 和 lualatex 选哪个?

两者都支持 fontspec 字体。配合 Pandoc 时,xelatex + CJKmainfont 最常见;lualatex 可以配合 luatexja 宏包使用日文排版规则。

PDF 生成了,但有些字不见了?

所选字体缺少这些字形(例如中文字体里没有韩文)。换成对应语言的字体,或 Noto Sans CJK 这样的泛中日韩字体。

相关指南