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