\penalty-10000
和之间有什么实际区别\linebreak
?两者都是多余的吗\allowbreak
?
\documentclass{article}
\begin{document}
Text text text text text. This is a paragraph containing a formula,
\(a + b + c + d \times e\).
% breaks before "c"
Text text text text text. This is a paragraph containing a formula,
\(a + b + c \linebreak + d \times e\).
% breaks after "c"
Text text text text text. This is a paragraph containing a formula,
\(a + b + c \penalty-10000 + d \times e\).
% breaks after "c"
\end{document}
请注意,此示例并非试图说明公式中的良好断点。欢迎随意编辑更好的示例。
顺便说一句,本例中早期的代码有\allowbreak\penalty-10000
,这实际上是多余的废话(参见例如用户 egreg 的回答)。
答案1
简短回答
\penalty-10000
和\linebreak
非常彼此不同。并且\allowbreak
与两者都有很大不同。
长答案
宏\nobreak
和分别\allowbreak
表示\break
\penalty 10000
\penalty 0
\penalty -10000
它们之所以在 LaTeX 中,是因为它们在 Plain TeX 中,而原始的 LaTeX 加载了 ,lplain.tex
它是 的稍微编辑过的副本plain.tex
。它们既没有记录在 LaTeX 手册中,也没有记录在 LaTeX Companion 中。实际上,\nobreak
出现在后者的索引中,并引用了第 234 页,但 可能是 的拼写错误\nopagebreak
)。
包含这些宏是为了向后兼容:许多旧版 LaTeX 文档使用了 Plain TeX 编程。然而,它们不应该在新文档中使用,因为它们违反了 LaTeX 区分水平和垂直模式下的命令的准则。
问题\break
是
abc\break def
和
abc\par\break def
有两个截然不同的含义:第一个是换行(如\linebreak
),第二个是引入页休息。
使用 LaTeX 的命令,\linebreak
在第一种情况下您会得到换行符,在第二种情况下您会得到错误。
在宏中,程序员可以精确控制时间,这些快捷方式非常方便。然而
\allowbreak
在 LaTeX 内核中只出现一次,其定义\pmod
是从 复制而来的plain.tex
;\break
出现两次,一次是在 的定义中\eject
(再次从 复制plain.tex
),一次是在 的定义中\@gnewline
( 的部分代码\\
,但在宏中\ifvmode
进行了测试,因此这\break
只能出现在水平或数学模式下);\nobreak
出现的频率更高,但总是在受控的情况下,模式是可以预测的;典型的外观是\if@nobreak\ifvmode\nobreak\fi\fi
。
结论很简单:不要在文档中使用这些宏。你可以在低级编程中使用它们,但你应该知道自己在做什么。如果你使用的某个宏\break
发出了分页符而不是换行符,请不要责怪 LaTeX。