避免在章节/小节标题后立即分页

避免在章节/小节标题后立即分页

默认情况下,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

相关内容