多重测试 if 或 case

多重测试 if 或 case

我有一个新命令,它有可选参数:根据参数是否为空,我希望显示不同。当只有一个测试时,我可以毫无问题地进行管理,但是当有多个测试时,我不知道该怎么做。

带有 3 个参数:显示 H(1)(2)(3) 带有 2 个参数(第 3 个为空):显示 (1)(2) 带有一个参数(第 2 和 3 个为空):显示 H(1)

答案1

我希望这可以帮助你。

ifthen包可以在 LaTeX 中创建条件语句。请看以下示例,您可以看到如何定义一个具有三个可选参数的命令,这些参数根据哪些参数为空而显示不同的输出:

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

如果提供了所有三个参数,此命令将显示 H(#1)(#2)(#3);如果仅提供了前两个参数,则将显示 (#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}

相关内容