标题、目录与交叉引用
一篇结构良好的长文档,靠的是「标题层级 + 目录 + 交叉引用」三件套的配合。目录自动生成、图号引用自动更新,是 LaTeX 相对手工排版最大的效率优势之一。但三者的协作依赖辅助文件机制,不理解「两遍编译」就会反复撞上问号。本文把三个机制讲透,并给出常见问题的对照表与标签管理方法。
一、标题层级与编号控制
LaTeX 提供七级结构命令:部分、章(仅中重型文档类)、节、小节、小小节、paragraph、subparagraph。每级标题自动编号,编号深度与目录收录深度由两个计数器控制。
\documentclass{ctexbook}
\setcounter{secnumdepth}{3} % 编号到小小节
\setcounter{tocdepth}{2} % 目录收录到小节
\begin{document}
\chapter{绪论}
\section{研究背景}
\subsection{国内现状}
\subsubsection{华北地区} % 有编号、不进目录
\end{document}
两个计数器的区别要分清:编号深度决定「哪些标题有编号」,目录深度决定「哪些标题进目录」。想出现无编号的章节标题,用带星号的标题命令。星号版不会进目录,需要手工添加目录条目——这在添加摘要、参考文献等无编号前置内容时经常用到。
层级深度的拿捏有个经验法则:正文结构不要超过三级。第四级标题在排版上几乎与正文加粗无异,读者也难以建立心理地图。如果你的内容真的需要第四层,往往说明某一层应该改成列表或独立小节——这是结构设计问题,不是排版命令问题。先在草稿里理清层级,再动计数器,顺序反了一定会返工。
章节标题的措辞也值得讲究:标题是「名词短语」还是「完整句子」,学术界并无定论,但全文统一是底线。随便翻几篇目标期刊的文章,沿用其标题风格即可。把这条写进写作检查清单,见本站论文写作指南的结构章节。
二、目录:自动生成与定制
插入目录只需一行命令。因为目录条目存在辅助文件里,首次编译目录为空,第二遍才完整。配合「编译排错」一章诊断问号问题,比盲目重复编译高效得多。
理解辅助文件机制后,「目录为空」就不再是玄学:第一遍编译时引擎逐行扫描文档,把每个标题的标题名与页码写进辅助文件;第二遍编译时引擎读取这份文件生成目录页。同理,你删掉一节后目录里还残留它的条目,也是因为旧的辅助文件还没刷新。把这套机制讲给合作者听一次,合稿时的互相扯皮会少很多。
| 需求 | 做法 |
|---|---|
| 修改目录标题 | 重定义目录标题命令 |
| 调整层级缩进与点线 | 专用目录定制宏包 |
| 图表目录 | 图目录与表目录命令 |
| 无编号内容进目录 | 手工添加目录条目 |
| 目录条目加超链接 | 加载超链接宏包(默认开启) |
定制目录时有一个原则:先确认默认输出与目标的差距,再决定引入哪个宏包。多数情况下默认行为加一两个开关就够了,不必一上来就深度定制。
目录还有一个实用但被忽略的功能:它是长文档的「导航地图」。写作过程中随时编译看目录,能迅速发现结构失衡——某一节只有半页、某一节却有二十页,这种比例问题在正文里埋头写时完全察觉不到。把目录打印出来圈改结构,是比任何大纲软件都直接的工作方式,因为目录就是最终读者的导航视角。
顺便说一个心理技巧:写不下去的时候去看目录。标题层级天然就是一份写作计划,把空标题当成待办清单逐个填充,比面对一片空白的正文页要有动力得多。很多作者习惯先写完所有标题再填内容,这在 LaTeX 里成本极低——几行结构命令就搭好了全文骨架,剩下的只是填空。
三、交叉引用:标签与引用的完整链条
交叉引用是自动化的核心:先在目标处打锚,再在他处引用编号或页码。三个细节决定了你能否用对。
第一,标签必须放在计数器递增命令之后,习惯写法是紧跟题注之后、节标题之后,否则引用取到的是上一个计数器的编号。第二,标签命名按「类型冒号内容」规范,如用类型前缀区分图、表、公式、节,用正则快速定位时非常清晰。第三,编号引用与页码引用可以混排,组合输出「图三(第五页)」这样的完整指引。
标签命名的词汇选择有个隐藏好处:用稳定的语义词而非临时编号。写成「fig:setup」而不是「fig:three」,因为第八张图迟早会变成第九张,而「实验装置」这个语义不会变。这个习惯在反复增删内容时价值最大——编号类标签会让批量重命名变成噩梦,语义类标签则完全免疫于顺序变动。标签管理看似繁琐,实则是长文档唯一靠谱的导航维护手段,值得在第一天就定好规范。
\section{实验设计}\label{sec:exp}
见本节后续与图 \ref{fig:setup}。
\begin{figure}[htbp]
\centering
\caption{实验装置示意图}\label{fig:setup}
\end{figure}
智能引用宏包能自动补「图」「节」等前缀,中文支持也不错,值得在长文档中采用。标签命名规范一旦确立,全文检索与批量重命名都很方便,正则技巧见本站正则表达式。
交叉引用最让人崩溃的时刻,是交给合作者之后:对方改了几处编号,你收回来编译发现自己引用的「图五」全错位。这正是自动引用的价值所在——只要标签不动,编号怎么变都自动跟随。唯一要向合作者强调的纪律是:不要手工修改任何编号,也不要删除还在被引用的标签。把这条写进协作规范,能省下大量合稿时间。
四、编号格式与重置
章节编号样式可定制:把编号改为中文数字、把图编号改为按章计数,都通过计数器样式命令完成。
| 目标 | 命令 | 说明 |
|---|---|---|
| 章节编号用中文 | 重定义章计数器输出为中文数字 | 中文宏集提供 |
| 图按章编号 | 引入计数器关联宏包并声明 | 报告与书籍常用 |
| 公式编号带章 | 数学宏包的按节编号声明 | 推荐数理类论文 |
| 计数器加一 | 步进或引用步进命令 | 自定义环境时用 |
注意:修改编号格式后旧的交叉引用要重新编译两遍才能更新,别误以为模板坏了。各编号体系相互独立,改前先确认改的是哪一个计数器,否则容易把图的编号格式误改成了公式。
中文编号在长篇综述里有个额外优势:读者一眼能分清章节层级,「第三章第二节」比「3.2 节」在中文语境下更顺。但表格与图的编号习惯上仍保留阿拉伯数字,全文统一后会形成「正文中文、图表数字」的清爽分工。这类风格决策应该一次定好并写进模板说明,避免合作者各自发挥。
五、目录与引用的联动排错
目录与交叉引用共享同一套辅助文件机制,所以问题表现高度相似,可以按下面这张表快速定位。
| 现象 | 检查点 | 修法 |
|---|---|---|
| 目录为空或残缺 | 目录深度过小 | 调大目录深度 |
| 引用显示问号 | 标签拼错或未定义 | 对比标签名,再编译一遍 |
| 引用页码错位 | 插图增删导致分页变化 | 完整编译两遍 |
| 目录条目重复 | 星号标题未正确处理 | 检查手工目录条目 |
| 图号与正文不对应 | 标签未紧随题注 | 调整标签位置 |
写长文档时建议把全部标签集中管理:在笔记里维护一张「标签含义」对照表,或者干脆用注释分块。这方面本站Obsidian 指南提供了可复用的表格模板;若文档由 AI 辅助起草,标签命名一致性检查也值得纳入校对清单,见本站AI 辅助写作。
六、从问号到正确:一条标准处理流程
交叉引用出问题时,按固定流程走最快:先完整编译两遍,因为八成是辅助文件未更新;若仍为问号,用编辑器全局搜索标签名,确认拼写与引用处一致;接着检查标签是否放在了正确的命令之后;最后才考虑宏包冲突。跳过前两步直接怀疑模板,是新手最常见的时间浪费点。
| 步骤 | 动作 | 预期耗时 |
|---|---|---|
| 一 | 完整编译两遍 | 一分钟以内 |
| 二 | 全局搜索标签名核对拼写 | 两分钟 |
| 三 | 检查标签放置位置 | 五分钟 |
| 四 | 排查宏包冲突或求助 | 视情况 |
养成「改完先跑两遍编译再看结果」的习惯,本文这张表里的步骤一就永远用不上了——这正是自动化机制设计的初衷:用确定的流程替代不确定的猜测。标题、目录与交叉引用构成了文档的骨架,骨架稳了,填内容只是时间问题。
