入力漢字コードが jis の pTeX での高位バイトの扱い

入力漢字コードが jis の pTeX での高位バイトの扱い

- Z. R. の投稿
返信数: 4

現状の (u)pTeX において入力漢字コードに jis を指定(-kanji=jis)した場合、入力ファイルに含まれる高位バイト(128 以上のバイト)の扱いはどうなるのでしょうか?

確か、昔の(ptexenc 導入以前の)pTeX では、kanji=jis の時に高位バイトがあればそれは EUC-JP として解釈されていたはずです。

しかし、少なくとも Windows の TeX Live(最新)で試したところでは、内部漢字コード(-kanji-internal)と同じと解釈されるように見えます。そういう仕様なのでしょうか。


[test.tex]
% 文字コードはeuc
\message{\number`琲}\bye % E0 EA
% sjisだと〈瑕〉となる

これを以下のコマンドでコンパイルします。

ptex -no-guess-input-enc -kanji=(F) -kanji-internal=(I) test.tex

\message で出力される整数値は以下のようになりました。

(F) (I)
sjis sjis 57578
sjis euc 57580
euc sjis 57576
euc euc 57578
jis sjis 57578
jis euc 57578
Z. R. への返信

Re: 入力漢字コードが jis の pTeX での高位バイトの扱い

- Akira Kakuto の投稿
よく理解していませんが,確か昔のものとの比較は
  昔      :          今
-kanji=euc  :  -kanji=eus -kanji-internal=euc
-kanji=sjis :  -kanji=sjis -kanji-internal=sjis
-kanji=jis  :  -kanji=jis -kanji-internal=euc
のようになっていたと思いますが,正しいでしょうか?
間違っているかも知れません。
拡張された部分の仕様は,詳しい方にお願い致します。
Z. R. への返信

Re: 入力漢字コードが jis の pTeX での高位バイトの扱い

- t tk の投稿
ptexenc導入以前のpTeXでは漢字コードはどうだったか、ASCIIメディアワークスさんのところに解説があります。
当時のソースもここに置いてあります。ざっと眺めた範囲では以下のようです。

かなり昔(p.3.0.1(2002年1月)以前)は
漢字の内部コードは、pTeXエンジンをコンパイルする時に固定されていました。
( 蛇足ですが、pTeX文書をコンパイルする時ではありません。念のため。 )
この頃は、Windows の一般的なバイナリーでは、内部コードはEUCに出来なかったはずです。

確か、昔の(ptexenc 導入以前の)pTeX では、kanji=jis の時に高位バイトがあればそれは EUC-JP として解釈されていたはずです。
p.3.0.4(2002年10月)以降は、おっしゃる通りだったようです。
しかし、実際には、
内部コードをSJISとEUCの両方についてformatファイルを用意して、どちらも使うようなユーザー、または、それを使う必要に迫られているユーザーは少なかったと思います。

> そういう仕様なのでしょうか。
私の記憶によれば、その通り、仕様です。
標準的な大多数のユーザーにとって
入出力ファイルの漢字コードを切り替えるケースはあっても、
それと連動してformatファイルを漢字コード毎に作り直すのは非効率であるため、
内部コードの切り替えを"-kanji"オプションとは分離した。
という経緯だった記憶しています。
土村さんの記憶が違っていれば、訂正ください。

土村さんのptetexのページをよく読むと、どこかに何か書いてあるかもしれません。
2007年5月の "platex-euc などのコマンドを廃止しました。" あたりが関係しているかもしれません。


t tk への返信

Re: 入力漢字コードが jis の pTeX での高位バイトの扱い

- Z. R. の投稿

皆さん、情報ありがとうございました。

「jis の時の高位バイト」については、こんな感じになっていると推定できそうです。

  • 昔からずっと、実装上は、「内部漢字コードを用いている」と解釈する。
  • しかし昔(p3.0.4以降で ptexenc 導入まで)は入力漢字コードが jis(-kanji=jis)である場合は、内部漢字コードは euc に固定されていた。
  • 従って、外部仕様としては、-kanji=jis の時に「実際には euc も読める」とされた。
  • ptexenc では、内部漢字コード(-kanji-internal)と入力漢字コード(-kanji)が独立に指定できる。
  • そして、「jis の時の高位バイト」については、昔の“実装上の仕様”を踏襲していて、内部漢字コードと同じになる。これが可変になったため、もはや euc とは限らなくなった。