我正在尝试创建一个可用于多种用途的密钥。
我有一个assignment
键,它接受存储在中的一些值 \ l__aljumaily_componentNumber_tl
。除此之外,它还应该在中存储一些文本\l__aljumaily_componentType_tl
。我还有另一个键,它也使用(类似于)lecture
存储组件类型,但现在在中存储其他内容。\l__aljumaily_componentNumber_tl
assignment
\l__aljumaily_componentType_tl
为了存储组件类型,我使用了.code:n = { ... }
。现在,存储组件编号可以正常工作没有的使用.code:n = { ... }
,否则,它只会注册组件编号的初始值。我怎样才能使用单个键来处理组件类型和编号?
\documentclass{article}
\ExplSyntaxOn
\tl_new:N \l__aljumaily_componentType_tl
\tl_new:N \l__aljumaily_componentNumber_tl
\keys_define:nn {aljumaily/module}{
assignment .tl_set:N = \l__aljumaily_componentNumber_tl,
assignment .initial:n = {00},
assignment .code:n = {
\tl_set:Nn \l__aljumaily_componentType_tl{assignment}
},
lecture .tl_set:N = \l__aljumaily_componentNumber_tl,
lecture .initial:n = {00},
lecture .code:n = {
\tl_set:Nn \l__aljumaily_componentType_tl{lecture}
}
}
\keys_set:nn {aljumaily/module}{assignment=01}
\NewDocumentCommand{\printData}{}{
\tl_use:N \l__aljumaily_componentType_tl,
\tl_use:N \l__aljumaily_componentNumber_tl
}
\ExplSyntaxOff
\begin{document}
\printData, where 00 should be 01
\end{document}
答案1
分配
assignment .code:n = { \tl_set:Nn \l__aljumaily_componentType_tl{assignment} },
覆盖
assignment .tl_set:N = \l__aljumaily_componentNumber_tl,
你想要的只是.code:n
。
\documentclass{article}
\ExplSyntaxOn
\tl_new:N \l__aljumaily_componentType_tl
\tl_new:N \l__aljumaily_componentNumber_tl
\keys_define:nn {aljumaily/module}
{
assignment .code:n =
{
\tl_set:Nn \l__aljumaily_componentNumber_tl { #1 }
\tl_set:Nn \l__aljumaily_componentType_tl{assignment}
},
assignment .initial:n = {00},
lecture .code:n =
{
\tl_set:Nn \l__aljumaily_componentNumber_tl { #1 }
\tl_set:Nn \l__aljumaily_componentType_tl{lecture}
},
lecture .initial:n = {00},
}
\keys_set:nn {aljumaily/module}{assignment=01}
\NewDocumentCommand{\printData}{}{
\tl_use:N \l__aljumaily_componentType_tl,
\tl_use:N \l__aljumaily_componentNumber_tl
}
\ExplSyntaxOff
\begin{document}
\printData
\end{document}
答案2
仅用于比较,在expkv-def
使用前缀向现有键添加另一个操作非常简单also
。store
(几乎)等同于.tl_set:N
(尽管创建的key
不会是\long
,因此没有明确的\par
标记可以成为其值的一部分,您可以使用前缀long
,但对于数字输入来说,这没有多大意义),并且code
等同于.code:n
(除了没有前缀\long
之外long
)。
\documentclass{article}
\usepackage{expkv-def}
\ekvdefinekeys{aljumaily/module}
{
store assignment = \componentNumber
,also code assignment = \def\componentType{assignment}
,store lecture = \componentNumber
,also code lecture = \def\componentType{lecture}
,initial lecture = 00
}
\ekvset{aljumaily/module}{assignment=01}
\NewExpandableDocumentCommand\printData{}
{\componentType, \componentNumber}
\begin{document}
\printData
\end{document}