我想使用命令将代码块/信息保存在 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
与上述类似的实现。