事情是这样的。
前几天我让 Claude 帮我写一份 OpenList 挂载 115 网盘的教程,准备扔到知识星球给大家。markdown 写完,导出 PDF,打开看了一眼。
我整个人愣住了。。。
标题挤在左上角。章节没分页。callout 框上的 emoji 图标全部显示成空方块。
下载下来看一眼,我就关掉了。
这不是我第一次有这种体验了。
每次想做一份「看起来还能见人」的 PDF 教程,从写完到能发出去,永远卡在排版那一道坎。Word 模板调到一半心态崩了,其他几个工具要么太复杂学不动,要么做出来跟 2005 年的网页似的。
我寻思了一下,我没寻思明白。这玩意为啥这么多年一直没有一个让普通人用着舒服的解决方案?
后来我就自己去解决了。
最近半年我做了七八份 PDF,从挂载网盘的教程到 Claude Code 的进阶玩法,慢慢攒出一套「小白向保姆教程」的风格。前两天我把它打包成了一个 Claude Code skill,开源到了 GitHub 上,仓库名叫 pdf-baomu-tutorial。
这篇我想跟大家聊聊这玩意是怎么做出来的,里面踩了哪些坑,以及为什么我觉得这件事比 PDF 本身更有意思。
先让大家看看做出来的 PDF 长什么样。

灰色渐变封面,三个黑色 tag,副标题写着「小白向保姆教程」。这是我所有 PDF 的封面模板,固定到死。封面之后的章节标题,用的是中文数字零壹贰叁,不是阿拉伯数字 1.1、1.2。Claude Code 引导块是紫色的,提示框是蓝的,警告框是黄的,禁止框是红的,全部锁死。
为啥要锁死视觉呢?
坦率的讲,这事我自己纠结过很久。
一开始我做 PDF 总想搞点变化。新文档新封面,新主题新调色,每份都不一样,觉得这样才显得用心。结果就是每做一份新 PDF 都要花两小时调样式,做出来的东西自己看着都别扭,发出去更不知道收到的人会不会觉得「这家伙今天怎么这么随便」。
后来我想通了。
视觉风格不是装饰,是严肃文档的护城河。
读者只要看一眼封面,就能判断「这是个正经东西」,才会愿意翻到第二页。审美的稳定性比单次的创意更重要。所以我把所有 PDF 的封面、章节序号、引导块的颜色和样式全部锁死,每份新 PDF 直接套同一个 HTML 模板。这样下来,做一份 PDF 的精力 90% 都能花在内容本身,而不是「这个标题字号合不合适」这种本应该是设计师才需要纠结的事。
说真的,这套东西我自己也是反复做了七八份 PDF 才慢慢攒出来的,每一版都在重新调封面、重新选序号。第七份的时候我突然意识到,我手动调的还是上一版同一个地方。
这才决定把它封装起来,放进了 skill 里。
锁死视觉只是基础工程。真正让这套风格立得住的,是另一件事。
我把所有需要敲命令的地方,都改写成「发给 Claude Code 的中文指令」。
什么意思呢,给你看个对比。
传统教程会这么写。第三步,打开终端,输入下面这串命令,然后回车。
接着是一长串看起来像火星文一样的代码。
读者复制粘贴,运气好直接跑通,运气不好报错了,得对着错误信息去 Google 查半天。
我的教程是这么写的。

图里那个紫色框,标题写着「让 Claude Code 帮你 / 把 OpenList 跑起来」。框里面是一段中文。
请帮我用 docker 部署 OpenList。要求,数据目录挂在 /mnt/openlist,端口开 5244,容器名字叫 openlist,跑起来之后告诉我访问地址,以及下一步要做什么。
读者要做的事,就是把这段话整段复制粘贴给 Claude Code。剩下的事 Claude Code 自己会处理。它会自己判断你的电脑要装什么,跑出来报错了它自己去试着修,跑通之后还会告诉你下一步该做什么。
这个变化看起来不大,但意义其实挺重的。
它换了责任主体。
以前是「读者要懂命令、要懂代码、要懂各种工具」。现在是「读者只要会说人话」。
更妙的是末尾那一句「告诉我下一步要做什么」。这相当于把 Claude Code 变成了一个贴身助手,让它主动接管小白最容易迷路的那个时刻,两个步骤之间的断档。我自己写教程时候发现,读者求助消息里有一半都是「我做完第三步了不知道接下来干嘛」。这一句话能解决一大半。
回到这玩意做的另一件事。
第二件让我自己得意的事,是一个会「看页面」的扫描器。
讲这个之前,先聊一个 PDF 排版的老问题,叫章末残行。
就是那种,一章正文写完了,结尾多出一两句话被推到下一页,整页 90% 都是空白。读者翻过去那一刻,第一反应是「这 PDF 是不是出错了」。
传统做法靠手感。作者翻一遍 PDF,看到空白页就回头删两句过渡话。
但手感这玩意儿太不靠谱了。
你写到那一段正起劲,过渡句单看觉得「这写得真有意境」,要回头杀掉自己刚刚得意的句子,下不去手。
我自己也这么干过。结果就是发出去的 PDF 永远有一两页是奇怪的空白。
后来我换了个思路。我做了个小工具,让它替我看页面。
工具的逻辑很简单。每生成一份 PDF,它会把每一页的填充率算出来,然后告诉我哪些页太空了。空得不正常的就回去改文字,空得在合理范围内的就放过。
跑出来的结果是一张表,每页一行,告诉我哪页要改。我改完重跑,直到工具说「没问题」,PDF 就可以交付了。

