我有一个接受多个参数的命令,其中一个是星号:
\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}