Ich habe einen neuen Befehl mit optionalen Parametern: Je nachdem, ob der Parameter leer ist oder nicht, möchte ich, dass die Anzeige anders ist. Wenn es nur einen Test gibt, schaffe ich das problemlos, aber wenn es mehrere Tests gibt, finde ich nicht, wie ich weitermachen soll.
mit den 3 Parametern: Anzeige H(1)(2)(3) mit 2 Parametern (der 3. ist leer): Anzeige (1)(2) mit einem einzigen Parameter (der 2. und 3. sind leer): Anzeige H(1)
Antwort1
Ich hoffe das hilft dir.
Das ifthen
Paket kann bedingte Anweisungen in LaTeX erstellen. Sehen Sie sich das folgende Beispiel an, in dem Sie sehen, wie Sie einen Befehl mit drei optionalen Argumenten definieren, der unterschiedliche Ausgaben anzeigt, je nachdem, welche Argumente leer sind:
\usepackage{ifthen}
\newcommand{\mycommand}[3][]{%
\ifthenelse{\equal{#1}{}}{}{H}%
\ifthenelse{\equal{#1}{}}{}{(#1)}%
\ifthenelse{\equal{#2}{}}{}{(#2)}%
\ifthenelse{\equal{#3}{}}{}{(#3)}%
}
Dieser Befehl zeigt H(#1)(#2)(#3) an, wenn alle drei Argumente angegeben sind, (#1)(#2), wenn nur die ersten beiden Argumente angegeben sind, und H(#1), wenn nur das erste Argument angegeben ist. Ist das, wonach Sie gesucht haben?
Antwort2
Vielleicht möchten Sie Folgendes tun:
\def\H#1#2#3{H\ifx&\else (#1)\ifx&\else (#2)\ifx&\else (#3)\fi\fi\fi}
\H{a}{}{} % prints H(a)
\H{a}{b}{} % prints H(a)(b)
\H{a}{b}{c} % prints H(a)(b)(c)
\bye
Antwort3
Es erscheint etwas überflüssig, mehrere optionale Argumente zu verwenden, da ihre Optionalität in obligatorisch umschlägt, sobald Sie mehr verwenden müssen. Es sei denn natürlich, Sie ändern die Syntax.
Die LaTeX3-Schnittstelle zu Makros \NewDocumentCommand
ermöglicht die einfache Aushandlung (mehrerer) optionaler Argumente mithilfe von o
für []
Argumente (oder d<token><token>
für ein bestimmtes <token><token>
Paar). Das Testen erfolgt mithilfe von \IfValueTF{<arg>}{<true>}{<false>}
(oder einfacher, wenn nichts getan werden muss, wenn nichts angegeben wird, \IfValueT{<arg>}{<true>}
).
\documentclass{article}
% \mycommandA uses the default [] for optional arguments
\NewDocumentCommand{\mycommandA}{ o o o }{%
\mathrm{H}
\IfValueT{#1}{(#1)
\IfValueT{#2}{(#2)
\IfValueT{#3}{(#3)}}}
}
% \mycommandB uses () for optional arguments
\NewDocumentCommand{\mycommandB}{ d() d() d() }{%
\mathrm{H}
\IfValueT{#1}{(#1)
\IfValueT{#2}{(#2)
\IfValueT{#3}{(#3)}}}
}
\begin{document}
$\mycommandA[a]$
$\mycommandA[a][b]$
$\mycommandA[a][b][c]$
$\mycommandB(a)$
$\mycommandB(a)(b)$
$\mycommandB(a)(b)(c)$
\end{document}