我曾經有一個如下的定義來檢查是否缺少所有可選參數:
\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}