xparse: \NoValue desapareceu -> como verificar vários NoValues ​​agora?

xparse: \NoValue desapareceu -> como verificar vários NoValues ​​agora?

Eu costumava ter uma definição como a seguinte para verificar se todos os argumentos opcionais estavam faltando:

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

Mas isso quebrou com a xparseatualização mais recente. Agora parece haver apenas a \IfNoValueTF{}{}{}macro, mas depois tenho que repetir uma das DO STUFF xcoisas. Eu li o xparse.stymas parece não haver mais uma solução tão fácil devido ao QNoValue-"hack".

Alguma ideia?

Responder1

Editar:Como os valores em branco não são “sem valores”, é suficiente verificar se a primeira opção é fornecida:

\ExplSyntaxOn
\NewDocumentCommand \question { o o o m } {
    \IfNoValueTF { #1 } {
         <DO STUFF 1>
     } {
         <DO STUFF 2>
     }
}
\ExplSyntaxOff

Dependendo do tipo de entrada esperada, uma sintaxe geral diferente pode ser uma maneira melhor. Três argumentos opcionais tornam um comando desnecessário e complicado na maioria dos casos. Talvez um argumento opcional esperando uma entrada semelhante a um keyval seria uma escolha melhor?

Resposta antiga:

Aqui está uma ideia:

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

informação relacionada