如何用 l3keys2e 定义同义词或相反键?

如何用 l3keys2e 定义同义词或相反键?

在我的包中,有几个相互关联的布尔值选项。我应该如何在中反映这些关系\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-oneoption-one-alt.initial:n\l__crthm_option_one_bool

相反,您可以使用.bool_set_inverse:Nfor 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

相关内容