重新定义 def 本身而不进行评估

重新定义 def 本身而不进行评估

如果有的话\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

相关内容