atom默认打印不保留语法高亮、字体、行距等样式,需用highlight生成带样式的html再转pdf;关键步骤包括安装highlight、指定样式与字体、添加行号、处理空行缩进及编码问题。

Atom 默认打印或导出代码时既不保留语法高亮颜色,也不控制字体、行距、页边距等排版细节——它压根不是为“出版级输出”设计的。想得到可读性强、格式清爽的代码 PDF,必须绕过内置打印流程,用外部工具链重渲染。
为什么 Cmd+P 打印出来的代码又小又挤还黑白?
Atom 的打印功能本质是把编辑器内容当作纯文本快照交给系统,不走 CSS 渲染层,atom-text-editor::shadow 里的所有样式(包括字体大小、行高、颜色)全部失效。即使你设置了 font-size: 14px 和 line-height: 1.6,打印预览里依然按系统默认等宽字体 + 单倍行距 + 无色渲染。
- 行号不会自动对齐(常出现错位或缺失)
- 缩进靠空格硬顶,PDF 里可能被压缩成一团
- 注释灰度、字符串高亮、关键字加粗等全部丢失
- 页面尺寸固定为 A4,但 Atom 不提供缩放或自定义边距选项
用 highlight CLI 生成带样式的 HTML 再转 PDF
这是目前最可控、兼容性最好的方案:把代码交给专业语法高亮工具处理,再用浏览器导出。不需要 Atom 插件,不依赖 Electron 渲染限制。
- 先装
highlight(macOS 可brew install highlight;Ubuntu 用apt install highlight) - 执行:
highlight --out-format=html --style=github-dark --font-size=12pt --line-numbers --wrap-simple file.py > code.html - 用 Chrome 打开
code.html,Cmd+P→ “Save as PDF”,记得勾选Background graphics
关键参数说明:--style=github-dark 控制配色;--font-size=12pt 避免默认太小;--line-numbers 补上左侧行号;--wrap-simple 自动折行长行,防止横向溢出。
print-atom 插件导出 PDF 后排版错乱怎么办?
这个插件底层调用 Electron 的 webContents.printToPDF(),但它对排版控制极弱——没有字体设置、不能调行高、页边距写死。导出后常见问题包括:行号被截断、中英文混排字距异常、长代码块撑破页面。
- 必须确保 Atom 启动时未禁用硬件加速(检查
~/.atom/config.cson里有没有"disable-hardware-acceleration": true) - 插件设置里勾选
Print with syntax highlighting和Include line numbers是基础,但别指望它支持自定义字体或页边距 - 若导出 PDF 中文字体糊成方块,说明系统缺少对应字体,需在
highlight或浏览器中手动指定(如--font="Fira Code")
导出前必须手动处理的三个格式细节
无论用哪种路径,以下三点不提前干预,PDF 一定难看:
- 删除源文件末尾多余的空行——
highlight会把它们渲染成大片空白,撑大页数 - 确认代码缩进统一用 4 个空格(不是 Tab),否则 HTML 渲染时缩进不一致
- 如果含中文注释或标识符,导出前用
iconv -f utf-8 -t utf-8//IGNORE file.py > clean.py过一遍,避免个别字符导致highlight崩溃或乱码
真正麻烦的从来不是“怎么导出”,而是导出前要不要删空行、换缩进、验编码——这些细节没做,再花哨的插件也救不回一页挤满小字的 PDF。











