让角色处于活动状态 vs 为其分配特定的 catcode

让角色处于活动状态 vs 为其分配特定的 catcode

我的问题源于我对Tab 不是额外的对齐标签和 Andrey 的更漂亮的版本。手头的问题涉及如何使 TAB 字符可用于对齐表格。我将其分配给 catcode 4(对齐),而 Andrey 使用了 catcode 13(活动字符),然后gdef将其设置为&

所以我的问题是:假设我们想让一个新角色表现得像&或者^什么的,什么时候最好将字符重新分配给更具体的 catcode(例如 1-4、7 或 8),什么时候最好使用通用 catcode 13?

(在相关问题中活跃角色让位于(非活跃)角色有人提到,将这些类别中现有的角色重新定义为其自身的活跃版本可能不是一个好主意,但我在这里谈论的是创建新角色。)

答案1

在 Andrey 的解决方案中,使^^I活动状态成为必要的,因为他想要捕获两个连续的标签并将其减少为一个:

\gdef^^I{\@ifnextchar^^I{}{&}}

您的(修订的)定义

\newenvironment{tabbedtabular}[1]
  {\catcode`\^^I=4 \begin{tabular}{#1}}
  {\end{tabular}}

可以,但是它不会捕获连续的标签,而是将它们中的每一个都解释为连续的标签&(在我看来,这两种方法都无法解决原始问题,但这是另一回事)。

一般规则可能是:当您只需要时分配特定的类别代码,当字符必须执行比具有特定类别代码的简单字符更多操作时使用 13。

我不会忘记类别 9(忽略)。例如,类别 9 字符会停止扫描控制序列名称。LaTeX3 遵循此方法:在.sty文件中忽略空格,这对于避免“虚假空格噩梦”非常方便。

相关内容