3. 文档元素

3. 文档元素 #

本章代码片段放入阅读指南的 ctexart 文档,额外宏包放在导言区。使用 \chapter 或书籍前后结构时,改用 ctexbook。

3.1 章节和目录 #

3.1.1 章节标题 #

常用层次从大到小为 \part、\chapter、\section、\subsection、\subsubsection、\paragraph、\subparagraph。article 和 ctexart 没有 \chapter。

\section{实验方法}
\subsection{数据来源}
说明数据的来源。

\section[结果]{实验结果与误差分析}
\section*{补充说明}

可选参数“结果”用于目录和页眉中的短标题;星号形式不自动编号,也不自动加入目录。不要在标题文字中手写序号。

3.1.2 目录 #

正文中使用 \tableofcontents,通常编译两次即可生成目录。想让无编号标题进入目录,可写:

\section*{致谢}
\addcontentsline{toc}{section}{致谢}
感谢参与讨论的同学。

本例针对文章类;书籍里的无编号章用 chapter。目录显示到哪一级,由第 8 章的 tocdepth 控制。

3.1.3 文档结构的划分 #

\appendix 将后续最高层级的章节改为附录编号。它是命令,不需要写成环境。

书籍类另有 \frontmatter、\mainmatter 和 \backmatter,分别标记前言、正文和后记:

\documentclass[UTF8,fontset=fandol,openany]{ctexbook}
\title{实验笔记}
\author{小林}
\date{}

\begin{document}
\frontmatter
\maketitle
\chapter{前言}
说明本书的目的。
\tableofcontents

\mainmatter
\chapter{实验}
正文从这里开始。

\appendix
\chapter{数据说明}
附录内容。

\backmatter
\chapter{后记}
总结与致谢。
\end{document}

\frontmatter 使用罗马页码且章不编号;\mainmatter 恢复从 1 开始的阿拉伯页码和正常章编号;\backmatter 继续页码但章不再编号。

3.2 标题页 #

导言区用 \title、\author、\date 提供信息,正文用 \maketitle 输出:

% 导言区
\title{一项简单实验}
\author{小林\thanks{负责数据采集。}\and 小周}
\date{2026 年 9 月}

% 正文
\maketitle

\and 分隔作者,\thanks 生成标题脚注。文章类默认不单独生成标题页,titlepage 选项可以改变这一点。titlepage 环境可用于手工设计封面;学校或期刊模板可能另有专用命令,应优先使用模板接口。

3.3 交叉引用 #

在产生编号的位置设置标签,再按标签引用,不手写编号:

\section{方法}\label{sec:method}
这里介绍方法。

参见第~\ref{sec:method} 节,第~\pageref{sec:method} 页。

\ref 输出编号,\pageref 输出页码。标签应唯一,sec:、fig:、tab:、eq: 之类的前缀便于区分类型。

\label 应紧跟标题命令,图表中应放在 \caption 后面,公式中应放在有编号的那一行。无编号标题不会产生可引用的编号,不要用 \label“补出”一个编号。出现 ?? 时先检查标签,再重新编译。

3.4 脚注和边注 #

这是一个结论。\footnote{补充说明放在页脚。}

\marginpar{简短说明} 在页边生成边注,需要有足够的边注宽度。它的可选参数用于不同侧边的替代文字,不适合放长段落。

普通 tabular 和部分盒子里的 \footnote 无法正常输出页脚脚注。简单情况下可以分开标记与文字:

\begin{tabular}{ll}
项目 & 说明 \\
A & 已校准\footnotemark
\end{tabular}
\footnotetext{校准在测量前完成。}

浮动表格、多脚注和跨页表格需要专门处理,不能把这个简单办法机械地套在所有场景中。minipage 内的脚注则排在迷你页底部。

3.5 特殊环境 #

3.5.1 列表 #

\begin{enumerate}
  \item 收集数据。
  \item 分析结果。
    \begin{itemize}
      \item 检查异常值。
      \item 保存分析过程。
    \end{itemize}
\end{enumerate}

\begin{description}
  \item[输入] 原始测量数据。
  \item[输出] 统计结果和图表。
\end{description}

enumerate 自动编号,itemize 使用项目符号,description 用关键词作标签。\item[自定义标签] 可以替换某一项的标签,但也改变该项的自动编号行为。

标准列表可嵌套到四层。enumitem 能控制标签、间距和缩进;修改列表样式时不要靠手写数字和多个空格。

3.5.2 对齐环境 #

center、flushleft、flushright 分别生成居中、左对齐和右对齐的段落环境。对应声明是 \centering、\raggedright、\raggedleft。

环境会加入上下间距,声明只改变对齐。在图表浮动体内部通常使用 \centering,不再套一个 center。局部使用声明时,要让段落在分组结束前结束:

{\raggedright
这是一段左对齐的文字,右边不强求整齐。\par}

3.5.3 引用环境 #

quote 适合短引用,quotation 适合带首行缩进的多段引用,verse 适合诗歌:

\begin{quote}
写清楚内容,再调整表现形式。
\end{quote}

这些环境改变段落的缩进,不是参考文献引用命令。引用书籍或论文仍应给出来源。

