複数の引数を取るコマンドがあり、そのうちの 1 つはスターです。
\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*
同じように動作するので、その部分を2回繰り返さずに何とか定義したい。私は試してみ\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}