跳到主要内容

charts-plugins

插图与表格

图表是论文的骨架件。本篇讲四件事:插图命令与浮动体、基础表格、学术标准的三线表、合并单元格。

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 浮动体环境。

实例:标准插图

\documentclass{ctexart}
\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}
正弦函数曲线

图 1:正弦函数曲线

「我的图片怎么跑到别的地方去了?」——这不是 bug,是浮动机制在起作用:LaTeX 会为每张图选择不产生大空隙的位置。真需要钉死位置时,用 float 宏包的 [H] 参数(大写,表示 here 且不许动)。

参数含义优先级说明
hhere,就在源码位置只是建议,版面放不下时 LaTeX 会自行调整
ttop,本页顶部学术论文最常见的选择
bbottom,本页底部常与 t 搭配
pfloat page,独立浮动页图表多时自动集中成附录页
!(如 [!h])放宽排版约束强烈要求时叠加使用

基础表格:tabular 环境

表格的语法骨架与矩阵一样:& 分列,\\ 换行,列格式在环境参数里声明。

实例:带全边框的表格

\documentclass{ctexart}
\begin{document}
\begin{tabular}{|l|c|r|} % 列格式:左对齐、居中、右对齐,竖线分隔
\hline % 顶部横线
姓名 & 年龄 & 得分 \\ % & 分列,\\ 换行
\hline
张三 & 20 & 92 \\
李四 & 21 & 88 \\
\hline % 底部横线
\end{tabular}
\end{document}
姓名年龄得分张三2092李四2188\begin{array}{|l|c|r|} \hline \text{姓名} & \text{年龄} & \text{得分} \\ \hline \text{张三} & 20 & 92 \\ \text{李四} & 21 & 88 \\ \hline \end{array}
列格式符号含义
l/c/r该列左对齐 / 居中 / 右对齐
|在该位置画竖线
p{2cm}固定列宽,单元格内自动换行

学术标准:booktabs 三线表

翻开任何一本正规出版物,表格都是「三条横线、零条竖线」——这叫三线表,由 booktabs 宏包提供。

实例:三线表

\documentclass{ctexart}
\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}
算法准确率召回率F1模型 A0.910.880.89模型 B0.930.900.91\begin{array}{lccc} \hline \text{算法} & \text{准确率} & \text{召回率} & \text{F1} \\ \hline \text{模型 A} & 0.91 & 0.88 & 0.89 \\ \text{模型 B} & 0.93 & 0.90 & 0.91 \\ \hline \end{array}

💡 期刊和毕业论文的格式规范几乎都要求三线表。日常作业里用 |\hline 带全边框表格没有问题,但投稿前请务必改成 booktabs

合并单元格:multirow 与 multicolumn

复杂表头需要合并:横向合并用 \multicolumn(LaTeX 内置),纵向合并用 \multirow(需要加载 multirow 宏包)。

实例:双层表头

\documentclass{ctexart}
\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 完全一致。

实例:带编号的表格

\begin{table}[htbp]
\centering
\caption{实验结果对比} % 表题(惯例在表格上方)
\label{tab:result}
\begin{tabular}{lcc}
\toprule
数据集 & 训练集 & 测试集 \\
\midrule
MNIST & 0.99 & 0.98 \\
CIFAR-10 & 0.95 & 0.91 \\
\bottomrule
\end{tabular}
\end{table}

表 1:实验结果对比

数据集训练集测试集MNIST0.990.98CIFAR-100.950.91\begin{array}{lcc} \hline \text{数据集} & \text{训练集} & \text{测试集} \\ \hline \text{MNIST} & 0.99 & 0.98 \\ \text{CIFAR-10} & 0.95 & 0.91 \\ \hline \end{array}

两条不成文的惯例:表题放表格上方,图题放图片下方;图表标签前缀分别用 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}