对从引用调用的数字使用 \ifthenelse{\equal{

对从引用调用的数字使用 \ifthenelse{\equal{

我想存储考试的答案,然后自动移动每个问题的多项选择答案选项,使其与预定答案相匹配。(我需要使我的多项选择考试符合预定的答案,以便使用这些很酷的刮刮卡,称为“IF-AT”扫描仪)。

我有一个部分解决方案(请参阅平均能量损失下面的示例基于三个步骤。

  1. 将考试答案存储在数组中arrayjob.sty,分别使用 、 1234 表示 ABCD。例如,\usepackage{arrayjob} \newarray\answerkey \readarray{answerkey}{3&4}将 Q1 的答案记录为 C,将 Q2 的答案记录为 D。
  2. 然后\arabic{question}为您提供问题编号,并为\answerkey(\arabic{question})您提供该问题编号的先前存储的答案。
  3. 用于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}

在此处输入图片描述

相关内容