为了创建测试,我使用了exam
类,到目前为止效果很好。现在我需要实现一个问题,其可能的答案是一个矩阵,如下所示:
但是我无法将\choice
(exam
类的)命令放入该表单中(我也想用exam
它来打印自动解决方案论文)。当我简单地将其放入表格中时,似乎不起作用。我该如何实现这一点?
PS:上面的例子(只是作为视觉解释,没有使用类exam
)是:
\documentclass{exam}
\usepackage{amssymb}
\begin{document}
\renewcommand{\arraystretch}{1.4}
\begin{tabular}{r|ccc}
& Orange & Green & Aubergine \\
\hline
Fruit & $\Box$ & $\Box$ & $\Box$ \\
Vegetable & $\Box$ & $\Box$ & $\Box$ \\
Colorname & $\Box$ & $\Box$ & $\Box$ \\
\end{tabular}\
\end{document}
[编辑:添加示例代码] [编辑2:澄清问题]
答案1
文档exam
指出:
环境
checkboxes
创建一个列表环境,其中选择作为列表中的项目。
因此,every\begin{checkboxes}...\end{checkboxes}
都会创建一个新列表。您不能将同一列表中的不同项目放在表格的不同单元格中。因此,您需要为表格中的每个单元格创建一个新的单项列表。并且,如果没有预定义的列宽,您就无法将列表放在表格中。因此,要么使用对齐选项(p
,m
,b
,...)为您提供固定的列宽,要么将列表放在minipage
类似 的环境中varwidth
(它也会将其内容水平居中)。
由于我们的列表是单项列表,我们并不希望它们看起来像列表,所以我们需要进行一些自定义。在考试类中,这是通过 width 完成的\checkboxeshook
。因此,选择:
\renewcommand{\checkboxeshook}{
\setlength{\labelwidth}{0pt}
\setlength{\labelsep}{0pt}
\setlength{\leftmargin}{0pt}
}
现在创建一个宏,这样您就不需要复制粘贴太多代码了。这也会提高代码的可读性。这里有 2 个宏。一个用于常规复选框选项,一个用于正确选择复选框:
\newcommand{\tablechoice}{\begin{varwidth}{\textwidth}\begin{checkboxes}\choice\end{checkboxes}\end{varwidth}}
\newcommand{\tablecorrectchoice}{\begin{varwidth}{\textwidth}\begin{checkboxes}\CorrectChoice\ \end{checkboxes}\end{varwidth}}
所有这些因素加在一起可以让你:
\documentclass[answers]{exam}
\usepackage{amssymb}
\usepackage{varwidth}
\renewcommand{\arraystretch}{1.4}
\newcommand{\tablechoice}{\begin{varwidth}{\textwidth}\begin{checkboxes}\choice\end{checkboxes}\end{varwidth}}
\newcommand{\tablecorrectchoice}{\begin{varwidth}{\textwidth}\begin{checkboxes}\CorrectChoice\ \end{checkboxes}\end{varwidth}}
\checkboxchar{$\Box$}
\checkedchar{$\blacksquare$}
\renewcommand{\checkboxeshook}{
\setlength{\labelwidth}{0pt}
\setlength{\labelsep}{0pt}
\setlength{\leftmargin}{0pt}
}
\begin{document}
\begin{questions}
\question Answer the following question: \\
\begin{tabular}{r|*3{c}}
& Orange & Green & Aubergine \\ \hline
Fruit & \tablechoice & \tablechoice & \tablechoice \\
Vegetable & \tablechoice & \tablecorrectchoice & \tablechoice \\
Colorname & \tablechoice & \tablechoice & \tablechoice \\
\end{tabular}
\end{questions}
\end{document}
答案2
根据 Maarten Dhondt 的有用答案,我为自己构建了一个具有多个水平选项的环境,以避免重复回答其他问题:
\documentclass[answers]{exam}
\usepackage{amssymb}
\usepackage{varwidth}
\newenvironment {choicetable} [1] {
\renewcommand{\arraystretch}{1.7}
\renewcommand{\checkboxeshook}{
\setlength{\labelwidth}{0pt}
\setlength{\labelsep}{0pt}
\setlength{\leftmargin}{0pt}
}
\newcommand{\CO}{\begin{varwidth}{\textwidth}\begin{checkboxes}\choice\end{checkboxes}\end{varwidth}}
\newcommand{\CX}{\begin{varwidth}{\textwidth}\begin{checkboxes}\CorrectChoice\ \end{checkboxes}\end{varwidth}}
\begin{tabular}{r*{#1}{c}}
} {
\end{tabular}
}
\checkboxchar{$\Box$}
\checkedchar{$\blacksquare$}
\begin{document}
\begin{questions}
\question Answer the following question: \\
\begin{choicetable}{3}
& Orange & Green & Aubergine \\ \hline
Fruit & \CO & \CO & \CO \\
Vegetable & \CO & \CX & \CO \\
Colorname & \CO & \CO & \CO \\
\end{choicetable}
\end{questions}
\end{document}
答案3
像这样吗?
\documentclass[11p,twoside,a4paper,leqno]{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{fourier}
\usepackage{mathtools}
\usepackage{amsfonts}
\usepackage[x11names]{xcolor}
\usepackage{array, makecell, eqparbox}
\newcommand\tsq{$\square$}
\newcommand\colhead[2][black]{\eqmakebox[H][c]{\color{#1}{#2}}}
\setcellgapes{8pt}
\begin{document}
\begin{center}
\makegapedcells
\begin{tabular}{@{}r! {\vrule width 0.8pt}*{3}{c}}%{>{\centering $}m{2cm}<{$}}
& \colhead[DarkOrange3]{Orange} & \colhead[OliveDrab3]{Green} & \colhead[Plum4]{Aubergine} \\
\Xhline{0.8pt}
Fruit & \tsq & \tsq & \tsq \\
Vegetable & \tsq & \tsq & \tsq \\
Colour name & \tsq & \tsq & \tsq
\end{tabular}
\end{center}
\end{document}