假设我有一个以 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_tl
为something
,因为v
变体首先构建一个令牌(使用\csname...\endcsname
),然后使用V
,所以你得到
\tl_set:NV \l_cyker_varb_tl \l_cyker_vara_tl
完成最后的任务内容的\l_cyker_vara_tl
到\l_cyker_varb_tl
。