在我的 latex 文档中,我定义了一个元素数组,并且在这个数组中创建了一个循环。我想在这个循环中定义 newcommand。这个想法是让
\newcommand{\name1}{
\begin{center}
\scshape{name1}
\end{center}
}
\newcommand{\name2}{
\begin{center}
\scshape{name2}
\end{center}
}
\newcommand{\name3}{
\begin{center}
\scshape{name3}
\end{center}
}
我所做的是:
\usepackage{pgffor}
\def \peopleArray {name1, name2, name3}
\foreach \x in \peopleArray {
\newcommand{\x}{
\begin{center}
\scshape{name3}
\end{center}
}
}
但这是行不通的。
我也尝试过
\foreach \x in \peopleArray {%
\expandafter\xdef\csname \x\endcsname{\begin{center}
\scshape{x}
\end{center}}
}
但这也不起作用
答案1
下面是使用 for 循环定义宏序列的一种方法,并附带一个使用示例:
\documentclass{article}
\usepackage{pgffor}
\def \peopleArray {\nameA, \nameB, \nameC}
\begin{document}
\foreach \x in \peopleArray {
\expandafter\newcommand\x{}% error if already defined
\expandafter\gdef\x{
\begin{center}
{\scshape name3}
\end{center}
}
}
\nameA
\nameB
\nameC
\end{document}
我必须使用\gdef
而不是\newcommand
因为否则定义是局部的(并且丢失)而不是全局的。
但我不确定这是否有用,因为name3
在所有情况下都是一样的。