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