Floatbarrier 防止页面分页时底部对齐

Floatbarrier 防止页面分页时底部对齐

当我使用 placeins 包并使用 \FloatBarrier 时,浮动移动到下一页时会出现一种奇怪的(对我来说)行为。

看这个例子:

\documentclass[
12pt,
pdftex,
a4paper,
twoside,
openright,
parskip=half,
]{scrreprt}

\usepackage{showframe}
\usepackage{blindtext}
\usepackage{placeins}

\begin{document}
\section{First chapter}
\Blindtext[1][3]

\begin{figure}[htbp]
    \rule{14cm}{8cm}
    \caption{Here is some caption.}
\end{figure}
Just some text to force the page break to occure. \\
Just some text to force the page break to occure. \\
\Blindtext[1][1]
\FloatBarrier
\section{Second section}
\Blindtext[2][1]

\end{document}

第 1 页末尾没有垂直校正(\flushbottom}。如果删除 \FloatBarrier,布局就很好。

使用 \FloatBarrier 时: 使用 \FloatBarrier

并且没有: 没有 \FloatBarrier

我知道在这种情况下,不需要 \FloatBarrier,但在某些情况下我需要它,这看起来很奇怪。当然,在这种情况下我可以用 \pagebreak 替换 \FloatBarrier,但这是预期的行为吗?

答案1

这是预期的行为,但尚不清楚总体上如何改变。

\FloatBarrier本质上是:如果有待处理的浮动,\clearpage则不执行任何操作

所以页面看起来很短的原因是因为\clearpage总是在页面底部的分页符前留有空白。确实必须这样做。

\clearpage正如您所知,这里有待处理的浮动,您可以轻松测试如果没有填充页面末尾,它会是什么样子,方法是使用

\pagebreak\FloatBarrier

在生成的测试文件上

在此处输入图片描述

这似乎是一种改进,但这仅在强制分页符恰好接近页面的自然结束处时才有效,因此保持齐底设置才有效。

一般情况下,强制分页前页面上可能只有少量的文字,那么将空间放在页面底部是唯一的可能性。

如果我将您的测试文件更改为

\documentclass[
12pt,
pdftex,
a4paper,
twoside,
openright,
parskip=half,
]{scrreprt}

\usepackage{showframe}
\usepackage{blindtext}
\usepackage{placeins}

\begin{document}
\section{First chapter}
\Blindtext[1][1]

\begin{figure}[p]
    \rule{14cm}{8cm}
    \caption{Here is some caption.}
\end{figure}
\Blindtext[1][1]

%\pagebreak
\FloatBarrier
\section{Second section}
\Blindtext[2][1]

\end{document}

然后你就会看到跟页面被强制短一模一样的情况:

在此处输入图片描述

但在本例中显然很多更糟糕的是,如果您要更改\clearpage以保留 flushbottom 设置,您可以通过取消注释来检查\pagebreak以获取 flushbottom 设置

Underfull \vbox (badness 10000) has occurred while \output is active

在此处输入图片描述


因此,一般来说,让页面变短是唯一可能的默认设置,但在特定情况下,如果页面不是“太短”,您可以\pagebreak在障碍物之前放置它,以强制页面底部齐平。

相关内容