CSSとLaTeXの比較」です。その直系にあたるバージョン3のバグフィックス版たちのことです)。文字の置換に「近い」ことをしてみましょう。マクロをどうやって書くか、何となく感じてもらうのが本章のゴールです。再帰!帰!!いま、与えられた文字列中のすべての文字を「*」に変換して伏字化した結果が欲しいとします。「brainfuck」→「*********」という具合です。パスワードの入力欄みたいな雰囲気ですね。思いつくのは、こんな再帰的なマクロを使った例です。これは実際、上記の例「brainfuck」→「*********」ならうまく変換してくれます。中で何がおきるのか、順番に見ていきましょう。マクロに引数が渡されるということです。ナンデと思うかもしれませんが、ブレースがない状態でマクロに何かを渡すと、その先頭だけが引数としてマクロに渡されるのです。使って定義できるのは、一般的なプログラミング言語における関数とかサブルーチンとかクロージャーとかではなく、「置き換えルール」だからです。ようなパラメータ引数が使えます。囲む」という置き換えルールです。それは、ブレースで囲まれて渡されたパラメータ引数は、そのブレースを取り除いた状態でまるごと束縛されることになってるからです。トークンとトークンリスト上記では「何か」とぼかしましたが、置き換えルールが適用される対象は「トークン」と呼ばれています。はじまるやつ)」です。TeXは、読み込んだファイルに含まれる文字や数字や記号を、まずこの「トークン」の列へと咀嚼します。して得られたトークンの列は、トークンリストと呼ばれます。みたいなパラメータ引数もトークンとみなされてるのですが、忘れてかまいませんこのトークンリストには、原稿を書いた人が入力したコントロールシーケンスなんかもみんな含まれているわけですが、それを最終的に出力するデータ用のトークンリストへと展開するのがTeXの次の仕事です。後ろにくっついているのに注意してください。ように囲んでグループとして渡せるといいました。ブレースで囲んだ「何か」は、トークンではありません。グループを開始する左ブレースというトークン、ブレースの間にあるトークンたち、それにグループを終了する右ブレースというトークンからなる、トークンリストの一部です。調べて条件分岐することにはなりません。読み飛ばされて意図しない結果になります。直後の2つのトークンをとって、それらを展開せずに、同じかどうかを調べます。読み飛ばされてしまいますよ。rainfuck!else節のようなものに処理がわたってこんなふうな結果になるように思えるかもしれません。rainfuck!しかし、実際にはこうなります。部分を実行する」ような代物ではありません。読み飛ばす」だけです。展開を試みることになります。単なる文字ではなく、カテゴリコードという値がついたトークンです。最終的にはアスタリスクが出力されるし、単なる文字との違いを意識しなければならないわけではないのですが、トークンリストに読み込まれているのは、あくまでも記号などの文字を意味するカテゴリコード12がついた文字トークンです。