3.5.4 摘要环境 #

article、report 及其常见中文对应类提供 abstract,通常放在 \maketitle 后:

\begin{abstract}
本文比较两种测量方法,并说明误差来源。
\end{abstract}

book 默认不提供这一环境。摘要是否单独成页取决于文档类和选项。

3.5.5 代码环境 #

短代码用 \verb|a_b % literal|,分隔符可换成不出现在代码中的其他字符。多行代码用 verbatim:

\begin{verbatim}
for value in values:
    print(value)
\end{verbatim}

它保留空格和换行,不把反斜线等当普通 LaTeX 命令处理。\verb 通常不能放进另一个命令的参数。

verbatim 宏包提供 \verbatiminput 读入文件;fancyvrb 提供可定制的 Verbatim 环境;需要语法高亮时可用 listings:

% 导言区
\usepackage{listings}
\lstset{basicstyle=\ttfamily\small,breaklines=true}

% 正文
\begin{lstlisting}[language=Python]
for value in range(3):
    print(value)
\end{lstlisting}

3.6 表格 #

tabular 负责单元格,table 负责浮动、编号和标题。两者不是同一个环境。

3.6.1 列格式 #

& 分隔单元格,\\ 结束一行,列格式决定列数和对齐:

\begin{tabular}{lcr}
项目 & 类型 & 数量 \\
样本 A & 对照组 & 20 \\
样本 B & 实验组 & 30
\end{tabular}
列格式 作用
l、c、r 左对齐、居中、右对齐,不自动折行。
p{4cm} 指定列宽,内容折行,顶端对齐。
m{4cm}、b{4cm} 垂直居中、底端对齐,需要 array。
| 竖线。
@{} 删除该处默认的列间留白。
*{3}{c} 重复 3 次 c。
>{...}、<{...} 在列内容前后插入格式,需要 array。

想让一整列居中且自动折行,可以定义列类型:

