LaTeX3:通过名称获取标记列表变量

LaTeX3:通过名称获取标记列表变量

假设我有一个以 tl var 作为参数的函数:

\module_myfunc:N \l_module_tlvar_tl

但是我手头上的不是 tl var,而是 tl var 的名称:

\l_module_tlvarname_tl

如何在 LaTeX3 中\module_myfunc:N调用\l_module_tlvarname_tl

梅威瑟:

\documentclass{article}
\usepackage{expl3}
\begin{document}
\ExplSyntaxOn
\tl_new:N \l_module_tlvar_tl
\tl_new:N \l_module_tlvarname_tl
\tl_set:Nn \l_module_tlvar_tl { dope }
\tl_set:Nn \l_module_tlvarname_tl { l_module_tlvar_tl }
\cs_new:Npn \module_myfunc:N #1
{
    \cs_to_str:N #1
}
%%  This is what I want.
\module_myfunc:N \l_module_tlvar_tl
%%  This is how I do it in LaTeX2e.
\expandafter\module_myfunc:N\csname\l_module_tlvarname_tl\endcsname
%%  In LaTeX3: Is this the same as what I want?
\tl_new:N \l_module_tlvara_tl
\tl_set:Nn \l_module_tlvara_tl { \tl_use:c { \l_module_tlvarname_tl } }
\module_myfunc:N \l_module_tlvara_tl
\ExplSyntaxOff
\end{document}

答案1

你应该遵守命名方案。真的,我是认真的。

你似乎想要类似的东西

\tl_new:N \l_cyker_vara_tl
\tl_new:N \l_cyker_varb_tl
\tl_new:N \l_cyker_varname_tl

\tl_set:Nn \l_cyker_vara_tl { something }
\tl_set:Nn \l_cyker_varname_tl { vara }

\tl_set:Nv \l_cyker_varb_tl { l_cyker_ \l_cyker_varname_tl _tl }

这将设置\l_cyker_varb_tlsomething,因为v变体首先构建一个令牌(使用\csname...\endcsname),然后使用V,所以你得到

\tl_set:NV \l_cyker_varb_tl \l_cyker_vara_tl

完成最后的任务内容\l_cyker_vara_tl\l_cyker_varb_tl

相关内容