空白文字のカテゴリーコードを変更する激ヤバ呪文 \catcode`^^I=12\relax
ウッ……。
* * *
まあいかにもなネタなんだが、\catcode`^^I
が \catcode9
でなく \catcode32
の意味になることを知って身震いしたのは間違いない事実である。
ちなみに、この挙動は TeX の「文字符号形の“数字”表記」自体に起因するもので、数値が \catcode
の引数になっていることは特に関係がない。これは次のような例をみれば判る。
*\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言語コードを書きすぎて、正気が失われたのではないかと」
*「ヒィーーッ」