Flafter 有时会忽略部分标题

Flafter 有时会忽略部分标题

我正在使用该flafter包来防止浮点数出现在 LaTeX 源代码中它们的位置之前。

当我将浮动元素放在章节标题之后,并且该章节从页面的开头开始时,有时浮动元素会出现在章节标题的上方,在页面的顶部,而它应该出现在章节标题的下方。

在下面的例子中:

  • 通过取消注释,paragraph2浮动将位于章节标题下方(如预期的那样);
  • 通过评论,paragraph2浮动内容将位于章节标题上方(在页面顶部)。

在两种情况下,我都想将浮动内容放在章节标题之下。

\documentclass{article}
\usepackage{mwe}

\usepackage{flafter}

\begin{document}
\blindtext[4]

paragraph1

%paragraph2

\section{My section}
\begin{figure}[htb]
\includegraphics{example-image-a}
\end{figure}

\blindtext
\end{document}

答案1

该问题实际上与无关flafter,即使您将整个包注释掉,它也会发生变化:由于该部分出现在第 2 页,为什么“h”浮动不在该部分之后,而是在其之上?

出现这种情况的原因是\section命令试图将后面的材料保留在同一页上。因此,当 LaTeX 仍在处理第 1 页时,它会查看\section 然后才最终决定该部分不适合放在第一页。

然而,到那时,它已经得出结论,浮动也不适合,因此它被放在了延期列表中。从那里,它顺利地进入了下一页的顶部区域(以防flafter因为明显地(?),被推迟的事情必须在其调用之后)。

猜测这个假设是错误的,所以是的,这是一个错误或缺陷,flafter但不确定这是否可以轻松修复。在正常情况下(即,当浮动放置在段落之间时,除非您设置非常非常奇怪的段落惩罚(例如,偏向寡行而不是完成段落),否则不会发生这种情况。只有当 LaTeX 向前看并且最终不使用浮动前面的任何材料时才会发生这种情况,这就是部分设置的情况。

答案2

在此处输入图片描述

这看起来像一个潜在的错误,但作为一种解决方法,您可以在分页符最终发生的位置(即该部分之前)强制分页,然后浮动位置就会同步:

\documentclass{article}
\usepackage{mwe}

\usepackage{flafter}

\begin{document}
\blindtext[4]

paragraph1

%paragraph2
\clearpage
\section{My section}

\begin{figure}[hbpt]
\includegraphics{example-image-a}
\end{figure}

\blindtext
\end{document}

相关内容