(c:/texlive/2025/texmf-dist/tex/latex/datatool/datatool-utf8.ldf)
! Use of \??? doesn't match its definition.
<argument> \???
! LaTeX Error: Character code ##1 too large in \x{##2} regex.
l.2220 }
というエラーが表示されるようになりました。同様の問題が下記のサイトでも確認されているようです。
原因は glossaries.sty が内部で読み込む datatool-base.sty の中の LaTeX3 の正規表現処理が upLaTeX で上手く扱えないことにあるようでした。エラーメッセージは LaTeX3(expl3) の l3regex が出しているようです。
こちらのサイトにあるコードをコピペしてみると、今度は
(c:/texlive/2025/texmf-dist/tex/generic/pgf/frontendlayer/tikz/libraries/tikzli
brarypositioning.code.tex))
! Argument of \__char_generate_aux:w has an extra }.
<inserted text>
\par
l.32 \makeindex
というエラーが表示されました。今度は修正した部分が expl3 を利用しているTikz ほうで問題を起こしてしまうようです。
解決の糸口が見えないため TeX Live 2024 の最終版よりも前の環境を使って誤魔化していましたが、最近 ChatGPT に尋ねると問題の回避策を提案してくれたので記録しておきます。
datatool-base.sty の先頭付近で、いま使っているエンジンが Unicode を扱えるかどうかを判定する部分があり、upLaTeX は Unicode エンジンとみなされています。
しかし expl3 の l3regex 側では upLaTeX を Unicode エンジンとして扱わず、「非 Unicode エンジンでは 0xFF を超えるコードポイントを扱わない」という設定になっているため、upLaTeX で \x{3042} のように 0xFF 超えのコードポイントを指定するとエラーが生じるということのようです。
回避策として、datatool だけ upLaTeX を Unicode エンジンとみなさないようにするという方法を取ります。
アイディア
- datatool が UTF-8 設定ファイル
datatool-utf8.ldfを読む直前に\datatool_if_unicode_engine:TFを常に偽を返す関数に差し替える
というものです。コードは次のようになりました。
% glossaries よりも前に書く
\ExplSyntaxOn
% datatool-utf8.ldf が読まれる直前にフックを挿入
\AddToHook{file/datatool-utf8.ldf/before}
{
% ここで「Unicode エンジンかどうか」の判定を全部 false 側に振る
% \datatool_if_unicode_engine:TF {<true-code>} {<false-code>}
% が常に <false-code> を実行するようになる
\cs_set_eq:NN \datatool_if_unicode_engine:TF \use_ii:nn
\cs_set_eq:NN \datatool_if_unicode_engine:T \use_none:n
\cs_set_eq:NN \datatool_if_unicode_engine:F \use:n
}
\ExplSyntaxOff
\usepackage{glossaries}
% あとはいつも通り
この修正でとりあえずタイプセットが通るようになりました。