推荐一个 Markdown 转 PDF 的流程
有时我们想要排版出一份数学/物理试卷或者 cheatsheet, 可能涉及到数学公式、代码块,并以 PDF 形式给出,但是不希望使用麻烦的 PDF 编辑器或者 Word, 也不希望使用一整套 pdftex. 此时可用此流程,只需用到 VSCode 与一个浏览器。
或者在 AI 时代也可使用基于 VSCode 开发的 Cursor, 下文提及的样式可以交给 AI 定制(建议在提示词中指明使用的 Markdown 插件)。
流程
首先需要下载的 VSCode 插件是 Markdown Preview Enhanced. 这个插件提供了相当丰富的功能,可参考其文档。
我们新建一个后缀为 .md 的文件,填入 Markdown 格式的内容(这支持代码块与使用 KaTeX 嵌入数学公式)。你可以在编辑框中看到对应的高亮辅助。
在编辑这个文件的状态下点击鼠标右键,在菜单中选择 "MPE:打开侧边预览". 结果如下:

现在在侧边预览中点击鼠标右键,在菜单中选择 "Open in Browser" 或者选择 "Export" -> "HTML" -> "HTML (offline)" 然后手动用浏览器打开。此时打开的是你的 Markdown 内容生成的 HTML 文件。
最后使用浏览器的打印功能,选择 "另存为 PDF" 即可。其它打印选项对于转 PDF 也是有效的。
修改 CSS
排版出的效果可能存在令人不满意的地方。例如说,引用的效果看起来很奇怪。由于我们是先生成 HTML 而且 Markdown 天然支持嵌入 HTML, 我们可以在文件的最开头加上:
这些都可以自己调。特别地本文提供在一页上排版成两列的方法(这适用于 cheatsheet)。在开头的 <style></style> 中添上:
}
}
}
然后内容部分仿照这样写(前面的空可以省略):
第一列的内容,这里直接放代码块
第一列的内容,文本
第二列的内容,全是文本
有时我们会希望有合适大小,每列宽度合适的表格,可以参考(在开头的 <style></style> 中添上):
}
}
}
甚至于因为是用浏览器打开的,读者可以嵌入可运行的 Javascript 脚本来编辑内容。
打印控制
对一个较长的文章来说,另存为 PDF 时可能产生令人不适的分页。此时可以使用 CSS 的媒体查询。在开头的 <style></style> 中添上以下内容,用于在单独的一、二、三级标题前分页,并阻止在图片内部分页:
{
}
}
}
这些同样都可以自己调,例如要求表格内容的颜色在 PDF 中保留:
{
}
}
也可以使用 @page 确定打印页面的大小、页边距等。
目录控制
对于更长一些的文章(甚至是书)来说,可以使用创建目录 Table of Contents 的功能。在单独的一行写 [toc], 将会在该处插入一个使用嵌套列表展示的目录。
为了便于管理,可以把不同章节的内容写在不同文件中,然后在主文件中使用 @import "文件路径" 来引入对应文件。具体规则可参考文档的导入文件一节。
主文件将会长成: