同一页面仍出现分页符

同一页面仍出现分页符

我根本找不到有关该samepage环境的任何文档(除了 LaTeX 书第 229 页上的一条神秘评论“该\samepage命令仍然有效,但现在用处不大”,这可能与同名环境相关,也可能不相关)。 这个答案并且环境的名称表明它应该将其内容保留在同一页面上,但事实并非如此,正如此 MWE 所示:

\documentclass{article}
\usepackage{lipsum}
\usepackage{parskip}

\begin{document}
\lipsum[4-8]

\begin{samepage}
foo

bar
\end{samepage}
\end{document}

这会破坏“foo”和“bar”之间的页面。我是否误用了环境samepage?有记录吗?

此示例需要xelatex而不是,但您可以通过在环境中添加第三行latex来看到相同的效果。latexsamepage

答案1

samepage在每个可以合理访问的地方,比如段落的行之间(但不是单行段落)以及 latex 可以控制的每个地方,例如列表项、数学显示等,都很容易发生中断。

也许令人惊讶的是, tex 有一个\interlinepenalty原语来控制换行时的惩罚,但是没有任何东西可以控制断行时的惩罚\parskip

Latex 的新段落钩子最终可以访问段落的开始和结束(参见texdoc ltpara-doc),因此您可以添加惩罚:

在此处输入图片描述

\documentclass{article}
\usepackage{lipsum}
\usepackage{parskip}
\AddToHook{env/samepage/begin}{%
\AddToHook{para/before}{\nopagebreak}%
\AddToHook{para/after}{\nopagebreak}%
}

\begin{document}
\lipsum[4-8]

\begin{samepage}
foo

bar

\end{samepage}

\end{document}

相关内容