真正能稳定导出pdf的只有markdown preview enhanced(mpe)或pandoc+xelatex:mpe需先预览、yaml配置、公式图表已渲染、css显式引入;pandoc需xelatex引擎、中文字体显式声明、绝对路径配置。

VSCode 原生不支持导出 PDF,所有“一键导出”都依赖扩展或命令行工具链;真正能稳定输出中文、公式、Mermaid 图表的只有 Markdown Preview Enhanced(MPE)配合 Puppeteer 或 Pandoc,markdown-pdf 插件已基本失效——它不执行 JS,导出后 Mermaid 是文字、MathJax 是源码、代码块无高亮、中文字体全方框。
为什么 markdown-pdf(yzane) 现在导出失败率极高
该插件底层仍在用过时的 Chromium 封装或 phantomjs,导致三类硬伤无法绕过:
-
Failed to launch chrome:不是你没装 Chrome,而是插件自带的 Puppeteer 版本与系统 Chromium 二进制不兼容(尤其 macOS Sequoia 和 Windows 11 新版 Edge) - Mermaid / MathJax 不渲染:插件不等待 JS 执行完成就截图,图表区域留白或显示原始文本(如
graph TD; A-->B) - 中文显示为方框:它不支持
@font-face加载本地字体,也未内置中文字体 fallback,CSS 中写的font-family: "Noto Sans CJK SC"完全无效
用 Markdown Preview Enhanced 导出 PDF 的四个硬性前提
MPE 的导出本质是截取预览页 DOM 快照,缺一不可:
- 必须先打开预览窗口:
Ctrl+Shift+V(Windows/Linux)或Cmd+Shift+V(macOS),不能直接在编辑器右键导出 - 文件顶部必须有 YAML front matter 显式声明 PDF 行为,例如:
---\npdf_options:\n format: 'A4'\n margin: {top: '20mm', right: '15mm', bottom: '20mm', left: '15mm'}\n font_family: 'PingFang SC, Microsoft YaHei, sans-serif'\n--- - 若用了自定义 CSS(如
style.css),必须在 front matter 中写css: ./style.css,MPE 不会自动加载同目录 CSS - Mermaid / LaTeX 公式需在预览中已成功渲染——如果预览窗口里图表还是 loading 状态,导出就是空白
用 pandoc + xelatex 实现真正可控的 PDF 输出
当你要目录、页眉页脚、跨页表格或交付印刷级文档时,Pandoc 是唯一靠谱路径。它不依赖浏览器,纯文本流处理,但配置更严格:
- 必须用
xelatex引擎,pdflatex会直接报错:! Package fontspec Error: The font "SimSun" cannot be found. - macOS 需运行:
brew install pandoc && brew install --cask mactex;Windows 推荐scoop install pandoc texlive,再手动安装思源宋体到系统字体库 - 基础命令必须显式指定字体:
pandoc input.md -o output.pdf --pdf-engine=xelatex -V mainfont="Noto Serif CJK SC" - VS Code 中配置
markdown-preview-enhanced.pandocPath必须是绝对路径(如/opt/homebrew/bin/pandoc),不能用~或环境变量
最容易被忽略的是:PDF 效果完全取决于预览是否真实加载完成——哪怕只差 100ms,MPE 截图就可能漏掉 Mermaid 渲染结果;而 pandoc 虽然稳定,但一旦 xelatex 不在 PATH 里,它连报错都懒得打,静默失败。











