我想用 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
}
进行调整以适应。