v1.0.6 —— PDF 带上版本与提交印记
v1.0.6 —— PDF 带上版本与提交印记
《向量》中文译本的第 6 个修订版。正文内容相对 v1.0.5 无变化,本版只做一件事:让每一份 PDF 自己说得出自己是谁。
为什么要做
PDF 一旦离开仓库就没有来源信息。此前 dist/vector-cn.pdf 里除了正文没有任何版本痕迹——v1.0.0–v1.0.5 六个 Release 的附件字节数各不相同,下载下来却看不出是哪一版,也没法判断是不是从干净的工作区构建的。
现在 tools/build_pdf.py 在构建时取 git describe --tags --always 与短 commit,烧进 PDF:
- 扉页(原「日期」那一行):
译本版本 v1.0.6,git f7932ba,2026-09-28 - PDF 元数据(
pdfinfo或阅读器的「属性」里可直接看到):Subject: vector-cn v1.0.6 (f7932ba) built 2026-09-28 Keywords: vector-cn; v1.0.6; f7932ba Creator: tools/build-pdf.py dist/build-report.json新增version/commit/dirty三个字段- 源(
dist/之外)有未提交改动时,扉页追加「(含未提交改动)」、元数据标dirty——拿到 PDF 就能看出它不是从干净提交构建的
实现上的两个坑
- 元数据用
\AtBeginDocument包住\hypersetup:pandoc 模板自己的\hypersetup排在header-includes之后,直接写会被覆盖掉 - 元数据串保持纯 ASCII:中文进 pdfstring 会被转义成一串八进制,
pdfinfo里看不出是什么;下划线会被吞掉(build_pdf.py会显示成buildpdf.py) - dirty 判定排除
dist/:dist是构建脚本自己的产物,用git describe --dirty的话每次构建必然变脏,每份 PDF 都会印「含未提交改动」,等于没有信息量
版本系列质量状况
四轮复核已全部闭环,无遗留待定项。
| 轮次 | 主题 | 主要收获 |
|---|---|---|
| 一 | 全文逐段精读 | 严重 6 / 中等 62 / 轻微 92 |
| 二 | 四项盲区(前附件 / 图注 / 交叉引用 / 机械项) | 严重 1(序言图注编号重复,已修) |
| 三 | 回归复核 + 精炼度量化 | 16 处回归新错;232 条候选甄别出 19 条真翻译腔 |
| 四 | 索引词头 / 强调标记 / 英文残留 / 逐句精读 / 公式说明 | 索引 3 处张冠李戴;严重 1 + 中等 28 |
- 校验:九道自动化守卫(structure / math / terms / fidelity / refs / style / emphasis / residue / baseline),严重项全 0
- 术语表 443 条;汉字 263,934
关于本译本
个人学习与交流用途的非商业翻译。原书的文字、插图与版式之著作权归原作者及原出版社所有,本译本不主张任何权利。如权利人提出异议,译者将立即停止传播。
网页版:https://mypopydev.github.io/books/vector-zh/
附件
vector-cn.pdf—— A4 330 页,含 57 幅插图、353 条注释与 636 条索引(索引沿用原版页码以便回查)。扉页与元数据均带本版印记。
注:v1.0.0–v1.0.5 的附件是该版本发布时的 PDF 原样存档,不含版本印记(这项功能从本版才加入)。
完整变更:v1.0.5...v1.0.6
⚠️ 关于本版附件的版本印记
本版附件是在打 tag 之前构建的,因此 PDF 扉页与元数据里的印记显示为「上一版号 + 提交偏移量」、并带一句「含未提交改动」——这两点都是构建顺序与判定口径造成的,正文内容与 v1.0.6 完全一致(附件就是该 tag 树中的 dist/vector-cn.pdf)。
- 印记显示成「上一版号」:构建时
git describe还取不到本版 tag(正确做法是先打 tag、再从 tag 重建,v1.0.9 起已照此执行); - 「含未提交改动」是误报:当时的判定把校验脚本生成的
review/*.md报告也算作了源改动(同一根因已于 v1.0.9 修正,现在只看真正参与构建的cn-book/与tools/)。
本项目不对已发布的附件做字节替换,故本版附件保持原样,仅在此说明其印记的实际含义。