![使用 \foreach 和 \csname\endcsname 一起](https://linux22.com/image/236463/%E4%BD%BF%E7%94%A8%20%5Cforeach%20%E5%92%8C%20%5Ccsname%5Cendcsname%20%E4%B8%80%E8%B5%B7.png)
当我编译这个最小的 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