5

To put it simply, I want to avoid the following case:

Split theorem

That is,

Text text text
Theorem 1
<page break>
Body of Theorem 1
text text text

My style for theorems has a heading, a line break (postheadspace=\newline), and then the theorem body.

Above I created a latex file that shows a situation in which the theorem's header is isolated, with the body text appearing isolated as well on the following page.

I read in Knuth's TeXBook that for the exercises environments that are found along the book, an instruction that "prohibit[s] beginning a new page just after that line" has been in use (page 10). So looks like this is something that typographers put thought at.

Is there a latex command that I can pass to one of thmtoolss keys so that latex would not print my file in such a way?

MWE:

\documentclass{book}
\usepackage{amsthm,thmtools}
\declaretheoremstyle[
        headfont=\normalfont\bfseries, 
        notefont=\normalfont\bfseries,
        headpunct={},
        postheadspace=\newline,
        bodyfont = \normalfont,
        qed=\qedsymbol
]{mystyle}
\declaretheorem[style=mystyle]{theorem}
\begin{document}
\chapter{Introduction}
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Urna id volutpat lacus laoreet. Pulvinar pellentesque habitant morbi tristique. Amet aliquam id diam maecenas. Proin libero nunc consequat interdum. Viverra suspendisse potenti nullam ac. Et molestie ac feugiat sed lectus vestibulum. Id donec ultrices tincidunt arcu non sodales neque sodales. Cras pulvinar mattis nunc sed blandit libero volutpat. Aliquet risus feugiat in ante metus dictum at. Ac turpis egestas integer eget aliquet. Nunc mi ipsum faucibus vitae. Duis ut diam quam nulla porttitor massa. Sollicitudin tempor id eu nisl nunc mi ipsum faucibus vitae. Proin nibh nisl condimentum id.

Dui vivamus arcu felis bibendum ut tristique et egestas quis. Tincidunt nunc pulvinar sapien et ligula ullamcorper malesuada proin libero. Bibendum arcu vitae elementum curabitur. Nibh tortor id aliquet lectus. Fermentum odio eu feugiat pretium. Morbi quis commodo odio aenean sed adipiscing diam. Ac tincidunt vitae semper quis lectus nulla at. Eu facilisis sed odio morbi quis commodo odio aenean sed. Sagittis nisl rhoncus mattis rhoncus urna neque viverra justo nec. Tellus elementum sagittis vitae et leo duis. Suspendisse faucibus interdum posuere lorem ipsum dolor sit amet. Et magnis dis parturient montes nascetur ridiculus mus mauris.

Nulla posuere sollicitudin aliquam ultrices sagittis orci a scelerisque. Facilisi nullam vehicula ipsum a. Vitae tempus quam pellentesque nec nam aliquam. Tristique risus nec feugiat in fermentum posuere. Pulvinar elementum integer enim neque volutpat. Nunc sed blandit libero volutpat sed cras. Purus ut faucibus pulvinar elementum integer enim neque volutpat ac. Ut faucibus pulvinar elementum integer. Nunc sed augue lacus viverra vitae. Varius duis at consectetur lorem donec massa sapien faucibus. Id venenatis a condimentum vitae sapien. Sit amet mauris commodo quis imperdiet massa tincidunt. Gravida dictum fusce ut placerat orci nulla pellentesque dignissim enim. Mattis rhoncus urna neque viverra justo nec ultrices dui. Arcu bibendum at varius vel pharetra vel turpis nunc eget. Blandit massa enim nec dui. Et egestas quis ipsum.

\begin{theorem} This theorem should not be split into twp pages! \end{theorem} \end{document}

tush
  • 1,115

2 Answers2

5

You can tell theorem that it should use \needspace{3\baselineskip}.

\documentclass{book}
\usepackage{amsthm,thmtools,needspace}

\declaretheoremstyle[ headfont=\normalfont\bfseries, notefont=\normalfont\bfseries, headpunct={}, postheadspace=\newline, bodyfont = \normalfont, qed=\qedsymbol ]{mystyle} \declaretheorem[style=mystyle]{theorem}

\BeforeBeginEnvironment{theorem}{\needspace{3\baselineskip}}

\begin{document}

\chapter{Introduction} Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore>

Dui vivamus arcu felis bibendum ut tristique et egestas quis. Tincidunt nunc pulvinar sapien et lig>

Nulla posuere sollicitudin aliquam ultrices sagittis orci a scelerisque. Facilisi nullam vehicula i> \begin{theorem} This theorem should not be split into twp pages! \end{theorem} \end{document}

enter image description here

If you have several environments to be subject to the same treatment, it's simpler if you define

