-
Notifications
You must be signed in to change notification settings - Fork 6
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
ptexenc 側で ^^-記法に変換しない実験 #147
Comments
(私が)忘れないうちに記録しておきます. 現行 (e-(u)pTeX 4.0.0) の挙動(どこかで zr さんが書かれていた記憶がありますが) input_line2 から TeX に外部ファイルからの入力が渡されるときには,和文・欧文の区別はありません1.通常の「トークン列の文字列化」では和文・欧文の区別は失われませんが,\scantokens の内部処理では「擬似ファイルからの入力」を行うため,やはり通常の和文・欧文の区別は失われます.そのため
は
とトークン化され,欧文バイト列が和文文字に化けることになります. ptexenc_buffer2 ブランチ(h-kitagawa@6159031 時点)の挙動input_line2 から TeX に外部ファイルの入力が渡される段階で和文・欧文の区別を行います.そのため,\scantokens による文字列化でも和文由来・欧文由来の区別は失われません.そのため
は内部コードがEUC, SJIS, uptex いずれの場合でも
とトークン化されます. ただ,実装から,e-upTeX では
という非対称性が生まれています.例えば
から得られる
というトークン列になってしまいます(「ひ」が和文文字トークンになっていない). 参考:
|
別案です。eb9add8
大体動いているように見えますが、どういうテストが良いのかよく分かっていません。 % UTF-8 入力,内部コード uptex, euc or sjis
\kcatcode`ひ=15
\def\xA{ひカ漢:ABC}
%\show\xA
\kcatcode\ucs"3041=17 \kcatcode\ucs"30A1=17
\edef\xB{\scantokens\expandafter{\xA\noexpand}}
\show\xA
\show\xB uptex-euc ::
uptex-sjis ::
uptex-uptex ::
|
eb9add8 は動作が変でした。 |
#146 に関連する実験です.
(e-)pTeX では,input_line2 関数において,UTF-8 入力を内部コードに変換してから TeX 側で処理する形になっていますが,その際に
ただ,現行のこの仕様ですと「^ + (非 JIS X 0208 文字)」が正しく扱えません.#146 の例ですと,UTF-8 入力「
^☃
」は TeX にと渡されてしまい,文字トークン列
と解釈されることになります.
LaTeX3 で正規表現を扱える (l3regex) ことを考えると,何らかの対応はしたい気分です.
……というわけで,h-kitagawa/ptexenc_buffer2 ブランチで,「input_line2 関数では ^^ 記法に変換せず,和文由来のバイト列は #81 で導入した別配列 buffer2 にフラグを立てる」という
お遊び実験をしています.ただこの方法だと,「TeX に渡る時点で和文(になりうる)・欧文の区別をつける」ことになり,\scantokens を実行した場合の挙動は要検討です.
The text was updated successfully, but these errors were encountered: