问题是我创建了一个包含具有某些itemize
环境的文本的变量。现在,出于某些原因,我想将其内容存储在另一个变量中。但它不起作用(请参阅 MWE)
微电子工程协会
\documentclass{article}
\begin{document}
\def\coucou{\begin{itemize}
\item aa
\item bb
\end{itemize}}
\coucou
\def\aa {zz}
\expandafter\xdef\csname persocmd\aa\endcsname{\coucou} %%Not working
\end{document}
答案1
如果您想使一个宏与另一个宏等效,请使用\let
(\global
如果需要,可以使用):
\documentclass{article}
\begin{document}
\def\coucou{\begin{itemize}
\item aa
\item bb
\end{itemize}}
\coucou
\def\aa{zz}
\expandafter\let\csname persocmd\aa\endcsname\coucou
\persocmdzz
\end{document}
如果您想要一个全局定义,只需添加\global
:
\global\expandafter\let\csname persocmd\aa\endcsname\coucou
(请注意,\global
触发以下标记的扩展,因此它将正确应用于\let
)。
请注意,建议
\expandafter\gdef\csname persocmd\aa\endcsname{\coucou}
\persocmdzz
如果定义改变,其含义也会改变\coucou
。
例如
\expandafter\gdef\csname persocmd\aa\endcsname{\coucou}
\def\coucou{foo}
\persocmdzz
将打印“foo”而不是逐项列表。
可以强制\coucou
扩展
\expandafter\gdef\csname persocmd\aa\expandafter\endcsname\expandafter{\coucou}
但显然该\let
方法更加简单。
反而
\expandafter\let\csname persocmd\aa\endcsname\coucou
\def\coucou{foo}
\persocmdzz
将打印分项列表。