LaTeX子图排版进阶:从基础横竖排到复杂网格布局

📅 2026/7/15 8:54:14
LaTeX子图排版进阶:从基础横竖排到复杂网格布局
1. LaTeX子图排版基础入门第一次用LaTeX排论文时我被导师打回来的第一稿里全是图片排版问题——有的子图挤成一团有的莫名跑到下一页最崩溃的是编号全部错乱。后来才发现LaTeX的图片排版就像搭积木掌握几个核心参数就能让子图乖乖听话。横排子图是最基础的需求比如对比两组实验数据。用subfloat命令配合\includegraphics就能实现\begin{figure}[!htbp] \centering \subfloat[神经网络结构]{ \includegraphics[width0.45\textwidth]{model_arch.png} } \subfloat[训练曲线]{ \includegraphics[width0.45\textwidth]{loss_curve.png} } \caption{深度学习模型可视化} \label{fig:dl_models} \end{figure}这里有几个关键点[!htbp]中的!表示强制在此位置排版0.45\textwidth确保两图之间有自然间距每个\subfloat可以单独设置子标题竖排子图常见于时间序列展示只需在subfloat之间加\\换行符\begin{figure}[!htbp] \centering \subfloat[第一阶段]{ \includegraphics[width0.8\textwidth]{phase1.png} } \\ \subfloat[第二阶段]{ \includegraphics[width0.8\textwidth]{phase2.png} } \caption{实验过程可视化} \label{fig:phases} \end{figure}注意竖排时建议统一图片宽度否则会出现左右不对齐的情况。我曾因为漏调宽度参数导致论文里的流程图像锯齿一样参差不齐。2. 多子图网格布局实战技巧当需要排列4张以上的子图时就会遇到真正的挑战。去年写毕业论文时我花了三天时间才调出完美的3×3网格。后来发现这套组合技可以应对大多数复杂场景2.1 标准2×2网格\begin{figure}[!htbp] \centering \subfloat[输入数据]{ \includegraphics[width0.48\textwidth]{input.png} } \subfloat[特征提取]{ \includegraphics[width0.48\textwidth]{feature.png} } \\ \subfloat[模型预测]{ \includegraphics[width0.48\textwidth]{predict.png} } \subfloat[结果评估]{ \includegraphics[width0.48\textwidth]{result.png} } \caption{算法全流程可视化} \label{fig:pipeline} \end{figure}关键技巧每行结尾用\\换行保持所有子图宽度一致这里用0.48让两图之间有4%的间距最后一行不需要换行符2.2 不规则网格布局有时我们需要更灵活的排列比如左侧大图配右侧两个小图。这时候minipage就派上用场了\begin{figure}[!htbp] \centering \begin{minipage}[b]{0.6\textwidth} \includegraphics[width\textwidth]{main_result.png} \end{minipage} \begin{minipage}[b]{0.35\textwidth} \includegraphics[width\textwidth]{detail1.png} \\ \vspace{0.5cm} \includegraphics[width\textwidth]{detail2.png} \end{minipage} \caption{主结果与细节展示} \label{fig:main_with_details} \end{figure}这个案例中左侧minipage占60%宽度显示主图右侧minipage内用\\和\vspace控制间距[b]参数让所有minipage底部对齐3. 三大宏包对比与选型指南LaTeX的子图排版主要有三种主流方案我在不同期刊投稿时都踩过坑这里分享第一手实测经验宏包优点缺点适用场景subfigure自动编号已停止维护简单横排/竖排subfig支持跨页配置复杂需要精细控制的论文minipage灵活度最高需手动编号不规则布局subfig宏包是目前最推荐的选择它的\subfloat命令比原生subfigure更强大\usepackage{subfig} ... \begin{figure}[!htbp] \centering \subfloat[][训练集]{ \includegraphics[width0.3\textwidth]{train.png} \label{fig:train} } \subfloat[][验证集]{ \includegraphics[width0.3\textwidth]{val.png} \label{fig:val} } \subfloat[][测试集]{ \includegraphics[width0.3\textwidth]{test.png} \label{fig:test} } \caption{数据集可视化} \label{fig:datasets} \end{figure}警告有些期刊模板会与subfig宏包冲突。去年投顶会时我因为没检查模板要求最后熬夜重写了所有图片排版代码。4. 复杂布局进阶技巧4.1 混合排版技巧当论文需要同时展示照片、曲线图和示意图时可以组合使用多种方法。这是我最近项目中的真实案例\begin{figure}[!htbp] \centering \begin{minipage}[t]{0.3\textwidth} \centering \includegraphics[width\linewidth]{real_photo.jpg} \subcaption{实物照片} \end{minipage} \hfill \begin{minipage}[t]{0.65\textwidth} \centering \includegraphics[width0.48\linewidth]{curve1.png} \includegraphics[width0.48\linewidth]{curve2.png} \\ \subcaption{性能曲线} \end{minipage} \caption{硬件实测结果} \label{fig:hardware} \end{figure}这个排版实现了左侧30%宽度显示实物照片右侧65%宽度放置两组性能曲线\hfill自动填充剩余空间[t]参数让minipage顶部对齐4.2 跨栏排版方案双栏论文中有时需要让图片横跨两栏只需将figure改为figure*环境\begin{figure*}[!htbp] \centering \subfloat[北京]{ \includegraphics[width0.3\textwidth]{beijing.png} } \subfloat[上海]{ \includegraphics[width0.3\textwidth]{shanghai.png} } \subfloat[广州]{ \includegraphics[width0.3\textwidth]{guangzhou.png} } \caption{三地气温对比} \label{fig:cities} \end{figure*}注意跨栏图片最好放在页面顶部或底部用!htbp中的t或b参数指定位置。有次我把关键结果图放在中间位置结果被排版到下一页答辩时差点翻车。5. 常见问题解决方案5.1 子图间距调整当子图间距不符合预期时可以用\hspace和\vspace微调\begin{figure}[!htbp] \centering \subfloat[]{ \includegraphics[width0.4\textwidth]{a.png} \label{fig:a} } \hspace{1cm} % 增加水平间距 \subfloat[]{ \includegraphics[width0.4\textwidth]{b.png} \label{fig:b} } \\ \vspace{0.5cm} % 增加垂直间距 \subfloat[]{ \includegraphics[width0.4\textwidth]{c.png} \label{fig:c} } \caption{可调节间距的子图排版} \label{fig:spacing} \end{figure}5.2 子图编号重置在补充材料中可能需要重新编号使用\setcounter命令\setcounter{subfigure}{0} % 重置子图计数器 \begin{figure}[!htbp] \centering \subfloat[新编号1]{ \includegraphics[width0.45\textwidth]{sm1.png} } \subfloat[新编号2]{ \includegraphics[width0.45\textwidth]{sm2.png} } \caption{补充材料图示} \label{fig:supp} \end{figure}6. 最佳实践建议经过多次论文投稿的教训我总结出这些黄金法则提前测试在写第一段正文前就先排几张复杂图片确认模板兼容性统一风格全文字图宽度尽量使用\textwidth比例值而非绝对尺寸版本控制对图片排版代码单独建立git分支方便回退修改预留空间复杂图片周围留白要充足避免被挤到奇怪的位置最后分享一个我常用的模板代码片段包含大多数常见场景% 在导言区加载这些宏包 \usepackage{graphicx} \usepackage{subfig} \usepackage{caption} % 标准2×2网格模板 \begin{figure}[!htbp] \centering \subfloat[][子图1说明]{ \includegraphics[width0.48\columnwidth]{fig1.pdf} \label{fig:sub1} } \subfloat[][子图2说明]{ \includegraphics[width0.48\columnwidth]{fig2.pdf} \label{fig:sub2} } \\ \subfloat[][子图3说明]{ \includegraphics[width0.48\columnwidth]{fig3.pdf} \label{fig:sub3} } \subfloat[][子图4说明]{ \includegraphics[width0.48\columnwidth]{fig4.pdf} \label{fig:sub4} } \caption{主标题文字} \label{fig:master} \end{figure}