现在很多老师使用一些考试系统的时候,希望能够在组卷上能够更加随机些,也就是说能够在短时间内自动组合成若干份符合需求且又具有随机性的试卷。这个模板将试卷的格式和内容分离,而且可以从一份 tex 文件直接编译出四份试卷 (A 卷 / B 卷 / A 卷答案 / B 卷答案),B 卷将 A 卷各题型题目及选择题各选项随机排列,使用方便。
从 2024 年开始,JnuExam 将各种功能拆分成多个宏包使得代码更清晰:
利用 RandExam 文档类提供的模板定制命令,也可以设计其他学校的模板。
该宏包最新版:https://ctan.org/pkg/randexam
其只支持英文。
中文版本在:https://lvjr.bitbucket.io/package/jnuexam.zip
若是访问困难,关注我们公众号,回复:随机试卷,获取全部文件下载链接。
中文注意:
这个文档类要求所有 tex 文件都使用 UTF8 编码,若使用GBK 编码则无法得到正确结果。如果对文件编码不熟悉,可以直接复制例子文件,然后在其中修改,即可正常编译。
这个文档类同时支持 XeLaTeX 和 PDFLaTeX 方式编译。为得到最好的中文显示效果,推荐用较先进的 XeLaTeX 编译。
在文档的导言区可以设定装订线和草稿纸。比如:
\SetExamOption{
binding = 2, % 装订线,1 仅空白试卷有,2 试卷和答案都有
scratch = 1, % 草稿纸数量,仅空白试卷有,A3 大小,双面印刷
seed = 19061116, % 随机数种子,用于改变 B 卷小题的随机顺序
}其中 binding 取 0 表示没有装订线,取 1 表示仅空白试卷有,取 2 表示空白试卷和试卷答案都有。
而 scratch 的取值表示草稿纸数量,以 A3 大小双面印刷计算。草稿纸仅在空白试卷中出现,试卷答案里不会带草稿纸。

这里的随机数种子,用于改变 B 卷小题的随机顺序,具体的解释如下。
关于随机数种子注释: 这个宏包中使用了
pgfmathrandominteger这是PGF 的一个函数,用于生成指定范围内的随机整数。比如你想在 TikZ 图中生成一个 1 到 10 之间的随机整数,并将其存储在 randomnum 变量中,然后在图中使用该随机整数,你可以这样做:\documentclass{article} \usepackage{tikz} \begin{document} \begin{tikzpicture} \pgfmathsetseed{\number\pdfrandomseed} \pgfmathrandominteger{\randomnum}{1}{10} \node at (0,0) {随机数: \randomnum}; \end{tikzpicture} \end{document}
在我们写文档的时候,您通常要写一个考试的标题,多个考试题型部分\exampart,以及一个可选的(\examdata)命令:
\documentclass{jnuexam}
\begin{document}
......
\examtitle{...} % 生成试卷表头,见下页
......
\exampart{填空题}{题数分值}
......
\exampart{单选题}{题数分值}
......
\exampart{计算题}{题数分值}
......
\exampart{证明题}{题数分值}
......
\examdata{可能用到的数据} % 附录数据
......
\end{document}\examtitle{ % 生成试卷表头
niandu = 2017--2018,
xueqi = 2,
kecheng = 大学数学,
zhuanye = 理工四学分, % 可以为空白
jiaoshi = {张三,李四,王五}, % 教师姓名
shijian = 2018~年~06~月~28~日,
bixiu = 1, % 1 为必修,0 为选修
bijuan = 1, % 1 为闭卷,0 为开卷
shijuan = A, % A 或 B 或 C 卷
neizhao = 1, % 1 打勾,0 不勾
waizhao = 0, % 1 打勾,0 不勾
}其中 \zhuanye 和 \shijian 命令的内容可以为空。

在 \examtitle 后面,可以用 \gradetable 命令生成空白的评分表格。比如:
\gradetable[total=6,strut=2em]其中 \gradetable 命令的各个参数含义如下:
total 表示试卷总共有多少部分,默认是 6。strut 表示空白单元格的支架高度,默认是 2.5em。
\exampart{判断题}{题数分值}
\begin{question}
第一道判断题描述。 \tickout{t}
\end{question}
\begin{question}
第二道判断题描述。 \tickout{f}
\end{question}其中 \tickout{t} 和 \tickout{f} 分别表示打勾(✓)和打叉(×)。还可用大写的 \tickout{T} 和 \tickout{F},分别表示输出 T 和 F。
答案必须放在 \tickout 命令里;这样才能在生成空白试卷时隐藏它。
\exampart{填空题}{题数分值}
\begin{question}
第一道填空题描述\fillout{答案}。
\end{question}
\begin{question}
第二道填空题描述\fillout{答案}。
\end{question}\fillout 命令将用下划线填满整行。另有个 \fillin 命令,只留下最小宽度的下划线。
答案必须放在 \fillout 或 \fillin 命令里面;这样才能在生成空白试卷时隐藏它。

\exampart{单选题}{题数分值}
\begin{question}
第一道单选题描述\pickout{答案}。
\end{question}
\begin{question}
第二道单选题描述\pickout{答案}。
\end{question}\pickout 命令将把选择圆括号放在本行最右边。另外有个\pickin 命令,将选择圆括号放在当前位置。
答案必须放在 \pickout 或 \pickin 命令里面;这样才能在生成空白试卷时隐藏它。
选择题的四个选项可以用 abcd 环境来排版。比如:
\begin{abcd}
\item 第一个选项
\item 第二个选项
\item 第三个选项
\item 第四个选项
\end{abcd}此时 abcd 环境将根据各选项长度自动将四个选项分为一行、两行或四行排版,非常方便。
在填空题和选择题前面,还可以用 \answertable 命令生成
空白答题栏。比如:
\answertable[total=6,column=3,strut=3em]其中 \answertable 命令的各个参数含义如下:
效果如下图:
\exampart{计算题}{题数分值}
\begin{question}
第一道计算题描述。
\end{question}
\begin{solution}
第一道计算题答案。
\end{solution}
\begin{question}
第二道计算题描述。
\end{question}
\begin{solution}
第二道计算题答案。
\end{solution}评分命令
计算题和证明题等主观题的排版方法是完全一样的。在编写这些主观题的解答时,可以用 \points 命令给出各步骤得分。比如:
\begin{solution}
$1+1=2$ \points{4}
$2+2=4$ \points{8}
\end{solution}评分命令 \points 也可在 align* 等数学环境中使用,此时评分显示在公式编号位置。

\exampart{证明题}{题数分值}
\begin{question}
第一道证明题描述。
\end{question}
\begin{solution}
第一道证明题答案。
\end{solution}
\begin{question}
第二道证明题描述。
\end{question}
\begin{solution}
第二道证明题答案。
\end{solution}解答名称:通过重定义关键词的翻译,可以改变 solution 环境的显示
名称。比如下面例子将“解”改为“证”:
\SetExamTranslation{solution-Solution = 证}
除了上述四种题型之外,其它题型可以用下面方式编写:
\exampart{某题型}{题数分值}
\begin{question}
第一题描述。 \answer{第一题答案}
\end{question}
\begin{question}
第二题描述。 \answer{第二题答案}
\end{question}其中题目答案必须放在 \answer 命令里面;这样才能在生成空白试卷时隐藏它。
在试卷最后,可以用下面命令增加附录数据部分:
\examdata{可能用到的数据} % 附录数据
......附录数据必须放在 \examdata 命令后面;否则在从 A 卷生成 B 卷时会出问题。

老版本下载