生成动态命令名称的方法

生成动态命令名称的方法

我想使用命令将代码块/信息保存在 LaTeX 文件中,但我不知道需要多少块。我想知道是否有办法创建命令的动态名称,以便我以后可以调用它们。例如,我希望以下内容能够正常工作:

(最小伪代码)

\newcommand{\questionrnd}[1]{
\setcounter{QuestionsForRandomizing}{\arabic{QuestionsForRandomizing}+1}
\newcommand{\QuestionContent\Roman{QuestionsForRandomizing}}{#1}
}

这将接收一组信息(特别是问题,以及接收答案选项并随机化它们和其他各种内容的命令)并将它们保存在“下一个”命令中。因此,我最终会得到诸如\QuestionContentI\QuestionContentII等命令,这些命令将包含问题 1、2 等的所有信息。

问题是,我无法预先生成这些命令名称,因为我无法知道表单中可能有多少个问题(这是一个 CLS 文件),所以我需要动态创建命令(或其他任何可以工作的命令),然后以类似方式调用它们。

我在这里给出了一个具体的例子,我希望它能发挥作用(保存问题内容),但我一直在尝试找出一种像这样动态存储代码块的方法,所以任何一般信息都会有所帮助。理想情况下,该块需要能够作为 LaTeX 代码本身执行(这意味着当调用代码时,所有内部函数命令仍然有效)。

答案1

您可以使用多种技术组合,根据某些计数器创建动态宏名称。下面构造\csname...原语之间的宏名称\endcsname

在此处输入图片描述

\documentclass{article}

\newcounter{QuestionsForRandomizing}
\newcommand{\questionrnd}[1]{%
  \stepcounter{QuestionsForRandomizing}%
  \expandafter\newcommand\csname QuestionContent\Roman{QuestionsForRandomizing}\endcsname{#1}%
}

\begin{document}

\questionrnd{abc}\questionrnd{def}%

\verb|\QuestionContentI:| \QuestionContentI

\verb|\QuestionContentII:| \QuestionContentII

\end{document}

LaTeX 内核也提供了\@namedef与上述类似的实现。

相关内容