Множественный тест 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 для макросов using \NewDocumentCommandпозволяет легко согласовывать (несколько) необязательных аргументов, используя ofor []аргументы (или 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}

Связанный контент