我有一个新命令,它有可选参数:根据参数是否为空,我希望显示不同。当只有一个测试时,我可以毫无问题地进行管理,但是当有多个测试时,我不知道该怎么做。
带有 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&\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
答案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}