\newcommand{\mydeclaretheorem}[2][]{%
  \declaretheorem[#1]{#2}%
  \BeforeBeginEnvironment{#2}{\needspace{3\baselineskip}}%
}

just after loading the packages and use \mydeclaretheorem instead of \declaretheorem.

egreg
  • 1,121,712
  • Thanks very much. I have a couple of theorem environments (definition, corollary, theorem, remark etc.). Is it possible to pass a list of environment's names to the first argument of the \BeforeBeginEnvironment command? Like so: \BeforeBeginEnvironment{definition,corollary,theorem,remark}{\needspace{3\baselineskip}} – tush Oct 12 '22 at 15:09
  • @tush Added a suggestion – egreg Oct 12 '22 at 15:59
3

You could use a thmbox to keep it all together.

\documentclass{book}
\usepackage{amsthm,thmtools}

\declaretheoremstyle[ headfont=\normalfont\bfseries, notefont=\normalfont\bfseries, headpunct={}, %postheadspace=\newline, % does not apply bodyfont = \normalfont, thmbox={thickness=0pt,bodystyle=\noindent\normalfont, leftmargin= 0pt}, % added <<<<<<<<<<<<<< qed=\qedsymbol ]{mystyle} \declaretheorem[style=mystyle]{theorem}

\begin{document}

\chapter{Introduction} Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Urna id volutpat lacus laoreet. Pulvinar pellentesque habitant morbi tristique. Amet aliquam id diam maecenas. Proin libero nunc consequat interdum. Viverra suspendisse potenti nullam ac. Et molestie ac feugiat sed lectus vestibulum. Id donec ultrices tincidunt arcu non sodales neque sodales. Cras pulvinar mattis nunc sed blandit libero volutpat. Aliquet risus feugiat in ante metus dictum at. Ac turpis egestas integer eget aliquet. Nunc mi ipsum faucibus vitae. Duis ut diam quam nulla porttitor massa. Sollicitudin tempor id eu nisl nunc mi ipsum faucibus vitae. Proin nibh nisl condimentum id.

Dui vivamus arcu felis bibendum ut tristique et egestas quis. Tincidunt nunc pulvinar sapien et ligula ullamcorper malesuada proin libero. Bibendum arcu vitae elementum curabitur. Nibh tortor id aliquet lectus. Fermentum odio eu feugiat pretium. Morbi quis commodo odio aenean sed adipiscing diam. Ac tincidunt vitae semper quis lectus nulla at. Eu facilisis sed odio morbi quis commodo odio aenean sed. Sagittis nisl rhoncus mattis rhoncus urna neque viverra justo nec. Tellus elementum sagittis vitae et leo duis. Suspendisse faucibus interdum posuere lorem ipsum dolor sit amet. Et magnis dis parturient montes nascetur ridiculus mus mauris.

Nulla posuere sollicitudin aliquam ultrices sagittis orci a scelerisque. Facilisi nullam vehicula ipsum a. Vitae tempus quam pellentesque nec nam aliquam. Tristique risus nec feugiat in fermentum posuere. Pulvinar elementum integer enim neque volutpat. Nunc sed blandit libero volutpat sed cras. Purus ut faucibus pulvinar elementum integer enim neque volutpat ac. Ut faucibus pulvinar elementum integer. Nunc sed augue lacus viverra vitae. Varius duis at consectetur lorem donec massa sapien faucibus. Id venenatis a condimentum vitae sapien. Sit amet mauris commodo quis imperdiet massa tincidunt. Gravida dictum fusce ut placerat orci nulla pellentesque dignissim enim. Mattis rhoncus urna neque viverra justo nec ultrices dui. Arcu bibendum at varius vel pharetra vel turpis nunc eget. Blandit massa enim nec dui. Et egestas quis ipsum. \begin{theorem} This theorem should not be split into two pages! \end{theorem} \end{document}

c

UPDATE after comments. It seems that most of the thmbox defaults are, in this case, enough to obtain the required format.

\declaretheoremstyle[
%headfont=\normalfont\bfseries, 
notefont=\normalfont\bfseries,
%headpunct={},
%%postheadspace=\newline, % does not apply
%bodyfont = \normalfont,
thmbox={ thickness=0pt,bodystyle=\noindent\normalfont, leftmargin= 0pt}, % added <<<<<<<<<<<<<<
qed=\qedsymbol
]{mystyle}
\declaretheorem[style=mystyle]{theorem}
Simon Dispa
  • 39,141
  • Although it's improbable, if a theorem is more than a page in length, this will have unhappy consequences. – barbara beeton Oct 07 '22 at 15:46
  • Thanks very much! By following your suggestions I activate the thmbox key and use cut=false, I also inadvertently activate some other default keys such as bodystyle. Is it possible to keep the keys I passed to thmtools and nothing from thmbox (except cut=false, of course)? – tush Oct 07 '22 at 15:52
  • Actually, following @barbarabeeton 's comment, Knuth in his book hasn't instructed TeX to avoid page breaks in exercises, rather only to avoid a page break after the exercise's header. – tush Oct 07 '22 at 15:57
  • 1
    @tush In fact cut=false it is not necessary to keep the title with the first line and might be counterproductive with longer theorems. I updated the answer. It looks that the defaults of thmbox are enough for your needs. – Simon Dispa Oct 07 '22 at 16:01