默认情况下,LaTeX 允许在节/小节标题后的前两行段落后进行分页。我如何才能将此最小值扩大到三行或 值的 10% \textheight
?
答案1
可能存在一种通用机制:使用 e-TeX 及其\clubpenalties
命令。在下面的例子中,修补\@afterheading
似乎可以解决问题。
\documentclass{article}
\usepackage{etex}
\usepackage{etoolbox}
\makeatletter
\patchcmd{\@afterheading}%
{\clubpenalty \@M}{\clubpenalties 3 \@M \@M 0}{}{}
\patchcmd{\@afterheading}%
{\clubpenalty \@clubpenalty}{\clubpenalties 2 \@clubpenalty 0}{}{}
\makeatother
\usepackage{blindtext}
\textheight 480pt
\begin{document}
\section{bla}
\blindtext[3]
\section{blubb}
\blindtext
\clearpage
\section{foo}
\blindtext[3]
An extra line.
\section{bar}
\blindtext
\end{document}
更新:egreg 已经写了一个详细说明的\widowpenalties
和\clubpenalties
。
答案2
我解决了这个问题需要空间和标题安全包,例如:
\usepackage{titlesec} \usepackage{需要空间} ... \titleformat{\section} {\needspace{1in}\Large\bfseries}{\thesection}{1em}{}
硬编码 1in 很粗糙——可能应该是行高的倍数。无论如何,这在我的文档中效果很好,无需手动调整每个部分。
答案3
您可以使用 needspace。通过一些计算和测试,找到合理的值应该不太难:
\documentclass{article}
\usepackage{lipsum,needspace}
\begin{document}
\lipsum[1] \vspace{27\baselineskip}
\Needspace{7\baselineskip}
\section{Blubb}
\lipsum[1]
\newpage
\lipsum[1] \vspace{28\baselineskip}
\Needspace{7\baselineskip}
\section{Blabb}
\lipsum[1]
\end{document}
答案4
titlesec
提供nobottomtitles
将靠近底部的标题移至下一页的选项。带星号的版本更准确,请参阅手册。默认情况下,阈值为.2\textheight
。
\usepackage[nobottomtitles*]{titlesec}
\renewcommand{\bottomtitlespace}{.2\textheight} % default value