ctex-kit icon indicating copy to clipboard operation
ctex-kit copied to clipboard

const 变量被修改

Open irenier opened this issue 10 months ago • 3 comments

https://github.com/CTeX-org/ctex-kit/blob/1ee66c6f130802d3400f893db01fd6a6701ab164/xeCJK/xeCJK.dtx#L2327-L2330

https://github.com/CTeX-org/ctex-kit/blob/1ee66c6f130802d3400f893db01fd6a6701ab164/xeCJK/xeCJK.dtx#L2449-L2450

请问这里的 \c_@@_FullLeft_chars_clist\c_@@_FullRight_chars_clist 是不是应该改为 \g_@@_FullLeft_chars_clist\g_@@_FullRight_chars_clist?因为 const 变量应该不能被 \clist_gconcat:NNN 函数修改。

irenier avatar Apr 29 '25 05:04 irenier

它们仍应是常量(\c_..._clist),但设置方式要改一下。

在 latex3/latex3#1629 提供更多创建常量的函数前,可以用

% collect content in \l_..._clist, in multiple steps
\clist_const:Ne \c_..._clist { \clist_use:N \l_..._clist } % \clist_use:N needs l3kernel 2024-12-09

之类的办法绕过。这里的 clist 内容好像不会进一步展开(待确认),所以不用抑制展开。

我之前尝试让 xeCJKctex 在设置 \debug_on:n { check-declarations } 时不报错时,也发现了这个问题。我本地分支有一个 24 年 3 月的修改,当时还只有 \clist_use:Nn(nn)

muzimuzhi avatar Apr 29 '25 06:04 muzimuzhi

我之前尝试让 xeCJKctex 在设置 \debug_on:n { check-declarations } 时不报错时,也发现了这个问题。我本地分支有一个 24 年 3 月的修改,当时还只有 \clist_use:Nn(nn)

我也是开了 debug 模式发现这个问题,如果是 2024 年之前的版本,应该可以用

\clist_const:Ne \c_..._clist { \clist_use:Nn \l_..._clist { , } }

irenier avatar Apr 29 '25 06:04 irenier

我本地分支有一个 24 年 3 月的修改,当时还只有 \clist_use:Nn(nn)

可能是让我没推到 github 的理由(当时的实现也有 bug):\clist_const:Nn\clist_use:Nn 都会按 clist 重新 parse 一次 n-参数的内容,没有假想中的 \clist_const_eq:NN 快。

不拘泥的话,用 \tex_global:D \tex_let:D\cs_gset_eq:NN 总是可以的。

muzimuzhi avatar Apr 29 '25 07:04 muzimuzhi