Mehrfachtest, wenn oder Fall

Mehrfachtest, wenn oder Fall

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 ifthenPaket 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&#1&\else (#1)\ifx&#2&\else (#2)\ifx&#3&\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 \NewDocumentCommandermöglicht die einfache Aushandlung (mehrerer) optionaler Argumente mithilfe von ofü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>}).

Bildbeschreibung hier eingeben

\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}

verwandte Informationen