多重檢定 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}

相關內容