我想存储考试的答案,然后自动移动每个问题的多项选择答案选项,使其与预定答案相匹配。(我需要使我的多项选择考试符合预定的答案,以便使用这些很酷的刮刮卡,称为“IF-AT”扫描仪)。
我有一个部分解决方案(请参阅平均能量损失下面的示例基于三个步骤。
- 将考试答案存储在数组中
arrayjob.sty
,分别使用 、 1234 表示 ABCD。例如,\usepackage{arrayjob}
\newarray\answerkey
\readarray{answerkey}{3&4}
将 Q1 的答案记录为 C,将 Q2 的答案记录为 D。 - 然后
\arabic{question}
为您提供问题编号,并为\answerkey(\arabic{question})
您提供该问题编号的先前存储的答案。 - 用于
ifthenelse
根据该数字执行不同的行为\answerkey(\arabic{question})
。
但是,我不知道如何读取ifthenelse
。\answerkey(\arabic{question})
换句话说,
\ifthenelse{\equal{1}{\answerkey(\arabic{question})}}{some code}{}
不起作用。我认为这是在正确时间扩展宏的问题。
在里面平均能量损失下面我注释掉了代码测试arrayjob.sty
+,ifthen.sty
因为它无法编译。
为了保险起见,我还尝试分别用pgfmath.sty
和替换这两个包fp.sty
(下面 MWE 中的问题 6、7、8),但没有组合可以编译。
\documentclass{exam}
\usepackage{ifthen, fp, arrayjob, pgfmath}
\newarray\answerkey %arrayjob
\readarray{answerkey}{4&3&2&1&1&1&1&1}
\def\answerkeytwo{{{},4,3,2,1,1,1,1,1}} %pgfmath
\begin{document}
\begin{questions}
\question testing arrayjob...
\answerkey(\arabic{question})
\question testing pgf...
\pgfmathparse{\answerkeytwo[\arabic{question}]}\pgfmathresult
\question testing ifthen...
\ifthenelse{\equal 2 2}{itbetrue}{itbefalse}.
\question testing fp...
\FPifeq 1 1 itbetrue\else itbefalse\fi.
\question testing arrayjob + ifthen... (should print itbetrue)
%\ifthenelse{\equal 1 {
% \answerkey(\arabic{question})
% }}{itbetrue}{itbefalse}.
\question testing arrayjob + fp... (should print itbetrue)
%\FPifeq 1 {
% \answerkeyone(\arabic{question})
% } itbetrue \else itbefalse \fi.
\question testing pgfmath + ifthen... (should print itbetrue)
%\ifthenelse{\equal 1 {
% \pgfmathparse{\answerkeytwo[\arabic{question}]}\pgfmathresult
% }}{itbetrue}{itbefalse}.
\question testing pgfmath + fp... (should print itbetrue)
%\FPifeq 1 {
% \pgfmathparse{\answerkeytwo[\arabic{question}]}\pgfmathresult
% } itbetrue\else itbefalse\fi.
\end{questions}
\end{document}
那么我如何才能\answerkey(\arabic{question})}
尽早扩张以便\ifthenelse{\equal{1}{\answerkey(\arabic{question})}}}{}{}
开展工作呢?
答案1
恕我直言,你可以用 pgfmath 和简单\ifnum
语句做任何事情。(这并不意味着其他选项不好。)我用这个例子来说明这一点。我唯一改变的是使用,\pgfmathtruncatemaccro
以确保我得到一个可以用来测试的整数\ifnum
。
\documentclass{exam}
\usepackage{pgfmath}
\def\answerkeytwo{{{},4,3,2,1,1,1,1,1}} %pgfmath
\begin{document}
\begin{questions}
\question testing pgfmath + ifnum\dots (should print itbefalse)
\pgfmathtruncatemacro{\itest}{\answerkeytwo[\number\value{question}]}
\ifnum\itest=1
itbetrue
\else
itbefalse
\fi
\question testing pgfmath + ifnum\dots (should print itbefalse)
\pgfmathtruncatemacro{\itest}{\answerkeytwo[\number\value{question}]}
\ifnum\itest=1
itbetrue
\else
itbefalse
\fi
\question testingpgfmath + ifnum\dots (should print itbefalse)
\pgfmathtruncatemacro{\itest}{\answerkeytwo[\number\value{question}]}
\ifnum\itest=1
itbetrue
\else
itbefalse
\fi
\question testing pgfmath + ifnum\dots (should print itbetrue)
\pgfmathtruncatemacro{\itest}{\answerkeytwo[\number\value{question}]}
\ifnum\itest=1
itbetrue
\else
itbefalse
\fi
\end{questions}
\end{document}