Export to PDF菜单灰色是因为Sublime未找到pandoc或lualatex,且文件语法未设为source.gfm;需确认终端中pandoc --version和lualatex --version有输出、字体存在、PATH配置正确,并使用含全路径的自定义.sublime-build。

Sublime Text里Export to PDF菜单为什么总是灰色?
不是插件没装,是Sublime根本没找到pandoc或它依赖的lualatex。菜单灰掉只有两个原因:当前文件语法没设为 source.gfm,或者Sublime 的 PATH 里找不到 pandoc。
先在终端确认:pandoc --version和lualatex --version都有输出才算过关;再检查字体:fc-list | grep "Noto"(Linux/macOS)或打开字体册确认Noto Sans CJK SC存在。
- Mac用户尤其容易栽在这:brew install pandoc后真实路径通常是
/opt/homebrew/bin/pandoc,而Sublime默认只查/usr/bin - Windows用户若安装时没勾选「Add to system PATH」,也会卡在这一步
- 别碰已废弃的
MarkdownPDF插件——它硬编码调用淘汰多年的phantomjs,2026年起完全无法运行
怎么配一个真正能用的 Markdown → PDF 构建系统?
推荐用MarkdownPreview插件 + 自定义.sublime-build,比改插件设置更稳、更透明。
菜单→ Tools → Build System → New Build System…,粘贴以下内容并保存为Markdown2PDF.sublime-build:
{
"cmd": ["/opt/homebrew/bin/pandoc", "-s", "--pdf-engine=lualatex", "-V", "mainfont=Noto Sans CJK SC", "-o", "$file_base_name.pdf", "$file"],
"selector": "source.gfm",
"path": "/opt/homebrew/bin:/usr/local/bin:/usr/bin",
"working_dir": "$file_path"
}
-
cmd中的pandoc必须写全路径,不能只写"pandoc"——否则报command not found -
selector必须是source.gfm,否则按Ctrl+B不触发构建 -
path要列出所有可能的bin目录,用英文冒号分隔;不确定就全写上 -
-V mainfont=参数不能省,中文乱码、段落挤在一起,90% 是这里没填
导出PDF中文乱码或排版崩了怎么办?
这不是Sublime的问题,是pandoc渲染链路缺字体声明或LaTeX引擎配置不匹配。
- 如果你用的是
lualatex(推荐),必须显式指定中文字体;如果系统没装对应字体,pandoc可能静默失败或报错Font "Noto Sans CJK SC" not found - macOS/Linux常用
Noto Sans CJK SC,Windows可换为SimSun或Microsoft YaHei - PDF生成失败时,先在终端手动跑一遍相同命令,看是否报错;
pandoc不会把LaTeX错误原样透传给Sublime,容易误判为“没反应”
要不要装LaTeX环境?
要,但只装lualatex子集就够了,不用整个MacTeX或TeX Live。
- macOS:用
brew install --cask mactex太重,推荐brew install --cask basictex+sudo tlmgr update --self && sudo tlmgr install collection-langchinese lualatex - Linux:
sudo apt install texlive-latex-recommended texlive-fonts-recommended texlive-fonts-extra lmodern - Windows:直接装
MiKTeX,安装时勾选「Install missing packages on-the-fly」 - 验证方式不是
latex --version,而是lualatex --version;pandoc -o test.pdf test.md失败时,95% 是lualatex缺失或字体未注册
pandoc、lualatex、字体、PATH、语法识别五层对齐;漏掉任何一层,都会静默失败或生成乱码PDF。最省事的验证顺序是:终端跑通 → Sublime里Ctrl+B跑通 → 中文能显示 → 段落不挤在一起。


















