为什么当前页上有足够的空间,而多列中的浮动内容却被移动到下一页?

为什么当前页上有足够的空间,而多列中的浮动内容却被移动到下一页?

在以下 MWE 中,第二个浮点数(在multicols环境中)被移动到第 4 页,而其代码给出的位置(第 3 页)似乎足够。为什么?

\documentclass{article}
\usepackage{graphicx}
\usepackage{mwe}
\usepackage{dblfloatfix}
\usepackage{fixltx2e}
\usepackage{multicol}
%
\newcommand{\test}{%
  \lipsum[1-3]
  \begin{figure*}
    \centering
    \includegraphics[width=4cm]{example-image}
    \caption{Foo bar}
  \end{figure*}
  \lipsum[5-6]
}
%
\begin{document}
\section{A section}
\subsection{A First Subsection}
\begin{multicols}{2}%
\test
\end{multicols}
\subsection{A Second Subsection}
\begin{multicols}{2}%
\test
\end{multicols}
\end{document}

答案1

请参阅 Frank Mittelbach 的回答如何影响 LaTeX 中图形和表格等浮动环境的位置?

以下是该答案的相关段落

双列浮动总是先延迟
当 LaTeX 在双列模式下遇到页面宽度的浮动环境(在环境名称末尾用 * 表示,例如,figure*)时,它会立即将其移动到延迟队列。这种行为的原因再次在于其算法的“贪婪”行为:如果 LaTeX 当前正在组装该页面的第二列,则第一列已经组装并存储起来;回想一下,由于 LaTeX 不会回溯,因此无法将浮动内容放在当前页面上。为了保持算法简单,即使在第一列上工作,它也会执行相同的操作(理论上即使没有回溯也可以做得更好)。

因此,为了将这样的浮动内容放置到当前页面上,必须手动将其移动到源中的较早位置 - 在当前页面的开始之前。如果这样做了,显然文档中的任何进一步更改都可能使这种调整变得过时;因此,最好只在文档制作的最后阶段进行此类调整(如果有的话)--当所有材料都已编写并且重点是微调视觉外观时。

(第二段的重点是我添加的)。

确实,如果我改变你的例子并将figure*环境拉上来,那么当 TeX 处理第 2 页时就会出现代码,浮动就会转到第 3 页的顶部。

\documentclass{article}
\usepackage{graphicx}
\usepackage{mwe}
\usepackage{dblfloatfix}
\usepackage{fixltx2e}
\usepackage{multicol}

\begin{document}
\section{A section}
\subsection{A First Subsection}
\begin{multicols}{2}
\lipsum[1-3]

\begin{figure*}
\centering
\includegraphics[width=4cm]{example-image}
\caption{Foo bar}
\end{figure*}

\lipsum[5-6]
\end{multicols}

\subsection{A Second Subsection}
\begin{multicols}{2}

\begin{figure*}
\centering
\includegraphics[width=4cm]{example-image}
\caption{Foo bar}
\end{figure*}

\lipsum[1-3]
\lipsum[5-6]
\end{multicols}
\end{document}

在此处输入图片描述

相关内容