従来の pTeX の UTF-8 入力の仕様では、
〈①〉や〈鄧〉等の JIS X 0208 にない Unicode 文字は元の UTF-8 のバイト列をエスケープ(^^ab
形式)したものに変換される
ということでした。ところが、少なくとも最新の W32TeX においては、JiS X 0213 や JIS X 0212 にある文字については、そこでの符号位置(に対応する sjis 値)をもつ和文トークンだと扱われるようです。(他のビルドは試していない。)
% ptex -kanji=utf8 -kanji-internal=sjis -no-guess-input-enc \def\inspect#1#2\nil{\count255=`#1} \inspect 鄧\nil \showthe\count255 % => 57797 % 従来の仕様なら「233」(先頭バイトの値)になるはず \bye
上のようなコードで試してみたところ:
- 〈①〉は JIS X 0213 の位置「13-01」の sjis 値 0x8740(CP932 の値でもある)の和文トークン
- 〈鄧〉は JIS X 0212 の位置「66-39」に対する sjis 値 0xE1C5 の和文トークン(ちなみに、JIS X 0213 の符号位置は「92-80」(0xEEEE)、CP932 では 0xFBB9)
今の動作だと、0212 と 0208 の同じ位置の文字が区別されないので、仕様としてはまずいと思いますが、これは意図した変更なのでしょうか?
ptexlive の変更履歴には
Unicode テーブルを gd ではなく nkf のものを利用するようにした。
とあり、恐らく動作の変化はこれに起因するのだと推測しますが…。