使用 \foreach 和 \csname\endcsname 一起

使用 \foreach 和 \csname\endcsname 一起

当我编译这个最小的 LaTeX 文件时:

\documentclass{report}

\def\defMacro#1#2{\expandafter\def\csname#1\endcsname{#2}}
\def\useMacro#1{\csname#1\endcsname}

\usepackage{pgffor}

\begin{document}
\foreach \n in {0,1,...,10}{
\defMacro{number:\n}{\n}
}


\useMacro{number:8}
\end{document}

我没有获得 PDF 输出。我犯了什么错误?

答案1

循环\foreach内容在每次迭代中按组执行,因此定义只是局部的。您需要\global在 前面添加\defMacro

之所以\useMacro不会导致错误,是因为如果之前未定义,\csname则会产生副作用,即生成的宏定义等于。\relax

相关内容