书籍、学位论文和长篇报告会让“编辑—编译”循环变得沉重:构建变慢,一个巨大文件难以处理,跨数百页保持编号和引用一致也很麻烦。本章把长文档拆成一种可以每天持续写下去的形态:按章分文件,只编译当前正在编辑的部分,并有意识地区分 draft 模式和干净的完整构建。
规模变大后困难在哪里
文档变大后常见的问题是:(1) 完整编译耗时变长,(2) 单个文件太长,难以跳到目标位置,(3) 章与章之间的交叉引用、编号和目录需要保持一致,(4) 错误位置难以定位。这些问题都可以通过“分割”和“只处理需要的部分”大幅缓解。
把文件拆开
基本结构是每章一个文件,再由一个很薄的主文件把它们串起来。这样更容易找到位置,也更容易与合作者分工,差异也会更小。引入机制(\input / \include / subfiles)在“多文件项目”中详细说明;如果是按章分割,\include 更合适,因为它会在前后换页,并为每章保留自己的 .aux。
只编译正在编辑的章 — \includeonly
如果用 \include 分割,在导言区写 \includeonly{the-chapter-you-are-editing},就只处理那一章。由于每章的 .aux 保留上一次完整构建的值,被跳过章节的页码和交叉引用仍会保持正确。几分钟的完整构建会变成几秒的部分构建。重要习惯是先做一次完整构建。如果在某章的 .aux 尚不存在时就跳过它,引用会停留在 ??,页码也可能是旧值。再配合 latexmk 的增量构建或 -pvc,等待时间几乎可以降到零。
% プリアンブルで編集中の章だけに絞る / restrict to the chapter you’re editing
\includeonly{chapters/ch3}\includeonly 不是用于最终交付的机制。页码和引用依赖过去写出的 .aux 文件,因此提交前一定要移除 \includeonly,完整构建所有章节。对于包含索引、参考文献和目录的文档,部分构建得到的 PDF 只是“工作中的近似结果”,不是最终版。
用 draft 模式快速迭代
文档类的 draft 选项很适合大型文档的试编译。(1) 它会用页边的黑色标记标出溢出的行(overfull hbox),便于发现版面问题。(2) 它不实际绘制图像,而用带文件名的框替代,从而跳过图像处理并加快编译。如果只想让图片进入 draft,可用 \usepackage[draft]{graphicx}。最终输出时切回 final。如果想保留图片显示、只标出 overfull,可使用 \overfullrule=5pt。
\documentclass[draft]{report} % 画像を省き overfull を表示 / skip images, show overfull rules
% 画像だけ draft にする場合 / scope it to images only:
\usepackage[draft]{graphicx}为长项目建立节奏
大型文档不应在“每次都完整精确构建”和“永远只构建片段”之间二选一。日常写作时,用 \includeonly 和 latexmk -pvc 快速迭代当前章节;到里程碑时移除 draft 并构建全文;周末或提交前删除生成文件并做干净构建。这样的节奏能缩短等待,同时尽早发现最终 PDF 的问题。
其他技巧
- 用
latexmk的增量构建或-pvc把等待时间降到最低(见“自动构建”)。 - 对于很重的图,可将 TikZ 外部化或预先渲染为 PDF,让重新构建保持轻量。
- 临时把巨大的部分从
\includeonly中移除,或先注释掉。 - 收尾前用
final做一次完整构建,确定编号、目录、索引和参考文献。 - 提交前移除
draft和\includeonly,重新生成 PDF,并阅读日志中的 warning。