避免定理环境的头部成为页面的最后一行

避免定理环境的头部成为页面的最后一行

简单来说,我想避免以下情况:

分裂定理

那是,

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

我写定理的风格是先有一个标题,再有一个换行符(postheadspace=\newline),然后是定理主体。

上面我创建了一个 latex 文件,显示了定理标题被孤立的情况,并且正文在下一页上也同样被孤立地显示出来。

我在 Knuth 的 TeXBook 中看到,书中的练习环境中使用了“禁止在该行之后开始新页面”的指令(第 10 页)。所以看起来这是印刷工考虑过的事情。

是否有一个 latex 命令可以传递给其中一个thmtools键,以便 latex 不会以这种方式打印我的文件?

梅威瑟:

\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}

答案1

您可以说它theorem应该使用\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}

在此处输入图片描述

如果你有多个环境需要接受相同的处理,那么定义会更简单

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

在加载包之后立即使用\mydeclaretheorem而不是\declaretheorem

答案2

您可以使用它将thmbox所有内容放在一起。

\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

更新注释之后。在这种情况下,似乎大多数thmbox默认值足以获得所需的格式。

\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}

相关内容