我希望能够将的值重置adr_keys
为空白值。我应该构建哪种类型的函数?
我将使用
\tl_if_blank:VF \l_dwlg_tl
{ \tl_use:N \l_dwlg_tl \\ }
通过检查值是否为空来打印值。
使用的问题initial
在于这仅适用于第一次。而且使用default
需要我提供名称并将其保留为空。
该命令\adrPrint
将打印键值。对于第二次调用,\adrPrint
我想使用前一次使用的值
\adrPrint
。但是我需要重置第三次调用的所有值
\adrPrint
\documentclass[a4paper,12pt]{article}
\ExplSyntaxOn
\keys_define:nn { adr_keys }
{
name .tl_set:N = \l_name_tl,
role .tl_set:N = \l_role_tl,
kmpn .tl_set:N = \l_kmpn_tl,
dwlg .tl_set:N = \l_dwlg_tl,
hmlt .tl_set:N = \l_hmlt_tl,
vltw .tl_set:N = \l_vltw_tl,
cbrg .tl_set:N = \l_cbrg_tl,
knty .tl_set:N = \l_knty_tl,
pstc .tl_set:N = \l_pstc_tl,
ktry .tl_set:N = \l_ktry_tl,
}
\ExplSyntaxOn
\begin{document}
\adrPrint
{
name={Heime Borgia},
dwlg={405 Hilgard Ave},
cbrg={Los Angeles},
knty={California},
pstc={90095},
ktry={United States},
}
\adrPrint
{
name={Likku Cirillu},
dwlg={409 Hilgard Ave},
}
\adrReset
\adrPrint
{
name={Heime Borgia},
dwlg={Gower Street},
cbrg={London},
pstc={WC1E 6BT},
}
\end{document}
答案1
最简单的方法是使用密钥预设来创建包含正确指令的令牌列表:
\keys_precompile:nnN { adr_keys }
{
name = ,
role = ,
kmpn = ,
dwlg = ,
hmlt = ,
vltw = ,
cbrg = ,
knty = ,
pstc = ,
ktry = ,
} \l_tmpa_tl
\cs_new_protected:Npe \adr_reset_keys:
{ \exp_not:V \l_tmpa_tl }
我选择将指令放入命令中:这是一个品味问题(因为从根本上来说,没有参数的函数和标记列表基本上是同一件事)。