![来自 \includegraphics 的图像出现在错误的位置?](https://linux22.com/image/236476/%E6%9D%A5%E8%87%AA%20%5Cincludegraphics%20%E7%9A%84%E5%9B%BE%E5%83%8F%E5%87%BA%E7%8E%B0%E5%9C%A8%E9%94%99%E8%AF%AF%E7%9A%84%E4%BD%8D%E7%BD%AE%EF%BC%9F.png)
我有以下情况:
\subsection{Some subsection}
Some text here...
\\
\begin{figure}
\caption{Raw}
\includegraphics[scale=0.25]{raw.png}
\end{figure}
\begin{figure}
\caption{Median}
\includegraphics[scale=0.25]{median.png}
\end{figure}
\begin{figure}
\caption{Data}
\includegraphics[scale=0.25]{data.png}
\end{figure}
\\
\section{New section}
New section starts here...
出于某种原因,前 2 张图片显示在子部分开始之前(位于其标题上方),而第 3 张图片显示在下一个全新部分(全新页面)的中间句子中!这是怎么回事?为什么会发生这种情况?我该如何解决?
答案1
在 LaTeX 文档中,图像和表格等元素被称为“浮动元素”,因为它们可以自由浮动——甚至跨越章节和页面边界。发生这种情况的原因是 TeX 引擎正在尝试确定将文档分成行、段落和页面的“最佳”方式,以便最终结果尽可能好。如果 TeX 可以自由地推动浮动元素等大型对象,它可以为整个文档做出更好的决策。
不幸的是,作为一名文档作者,你对“最佳”外观的想法通常与 TeX 的决定大相径庭。以下是我解决这种情况的三步方案:
1. 等待草稿完成
当您向文档中添加大量内容时,浮动会跳到各处,因为分页算法每次运行时都会计算出新结果。在此阶段尝试“将数字放到其位置”只会造成很大的压力和浪费时间。只需专注于编写文档的内容,等到草稿成型时,您会发现 80% 的时间 TeX 在定位浮动方面做得非常出色,您无需做任何其他事情。
2. 为 TeX 提供一些指导
当草稿准备好并且您正在纠正拼写错误等时,您可能会注意到奇怪的浮动位置不太好。在这些情况下,您可以通过在 `\begin{figure/table/whatever} 中包含可选参数来为 TeX 提供一些有关如何处理定位的有用提示。以下是使用图形的示例:
I would prefer that \autoref{fig:example} be placed right after this paragraph.
If that is not possible, I would like it at the the top of a page.
\begin{figure}[ht]
\label{fig:example}
\end{figure}
图形定义使用“浮动说明符”来h
告诉 TeX 尽量将图形保持在输入中出现的位置附近,而不是前后几个段落。下一个说明符t
是一个后备说明符,它告诉 TeX 如果图形浮动得太远,则将图形放置在页面顶部。
以下是另一个使用表格的示例:
I really, really want \autoref{tab:example} be placed right after this
paragraph. If that is not possible, I would like it at the the bottom
of a page.
\begin{table}[!hb]
\label{tab:example}
\end{table}
在上面的例子中,添加了一个感叹号,强烈暗示 TeX 尝试将图形放置在输入中出现的位置。它还让 TeX 知道,为了满足这一要求,可以打破一些排版规则。浮动说明符b
再次用作后备——这意味着如果图形浮动得太远,则将其放置在页面底部。
最后一个浮点说明符是可以使用的p
,这意味着如果浮点移动得太远,它应该被收集到一个“浮点页面”中,该页面只包含杂散浮点,并在 TeX 认为方便时插入。我不p
经常使用它。
3. 告诉 TeX 你想要它如何完成
在大多数情况下,遵循步骤 1 和 2 会给你带来良好的结果。对于那些无论如何都会出现在混乱位置的少数浮动,我使用两种技巧来固定它们。第一种技巧是我用来处理一堆浮动,它们加起来占据了整个页面或更多。它涉及将它们分组到单独的页面上,就像说明符一样p
,但可以让我更好地控制:
The graphs in \autoref{fig:graph1} and \autoref{fig:graph2} are quite
large, so they are shown on the next page.
\newpage
\vfill
\begin{figure}
\label{fig:graph1}
\end{figure}
\begin{figure}
\label{fig:graph2}
\end{figure}
\vfill
\clearpage
重要的是\clearpage
--- 它形成了一个浮动元素无法跨越的分页符,从而有效地将两个图形限制在它们自己的页面上。这些\vfill
命令用于垂直居中内容。我使用的第二个技巧是float
提供H
浮动说明符的包:
\autoref{tab:example} absolutely, positively MUST occur after this sentence.
\begin{table}[H]
\label{tab:example}
\end{table}
标记浮动元素可H
有效地使它们停止浮动,并表现得像相当大的“单词”。TeX 无法再移动它们,就像它无法重新排列句子中的单词一样。如果您发现自己首先要H
考虑是否还有其他方法可以做,例如减小浮动元素的大小,将其移动到附录等,因为这H
确实是最后的武器。
答案2
首先要尝试的是将位置说明符与环境一起放置float
。格式为
\begin{figure}[position specifier]
%stuff to place in the figure
\end{figure}
位置说明符的有效选项是:
h
:大约在这里
t
:页面顶部
b
:页面底部
p
:在仅有浮动的页面上。
!
: 强调说明符 -->h!
表示“确实在这里”
还有其他选项,但它们需要float
包。
所以你可能想尝试
\begin{figure}[h]
\caption{Raw}
\includegraphics[scale=0.25]{raw.png}
\end{figure}
答案3
对于使用 XeLaTex 的人来说,最好使用\usepackage{float}
并将其[H]
作为图形的选项。