Was machen \makeatletter und \makeatother?

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
0Escapesymbol, Befehlsanfang \
1Beginn einer Gruppe {
2Ende einer Gruppe }
3Anfang und Ende des Inline-Mathemodus $
4Tabulatorzeichen (in Tabellen) &
5Zeilenende (in der Eingabe)
6Parametersymbol in Makros #
7mathematische Hochstellung ^
8mathematische Tiefstellung _
9zu ignorierendes Zeichen
10Leerzeichen
11Buchstaben A-Za-z
12sonstiges Zeichen (alles, was nicht in 1–11 und 13–15 genannt ist) @, !
13aktives Zeichen ~
14Kommentarbeginn %
15ungültiges bzw. nicht erlaubtes Zeichen