Markdown 转 PDF 多语言横评:15 种文字、可复现的测试

简短回答

默认设置下,Pandoc 的 LaTeX 引擎要么直接报错(pdflatex),要么悄悄丢掉所有非拉丁文字(xelatex、lualatex)。基于 Chromium 的工具(md-to-pdf、MarkPDF)在装有相应字体的机器上 15 种文字都能正确显示。可以下载测试文件,用同样的命令检查你自己的环境。

测试文件与方法

测试文件:markpdf-multilingual-test.md(简体中文、繁体中文、日文、韩文、汉字字形差异、阿拉伯文、波斯文、乌尔都文、印地文、孟加拉文、泰文、泰米尔文、越南文、西里尔/希腊/拉丁扩展字母,以及代码、表格、链接和多页正文)。

  • 环境:Windows 11,系统默认字体(含微软雅黑、Yu Gothic、Malgun Gothic、Nirmala UI、Leelawadee UI),测试日期 2026-11-06。
  • 字形:用 pdftoppm 渲染页面图片,人工检查。
  • 文字提取:pdftotext -enc UTF-8,每种文字搜索一个短语,再加文件最后一行。
  • 页数和大小:pdfinfo 和文件大小。除表中注明外均为默认设置。

测试结果

工具与版本命令结果文字可提取页数 / 大小
Pandoc 3.5 + pdflatex(MiKTeX 25.12)pandoc test.md -o out.pdf报错退出:Unicode character 学 (U+5B66) not set up for use with LaTeX––
Pandoc 3.5 + xelatex(XeTeX 4.16)--pdf-engine=xelatex生成了 PDF,但中日韩、阿拉伯文、印度系文字、泰文、泰米尔文、西里尔和希腊字母全部空白仅拉丁字母和越南文4 / 28 KB
Pandoc 3.5 + xelatex + 中文字体--pdf-engine=xelatex -V CJKmainfont="Microsoft YaHei"波斯文中的零宽不连字导致 TeX 报错。只含中日韩的文件可以生成,但韩文缺失(该字体没有韩文字形)––
Pandoc 3.5 + lualatex(LuaHBTeX 1.24)--pdf-engine=lualatex与 xelatex 相同:非拉丁文字缺失仅拉丁字母和越南文4 / 40 KB
md-to-pdf 5.2.5(Chrome 157)md-to-pdf test.md所有文字正常(使用 Windows 系统字体)。阿拉伯文段落按从左到右排列;汉字字形随 lang 属性变化14 项全部4 / 203 KB
MarkPDF 文字版(Chrome 157)转换器 → 下载 PDF(文字版)所有文字使用 Noto 字体正确显示;RTL 段落从右到左;lang="ja" 的文字为日文字形14 项全部5 / 511 KB
MarkPDF 图片版(html2canvas 1.4.1)转换器 → 快速下载(图片版)所有文字正常,与预览一致无(页面是图片)6 / 1,883 KB
Pandoc 使用 xelatex:中日韩段落是空白的
Pandoc + xelatex,默认字体:标题正常,中日韩正文空白。pdflatex 则直接报错。
MarkPDF 文字版:同样的中日韩段落显示正常
MarkPDF 文字版中的相同段落。

在 MarkPDF 中试试同样的测试内容

打开转换器

结果说明

  • LaTeX 引擎需要为每种文字单独指定字体。 不指定时,xelatex 和 lualatex 不会报错,而是直接丢字,所以要逐页检查。可用的命令见 Pandoc “Unicode character … not set up” 报错 和 阿拉伯文、波斯文字母断开。
  • 基于浏览器的工具依赖系统字体。 md-to-pdf 在这里全部正常,是因为 Windows 自带这些文字的字体;在精简的 Linux 服务器或 Docker 镜像里,同样的命令通常会显示方块,需要先安装中日韩和印度系字体。
  • 分页:生成了 PDF 的工具都没有把一行文字切成两半。MarkPDF 图片版会把整块内容移到下一页,留白更多,也多了一页。
  • MarkPDF 的局限:图片版没有文字层;文字版要通过浏览器的打印窗口,需要自己选择“另存为 PDF”;没有 LaTeX 那样的排版功能(交叉引用、参考文献)。

Typora、Obsidian、VS Code 插件等图形界面工具需要手动测试,测试后会连同版本号补充到本页。

常见问题

我能复现这些结果吗?

可以。下载测试文件,安装表中的版本,运行相同的命令即可。结果与系统字体有关,对比时请注明操作系统和已安装的字体。

为什么 md-to-pdf 在这里正常,在我的服务器上却出方块?

它用 Chromium 渲染,依赖机器上安装的字体。请在服务器或 Docker 镜像中安装中日韩和印度系字体(例如 Noto 字体包)。

为什么 MarkPDF 文字版文件更大?

它为每种文字嵌入了 Noto 字体的子集,这样 PDF 在任何设备上看起来都一样。

相关指南