読者です 読者をやめる 読者になる 読者になる

プログラムdeタマゴ

nodamushiの著作物は、文章、画像、プログラムにかかわらず全てUnlicenseです

TeXの「^^」について半分分かった

TeX

 「^^」ってGoogleとかで検索できないから、正直諦めてたんですが、偶然資料見つけました。TeXbyTopic クヌース氏のソースコード読んで何とかならないかなーとか思ってたんだけど、そもそもPascal知らないのに、さらに文芸的プログラミングを解読するとか、糞面倒で諦めた。環境整えるのも面倒くさいし。で、そのままCTANをフラフラしてたらなんかinfoの下にTeXの本とかいう注釈が書かれたところがあったので、何となく覗いてみたら、ジャストな情報が33Pに載っていました。ありがたい。これは印刷して本にしておこう。(私は画面より本の方が好き。)

 で、ざっくりと33Pの内容を言うと、「^^」は通常のテキストでは入力できない制御文字にアクセスする為の手段として使うみたいです。変換ルールは以下の通り。

  1. ^^^^は同じ文字であること。
  2. ^^**はASCIIコードで0から127の文字であること。エラー処理については書いてないので分からん。
  3. 得られた*のASCIIコード値nが64以上の場合はn-64を、nが63以下の場合はn+64の文字を返す。なお、実際には場合分けしなくても64との排他和でおk。



 これを使うと、^^?は127のDELになり、確かに普通では入力されない文字を扱うことが出来ましたとさ。

 さらに、これを拡張した「^^xy」という記法もある。xyは0-9,a-fの16進数である。「^^*」は0〜127までしかアクセスできないけど、「^^xy」は0〜255までアクセスできると言うことらしい。この数字どう使うのか書いてくれてないんだけど、たぶん直接xyのASCIIコードの文字を出力するんじゃないかな?こっちはまだよく分かってないので、実装は見送りました。



 そこまでは分かった。だが、結局それでは「^^A=∆」となる理由がさっぱどわからんのよねー。でも、そんなこまけぇこたぁーまーいーやー。





 ちなみに、これ実装した所為で、prereadの為に文字を3つ先まで先読みする機能が必要になったし、Lamuriyanでは無視してたInvalidを扱う必要が出てきたので、Parser周りを結構書き換えさせられました。まぁ、30分で終わったけど………。