yzane.markdown-pdf插件因依赖失效导致中文乱码、公式裸奔、图表空白,可靠方案是:用markdown-preview-enhanced截取已渲染预览快照,或用pandoc+xelatex指定中文字体生成出版级PDF。

yzane.markdown-pdf 插件现在基本不能用,尤其在中文环境、含 Mermaid / MathJax / 代码高亮的文档中——导出后大概率是方框乱码、公式裸奔、图表空白。这不是你配错了,是它底层依赖的 phantomjs 或旧版 wkhtmltopdf 已彻底失效,且不执行 JavaScript。
真正能落地的方案只有两个:用 markdown-preview-enhanced(MPE)做“预览快照式”导出,或用 pandoc + xelatex 做出版级生成。下面直说怎么做。
为什么 markdown-pdf 导出后全是方框和原始 LaTeX?
根本原因不是字体没装,而是插件根本不加载 CSS @font-face,也不执行 JS 渲染:
-
Mermaid图表 → 插件看到的是graph TD; A-->B文本,不会调 Mermaid.js 渲染成 SVG -
$$\int_0^1 x^2 dx$$→ MathJax 没运行,直接输出 LaTeX 源码 - 中文显示为方框 →
fontFamily配置项只影响 body 默认字体,但代码块、标题、表格等元素的 font-family 未被统一覆盖,且插件禁用了自定义字体加载 - 报错
Failed to launch chrome→ 不是路径问题,是 Chromium 下载失败后插件 fallback 到 phantomjs,而 phantomjs 在 2025 年后已无法启动
用 markdown-preview-enhanced 导出 PDF 的硬性前提
MPE 不是“转换”,而是截取当前预览窗口的 DOM 快照。预览没渲染好,导出必废:
将PDF文件(含扫描件、图片)转换为Markdown格式。接入MinerU和PaddleOCR双引擎,支持扫描件OCR识别、公式表格解析、多语言识别。兼容本地OCR识别。
- 必须用
Ctrl+K V(Windows/Linux)或Cmd+K V(macOS)打开 MPE 自带的预览窗,不能用 VS Code 原生Ctrl+Shift+V - 预览页里要能看到:Mermaid 图已成形、
$$公式已转 SVG、代码块有颜色 —— 缺一不可 - 首次导出会自动下载 Chromium(约 150MB),若卡住,手动装 Puppeteer:
npm install -g puppeteer,再在 VS Code 设置里填markdown-preview-enhanced.puppeteerPath指向可执行文件 - 文档顶部必须加 YAML front matter 显式声明行为,例如:
---\npdf_options:\n format: 'A4'\n margin: {top: '20mm', right: '15mm', bottom: '20mm', left: '15mm'}\n stylesheet: ./style.css\n---其中style.css必须同目录,且含中文字体 fallback:font-family: "Microsoft YaHei", "PingFang SC", sans-serif;
pandoc + xelatex 是唯一可控的长期方案
如果你需要目录、页眉页脚、自动编号、跨页表格,或者交付物要和 Word/LaTeX 团队对齐,绕不开这个组合:
- macOS:
brew install pandoc && brew install --cask mactex(mactex包含 XeLaTeX 和思源宋体等中文字体) - Windows:
scoop install pandoc texlive,再手动安装Source Han Serif或Noto Serif CJK到系统字体库 - 基础命令:
pandoc input.md -o output.pdf --pdf-engine=xelatex -V mainfont="Source Han Serif SC" - 关键点:
--pdf-engine=xelatex启用 Unicode 支持;-V mainfont=...指定中文字体;不加这俩,PDF 一定乱码
pandoc 要求你手动指定字体名,且名字必须和系统字体管理器里显示的一致(比如 Windows 上是 SimSun,macOS 上是 PingFang SC)。


















