Früher hatte ich eine Definition wie die folgende, um zu überprüfen, ob alle optionalen Argumente fehlten:
\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>
}
}
Aber das ist mit dem letzten xparse
Update kaputt gegangen. Jetzt scheint es nur noch das \IfNoValueTF{}{}{}
Makro zu geben, aber dann muss ich die DO STUFF x
Dinge wiederholen. Ich habe das gelesen, xparse.sty
aber aufgrund des QNoValue-
„Hacks“ scheint es keine so einfache Lösung mehr zu geben.
Irgendwelche Ideen?
Antwort1
Bearbeiten:Da leere Werte keine „Keine Werte“ sind, reicht es aus zu prüfen, ob die erste Option gegeben ist:
\ExplSyntaxOn
\NewDocumentCommand \question { o o o m } {
\IfNoValueTF { #1 } {
<DO STUFF 1>
} {
<DO STUFF 2>
}
}
\ExplSyntaxOff
Je nach Art der erwarteten Eingabe kann jedoch eine insgesamt andere Syntax besser sein. Drei optionale Argumente machen einen Befehl in den meisten Fällen unnötig kompliziert. Vielleicht wäre ein optionales Argument, das eine keyval-ähnliche Eingabe erwartet, die bessere Wahl?
Alte Antwort:
Hier ist eine Idee:
\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}