Teste múltiplo se ou caso

Teste múltiplo se ou caso

Tenho um novo comando que possui parâmetros opcionais: dependendo se o parâmetro está vazio ou não, gostaria que a exibição fosse diferente. Quando há apenas um teste, consigo sem problemas, mas quando há vários testes, não encontro como proceder.

com os 3 parâmetros: display H(1)(2)(3) com 2 parâmetros (o 3º está vazio): display (1)(2) com um único parâmetro (o 2 e 3 estão vazios): display H(1 )

Responder1

Espero que isso ajude você.

O ifthenpacote pode criar instruções condicionais em LaTeX. Dê uma olhada no exemplo a seguir, onde você pode ver como definir um comando com três argumentos opcionais que exibem saídas diferentes dependendo de quais argumentos estão vazios:

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

Este comando exibirá H(#1)(#2)(#3) se todos os três argumentos forem fornecidos, (#1)(#2) se apenas os dois primeiros argumentos forem fornecidos e H(#1) se apenas o primeiro argumento é fornecido. Era isso que você estava procurando?

Responder2

Talvez você queira fazer isso:

\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

Responder3

Parece um tanto supérfluo usar vários argumentos opcionais, já que sua opcionalidade passa a ser obrigatória quando você precisa usar mais. A menos, é claro, que você altere a sintaxe.

A interface LaTeX3 para macros \NewDocumentCommandpermite negociar facilmente (múltiplos) argumentos opcionais usando argumentos ofor [](ou d<token><token>para um par específico <token><token>). O teste é feito usando \IfValueTF{<arg>}{<true>}{<false>}(ou mais simplesmente se nada precisar ser feito quando nada for fornecido \IfValueT{<arg>}{<true>}).

insira a descrição da imagem aqui

\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}

informação relacionada