现在位置: 首页 > LaTeX 教程 > 正文

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

实例:标准插图

\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
}

浮动体插图的编译效果

环境名后的方括号是「位置建议」,告诉 LaTeX 你希望它出现在哪类位置。

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

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


基础表格:tabular 环境

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

实例:带全边框的表格

\documentclass{ctexart}
\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 宏包提供。

实例:三线表

\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
}

booktabs 三线表的编译效果

期刊和毕业论文的格式规范几乎都要求三线表。日常作业里用 | 和 \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 \\
    \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}