upLaTeX で l3regex の 16 進コードによるマッチができない

Re: upLaTeX で l3regex の 16 進コードによるマッチができない

- 本田 知亮 の投稿
返信数: 1
処理を通すために下のようにその場限りの書き換えをすると

\regex_match:nnTF
{ \x{3042}い }
{ あいうえお }
{ True }
{ False }

はTrueに,「あかいうえお」すると Falseになって
なんとなく正しく動いている雰囲気にはなります.

\__regex_escape_x_end:w の最後でカテゴリコード12決め打ちのところを
#1の範囲に応じて12以外にできれば
もしかすると突破できる?
いまのupTeXのこのあたりのkcatcodeの設定がどうなってるのか分かってないですし,
このあたりのexpl3のコードもまるで読めないので
なんで通るのかもさっぱりです(正しい?偶然?)

%----------------------------------------
\documentclass{article}

\ExplSyntaxOn

\cs_set_eq:NN \c_max_char_int \relax
\int_const:Nn \c_max_char_int {"10FFFF}%%範囲を広げる

\cs_set:Npn \__regex_escape_x_end:w #1 ;
  {
    \int_compare:nNnTF {#1} > \c_max_char_int
      {
        \msg_expandable_error:nnff { regex } { x-overflow }
          {#1} { \int_to_Hex:n {#1} }
      }
      {
% #1 には文字コードがdecimalで入ってきている
        \exp_last_unbraced:Nf \__regex_escape_raw:N
          { \char_generate:nn {#1} { 17 } } %%ここを12以外にしてみる
      }
  }

\cs_set:Npn \__char_generate_aux:w #1 ; #2 ;
  {
    \if_int_odd:w 0
        \if_int_compare:w #2 < 1  \exp_stop_f: 1 \fi:
        \if_int_compare:w #2 = 5  \exp_stop_f: 1 \fi:
        \if_int_compare:w #2 = 9  \exp_stop_f: 1 \fi:
        \if_int_compare:w #2 > 20 \exp_stop_f: 1 \fi: \exp_stop_f:%%カテゴリコードの範囲を20まで広げてみる
      \msg_expandable_error:nn { char }
        { invalid-catcode }
    \else:
      \if_int_odd:w 0
        \if_int_compare:w #1 < \c_zero_int 1 \fi:
        \if_int_compare:w #1 > \c_max_char_int 1 \fi: \exp_stop_f:
        \msg_expandable_error:nn { char }
          { out-of-range }
      \else:
        \if_int_compare:w #2#1 = 100 \exp_stop_f:
          \msg_expandable_error:nn { char } { null-space }
        \else:
          \__char_generate_aux:nnw {#1} {#2}
        \fi:
      \fi:
    \fi:
    \exp_end:
  }

\begin{document}

\regex_match:nnTF
{ \x{3042}い }
{ あいうえお }
{ True }
{ False }

\end{document}
本田 知亮 への返信

Re: upLaTeX で l3regex の 16 進コードによるマッチができない

- ya ra の投稿

wryz77 さま

詳細に調べていただきありがとうございます。

ユーザーとしてはかなり苦しい結論ですね……

【余談】私が今回のケースを発見したのは,TeX Live 2024 において pTeX/upTeX 上で glossaries.sty を読み込もうとしたときに同様のエラーが出たのがきっかけでした。

私は expl3 を使ったパッケージを作成する過程で生じた問題だったのですが、すでにある pTeX/upTeX+glossaries パッケージでも生じるとなると多くの人に発生してしまいますね。(このことを思うと、うまく対応がなされると良いなぁ)


本田知亮さま

処理が通るようなコードを書いていただきありがとうございます。

私自身もよく分かっていないですが、私が作成していた expl3 を使ったパッケージに取り込んでみると、upLaTeX でも動作するようになりました。すごい

この処理で問題ないとなれば、wryz77 さんが遭遇した問題も解消される可能性がありますね。