\makeatletter Wiki .:. goLaTeX - Mein LaTeX-Forum


goLaTeX - Mein LaTeX-Forum

Mein LaTeX-Forum

goLaTeX.de - Wiki
 


\makeatletter

Den \catcode des at-Zeichens (»@«) auf 11 (letter) setzen.

Inhaltsverzeichnis

[bearbeiten] 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.

[bearbeiten] Optionen

Die Anweisung hat keine Optionen.

[bearbeiten] 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.

[bearbeiten] Typische Fehlermeldungen im Zusammenhang mit vergessenen \makeatletter

  • ! You can't use \spacefactor in vertical mode.
  • Command \@ already defined.

[bearbeiten] Verwandte Befehle

\makeatother

[bearbeiten] Links




Impressum | FAQ | goLaTeX RSS Button RSS-Feed

Copyright © 2008 - 2015 goLaTeX.de