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

不過,根據預期輸入的類型,整體不同的語法可能是更好的方法。在大多數情況下,三個可選參數使命令變得不必要的複雜。也許一個需要類似鍵值輸入的可選參數會是更好的選擇?

舊答案:

這是一個想法:

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

相關內容