\newcommand und \renewcommand

\newcommand und \renewcommand

Die Befehle \newcommand und \renewcommand werden dazu verwendet, um neue Befehle zu definieren beziehungsweise um bereits bestehende Befehle umzudefinieren. Um genauer zu sein, der Befehl \newcommand wird dazu verwendet neue Befehle zu definieren, während der der Befehl \renewcommand dazu verwendet wird, bereits bestehende Befehl umzudefinieren.

Diese Unterscheidung ist insoweit wichtig, als der \newcommand eine Fehlermeldung bringt, wenn versucht wird, einen bereits vergebenen Befehlsnamen für ein neues Kommando zu verwenden, während der \renewcommand Befehl eine Fehlermeldung bringt, wenn der Befehl noch nicht existiert.  Mit anderen Worten \newcommand wird für neue Befehle verwendet, während \renewcommand für bereits bestehende Befehle verwendet wird. Davon abgesehen ist der Aufbau der Befehle im Prinzip gleich.

\newcommand

Für einen \newcommand muss ein Name gewählt werden, der noch nicht verwendet wird, es bieten sich daher hier deutsche Bezeichnungen an oder die Variante der Verwendung von Großbuchstaben. Bei der Bezeichnung (Namen) können nur Buchstaben aA bis zZ, ohne die Umlaute und das scharf s, verwendet werden. Als einziges Sonderzeichen darf am Ende der Bezeichnung ein Stern (*) gesetzt werden. An welcher Stelle der neue Befehl definiert wird, ist im Prinzip egal, es sollte jedoch beachtet werden, dass der neue Befehl immer erst ab der Stelle nach seiner Definition verfügbar ist, daher bietet sich die Präambel, das heißt der Teil zwischen \documentclass{...} und \begin{document} , dafür an, da dann der neue Befehl im gesamten Dokument genutzt werden kann. Es kann Klassen geben, wo dieses Vorgehen zwingend ist.

Aufbau

Der Aufbau der Befehle ist dabei wie folgt. Für \newcommand:

\newcommand{\cmd}{Definition}
\newcommand{\cmd}[N-Argumente]{Definition}
\newcommand{\cmd}[N-Argumente][Default Option]{Definition}

Und für \renewcommand:

\renewcommand{\cmd}{Definition}
\renewcommand{\cmd}[N-Argumente]{Definition}
\renewcommand{\cmd}[N-Argumente][Default Option]{Definition}

cmd

Das Feld cmd ist verpflichtend, es ist der Befehlsname. Der Befehlsname muss dabei mit einem Backslash (\) beginnen und die Zeichenfolge \end ist als Bezeichnung ausgeschlossen. Im Fall von \newcommand darf der Name nicht bereits vergeben sein, während er für \renewcommand bereits definiert seien muss.

Definition

Auch das Feld Definition ist verpflichtend, hier wird der neue Befehl definiert beziehungsweise hier wird die Definition eines bereits bestehenden Befehls umdefiniert.

Der Befehl (\cmd-Feld) fungiert hier wie eine Art Abkürzung für den Ausdruck, der in der Definition steht. Wenn die Definition Parameter enthält, werden diese durch die Werte ersetzt, die beim Aufruf des Befehls angegeben wurden beziehungsweise wenn vorhanden durch eine vorgegebene Option.

Im nachfolgenden Beispiel werden drei neue Befehle definiert. Wobei die ersten zwei als Grundlage für den dritten dienen.

\documentclass[margin=10pt]{standalone}
%...
\newcommand{\GT}{Spieltheorie}
\newcommand{\nbs}{\nobreakspace}
\newcommand{\GTn}{\GT\nbs}
%...
\begin{document}
%...
\GTn ist ein Teil der VWL
%...
\end{document}

N-Argumente

