xparse: \NoValue desaparecido -> ¿cómo comprobar varios NoValues ​​ahora?

xparse: \NoValue desaparecido -> ¿cómo comprobar varios NoValues ​​ahora?

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 xparseactualización. Ahora parece que solo existe la \IfNoValueTF{}{}{}macro pero luego tengo que repetir una de las DO STUFF xcosas. Leí xparse.stypero 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}

información relacionada