vscode导出markdown为pdf必须依赖插件或工具链:首选markdown preview enhanced(mpe),需先打开预览窗口(ctrl+k v)再右键导出,底层可选puppeteer快照或pandoc+xelatex编译路径,后者支持真正分页、中文字体及印刷级排版,但需正确配置pandoc路径与xelatex引擎。

VSCode 本身不支持直接导出 PDF,必须靠插件或命令行工具链完成;导出质量取决于渲染路径——用 Puppeteer 快照还是 Pandoc + LaTeX,差别极大。
Markdown Preview Enhanced 导出 PDF 的前提条件
它不是点一下就完事的“一键导出”,而是依赖预览状态和底层环境:
- 必须先打开预览窗口(
Ctrl+K V或右键 →Markdown Preview Enhanced: Open Preview to the Side),否则导出内容为空或缺失 Mermaid / 公式 - 首次导出会自动下载 Chromium(约 150MB),需联网且可能被公司防火墙拦截;若失败,可手动运行
puppeteer install - 中文正常显示的前提是文档顶部有 YAML front matter 指定字体 fallback,例如:
---\npdf_options:\n format: 'A4'\n margin: {top: '20px', right: '20px', bottom: '20px', left: '20px'}\n font_family: 'Noto Sans CJK SC, sans-serif'\n--- - 导出按钮只在预览窗口右上角出现(图标为 ↓),不是编辑器右键菜单里的“Export to PDF”——后者是旧版或冲突插件的行为
为什么用 Pandoc 而不是默认 Puppeteer 渲染
默认的 Puppeteer 导出本质是网页截图,字体发虚、页边距不可控、无真正分页逻辑;Pandoc + XeLaTeX 才能生成印刷级 PDF:
- 必须用
xelatex引擎(不是pdflatex),否则中文直接变成方框——错误信息通常是! Package fontspec Error: The font "SimSun" cannot be found. - Pandoc 命令需显式指定:
pandoc input.md -o output.pdf --pdf-engine=xelatex - VS Code 中配置
mpe.exportPandocPath时,路径必须是绝对路径(如/opt/homebrew/bin/pandoc),不能用~或环境变量 - LaTeX 模板或 CSS 控制力更强,但仅部分 CSS 生效(
@page、font-family可用,flex、grid无效)
常见导出失败的三个典型报错及应对
这些不是配置没保存、插件没重启之类的小问题,而是链路中真实卡点:
-
Error: Command failed: pandoc --version→ Pandoc 未安装或路径配错;验证方式:终端执行pandoc --version,若报 command not found,则重装 Pandoc 并确认 PATH -
Failed to launch chrome: spawn ENOENT→ Puppeteer 下载失败或 Chromium 权限被拒;手动执行npx puppeteer install chromium,Windows 用户注意关闭杀毒软件实时扫描 - 导出 PDF 后公式乱码、Mermaid 图空白 → 当前用的是 VS Code 原生预览(
Ctrl+Shift+V),不是 MPE 预览;MPE 预览才支持 MathJax 和 Mermaid 渲染,原生预览不识别$$...$$或```mermaid
真正决定 PDF 质量的,从来不是 Markdown 写得多漂亮,而是你清楚自己走的是哪条导出链路——快照?HTML 中转?还是 LaTeX 编译。选错路径,再好的排版也白搭。











