从变量中提取文本

从变量中提取文本

我正在尝试编写一个特殊文档,通过种子为我的学生生成测试。我已经做了很多工作,但我遇到了一个问题,当我尝试将答案添加到数组中时(我用它来存储要打印在单独的纸张上的答案)。

\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 这样的人的注意)。

相关内容