====== 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 ^ | 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 | |