Ich habe diesen Befehl:
\newcommand{\name}[1]{\edef\name{#1}}
Sie rufen es zuerst wie in auf \name{Don}
und können anschließend mit auf Don verweisen \name
.Ist dies eine akzeptable Möglichkeit, eine Konstante auszudrücken, die nur einmal festgelegt werden sollte?
Antwort1
Ich würde unterschiedliche Befehle verwenden, einen zum Halten des Namens und einen anderen zum Festlegen des Namens.
In einem Paket ist es üblich, eine externe Version des Befehls ( \name
) zu verwenden, um den Wert eines internen Makros ( \@name
) festzulegen. So \author
funktioniert es \title
in der article
Klasse.
\makeatletter
\newcommand{\name}[1]{\gdef\@name{#1}}
\makeatother
Es wäre jedoch klarer und einfacher, wenn Sie verschiedene Befehlstypen verwenden würden, um unterschiedliche Verhaltensweisen anzuzeigen. \name
Erweitert sich also zum Namen und \setname
definiert den Wert von \name
:
\newcommand{\setname}[1]{\gdef\name{#1}}
Es ist gut, zwischen Befehlen zu unterscheiden, die Material angeben, das gesetzt werden soll, und Befehlen, die Konstanten definieren. Meiner Meinung nach sollten die Standard- \author
und \title
-Befehle in LaTeX eigentlich \setauthor
und sein \settitle
, da der eigentliche Satz erst erfolgt, wenn Sie den Befehl eingeben \maketitle
.
Antwort2
Klar, warum nicht. Ihr Einsatzzweck, Ihre Wahl.
Abhängig von der spezifischen Anwendung könnten Sie die Verwendung von \xdef
take in Erwägung ziehen, um die (erweiterte) Neudefinition global zu machen oder \protected@xdef
um „seltsame Konstruktionen“ in Namen zu berücksichtigen …