重置键值对

重置键值对

我希望能够将的值重置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 }

我选择将指令放入命令中:这是一个品味问题(因为从根本上来说,没有参数的函数和标记列表基本上是同一件事)。

相关内容