将包含 itemize 的文本命令存储在变量中

将包含 itemize 的文本命令存储在变量中

问题是我创建了一个包含具有某些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

将打印分项列表。

相关内容