\@vobeyspaces 的定义

\@vobeyspaces 的定义

在 的第 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

相关内容