\let
Low-Level-TeX-Anweisung um einem Makro die Definition eines anderen Makros zuzuweisen.
Inhaltsverzeichnis
Verwendung
Syntax:
\let\NEUESMAKRO=\ALTESMAKRO
\let\NEUESMAKRO\ALTESMAKRO
In beiden Fällen erhält das Makro \NEUESMAKRO
die Definition, die \ALTESMAKRO
zum Zeitpunkt der Ausführung der Anweisung hat. Im Gegensatz zur Verwendung von \def
wird dabei \NEUESMAKRO
nicht zu einem Aufruf von \ALTESMAKRO
. Im Gegensatz zur Verwendung von \edef
wird dabei die Definition von \ALTESMAKRO
auch nicht expandiert. Ist \ALTESMAKRO
nicht definiert, so ist anschließend auch \NEUESMAKRO
nicht definiert. Wird \ALTESMAKRO
anschließend umdefiniert, so bekommt \NEUESMAKRO
nicht die geänderte Definition von \ALTESMAKRO
, sondern behält die alte Definition. Hatte \ALTESMAKRO
Argumente, so hat \NEUESMAKRO
ebenfalls Argumente.
Häufig wird \let
verwendet, wenn eine Anweisung umdefiniert werden soll, wobei ihre alte Bedeutung in der neuen Definition mit verwendet werden soll. Siehe dazu das Beispiel unten. Dabei ist zu beachten, dass die Anweisung keine optionalen Parameter hat. In einem solchen Fall stellt das Paket letltxmacro
einen erweiterten \let
Befehl names \LetLtxMacro
zur Verfügung.
Optionen
Die Anweisung \let
kennt keine Optionen.
Beispiele
\newcommand*{\thesectionwas}{}% sicherstellen, dass \thesectionwas bisher nicht definiert war
\let\thesectionwas\thesection% \thesectionwas wird genau wie aktuelle \thesection definiert
\renewcommand*{\thesection}{Abschnitt~\thesectionwas}
In diesem Beispiel wird der aktuellen Definition von \thesection
das Wort »Abschnitt« gefolgt von einem nicht trennbaren Leerzeichen angehängt.
\newcommand*{\itemwas}{}% sicherstellen, dass \itemwas bisher nicht definiert ist
\newenvironment{descplus}[1]{% neue Umgebung descplus mit einem Argument
\description% description beginnen (entspricht im Wesentlichen \begin{description})
\let\itemwas\item% \itemwas wird genau wie aktuell \item definiert
\renewcommand*{\item}[1][]{% \item wird neu mit einem optionalen Argument definiert
\itemwas[{##1#1}]% Aufruf der alten Definition von \item
}%
}{%
\enddescription% description beenden
}
Hier wird eine neue Umgebung descplus
definiert. Diese hat ein Argument. Dieses Argument, also #1
, wird jedem Argument von \item
, also ##1
, angehängt.
Argumente der inneren Definition (\item
) werden wie üblich mit zwei »#« referenziert, während Argumente der äußeren Definition (descplus
) mit nur einem »#« referenziert werden.
\def\A{A}
\let\B\A
\def\C{\A}
\A\B\C
\def\A{a}
\A\B\C
Ergibt die Ausgabe »AAAaAa«.
\let\A\undefined% wir gehen davon aus, dass \undefined nicht definiert ist!
\let\B\A
\def\C{\A}
\A\B\C
Ergibt in der letzten Zeile eine Fehlermeldung wegen undefiniertem \A
, eine Fehlermeldung wegen undefiniertem \B
und erneut eine Fehlermeldung wegen undefiniertem \A
.
\let\A\undefined% wir gehen davon aus, dass \undefined nicht definiert ist!
\edef\B{\A}
\A\B
Ergibt bereits in der zweiten Zeile eine Fehlermeldung wegen undefiniertem \A
.