我的理解是这样的,.meta:n
和 .meta:nn
的作用都是通过一个键设置其它的键,区别在于后者还会设置路径。比如:
\keys_define:nn {module}
{
key .meta:n =
{
key-a = #1,
key-b = #1
}
}
那么 key = value
就会同时设置 key-a
和 key-b
的值为 value
。
你通过两种方式设置键其实是等价的,本质上都设置了同一个键,其全称为 module/subset/key-a
。
当使用
\keys_set:nn {module}
{
subset/key-a = value-a
}
设置键时,会将键 module/subset/key-a
的值设置为 value-a
,这当然没有问题。然而,当你按下面这样写时:
\keys_set:nn {module}
{
subset = { key-a = value-a }
}
latex 会寻找键 module/subset
,但这个键是不存在的,所以会报错。这时候,便可以用 .meta:nn
解决这个问题(注意我故意将键名取为 SUBSET
来表明这个名称不一定非要和 module/xxx
中的 xxx
保持一致):
\define_keys:nn {module}
{
SUBSET .meta:nn = { module / subset } { key-a = #1 }
}
通过上面这段代码,我们定义一个键叫做 module/SUBSET
,当给它赋值 value-a
时:
\keys_set:nn {module}
{
SUBSET = value-a
}
就相当于在 module/subset
路径下设置 key-a
的值为 value-a
,即键 module/subset/key-a
的值为 value-a
。
我们还可以继续改:
\keys_define:nn {module}
{
SUBSET .meta:nn {module/subset} {#1}
}
这时便可以像你希望地那样设置值:
\keys_set:nn {module}
{
SUBSET = { key-a = value-a }
}
key-a = value-a
作为整体传递给上面的 #1
,效果还是设置键 module/subset/key-a
的值为 value-a
。
我也是刚接触不久这个键值系统,如果说的有问题,还请大家指出。
问 LaTeX3中对l3keys模块里的.meta属性的疑惑