工具还会顺手把整本 PDF 拼成一张大图,让我一眼看完全文的视觉节奏。上面这张就是我刚刚演示用的 PDF,6 页布局清不清晰、章节分隔够不够利落、有没有大块异常空白,看一眼就知道。
回到这件事上来。
我寻思过为啥这个思路 PDF 工具圈一直没人做。后来想明白了。大家都在做「让你自己排得更好」的工具,没人做「我帮你看哪里排得不好」的工具。
排版里很多事都是这样。你以为靠审美,其实靠数据。
讲到这儿其实有点逗。我做了个让人不用敲命令的 skill,结果安装它本身要敲命令。
不能这么搞。
所以这一节我也不准备给你讲怎么 git clone、怎么 pip install、怎么装字体。这些活儿,全部交给 Claude Code 就行。
打开 Claude Code,把下面这段话原样粘过去。
让 Claude Code 帮你装好这份 PDF skill。
我想用 proem/pdf-baomu-tutorial 这份 skill 来生成中文小白教程风格的 PDF。请帮我装好它。
1. 把仓库 proem/pdf-baomu-tutorial 克隆到 ~/.claude/skills/pdf-baomu-tutorial。
2. 装好 Python 依赖,weasyprint、pillow、pypdf。
3. 装好系统字体,重点是 fonts-symbola,少了它模板里的图标会变空方块(这是我踩过两次的坑)。
4. 帮我做一个最小的测试 PDF(随便挑个主题),确认字体、emoji、章节分页都正常。
5. 装完后告诉我,要触发这个 skill 我该说什么样的话。
剩下的事,不用你操心。Claude Code 会判断系统、装依赖、跑测试。
这就是这份 skill 想推广的工作方式。
别把读者当工程师,把 Claude Code 当工程师就行。
顺着上面再聊聊那个「踩过两次的坑」是什么?
第一次写完 OpenList 教程,导出 PDF,激动地打开看效果。所有 callout 框上的图标全部是空方块。
我心态炸了。
我以为是字体没装。重装一套。还是空方块。
我以为是软件版本太老。换了几个版本。还是空方块。
那一上午我对着同一个空方块来回研究,差点放弃做这个 skill。
后来翻了好久才发现,是另一个不太常见的字体没装。装上之后,所有图标都出来了。
那一刻我觉得做工具这件事真特么折磨人。
但同时我也想,下一个用我这个 skill 的人,他不该再花这一上午去对着空方块发呆。
所以你看那个第 3 点写得那么具体,「重点是 fonts-symbola,少了它模板里的图标会变空方块」。这一句话不是给 Claude Code 看的,是给你看的,让你信任 Claude Code 装的时候不会跳过这一步。
写到这儿想多聊两句。
做这个 skill 没花太多时间,但里面那些细节,封面要不要留底色、章节序号用阿拉伯还是中文、emoji 走哪个字体、扫描器报警阈值定 25% 还是 30%,是我做了七八份 PDF 之后慢慢沉淀下来的。
把这些经验封装成一个 skill 这件事,我越想越觉得有意思。
以前做内容输出,最怕的就是「个人审美没法分发」。我做出一份还看得过去的 PDF,需要的是七八次试错堆出来的肌肉记忆。下一份 PDF 还得再来一次。换个人做,他要么从我这儿要模板(但模板会过时),要么从头再走一遍我走过的路。
skill 系统改变了这件事。
它把「个人审美的肌肉记忆」打包成了「可以分发的工程产物」。下一份 PDF,不只是我能用,任何一个装上 skill 的人都能用。第一份 PDF 就直接拿到我现在这套风格的水平。
这个事我有时候觉得跟摄影里的 LUT 很像。
一个调色师调一张照片需要几年功夫。他把那几年的肌肉记忆压缩成一个 LUT,新手套用就能拿到接近的效果。LUT 不会让新手变成调色师,但能让新手的产出「看起来还行」。
这事在很多领域都发生过。设计师把审美压缩成 Figma 模板,任何人都能快速做出还行的界面。剪辑师把节奏感压缩成预设转场,普通人用剪映就能产出像那么回事的视频。
每一次,都是把「需要老法师才能做的事」变成「按一个按钮就能做的事」。
代价是天花板会被锁住,LUT 调出来的永远比不上手调,Figma 模板做出来的永远比不上专门设计。但这不重要。重要的是下限被拉起来了。70 分的产出从「需要找专业人士」变成了「人人都能做到」。
skill 就是 AI 时代的 LUT。
我自己做的 skill 不止这一个。除了这份 PDF skill,我还做了写公众号文章的、生成封面图的。每一个都是把我自己反复在做的事压缩成一段代码加一份 SKILL.md。
每次做完一个 skill 我都会想,这玩意以后会不会有人用。
老实说我不知道。
开源到 GitHub 上的东西,star 数从 2 涨到 200 也好,从 2 涨到 20 也好,跟我自己的体感差别其实不大。最让我兴奋的,是哪天看到有人 fork 了我的 skill,做了一个我自己没想过的变体。
比如把「把命令翻译成中文指令」这个创意搬到别的领域。在 Excel 教程里把那些复杂公式翻译成「让 Claude Code 帮我把这堆数据按月份算个总和」。
那种「我做的工具被别人在新场景里复用」的瞬间,是创作者最爽的瞬间。
如果你也写过 PDF 教程,觉得排版总差点意思,欢迎装上试试。star、issue、PR 都欢迎。但更欢迎你做出更妙的变体反向教育我。
把自己常用的小工具开源出来,最让人开心的,是看到它在别人手里做出我想不到的东西。
仓库地址放在文末,也可以走阅读原文。
[1] proem/pdf-baomu-tutorial https://github.com/proem/pdf-baomu-tutorial
以上,既然看到这里了,如果觉得不错,随手点个赞、在看、转发三连吧,如果想第一时间收到推送,也可以给我个星标⭐~
谢谢你看我的文章,我们,下次再见。
夜雨聆风