如果有的话\csname var:\foo\endcsname
,我该怎么做:\expandafter\gdef\csname var:\foo\endcsname{\csname var:\foo\endcsname, \bar}
?
edef
我知道我可以用(或全局)来做到这一点xdef
,但在我的情况下,我无法在定义时评估变量,因为它们包含类似的内容\pageref{\tmplabel}}
是否可以在不评估全局变量的情况下直接替换它本身?
也许可以用\let
? 但我没有成功。
千言万语的感谢
答案1
您似乎想要添加一些内容\csname var:\foo\endcsname
。
\def\appendto#1#2{%
\expandafter\gdef\csname #1\expandafter\expandafter\expandafter\endcsname\expandafter\expandafter\expandafter{\csname #1\endcsname,#2}%
}
例子:
\def\appendto#1#2{%
\expandafter\gdef\csname #1\expandafter\expandafter\expandafter\endcsname
\expandafter\expandafter\expandafter{\csname #1\endcsname,#2}%
}
\def\foo{foo}
\expandafter\def\csname var:\foo\endcsname{start}
\appendto{var:\foo}{\bar}
\expandafter\show\csname var:\foo\endcsname
终端将显示
> \var:foo=macro:
->start,\bar .
\csname
诀窍是在执行之前强制执行两个扩展步骤\gdef
。
没有\expandafter
:
\input expl3-generic
\ExplSyntaxOn
\cs_new_protected:Npn \dufays_append:Nn #1 #2
{
\tl_put_right:Nn #1 { , #2 }
}
\cs_generate_variant:Nn \dufays_append:Nn { c }
\cs_set_eq:NN \appendto \dufays_append:cn
\ExplSyntaxOff
\def\foo{foo}
\expandafter\def\csname var:\foo\endcsname{start}
\appendto{var:\foo}{\bar}
\expandafter\show\csname var:\foo\endcsname