1. 程式人生 > >latex中@的含意

latex中@的含意

指定 原因 atl relax let size xxx other 方式

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