I have a custom document class, based on book.cls, for which the following code sometimes produces page breaks between two subsequent sections:
\section{Introduction}
% page break may occur here
\subsection{Getting started}
I am completely puzzled, because my definitions for the sectioning commands are almost identical to those in book.cls:
\newcommand \headingfont {\fontfamily{phv}\fontseries{bc}\fontshape{n}\selectfont}
\newcommand\section{\@startsection {section}{1}{\headerindent}%
{-3.5ex \@plus -1ex \@minus -.2ex}%
{2ex \@plus.2ex}%
{\color{MMIblue}\headingfont\Large}}
\newcommand\subsection{\@startsection{subsection}{2}{\headerindent}%
{-3.25ex\@plus -1ex \@minus -.2ex}%
{2ex \@plus .2ex}%
{\color{MMIblue}\headingfont\large}}
\newcommand\subsubsection{\@startsection{subsubsection}{3}{\headerindent}%
{-3.25ex\@plus -1ex \@minus -.2ex}%
{2ex \@plus .2ex}%
{\color{MMIblue}\headingfont\normalsize}}
% etc.
Any ideas what might cause LaTeX to allow a page break?
\@startsection
initiates itself with\par
and therefore allows for a page break before the sectional header. Specific to your code snippet,\section
attempts to avoid a page break after it, but\subsection
allows a page break before it.\section
attempts to avoid a page break after it? Is it the2ex \@plus.2ex
? I'd like to understand that.latex.ltx
you'll find the definition of\@startsection
-used by all sectioning commands in the default sense. At the start of\@startsection
you'l see an issue of\par
, which should allow for a possible page-break. However, at the end the entire sectional unit setting (you have to follow the command sequence) it executes\@xsect
where you'll see a\par\nobreak
.\nobreak
avoids a page-break. This is conditional on whether you have a display or run-in section. The former doesn't insert a vertical space so avoids a break.