结构、标题与目录

\section\chapter 等命令标记文档结构后,LaTeX 会自动处理标题样式、编号和目录。本章不是单纯罗列命令名,而是讨论如何建立让读者不迷路的结构。我们会依次看标题层级、编号方式及其控制、附录与前置/后置部分的切换,以及目录的生成。

标题层级

标题由一个命令创建。例如写 \section{Introduction},就会按文档类规定的字体和前后空白排出类似 “1 Introduction” 的编号节标题。标题具有 层级(level):从高到低是 \part\chapter\section\subsection\subsubsection\paragraph\subparagraph 七级。每一级都有一个整数 level 值,这个值会成为后面控制编号深度和目录深度的依据。标题不是让文字变粗的装饰,而是告诉读者论述当前位置的路标。

有一个重要注意点:\chapter 只存在于 bookreportarticle 类没有“章”这个单位,因此 article 中最高级的标题通常是 \section\part 可用于所有类,但在 article 中是 level 0,在 bookreport 中则是位于 \chapter 之上的 level −1。

命令Level 值单位可用类
\part−1(book/report), 0(article)所有类
\chapter0仅 book / report
\section1所有类
\subsection2小节所有类
\subsubsection3小小节所有类
\paragraph4行内段落标题(接入正文)所有类
\subparagraph5行内小段落标题(接入正文)所有类

\part\subsubsection 都会形成独立一行的标题;但 \paragraph\subparagraph 不同,它们是 行内标题(run-in heading),标题后不换行,正文直接接在同一行。需要在段落开头放一个短标签时可以使用它们。

latex
\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} 时,正文标题使用长标题,而目录和页眉使用方括号中的短标题。想让很长的标题在目录中保持紧凑时很有用。

latex
\setcounter{secnumdepth}{3}        % 小々節まで番号を付ける
\section{結果と考察}                 % 番号付き:例「3 結果と考察」
\section*{謝辞}                      % 番号なし・目次にも出ない
\section[手法]{提案手法の詳細な定式化}  % 目次には「手法」と出る

附录与前置、正文、后置部分

在正文之后放置附录时,在附录开始的位置写一次 \appendix。它不是创建标题的命令,而是 切换编号方式的开关:从此之后章、节计数器会重置,显示变为 ABC 等字母。\appendix 之后,只需像平常一样用 \chapter\section 写附录标题。

book 类提供了把书分成三部分的专用命令。\frontmatter 开始前置部分(序言、目录等):页码变为小写罗马数字(i, ii, …),章节不编号(但章标题仍会进入目录)。\mainmatter 开始正文,页码切回阿拉伯数字并从 1 重新计数,章编号也恢复。\backmatter 标记后置部分(参考文献、索引等):页码继续累计,但章节再次不编号。

latex
\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 是项目种类(sectionchapterfigure 等);第三个参数 text 是要列出的文字。如果要插入非目录行的任意素材(如额外空白),则使用 \addtocontents{ext}{text}

latex
\tableofcontents
\setcounter{tocdepth}{2}                       % 小節まで目次に載せる

\section*{はじめに}                            % 星付きは自動では載らない
\addcontentsline{toc}{section}{はじめに}        % 手動で目次に追加

\listoffigures                                % 図目次
\addtocontents{lof}{\protect\vspace{2ex}}      % 図目次に空きを差し込む

结构出问题时如何排查

  • 如果小节编号变成 3.0.1 之类,检查在 reportbook 文档中是否在第一个 \chapter 之前放了 \section\subsection
  • 如果目录过旧或为空,至少编译两次,让 .toc 先写出再读回。latexmk 会自动处理。
  • 要把星号标题列入目录,把 \addcontentsline 放在标题之后。若页码很重要,也要检查它与分页位置的关系。
  • 如果附录编号不正确,请记住 \appendix 不是标题,而是开关;把它只放一次,紧挨在第一个附录标题之前。