避免定理中的分页符

避免定理中的分页符

我有一个定理,它的一半在另一页上,正如我为您自动(无需\newpage)在下一页获得完整的定理一样?

\documentclass[a4paper]{book}
\usepackage[utf8]{inputenc}
\usepackage{lipsum}
\usepackage{theorem}
\newtheorem{teo}{Teorema}[chapter]

\begin{document}
\lipsum[1-5]

\begin{teo}
\lipsum[1]
\end{teo}

\end{document}

这里

我有左边,并且我自动需要右边(没有\newpage)。

答案1

构建于@cmhughes 的回答,因此技术上类似,etoolbox包裹\AtBeginEnvironment提供了一种使用和来连接到环境的开始和结束的方法\AtEndEnvironment。这样,可以获得类似的结果(无需使用ntheorem包裹):

\documentclass[a4paper]{book}
\usepackage[utf8]{inputenc}
\usepackage{etoolbox}% http://ctan.org/pkg/etoolbox
\usepackage{lipsum}% http://ctan.org/pkg/lipsum
\newtheorem{teo}{Teorema}[chapter]
\AtBeginEnvironment{teo}{\begin{minipage}{\textwidth}}
\AtEndEnvironment{teo}{\end{minipage}}

\begin{document}
\lipsum[1-5]

\begin{teo}
\lipsum[1]
\end{teo}

\end{document}

在此处输入图片描述

从输入中可以看到,theorem包裹不需要重现输出。但是,这也可能只是由于您的 MWE。我想,这可能是回答您的问题的最佳方式。但是...


我更好奇你为什么要这样做。例如,你会注意到在上述示例中,段落跳过被拉伸以填充页面的剩余部分,因为定理溢出到下一页。这可以通过使用类似 来避免\newpage。因此,在假设但可能的情况下,如果你有一个非常长的定理描述,你可能要考虑放弃以刷新全部的定理主体移到下一页。在这种情况下,我建议根据当前页面剩余的空间量来决定在哪里断点。needspace包裹如果页面上剩余的开放空间小于 ,则提供\Needspace{<length>}并发出。您可以按以下方式使用它:\break<length>

\documentclass[a4paper]{book}
\usepackage[utf8]{inputenc}
\usepackage{etoolbox}% http://ctan.org/pkg/etoolbox
\usepackage{needspace}% http://ctan.org/pkg/needspace
\usepackage{lipsum}% http://ctan.org/pkg/lipsum
\newtheorem{teo}{Teorema}[chapter]
\AtBeginEnvironment{teo}{\Needspace{5\baselineskip}}% \break if fewer than 5\baselineskip is available on page

\begin{document}
\lipsum[1-5]

\newpage
\begin{teo}
\lipsum[1]
\end{teo}

\end{document}

上述代码添加\Needspace{5\baselineskip}到环境的开头teo(使用\AtBeginEnvironment),\break如果当前页面上的可用内容少于该长度,则将发出一个5\baselineskip。如果可用的内容超过此长度,则不会\break发出任何内容。对于此示例,它会产生相同的结果。将其与由以下代码生成的灾难性输出进行比较:

\documentclass[a4paper]{book}
\usepackage[utf8]{inputenc}
\usepackage{etoolbox}% http://ctan.org/pkg/etoolbox
\usepackage{lipsum}% http://ctan.org/pkg/lipsum
\newtheorem{teo}{Teorema}[chapter]
\AtBeginEnvironment{teo}{\begin{minipage}{\textwidth}}
\AtEndEnvironment{teo}{\end{minipage}}

\begin{document}
\lipsum[1-2]

\begin{teo}
\lipsum[1-5]
\end{teo}

\end{document}

你就会明白为什么。

答案2

我们可以关注这篇文章的答案:牢不可破的方块

对于您来说,一个选择是使用ntheorem提供命令的包\theoremprework\theorempostwork该包允许您在全局定理定义之前和之后插入命令。

我们可以使用这些命令来概括minipage你的定理,如下所示:

\documentclass[a4paper]{book}
\usepackage[utf8]{inputenc}
\usepackage{lipsum}
\usepackage{ntheorem}

\theoremprework{\begin{minipage}{\textwidth}}
\theorempostwork{\end{minipage}}
\newtheorem{teo}{Teorema}[chapter]

\begin{document}
\lipsum[1-5]

\begin{teo}
\lipsum[1]
\end{teo}

\end{document}

相关内容