e-(u)pTeX: ^ + 欧文バイトを \detokenize すると文字列が壊れる
Closed this issue · 2 comments
h20y6m commented
^
+ 欧文バイトを \detokenize すると文字列が壊れます。
% e-pTeX
% UTF-8で保存。
\def\test#1{\expandafter\testi\detokenize{#1}\relax}
\def\testi#1{\ifx#1\relax\else\immediate\write16{[#1]}\expandafter\testi\fi}
\test{^☃}
を実行すると
[^^^]
[e]
[2]
[^^98]
[^^83]
おそらく \detokenize
の内部で ^^^e2^^98^^83
を生成しそれを再解釈することによって発生するのではないかと思います。
h-kitagawa commented
pTeX の UTF-8 入力では,JIS X 0208 の範囲外の Unicode 文字は ^^xx
記法に(ptexenc で)変換されてから,pTeX 本体が処理することになります.
つまり,今回の例でいうと,
\test{^☃}
と入力しても,pTeX は
\test{^^^e2^^98^^83}
が入力されたと解釈する(両者は区別できない),ということです.
h20y6m commented
勘違いだったようですみません。
% UTF-8で保存。
\catcode32=9
\def\test#1{\expandafter\testi\detokenize{#1}\relax}
\def\testi#1{\ifx#1\relax\else\immediate\write16{[#1]}\expandafter\testi\fi}
\test{^ ☃}
とすると
[^]
[^^e2]
[^^98]
[^^83]
と正しく処理されました。