xparse: \NoValue исчезло -> как теперь проверить несколько NoValue?

xparse: \NoValue исчезло -> как теперь проверить несколько NoValue?

Раньше я использовал следующее определение, чтобы проверить, все ли необязательные аргументы отсутствуют:

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

Но это сломалось с последним xparseобновлением. Теперь, кажется, есть только макрос, \IfNoValueTF{}{}{}но тогда мне приходится повторять одно из этих DO STUFF xвещей. Я читал, xparse.styно, похоже, больше нет такого простого решения из-за QNoValue-"хака".

Есть идеи?

решение1

Редактировать:Поскольку пустые значения не являются «отсутствием значений», достаточно проверить, задан ли первый вариант:

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

В зависимости от типа ожидаемого ввода, в целом, другой синтаксис может быть лучшим способом. Три необязательных аргумента делают команду излишне сложной для большинства случаев. Может быть, один необязательный аргумент, ожидающий ввода типа keyval, был бы лучшим выбором?

Старый ответ:

Вот идея:

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

Связанный контент