我正在尝试编写一个特殊文档,通过种子为我的学生生成测试。我已经做了很多工作,但我遇到了一个问题,当我尝试将答案添加到数组中时(我用它来存储要打印在单独的纸张上的答案)。
\newcommand\setans[2]{%
\csdef{answer#1}{#2}}
\newcommand\addans[1]{%
\stepcounter{a}%
\csdef{answer\thea}{#1}}
\newcommand\getans[1]{%
\csuse{answer#1}}
这是我用于数组的内容,我以以下方式存储内容
\addans{\answer}
问题当然是由于我的算法,\answer
变量沿着线改变,所以当涉及到文档末尾时,它只会显示所有位置的最后一个\answer
值,有没有办法提取\answer
我使用的文本\addans
,或者另一种方法来解决它?
此致
答案1
见证我的心灵力量!使用将等\cslet
设置\answer1
为的当前定义\answer
,而不是answer
其本身。
\documentclass{article}
\usepackage{etoolbox}
\newcounter{a}
\setcounter{a}{0}
\newcommand\setans[2]{%
\csdef{answer#1}{#2}}
\newcommand\addans[1]{%
\stepcounter{a}%
\cslet{answer\thea}{#1}} % <--- Not \csdef!
\newcommand\getans[1]{%
\csuse{answer#1}}
\begin{document}
\def\answer{42}
\addans{\answer}
\def\answer{99}
\addans{\answer}
\getans{1}
\getans{2}
\end{document}
编辑
如果您想做更多,\addans{\answer}
您可以尝试以下定义\addans
。
\makeatletter
\newcommand\addans[1]{%
\stepcounter{a}%
\edef\@tmp{#1}
\cslet{answer\thea}\@tmp} % <--- Not \csdef!
\makeatother
对于您给出的示例(即\addans{C=\answer}
),这将起作用,但如果您尝试任何过于复杂的事情,它可能会中断(在这种情况下,您可能需要提出一个新问题以引起像 egreg 或 David Carlisle 这样的人的注意)。