Ich habe einen Befehl, der mehrere Argumente annimmt, von denen eines ein Stern ist:
\NewDocumentCommand{\foo}{ s m m }{
\IfBooleanTF{#1}{Asterisk is here.}{Asterisk is not here.} #2 #3.
}
Ich möchte einen weiteren Befehl definieren, der wie der erste funktioniert, aber mit einigen vordefinierten Argumenten, wie
\NewDocumentCommand{\baz}{ s m }{
\IfBooleanTF{#1}{
\foo*{#2}{a}
}{
\foo{#2}{a}
}
}
\baz
und \baz*
arbeiten auf die gleiche Weise, also möchte ich irgendwie definieren, \baz
ohne den {#2}{a}
Teil zweimal zu wiederholen. Ich habe versucht
\NewDocumentCommand{\baz}{ s m }{
\expandafter\foo\IfBooleanT{#1}{*}{#2}{a}
}
aber es funktioniert nicht. Komplette MWE
\documentclass{article}
\usepackage{xparse}
\NewDocumentCommand{\foo}{ s m m }{
\IfBooleanTF{#1}{Asterisk is here.}{Asterisk is not here.} #2 #3.
}
\NewDocumentCommand{\baz}{ s m }{
\IfBooleanTF{#1}{
\foo*{#2}{a}
}{
\foo{#2}{a}
}
}
\begin{document}
\baz{b}
\baz*{c}
\end{document}
Antwort1
Da TeX mit Makroerweiterung arbeitet, ist es nicht notwendig,alleder Argumente für \foo
im Konditional, sodass wir nur den eindeutigen Teil haben können:
\documentclass{article}
\usepackage{xparse}
\NewDocumentCommand{\foo}{ s m m }{%
\IfBooleanTF{#1}{Asterisk is here.}{Asterisk is not here.} #2 #3.%
}
\NewDocumentCommand{\baz}{ s m }{%
\IfBooleanTF{#1}%
{\foo*}%
{\foo}%
{#2}{a}%
}
\begin{document}
\baz{b}
\baz*{c}
\end{document}