在循环内定义新命令

在循环内定义新命令

在我的 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在所有情况下都是一样的。

相关内容