Solía tener una definición como la siguiente para comprobar si faltaban todos los argumentos opcionales:
\NewDocumentCommand \question {o o o m} {
\bool_if:nTF {
\str_if_eq_p:nn { \NoValue } { #1 } &&
\str_if_eq_p:nn { \NoValue } { #2 } &&
\str_if_eq_p:nn { \NoValue } { #3 }
} {
<DO STUFF 1>
} {
<DO STUFF 2>
}
}
Pero eso se rompió con la última xparse
actualización. Ahora parece que solo existe la \IfNoValueTF{}{}{}
macro pero luego tengo que repetir una de las DO STUFF x
cosas. Leí xparse.sty
pero parece que ya no existe una solución tan fácil debido al QNoValue-
"truco".
¿Algunas ideas?
Respuesta1
Editar:Dado que los valores en blanco no son “sin valores”, es suficiente verificar si se ofrece la primera opción:
\ExplSyntaxOn
\NewDocumentCommand \question { o o o m } {
\IfNoValueTF { #1 } {
<DO STUFF 1>
} {
<DO STUFF 2>
}
}
\ExplSyntaxOff
Sin embargo, dependiendo del tipo de entrada esperada, una sintaxis general diferente podría ser una mejor manera. Tres argumentos opcionales hacen que un comando sea innecesariamente complicado en la mayoría de los casos. ¿Quizás un argumento opcional que espere una entrada similar a keyval sería una mejor opción?
Antigua respuesta:
He aquí una idea:
\documentclass{article}
\usepackage{expl3,xparse}
\ExplSyntaxOn
\NewDocumentCommand \question {O{\NoValue} O{\NoValue} O{\NoValue} m} {
\bool_if:nTF {
\str_if_eq_p:nn { \NoValue } { #1 } &&
\str_if_eq_p:nn { \NoValue } { #2 } &&
\str_if_eq_p:nn { \NoValue } { #3 }
} {
<DO STUFF 1>
} {
<DO STUFF 2>
}
}
\ExplSyntaxOff
\begin{document}
\question{}
\question[]{}
\question[][]{}
\question[][][]{}
\end{document}