带有自动填充答案表的多项选择题

带有自动填充答案表的多项选择题

我有一个问题,关于如何制作多项选择题,然后生成一个包含正确答案的表格以供评分。例如:

1)2X4的结果是多少:

A.8

B. 6

C.4

D. 以上都不是

2)2/4 的结果是多少:

A2

B.4

C. 6

D.0.5

然后当我编译这个考试时,我得到一个表格在单独的表格上正确答案如下:

在此处输入图片描述

请帮助我,因为我对 Latex 还不熟悉。

提前致谢。

答案1

下面的代码可以让你把你的问题写成:

\begin{questions}
  \item What's the result of $2\times 4$:
    \begin{choices}
      \item* 8
      \item 6
      \item 4
      \item None of the above
    \end{choices}
  \item What's the result of $\tfrac{2}{4}$:
    \begin{choices}
      \item 2
      \item 4
      \item 6
      \item* 0.5
    \end{choices}
\end{questions}

用于\item*正确的选择 - 如果您愿意,每个问题可以有多个正确选择。输出为:

在此处输入图片描述

“答案表”符合要求,尽管我可能不会这样做。不同的问题可以有不同数量的选项,但在这种情况下答案表会缺少一些单元格。

完整代码如下:

\documentclass{article}
\usepackage{amsmath}

\usepackage{xparse}
\ExplSyntaxOn
% save \item so we can override it in the choices environment
\let\real_item\item
\int_new:N \g_question_int
\int_new:N \g_max_choices_int
\NewDocumentCommand\start_choices{}{
  \let\item\choices_item
  \seq_new:c {g_choices\arabic{questionsi}_seq}
}
\NewDocumentCommand\choices_item{s}{
  \real_item
  \IfBooleanTF{#1}
    { \seq_gput_right:cx {g_choices\arabic{questionsi}_seq} {*\arabic{choicesi}} }
    { \seq_gput_right:cx {g_choices\arabic{questionsi}_seq} { \arabic{choicesi}} }
  % now update the maximum number of columns
  \int_compare:xNVT {\arabic{choicesi}} > \g_max_choices_int {
       \int_gset:Nn \g_max_choices_int {\arabic{choicesi}}
  }
}
\NewDocumentCommand\print_answer{ sm } {
  \IfBooleanTF{#1}{\textbf{\int_to_Alph:n {#2}}}{\int_to_Alph:n {#2}}
}
\NewDocumentCommand\print_answers{}{
  \int_compare:VNnT \g_max_choices_int > {0} {
    \newpage
    \int_set:Nn \g_question_int {0}
    \begin{tabular}{|c|*{\int_use:N \g_max_choices_int}{c|}}\hline
    \int_while_do:nn { \g_question_int < \arabic{questionsi} } {
      \int_gadd:Nn \g_question_int {1}
      \int_use:N \g_question_int.
      \seq_map_inline:cn {g_choices \int_use:N \g_question_int _seq} {&\print_answer##1}
      \\\hline
    }
    \end{tabular}
  }
}
\cs_generate_variant:Nn \int_compare:nNnT {xNVT}
\cs_generate_variant:Nn \int_compare:nNnT {VNnT}
% define enumitem environments for questions and choices
\usepackage{enumitem}
\newlist{questions}{enumerate}{1}
\setlist[questions]{
   label=\bfseries\arabic*.,
   after=\print_answers
}
\newlist{choices}{enumerate}{1}
\setlist[choices]{
   label=\Alph*).,
   before=\start_choices,
}
\ExplSyntaxOff

\begin{document}

\begin{questions}
  \item What's the result of $2\times 4$:
    \begin{choices}
      \item* 8
      \item 6
      \item 4
      \item None of the above
    \end{choices}
  \item What's the result of $\tfrac{2}{4}$:
    \begin{choices}
      \item 2
      \item 4
      \item 6
      \item* 0.5
    \end{choices}
\end{questions}

\end{document}

如果您打算使用它,那么我建议将序言中的代码放入样式文件中choices.sty,然后使用加载它\usepackage{choices}

答案2

您还可以查看该esami包,它会生成多项选择题的正确选项字符串(尽管它们不包含在您的表格中)或acrotexDP Story 的包,前一个包基于该包。acrotex它会根据您的需要生成正确选项的表格。

编辑:该esami软件包的结构不允许在此处发布 MWE(至少需要两个文件:主文件和练习文件)。您可以查看软件包的 doc 文件夹中包含的示例文件。

相关内容