根据页面位置进行条件输出

根据页面位置进行条件输出

我想用 scrbook 类准备一组小文本(字母,因此没有可以用作 \section 的实际标题)。其中一些文本很短,因此一页上可以容纳几段文本。两个文本之间应该有一个分隔符(我使用了包含水平线和间距的居中 parbox)。使用 needspace 包,\needspace{5\baselineskip} 我确保只有当下一个字母的前几行有足够的空间时才会输出分隔符——否则分隔符和文本将移动到下一页。

这已经是我想要实现的一部分了。下一步是如果分隔符要打印在下一页的顶部(即页体,标题行之后),则删除分隔符。有没有办法确定输出位置在顶部?

答案1

您可以needspace使用\clubpenalties,以便下一段落的至少三行保留在页面中。

对于分隔符,使用前导符,它会在分页符处消失。

\documentclass{book}
\usepackage{lipsum,showframe}

\newcommand{\separator}{%
  \par
  \vskip 0pt plus 5pt
  \cleaders\vbox to 20pt{\vss\hrule height 1pt width\textwidth\vss}\vskip20pt
  \vskip 0pt plus 5pt
}

% we want at least three lines
\clubpenalties=4 10000 10000 10000 0

\begin{document}

abc\footnote{abc}\footnote{def}\footnote{ghi}%
\lipsum[1]
abc\footnote{abc}\footnote{def}\footnote{ghi}%

\separator

abc\footnote{abc}\footnote{def}\footnote{ghi}
\lipsum[2]
abc\footnote{abc}\footnote{def}\footnote{ghi}%

\separator

abc\footnote{abc}\footnote{def}\footnote{ghi}
\lipsum[3]

\separator

\lipsum[4]

\separator

\lipsum[5]

\separator

\lipsum[6]

\separator

\lipsum[7]

\separator

\lipsum[8]

\separator

\lipsum[9]

\separator

\lipsum[10]

\separator

\lipsum[11]

\end{document}

在此处输入图片描述

如果要缩短并居中规则,使用不太突出的厚度:

\newcommand{\separator}{%
  \par
  \vskip0pt plus 5pt
  \cleaders\vbox to 20pt{
    \vss
    \moveright 50pt\vbox{\hrule width\dimexpr\textwidth-100pt}
    \vss}
  \vskip20pt
  \vskip0pt plus 5pt
  \nointerlineskip
}

进行调整以适应。

在此处输入图片描述

相关内容