latex中@的含意
\@arabic跟\arabic类似,指定后面计数器的显示方式
\c@xxx 是latex定义的xxx计数器的内部表示方式
ctex-faq里面说\makeatletter使得@成为一个普通字母
: 那么平时@不是普通字母么?
: 不是可以直接打出来不用写成\@的么?
tex将字符分成16类(catcode),其中第11类是letter(a-z, A-Z),第12类是other,
就是除了其它15类的那种。tex命令只能由letter组成(这也是很多人在macro名中
用数字出错的原因,数字就属于other类)。@默认属于other类,故不能在macro的
名字中出现。
latex有个不成文的规则就是内部命令最好用@(latex自身的命令,如\@arabic,
或者宏包自身的命令,如articl.cls中的\@maketitle),而用户命令中尽量不要用@。
在一定程度上减小命名冲突。
根据前面的规则 @ 是不能出现在macro名字中的,所以非要用就得更改它的catcode属性
latex在cls和sty文件中,自动将@设置为letter类,也就是它可以作为macro名字
的一部分。所以我们在cls或sty中能看到满眼的@。
在用户文件中latex恢复了 @ 的类别,仍然属于other类。这样就从机制上限制用
户命令命名时使用@。但是我们经常需要修改宏包内部的命令,如果这个命令名字
包含 @,首先需要做的就是更改@的catcode为letter,这也就是\makeatletter的作用,
在修改完之后,一般建议恢复@的catcode为other,这也就是\makeatother。
在Latex source中,这两个命令的定义是:
\def\makeatletter{\catcode`\@11\relax}
\def\makeatother{\catcode`\@12\relax}