插入图片与 figure 浮动体

插入图片在 LaTeX 里包含两层问题:技术上把图片放进文档,版式上让图片出现在合适位置。后者由浮动体机制处理,它既是自动排版的精华,也是新手最大的困惑来源——为什么图不在我写的地方?本文从插入命令讲起,把浮动机制、位置参数、题注与引用讲透,并给出「图跑到文末」等典型现象的修复方案。读完本文你会获得一种新视角:图的「乱跑」是特性而非故障。

一、插入图片:路径与尺寸

插入图片用插图宏包的核心命令。文件名通常省略扩展名,让引擎自动选择最优格式(优先矢量图)。

\documentclass{ctexart}
\usepackage{graphicx}
\graphicspath{{figures/}{images/}}   % 图片搜索路径
\begin{document}
\includegraphics[width=0.8\textwidth]{plot}
\end{document}

三个要点:路径声明后,所有插图命令的相对路径基于主源文件;按比例指定宽度与按绝对倍数缩放是最常用的两种尺寸指定方式,前者便于保证不超版心;矢量图优先用于曲线图,位图用于照片。宽度推荐用正文宽度的一定比例,全文统一。

省略扩展名这个习惯值得单独强调:编译时引擎会按可用格式优先级自动选择,同一份源码既能找到 PDF 也能找到 PNG。它的隐藏好处是图文件替换格式时源码完全不用改——这在投稿改格式要求时能救命。但注意同一目录下不要放同名不同格式的图,否则引擎的选择可能不符合你的预期。

矢量图与位图的选择是图质量的分水岭:所有由数据或几何形状产生的图(曲线图、流程图、示意图)都应当输出矢量格式,放大十倍依然清晰;只有照片类内容才需要位图。期刊常把「图必须矢量」写进格式要求,这不是偏执——印刷分辨率下位图曲线的锯齿是审稿流程里的常见退稿理由。

二、浮动体:为什么图会「乱跑」

浮动机制的核心思想是:图、表这类大块内容允许脱离源码位置,由排版引擎就近安插,避免页面出现大面积空白。理解这一点就不会抱怨「工具不听话」——它是在用位置的灵活性换取版面的紧凑。浮动环境是图环境与表环境,位置参数用方括号给出。

这套思想源远流长:TeX 诞生于专业排版时代,排版师手工「挪图」以填满页面是日常工序。LaTeX 把这门手艺自动化了,代价是作者让渡了一部分位置控制权。明白这段历史,就懂得为什么老排版师出身的人反而最能接受浮动体——他们挪过图,知道手工的成本。

「图在文章里是引用的,不是装饰的」——写正文时先忘记图,把逻辑写顺,再在合适处插入图与引用,是最稳妥的顺序。先摆图再补文字,往往写出「如图所示」式的空洞句子,审稿人一眼看出图与文脱节。图与文的呼应,从写作顺序就开始了。

参数 含义
页面当前位置 尽量在源码位置
页顶 页面顶部
页底 页面底部
忽略限制 忽略浮动部分的版面限制
强制原位 需引入专门宏包,关闭浮动

常见组合是同时给出「当前位置、页顶、页底」三种偏好。注意参数只是偏好顺序,引擎仍受浮动队列与页面剩余空间约束。若某张图无论如何都不到位,按下一节的排错链条处理。

位置参数的取舍反映两种价值观:给引擎越多自由,版面越紧凑,但图可能离文字远;加入强制原位参数后图贴着文字,代价是页面下半截可能留白。学术论文普遍选择前者的妥协——读者早已习惯「图在附近一两页」,大面积留白反而最伤眼。理解这个权衡后,面对「图乱跑」你的第一反应就从抱怨变成检查自己的图是不是太大了。

三、题注、编号与引用

图环境内的题注命令生成图号与图题(如「图三:实验结果」),编号自动管理,标签紧随其后即可被引用。这三行是标准写法。

\begin{figure}[htbp]
  \centering
  \includegraphics[width=0.8\textwidth]{plot}
  \caption{实验结果曲线}\label{fig:exp}
\end{figure}

