在的@u10508 的一份l3keys
(2023-10)的讲义中(在上述链接下方的"赠品",作者用心了♥),其中给了下面一个例子:
但我在TL2025
如下MWE,在\keys_set:nn
外部使用\l_keys_key_str
似乎发现为空值?
\documentclass{ctexart}
\usepackage[margin=1in]{geometry}
\setlength{\parindent}{0pt}
\begin{document}
\ExplSyntaxOn
\keys_define:nn { module }
{
key-a .code:n = {value={#1}\par~\texttt{\char92 l_keys_key_str}~is~{\tl_use:N \l_keys_value_tl}} ,
subset / key-a .code:n = {#1}
}
\keys_set:nn { module } { key-a = value-1 }
\par \fbox{ \tl_use:N \l_keys_value_tl}
% 将会得到: key-a
\end{document}
哪里有问题呢...
在原版的interface3
中并无“最后”那一段关于“当前键”的介绍。我没有这份l3-note的源码,但既然截图中tcblistings
却编译出正确的结果,这就有点奇怪了...
谢谢您的回复,从原版的“inteface3.pdf”中并没有关于在
<code>
外使用以及关于“当前键”的说明:这是不是说明上面红框中框出来的信息似乎不太准确呢?
按我理解,这三个宏理应只在
\key_defines:nn
中局部被定义,否则对于在\key_defines:nn
内定义多个键值对时,在<code>
外部仅仅维护最后一个“当前键”的操作似乎并无太大意义...其实我一开始的猜测是2023-10前的某个版本有“最后”这段红框框出来的话(但现在没有了...),所以这个"l3-note"文档的作者在编译的时候
tcblistings
可以正常出现...@u70550 我查看了 latex3 repo 在 2023 年 9 月和 2020 年 2 月的历史,l3keys 并没有类似于“红框框出来的话”,这应该是文章作者自己的理解/测试的结果。
甚至,在 2025 年 1 月的 commit(https://github.com/latex3/latex3/commit/5c9e4d904880522fcbcb9e0b55c1074b47449858)中,特地在
\keys_set:nn
执行后重置这几个命令以修复某个错误(https://github.com/latex3/latex3/issues/1667)。在这个版本之前应该是可以复现文章的结果(我没测试)。使用 undocumented 的行为无疑有一定风险。
@u10307 明白了,谢谢您的帮助搜索,我只检查了2023年10月的commit没发现有类似红框的话。感谢您提供的 #issue 1667和详细解释😀!
@u70550 本人来回复一下,红框部分的内容,确实如雾月大佬所说,是我当时自己测试的结果,TL2023、TL2024都能复现这一结果。文章中出现的大段楷体内容,基本都是我当时因为好奇而对命令进行测试写的,原文是没有的。
对于此处提到的这三个命令,正确的打开方式是将其放在处理键的代码中使用,在其余地方应当未被定义。但当时的测试结果则是红框部分所描述的那样,所以就被这么记录了下来,甚至很长一段时间都是这样。按上面雾月大佬的查询,现在应当是修复了这一问题,所以你复现不了(TL2025),也理应如此。以现在的眼光来看,前面给的例子是不恰当的。我当时学的时候没考虑那么多,只是一味的测试,秉承着实践是检验真理的唯一标准写的这份笔记,当时的“实践”没错,只是现在的“真理”变了。很抱歉给您带来困扰。
感谢您观看这份笔记,不要全信笔记里的内容,里面是会有一些错误的,有我自己理解不到位的错误,也有内部代码发生变动导致的错误(比如今天的这个问题),一旦发现,还望您及时反馈给我,我将不胜感激。后续请关注这一版本笔记的更新(这几年我可能都没时间更新):(https://github.com/123dyu/l3note),这一版的内容是我尽可能通过阅读内部代码整理的,不单单是一些简单的测试,准确率更高。
@u10508 我确实注意到这份笔记中有一些应该写在
source3.pdf
的更底层的内容,如我发现其他问题我会提PR的...我此前一直找不到仓库😀,谢谢您的拨冗回复!