Alle Zeichen in LaTeX besitzen einen Kategoriecode (category code, catcode).
Insgesamt gibt es 16 catcodes, wobei z.B. normalen Buchstaben (a-z,A-Z) den
catcode 11 erhalten. Sonderzeichen wie \
(catcode 0) oder {
(catcode 1) und eben auch @
(catcode 12) werden daher nicht als normale
Buchstaben behandelt und dürfen somit vom normalen Benutzer nicht in Makros
verwendet werden. Deshalb sind z.B. Makronamen wie \foo123
oder
\foo!
normalerweise ungültig (allerdings gibt es Wege, solche Makronamen zu erzeugen, z.B. mit \csname … \endcsname
).
In Klassen- (.cls) und Stildateien (.sty) hat @
jedoch den catcode 11 und somit
sind Makros wie z.B. \@foo
zulässig. Dies erlaubt, dass solche Definitionen vom normalen Benutzer
geschützt/versetckt werden um z.B. ein versehentliches Überschreiben eines Makros zu verhindern.
Manchmal ergibt sich jedoch dennoch der Bedarf, interne Klassen- oder Stilmakros in der eigenen Datei zu modifizieren. Dazu möchte man nicht immer gleich eine eigene Klassen- oder Stildatei anlegen, sondern die Änderung direkt im eigenen Dokument vornehmen (meist in der Präambel). Dafür können dann folgende Befehle verwendet werden:
\makeatletter % ändert @ catcode von 12 zu 11 ---Definition-- \makeatother % ändert @ catcode zurück von 11 zu 12
makeatletter
bedeutet dabei „mache das @ zu einem normalen Buchstaben“, makeatother
„gebe dem @ wieder die spezielle Funktion“.
Ein Beispiel ist das Ändern der Position von Gleitobjekten auf sonst leeren Seiten:
\makeatletter \setlength{\@fptop}{0pt} % Gleitobjekt oben statt mittig auf sonst leerer Seite \makeatother
Vollständigkeitshalber hier noch eine Liste aller catcodes und ihrer Bedeutungen:
Code | Bedeutung | Beispiel |
---|---|---|
0 | Escapesymbol, Befehlsanfang | \ |
1 | Beginn einer Gruppe | { |
2 | Ende einer Gruppe | } |
3 | Anfang und Ende des Inline-Mathemodus | $ |
4 | Tabulatorzeichen (in Tabellen) | & |
5 | Zeilenende (in der Eingabe) | |
6 | Parametersymbol in Makros | # |
7 | mathematische Hochstellung | ^ |
8 | mathematische Tiefstellung | _ |
9 | zu ignorierendes Zeichen | |
10 | Leerzeichen | |
11 | Buchstaben | A-Za-z |
12 | sonstiges Zeichen (alles, was nicht in 1–11 und 13–15 genannt ist) | @ , ! |
13 | aktives Zeichen | ~ |
14 | Kommentarbeginn | % |
15 | ungültiges bzw. nicht erlaubtes Zeichen |