正文引用写「如图所示」式的文字加引用命令。标签位置有一条铁律:必须放在题注之后(或紧随其后),放在之前会把指针指向当前节的编号而非图号。

题注样式定制由题注宏包承担:可批量调整字号与标签加粗,中文院校常见的分章编号配合计数器关联宏包实现。具体写法见「标题与交叉引用」一章。

题注位置还有一个中文文档的差异:中文习惯「图题在图下、表题在表上」,这与英文排版完全一致,照默认即可;但有少数院校要求图题在上,这时需要把题注命令移到插图命令之前。这类本地化要求都是抄模板最省事,别凭经验默认。

题注的文字也值得讲究:图题应当是描述性的短句而非完整段落。好的图题让读者只看图与题注就能明白图说了什么,不必回正文找解释。这条写作建议属于「图表自解释性」原则,在论文写作指南的图表章节有展开。

四、浮动问题的排错链条

浮动异常是初学者最高频的求助点,按顺序排查能解决九成问题。

现象 检查 修法
图出现在隔页或文末 大图无合适位置 拆分图或放宽位置参数
图全部堆在最后一页 浮动队列积压 清空浮动队列
图压到了文字 尺寸超版心 用正文宽度作上限
题注与图间距异常 用了居中环境而非居中声明 换居中声明
图引用问号 标签位置错误 移到题注之后

「图全跑到文末」是最典型的一例,根因通常是图太大,每一页都放不下,于是被不断推迟。可选解法:缩小图、减少同页浮动数量、或在合适位置插入清空浮动队列的命令。检查手段是看日志中的浮动相关警告。清空浮动队列的细节见「浮动体进阶」一章。

排错时的耐心分配也有讲究:先确认图尺寸是否超过页面高度的一半——这是绝大多数浮动问题的直接原因——这是最常见原因,改宽度立刻见效;再检查同一页是否挤了太多浮动体;最后才考虑特殊参数。反过来做的人通常会花一小时调位置参数而图依然不动,因为根本原因压根不在参数上。

五、图片格式与工具链

交付质量与图片格式关系密切。下表给出常见图片任务的推荐工作流——它们是外部工具,与排版本身解耦,但决定最终成图的清晰度。

任务 推荐工作流 输出
数据画曲线图 绘图脚本导出矢量格式 矢量 PDF
示意图 图形软件绘制并导出 矢量 PDF
照片截图 截图工具保存 位图 PNG
公式区域 专用截图工具或直接排版 PDF
批量格式转换 图像处理命令行工具 按需

这套工作流的要点是「脚本优先」:凡是能用脚本生成的图,绝不手工绘制。脚本保存的是生成逻辑,两年后数据更新时重跑一遍就能出新图;手工图则永远停在旧版本。这条原则同样适用于代码、表格等一切可脚本化的内容,与写作素材管理是同一个方法论,见本站Obsidian 指南。

两条经验:其一,绘图脚本与源文件一起保存,两年后改图才不会痛苦(可配合本站Obsidian 指南管理脚本与素材);其二,所有图放在统一子目录,配合路径声明后源码里只写短文件名。若用 AI 辅助生成图表代码再迁移,工作流注意事项见本站AI 辅助写作。

六、插图工作流的心理建设

新手面对浮动体常有一种失控感:明明代码写在这里,图却跑到三页后。请记住一个视角——浮动体不是 bug,而是「版面紧凑」与「图随文走」两个目标的调和器。理解它站在版面这一边,你就不会与之对抗,而是学会与它合作。合作的起点是:图做小一点,给它足够的选择空间。

常见焦虑 事实 应对
图离文字太远 多数读者不在乎 用清晰题注引导
引用编号错乱 编号由机器维护 编译两遍即可
强制原位更安心 容易产生页面空洞 除非小图,否则别用
图总是乱跑 通常图太大 先缩图再调参数

接受这套机制后,插图在 LaTeX 里其实是最省心的环节之一:编号、引用、目录全自动化,你只需专注把图做好看。这份省心,正是值得当初花一小时理解浮动机制的回报——而理解机制最好的办法,永远是拿自己那篇文档反复编译几遍。 图片搞定后,下一节处理更结构化的表格排版。

延伸阅读