如果文本位于页面底部,则自动分页

如果文本位于页面底部,则自动分页

有没有办法创建一个命令 \notbottom{mytext} 以便如果 mytext 位于页面底部则自动在 mytext 之前插入分页符?

答案1

这是一个解决方案:

\documentclass{article}
\usepackage{xcolor}
\usepackage{lipsum}
\newsavebox{\mybottombox} % Box to save the text of the command 
\newlength{\mybottomlength} % The length of our text inside the command
\newlength{\availafter} % The available length left on the page after placing our text


% Optional argument is the minimum length after the nobottom text for not pagebreak. Change it to your needs
\newcommand{\nobottom}[2][60pt]{\savebox{\mybottombox}{\vbox{#2}}\setlength{\mybottomlength}{\ht\mybottombox}%
\setlength{\availafter}{\dimexpr\textheight-\mybottomlength-\pagetotal\relax}\ifdim\availafter<#1%
\pagebreak\noindent\usebox{\mybottombox}%
\else%
\noindent\usebox{\mybottombox}%
\fi%
}%

\begin{document}
\lipsum[1-3]
\nobottom{\color{red}\lipsum[1]}

\lipsum[1-10]
\nobottom[80pt]{\color{blue}Test text here that need at least 80 pt of space left under the page}
\end{document}

当所需的最小高度定义为 60pt(默认值)时,(红色)文本将出现在页面中,因为文本下方剩余 60pt 的空间可用于其他(下一个)文本。当高度为mindim70pt 时,(红色)文本将转到下一页,因为红色后留给新文本的空间小于 70pt。

默认 60pt 的输出:

在此处输入图片描述

(对于 70 pt,红色文本前会有一个 \pagebreak -您可以通过更改默认值来测试它,或者[70pt]为命令提供可选参数=-)

另外蓝色文本至少需要 80pt,因此它会移动到下一页,如下图所示:

在此处输入图片描述

相关内容