资讯动态

Overleaf LaTeX多行图片排版指南:minipage、subcaption与tabular全解析

发布时间:2026/10/4 8:55:23 来源:尧图企业网站定制
最近被好几个同学问到同一个问题在Overleaf里用LaTeX插图片单张图大家都会但一旦涉及到两行三行、甚至一个2x2的网格图就不知道怎么排了。说实话多行图片算是LaTeX排版里非常典型的需求论文里对比实验结果、展示多张子图、放数据可视化截图都会用到而且Overleaf作为在线LaTeX平台因为不用本地装环境、打开浏览器就能编译已经成为很多人写论文的首选工具。这篇文章我就把自己在Overleaf里插入多行图片的几种方案、参数细节和踩坑记录全部分享出来从minipage手动分栏到subcaption子图环境再到tabular网格法每一步都会给出可以直接复制用的代码并结合实际标注清楚为什么这样写。无论你是刚开始用LaTeX写课程报告还是正在赶期刊论文的配图排版这篇都能帮你少走弯路。1. 正式动手前先把Overleaf环境和宏包理清楚1.1 为什么我推荐用Overleaf而不是在本地装LaTeX先说一个扎心的现实本地安装LaTeX这件事劝退了不少新手。TeX Live或者MiKTeX动辄几个G的安装包配环境变量、配置编辑器、更新宏包每一步都可能出问题。网上搜“latex下载安装教程”能搜出一堆经验帖说明大家的痛点高度一致。而Overleaf的优势就在于它把这一切都省掉了注册账号、新建项目、选模板、开始写基本上五分钟内就能跑通第一个文档。有人可能会担心在线平台不安全或者不稳定但从我这些年的实际体验来看Overleaf的实时编译预览做得相当成熟多人协作也很流畅对于绝大多数论文写作场景完全够用。更重要的是Overleaf自带了一套完整的TeX Live环境graphicx、subcaption、float这些常用宏包都预装好了不需要像本地环境那样手动安装宏包这为后续插入多行图片扫平了最大的障碍。还有一点很关键Overleaf支持编译引擎切换在菜单里可以选pdfLaTeX、XeLaTeX、LuaLaTeX。如果你要写中文文档字体和中文支持这块建议直接用XeLaTeX配UTF-8编码基本不会踩乱码的坑。我见过太多人在本地死活编译不过去结果换了Overleaf一下就正常了其实就是引擎和宏包版本的问题。1.2 插图必须准备的基础宏包在Overleaf里新建一个项目后你看到的文档结构通常是这样的一个.tex主文件加上项目文件夹里的图片资源。插入多行图片前我建议先把下面这些宏包加进导言区它们是排版的基础设施\usepackage{graphicx} % 插图核心宏包必装 \usepackage{float} % 提供[H]强制位置选项 \usepackage{subcaption} % 子图环境多图排版神器 \usepackage{caption} % 自定义图注样式如果你需要图片按表格排列可能还需要tabularx或者multirow这些宏包不过基础场景下上面四个就够了。graphicx提供了\includegraphics命令这是所有插图操作的起点float宏包提供了[H]这样强制图片待在当前位置的参数subcaption专门用来生成带编号的子图比subfig更现代、更稳定caption则让你能调整图注的字体、位置和格式。另外要给图片一个统一定位方式推荐在导言区加一行\graphicspath{{figures/}}意思是指定图片都放在figures/目录下。这样写\includegraphics{example.png}的时候LaTeX会自动去figures/目录找文件路径管理清爽很多。2. 插入多行图片的三种核心方案总有一款适合你2.1 用minipage手工分栏最灵活也最直观minipage是LaTeX里非常有用的“盒子”工具。你可以把页面看成一个大盒子minipage就是在里面画出几个小隔间每个小隔间里可以单独放图片、文字、表格甚至嵌套别的环境。插入多行图片的思路就是第一行放两个minipage中间用换行符切到第二行再放两个minipage。一个标准的2行2列图片排版代码长这样\documentclass{article} \usepackage{graphicx} \usepackage{float} \begin{document} \begin{figure}[H] \centering \begin{minipage}[t]{0.48\textwidth} \centering \includegraphics[width\linewidth]{images/fig1.png} \caption{第一张图} \label{fig:1} \end{minipage} \hfill \begin{minipage}[t]{0.48\textwidth} \centering \includegraphics[width\linewidth]{images/fig2.png} \caption{第二张图} \label{fig:2} \end{minipage} \vspace{0.5em} \begin{minipage}[t]{0.48\textwidth} \centering \includegraphics[width\linewidth]{images/fig3.png} \caption{第三张图} \label{fig:3} \end{minipage} \hfill \begin{minipage}[t]{0.48\textwidth} \centering \includegraphics[width\linewidth]{images/fig4.png} \caption{第四张图} \label{fig:4} \end{minipage} \end{figure} \end{document}这里几个关键细节我要单独说一下。第一每个minipage的宽度设为0.48\textwidth而不是0.5目的是给两个盒子之间留出空隙中间用\hfill把左右两个minipage推开实现左右对齐。第二minipage的可选参数[t]表示顶部对齐[b]是底部对齐[c]是垂直居中插图片时我建议用[t]或[b]这样图的边缘线能对齐观感更整齐。第三两行之间用\vspace{0.5em}控制垂直间距这个值可以根据实际效果调整。minipage方案的优点是控制力极强每张图都是独立个体可以单独加caption和label也可以不用caption只放图。缺点是代码量偏大图片数量一大就变得冗长而且子图编号需要自己处理。2.2 用subcaption子图环境论文排版的首选如果你写过学术论文肯定会遇到这种情况一张大图里包含(a)(b)(c)(d)四个子图每个子图有自己的小标题整体又有一个总标题。这种需求在期刊投稿中极其常见而minipage方案做起来就比较吃力了。subcaption宏包就是专门解决这个问题的。先看代码\documentclass{article} \usepackage{graphicx} \usepackage{subcaption} \usepackage{float} \begin{document} \begin{figure}[H] \centering \begin{subfigure}[b]{0.45\textwidth} \centering \includegraphics[width\textwidth]{images/fig1.png} \caption{实验组A的结果} \label{fig:a} \end{subfigure} \hfill \begin{subfigure}[b]{0.45\textwidth} \centering \includegraphics[width\textwidth]{images/fig2.png} \caption{实验组B的结果} \label{fig:b} \end{subfigure} \vspace{0.5em} \begin{subfigure}[b]{0.45\textwidth} \centering \includegraphics[width\textwidth]{images/fig3.png} \caption{对照组A的结果} \label{fig:c} \end{subfigure} \hfill \begin{subfigure}[b]{0.45\textwidth} \centering \includegraphics[width\textwidth]{images/fig4.png} \caption{对照组B的结果} \label{fig:d} \end{subfigure} \caption{四种实验条件下的结果对比} \label{fig:overall} \end{figure} \end{document}编译出来之后子图会被自动编号为(a)、(b)、(c)、(d)总图编号则是单独的大编号。在正文里你可以写“如图\ref{fig:a}所示”引用单个子图也可以写“如图\ref{fig:overall}所示”引用整体图非常灵活。使用subcaption有几点要特别注意。第一\includegraphics里的width\textwidth是相对于当前subfigure环境宽度的不是整个页面的\textwidth这点和minipage的逻辑一致不用担心图片超宽。第二子图的垂直对齐参数[b]会让子图底部对齐如果你的图片尺寸不一可以试试[t]实际效果因图而异。第三subcaption宏包和旧的subfig宏包冲突如果模板里已经用了subfig需要先处理掉再使用subcaption否则会报奇怪的错误。2.3 用tabular网格摆图追求整齐的场景专用有一种情况我会特意放弃subcaption而改用tabular那就是图片本身不需要子图编号只需要视觉上整齐地排成网格。比如你要展示一批数据集样本截图、一组用户界面的对比图这些图彼此独立没有“大图套小图”的逻辑关系用tabular排最省事。代码示范\begin{figure}[H] \centering \begin{tabular}{cc} \includegraphics[width0.45\linewidth]{images/fig1.png} \includegraphics[width0.45\linewidth]{images/fig2.png} \\ \includegraphics[width0.45\linewidth]{images/fig3.png} \includegraphics[width0.45\linewidth]{images/fig4.png} \end{tabular} \caption{四张样本图片的网格展示} \label{fig:grid} \end{figure}tabular方案的核心在于列格式声明{cc}它表示表格有两列内容居中。每一行的图片之间用分隔行末用\\换行。宽度控制上我用了0.45\linewidth而不是0.5\linewidth原因和minipage一样要给列间留出自然空隙。如果你的图片需要不同的大小也可以对每一列用不同的宽度参数比如第一列宽一点、第二列窄一点。这个方案最大的优点是什么代码最少结构最清晰维护成本低。你想加一行图只需要在表格尾部再复制一行就行想加一列改一下{cc}变成{ccc}然后每行补一个和一张图。缺点也很明显没有子图编号、没有独立的caption所以如果论文里需要引用到每一张小图就不要用tabular方案。2.4 三种方案的取舍对比我不想让你觉得这三套方案是互相排斥的实际上我写论文时经常混合使用。这里总结一下我的选择逻辑需求场景推荐方案理由多张独立图片需要各自独立编号minipage每张图独立控制灵活度高多张图片构成一组需要(a)(b)(c)子图引用subcaption自动编号引用方便符合学术规范大批图片只需整齐网格展示不需要单独引用tabular代码量最小排版最整齐图片尺寸差异大需要精细调位置minipage配合\vspace手动控制能力最强期刊投稿有明确子图格式要求subcaption子图编号样式可配置最贴合规范结合Overleaf来看subcaption方案是我最推荐优先尝试的因为它的语法语义最贴合“多行图片”的语义而且代码结构清晰适合从2x2扩展到3x3甚至更大的网格。如果你只是给报告配个示意图不需要子图编号那tabular就够了。3. 图片大小、间距与对齐这些细节决定排版质感3.1 图片缩放参数怎么给才不出错插入多行图片时最常见的问题就是“图片太大一行放不下”。\includegraphics有三个主要的尺寸控制参数width、height、scale。其中width是最直观的指定图片渲染后的宽度。在单行双图的场景下我会这样给\includegraphics[width0.48\linewidth]{images/fig1.png}这个0.48\linewidth的意思很直白图片宽度占当前行可用宽度的48%。两个minipage并排时各占48%中间留出的4%就提供了天然的间距不会贴在一起。如果是三张图并排就改成0.31\linewidth四张图并排就改成0.23\linewidth记住一个规律n张图并排宽度系数约等于100%除以n再减去2%到3%的间距余量。这里我要强调一个常见的误区有人喜欢用scale0.5来缩放图片。scale是相对于图片原始尺寸的比例系数它的问题是不同图片的原始分辨率不一致会导致并排时高度参差不齐。而width是绝对宽度控制在并排场景下更容易让图片形成统一节奏。所以多行并排插图我几乎总是用width而不是scale。还有height参数限制高度用的。有时候你希望所有图片高度一致比如数据曲线图可以写成height5cm, keepaspectratio这样图片会保持原始宽高比地缩放到指定高度。多行多图时如果每张图高度不一致最直接的做法就是给每行图片设定统一高度看起来就会像“对齐过”一样舒服。3.2 间距与位置控制让图片待在正确的地方新手在用LaTeX排版时最崩溃的一个问题就是明明代码里图片写在这个位置编译出来却跑到别的页面去了。这是LaTeX浮动机制的默认行为图片会被当作浮动体由排版引擎决定它的最终位置。要控制这种行为你需要理解[htbp]这些位置参数。[h]表示here尽量放在当前位置[t]表示top放在页面顶部[b]表示bottom放在页面底部[p]表示单独一页放浮动体。我常用的写法是[H]注意是大写的H它来自float宏包表示“强制放在这里”不是LaTeX内置的参数。这个H对付“图片乱跑”问题几乎是立竿见影的但使用它会让浮动体机制失效如果长篇文档里每个图都用[H]排版可能变得拥挤需要自己手动控制间距。间距控制方面两行图之间我通常用\vspace{0.5em}这个em是相对单位一个em大约等于当前字体的大写M宽度0.5em就是一个相对舒适的行间距离。如果你用subcaption环境子图和子图之间也可以用\hspace{0.02\textwidth}或者\hfill控制水平间距。我的经验是一行两图用\hfill就够了如果觉得图片之间太挤再加\hspace{1em}。另外还有个细节容易被忽略\centering一定要加在figure环境内部、所有minipage或subfigure之前。这个命令让整个图组居中不加的话图组会靠左对齐视觉效果差很多。千万别直接放在\begin{figure}外面那样会影响正文排版。3.3 子图引用与图注细节如果你选用了subcaption方案子图自动编号的好处就体现出来了。在正文引用时\ref{fig:a}会生成类似“1a”或者“1(a)”的编号具体形式取决于模板和宏包设置。为了更符合常见期刊的写作习惯很多人会这样写“如图~\ref{fig:a}所示实验组A的性能显著优于对照组。”这里用图~\ref{...}而不是图\ref{...}是因为~会产生一个不可断行的空格避免编号和“图”字被拆到两行。图注的格式调整可以通过caption宏包来做。比如让图注字体变小一点、加粗图编号\usepackage{caption} \captionsetup{fontsmall, labelfontbf}这行代码放在导言区会让所有图注的说明文字变成小号字体而“Figure 1”这部分变成粗体。如果你只需要对单个图调整可以在figure环境里单独写\captionsetup{...}。在Overleaf里这种全局设置的修改是非常方便的左侧即时编译预览马上就能看到效果比在本地反复编译省事太多。有一点我要提醒subcaption和caption两个宏包的配合非常紧密。如果只加载subcaption不加载caption子图的编号格式、字体大小这些可能跟主图注不一致。所以我建议正常情况下两者一起加载然后通过\captionsetup统一调整。还有一个冷门但有用的指令是\captionsetup[sub]{...}它是专门设置子图caption格式的比如你想让子图的编号用小写字母而非括号可以在这里配置。4. 进阶玩法与文件管理多图排版更省心4.1 孩子太多怎么办处理多行图片跨页问题2x2、3x3这种规模的图组一般情况下一个figure环境就能搞定。但如果你要排3行以上、每行4张图整个图组高度就会超过一页可用区域这时就会遇到“图片跑到奇怪的页面上”或者“图组被硬生生拆开”的情况。处理大图组跨页我摸索出来几个比较实用的策略。第一个是拆分子图组把一个大网格拆成两个figure环境每个figure放两三行中间用\clearpage强制分页。这样做的代价是图编号会增加但在某些场景下反而更清晰。第二个是缩小图片宽度系数比如从0.48降到0.30三张图一行变成四张图一行从而减少总行数。第三个是使用ContinuedFloat命令这个命令来自caption宏包它允许两个figure环境共享同一个编号这样既不会增加图编号又能跨页展示\begin{figure}[H] ... 第一行图片 ... \caption{大型数据集的展示上} \end{figure} \begin{figure}[H] \ContinuedFloat ... 第二行图片 ... \caption{大型数据集的展示下} \end{figure}使用\ContinuedFloat时两个figure共用同一个float编号图注内容可以手动区分“上”“下”。这个方法在毕业论文里展示大量数据图表时特别有用能让排版看起来专业很多。4.2 图片路径、格式与命名规范关于Overleaf里的图片文件管理有几个好习惯应该尽早养成。首先在项目的根目录下建一个专门的图片文件夹比如figures/或者images/所有图片都归拢进去。然后在导言区用\graphicspath{{figures/}}指定默认路径这样正文中写\includegraphics{fig1}就够了不需要每次写冗长的相对路径。其次是文件格式。Overleaf使用pdfLaTeX编译时支持PNG、JPG、PDF但不支持EPS也不建议使用BMP这类旧格式。我的推荐是矢量图比如数据流图、示意图优先用PDF格式位图比如截图、照片用PNG或JPG。如果你有EPS格式的老图片可以先用在线转换工具转成PDF再上传。实测下来PDF格式的矢量图在LaTeX里缩放不损失清晰度比PNG表现好很多。最后是命名规范。文件名千万不要用中文也不要用空格。虽然Overleaf在网页端会帮你转义但编译时很容易出问题。规范写法是纯英文小写加下划线fig1_result.png、fig2_comparison.png这样不管在哪种编译引擎下都不会踩编码这类麻烦。另外图片文件名中也不要带括号、井号这些特殊字符$、、#在LaTeX里都有特殊含义文件名里出现会引发莫名其妙的编译错误。4.3 Overleaf配合本地LaTeX的团队协作流程很多人可能会问既然Overleaf这么方便那是不是完全不需要本地环境了我的答案是看场景。如果你是一个人写论文Overleaf足够但如果团队里有同事强依赖本地编辑器或者需要处理超大型文档Overleaf免费版的编译时长限制会成为瓶颈。我的工作习惯是这样的日常编辑和协作全在Overleaf上进行因为它有版本历史、实时评论和多人编辑功能这些体验远超传统的本地Git工作流。但是当文档变得很大超过50页、含大量图片和参考文献或者需要离线工作、调试一些Overleaf不支持的宏包时我会通过Overleaf的“Git集成”功能把项目拉到本地用VS Code配合LaTeX Workshop插件编译调试。这时候VS Code的作用就是充当一个本地编译客户端配合TeX Live环境达到和Overleaf几乎一致的效果。这里要插一句如果你是从本地环境迁移过来的新手可能会看到网上大量“vscode配置latex环境”、“latex安装教程”的内容我的建议是别急着折腾。先用Overleaf把LaTeX语法和排版逻辑跑通等确认自己需要本地环境了再去做本地配置。顺序反过来很容易被环境问题打击信心。5. 常见问题与排查技巧实录5.1 图片不显示先看log再逐项排查我在Overleaf里插图时最常遇到的报错是File xxx not found。这个错误极其常见原因不外乎四种文件名拼错、图片路径不对、文件名包含空格或中文、图片根本没有上传到项目。在Overleaf里排查这个问题非常方便点击左侧文件树就能看到项目的完整结构检查路径和文件名是第一步。另一个诡异的情况是图片在项目里明明存在编译却报错。这时候我一般先看文件名大小写比如Figure1.png和figure1.png在Windows里没区别但在LaTeX的编译环境里是大写敏感的必须完全一致。还有.和..这类相对路径符号在Overleaf项目里可以正常用但容易混淆不如直接用\graphicspath统一指定目录来得省心。如果报错信息是Unknown graphics extension说明图片格式不对。Overleaf在pdfLaTeX模式下支持的格式包括.png、.jpg、.pdf如果你传入了.svg或者.eps需要先转成支持格式。SVG转PNG很简单注意分辨率导出时设高一些不然在PDF里会显得模糊。5.2 图片全堆到文末解密LaTeX浮动体机制“图片乱跑”本质是LaTeX浮动体机制的锅。当你使用[htbp]这类位置参数时LaTeX会把它当建议而非强制命令排版引擎为了版面美观可能把浮动体推迟到页面末尾结果就是多张图片全部挤在文末。我的建议是重要图片直接用[H]强制固定。比如\begin{figure}[H] \centering \includegraphics[width\linewidth]{images/fig1.png} \caption{关键结果图} \end{figure}加了[H]之后图片会乖乖待在当前位置不再乱跑。但要注意[H]本质上打断了浮动体机制如果一页内的H图过多图片会把正文也挤到下一页留下大片空白。这种时候需要在图和图之间、图和文字之间做好取舍该让图片浮动就给[htbp]该固定位置用[H]找到一个平衡点。还有一种报错叫Too many unprocessed floats。这是因为LaTeX默认的浮动体计数器有上限当文档里未处理的浮动体太多时就会报错。解决办法一是在适当位置加\clearpage强制输出当前页面的所有浮动体二是把部分小图直接嵌进正文用[H]而不是作为浮动体三是通过\usepackage{morefloats}适当提高上限。5.3 Overleaf实战心得从编译缓慢到团队协作最后分享几条我在Overleaf实操中积累的独门经验。第一关于编译引擎。新版Overleaf默认是pdfLaTeX写中文建议在菜单里把编译器换成XeLaTeX配合ctex宏包或者xeCJK宏包处理中文。我见过不少人在Overleaf里复制了一份中文模板编译报一堆字体错误其实就是编译器没切对。第二关于图片的高效管理。如果你有上百张图片一个个上传到Overleaf会很痛苦。Overleaf支持把整个文件夹压缩成zip上传上传后自动解压成目录结构配合\graphicspath就能直接引用。这个技巧我在改大论文时经常用省时省力。第三关于版本回滚。Overleaf免费版自带版本历史功能每编译一次都会生成一个快照。我在调整多图排版时经常改来改去发现越调越乱就点开“History”直接回退到上一个正常版本。这个功能在本地写LaTeX时反而没法用算是在线平台的一大优势。第四对于团队协作Overleaf的“Review”功能可以让合作者在PDF界面直接添加评论这个体验非常接近于在Word里批注对论文返修特别有帮助。我经常和导师通过这种方式来回修改配图效率比互相传文件高得多。我在实际工作中总结下来LaTeX排多行图片本质上是“尺寸控制 排版结构”的组合问题。先想清楚每张图在文档里的角色再用minipage、subcaption或tabular搭建好布局骨架最后用宽度参数和间距命令打磨细节。有了这套流程不要说两行图就是四行五行也能在Overleaf里排得整整齐齐。最后再分享一个小技巧在你把图片代码写完之后记得在Overleaf里把“Compile Mode”切到“Fast”模式这样反复调整排版布局时编译速度会快不少。等全部改完再切回默认模式生成最终PDF不仅体验顺滑也能避免大项目频繁全量编译浪费时间。希望这篇经验能帮你在Overleaf里把多行图片排版彻底搞定。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