答案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
包,它会生成多项选择题的正确选项字符串(尽管它们不包含在您的表格中)或acrotex
DP Story 的包,前一个包基于该包。acrotex
它会根据您的需要生成正确选项的表格。
编辑:该esami
软件包的结构不允许在此处发布 MWE(至少需要两个文件:主文件和练习文件)。您可以查看软件包的 doc 文件夹中包含的示例文件。