在我的包中,有几个相互关联的布尔值选项。我应该如何在中反映这些关系\keys_define
?
举个具体的例子,下面的代码,是否定义了 keyoption-one-alt
为 的同义词option-one
,并且option-one-oppo
是 的反义词?如果不是,正确的定义应该是什么样的?
\keys_define:nn { my-keys }
{
, option-one .bool_set:N = \l__crthm_option_one_bool
, option-one .initial:n = { true }
, option-one-alt .bool_set:N = \l__crthm_option_one_bool
, option-one-alt .initial:n = { true }
, option-one-oppo .bool_set:N = \l__crthm_option_one_bool
, option-one-oppo .initial:n = { false }
}
答案1
不,您的代码不会这样做,相反,其行为将与和option-one-oppo
相同,并且 的起始值 ( )将为假。option-one
option-one-alt
.initial:n
\l__crthm_option_one_bool
相反,您可以使用.bool_set_inverse:N
for option-one-oppo
,并且可以option-one-alt
根据option-one
需要进行定义(但这不是真正必要的,当前定义在使用时会更快)。
\keys_define:nn { my-keys }
{
, option-one .bool_set:N = \l__crthm_option_one_bool
, option-one .initial:n = { true }
, option-one-alt .bool_set:N = \l__crthm_option_one_bool
, option-one-oppo .bool_set_inverse:N = \l__crthm_option_one_bool
}
另一个建议(根据另一个键进行定义)将使用以下.meta:n
类型:
\keys_define:nn { my-keys } { option-one-alt .meta:n = { option-one = {#1} } }
另外,您的示例似乎误解了它的.initial:n
作用,它只会设置一次值,因此.initial:n
其行为与您在那个地方使用时相同\keys_set:nn {<set>} { <key> = <value> }
。因此设置.initial:n
一次是可以的。
如果您打算定义当使用键而没有值时的行为,那么就option-one .default:n = true
不会.initial:n
。