用 \section 和 \chapter 等命令标记文档结构后,LaTeX 会自动处理标题样式、编号和目录。本章不是单纯罗列命令名,而是讨论如何建立让读者不迷路的结构。我们会依次看标题层级、编号方式及其控制、附录与前置/后置部分的切换,以及目录的生成。
标题层级
标题由一个命令创建。例如写 \section{Introduction},就会按文档类规定的字体和前后空白排出类似 “1 Introduction” 的编号节标题。标题具有 层级(level):从高到低是 \part、\chapter、\section、\subsection、\subsubsection、\paragraph、\subparagraph 七级。每一级都有一个整数 level 值,这个值会成为后面控制编号深度和目录深度的依据。标题不是让文字变粗的装饰,而是告诉读者论述当前位置的路标。
有一个重要注意点:\chapter 只存在于 book 和 report 类。article 类没有“章”这个单位,因此 article 中最高级的标题通常是 \section。\part 可用于所有类,但在 article 中是 level 0,在 book 和 report 中则是位于 \chapter 之上的 level −1。
| 命令 | Level 值 | 单位 | 可用类 |
|---|---|---|---|
\part | −1(book/report), 0(article) | 部 | 所有类 |
\chapter | 0 | 章 | 仅 book / report |
\section | 1 | 节 | 所有类 |
\subsection | 2 | 小节 | 所有类 |
\subsubsection | 3 | 小小节 | 所有类 |
\paragraph | 4 | 行内段落标题(接入正文) | 所有类 |
\subparagraph | 5 | 行内小段落标题(接入正文) | 所有类 |
从 \part 到 \subsubsection 都会形成独立一行的标题;但 \paragraph 和 \subparagraph 不同,它们是 行内标题(run-in heading),标题后不换行,正文直接接在同一行。需要在段落开头放一个短标签时可以使用它们。
\documentclass{report} % \chapter が使える
\begin{document}
\chapter{序論}
\section{背景}
\subsection{先行研究}
\paragraph{要点}ここから本文が続きます。
\end{document}标题层级过细反而会降低可读性。写论文时,可以先用“章”划分大的论点,用“节”划分读者需要跟随的步骤,只有在确实需要辅助说明时才使用“小节”。编号深入到 \paragraph 的设计在规格书或标准文档中可能有效,但在普通报告中往往会让目录过于沉重。
控制编号方式
标题编号由 LaTeX 自动生成。决定编号深入到哪一级的是 secnumdepth 计数器,它保存“会被编号的最底层单位的 level 值”。例如 secnumdepth 为 1 时,\section(level 1)会编号,而 \subsection(level 2)及以下会成为无编号标题。默认值是 article 中为 3,book/report 中为 2;通常在导言区用 \setcounter{secnumdepth}{3} 修改(例如想在 book 中给 subsubsection 编号时)。
如果只想去掉某一个标题的编号,使用命令的 星号形式。例如 \section*{Acknowledgements} 会生成一个 无编号且不会进入目录 的标题。它常用于“不适合编号”的标题,如“引言”“致谢”“结论”等。如果想去掉编号但仍放入目录,需要配合下面介绍的 \addcontentsline。
另一个值得记住的是 可选参数。写成 \section[Short title for the TOC]{Long title shown in the body} 时,正文标题使用长标题,而目录和页眉使用方括号中的短标题。想让很长的标题在目录中保持紧凑时很有用。
\setcounter{secnumdepth}{3} % 小々節まで番号を付ける
\section{結果と考察} % 番号付き:例「3 結果と考察」
\section*{謝辞} % 番号なし・目次にも出ない
\section[手法]{提案手法の詳細な定式化} % 目次には「手法」と出る附录与前置、正文、后置部分
在正文之后放置附录时,在附录开始的位置写一次 \appendix。它不是创建标题的命令,而是 切换编号方式的开关:从此之后章、节计数器会重置,显示变为 A、B、C 等字母。\appendix 之后,只需像平常一样用 \chapter 或 \section 写附录标题。
book 类提供了把书分成三部分的专用命令。\frontmatter 开始前置部分(序言、目录等):页码变为小写罗马数字(i, ii, …),章节不编号(但章标题仍会进入目录)。\mainmatter 开始正文,页码切回阿拉伯数字并从 1 重新计数,章编号也恢复。\backmatter 标记后置部分(参考文献、索引等):页码继续累计,但章节再次不编号。
\documentclass{book}
\begin{document}
\frontmatter % i, ii, … 章は番号なし
\tableofcontents
\mainmatter % 1, 2, … 章を番号付きで
\chapter{序論}
\appendix % 以降の章は A, B, …
\chapter{記号一覧}
\backmatter % 参考文献・索引など
\end{document}生成目录
目录只需放置 \tableofcontents 就会生成。机制是:LaTeX 在处理过程中把各标题的信息写入辅助文件 .toc,下一次处理时再读回该文件来排版目录。因此,要得到正确目录至少需要编译两次(第一次目录仍为空或处于旧状态)。latexmk 这样的构建工具会自动重复所需次数。
目录显示到哪一级由 tocdepth 计数器决定。它的含义与 secnumdepth 对应:目录中列出的最底层单位的 level 值。例如 \setcounter{tocdepth}{1} 时,目录包含 \section(level 1),但省略 \subsection(level 2)及以下。默认值同样是 article 中为 3,book/report 中为 2。注意,编号深度 secnumdepth 与目录深度 tocdepth 可以独立设置。
图目录和表目录也以同样方式生成。\listoffigures 生成图目录,\listoftables 生成表目录,分别使用 .lof 和 .lot 辅助文件(同样需要多次编译)。
要把星号标题等不会自动列出的项目 手动加入目录,使用 \addcontentsline{ext}{unit}{text}。第一个参数 ext 是目标文件扩展名(目录为 toc,图目录为 lof,表目录为 lot);第二个参数 unit 是项目种类(section、chapter、figure 等);第三个参数 text 是要列出的文字。如果要插入非目录行的任意素材(如额外空白),则使用 \addtocontents{ext}{text}。
\tableofcontents
\setcounter{tocdepth}{2} % 小節まで目次に載せる
\section*{はじめに} % 星付きは自動では載らない
\addcontentsline{toc}{section}{はじめに} % 手動で目次に追加
\listoffigures % 図目次
\addtocontents{lof}{\protect\vspace{2ex}} % 図目次に空きを差し込む结构出问题时如何排查
- 如果小节编号变成
3.0.1之类,检查在report或book文档中是否在第一个\chapter之前放了\section或\subsection。 - 如果目录过旧或为空,至少编译两次,让
.toc先写出再读回。latexmk会自动处理。 - 要把星号标题列入目录,把
\addcontentsline放在标题之后。若页码很重要,也要检查它与分页位置的关系。 - 如果附录编号不正确,请记住
\appendix不是标题,而是开关;把它只放一次,紧挨在第一个附录标题之前。