[l3regex] [pTeX] \regex_replace_...関数の奇妙な動作
Closed this issue · 4 comments
h20y6m commented
以下のコードが pTeX で奇妙な結果になる。
\ExplSyntaxOn
\tl_set:Nn \l_tmpa_tl {吾輩は☃である。}
\regex_replace_all:nnN {[^☃]} {*} \l_tmpa_tl
\tl_show:N \l_tmpa_tl
\ExplSyntaxOff
pTeX:
> \l_tmpa_tl=吾輩は^^e2**である。.
upTeX:
> \l_tmpa_tl=***☃****.
pdfTeX:
> \l_tmpa_tl=*********☃************.
このコードが非Unicodeエンジンで意図通りの動作をしないのはわかるが、upTeX, pdfTeXと比較してpTeXの挙動が奇妙なので調べておきたい。
h20y6m commented
^☃
(^
, ^^e2
, ^^98
, ^^83
) を tl_to_str
(\detokenize
) すると ^^^
, e
, 2
, ^^98
, ^^83
になってしまうことが原因のよう。
おそらく \detokenize
のとき内部的に ^^^e2^^98^^83
という文字列が生成されそれを再解釈することで発生すると思われる。
h20y6m commented
h20y6m commented
ptexenc の仕様に起因するもので \detokenize
は無関係。
texjporg/tex-jp-build#146 (comment)
以下のようにすれば問題ない
\ExplSyntaxOn
\tl_set:Nn \l_tmpa_tl {吾輩は☃である。}
\regex_replace_all:nnN {[^ ☃]} {*} \l_tmpa_tl
\tl_show:N \l_tmpa_tl
\ExplSyntaxOff
> \l_tmpa_tl=***^^e2^^98^^83****.
h-kitagawa commented
h-kitagawa/ptexenc_buffer2 ブランチで個人的に実験しています.\scantokens 周りなどまだはっきりしていない点もありますが,何かあればそちらに.