以前の記事で用いた「\lowercase
トリック」は、「整数値をその符号値をもつ文字トークンに変換する」ための常套手段である。
{\lccode`?=〈整数n〉\lowercase{\gdef\token{?}}}
単純に「符号値 n の文字を出力したい」のであれば \char
〈n〉 で事足りる。しかし「符号値 n の文字トークン」が欲しい場合もある(例えば \write
の引数や \csname
の中身に入れる、等)。この場合には \char
は役に立たない。また \chardef\token=
〈n〉 で定義される \token
は特殊な「\chardef
トークン」と呼ばれるものでこれも文字トークンではない。こういう時に上記のコードが使われる。\lowercase
を展開すると、引数の \gdef\token{?}
の中の ?
は「符号値 n の文字トークン」に置き換わって、これが所望のトークンとなっているのである。上記コードではマクロ \token
に格納したが、直接そのトークンを用いて何らかの処理を行う場合もある。なお、\lowercase
で変換された文字トークンのカテゴリコードは変換前のもの(この場合は〈?〉なので 12)を引き継ぐことに注意。
以上の機構を敢えてサブルーチンにまとめると以下のようになる。
% \getchartoken \制御綴{<整数ch>}
% 符号値が ch、カテゴリコードが 12 の文字トークンに展開されるマクロ
% として \制御綴 を(ローカルに)定義する。
\begingroup \catcode`\?=12
\gdef\getchartoken#1#2{%
\begingroup \lccode`\?=#2\relax
\lowercase{\endgroup \def#1{?}}}
\endgroup
(#1 への定義をローカルにする(\gdef
を使わない)ために \endgroup
を少し変な位置に置いている。)
さてここからが本題である。pTeX の和文トークンにおいて同様のサブルーチンを作るにはどうしたらいいか。pTeX では和文文字トークンはカテゴリーコードを持たないので、以下のような仕様になる。この \getjchartoken
の実装方法を考えてみてほしい。
% \getjchartoken \制御綴{<整数ch>}
% 内部漢字コードの値が ch の和文文字トークンに展開されるマクロ
% として \制御綴 を(ローカルに)定義する。
答えは 30 日後!(本当か?)