我见过许多多项选择题考试的例子,用 来设置正确的答案exam
。但是,有没有办法用 来做多项选择题呢exsheets
?
我想要这样的东西:
1. Question 1
a)
b)
c)
然后,当我打开它时,代码中的某些内容会将正确答案设置为粗体。
答案1
由于exsheets
问题与解决方案严格分离,因此遵守这种分离的唯一方法就是复制枚举环境并在\textbf
解决方案中标记正确答案。\PrintSolutionsTF
在问题环境中使用该命令不起作用。
\documentclass{article}
\usepackage{exsheets}
\usepackage{enumerate}
\begin{document}
\begin{question}[type=exam]
\begin{enumerate}[a)]
\item answer 1
\item answer 2
\item answer 3
\end{enumerate}
\end{question}
\begin{solution}
\begin{enumerate}[a)]
\item answer 1
\item \textbf{answer 2}
\item answer 3
\end{enumerate}
\end{solution}
\begin{question}[type=exam]
\begin{enumerate}[a)]
\item answer 1
% does not work as this is not in a solution environment
\item \PrintSolutionsTF{\textbf{answer 2}}{answer 2}
\item answer 3
\end{enumerate}
\end{question}
\printsolutions
\end{document}
但是,您可以定义自己的命令来实现所需的行为。这样,这将独立于包。请参阅如何避免在 latex 中编译我的一些新命令这样的解决方案。
答案2
下面我提供:
- 回答您最初的问题,如何使正确的选择以粗体显示。
- 我更喜欢这样做:在单独的“答案”部分仅打印答案,而不重复整个问题。
我将从我喜欢的方法开始。
我更喜欢
编辑:此代码的原始版本缺少%
,导致在正确答案前出现多余的空格。这是不可取的!
\correct
这里我们使用它来定义一个命令\PrintSolutionsTF{<true code>}{<false code>}
:
- 当位于问题内部时,用标签标记其位置
\label{ans:\CurrentQuestionID}
。 - 当在解决方案中时,引用
\ref{ans:\CurrentQuestionID}
。
这需要auto-label
的选项exsheets
。
代码如下:
\documentclass{article}
\usepackage[auto-label]{exsheets}
\newcommand{\correct}{
\PrintSolutionsTF{%
\ref{ans:\CurrentQuestionID}%
}{%
\label{ans:\CurrentQuestionID}%
}%
}
\begin{document}
\begin{question}
Which letter is a vowel?
\begin{tasks}(4)
\task \correct A
\task B
\task C
\task D
\end{tasks}
\end{question}
\begin{solution}
\correct
\end{solution}
\begin{question}
Which animal is the best?
\begin{tasks}(4)
\task cats
\task dogs
\task \correct honey badgers
\task dragons
\end{tasks}
\end{question}
\begin{solution}
\correct
\end{solution}
\section*{Answers}
\printsolutions
\end{document}
输出结果如下:
您最初要求的
标记正确的选项\correct
,如果该选项的值为,则etoolbox
命令\ifstrequal
会将该选项切换为粗体。(这需要在评估之前进行扩展。请参阅\ShowAnswers
true
\ShowAnswers
\ifstrequal
当参数是使用 etoolbox 命令的结果时,将参数与字符串进行比较)
\documentclass{article}
\usepackage{exsheets}
\usepackage{etoolbox}
\newcommand{\ShowAnswers}{false}
\renewcommand{\ShowAnswers}{true} %comment this out if you do not want to show the answers
\newcommand{\correct}{%
\expandafter\ifstrequal\expandafter{\ShowAnswers}{true}{\bfseries}{}%
}
\begin{document}
\begin{question}
Which letter is a vowel?
\begin{tasks}(3)
\task \correct A
\task B
\task C
\end{tasks}
\end{question}
\begin{question}
Which animal is the best?
\begin{tasks}(3)
\task cats
\task \correct honey badgers
\task dragons
\end{tasks}
\end{question}
\end{document}
输出