\makeatletter
Den \catcode des at-Zeichens (»@
«) auf 11 (letter) setzen.
Inhaltsverzeichnis
Verwendung
Syntax:
\makeatletter
Beim Einlesen des Quellcodes eines Dokuments bekommt jedes Zeichen neben seinem Zeichenwert auch noch einen Kategorie-Code. Je nach Kategorie-Code werden dann unterschiedliche Token gebildet, der Bearbeitungsmodus von TeX geändert oder die Zeichen selbst schlicht ignoriert.
Innerhalb von Makronamen sind nur Zeichen mit dem \catcode
11, der für Buchstaben steht, erlaubt. Trifft TeX auf ein anderes Zeichen, so wird der Makroname als beendet betrachtet. Einzige Ausnahme von dieser Regel ist, wenn das Zeichen mit dem abweichenden \catcode
das erste Zeichen des Makronamens nach dem Command-Zeichen (normalerweise der Backslash) ist. In diesem Fall besteht der Makroname nur aus diesem einen Zeichen.
Das at-Zeichen (»@
«) hat normalerweise den \catcode
12 (other), der für andere Zeichen steht. Interne Makronamen von LaTeX beinhalten häufig dieses Zeichen. Will nun ein Anwender einen solchen Makronamen in einem Dokument verwenden, so muss er zuvor dafür sorgen, dass das Zeichen den \catcode
letter erhält. Dies geschieht mit \makeatletter
. Nach der entsprechenden Befehlssequenz sollte der Anwender den \catcode
wieder auf other zurückschalten. Die Anwendung innerhalb einer Gruppe ist ebenfalls möglich und schränkt die Umschaltung auf diese Gruppe ein.
Während des Einlesens einiger Dateien sorgt LaTeX selbst dafür, dass @
den Kategorie-Code letter erhält. In diesem Fall sollte man sich die Umschaltung sparen.
Optionen
Die Anweisung hat keine Optionen.
Beispiele
\documentclass{article}
\usepackage[ngerman]{babel}
\makeatletter
\newenvironment{AbsatzHaengend}[1]{\par\noindent\@hangfrom{#1}\ignorespaces}
{\par}
\makeatother
\begin{document}
\begin{AbsatzHaengend}{So geht es: }
Dieser Absatz wird um den als Argument angegebenen Text eingezogen gesetzt.
Dies funktioniert, obwohl in der Definition der Umgebung
\texttt{AbsatzHaendend} das Zeichen \texttt{@} im
Makronamen von \verb|\@hangfrom| vorkommt.
\end{AbsatzHaengend}
\end{document}
Lässt man im Beispiel \makeatletter
und \makeatother
weg, so erhält man zwar keine Fehlermeldung aber hangfrom
wird in die Ausgabe geschrieben, statt als Teil der Anweisung betrachtet. Eine Fehlermeldung würde man aber beispielsweise erhalten bei:
\newcommand*\@NeueAnweisung{}
Hier hat man denn Fall, dass @
mit dem \catcode
other das erste Zeichen der Anweisung ist. Damit wird dann nicht \@NeueAnweisung
definiert, sondern es wird versucht, \@
neu zu definieren. Diese Anweisung existiert aber bereits, was zu der Fehlermeldung »Command \@ already defined.
« führt.
\makeatletter
\newcommand*\@NeueAnweisung{}
\makeatother
behebt das Problem.
Typische Fehlermeldungen im Zusammenhang mit vergessenen \makeatletter
- ! You can't use \spacefactor in vertical mode.
- Command \@ already defined.