% -*- coding: utf-8 -*- % !TEX program = xelatex \documentclass[12pt]{beamer} \usepackage[UTF8,noindent]{ctex} \usepackage{arev} \usefonttheme{professionalfonts} \makeatletter \providecommand{\beamer@endinputifotherversion}[1]{} \ifxetex \setCJKsansfont{SimHei} % fix for ctex 2.0 \setCJKmonofont{SimHei} \renewcommand\CJKfamilydefault{\CJKsfdefault}% \else \@ifpackagelater{ctex}{2014/03/01}{}{\AtBeginDocument{\heiti}} %无效? \fi \makeatother \renewcommand{\baselinestretch}{1} % ctex 2.4.1 开始为 1,之前为 1.3 \renewcommand{\arraystretch}{1.3} \setlength{\parskip}{7pt plus 1pt minus 1pt} \setbeamersize{text margin left=8mm,text margin right=8mm} \setbeamercolor{normal text}{bg=gray!20} \setbeamertemplate{frametitle}{\strut\insertframetitle\strut\par} \setbeamertemplate{navigation symbols}{} \newcommand{\cdotfill}{\leavevmode\xleaders\hbox to 0.5em{\hss$\cdot$\hss}\hfill\kern0pt\relax} \usepackage{tabularx} \newcommand{\ulinefill}[1]{\xleaders\hbox{\underline{\vphantom{#1}\kern1pt}}\hfill\kern0pt} \newcommand{\fillbox}[1]{\ulinefill{#1}\underline{#1}\ulinefill{#1}} \setbeamertemplate{title page}{% \renewcommand{\arraystretch}{2}% \usebeamerfont{title} \begin{tabularx}{\linewidth}{|X|} \hline 模板名称:\fillbox{\usebeamercolor[fg]{title}\inserttitle} \\ 模板作者:\fillbox{\insertauthor} \\ 所在单位:\fillbox{\insertinstitute} \\ 更新日期:\fillbox{\the\year}年\fillbox{\the\month}月\fillbox{\the\day}日\\ \hline \end{tabularx}% } \usepackage{ragged2e} \justifying \let\oldraggedright\raggedright \let\raggedright\justifying \usepackage{fancyvrb} \newenvironment{framex}{\begin{frame}[fragile=singleslide,environment=framex]}{\end{frame}} \DefineVerbatimEnvironment{code}{Verbatim}{% formatcom=\color{blue!50!red}% } \begin{document} \title{暨南大学试卷 LaTeX 模板} \author{吕\ 荐\ 瑞} \institute{暨南大学数学系} \begin{frame}[plain] \titlepage \end{frame} \section{模板介绍} \begin{framex} \frametitle{简单介绍} 本文档介绍 \verb!jnuexam! 文档类。这个文档类提供暨南大学考试试卷的 LaTeX 模板。 \par 这个模板将格式和内容分开,而且可以从一份 \verb!tex! 文件编译出四份试卷(A卷 / B卷 / A卷答案 / B卷答案),使用方便。 \par 这个模板的最新版本可以在下面地址下载:\newline \color{blue}{\href{https://lvjr.bitbucket.io/jnuexam.html?\the\year}{\ttfamily https://lvjr.bitbucket.io/jnuexam.html}} \end{framex} \begin{framex} \frametitle{编译方式} 这个文档类要求所有 \verb!tex! 文件都使用 \verb!UTF8! 编码, 若使用 \verb!GBK! 编码则无法得到正确结果。 \par 如果对文件编码不熟悉,可以直接复制例子文件,然后在其中修改,即可正常编译。 \par 这个文档类同时支持 \verb!XeLaTeX! 和 \verb!PDFLaTeX! 方式编译。为得到最好的中文显示效果, 推荐用较先进的 \verb!XeLaTeX! 编译。 \end{framex} \section{试卷结构} \begin{framex} \frametitle{试卷结构} 下面是 \verb!jnuexam! 试卷文档的基本结构: \begin{code} \documentclass[chinese]{jnuexam} % 导言区 \begin{document} % 正文区 \end{document} \end{code} 试卷包含中文和英文两种模板,必须在文档开头指明。\par 导言区用于设定装订线和草稿纸等等选项。\par 正文区用于填写试卷表头和输入试卷内容。 \end{framex} \begin{framex} \frametitle{装订草稿} 在文档的导言区可以设定装订线和草稿纸。比如: \begin{code} \SetExamOption{ binding = 2, % 装订线 scratch = 1, % 草稿纸 } \end{code} 其中 \verb!binding! 取 0 表示没有装订线, 取 1 表示仅空白试卷有,取 2 表示空白试卷和试卷答案都有。\par 而 \verb!scratch! 的取值表示草稿纸数量,以 A3 大小双面印刷计算。 草稿纸仅在空白试卷中出现,试卷答案里不会带草稿纸。 \end{framex} \begin{framex} \frametitle{试卷正文} \begin{code} \documentclass{jnuexam} \begin{document} ...... \examtitle{...} %生成试卷表头,见下页 ...... \exampart{填空题}[题数分值] ...... \exampart{单选题}[题数分值] ...... \exampart{计算题}[题数分值] ...... \exampart{证明题}[题数分值] ...... \examdata{可能用到的数据} %附录数据 ...... \end{document} \end{code} \end{framex} \begin{framex} \frametitle{试卷表头} \begin{code} \examtitle{ niandu = 2017--2018, xueqi = 2, kecheng = 大学数学, zhuanye = 理工四学分, % 可以为空白 jiaoshi = {张三,李四}, % 教师姓名 shijian = 2018年6月28日, bixiu = 1, % 1 为必修,0 为选修 bijuan = 1, % 1 为闭卷,0 为开卷 shijuan = A, % A 或 B 或 C 卷 neizhao = 1, % 1 打勾,0 不勾 waizhao = 0, % 1 打勾,0 不勾 } \end{code} 其中 \verb!zhuanye! 和 \verb!shijian! 选项的内容可以为空。 \end{framex} \begin{framex} \frametitle{评分表格} 在 \verb!\examtitle! 后面,可以用 \verb!\gradetable! 命令生成空白的评分表格。比如: \begin{code} \gradetable[total=6,strut=2em] \end{code} 其中 \verb!\gradetable! 命令的各个参数含义如下: \begin{description} \item[total] 表示试卷总共有多少部分,默认是 \verb!6!。 \item[strut] 表示空白单元格的支架高度,默认是 \verb!2.5em!。 \end{description} \end{framex} \begin{framex} \frametitle{判断题目} \begin{code} \exampart{判断题}[题数分值] \begin{question} 第一道判断题描述。\tickout{t} \end{question} \begin{question} 第二道判断题描述。\tickout{f} \end{question} \end{code} 其中 \verb!\tickout{t}! 和 \verb!\tickout{f}! 分别表示打勾(\textcolor{blue}{$\checkmark$})和打叉(\textcolor{blue}{\large$\times$})。 还可用大写的 \verb!\tickout{T}! 和 \verb!\tickout{F}!, 分别表示输出 \textcolor{blue}{\textsf{T}} 和 \textcolor{blue}{\textsf{F}}。 \par 答案必须放在 \verb!\tickout! 命令里;这样才能在生成空白试卷时隐藏它。 \end{framex} \begin{framex} \frametitle{填空题目} \begin{code} \exampart{填空题}[题数分值] \begin{question} 第一道填空题描述\fillout{答案}。 \end{question} \begin{question} 第二道填空题描述\fillout{答案}。 \end{question} \end{code} \verb!\fillout! 命令将用下划线填满整行。另有个 \verb!\fillin! 命令,只留下最小宽度的下划线。 \par 答案必须放在 \verb!\fillout! 或 \verb!\fillin! 命令里面;这样才能在生成空白试卷时隐藏它。 \end{framex} \begin{framex} \frametitle{选择题目} \begin{code} \exampart{单选题}[题数分值] \begin{question} 第一道单选题描述\pickout{答案}。 \end{question} \begin{question} 第二道单选题描述\pickout{答案}。 \end{question} \end{code} \verb!\pickout! 命令将把选择圆括号放在本行最右边。另外有个 \verb!\pickin! 命令,将选择圆括号放在当前位置。 \par 答案必须放在 \verb!\pickout! 或 \verb!\pickin! 命令里面;这样才能在生成空白试卷时隐藏它。 \end{framex} \begin{framex} \frametitle{选项排版} 选择题的四个选项可以用 \verb!abcd! 环境来排版。比如: \begin{code} \begin{abcd} \item 第一个选项 \item 第二个选项 \item 第三个选项 \item 第四个选项 \end{abcd} \end{code} 此时 \verb!abcd! 环境将根据各选项长度自动将四个选项分为一行、两行或四行排版,非常方便。 \end{framex} \begin{framex} \frametitle{答题表格} 在填空题和选择题前面,还可以用 \verb!\answertable! 命令生成空白答题栏。比如: \begin{code} \answertable[total=6,column=3,strut=3em] \end{code} 其中 \verb!\answertable! 命令的各个参数含义如下: \begin{description} \item[total] 表示总共有多少个题目。 \item[column] 表示每行排版几个题目。 \item[strut] 表示空白单元格的高度,默认是 \verb!1em!。 \item[notice] 表示答题表格前面提示文本的内容。 \end{description} \end{framex} \begin{framex} \frametitle{计算题目} \begin{code} \exampart{计算题}[题数分值] \begin{question} 第一道计算题描述。 \end{question} \begin{solution} 第一道计算题答案。 \end{solution} \begin{question} 第二道计算题描述。 \end{question} \begin{solution} 第二道计算题答案。 \end{solution} \end{code} \end{framex} \begin{framex} \frametitle{证明题目} \begin{code} \exampart{证明题}[题数分值] \begin{question} 第一道证明题描述。 \end{question} \begin{solution} 第一道证明题答案。 \end{solution} \begin{question} 第二道证明题描述。 \end{question} \begin{solution} 第二道证明题答案。 \end{solution} \end{code} \end{framex} \begin{framex} \frametitle{解答名称} 通过重定义关键词的翻译,可以改变 \verb!solution! 环境的显示名称。 比如下面例子将“解”改为“证”: \begin{code} \SetExamTranslation{solution-Solution = 证} \end{code} \end{framex} \begin{framex} \frametitle{评分命令} 计算题和证明题等主观题的排版方法是完全一样的。在编写这些主观题的解答时, 可以用 \verb!\points! 命令给出各步骤得分。比如: \begin{code} \begin{solution} $1+1=2$ \points{4} $2+2=4$ \points{8} \end{solution} \end{code} 评分命令 \verb!\points! 也可在 \verb!align*! 等数学环境中使用,此时评分显示在公式编号位置。 \end{framex} \begin{framex} \frametitle{对齐命令} 此文档类提供几个对齐命令,用于在不同行之间对齐。比如 \vskip1em\hrule 我们有$(a+b)^2 = (a+b)(a+b)$ \par \leavevmode\phantom{我们有$(a+b)^2$}${}= a^2 + 2ab + b^2$ \hfill$\cdots\cdots$ 2分 \vskip0.6em\hrule\vskip1em \begin{code} 我们有$(a+b)^2 \? = (a+b)(a+b)$ \\ \+$= a^2+2ab+b^2$ \points{2} \end{code} 第一个公式内部的 \verb!\?! 保存当前水平位置, 而第二个公式前面的 \verb!\+! 表示跳到之前保存的位置。 \par 这两个对齐命令 \verb!\?! 和 \verb!\+! 需要编译两次才能生效。 \end{framex} \begin{framex} \frametitle{对齐命令} 此文档类提供几个对齐命令,用于在不同行的对齐。比如 \vskip1em\hrule 我们有$(a+b)^2 = (a+b)(a+b)$ \par \leavevmode\phantom{我们\,}${}= a^2 + 2ab + b^2$ \hfill$\cdots\cdots$ 2分 \vskip0.6em\hrule\vskip1em \begin{code} 我们有 \? $(a+b)^2 = (a+b)(a+b)$ \\ \< $= a^2+2ab+b^2$ \points{2} \end{code} 第一行公式前面的 \verb!\?! 保存当前水平位置, 而第二行公式前面的 \verb!\