Typora、Pandoc、VS Code 导出 PDF 中文字体问题与替代方案

简短回答

三种工具的中文问题原因不同:Pandoc 默认的 pdflatex 引擎不支持中文,要改用 xelatex 并指定中文字体;VS Code 的 Markdown PDF 插件依赖系统字体,Linux 上没装中文字体就会出现方块;Typora 一般正常,出问题多半是主题 CSS 里的字体不含中文。如果不想折腾环境,可以直接用浏览器里的 MarkPDF 导出。

Pandoc:改用 xelatex 并指定中文字体

Pandoc 生成 PDF 默认走 LaTeX 的 pdflatex 引擎,遇到中文会报 Unicode character … not set up for use with LaTeX。换成 xelatex,并告诉它用哪款中文字体:

pandoc input.md -o output.pdf \
  --pdf-engine=xelatex \
  -V CJKmainfont="Noto Serif CJK SC"
  • 字体名称必须是系统里已安装的字体,可以用 fc-list :lang=zh 查看。
  • Windows 可用 "Microsoft YaHei" 或 "SimSun",macOS 可用 "PingFang SC"。
  • 需要先安装 TeX 发行版(TeX Live、MiKTeX 等),体积通常在数 GB。

VS Code(Markdown PDF 插件):安装中文字体或指定样式

常用的 Markdown PDF 插件用内置的 Chromium 渲染,字体来自操作系统。Windows 和 macOS 一般自带中文字体;在 Linux、WSL 或 Docker 里导出时,如果系统没有中文字体就会出现方块。

# Debian / Ubuntu
sudo apt install fonts-noto-cjk
# 然后重新导出

也可以在插件设置 markdown-pdf.styles 里引入一个 CSS,指定 font-family: "Noto Sans SC", "Microsoft YaHei", sans-serif;。

拿一份技术文档模板试试

打开技术文档模板

Typora:检查主题字体

Typora 的导出基于自带的浏览器内核,中文通常可以正常显示。如果换了第三方主题后出现方块或字体很奇怪,打开“偏好设置 → 外观 → 打开主题文件夹”,在主题 CSS 中给 body 的 font-family 加上中文字体即可。

不想配置环境?用浏览器直接导出

  • 不用安装 TeX、插件或字体,打开 转换器 就能用。
  • 内置 Noto Sans 简体中文、繁体中文、日文、韩文字体,预览和 PDF 用的是同一套字体。
  • 文件在本地浏览器中处理,不上传。
  • 局限:不支持 LaTeX 宏包、交叉引用这类排版功能(“图片版”导出的文字也不能选中,文字版则可以)。写论文、需要精细排版时,Pandoc + xelatex 仍是更合适的选择。

常见问题

Pandoc 用 xelatex 后还是方块怎么办?

通常是 CJKmainfont 写的字体没安装或名称不对。用 fc-list :lang=zh family 查看准确的字体名称再填写。

能在 MarkPDF 里用 LaTeX 公式吗?

可以使用 $ … $ 和 $$ … $$ 公式,由 KaTeX 渲染;但不支持完整的 LaTeX 文档和宏包。

MarkPDF 支持离线使用吗?

支持。打开过一次转换器后,可以安装为应用,离线也能编辑和导出(字体会使用缓存或系统字体)。

相关指南