如何在LaTeX文档中插入图片并控制其位置?

Viewed 194

我在LaTeX中插入图片时,图片总是出现在奇怪的位置(比如下一页或章节末尾),而不是我插入代码的位置。如何精确控制图片的位置?

\begin{figure}
\centering
\includegraphics[width=0.8\textwidth]{example.png}
\caption{示例图片}
\label{fig:example}
\end{figure}
2 Answers

想要精确地控制图片在文档中的位置图片代码在文档代码中的位置完全相同,唯二的、通用的办法是不使用浮动体使用H参数

众所周知,LaTeX主张“内容与格式相分离”,而浮动体机制,就是不由用户来决定的其中一种格式。浮动体机制,是让TeX程序来决定图片的位置,从本质上说,是文档开发者来决定图片的位置——也就是说,只要使用了浮动体机制,图片的位置就不再由用户所决定(至多和通常都是“影响”)。

作为用户,对于这一诉求,只有接受使用浮动体拒绝使用浮动体 这两种选择。一旦接受,就必须彻底弄清楚浮动体的机制;如果拒绝,那么只有另寻他法。

从大体说来,有以下几种思路:

  1. 顺从法——“驯服”浮动体。修改浮动体占页面的比例(\topfraction, \bottomfraction, \textfraction,...),更改浮动体的位置参数(h, t, b, p, !,\suppressfloat, H), 浮动体的数量与直接输出浮动体(脚注、边注、图、表、代码、\clearpage\cleardoublepage以及morefloats宏包,...)等,都属于这一类。其中比较推荐float宏包提供的H参数,但它很可能出现不必要或意想不到的空白
  2. 调整法——“配合”浮动体。通常,对于浮动体机制,一个比较推荐的策略是:一开始写文档时,用户不要去关心图片跑到哪里去了,只需专注于内容写作,图片位置问题(本质是格式问题)等到确定不会再出现大修大改了,最好是定稿前,再去作统一处理。此时,可以考虑调整图片尺寸,浮动体代码在文档代码中的位置,文字表述的增减,一处一处、精确地调整版面。
  3. 开发法——“制造”新的“浮动体”。如果用户不满足于做用户,有兴趣和精力探索TeX开发的领域,想(暂时)以TeX开发者的身份自居,那么欢迎您分享出您的想法。

控制图片位置的3种方法

方法1:使用位置限定符(推荐)

LaTeX的figure环境默认是浮动体,会由排版引擎自动选择位置。通过添加位置限定符可影响其优先级:

\begin{figure}[htbp] % 按优先级尝试:此处(h)->页面顶部(t)->页面底部(b)->单独一页(p)
\centering
\includegraphics[width=0.8\textwidth]{example.png}
\caption{示例图片}
\label{fig:example}
\end{figure}
  • h:当前位置(here)
  • t:页面顶部(top)
  • b:页面底部(bottom)
  • p:单独一页(page)
  • !:忽略部分排版限制(如 [!h]

⚠️ 注意:强制使用[h]时若空间不足,图片仍会浮动。此时可添加\usepackage{float}并改用[H](见方法3)。


方法2:禁止浮动(慎用)

通过\usepackage{float}使用[H]选项强制固定位置(需确保当前位置有足够空间):

\usepackage{float} % 在导言区添加

% 在文档中
\begin{figure}[H] % 大写的H
\centering
\includegraphics[width=0.8\textwidth]{example.png}
\caption{固定位置的图片}
\end{figure}

✅ 优点:图片绝不浮动
❌ 缺点:可能导致页面留白或布局不协调


方法3:调整浮动体约束

在导言区修改LaTeX的浮动参数,放宽浮动体位置限制:

% 允许图片占据页面更大比例
\renewcommand{\topfraction}{0.9} % 页面顶部最大浮动体比例(默认0.7)
\renewcommand{\bottomfraction}{0.9} % 页面底部最大比例
\renewcommand{\textfraction}{0.1} % 文本最小比例

此方法可减少图片被推到下一页的概率。


额外建议

  1. 检查空间:用\usepackage{lipsum}配合\lipsum[1-3]生成占位文本测试空间是否足够
  2. 组合图片:若有多张小图,用subfiguresubcaption包组合减少浮动体数量
\usepackage{subcaption}
\begin{figure}
\begin{subfigure}{0.45\textwidth}
\includegraphics[width=\linewidth]{fig1.png}
\end{subfigure}
\hfill
\begin{subfigure}{0.45\textwidth}
\includegraphics[width=\linewidth]{fig2.png}
\end{subfigure}
\caption{并排图片}
\end{figure}
  1. 终极方案:在文档末尾用\clearpage冲刷所有浮动体,确保图片出现在期望位置之前

总结

场景 推荐方案
常规插入 [htbp][!t]
必须精确固定位置 float包的[H]
大量图片导致位置混乱 调整浮动约束 + 组合图片

📌 黄金法则:优先信任LaTeX的浮动算法,仅关键位置使用[H]。多次编译可稳定浮动体位置。

希望这些技巧能解决您的排版问题!如有特殊情况欢迎补充说明👇