sublime text 不支持直接导出 pdf,可靠方案只有命令行渲染(如 pygmentize + wkhtmltopdf)或浏览器中转插件;后者在新系统易出错,前者需注意字体、编码、css 兼容性及 pygments 主题限制。

sublime text 本身不支持直接导出 PDF
它没有内置的「导出为 PDF」功能,所有声称“一键转 PDF”的教程,本质都是绕道——要么调用外部工具(如 pygmentize + pdfkit),要么借助浏览器打印,要么依赖插件间接生成。硬点菜单或搜 Export PDF 肯定找不到入口,这是最常卡住的第一步。
靠谱方案只有两种:命令行渲染(推荐)或浏览器中转
插件如 SublimePDF 或 ExportHtml 表面方便,但依赖过时的 webkit 引擎或本地 http 服务,容易在 macos 14+、windows 11 新版或 M1/M2 Mac 上报 Connection refused 或空白 PDF。真正稳定的是自己控制流程:
- 用
subl --monitor或手动保存确保文件已写入磁盘(未保存的 buffer 不会被外部工具读到) - 终端执行:
pygmentize -f html -O full,style=vs,linenos=inline "$PWD/your_file.py" | wkhtmltopdf - "your_file.pdf" -
wkhtmltopdf需提前装好(brew install wkhtmltopdf或从官网下静态二进制),别用 apt 安装的旧版——它默认不支持 CSS Grid,高亮会错位 - 如果代码含中文,加参数
-O encoding=utf-8,否则 PDF 里是方块
字体和行号对齐是最大隐形坑
PDF 里代码缩进错乱、行号偏移半行、关键字颜色发灰……八成是字体没对齐。Sublime 默认用 Consolas 或 Monaco,但 wkhtmltopdf 渲染时只认系统已安装的等宽字体:
- linux 下需手动安装
fonts-dejavu或fonts-liberation,然后在pygmentize的-O里指定:font_name="DejaVu Sans Mono" - macOS 上
Menlo是安全选择,但得确认它在Font Book中状态为「已启用」,禁用状态会导致回退到Helvetica,等宽失效 - 行号列宽不够?加
-O css="@media print{.linenos{width:4em}}这类内联样式(注意引号嵌套要转义)
别信「所见即所得」——Sublime 主题 ≠ PDF 输出效果
你看到的 Monokai 或 Dracula 主题,在 PDF 里大概率只剩黑白或灰阶。Pygments 支持的主题有限,style=monokai 实际对应的是 Pygments 自带的 monokai,不是 Sublime 插件里的同名主题。更麻烦的是:Sublime 的括号高亮、当前行背景色、折叠标记这些 ui 层特性,任何导出流程都带不走。
真要保留视觉一致性,唯一办法是截图 + 拼接——用 maim(Linux)或 screencapture(macOS)截取代码区域,再用 convert(ImageMagick)合成 PDF。但这意味着放弃可复制文本、无法搜索、文件体积翻倍。权衡点就在这里:你要的是「能打印的文档」,还是「能被引用的代码资产」。