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}
latex中@的含意