\somepenalty=10000 与 \somepenalty 10000 与 \somepenalty10000

\somepenalty=10000 与 \somepenalty 10000 与 \somepenalty10000

用下面的空格替换等号,或者完全省略该符号

\documentclass{article}
\pagestyle{empty}
\usepackage{lipsum}
\begin{document}
\interlinepenalty=10000
% or \interlinepenalty 10000 or \interlinepenalty10000
\lipsum[1-6]
\end{document}

不会改变结果:无论如何都禁止段落内的分页符。为什么有三个语法选项?有什么区别?

  1. 是否存在只有 = 才有效的情况?

  2. 是否存在仅空间起作用的情况?

  3. 是否存在只有并置才有效的情况?

答案1

没有区别。原始 tex 赋值的语法允许使用选项=(和可选空格)

注意

 \interlinepenalty 10000 or \interlinepenalty10000

由于不同的原因而相同,命令名称后的空格根本不会被标记,它只是终止命令,因此它们会产生相同的标记。

反过来

\interlinepenalty= 10000 

= 后面的空格已被标记但被忽略,因为赋值吸收了可选的等号(后跟一个空格)。

答案2

David C. 解释说,这三种选择之间没有区别,因为 TeX 语法规则(可选的=)或因为 toknizer 在情况 2 和 3 中输出相同的结果。但你会问为什么?原因是:=使用可选的,因为它更容易被人类理解。在过去(TeX 诞生时),每个字节都是计数的。因此:=宏体中不使用 ,因为这些标记字符串必须保存到内存中。但这个可选的=是在宏体之外使用的。今天,没有这样的内存限制,=建议使用 。

你的第二个问题:是否存在=不能使用的情况。是的。如果语法上下文不是赋值。例如\penalty 10000。原始命令\penalty不是原始寄存器,所以这不是赋值,而是在垂直或水平列表中执行某项操作的命令。你不能在这里使用=

我的最后一条评论:可选项=周围可能有可选的空间( 左右各一个空格)=。因此,\interlinepenalty= 10000也是可能的。并且

\interlinepanalty       =     10000

也是可能的,因为字符前面没有空格=,字符后面只有一个空格,=因为标记器将其转换为\interlinepenalty= 10000

答案3

除非我在已经给出的答案中忽略了这一点,否则还有一个悬而未决的问题:是否存在=需要的情况?是的,例如如果你想做

\let\foo $      % fine
\let\bar =      % incomplete
\let\baz !

在上面的例子中\bar,将设置为等号\let,而不是等号,因此你需要

\let\bar = =

(带或不带空格)。甚至更棘手:将 \let某物添加到“空格”标记(供读者练习)。

相关内容