我绕过Adobe和Microsoft,搭建了一个Git追踪的图书生产流水线
摘要
一名软件开发者描述了如何利用开源工具搭建一个由Git追踪的图书生产流水线,绕过了传统的Adobe InDesign和Microsoft Word工作流程,用于自助出版小说。
暂无内容
查看缓存全文
缓存时间: 2026/05/26 18:57
# 我如何绕过Adobe和Microsoft,构建一套Git追踪的书籍生产管线
来源:https://www.djspeckhals.com/posts/2026-05-22-how-i-bypassed-adobe-and-microsoft-to-build-a-git-tracked-book-production-pipeline/
小说创作中最重要的是故事。角色是否引人入胜?情节是否紧凑且连贯?故事是否可信?与之并重的是写作质量,包括语法、句法、拼写和标点。如果不在这些方面下足功夫,作者就谈不上拥有一本值得出版的书。
而小说的排版和字体设计往往成为事后才考虑的事情。这可能是自出版流程中最依赖技术的环节,对于只想让读者拿到一本精致书籍的作者来说,可能会让人望而却步。我并不是说我的排版流程是最好或最简单的。它适合我,并且满足了我作为独立小说家和软件开发者的双重倾向。
## Word + InDesign + Calibre + Kindle Create
我最初走得比较稳妥。我的三本基督教历史小说——*Heretics of Piedmont*(https://www.djspeckhals.com/books/witnesses-of-the-light/heretics-of-piedmont/)、*The Lord of Luserna*(https://www.djspeckhals.com/books/witnesses-of-the-light/the-lord-of-luserna/)、*Prince of Savoy*(https://www.djspeckhals.com/books/witnesses-of-the-light/prince-of-savoy/),以及我的中篇小说*The Outcast of Chivasso*(https://www.djspeckhals.com/books/witnesses-of-the-light/the-outcast-of-chivasso/)——都是从Microsoft Word文件(DOCX)开始的。绝大多数编辑和校对人员都依赖Word进行修订追踪,而且几乎所有最终的排版程序(Adobe InDesign、Kindle Create、Calibre、Atticus等)都能导入DOCX文件。我规规矩矩地使用了段落样式,而不是手动排版。我的Word文档——名字像“Heretics\-of\-Piedmont\_revised\-final\-3.docx”之类的——成了我的“真理源”,是所有最终格式的共同祖先。
但我不想在Word里为印刷排版。能做到吗?能。能达到专业水准吗?这就有争议了。它的连字符和两端对齐效果远不尽如人意,还有其他弱点。我上次检查(2026年初)时,Word还没有包含桌面出版软件那样的微排版(https://en.wikipedia.org/wiki/Microtypography)功能。
其他选择也存在,但Adobe InDesign是行业标准。专业人士利用其久经考验的功能集,创作出真正堪称艺术的作品。我希望自己的书也能达到这种质量。于是我硬着头皮,一头扎进了Adobe Creative Cloud的世界。起初我不会用InDesign,但我大量阅读并看了很多YouTube上的相关教程。我学习了DOCX样式映射、防止破折号断开、整洁的页边距、页面平衡、漂亮的首字下沉、字距、光学边距、基线网格以及其他细节。虽然术语不少,但工作本身相当令人满足,尤其是在最终产品中注意到这些细节时。(顺便说一句:逛书店时,我总会研究大出版社是怎么做的。)到了写续集时,我再次选择了InDesign。
电子书则完全是另一回事。有很多不错的工具能生成EPUB,但似乎没有哪个在电子书出版领域能像InDesign在印刷领域那样占据主导地位。Kovid Goyal(https://kovidgoyal.net/)在软件界是个熟悉的名字;他是那些让电脑对我们其他人更好用的天才开发者之一。他最著名的贡献可能是Calibre(https://calibre-ebook.com/),一个强大的电子书管理器。你不仅可以用它阅读几乎所有电子书,它还包含了一套出色的电子书创作工具集。从Microsoft Word文档导入非常容易,只要有一点HTML和CSS知识,就能创建出兼容性很好的EPUB。
Kindle则是另一回事。你*可以*将EPUB上传到Kindle Direct Publishing(KDP),它们会将其转换为专有的KFX文件。但我用Calibre创建的EPUB上传从未成功过。亚马逊推荐的方案是他们的Kindle Create(https://www.amazon.com/Kindle-Create/b?ie=UTF8&node=18292298011)程序,这个程序用起来还行,但这又是另一种需要维护的格式。我体内的软件开发者天性在呼唤更好的解决方案。
## 机遇
哪怕做最微小的改动也成了一件苦差事。
- 更新“主”DOCX文件
- 更新InDesign文件,导出PDF,上传到发行商
- 在Calibre中更新EPUB,导出EPUB,上传到发行商
- 在Kindle Create中更新,导出KPF,上传到KDP
我的日常主力机是Linux笔记本,但Kindle Create和InDesign都不能在上面运行(即使有Wine也不行),所以我得切换到家里的Macbook——这算是有钱人的烦恼,但我喜欢自己习惯的环境。
几年前在Hacker News(https://news.ycombinator.com/)上,我发现了Standard Ebooks(https://standardebooks.org/)。我读了该项目的目标并浏览了几本他们出版的作品。说印象深刻那是低估了。他们的书比任何免费电子书都高出好几个档次。我记住了这个项目,并且从那以后读了至少十几本他们不断增长的公有领域作品集(顺便说一句,他们是一个值得支持(https://standardebooks.org/donate)的事业)。要是我的电子书也能达到这种质量就好了。
## 转向
2025年我完成了三部曲的第三部*Prince of Savoy*,准备开始排版。和之前多次一样,我把Word文档导入InDesign并排版了印刷版。但这时我有了一个想法——如果我改用Standard Ebooks(SE)的流程呢?出于几个原因,我使用Calibre将DOCX转换成一个干净的EPUB,之后我通过SE的详细电子书制作指南(https://standardebooks.org/contribute/producing-an-ebook-step-by-step#rough)应用了SE的样式手册(https://standardebooks.org/manual/latest/single-page)。
我很快发现SE是多么严格、多么吹毛求疵、多么固执己见。他们的样式指南几乎不给解释或歧义留任何余地,如果正确遵循,会生成一个在所有设备上都兼容的完美EPUB。这个过程是个苦差事,尤其是第一次做的时候。我告诉自己:“相信流程,它会值得的”,因为很多时候感觉更像是在做家务。现在回想起来,我觉得SE的工具(全部通过强大的`standardebooks`命令行程序(https://github.com/standardebooks/tools)驱动)就像是为电子书排版配备的校对编辑,或者说是代码的linter。以下是SE的linter的一些例子:
- 使用了非法单位设置`font-size`。提示:请使用`em`单位。
- 元数据中的字数与实际字数不匹配。
- 标题元素语义不兼容。提示:标题应为`title`或`ordinal`之一,不能同时是两者。
- 名称斜体内的所有格`'s`。提示:如果斜体中的名字是所有者,`'s`应放在斜体之外。
……还有数百项其他检查。这种严格性对我这个软件开发者来说很有吸引力。让所有lint规则通过需要一些时间,但最终得到一个干净、用Git进行版本控制、可通过`se build`命令轻松构建为EPUB的XHTML源文件目录,这很令人满足。我从工作流中剔除了Kindle Create,因为Standard Ebooks的EPUB在Kindle上转换得也很好。*Prince of Savoy*准备分发,我对它的电子格式非常满意。
三部曲完成后,我想回头修改第一本*Heretics of Piedmont*。我花了三周的业余时间改进小细节(消除几处时代错误、精简文字、添加三幅手绘地图),目的是让它的风格完全与第二、三本一致。但我厌倦了在Windows电脑上——或者更糟,在Office 365 Online上——编辑文档。我小心翼翼地进行了从DOCX到ODT(Open Document Text,LibreOffice Writer的原生格式)的转换。
LibreOffice有缺点吗?当然有。但根据我的经验,它完成了自己的本职工作:我可以打字、检查拼写和语法,也许最重要的是,应用样式。在修订过程中,我为歌曲、信件、诗歌、题词、词汇表条目等添加了语义段落样式;字符样式是文字处理器中较少使用的功能,但它们可以充当超越基本格式的语义。我为每种外语(在*Heretics of Piedmont*中有七种)创建了样式,并应用于文本中大约一百个非英语短语上。还有用于直接思想、创意作品标题、祈祷和强调的字符样式;尽管所有这些在印刷和电子阅读中都呈现为*斜体*,但拥有这些语义是生成符合Standard Ebooks规范的EPUB的关键。语义属性不仅使书籍对使用屏幕阅读器的人更友好,而且还能实现超越简单斜体排版的更多控制。
现在,我有了一个干净、语义丰富的ODT文件:开源、易于编辑,而且我很快发现,也易于解析。我选择这个文件作为我的“真理源”。你可能会问:“为什么不直接用LaTeX?或者Markdown?或者RST?”每个我都考虑过,但我更偏爱在文字处理器中写小说,而不是在文本编辑器中。
现在我需要创建PDF和EPUB。虽然我从未解析过ODT文件,但一点Python、lxml和Claude Code帮我快速草拟了转换脚本。脚本将ODT文件的XML节点映射到一个中间结构,然后可以轻松输出为XHTML(以及后来的LaTeX;这个后面会提到)。我通过一个TOML配置文件(将ODT样式映射到XHTML元素和属性)运行转换脚本,就得到了SE EPUB所需的一切——只有少数几个lint错误需要修复。电子书目标达成!
更困难的路径是印刷PDF。我极度渴望LibreOffice Writer拥有我需要的功能。巧合的是,2025年,几个听起来很像Adobe InDesign能力的微排版功能发布了。会这么简单吗?
不幸的是,并没有。尽管我阅读了更新日志,看到了志愿者开发者在为Writer引入微排版功能上付出的心血,但它还不足以胜任。页面末端参差不齐,底部边缘不平衡,首字下沉看起来很奇怪。我也试了Scribus,但200多页的书让程序运行缓慢。而且结果还不如Writer。我认为我最终还得用InDesign。
这时我想到了LaTeX(https://en.wikipedia.org/wiki/LaTeX)。我从开始编程就听说过它,但从未真正接触过。大学期间(非STEM专业),我提交的论文要么是Word文档,要么是PDF。LaTeX看起来令人生畏,但它拥有我迫切想要的功能:高级排版、自动化能力、版本控制。我用LaTeX测试了书中的一个章节,并将输出与Adobe InDesign的进行比较。几乎无法区分。
现在难点来了:如何将ODT文件转换为TeX?Pandoc(https://pandoc.org/)可以做到,但自定义的Writer样式不会保留。所以我将之前用于ODT→XHTML的转换脚本进行了改造,并泛化以支持ODT→TeX。也许有一天我会开源这些代码,但目前它只针对我自己的独特用例量身定制,我不确定它是否对别人有用。
## 回溯改造
终于,我有了一个可持续、自动化、版本可控的路径来生成我的书的印刷版和电子版——不再需要Word和InDesign这样的专有软件。缺点仍然存在:必须先编辑“主”ODT文件,然后重新生成PDF和EPUB,但这是一个在任何电脑上都能完成的简单过程。我已经从晦涩的二进制(准二进制)`docx`和`indd`文件过渡到了纯文本的`xhtml`和`tex`文件。通过`git diff`精确查看校对修改了什么,是一个巨大的生活质量提升。
尽管我已经对*Heretics of Piedmont*进行了修订和“工具改造”,但我还有另外两本小说和一本中篇小说仍在使用旧工具。我也将这些Word文档转换为语义化的Writer文档,然后我的转换脚本负责剩下的工作。
还有改进空间吗?当然有。我很希望XHTML和TeX只是副产品而非代码。目前我为每本书的XHTML和TeX分别维护了独立的Git仓库,主要是因为我想让ODT文件保持为真理源。对我来说,用ODT写作更容易,而且专业的文字编辑和校对人员也需要文字处理文档来进行工作。
我的流程显然不适合所有人。大多数独立作者要么聘请专业排版师,要么满足于类似我早期流程的方案。最终,读者并不关心排版过程。他们只想读一个好故事。我首先想提供好故事,但如果我也能享受排版的过程,那对我来说也是读者的胜利。
## 附录:LaTeX导言区
对于感兴趣的底层机制,你可以在此处查看完整的LaTeX导言区(https://www.djspeckhals.com/documents/latex-preamble-heretics-of-piedmont/)。
以下是我使用的关键宏包:
- `memoir`(https://ctan.org/pkg/memoir):功能全面的文档创建文档类。
- `fontspec`(https://ctan.org/pkg/fontspec):支持渲染OpenType字体(比如我最喜欢的正文字体Adobe Garamond(https://fonts.adobe.com/fonts/adobe-garamount))。
- `polyglossia`(https://ctan.org/pkg/polyglossia):提供每种语言的连字规则;我偶尔会使用非英语语言,如古奥克语和拉丁语,以增强读者沉浸感。
- `graphicx`(https://ctan.org/pkg/graphicx):支持高级嵌入和调整图片,如地图和作者肖像。
- `microtype`(https://ctan.org/pkg/microtype):提供前面提到的增强每一页外观和可读性的特性——这也是我选择LaTeX的主要原因之一。
- LaTeX(https://www.djspeckhals.com/tags/latex/)
- TeX(https://www.djspeckhals.com/tags/tex/)
- EPUB(https://www.djspeckhals.com/tags/epub/)
- Standard Ebooks(https://www.djspeckhals.com/tags/standard-ebooks/)
- 小说排版(https://www.djspeckhals.com/tags/novel-formatting/)
相似文章
我构建了一个开源审计优先的工作流程,用于AI代理将Web应用转换为原生移动应用
一个开源插件引入了一个审计优先的工作流程,用于AI编程代理将Web应用转换为原生移动应用,使用结构化的Markdown计划和审批关卡来避免过早编码。
我开始认为电子表格代理缺少了让编程代理真正可用的东西:Git
作者认为电子表格代理采用缓慢,因为它们缺乏Git风格的协作基础设施(差异、审查、回滚),而这正是编程代理可用的原因。作者宣布发布了一个早期运行时以弥补这一差距。
@fluixoo: https://x.com/fluixoo/status/2066481993727004860
一条Twitter线程详细描述了AI辅助研究和写作的结构化工作流程,使用NotebookLM进行源材料导入,Claude进行草稿撰写,Obsidian进行知识管理。强调了可靠源材料的重要性以及将研究过程与写作过程分离的重要性。
@_felx:如果12个月前有人告诉我,毫无软件工程背景的 @thomasdesfrancs 能用代码把项目做出来……
一位非工程师据称用代码完成了软件项目,突显开发工具正变得日益亲民。
@leopardracer:此人15分钟读完一本134页的书,一次都没高亮,但全记住了。他把PDF扔进去……
有用户描述某人利用AI工具在15分钟内读了一本134页的书,自动生成原子笔记和闪卡,无需高亮,凸显了使用合适基础设施带来的效率差距。