LaTeX-Wörterbuch: TeX Primitiven: \csname

Aus Wikibooks

Syntax[Bearbeiten]

\csname Tokens \endcsname

Beschreibung[Bearbeiten]

Zur Anweisung \csname gehört zwingend ein abschließendes \endcsname. Die zwischen \csname und \endcsname stehenden Tokens werden zu cmdname expandiert, und anschließend wird das Makro \cmdname definiert. Existiert \cmdname noch nicht, so ist sein Wert der von \relax.

Anwendung[Bearbeiten]

Mit \csname lassen sich zur Laufzeit neue Makros erstellen. Das kann man als primitive Variante von Reflexion ansehen.

Beispiel[Bearbeiten]

Das Makro \mkmacro hat zwei Argumente. Es erstellt ein Makro mit dem Name \dynexp, wobei exp die Expansion des ersten Arguments #1 ist. Das Makro \dynexp hat den Wert der Expansion von #2.

\def\mkmacro#1#2{\expandafter\xdef\csname dyn#1\endcsname{#2}}

Ein etwas anwendungsnäheres Beispiel. Hier wird \csname benutzt, um das Makro lemautorefname zu setzen. Dieses Makro wird von dem Makro autoref aus dem hyperref-Paket benutzt und erzeugt ganz unten im Text die Ausgabe Lemma 1.

\usepackage{aliascnt}
\newcommand{\mktheorem}[3]{%
\newaliascnt{#2}{#1}%
\newtheorem{#2}[#2]{#3}%
\aliascntresetthe{#2}%
\expandafter\def\csname#2autorefname\endcsname{#3}%
}
\usepackage{hyperref}
\usepackage{amsthm}
\newtheorem{thm}{Theorem}
\mktheorem{thm}{lem}{Lemma}

\begin{document}
\begin{lem}\label{lem}
1 + 1 = 2.
\end{lem}

\begin{thm}
2 + 1 = 3.
\end{thm}
\begin{proof}
\autoref{lem}%wird zu 'Lemma 1'
\end{proof}
\end{document}

Siehe auch:[Bearbeiten]