У меня есть команда, которая принимает несколько аргументов, одним из которых является звездочка:
\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}
}
}
\baz
и \baz*
работают одинаково, поэтому я хотел бы как-то определить, \baz
не повторяя {#2}{a}
часть дважды. Я пробовал
\NewDocumentCommand{\baz}{ s m }{
\expandafter\foo\IfBooleanT{#1}{*}{#2}{a}
}
но это не работает. Полная 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}
решение1
Поскольку TeX работает по принципу макрорасширения, нет необходимости иметьвсеаргументов \foo
в условном выражении, поэтому мы можем использовать только уникальную часть:
\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}