浮动体位置控制与子图排版
单图单表的浮动问题解决后,进阶场景接踵而至:一组实验结果想并排展示四张子图、某处内容必须紧贴当前位置、章末图全部堆积到文末。这些需求分别对应子图排版、强制定位宏包、浮动参数的底层调优。本文按场景给出可直接照抄的写法,并梳理浮动策略对长文档页码稳定性的影响。
一、子图排版
并排展示多张关联图(同一实验的不同视角)是论文常态。子图宏包提供子图环境,每张子图独立编号,总图号由外层环境自动管理。
\documentclass{ctexart}
\usepackage{graphicx}
\usepackage{subcaption}
\begin{document}
\begin{figure}[htbp]
\centering
\begin{subfigure}{0.45\textwidth}
\centering
\includegraphics[width=\linewidth]{a}
\caption{对照组}\label{fig:sub-a}
\end{subfigure}
\hfill
\begin{subfigure}{0.45\textwidth}
\centering
\includegraphics[width=\linewidth]{b}
\caption{实验组}\label{fig:sub-b}
\end{subfigure}
\caption{两组结果对比}\label{fig:compare}
\end{figure}
\end{document}
引用的层级是本文重点:引用总标签输出总图号,引用子标签输出子图号。智能引用宏包能输出更完整的「图加子图号」格式。子图方案的选择也有讲究:如果四张子图表达的是同一变量随时间的四个阶段,横排或四宫格都合适;如果是两种方法各一组对照,两行两列的布局在语义上更清楚——布局本身应当暗示数据的分组结构,而不只是「塞得下」。子图宽度之和与填充命令的搭配决定间距:两张约占正文宽度一半的子图中间留一成空位,视觉上最均匀。竖排子图把填充命令换成换行即可;四宫格用两次换行排出两行。子图环境的宽度参数是相对外层环境给出的,填零点四八倍的正文宽度时,两张子图加上间距恰好接近满宽——但别忘了外层环境本身可能还有左右边距。若发现两组子图总宽度溢出,优先检查外层环境里是否多套了缩进命令,而不是去缩小子图宽度。
子标题与总标题的分工:总标题描述整体结论,子标题只标注每张子图的身份(如对照组、时间点)。常见错误是把所有信息都堆进总标题,读者扫一眼找不到对应关系。子图编号格式可以定制:默认是图号加括号子号,许多期刊模板会改成点分隔样式。这个设置由模板的题注宏包接管,投稿时不要自行覆盖模板的编号样式,一切以期刊模板说明为准。配套的还有子图引用宏包,它能在正文里一次输出「图二加子图」的完整引用格式,省去手工拼接两个编号的麻烦,机制与「交叉引用与超链接」一章介绍的智能引用命令同源。
二、强制原位
某些内容必须出现在源码位置——例如「下表中列出了……」这类紧贴上下文的表格说明。专门宏包提供强制原位参数,彻底关闭浮动。
\documentclass{ctexart}
\usepackage{float}
\begin{document}
\begin{table}[H]
\centering
\caption{紧邻前文的参数表}\label{tab:param}
\begin{tabular}{lc}
\toprule
参数 & 取值 \\
\midrule
温度 & 100 \\
\bottomrule
\end{tabular}
\end{table}
\end{document}
两种位置参数的区别必须分清:常规位置参数是「尽量在此」,强制参数是「一定在此,付出分页代价」。滥用强制参数会让页面下半部出现大片空白,所以建议只用于小表格与小图,大图仍交给浮动机制。一句话策略:能用常规组合就不用强制,强制是最后手段。还有一个细节常被忽略:强制原位参数所在的宏包与某些题注宏包存在加载顺序要求,若编译时报题注相关错误,把位置参数宏包的加载行往前挪通常就能解决。这类宏包冲突在「交叉引用与超链接」一章有通用的排查思路。
三、浮动参数调优:为什么图全压在一页
浮动体的行为受一组底层参数控制。当文档里浮动体密集(每页多图),默认参数会把它们排队堆积,甚至全部推到章末。
| 参数 | 作用 | 调节建议 |
|---|---|---|
| 顶部占比上限 | 单页顶部允许的浮动占比 | 图多时调大 |
| 底部占比上限 | 单页底部允许的浮动占比 | 图多时调大 |
| 正文占比下限 | 单页正文占比下限 | 图多时调小 |
| 浮动页填充率 | 浮动专页的填充率下限 | 想避免空荡浮动页时调小 |
这些参数在导言区重定义为数值。调优的目标是减少「孤零零一页只有一张图」的浮动专页。更直接的手段是手动插入清空浮动队列的命令——它强制输出所有积压浮动体,代价是新起一页。「等当前页排满再清空」的延迟版本视觉上更平滑。调参数时建议一次只改一个值,重新编译观察两页效果——浮动参数的相互作用很微妙,两个一起改往往分不清是哪个起了作用。参数取值也不必追求最优,「图不再堆积、空白页消失」即可收手。长文档收尾时务必执行一次清空或设浮动屏障,否则最后的图可能掉进文档结尾。判断是否需要调浮动参数还有一个直观信号:翻一遍编译出的 PDF,如果某一章的图全部出现在该章最后一页之后、正文已经翻篇,那就是典型的积压,此时再谈调参;反过来,若全文只在某一处有一张特别高的图,就地调整该图的尺寸往往比动全局参数更有效。零星一两张图位置不理想,不值得动全局参数。
四、文字环绕与限制
偶尔会有「图片放右侧、左侧文字继续」的需求,环绕图宏包提供该能力。
\begin{wrapfigure}{r}{0.4\textwidth}
\centering
\includegraphics[width=\linewidth]{photo}
\caption{环绕插图}\label{fig:wrap}
\end{wrapfigure}
环绕图的限制必须提前知道:它与列表环境、段首缩进、分页的兼容性较差,容易产生压字或移位。正式论文极少使用环绕图,期刊模板通常也不支持。建议只用于讲义、笔记类非正式文档;正式投稿一律不用,遇到错位优先怀疑环绕图本身,而不是去调正文。另外一个实用提醒:环绕图必须放在段落开始之后的位置才能正确计算文字流绕行,放在两个段落之间的空行处会静默失效——不报错但文字不绕行,这种「假成功」比报错更耽误时间。整理这类「能踩的坑」形成的经验清单,可存入本站Obsidian 指南介绍的知识库。
五、浮动策略与页码稳定性
长文档里浮动体的增删会引发「分页漂移」,波及所有交叉引用的页码。应对策略有两层。
第一层是编译策略:交付前务必完整编译两到三遍,否则页码引用全部滞后。具体机制见「第一个文档」一章的编译流程讲解。第二层是写作策略:增删一张大图后,别急着核对其他图的页码,等全文定稿再统一校对一遍引用页码。若引用的页码对最终交付很重要,最后一遍「只读不改」的核对是必要的。从写作流程看,浮动体调整属于「定稿前最后一公里」的工序:初稿期应该完全不管图的位置,全部交给默认参数;到了修订期再回头集中处理堆积问题。顺序反了的话,每改一段正文都要重新调一次图位,时间全耗在编译等待上。论文各阶段的时间分配,可参考本站论文写作指南的流程建议。
| 场景 | 策略 |
|---|---|
| 小图小表 | 常规位置或强制均可 |
| 大图每页一张 | 调大顶部占比上限 |
| 一组关联子图 | 子图排版方案 |
| 表格需贴上下文 | 强制原位参数 |
| 章末图积压 | 浮动屏障或清空队列命令 |
浮动体的世界还有更多细节,但掌握本文的五块内容已覆盖论文场景的九成需求。浮动体的行为在链式编译中由辅助文件记录位置,因此调完参数后看到的可能是上一遍的布局残影——改不动位置时先重新编译一遍再判断,这个机制与全文交叉引用的两遍编译同理。下一节进入文献管理——那是相对手工整理引用最大的效率优势所在;用正则批量核对图号引用的方法,见本站正则表达式。
