介绍

LaTeX 提供了专门为教师设计的功能。我们介绍了 exam 类[1],它非常适用于设计带解答的考试和练习题。感兴趣的人还可以查看 probsoln 包[2]、mathexm 文档类[3],或者 exsheets 包[4]。

exam 类

我们介绍 exam 类。exam 类非常适合设计带解答的考试。你只需要在导言部分指定是否要打印解答。你还可以计算题目的分数。

导言部分

在导言部分,你可以指定以下几行:

\documentclass[a4paper,11pt]{exam}
\printanswers % 如果你想打印答案
% \noprintanswers % 如果你不想打印答案
\addpoints % 如果你想计算分数
% \noaddpoints % 如果你不想计算分数
% 指定问题显示方式:
\qformat{\textbf{Question \thequestion}\quad(\thepoints)\hfill}
\usepackage{color} % 定义新颜色
\definecolor{SolutionColor}{rgb}{0.8,0.9,1} % 浅蓝色
\shadedsolutions % 定义解答环境的样式
% \framedsolutions % 定义解答环境的另一种样式
% 定义解答环境的标题:
\renewcommand{\solutiontitle}{\noindent\textbf{Solution:}\par\noindent}

你也可以将前面的三行替换为以下内容:

\documentclass[a4paper,11pt,answers,addpoints]{exam}

文档部分

考试题目包含在 questions 环境中。命令 \question 用于引入新问题,问题的分数在方括号中指定。解答在 solution 环境中给出,只有在导言部分指定了 \printanswers 或者 answers 选项时才会显示。

以下是一个示例:

\begin{questions} % 开始问题环境
\question[2] What is the solution? % 引入一个新问题,分值为2分
\begin{solution} 
Here is the solution 
\end{solution}
\question[5] What is your opinion?
\begin{solution}
This is my opinion
\end{solution}
\end{questions}

如果答案被打印出来,还可以使用 \ifprintanswers 命令仅添加答案:

\ifprintanswers
Only if answers are printed
\else
Only if answers are not printed
\fi

介绍

\numquestions 给出问题的总数,宏 \numpoints 给出总分。

\begin{minipage}{.8\textwidth}
This exam includes \numquestions\ questions. The total number of points is \numpoints.
\end{minipage}

\numquestion 后的反斜杠防止宏像平常一样吞噬后面的空格。

Exsheets

exsheets 包是 exam 类的替代品。它可以用来创建考试试卷、教科书(包括解答)等。提供许多选项来调整输出格式。以下是一个示例:

\documentclass{article}
\usepackage{booktabs}
\usepackage{exsheets}
\usepackage{tasks}
\SetupExSheets[question]{type=exam}
\SetupExSheets{
	counter-format=se.qu,
	counter-within=section,
	headings=runin,
}
\begin{document}
\section{Chemistry}
\begin{question}{2}
	Which one of the entries does not fit with the others?
	\begin{tasks}(4)
		\task mercury
		\task iron
		\task lead
		\task zinc
	\end{tasks}
\end{question}
\begin{question}{4}
	Explain your decision for the answer above.
	\blank[width=5\linewidth,linespread=1.5]{}
\end{question}

\section{Physics}
\settasks{
	counter-format=(tsk[r]),
	label-width=4ex
}
\begin{question}{1}
	What is a funkyton?
	\begin{tasks}(2)
		\task A dancing electron
		\task A dancing proton
		\task A dancing neutron
		\task A Dixie Dancing Duck
	\end{tasks}
\end{question}

\begin{center}
\begin{tabular}{l*{\numberofquestions}{c}c}\toprule
	Question & \ForEachQuestion{\QuestionNumber{#1}\iflastquestion{}{&} } & Total \\ \midrule
	Points   & \ForEachQuestion{\GetQuestionProperty{points}{#1}\iflastquestion{}{&} } & \pointssum* \\ 
	Reached  & \ForEachQuestion{\iflastquestion{}{&} } & \\ \bottomrule
\end{tabular}
\end{center}
\end{document}


示例考试试卷

Exsheets 包的继任者将是 xsim 包。

参考文献

  • examdoc 使用 exam 文档类

  • Probsoln 创建问题集,可选择包含解答

  • mathexm 文档

  • exsheets 文档 创建练习题和考试

链接


Last modified: Tuesday, 22 April 2025, 12:19 PM