summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/latex/exam-n/exam-n.cls
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/tex/latex/exam-n/exam-n.cls')
-rw-r--r--Master/texmf-dist/tex/latex/exam-n/exam-n.cls195
1 files changed, 133 insertions, 62 deletions
diff --git a/Master/texmf-dist/tex/latex/exam-n/exam-n.cls b/Master/texmf-dist/tex/latex/exam-n/exam-n.cls
index 68a03b55c61..fb7e2ce8345 100644
--- a/Master/texmf-dist/tex/latex/exam-n/exam-n.cls
+++ b/Master/texmf-dist/tex/latex/exam-n/exam-n.cls
@@ -6,10 +6,10 @@
%%
%% exam-n.dtx (with options: `package')
%% exam-n: format exam questions
-%% Release version 1.1, 2014 May 03.
+%% Release version 1.1.4, 2016 December 19.
%%
%%%% File: exam-n.dtx
-%%%% Copyright 2005--2014, Norman Gray
+%%%% Copyright 2005--2016, Norman Gray
%%
%% This work may be distributed and/or modified under the
%% conditions of the LaTeX Project Public License, either version 1.3
@@ -27,12 +27,12 @@
%% the derived file exam-n.cls,
%% and the associated *.clo files.
-%%%% Source: Mercurial revision 6f818b549982, 2014-05-03 13:42 +0100, tag 1.1 + 0
+%%%% Source: Mercurial revision e8a612cb25f4, 2016-12-19 16:49 +0000, tag exam-n-1.1.4 + 0
%%
\NeedsTeXFormat{LaTeX2e}
-\ProvidesClass{exam-n}[2014/05/03 1.1]
-\typeout{Class: `exam-n 1.1 <2014/05/03>}
+\ProvidesClass{exam-n}[2016/12/19 1.1.4]
+\typeout{Class: `exam-n 1.1.4 <2016/12/19>}
@@ -94,9 +94,15 @@
\def\examn@header@shoutformat#1{{\Huge\bfseries #1}}
}
\DeclareOption{colour}{}
+\newcount\examn@fontvariant
+ \examn@fontvariant=0 % the default
\newif\ifbigfont
-\bigfontfalse
-\DeclareOption{bigfont}{\bigfonttrue}
+ \bigfontfalse
+\DeclareOption{largefont}{\examn@fontvariant=1 \bigfontfalse}
+\DeclareOption{bigfont}{%
+ \ClassWarning{exam-n}{OPTION [bigfont] HAS BEEN DEPRECATED; use [hugefont] instead}
+ \examn@fontvariant=2 \bigfonttrue}
+\DeclareOption{hugefont}{\examn@fontvariant=2 \bigfonttrue}
\PassOptionsToClass{a4paper}{article}
\newtoks\@styleoverrides
\@styleoverrides={}
@@ -228,7 +234,25 @@
\DeclareRobustCommand\normalfont
{\usefont\encodingdefault\sfdefault\seriesdefault\shapedefault \relax}
\fi
-\ifbigfont
+\ifcase\examn@fontvariant
+ % default: do nothing
+\or
+ % font variant 1: 18pt
+ \def\examn@bodyfontchange{
+ \renewcommand\normalsize{%
+ \@setfontsize\normalsize{18}{24}%
+ \abovedisplayskip 18\p@ \@plus3.5\p@ \@minus9\p@
+ \abovedisplayshortskip \z@ \@plus5\p@
+ \belowdisplayshortskip 10\p@ \@plus5\p@ \@minus5\p@
+ \belowdisplayskip \abovedisplayskip
+ \let\@listi\@listI}
+ \parindent=24pt
+ \parskip=18pt
+ % Redefine \FormatPartMarks so that it doesn't push the text off the paper
+ \let\FormatPartMarks\examn@variantFormatPartMarks
+ }
+\or
+ % font variant 2: 36pt
\def\examn@bodyfontchange{
\renewcommand\normalsize{%
\@setfontsize\normalsize{36}{42}%
@@ -240,16 +264,23 @@
\parindent=48pt
\parskip=36pt
% Redefine \FormatPartMarks so that it doesn't push the text off the paper
- \def\FormatPartMarks##1{
- \setbox0=\hbox{\hskip 1em \textbf{[##1]}}
- \@tempdima=0.8\marginsize
- \ifdim\wd0>\@tempdima
- \advance\@tempdima -\wd0
- \hbox to 0pt{\hskip\@tempdima \box0\hss}%
- \else
- \hbox to 0pt{\box0\hss}
- \fi}}
+ \let\FormatPartMarks\examn@variantFormatPartMarks
+ }
+\else
+ % Bad font variant
+ \ClassError{exam-n}
+ {Bad font variant \examn@fontvariant}
+ {I didn't expect to see that number (broken style file re largefont/hugefont?)}
\fi
+\def\examn@variantFormatPartMarks#1{%
+ \setbox0=\hbox{\hskip 1em \textbf{[#1]}}%
+ \@tempdima=0.8\marginsize
+ \ifdim\wd0>\@tempdima
+ \advance\@tempdima -\wd0
+ \hbox to 0pt{\hskip\@tempdima \box0\hss}%
+ \else
+ \hbox to 0pt{\box0\hss}%
+ \fi}
\def\@exambanner{}
\def\exambanner{\def\@exambanner}
@@ -303,12 +334,12 @@ images may not be used in examinations without prior arrangement.
\def\CheckTotalQuestions{%
\ifnum\@draftstatus < 2
\ifx\@numquestions\@empty \else
- \ifnum\questionnumber=\@numquestions \else
+ \ifnum\c@questionnumber=\@numquestions \else
\ClassWarning{exam-n}
- {Expected \@numquestions\space questions, got \the\questionnumber!}
+ {Expected \@numquestions\space questions, got \thequestionnumber!}
\ifnum\@draftstatus > 0 % draft mode
\begin{center}
- \textbf{\highlighted{Expected \@numquestions\space questions, got \the\questionnumber}}
+ \textbf{\highlighted{Expected \@numquestions\space questions, got \thequestionnumber}}
\end{center}
\fi
\fi
@@ -365,16 +396,28 @@ images may not be used in examinations without prior arrangement.
}
\setlength{\parindent}{2em}
\setlength{\parskip}{\bigskipamount}
+\def\examn@flushfloats{\par
+ \begingroup
+ \edef\@tempa{\@deferlist\@dbldeferlist}
+ \ifx\@tempa\@empty \else
+ \clearpage
+ \fi
+ \endgroup
+}
\ifcase\@draftstatus % Final version
\def\ClosingText{
+ \examn@flushfloats
\begin{center}\textbf{End of Paper}\\\end{center}
\mark{END}}
\or % Draft version
\def\ClosingText{
+ \examn@flushfloats
\begin{center}\textbf{End of Draft Paper}\\\end{center}
\mark{END}}
\else % Compose version (nothing, because this would be on a page by itself)
- \def\ClosingText{\mark{END}}
+ \def\ClosingText{
+ \examn@flushfloats
+ \mark{END}}
\fi
\RequirePackage{fancyhdr}
\pagestyle{fancy}
@@ -390,7 +433,7 @@ images may not be used in examinations without prior arrangement.
\def\@tempa{END}
\xdef\examn@topmark{\botmark}
\ifx\examn@topmark\@empty
- \formatcontinuations{Paper continued over}%
+ \formatcontinuations{Paper continued over\dots}%
\else\ifx\examn@topmark\@tempa
\formatcontinuations{END}
\else
@@ -552,15 +595,16 @@ images may not be used in examinations without prior arrangement.
\vskip 2\baselineskip plus 0.3fil
\parindent=0pt
\parskip=0.5\baselineskip
- \ifbigfont
+ \ifnum\examn@fontvariant > 0
% Don't put the rubric here (see below)
+ {\LARGE Rubric: see overleaf}
\else
\ifx\@rubric\@empty\else
\ifx\@rubric\@nnil\else
- % if there's a rubric, separate from the base rubric, then
+ % If there's a rubric, separate from the base rubric, then
% separate the two with an hrule (the per-exam rubric
% presumably represents special instructions for this exam,
- % so should be highlighted
+ % so should be highlighted)
\vbox{\let\emph\textbf
\@rubric
\par}
@@ -569,10 +613,10 @@ images may not be used in examinations without prior arrangement.
\vskip1.5\baselineskip
\fi
\fi
- \ifx\@baserubric\@empty \else
- \@baserubric \par
- \fi
- \fi % end \ifbigfont\else
+ \ifx\@baserubric\@empty \else
+ \@baserubric \par
+ \fi
+ \fi % end \ifbigfont \else ...
\end{center}
\vskip 2\baselineskip plus 0.6fil % \newpage is {\vfil\penalty-\@M}
\vbox to 0pt{\hbox to \textwidth{%
@@ -606,7 +650,7 @@ images may not be used in examinations without prior arrangement.
%
\examn@bodyfontchange
\normalfont\normalsize
- \ifbigfont
+ \ifnum\examn@fontvariant>0
% Put the rubric on a second page, in the 'huge' size.
\begin{center}
\parskip=18pt
@@ -654,11 +698,13 @@ images may not be used in examinations without prior arrangement.
\def\subsubsection{\@badsection{subsubsection}}
\def\paragraph{\@badsection{paragraph}}
\def\subparagraph{\@badsection{subparagraph}}
+\renewcommand\tableofcontents{\bigskip
+ \hbox to \textwidth{\hfil\textbf{\Large Contents}\hfil}%
+ \@starttoc{toc}}
\newcount\marktotal % number of marks accumulated so far
\newcount\markgoal % number of marks we should have in the end
-
-\newcount\questionnumber
-\questionnumber=0
+\newcounter{questionnumber}
+\setcounter{questionnumber}0
\newcounter{partnumber}
\renewcommand\part{%
\if@nobreak \else
@@ -672,7 +718,8 @@ images may not be used in examinations without prior arrangement.
\stepcounter{partnumber}%
\noindent\FormatPartNumber
}
-\newcommand\FormatPartNumber{\hbox to \parindent{(\alph{partnumber})\hss}}
+\newcommand\FormatPartNumber{\hbox to \parindent{(\StylePartNumber{partnumber})\hss}}
+\let\StylePartNumber\alph
\newif\if@newpagebeforequestion
\if@pageperquestion
\@newpagebeforequestiontrue
@@ -713,7 +760,7 @@ images may not be used in examinations without prior arrangement.
% visual display only -- doesn't count towards mark total
\setbox0=\vbox to 0pt{\vss
\hbox to \textwidth{\hfil\hbox to 0pt{\quad\small[\dots #1]\hss}}
- \vskip0.25ex }
+ \vskip0.25ex }%
% the next line is probably unnecessary, but guarantees that box0
% has zero depth, so no extra vertical space appears because of
% this new box
@@ -726,13 +773,24 @@ images may not be used in examinations without prior arrangement.
\else
\global\advance\marktotal #1
\if@tempswa
- \setbox0=\vbox to 0pt{\vss
- \hbox to \textwidth{\strut\hfill\FormatPartMarks{#1}}%
- \vskip 1\baselineskip} % vskip means box has zero depth
- \ifvmode
- \box0
+ \ifdim\displaywidth>0pt
+ \if@eqnsw
+ \ClassError{exam-n}{\string\partmarks* may not be used
+ within numbered equations}{Replace \string\partmarks*
+ with a \string\partmarks\ after the equation}
+ \global\advance\marktotal -#1 % to cause the mark total to be wrong
+ \else
+ \eqno \hbox to 1sp{\FormatPartMarks{#1}\hfil}%
+ \fi
\else
- \vadjust{\box0}%
+ \setbox0=\vbox to 0pt{\vss
+ \hbox to \textwidth{\strut\hfill\FormatPartMarks{#1}}%
+ \vskip 1\baselineskip}% vskip means box has zero depth
+ \ifvmode
+ \box0
+ \else
+ \vadjust{\box0}%
+ \fi
\fi
\else
\ifdim\@partmarksspace > 0pt
@@ -770,8 +828,8 @@ images may not be used in examinations without prior arrangement.
{Missing mark goal for question (using 0 instead)}
{Missing mark goal for question (using 0 instead)}
\def\@tempa{0}
- \fi
- \ifx\@includequestionoverridenumber\@empty
+ \fi
+ \ifx\@includequestionoverridenumber\@empty
\do@question{#1}{\@tempa}%
\else
\ClassWarning{exam-n}{Forcing question number
@@ -802,16 +860,16 @@ images may not be used in examinations without prior arrangement.
\fi}
{\par
\ifnum\ex@mcqi<\ex@nmcq
- \ClassWarning{exam-n}{Too few potential answers in MCQ \the\questionnumber}
- \@shout{Too few potential answers in MCQ \the\questionnumber}
+ \ClassWarning{exam-n}{Too few potential answers in MCQ \thequestionnumber}
+ \@shout{Too few potential answers in MCQ \thequestionnumber}
\ifnum\@draftstatus > 0
\highlighted{TOO FEW ANSWERS}\par
\fi
\fi
\ifcase\ex@mcqnanswer
\ClassWarning{exam-n}
- {No correct MCQ answer provided in question \the\questionnumber}
- \@shout{No correct MCQ answer provided in question \the\questionnumber}
+ {No correct MCQ answer provided in question \thequestionnumber}
+ \@shout{No correct MCQ answer provided in question \thequestionnumber}
\ifnum\@draftstatus > 0
\highlighted{NO CORRECT ANSWER PROVIDED}\par
\fi
@@ -819,8 +877,8 @@ images may not be used in examinations without prior arrangement.
% ex@mcqanswer=1: correct -- do nothing
\else
\ClassWarning{exam-n}
- {Too many correct MCQ answers provided in question \the\questionnumber}
- \@shout{Too many correct MCQ answers provided in question \the\questionnumber}
+ {Too many correct MCQ answers provided in question \thequestionnumber}
+ \@shout{Too many correct MCQ answers provided in question \thequestionnumber}
\ifnum\@draftstatus > 0
\highlighted{TOO MANY CORRECT ANSWERS}\par
\fi
@@ -862,7 +920,12 @@ images may not be used in examinations without prior arrangement.
\questionpreamble{}
\fi
\setcounter{partnumber}{0}
- \global\advance\questionnumber 1
+ \setcounter{answerpartnumber}{0}
+ \refstepcounter{questionnumber}
+ \def\@tempa{#1}
+ \ifx\@tempa\@empty \else
+ \edef\@currentlabel{#1}
+ \fi
\examn@prequestionspace{%
\if@nobreak
% after a heading (or something like that)
@@ -876,7 +939,7 @@ images may not be used in examinations without prior arrangement.
\def\@tempa{#1}% intended question number
\ifx\@tempa\@empty
% no optional argument -- easy
- \def\@currentquestion{\the\questionnumber}
+ \def\@currentquestion{\thequestionnumber}
\else
\setbox0=\hbox{\@tempcnta=#1}
\ifdim\wd0>0pt
@@ -889,21 +952,21 @@ images may not be used in examinations without prior arrangement.
\ifcase\@draftstatus
% Final version
\@tempcnta=#1
- \ifnum\questionnumber=\@tempcnta
+ \ifnum\c@questionnumber=\@tempcnta
\def\@currentquestion{#1}
\else
\ifx\@includequestionoverridenumber\@empty
\ClassError{exam-n}
- {\string\question[#1] is actually question \the\questionnumber!}
+ {\string\question[#1] is actually question \thequestionnumber!}
{The question in {question} environment number
- \the\questionnumber\space is specified as
+ \thequestionnumber\space is specified as
\string\question[#1].\MessageBreak
This is an error in 'final' mode.\MessageBreak
Perhaps you need \string\QuestionNumberChecksOff?}
\def\@currentquestion{???}
\else
\ClassWarning{exam-n}{Forcing question number \@includequestionoverridenumber,
- in {question} environment number \the\questionnumber}
+ in {question} environment number \thequestionnumber}
\edef\@currentquestion{\@includequestionoverridenumber}% this doesn't seem to expand in fact!
\message{current question=\@currentquestion, override \@includequestionoverridenumber}
\fi
@@ -912,9 +975,9 @@ images may not be used in examinations without prior arrangement.
% Draft version -- let the given number override
% \the\questionnumber, but warn if there's a difference.
\@tempcnta=#1
- \ifnum\questionnumber=\@tempcnta \else
+ \ifnum\c@questionnumber=\@tempcnta \else
\ClassWarning{exam-n}
- {\string\question[#1] is actually question \the\questionnumber!}
+ {\string\question[#1] is actually question \thequestionnumber!}
\fi
\def\@currentquestion{#1}
\else
@@ -929,16 +992,16 @@ images may not be used in examinations without prior arrangement.
% no optional argument -- this is possibly an error, so warn
\ClassWarning{exam-n}{\string\QuestionNumberChecksOff\ is in
force, but this question has no [number]}
- \def\@currentquestion{\the\questionnumber}
+ \def\@currentquestion{\thequestionnumber}
\else
- \typeout{Forcing question \the\questionnumber\space to be #1}
+ \typeout{Forcing question \thequestionnumber\space to be #1}
\def\@currentquestion{#1}
\fi
\fi
\everypar{\setbox0=\lastbox % discard \box0
\FormatQuestionNumber
\mark{\@currentquestion}%
- \everypar{}}
+ \global\everypar{}}
}
\newcommand\FormatQuestionNumber
{\hbox to 0pt{\hss \textbf{\@currentquestion}\hskip1em}}
@@ -987,6 +1050,7 @@ images may not be used in examinations without prior arrangement.
}
}
\newenvironment{questiondata}{%
+ \par
\penalty50 % poor break
\vbox\bgroup
\slshape
@@ -1002,7 +1066,7 @@ images may not be used in examinations without prior arrangement.
\medskip
\hrule width \textwidth
\par
- \egroup
+ \egroup % end of \vbox
}
\newcommand\questionpreamble[1]{\gdef\examn@questionpreamble{#1}}
\let\examn@questionpreamble\@empty
@@ -1080,6 +1144,11 @@ images may not be used in examinations without prior arrangement.
\let\@includequestionoverridenumber\@empty
\newif\if@insolution
\@insolutionfalse
+\newcounter{answerpartnumber}
+\newcommand{\examn@solutionpart}{%
+ \par
+ \stepcounter{answerpartnumber}
+ \noindent\hbox to \parindent{(\StylePartNumber{answerpartnumber})\hss}}
\def\@formatsolution{\par
\if@insolution
\ClassError{exam-n}{Misplaced solution}{You can't have a solution within a solution}
@@ -1088,12 +1157,13 @@ images may not be used in examinations without prior arrangement.
\fi
\examn@dummycaptions % dummy captions within solutions
\typeout{SHOWING SOLUTIONS}
+ \let\part\examn@solutionpart
\vskip 1ex plus 2\bigskipamount % add stretchable space...
\penalty-\@lowpenalty % ...and encouragement to break here
\parskip 0.5\baselineskip
\raggedright
\color{solutiontext}%\slshape
- \ifbigfont\else
+ \ifbigfont \else
\small
\fi
\hrule
@@ -1102,6 +1172,7 @@ images may not be used in examinations without prior arrangement.
\vskip -\parskip % cancel out the following parskip
\textbf{\highlighted{Solution:}}\hskip2em
\ignorespaces
+ \parindent=2em
}
\def\end@formatsolution{%
\par