複数のifまたはcaseをテストする

複数のifまたはcaseをテストする

オプションのパラメータを持つ新しいコマンドがあります。パラメータが空かどうかに応じて、表示を変えたいと思います。テストが 1 つしかない場合は問題なく管理できますが、テストが複数ある場合は、どのように進めればよいかわかりません。

3つのパラメータの場合: H(1)(2)(3) を表示 2つのパラメータの場合(3番目は空): (1)(2) を表示 1つのパラメータの場合(2番目と3番目は空): H(1) を表示

答え1

これがお役に立てば幸いです。

このifthenパッケージは、LaTeX で条件文を作成できます。次の例では、3 つのオプション引数を持つコマンドを定義する方法を示しています。どの引数が空であるかに応じて、異なる出力が表示されます。

\usepackage{ifthen}
\newcommand{\mycommand}[3][]{%
  \ifthenelse{\equal{#1}{}}{}{H}%
  \ifthenelse{\equal{#1}{}}{}{(#1)}%
  \ifthenelse{\equal{#2}{}}{}{(#2)}%
  \ifthenelse{\equal{#3}{}}{}{(#3)}%
}

このコマンドは、3 つの引数がすべて指定されている場合は H(#1)(#2)(#3) を、最初の 2 つの引数のみが指定されている場合は (#1)(#2) を、最初の引数のみが指定されている場合は H(#1) を表示します。これが探していたものですか?

答え2

おそらく、次の操作を実行したいでしょう:

\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

答え3

複数のオプション引数を使用するのは、オプションから必須に切り替わるため、いくぶん余計なように思えます。もちろん、構文を変更しない限りは。

マクロへの LaTeX3 インターフェイスでは、引数 (または特定のペア)に対して\NewDocumentCommandを使用して、(複数の) オプション引数を簡単にネゴシエートできます。テストは、(または、何も指定されていない場合に何もする必要がない場合は、より単純に) を使用して行われます。o[]d<token><token><token><token>\IfValueTF{<arg>}{<true>}{<false>}\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}

関連情報