我有一个定理,它的一半在另一页上,正如我为您自动(无需\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}