空白文字のカテゴリーコードを変更する激ヤバ呪文 \catcode`^^I=12\relax
ウッ……。
* * *
まあいかにもなネタなんだが、\catcode`^^I が \catcode9 でなく \catcode32 の意味になることを知って身震いしたのは間違いない事実である。
ちなみに、この挙動は TeX の「文字符号形の“数字”表記」自体に起因するもので、数値が \catcode の引数になっていることは特に関係がない。これは次のような例をみれば判る。
[TeX の対話モードで]
*\message{\number`^^I,\number` ,\number`\^^I,\number`\ }
32,32,9,32
*念のため補足すると、^^I はタブ文字の TeX エスケープ表現であり、その符号位置は 9 であり、また空白文字の符号位置は 32 である。従って、`\^^I、`\␣、`␣ は期待通りの数値に解釈されているが、`^^I は初級の TeX 学習者の期待を裏切る結果になっている。
この世にも恐ろしい挙動の原因は、世にも恐ろしい「TeX の字句解析」の仕様である。
カテゴリコード 10 の文字は、(無視されない状況では)その文字コードに関わらず、必ず文字コード 32 の(カテゴリコード 10 の)文字トークンを生み出す
つまりは、`^^I と書いても `␣ と書いたのと全く同じトークン列になり、後ろのトークンの文字コードは 32 なので、この“数字”が表す整数は結局 32 になる、というわけである。何とも恐ろしい……。
* * *
*「で、そもそもこんな恐ろしい \catcode`^^I なんて使う必要があるの?」
ZR「さあ……。“`␣”が書けない状況(例えば空白文字のカテゴリが 9 である)で空白文字のカテゴリを変える、とかの用途かな。でもその場合ももっと素直に \catcode`\␣ とか \catcode32 と書けば済むんだけど」
*「え、じゃあ、なんで、こんな恐ろしいものが出てきてしまったんですか…?」
ZR「多分、TeX言語コードを書きすぎて、正気が失われたのではないかと」
*「ヒィーーッ」