LaTeX 插图与表格
图表是论文的骨架件。本篇讲四件事:插图命令与浮动体、基础表格、学术标准的三线表、合并单元格。
LaTeX 对图表的管理哲学与编号一致:你只管放内容和起标题,位置、编号、引用全部自动。
插图:graphicx 宏包
插图只需要两条命令:导言区加载 graphicx,正文里 \includegraphics 放图片文件。
| 常用选项 | 含义 | 示例 |
|---|---|---|
| width | 宽度,可用相对值 | width=0.8\textwidth(版心宽的 80%) |
| height | 高度 | height=5cm |
| scale | 缩放倍数 | scale=0.5 |
| angle | 旋转角度 | angle=90 |
文件名建议不带扩展名:写 sin 而不是 sin.png,LaTeX 会自动按当前编译器支持的格式查找(XeLaTeX 支持 PDF、PNG、JPG 等),换格式不用改源码。
控制图片大小时优先用 width=\textwidth 的比例值,而不是 scale——前者保证图片永远不超出版心,后者在不同字号设置下可能意外溢出。
浮动体:figure 环境
图片不该直接躺在正文流里,标准做法是放进 figure 浮动体环境。
实例:标准插图
\usepackage{graphicx} % 插图必备宏包
\begin{document}
正弦函数 $y = \sin x$ 的图像如图~\ref{fig:sin} 所示。
\begin{figure}[htbp] % 浮动体环境,位置参数见下表
\centering % 图片在浮动体内居中
\includegraphics[width=0.6\textwidth]{sin}
\caption{正弦函数曲线} % 图题,编号自动生成
\label{fig:sin} % 标签,供 \ref 引用
\end{figure}
\end{document}

环境名后的方括号是「位置建议」,告诉 LaTeX 你希望它出现在哪类位置。
| 参数 | 含义 | 优先级说明 |
|---|---|---|
| h | here,就在源码位置 | 只是建议,版面放不下时 LaTeX 会自行调整 |
| t | top,本页顶部 | 学术论文最常见的选择 |
| b | bottom,本页底部 | 常与 t 搭配 |
| p | float page,独立浮动页 | 图表多时自动集中成附录页 |
| !(如 [!h]) | 放宽排版约束 | 强烈要求时叠加使用 |
「我的图片怎么跑到别的地方去了?」——这不是 bug,是浮动机制在起作用:LaTeX 会为每张图选择不产生大空隙的位置。真需要钉死位置时,用 float 宏包的 [H] 参数(大写,表示 here 且不许动)。
基础表格:tabular 环境
表格的语法骨架与矩阵一样:& 分列,\\ 换行,列格式在环境参数里声明。
实例:带全边框的表格
\begin{document}
\begin{tabular}{|l|c|r|} % 列格式:左对齐、居中、右对齐,竖线分隔
\hline % 顶部横线
姓名 & 年龄 & 得分 \\ % & 分列,\\ 换行
\hline
张三 & 20 & 92 \\
李四 & 21 & 88 \\
\hline % 底部横线
\end{tabular}
\end{document}

| 列格式符号 | 含义 |
|---|---|
| l / c / r | 该列左对齐 / 居中 / 右对齐 |
| | | 在该位置画竖线 |
| p{2cm} | 固定列宽,单元格内自动换行 |
学术标准:booktabs 三线表
翻开任何一本正规出版物,表格都是「三条横线、零条竖线」——这叫三线表,由 booktabs 宏包提供。
实例:三线表
\usepackage{booktabs} % 三线表专用宏包
\begin{document}
\begin{tabular}{lccc} % 三线表不使用任何竖线
\toprule % 顶线,最粗
算法 & 准确率 & 召回率 & F1 \\
\midrule % 中线,较细
模型 A & 0.91 & 0.88 & 0.89 \\
模型 B & 0.93 & 0.90 & 0.91 \\
\bottomrule % 底线,最粗
\end{tabular}
\end{document}

期刊和毕业论文的格式规范几乎都要求三线表。日常作业里用 | 和 \hline 拼全边框表格没有问题,但投稿前请务必改成 booktabs——竖线在专业排版里是「业余」的信号。
合并单元格:multirow 与 multicolumn
复杂表头需要合并:横向合并用 \multicolumn(LaTeX 内置),纵向合并用 \multirow(需加载 multirow 宏包)。
实例:双层表头
\usepackage{booktabs}
\usepackage{multirow} % 纵向合并单元格
\begin{document}
\begin{tabular}{lcc}
\toprule
\multirow{2}{*}{数据集} & \multicolumn{2}{c}{准确率} \\
\cmidrule(lr){2-3} % 只在第 2~3 列画部分横线
& 训练集 & 测试集 \\
\midrule
MNIST & 0.99 & 0.98 \\
CIFAR-10 & 0.95 & 0.91 \\
\bottomrule
\end{tabular}
\end{document}

| 命令 | 语法 | 说明 |
|---|---|---|
| \multirow | \multirow{行数}{*}{内容} | 纵向跨行,跨度行里对应位置留空 |
| \multicolumn | \multicolumn{列数}{列格式}{内容} | 横向跨列,需重写该格的列格式 |
| \cmidrule | \cmidrule(lr){2-3} | 部分横线,(lr) 表示两端留一点空隙,更精致 |
表格标题与整体浮动
表格同样住在浮动体里,环境是 table,其余套路与 figure 完全一致。
实例:带编号的表格
\centering % 表格整体居中
\caption{实验结果对比} % 表题(惯例在表格上方)
\label{tab:result}
\begin{tabular}{lcc}
\toprule
数据集 & 训练集 & 测试集 \\
\midrule
MNIST & 0.99 & 0.98 \\
\bottomrule
\end{tabular}
\end{table}
两条不成文的惯例:表题放表格上方,图题放图片下方;图表标签前缀分别用 tab: 和 fig:,引用时一眼就能认出类型。
表格比版心宽时有两个急救方案:整个 tabular 外套 \resizebox{\textwidth}{!}{...} 等比缩放;或改用 tabularx 宏包自动分配列宽。前者快,后者更规范。
小结
| 需求 | 命令 / 环境 |
|---|---|
| 插图 | \includegraphics[width=0.8\textwidth]{文件名} |
| 图/表浮动体 | figure / table + [htbp] + \centering + \caption + \label |
| 表格骨架 | tabular,& 分列、\\ 换行 |
| 三线表 | booktabs:\toprule \midrule \bottomrule |
| 合并单元格 | \multirow、\multicolumn |
| 部分横线 | \cmidrule(lr){2-3} |
