# [texhax] List of Examples (page break?)

bnb at ams.org bnb at ams.org
Sat Sep 26 19:05:16 CEST 2015

On Sat, 26 Sep 2015, Uwe Lueck wrote:

BB> all very well, but is there a way to
BB> avoid a page break when the next bit
BB> after the *heading* is \begin{enumerate}
BB> or one of its kin?

Later:

BB> usually, the text of a theorem is
BB> expected to start on the same line as
BB> the *header*, but some authors insist
BB> on starting with a list.  and that
BB> can leave the header by itself at the
BB> bottom of a page.

Somewhat unfair, my conviction has become that
(all stars mine). I violated this rule myself late
at night in

http://tug.org/pipermail/texhax/2015-September/021933.html

point taken.  but it's still a problem
for the environment i work in.

Anyway, the theorem example modified:

\ProvidesFile{thmhdbrk.tex}[2015/09/26
texhax pbrk. thm. env.s (bb/ul)]
\documentclass{article}
%\usepackage{amsthm} %% either ...
\newtheorem{theorem}{Theorem}
\makeatletter
\newcommand{\firstthmenvlineemptyintentionally}{%
\leavevmode\newline
\clubpenalty\@M     %% TODO restored properly?
%% choose from:
\@nobreaktrue
%% ... without both, bad spacing (only!)
}
\makeatother
\begin{document}
\iftrue         %% see real-life pagebreak or don't
text at top of page\par
\vspace{30\baselineskip}
some more text\par
\vspace{12\baselineskip}
\fi
\begin{theorem}\firstthmenvlineemptyintentionally
\begin{itemize}
\item xxxx
\par \showlists
\item yyyy
\end{itemize}
\end{theorem}
\end{document}

doesn't solve the problem, *with
or without* amsthm.  if you change
the second \vspace to

\vspace{11\baselineskip}

you will find a lonely "Theorem 1"
at the bottom of the first page.

\@item is very complex, I won't understand all of it soon,
but at some place it uses \clubpenalty \@M too, and at some
other, it restores the normal value by

\clubpenalty \@clubpenalty

I can't tell soon whether this happens in time with my trick,
but something like that is necessary, because \clubpenalty
and \widowpenalty create a possible breakpoint after the
first line in the example, namely a penalty of their sum
(even with a two-line first item, strangely).

if i were coding this in plain tex,
i would set a switch to indicate that
course, the switch has to be unset
automatically if any real text follows;
tricky, but not impossible.)  then i
would test when entering the list to
determine whether the switch is set,
if so, prevent the page break, and in
any case, turn the switch off.  but the
latex definitions are so interconnected,
and \everypar so overloaded, that it's
next to impossible to figure out what
will "do the right thing".  and in any
event, using amsthm is an absolute
requirement, because it's build into
all ams document classes.  that is what
i live with.

the present practice with ams production
is to do a final visual sweep of a book
or article, and insert explicit page