在 的第 53.3 节中source2e
,宏\@vobeyspaces
(一个用于环境的内部宏verbatim
)定义为
{\catcode`\ =\active%
\gdef\@vobeyspaces{\catcode`\ \active\let \@xobeysp}}
\catcode`\ =\active
这里为什么使用两次?有什么原因吗?
答案1
是的!
第一个应用\catcode`\ =\active
意味着对于该组的其余部分,任何空格标记都被标记为活动字符而不是空格。这是必要的,以便
\let \@xobeysp
将设置一个活动空间等于\@xobeysp
:请注意,此处之后的空间\let
是不是由于其 catcode-13 而被删除。
第二个\catcode`\ \active
意味着空格被标记后 \@vobeyspaces
被使用时将是活跃的:这是必要的,以便它能真正完成工作。
如果我们只有第二个设置,那么\@vobeyspaces
将会失败,因为空格仍将被标记为 catcode-10。如果我们只有第一个设置,那么 的定义就会\@vobeyspaces
有缺陷,并且\let
\@xobeysp
的使用之后会立即出现问题\@vobeyspaces
。