使用项目的额外参数进行自定义项目化

使用项目的额外参数进行自定义项目化

我目前正在开发一个用于创建学校工作表的文档类,我想在其中包含一个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

相关内容