我有一個帶有可選參數的新命令:根據參數是否為空,我希望顯示有所不同。當只有一個測試時,我可以毫無問題地管理它,但當有多個測試時,我不知道如何繼續。
有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}