\ newcommand / \ newenvironment - optionale Parameter
Ich experimentiere mit meinen eigenen Befehle und Umgebungen und jetzt bin ich vor dieser Probleme:
- , Wie create-Befehl
\foo{parameter}[optional]
oder Umgebung, genannt\begin{bar}{parameter}[optional]
? - , Wie create-Befehl
\foo[optional_1]...[optional_n]{parameter}
Habe ich versucht,
\newcommand{\foo}[3][][]{#1#2#3} - failed
\newcommand{\foo}[3][2][][]{#1#2#3} - failed
Kennt jemand einige Tip??? Vielen Dank.
InformationsquelleAutor der Frage Crowley | 2010-05-25
Du musst angemeldet sein, um einen Kommentar abzugeben.
Mit dem Paket xparse (Teil des LaTeX3 Anstrengungen in der Entwicklung):
Optionale Argumente sind ein wenig anders in xparse mit \newcommand. Sie können erkennen, ob eine solche erteilt wird oder nicht:
Du wirst sehen, dass dies funktioniert durch die Verwendung eines lower case 'o', während die oberen case 'O', dann muss ein default-Wert (den hab ich leer gemacht, indem Sie eine leere Gruppe).
InformationsquelleAutor der Antwort Joseph Wright
Können Sie nicht erstellen Sie ein
\foo{parameter}[optional]
Befehl einfach; Sie können jedoch erstellen ein\foo[optional]{parameter}
Befehl mitWenn Sie es nennen, wie
\foo{given}
, wird es produzierenMandatory: given, optional: def
; wenn Sie es nennen, wie\foo[optional]{given}
, wird es produzierenMandatory: given, optional: optional
. Dies ist wahrscheinlich, wie Sie es tun sollten—, dass die besser Aussehen wird mit dem rest Ihres LaTeX-code. Erstellen Sie eine neue Umgebung mit optionalen Parametern erfolgt ebenfalls mitwo
#
ist wieder die optionale argument; das ist wieder so geschrieben, wie\begin{env}[opt]{req}...\end{env}
. Wenn Sie wirklich möchten Sie einen Befehl in der anderen form, siehe am Ende meiner Antwort.TeX-FAQ hat eine Antwort zu schreiben-Befehle mit mehr als ein optionales argument. Es gibt zwei Möglichkeiten, wie es zu tun. Die zugrunde liegende Idee ist, definieren Sie einen Befehl, der eine optionales argument nehmen kann, und dann läuft ein anderer Befehl, welcher selbst nimmt ein optionales argument, etc.; die twoopt Paket kapselt diese.
Wenn Sie wirklich wollen Sie einen Befehl wie
\reversed{mandatory}[optional]
können Sie es ja gerne machen. Zuerst definieren Sie einen Befehl, der nimmt ein argument benötigt, speichert es in einem makro, und leiten es dann auf einem anderen Befehl. Dieser zweite Befehl nimmt ein optionales argument und verwendet den angegebenen Befehl und optionalem argument. Umsetzung dieses alle zusammen, wir bekommenDann können Sie
\reversed{mandatory}[optional]
oder nur\reversed{mandatory}
, und alles sollte funktionieren.InformationsquelleAutor der Antwort Antal Spector-Zabusky
Beachten Sie auch die xargs-Paket. Das folgende ist ein Beispiel aus der Dokumentation.
Legen Sie es in der üblichen Weise,
und dann, wenn Sie definieren
(das heißt, verwenden Sie "1" für das erste argument, wenn es nicht angegeben ist, und "n" für den Dritten). Dann
Erträge (sans tiefgestellte Zeichen)
(x1, . . . , xn)
und
Erträge (wieder, sans tiefgestellte Zeichen, und y ersetzt die obligatorische parameter)
(y0, ..., yn)
InformationsquelleAutor der Antwort dank