为什么 \samepage 不设置 \predisplaypenalty (为 \@M 或任何其他值)?

为什么 \samepage 不设置 \predisplaypenalty (为 \@M 或任何其他值)?

latex.ltx 定义了一个无分页命令,如下所示:

\DeclareRobustCommand\samepage{\interlinepenalty\@M
   \postdisplaypenalty\@M
   \interdisplaylinepenalty\@M
   \@beginparpenalty\@M
   \@endparpenalty\@M
   \@itempenalty\@M
   \@secpenalty\@M
   \interfootnotelinepenalty\@M}

TeX\predisplaypenalty去哪儿了?TeXbook将其定义为显示前分页的惩罚。 不应该\predisplaypenalty\@M也在那里吗? 是否应该在 的定义中添加其他内容\samepage,或者是否应该从中删除任何行?

答案1

LaTeX 设置 \predisplaypenalty为 10000,并且没有标准设置改变,因此无需\samepage重置它。

答案2

尽管通常该值不会从 10000 更改,但我同意 @egreg 的观点,我们可以在内核中设置它,\samepage以防万一。目前最简单的修复方法可能是

\AddToHook{cmd/samepage/after}{\predisplaypenalty10000\relax}

相关内容