我目前正在开发一个用于创建学校工作表的文档类,我想在其中包含一个multiplechoice
环境。为此,我基本上使用了itemize
环境,并将默认项目符号更改为用 tikz 绘制的大正方形。我还希望能够轻松地为这些工作表创建解决方案,因此我引入了一个布尔值solution
来确定是否勾选了正确的答案。
现在我的问题是如何定义哪些答案是正确的,哪些答案不正确。最后我希望它看起来像这样:
\begin{multiplechoice}
\item[correct] Correct answer
\item Incorrect answer
\end{multiplechoice}
但我不确定如何将此参数添加到项目中。到目前为止,环境如下所示multiplechoice
:
\newenvironment{multiplechoice}{
\renewcommand{\labelitemi}{
\tikz[baseline=-0.3em]{
\draw[black, thick] (-0.2, -0.2) rectangle (0.2, 0.2);
\ifsolution
\draw[black, thick] (-0.2, -0.2) -- (0.2, 0.2);
\draw[black, thick] (-0.2, 0.2) -- (0.2, -0.2);
\fi
}
}
\itemize
\bgroup
}{
\egroup
\enditemize
}
solution
目前,每个答案如果为真就会被勾选。
答案1
以下是按要求使用的解决方案\item
,与问题只有微小的差异:[correct]
使用而不是[\correct]
。这种变化使解决方案变得更容易,因为它与始终采用的常规可选参数相匹配\item
。
\documentclass[12pt]{article}
\usepackage{tikz}
\newif\ifsolution
\newcommand{\choicebox}{%
\tikz[baseline=-0.3em]{%
\draw[black, thick] (-0.2, -0.2) rectangle (0.2, 0.2);
}%
}
\newcommand{\correct}{%
\ifsolution
\tikz[baseline=-0.3em]{%
\draw[black, thick] (-0.2, -0.2) rectangle (0.2, 0.2);
\draw[black, thick] (-0.2, -0.2) -- (0.2, 0.2);
\draw[black, thick] (-0.2, 0.2) -- (0.2, -0.2);
}%
\else
\choicebox
\fi
}
\newenvironment{multiplechoice}{%
\renewcommand{\labelitemi}{\choicebox}%
\itemize
}{%
\enditemize
}
% The previous \bgroup and \egroup were bad.
\begin{document}
\begin{multiplechoice}
\item[\correct] Correct answer
\item Incorrect answer
\end{multiplechoice}
\solutiontrue
\begin{multiplechoice}
\item[\correct] Correct answer
\item Incorrect answer
\end{multiplechoice}
\end{document}
我可能更喜欢使用\choice
和的输入语法\choice*
,并且的定义\choice
可以分层覆盖在解决方案上\item
。
\makeatletter
\newcommand\choice{\@ifstar{\item[\correct]}{\item}}
\makeatother