我正在使用该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}