% 导言区
\usepackage{array}
\newcolumntype{C}[1]{>{\centering\arraybackslash}p{#1}}

然后使用 \begin{tabular}{lC{6cm}}。\arraybackslash 恢复可能被对齐命令改变的表格换行行为。

3.6.2 列宽 #

l/c/r 由内容决定宽度,p 固定单列宽度;要固定整张表的宽度,可用 tabularx 的 X 列:

% 导言区
\usepackage{tabularx}

% 正文
\noindent
\begin{tabularx}{\linewidth}{lX}
项目 & 说明 \\
A & 这一列使用表格剩余的宽度,并允许文字自动换行。
\end{tabularx}

多个 X 列通常平均分配剩余宽度。这里用 \noindent 取消段首缩进,避免整行宽的表格再叠加缩进而溢出。tabular* 则主要通过调整列间距达到指定宽度,不等同于自动折行的 X 列。

3.6.3 横线 #

\hline 画整行横线,\cline{2-3} 只跨第 2、3 列。三线表使用 booktabs:

% 导言区
\usepackage{booktabs}

% 正文
\begin{tabular}{@{}lrr@{}}
  \toprule
  方法 & 测量次数 & 成功次数 \\
  \midrule
  A & 20 & 18 \\
  B & 30 & 27 \\
  \bottomrule
\end{tabular}
三线表,列出两种方法的测量次数和成功次数,数值右对齐。
booktabs 自动处理横线的粗细和上下留白。 下载 LaTeX 源码。

\cmidrule(lr){2-3} 可绘制两端缩短的局部横线。三线表通常不再加竖线或双横线。

3.6.4 合并单元格 #

\multicolumn{列数}{列格式}{内容} 横向合并,multirow 宏包的 \multirow{行数}{宽度}{内容} 纵向合并;宽度 * 表示自然宽度:

% 导言区
\usepackage{booktabs,multirow}

% 正文
\begin{tabular}{@{}lrr@{}}
  \toprule
  \multirow{2}{*}{方法} & \multicolumn{2}{c}{测量值} \\
  \cmidrule(lr){2-3}
   & 第一次 & 第二次 \\
  \midrule
  A & 1.2 & 1.3 \\
  B & 2.1 & 2.2 \\
  \bottomrule
\end{tabular}
两层表头中,方法跨两行,测量值横跨第一次和第二次两列。
横向合并要减少该行的单元格数;纵向合并要保留下一行的空位。 下载 LaTeX 源码。

\multicolumn{1}{r}{内容} 也可只改变一个单元格的格式。

3.6.5 嵌套表格 #

单元格里可以放一个小 tabular,但要留意两层表格的边距和横线能否接齐。只想让单元格内部换行时,makecell 更简便:

% 导言区
\usepackage{makecell}

% 正文
\begin{tabular}{lc}
项目 & 说明 \\
A & \makecell{第一行\\第二行}
\end{tabular}

3.6.6 行距控制 #

\renewcommand{\arraystretch}{1.2} 放大表格的行高;\\[4pt] 在某行下额外留白。用分组限制设置:

{
\renewcommand{\arraystretch}{1.3}
\begin{tabular}{ll}
项目 & 结果 \\
A & 合格 \\
B & 合格
\end{tabular}
}

如果下一行首个单元格以 [ 开头,将内容包在花括号中,避免被上一行的 \\ 当作可选参数。

普通 tabular 不跨页。长表格使用 longtable,不要再把它放入 table 浮动体;详见该宏包手册。

3.7 图片 #

在导言区加载 graphicx,上传图片 demo.png,再在正文插入:

\includegraphics[width=0.7\linewidth]{demo.png}

这个片段依赖项目中真实存在的图片。XeLaTeX 下常用 PDF 矢量图及 PNG、JPEG 位图,无需把所有图片转成 EPS。

width、height、scale 和 angle 分别控制宽、高、比例与旋转角度。同时设宽高时,可加 keepaspectratio 防止拉伸。

\graphicspath{{figures/}{logos/}} 可以设置搜索目录,每个目录各用一对花括号。文件名和路径要与项目文件一致;为了可移植性,优先用简洁的相对路径。

3.8 盒子 #

3.8.1 水平盒子 #

\mbox{内容} 将内容作为不可拆分的一行。\makebox[宽度][对齐]{内容} 还允许指定宽度和 l/c/r/s 对齐方式。

长段落不应放在水平盒子里,否则无法换行,容易溢出。

3.8.2 带框的水平盒子 #

\fbox{内容} 和 \framebox[宽度][对齐]{内容} 在水平盒子外加框。\fboxrule 控制线宽,\fboxsep 控制文字到边框的距离:

{
\setlength{\fboxsep}{6pt}
\fbox{需要核对的数据}
}

3.8.3 垂直盒子 #

\parbox{宽度}{内容} 和 minipage 都允许内部换行。minipage 适合多段文字、图表等较复杂内容:

\noindent
\begin{minipage}[t]{0.46\linewidth}
  \textbf{输入}

  原始测量数据和实验条件。
\end{minipage}\hfill
\begin{minipage}[t]{0.46\linewidth}
  \textbf{输出}

  统计结果、图表和误差分析。
\end{minipage}
两个顶端对齐的迷你页,左侧为输入,右侧为输出,每栏独立换行。
盒子宽度与中间留白之和不能超过当前行宽。 下载 LaTeX 源码。

[t]、[c]、[b] 控制与周围内容的垂直对齐;还可用附加参数指定高度和内部对齐。minipage 不跨页,内部脚注使用独立编号并放在盒子底部。

3.8.4 标尺盒子 #

\rule[抬升量]{宽度}{高度} 生成实心矩形,常用于画线或撑开高度:

\rule{3cm}{0.4pt}

宽度为 0 的 \rule{0pt}{12pt} 不画可见横线,但会影响行高;这与插入空格不同。

3.9 浮动体 #

figure 和 table 允许较大的内容移动到合适的位置。[htbp] 表示允许当前位置、页顶、页底和浮动页,不是固定位置或逐字母尝试的顺序。

% 导言区需加载 graphicx,并上传 demo.png
\begin{figure}[htbp]
  \centering
  \includegraphics[width=0.6\linewidth]{demo.png}
  \caption{实验装置}
  \label{fig:demo}
\end{figure}

图~\ref{fig:demo} 展示了实验装置。

! 放宽部分浮动限制,并不保证放在当前位置。float 宏包的 [H] 取消正常浮动行为,但大图仍可能导致不好看的分页。先理解浮动机制,再决定是否使用它。

\clearpage 会排出积压的浮动体。双栏文档中,figure* 和 table* 用于跨两栏内容,默认可用位置比普通浮动体更受限制。

3.9.1 浮动体的标题 #

\caption{标题} 生成编号;\caption[短标题]{长标题} 用短标题进入插图或表格目录。标签紧跟 \caption,才能引用正确的图表编号。

\listoffigures 和 \listoftables 分别生成插图目录和表格目录。caption 宏包提供标题样式定制和不编号的 \caption*。

3.9.2 并排和子图表 #

并排内容可以用 minipage;如果需要一个总编号以及 (a)、(b) 子编号,用 subcaption:

% 导言区
\usepackage{subcaption}

% 正文
\begin{figure}[htbp]
  \centering
  \begin{subfigure}{0.43\linewidth}
    \centering
    \fbox{\parbox[c][15mm][c]{0.8\linewidth}{\centering 图 A}}
    \caption{方法 A}\label{fig:part-a}
  \end{subfigure}\hfill
  \begin{subfigure}{0.43\linewidth}
    \centering
    \fbox{\parbox[c][15mm][c]{0.8\linewidth}{\centering 图 B}}
    \caption{方法 B}\label{fig:part-b}
  \end{subfigure}
  \caption{两种方法的结果}\label{fig:comparison}
\end{figure}
并排的图 A 和图 B 各有子标题,下方有统一的图 1 总标题。
本例用方框代替外部图片,可直接编译;实际使用时换成 includegraphics。 下载 LaTeX 源码。

引用整体用 \ref{fig:comparison},引用子图用 \ref{fig:part-a} 或 \subref{fig:part-a}。不要同时加载多个功能重叠的子图宏包。

← 排版文字 · 下一章:排版数学公式 →

来源与许可