LaTeX-Wörterbuch: TeX Primitiven: \csname

\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