TeXの記憶(122)–オプション引き数と星付きコマンドを定義する

コマンドの引き数をオプションにしたり、「*」が付いた場合に別の動作をさせるには、
\@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]

結果

0302

[ ] はさらに細かい数値などが必要な場合、* は挙動を2手に分けるために便利なもので、\@ifnextchar と \@ifstar を同列に置くものではなさそうです。

ちなみに\raiseboxコマンドのように[ ]だけが2つ使われるコマンドは意外とあります。

コメント