有没有办法将密钥添加到 l3keys 中的子模块/模块?

有没有办法将密钥添加到 l3keys 中的子模块/模块?

我需要循环遍历逗号分隔的列表,将它们全部创建为数据结构的键。我想不出如何循环遍历键里面 \keys_define:nn,所以我看到的唯一其他选择就是放入\keys_define循环。

有什么办法吗增加一个键模块,而不是简单地重新定义它?

我使用 LaTeX3clist来制作以逗号分隔的列表。


S通过“扩充”,可以想到集合并集。假设您在模块中有一组键module。当我module用一个键扩充时k,我希望中的键集moduleS \union {k}

如果S本身可以被访问(在模块上下文之外?),那么我可以S只需使用和重新定义模块k即可。此模块应该只能增长——将提供单独的方法来清除它。

答案1

以下测试表明,每个\keys_define:nn命令的集合中都添加了新键:

\documentclass{article}
\usepackage{expl3}
\ExplSyntaxOn
\keys_define:nn {test}
 {
  a .tl_set:N = \l_test_a_tl,
 }
\keys_define:nn {test}
 {
  b .tl_set:N = \l_test_b_tl,
 }
\keys_set:nn {test} { a=a, b=b }

\clist_map_inline:nn
 { 
  c .tl_set:N = \l_test_c_tl,
  d .tl_set:N = \l_test_d_tl,
 }
 {
  \keys_define:nn { test } { #1 }
 }

\keys_set:nn {test}
 {
  c = c,
  d = d
 }

\tl_show:N \l_test_a_tl
\tl_show:N \l_test_b_tl
\tl_show:N \l_test_c_tl
\tl_show:N \l_test_d_tl

相关内容