Dabei handelt es sich um eine ganze Zahl zwischen 1 und 9. Sie gibt die Anzahl der Argumente an, die der Befehl verwendet, inklusive aller optionalen Argumente. Die Angabe der Anzahl ist optional, im Fall das keine Anzahl gesetzt wird, wird der Default Wert 0 gesetzt, das bedeutet der Befehl besitzt keine Argumente. Hinweis: Wenn Sie einen Befehl umdefinieren, kann die neue Version eine andere Anzahl von Argumenten haben als die alte Version.

\documentclass[margin=10pt]{standalone}
%...
\newcommand{\GT}{Spieltheorie}
\newcommand{\GTB}[1]{\GT \ Blatt Nr.#1}
%...
\begin{document}
%...
\GTB{2}
%...
\renewcommand{\GTB}[2]{\GT \ Blatt Nr.#1 im #2}
%...
\GTB{2}{SS2022}
%...
\end{document}


Default Option

Die Defaultoption bezieht sich, wenn sie gesetzt wird, immer auf das Argument 1 (#1). Das heißt, wenn der Befehl mit folgendem Argument in eckigen Klammern aufgerufen wird, zum Beispiel \Befehl[Option]{...} dann wird in der Definition der Parameter #1 auf Option gesetzt. Wird der Befehl dagegen ohne die eckigen Klammern aufgerufen, zum Beispiel, \Befehl{...} dann wird in der Definition der Parameter #1 auf den bei der Definition angegeben Default Option gesetzt. In beiden Fällen beginnen die erforderlichen Argumente mit Parameter #2.

Das beschriebene Verhalten kann im Fall, dass der Befehl nur ein Argument besitzt, zu überraschenden Ergebnissen führen, was durch das nachfolgende Beispiel illustriert wird.

\documentclass[margin=10pt]{standalone}
%...
\newcommand{\GT}{Spieltheorie}
\newcommand{\GTB}[1][1]{\GT \ Blatt Nr.#1}
%...
\begin{document}
%...
\GTB{2} vs. \GTB[]{2} vs. \GTB
%...
\end{document}

Im Fall, dass der Befehl mindestens zwei Parameter hat, wird das Verhalten offensichtlich. Hier sehen Sie, dass dem Befehl nur ein Argument für den zweiten Parameter (#2) übergeben wird, während das Argument für den ersten Parameter einmal gar nicht angegeben ist, weshalb der Default Wert gesetzt wird und einmal als Option in eckigen Klammern gesetzt wurde.

\documentclass[margin=10pt]{standalone}
%...
\newcommand{\GT}{Spieltheorie}
\newcommand{\GTB}[2][SS2022]{\GT \ Blatt Nr.#2 im #1}
%...
\begin{document}
%...
\GTB{2} vs. \GTB[WS2021]{2}
%...
\end{document}

Defaultoptionen sollten Sie nur bei Befehlen definieren, die auch einen Defaultwert benötigen beziehungsweise ein solcher Wert sinnvoll ist.

Mehr wie 9 Parameter

Im Prinzip können Sie nur Befehle mit 9 Parametern erstellen. Es gibt aber dennoch eine Möglichkeit mehr wie 9 Parameter in einem Befehl zu verwenden. Im nachfolgenden Beispiel ist die Grundidee anhand einer 4×4 Matrix skizziert.

\documentclass[margin=10pt]{standalone}
%...
\newcommand\fot[2]{#1}
\newcommand\sot[2]{#2}

\newcommand{\szmatrix}[8]{
\begin{array}{|rrrr|}
\fot#1 & \sot#1 & \fot#2 & \sot#2 \\
\fot#3 & \sot#3 & \fot#4 & \sot#4 \\
\fot#5 & \sot#5 & \fot#6 & \sot#6 \\
\fot#7 & \sot#7 & \fot#8 & \sot#8 \\
\end{array}
}
\begin{document}
$\szmatrix{{1}{2}}{{3}{4}}{{5}{6}}{{7}{8}}{{9}{10}}{{11}{12}}{{13}{14}}{{15}{16}} $
\end{document}

Beitrag veröffentlicht

in

von

Schlagwörter: