コマンドの引き数をオプションにしたり、「*」が付いた場合に別の動作をさせるには、
\@ifnextcharと\@ifstarが使われます。
\@ifnextchar自体の引き数は3つです。
- #1 — マッチしたい文字
- #2 — マッチした場合の動作
- #3 — しなかった場合の動作
\@ifstarは2つで、マッチしたかどうかの動作です。
- #1 — マッチした場合の動作
- #2 — しなかった場合の動作
この2つの要素を両方とも使った例を作って見ました。こんな状況はなさそうですが。
\def\XXX{\@ifstar{\aaa}{\@ifnextchar[{\bbb}{\ccc[111][222]}}}
\def\aaa{000}
\def\bbb[#1]{\@ifnextchar[{\ccc[#1]}{\ccc[#1][333]}}
\def\ccc[#1][#2]{ccc---#1---#2---}
実行例
\XXX
\XXX*
\XXX[222]
\XXX[444][555]
結果
[ ] はさらに細かい数値などが必要な場合、* は挙動を2手に分けるために便利なもので、\@ifnextchar と \@ifstar を同列に置くものではなさそうです。
ちなみに\raiseboxコマンドのように[ ]だけが2つ使われるコマンドは意外とあります。
コメント