Tengo un nuevo comando que tiene parámetros opcionales: dependiendo de si el parámetro está vacío o no, me gustaría que la visualización fuera diferente. Cuando solo hay una prueba la logro sin problema pero cuando hay varias pruebas no encuentro como proceder.
con los 3 parámetros: display H(1)(2)(3) con 2 parámetros (el 3º está vacío): display (1)(2) con un solo parámetro (el 2 y el 3 están vacíos): display H(1 )
Respuesta1
Espero que esto te ayude.
El ifthen
paquete puede crear declaraciones condicionales en LaTeX. Eche un vistazo al siguiente ejemplo donde puede ver cómo definir un comando con tres argumentos opcionales que muestran diferentes resultados dependiendo de qué argumentos estén vacíos:
\usepackage{ifthen}
\newcommand{\mycommand}[3][]{%
\ifthenelse{\equal{#1}{}}{}{H}%
\ifthenelse{\equal{#1}{}}{}{(#1)}%
\ifthenelse{\equal{#2}{}}{}{(#2)}%
\ifthenelse{\equal{#3}{}}{}{(#3)}%
}
Este comando mostrará H(#1)(#2)(#3) si se proporcionan los tres argumentos, (#1)(#2) si solo se proporcionan los dos primeros argumentos y H(#1) si solo se proporcionan los dos primeros argumentos. Se proporciona el primer argumento. Esto es lo que estabas buscando?
Respuesta2
Quizás quieras hacer esto:
\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
Respuesta3
Parece algo superfluo usar múltiples argumentos opcionales, ya que su opcionalidad pasa a ser obligatoria una vez que necesitas usar más. A menos, por supuesto, que cambies la sintaxis.
La interfaz LaTeX3 para el uso de macros \NewDocumentCommand
permite negociar fácilmente (múltiples) argumentos opcionales utilizando argumentos o
for []
(o d<token><token>
para un par específico <token><token>
). Las pruebas se realizan usando \IfValueTF{<arg>}{<true>}{<false>}
(o más simplemente si no es necesario hacer nada cuando no se proporciona nada \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}