如何使用 expl3 动态赋予键名?

如何使用 expl3 动态赋予键名?

我有一个将名称与值关联起来的属性列表

名称 1 -> 值 1
名称 2 -> 值 2
...

我想使用属性列表中的名称来动态创建键。以下代码

\documentclass{article}
\usepackage{expl3}
\begin{document}
\ExplSyntaxOn
\prop_new:N   \l_my_prop 
\prop_put:Nnn \l_my_prop { name1 } { val1 }
\prop_put:Nnn \l_my_prop { name2 } { val2 }

\prop_map_inline:Nn \l_my_prop
  {
    \keys_define:nn { phylogenetictree } 
      {
        #1 .tl_gset:c = \l_#1_tl
      }
  }
\ExplSyntaxOff
\end{document}

给出错误

! Undefined control sequence.
<argument> \l_ 
    name1_tl
l.15   }

The control sequence at the end of the top line
of your error message was never \def'ed. If you have
misspelled it (e.g., `\hobx'), type `I' and the correct
spelling (e.g., `I\hbox'). Otherwise just continue,
and I'll forget about whatever was undefined.

为什么此代码不起作用? 有没有更好的方法来实现这一点?

答案1

您没有c以正确的形式给出 -type 参数:它(通常)不应该以 a 开头,\而应该用括号括起来:

\prop_map_inline:Nn \l_my_prop
  {
    \keys_define:nn { phylogenetictree } 
      {
        #1 .tl_set:c = { l_ #1 _tl }
      }
  }

我也已将其更改.tl_gset:c.tl_set:c这里,因为您的变量名(\l_...)表示它是本地的而不是全局的。

相关内容