xparse:\NoValue 已经消失 -> 现在如何检查多个 NoValues?

xparse:\NoValue 已经消失 -> 现在如何检查多个 NoValues?

我曾经有如下定义来检查是否缺少所有可选参数:

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

相关内容