请求 etoolbox 包解释

请求 etoolbox 包解释

我正在尝试理解以下包etoolbox。我不确定以下语法的含义,因为我不确定在 Google 中或在 Knuth 的书中要搜索什么的正确问题是什么。

\edef\etb@catcodes{\etb@catcodes}

我不明白这句话的意思,尤其是那个@字符。如果有人能解释一下,我将不胜感激。

答案1

etoolbox一旦明白了这一点,这部分内容相当棘手,但实际上并不复杂。

当 LaTeX 执行时\usepackage,命名的文件被加载并被@视为一个字母,这使得可以在宏名中使用它。

etoolbox包需要在其中某些部分更改类别代码,因此它希望确保在最后恢复这些设置。

以下是代码:

\def\etb@catcodes{\do\&\do\|\do\:\do\-\do\=\do\<\do\>}
\def\do#1{\catcode\number`#1=\the\catcode`#1\relax}
\edef\etb@catcodes{\etb@catcodes}
\let\do\noexpand
\AtEndOfPackage{\etb@catcodes\undef\etb@catcodes}

第一条指令存储包中可能更改其类别代码的字符列表,以便在最后恢复。\do宏是用于定义列表的传统宏,可以重新定义为执行列表。在本例中,它被重新定义,例如,\do\&扩展为

\catcode\number`\&=\the\catcode`\&\relax

如果定义后的代码\do只是\etb@catcodes,则 TeX 会将上述代码转换为

\catcode 38=4

这将是无用的,因为这个当前设置。相反,etoolbox它希望将这些设置保存到最后,所以它确实

\edef\etb@catcodes{\etb@catcodes}

它对所有存储的字符进行类似的完全扩展。由于\edef在将含义赋予之前进行完全扩展\etb@catcodes,因此不存在无限循环的危险;最后,的定义\etb@catcodes相当于

\def\etb@catcodes{%
  \catcode 38=4\relax
  \catcode 124=12\relax
  \catcode 58=12\relax
  \catcode 45=12\relax
  \catcode 61=12\relax
  \catcode 60=12\relax
  \catcode 62=12\relax
}

但有一个根本的区别:如果某个包的类别代码被改成了|13,那么

  \catcode 124=13\relax

在 的定义中\etb@catcodes

在包的末尾,\etb@catcodes被执行,因此将所有类别代码恢复到以前的状态,并且宏未定义。

相关内容