texlive[42755] Master: exam-n (20dec16)

commits+karl at tug.org commits+karl at tug.org
Tue Dec 20 23:54:48 CET 2016


Revision: 42755
          http://tug.org/svn/texlive?view=revision&revision=42755
Author:   karl
Date:     2016-12-20 23:54:48 +0100 (Tue, 20 Dec 2016)
Log Message:
-----------
exam-n (20dec16)

Modified Paths:
--------------
    trunk/Master/texmf-dist/doc/latex/exam-n/README
    trunk/Master/texmf-dist/doc/latex/exam-n/exam-n-example.tex
    trunk/Master/texmf-dist/doc/latex/exam-n/exam-n.html
    trunk/Master/texmf-dist/doc/latex/exam-n/exam-n.pdf
    trunk/Master/texmf-dist/doc/latex/exam-n/notes-for-authors.pdf
    trunk/Master/texmf-dist/doc/latex/exam-n/release-notes.html
    trunk/Master/texmf-dist/doc/latex/exam-n/sample/Makefile
    trunk/Master/texmf-dist/doc/latex/exam-n/sample/cosmo1.tex
    trunk/Master/texmf-dist/doc/latex/exam-n/sample/excos1.tex
    trunk/Master/texmf-dist/doc/latex/exam-n/sample/numerical1-solution.tex
    trunk/Master/texmf-dist/doc/latex/exam-n/sample/numerical2.tex
    trunk/Master/texmf-dist/doc/latex/exam-n/sample/numerical3.tex
    trunk/Master/texmf-dist/doc/latex/exam-n/sample/sample_exam.tex
    trunk/Master/texmf-dist/doc/latex/exam-n/sample/sample_exam_solution.tex
    trunk/Master/texmf-dist/doc/latex/exam-n/sample_exam.pdf
    trunk/Master/texmf-dist/doc/latex/exam-n/sample_exam_solution.pdf
    trunk/Master/texmf-dist/source/latex/exam-n/exam-n.drv
    trunk/Master/texmf-dist/source/latex/exam-n/exam-n.dtx
    trunk/Master/texmf-dist/tex/latex/exam-n/exam-n.cls
    trunk/Master/tlpkg/libexec/ctan2tds

Added Paths:
-----------
    trunk/Master/texmf-dist/doc/latex/exam-n/A1.clo
    trunk/Master/texmf-dist/doc/latex/exam-n/README.ctan
    trunk/Master/texmf-dist/doc/latex/exam-n/notes-for-authors.tex
    trunk/Master/texmf-dist/doc/latex/exam-n/sample/fig/
    trunk/Master/texmf-dist/doc/latex/exam-n/sample/fig/spiral.eps
    trunk/Master/texmf-dist/doc/latex/exam-n/sample/fig/spiral.pdf

Removed Paths:
-------------
    trunk/Master/texmf-dist/doc/latex/exam-n/move-to-texmf/
    trunk/Master/texmf-dist/doc/latex/exam-n/sample/numerical1-solution.pdf
    trunk/Master/texmf-dist/doc/latex/exam-n/sample/sample_exam.pdf
    trunk/Master/texmf-dist/doc/latex/exam-n/sample/sample_exam_solution.pdf
    trunk/Master/texmf-dist/doc/latex/exam-n/sample/spiral.eps
    trunk/Master/texmf-dist/doc/latex/exam-n/sample/spiral.pdf

Added: trunk/Master/texmf-dist/doc/latex/exam-n/A1.clo
===================================================================
--- trunk/Master/texmf-dist/doc/latex/exam-n/A1.clo	                        (rev 0)
+++ trunk/Master/texmf-dist/doc/latex/exam-n/A1.clo	2016-12-20 22:54:48 UTC (rev 42755)
@@ -0,0 +1,82 @@
+\ProvidesFile{A1.clo}[2016/12/19 1.1.4]
+\typeout{A1 exam options, 1.1.4}
+%%%% Source: Mercurial revision e8a612cb25f4, 2016-12-19 16:49 +0000, tag exam-n-1.1.4 + 0
+%%%% File: A1.clo
+%%%% 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
+%% of this license or (at your option) any later version.
+%% The latest version of this license is in
+%%   http://www.latex-project.org/lppl.txt
+%% and version 1.3 or later is part of all distributions of LaTeX
+%% version 2005/12/01 or later.
+%%
+%% This work has the LPPL maintenance status `maintained'.
+%%
+%% The Current Maintainer of this work is Norman Gray <http://nxg.me.uk>
+%%
+%% This work consists of the files exam-n.dtx and exam-n.ins,
+%% the derived file exam-n.cls,
+%% and the associated *.clo files.
+
+% Nothing here beyond the constants sheet
+\constantssheet{
+\begin{center}
+\def\e{{\rm e}}\def\deg{^\circ}
+\def\dmin{^{\rm m}}
+\def\dsec{^{\rm s}}
+\def\ez{\epsilon_{\rm 0}} % permittivity of free space
+\def\er{\epsilon_{\rm r}} % relative permittivity
+\def\ep{\epsilon} % permittivity
+\def\muz{\mu_{\rm 0}} % permeability of free space
+\def\mur{\mu_{\rm r}} % relative permeability
+\def\me{m_{\rm e}} % mass of the electron
+\def\mprot{m_{\rm p}} % mass of the proton
+\def\az{\a_{\rm 0}} % Bohr radius
+\def\mub{\mu_{\rm B}} % Bohr magneton
+%
+\def\tothe#1{$^{#1}$} % raise to the power #1
+\def\metre{\,{\rm m}}
+\def\kg{\,{\rm kg}}
+\def\sec{\,{\rm s}}
+\def\mm{\,{\rm mm}}
+\def\mol{\,{\rm mol}}
+\def\kelvin{\,{\rm K}}
+\def\joule{\,{\rm J}}
+\def\farad{\,{\rm F}}
+\def\ampere{\,{\rm A}}
+\def\ev{\,{\rm eV}}
+\def\hz{\,{\rm Hz}}
+\def\volt{\,{\rm V}}
+\def\watt{\,{\rm W}}
+\def\newton{\,{\rm N}}
+\def\unit#1{\,{\rm #1}}
+%
+{\Large\textbf{Values of astrophysical constants}}\\[\bigskipamount]
+\begin{tabular}{lll} \hline\\[-1.5ex] % slightly hacky extra space after hline
+ speed of light         & $c$ & $2.998\times 10^8 \metre\sec^{-1}$\\
+ gravitational constant & $G$ & $6.673\times10^{-11}\newton\metre^2\kg^{-2}$\\
+ Planck constant        & $h$ & $6.626\times10^{-34}\joule\sec$\\
+ Boltzmann constant     & $k_{\rm B}$ & $1.381\times10^{-23} \joule\kelvin^{-1}$\\
+ Stefan-Boltzmann constant & $\sigma$ & $5.671\times10^{-8}\watt\metre^{-2}\kelvin^{-4}$\\
+ Rydberg constant       & $R_\infty$ &$1.097\times10^{7}\metre^{-1}$\\
+ Avogadro constant      & $N_{\rm A}$ & $6.022\times 10^{23}\unit{mol}^{-1}$\\
+ gas constant           & $R$ & $8.315 \joule\mol^{-1}\kelvin^{-1}$\\
+ proton mass            & $\mprot$ & $1.673\times10^{-27} \kg$\\
+ electron mass          & $\me$ & $9.109\times10^{-31} \kg$\\
+ elementary charge      & $e$ & $1.602\times 10^{-19}\unit{C}$\\
+ electronvolt           & ${\rm eV}$ & $1.602\times 10^{-19}\unit{J}$\\[3pt]
+ astronomical unit      & au &  $1.496\times10^{11} \metre$\\
+ parsec                 & pc &  $3.086\times10^{16}\metre$\\
+ light year             & ly &  $9.461\times10^{15} \metre$\\[3pt]
+ solar mass             & $M_\odot$ & $1.989\times10^{30} \kg$\\
+ solar radius           & $R_\odot$ & $6.960\times10^8 \metre$\\
+ solar luminosity       & $L_\odot$ & $3.826\times10^{26}\watt$\\
+ Earth mass             & $M_\oplus$ & $5.976\times10^{24} \kg$\\
+ Earth radius           & $R_\oplus$ & $6.378\times10^6 \metre$\\
+ obliquity of the ecliptic & $\epsilon$ & $23^\circ\,26'$\\[\medskipamount]
+\hline
+\end{tabular}
+\end{center}
+}

Modified: trunk/Master/texmf-dist/doc/latex/exam-n/README
===================================================================
--- trunk/Master/texmf-dist/doc/latex/exam-n/README	2016-12-20 01:05:25 UTC (rev 42754)
+++ trunk/Master/texmf-dist/doc/latex/exam-n/README	2016-12-20 22:54:48 UTC (rev 42755)
@@ -1,8 +1,10 @@
 
-exam-n: LaTeX class file for exams, version 1.1, 2014 May 03.
-[ Mercurial revision 6f818b549982, 2014-05-03 13:42 +0100, tag 1.1 + 0 ]
+exam-n: LaTeX class file for exams, version 1.1.4, 2016 December 19.
+====================================
 
+[ Mercurial revision e8a612cb25f4, 2016-12-19 16:49 +0000, tag exam-n-1.1.4 + 0 ]
 
+
 Overview
 --------
 
@@ -10,28 +12,31 @@
 exam layout, by a suitably skilled LaTeX hacker.  There are three
 possible ways of doing this, in increasing order of sophistication:
 
-  1. Make suitable adjustments to individual exam `.tex` files.
+  1. Make suitable adjustments to individual exam `.tex` files; or
 
   2. Rename the distributed `exam-n.dtx` file to something more locally
      suitable, and edit it with suitable changes (search for
-     `%%%CONFIGURE` for hints on where to adjust).
+     `%%%CONFIGURE` for hints on where to adjust); or
 
   3. Fork the Mercurial repository at
      [bitbucket](https://bitbucket.org/nxg/exam-n), change the
      value of the `EXAM-N` variable in the `Makefile`, and then
      edit the `exam-n.dtx` file.  See the comments at the top of the
-     `Makefile`.  The command `make dist` will assemble a tarball
-     release of the class file.
+     `Makefile`.
 
-In the last two cases, if you change the `.dtx` file, you _must_ also
-change its name, to avoid confusion.
+In case 2, you _must_ change the name of the `.dtx` file, and in case
+3, you must change the `EXAM-N` variable, to avoid terrible confusion
+(you probably also want to avoid the names of the other exam style
+files at CTAN, since they just might have found their way into your
+TEXINPUTS path).
 
 For general details, talk to Norman Gray <norman at astro.gla.ac.uk>.
 
 This is free software, and you are encouraged to use and adapt it as
-you see fit.  If, however, you need more substantial help with the
-customisations of option 3 above, or need continuing support, then
-[Norman can help](http://8ameter.com), on a commercial basis.
+you see fit.  Norman can give advice.  If, however, you need more
+substantial help with the customisations of option 3 above, or need
+continuing support, then we can surely arrange something more
+elaborate.
 
 With the version 1.1 release, the interface should now be regarded
 as rather stable.  However version 1.1 was the first to be released
@@ -59,6 +64,6 @@
 Distribution and copyright
 --------------------------
 
-Copyright 2005--2014, Norman Gray <http://nxg.me.uk>  
+Copyright 2005--2016, Norman Gray <http://nxg.me.uk>  
 Distributed under the terms of The LaTeX Project Public License (LPPL);
 see the file lppl.txt for details.

Added: trunk/Master/texmf-dist/doc/latex/exam-n/README.ctan
===================================================================
--- trunk/Master/texmf-dist/doc/latex/exam-n/README.ctan	                        (rev 0)
+++ trunk/Master/texmf-dist/doc/latex/exam-n/README.ctan	2016-12-20 22:54:48 UTC (rev 42755)
@@ -0,0 +1,3 @@
+On CTAN, this package lives in /macros/latex/contrib/exam-n.
+
+Its canonical CTAN URL is https://www.ctan.org/pkg/exam-n

Modified: trunk/Master/texmf-dist/doc/latex/exam-n/exam-n-example.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/exam-n/exam-n-example.tex	2016-12-20 01:05:25 UTC (rev 42754)
+++ trunk/Master/texmf-dist/doc/latex/exam-n/exam-n-example.tex	2016-12-20 22:54:48 UTC (rev 42755)
@@ -6,10 +6,10 @@
 %%
 %% exam-n.dtx  (with options: `example')
 %% 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,7 +27,7 @@
 %% 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
 %%
  
  

Modified: trunk/Master/texmf-dist/doc/latex/exam-n/exam-n.html
===================================================================
--- trunk/Master/texmf-dist/doc/latex/exam-n/exam-n.html	2016-12-20 01:05:25 UTC (rev 42754)
+++ trunk/Master/texmf-dist/doc/latex/exam-n/exam-n.html	2016-12-20 22:54:48 UTC (rev 42755)
@@ -14,11 +14,11 @@
 
 <p>Format exam papers</p>
 
-<p>Version 1.1, 2014 May 03.</p>
+<p>Version 1.1.4, 2016 December 19.</p>
 
 <ul>
-<li>Download: <a href='exam-n-1.1.tar.gz'>tarball</a>
-or <a href='exam-n-1.1.zip'>zip file</a></li>
+<li>Download: <a href='exam-n-1.1.4.tar.gz'>tarball</a>
+or <a href='exam-n-1.1.4.zip'>zip file</a></li>
 <li>You may want to look at a <a href='sample_exam.pdf'>sample
 exam</a>.  See the <code>sample/</code> directory in the distribution
 for the source of this.  That demonstrates the final version of the
@@ -30,7 +30,10 @@
 <a href='notes-for-authors.pdf'>notes for authors</a>.</li>
 <li>See the <a href='exam-n.pdf' >documentation</a> for fuller
 discussion.</li>
-<li>Repository available on <a href='https://bitbucket.org/nxg/exam-n'>bitbucket</a>.</li>
+<li>The package's 'home page' is
+<a href='http://purl.org/nxg/dist/exam-n'><code>http://purl.org/nxg/dist/exam-n</code></a>,
+and the repository is available at
+<a href='https://bitbucket.org/nxg/exam-n'>bitbucket</a>.</li>
 </ul>
 
 <h2>Overview</h2>
@@ -68,9 +71,9 @@
 as sectioning, per-part running marks, ‘Question <em>n</em> continued’
 catchwords, and so on.</li>
 <li>Designed to be locally adaptable.</li>
-<li>The class file is freely adaptable (LPPL), but the author is
-available for <a href='http://8ameter.com'>paid support</a> if that is
-useful.</li>
+<li>The class file is freely adaptable (LPPL).  The author can provide
+the usual basic free-software support, or potentially more elaborate
+support with a different arrangement.</li>
 </ul>
 
 <p>The focus of the ‘exam-n’ class is on the careful collaborative
@@ -78,11 +81,6 @@
 checks to avoid mistakes.  The result has, in effect, been validated
 by practice.</p>
 
-<h2>To install</h2>
-<p>Unpack the distribution tarball or zip
-file, and move the directory <code>move-to-texmf</code> to some
-location on the LaTeX search path.  You're probably looking for a
-directory called <code>texmf-local</code>, or something like that.</p>
 
 <h2>Releases</h2>
 
@@ -104,7 +102,44 @@
 <dl>
 
 <!-- @RELEASENOTES@ -->
-<dt><span class='attention'>1.1, 2014 May 3</span></dt>
+<dt><span class='attention'>1.1.4, 2016 December 19</span></dt>
+<dd><ul>
+<li>Documentation: add notes about use of pdfpages.</li>
+<li>Added <code>[largefont]</code> option.
+<strong>Note</strong>:
+option <code>[hugefont]</code> has replaced <code>[bigfont]</code>;
+the latter is now deprecated, and may be removed in v1.2.</li>
+<li>Use of the <code>\part</code> macro is now supported within
+solutions (it produced the wrong numbers before), and there is a new
+<code>\StylePartNumber</code> customisation macro.</li>
+</ul></dd>
+
+<dt>1.1.3</dt>
+<dd><ul>
+<li>Version 1.1.3 was never released</li>
+</ul></dd>
+
+<dt>1.1.2, 2015 November 26</dt>
+<dd><ul>
+<li>Handled trailing floats at end of document (generated by packages
+such as <code>rotating</code>.</li>
+<li><code>\label</code> within question environment now refers to the
+question number.</li>
+<li>Work around a problem when a paragraph starts with <code>{\bf ...}</code>
+rather than (post-1995) <code>\textbf{...}</code>.</li>
+<li><code>\begin{questiondata}</code> now starts a new paragraph.</li>
+<li>Some documentation adjustments.</li>
+</ul></dd>
+
+<dt>1.1.1, 2014 November 27</dt>
+<dd><ul>
+<li>Adjust <code>\partmarks*</code> behaviour; now behaves differently
+within display maths (addresses
+<a href='https://bitbucket.org/nxg/exam-n/issue/1/'>issue 1</a>).</li>
+<li>Various documentation and release fixes.</li>
+</ul></dd>
+
+<dt>1.1, 2014 May 3</dt>
 <dd>Converted to a generic class, <code>exam-n</code>, ready for wider
 distribution.
 Available on <a href='https://bitbucket.org/nxg/exam-n/'>bitbucket</a>
@@ -119,7 +154,7 @@
 
 <div class="signature">
 <a href='http://nxg.me.uk'>Norman Gray</a><br/>
-2014 May 03
+2016 December 19
 </div>
 
 </body>

Modified: trunk/Master/texmf-dist/doc/latex/exam-n/exam-n.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/exam-n/notes-for-authors.pdf
===================================================================
(Binary files differ)

Added: trunk/Master/texmf-dist/doc/latex/exam-n/notes-for-authors.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/exam-n/notes-for-authors.tex	                        (rev 0)
+++ trunk/Master/texmf-dist/doc/latex/exam-n/notes-for-authors.tex	2016-12-20 22:54:48 UTC (rev 42755)
@@ -0,0 +1,304 @@
+\documentclass[10pt]{scrartcl}
+%\documentclass[11pt]{scrartcl}
+
+\usepackage{url,pdfpages,moreverb,color}
+\definecolor{cscolour}{rgb}{0.5,0.1,0.1}
+
+\title{Notes for exam question authors}
+\author{Norman Gray}
+\date{exam-n 1.1.4, 2016 December 19}
+
+\parindent=0pt
+\parskip=\medskipamount
+
+\makeatletter
+\def\csarg#1{\texttt\{\textit{#1}\texttt\}%
+  \advance\@tempcnta-1
+  \ifnum\@tempcnta>0
+    \let\next\csarg
+  \else
+    \let\next\endgroup          % begun in \cs
+  \fi
+  \next}
+\newcommand\cs[2][0]{\begingroup
+  \color{cscolour}%
+  $\backslash$\texttt{#2}%
+  \@tempcnta=#1
+  \ifnum\@tempcnta>0
+    \let\next\csarg
+  \else
+    \let\next\endgroup
+  \fi
+  \next}
+
+\def\env#1{\texttt{\textcolor{cscolour}{#1}}}
+\def\opt#1{\texttt{[#1]}}
+
+\setcounter{secnumdepth}0
+
+\begin{document}
+\maketitle
+
+The full documentation for the \texttt{exam-n} document class is in
+the file \texttt{exam-n.pdf}, but some of this is quite detailed, and
+addressed to the exams convener, who has to assemble the overall
+exam.  This document is a compact account of how to use the exams
+class as a question author.
+
+You can find updated versions of the \texttt{exam-n} document class, and the
+complete documentation, at \url{http://purl.org/nxg/dist/exam-n}.
+
+\subsection{Template}
+\label{s:template}
+\listinginput1{template-question.tex}
+
+Notice first that this is a standalone document -- you can \LaTeX\ it
+to produce a formatted exam paper, as long as you include the
+\opt{compose} option in the document class line.  This complete
+document can later be given to the exams convener, who can
+input it unchanged into the master file which pulls the various questions
+together.  It follows from that that you should be hesitant about putting anything into
+the preamble other than \cs{usepackage} commands, and you should
+consult with the exams convener to ensure that such packages go into
+the master file, too.  It's probably a safe bet that the `graphicx'
+package will be included in the master file.  If you want to include 
+a \cs{newcommand}, or anything like that,
+it can be placed inside the \env{question} environment.  For
+other customisations, negotiate with the exams convener.
+
+The \env{question} environment contains (surprise) a question, broken into
+parts (a, b, c, \dots) by \cs{part} commands, and with the distribution of marks within
+the question being indicated by \cs[1]{partmarks}n; the class will check that the
+marks in \cs{partmarks} do add up to the question goal given as an
+argument in \cs[1]{begin\{question\}}{markgoal}.  Within the
+question there can be one or more \env{solution} environments, which are
+not displayed in the final version (obviously), but which do appear in
+draft modes.  You'll most typically have a \cs{partmarks} macro and a
+\env{solution} environment for each \cs{part}, but they don't have to
+match up, and you can have the entire solution at the end if you prefer.
+The \cs[1]{partmarks*}n command is almost the same, but places the
+mark indicator in a slightly different position which looks better
+when there would otherwise be a gap at the right of the page.  It can
+be placed after a list, or inside but at the end of an equation.
+Note that \cs{partmarks} ends a paragraph (\cs{partmarks*} doesn't): this is
+probably good style, but if you insist on mid-paragraph marks, then a following
+\verb|\noindent| will be useful.  It's helpful to use \cs{partmarks} inside a
+\env{solution} to indicate the distribution of marks -- this doesn't mess up
+the mark-totalling calculation.
+
+One common exam or test question type is a multiple-choice question.
+This is indicated by a \cs{begin\{mcq\}} environment, which contains a
+textual question followed by a sequence of possible answers indicated by
+\cs{item}, including precisely one correct answer, indicated by
+\cs{answer} (this is of course formatted identically to the others,
+unless the \opt{showsolutions} option is present).  Before you can use
+the \env{mcq} environment, you must call
+\cs[1]{multiplechoiceanswers}{n} to indicate how many options are
+required in each question.
+It's OK to have a \env{solution} within an \env{mcq} environment,
+perhaps to provide commentary on or explanation of the correct answer.
+
+You can include a \env{questiondata} environment at (typically) the end of
+the question: this is intended for extra equations or constants which
+are useful for the examinee.
+
+The \env{figure} and \env{table} environments act differently from the
+way they usually act in \LaTeX: \emph{`floats' don't float}.  In each
+case, the content is forced to be always `here', and in addition is
+also tied to the text which follows it, so that a page break will not
+occur immediately after a figure or table.  There are \emph{no} figure
+or float options permitted in this class's `floating' environments
+(that is, option \texttt{[h]} is neither necessary nor permissible).
+If you need to tune the page breaking, then you should use
+\verb|\goodbreak|, \verb|\vspace| or, in extremis, \verb|\newpage|.
+The \cs[1]{caption}{text} command works as usual; the figure and table
+numbering sequences continue through the solutions, if they're shown,
+but this isn't expected to be a problem.
+
+If you use \cs{label} within a \env{question} environment, that label
+will, as you might expect, refer to the question number.
+
+Hints:
+Figures can be included with \cs{includegraphics} as usual, as long as
+the `graphicx' package has been included at the top of the master
+file.  If you want to include complete pages from a PDF (most
+typically containing a scanned handwritten model answer), then you can
+do so by including the `pdfpages' package at the top of the file, and
+then \cs[1]{includepdf[pages=\{-\}]}{filename} inside a \env{solution}
+environment.
+The \texttt{pages=\{-\}} option means that all pages from the file are
+inserted; you may wish to use \texttt{scale=0.8} to shrink the PDF;
+the option \verb|pagecommand={\thispagestyle{fancy}}| will cause the other
+class apparatus, such as page numbers and headers, to be
+superimposed on the included pages.
+See the documentation of the `pdfpages' package for more information.
+
+Include marginal notes with \cs[1]{comment}{remark} -- these show up in drafting
+modes (\opt{draft} and \opt{compose}), but not in the final version.
+The \cs[1]{author}{name} command is just
+a type of comment.  If you need to make more noise, then
+\cs[1]{shout}{remark} inserts a highlighted \emph{remark} in the flow of text
+(so it can be used anywhere) and includes the remark in a prominent
+list of exclamations at the end of the document.
+
+At the bottom of each page, you see a faint identification code, such
+as `QM/123-456'.  This consists of an exam identifier, extracted from
+the exam preamble, plus a code which changes each time \LaTeX\ is
+run. This helps you avoid collation accidents, and to distinguish
+between slightly different versions of the printed document.
+
+\subsection{Various convenience commands}
+\label{s:othercommands}
+
+\makeatletter
+% Definitions edited in at build time...
+% Abbreviations for degrees.
+%    \begin{macrocode}
+\newcommand\BSc{B.Sc.{}}
+\newcommand\MSci{M.Sci.{}}
+\newcommand\MSc{M.Sc.{}}
+\newcommand\MA{M.A.{}}
+\newcommand\MEng{M.Eng.{}}
+\newcommand\BEng{B.Eng.{}}
+%    \end{macrocode}
+%
+% Tweaks to differentials.
+%    \begin{macrocode}
+\newcommand{\dd}{\mathrm{d}}
+\newcommand{\ddd}{\,\mathrm{d}}  % inside an integral, including thinspace
+
+\def\Diffl{\@ifstar\@Difflflat\@Diffl}
+\def\Partial{\@ifstar\@Partialflat\@Partial}
+\def\@Partial{\@ifnextchar[{\@@Diffl\partial}{\@@Diffl\partial[]}}
+\def\@Partialflat{\@ifnextchar[{\@@Difflflat\partial}{\@@Difflflat\partial[]}}
+\def\@Diffl{\@ifnextchar[{\@@Diffl\dd}{\@@Diffl\dd[]}}
+\def\@Difflflat{\@ifnextchar[{\@@Difflflat\dd}{\@@Difflflat\dd[]}}
+\def\@@Diffl#1[#2]#3#4{%
+  \def\@tempa{#2}%
+  \ifx\@tempa\empty
+    \frac{#1#3}{#1#4}%
+  \else
+    \frac{{#1}^{#2}#3}{#1{#4}^{#2}}%
+  \fi}
+\def\@@Difflflat#1[#2]#3#4{%
+  \def\@tempa{#2}%
+  \ifx\@tempa\empty
+    #1#3\mskip-0.8mu/\mskip-1.2mu #1#4%
+  \else
+    {#1}^{#2}#3\mskip-0.8mu /\mskip-1.2mu #1{#4}^{#2}%
+  \fi}
+%    \end{macrocode}
+%
+% The exponential sign
+%    \begin{macrocode}
+\def\e{{\mathrm e}}
+%    \end{macrocode}
+%
+% Physical units in |\rm|.  Unstarred version includes leading
+% |\thinspace|.  Starred version doesn't, and is used when referring to
+% the unit by itself (eg axis is |$B/\units*T$|), and is not qualifying
+% a number.
+% FIXME: |\mu| in |\units| can come out wrong in some fonts (mtpro2?)
+% -- needs investigation.
+%    \begin{macrocode}
+\def\units{\begingroup
+  \catcode`\.=\active
+  \@ifstar{\let\un at tsspace\relax    \un at ts}%
+          {\let\un at tsspace\thinspace\un at ts}}
+\begingroup
+  \catcode`\.=\active
+  \gdef\un at ts#1{\let~\thinspace\let.\thinspace
+    \ifmmode
+      \un at tsspace\mathrm{#1}%
+    \else
+      \nobreak$\un at tsspace\mathrm{#1}$%
+    \fi
+    \endgroup}
+\endgroup
+%    \end{macrocode}
+%
+% Other miscellaneous symbols:
+% The AU is nothing exciting, but may be adjusted in future
+%    \begin{macrocode}
+\def\au{au}
+%    \end{macrocode}
+% The symbol for Compton wavelength is a crossed lambda -- the following isn't perfect, but is OK for now.
+%    \begin{macrocode}
+\def\lambdabar{\setbox\@tempboxa\hbox{$\lambda$}%
+  \hbox to 0pt{\hbox to \wd\@tempboxa{\hss$\bar{}$\hss}\hss}\box\@tempboxa}
+%    \end{macrocode}
+\makeatother
+
+Macro \cs[1]{vec}{v} is redefined to give bold-font vectors, rather than
+vectors with arrows, which is the (weird) \LaTeX\ default.  This
+should work for bold greek as well as roman.
+
+Macros \cs{dd} and \cs{ddd}: \cs{dd} is a roman d, as used for
+differentials; \cs{ddd} is the same with a preceding thinspace,
+as used within integrals; for example
+\[
+ \verb|\int f(x)\ddd x = \int f(x)\,\dd x| = \int f(x)\ddd x
+\]
+
+You can typeset derivatives neatly:
+\begin{center}
+\def\dd{\mathrm{d}}
+\begin{tabular}{rl}
+\verb|\Diffl{a}{b}|     & $\displaystyle \Diffl ab$ \\[3ex]
+\verb|\Diffl[2]{a}{b}|  & $\displaystyle \Diffl[2]ab$\\[3ex]
+\verb|\Diffl*{a}{b}|    & $\Diffl* ab$ \\[2ex]
+\verb|\Diffl*[2]{a}{b}| & $\Diffl*[2]ab$\\
+\end{tabular}
+\end{center}
+The unstarred versions are for displayed equations, the starred
+ones for inline maths.
+There is analogous support for partial derivatives with \cs[2]{Partial}ab.
+
+Macros \cs[1]{units}{expr}, \cs[1]{units*}{expr}: These typeset
+physical units in an upright shape, with tilde or dot acting as a
+separator between units.  Since this is typeset in maths mode, all
+other spacing is ignored.  For example, \verb|$v=10\units{m.\mu s^{-1}}$|
+gives $v=10\units{m.\mu s^{-1}}$.  The unstarred version includes some
+leading space; the starred version can be used when referring to the
+unit by itself, where it is not qualifying a number (eg labelling an
+axis with units \verb|$B/\units*T$|, or $B/\units*T$).  These macros
+might be replaced, in the future, by a recommendation to use the
+\texttt{siunitx} package.
+
+For some other useful symbols, see the table below:
+
+\def\arraystretch{1.5}
+\begin{tabular}{rcp{8cm}}
+\cs{e}&$\e^{i\pi}+1=0$& the exponential is typeset in an upright rather than
+an italic shape, as in \verb|$\e^{i\pi} + 1 = 0$|.\\
+\cs{au}&10\units\au& astronomical units:
+\verb|10\units{\au}|.\\
+\cs{lambdabar}&$\lambdabar$& the Compton wavelength, as a lambda with a
+bar through it.\\
+\end{tabular}
+
+
+\subsection{Extra: Creating complete exams}
+\label{s:complete}
+As a question author, you are typically only concerned with one or two
+single questions, and that is why this brief guide concentrates
+exclusively on the \opt{compose} mode.  But you might be interested to see
+how your text appears in the final exam.  A template master file is
+below.  For more detail, see the complete documentation in \texttt{exam-n.pdf}.
+\goodbreak
+\listinginput1{template-master.tex}
+
+The \texttt{exam-n} class currently supports a sample class option \opt{A1}.
+This automatically includes a suitable constants sheet in the
+formatted paper.
+
+On the following pages, you can see the result of \LaTeX ing the sample file on
+p.\pageref{s:template}, and of processing the master file above.
+As you can see, the \opt{compose} mode by default shows solutions,
+and collects the \cs[1]{shout}{text} remarks to the end.
+In the \opt{final} mode (which is the default mode), solutions
+disappear, but the shouted-out alerts remain, just to make sure no-one
+can miss them.
+\includepdf{template-question.pdf}
+\includepdf[pages={2,1},angle=90,nup=1x2,column]{template-master.pdf}
+\end{document}

Modified: trunk/Master/texmf-dist/doc/latex/exam-n/release-notes.html
===================================================================
--- trunk/Master/texmf-dist/doc/latex/exam-n/release-notes.html	2016-12-20 01:05:25 UTC (rev 42754)
+++ trunk/Master/texmf-dist/doc/latex/exam-n/release-notes.html	2016-12-20 22:54:48 UTC (rev 42755)
@@ -14,7 +14,44 @@
 
 <dl>
 <!-- @CURRENT@ -->
-<dt><span class='attention'>1.1, 2014 May 3</span></dt>
+<dt><span class='attention'>1.1.4, 2016 December 19</span></dt>
+<dd><ul>
+<li>Documentation: add notes about use of pdfpages.</li>
+<li>Added <code>[largefont]</code> option.
+<strong>Note</strong>:
+option <code>[hugefont]</code> has replaced <code>[bigfont]</code>;
+the latter is now deprecated, and may be removed in v1.2.</li>
+<li>Use of the <code>\part</code> macro is now supported within
+solutions (it produced the wrong numbers before), and there is a new
+<code>\StylePartNumber</code> customisation macro.</li>
+</ul></dd>
+
+<dt>1.1.3</dt>
+<dd><ul>
+<li>Version 1.1.3 was never released</li>
+</ul></dd>
+
+<dt>1.1.2, 2015 November 26</dt>
+<dd><ul>
+<li>Handled trailing floats at end of document (generated by packages
+such as <code>rotating</code>.</li>
+<li><code>\label</code> within question environment now refers to the
+question number.</li>
+<li>Work around a problem when a paragraph starts with <code>{\bf ...}</code>
+rather than (post-1995) <code>\textbf{...}</code>.</li>
+<li><code>\begin{questiondata}</code> now starts a new paragraph.</li>
+<li>Some documentation adjustments.</li>
+</ul></dd>
+
+<dt>1.1.1, 2014 November 27</dt>
+<dd><ul>
+<li>Adjust <code>\partmarks*</code> behaviour; now behaves differently
+within display maths (addresses
+<a href='https://bitbucket.org/nxg/exam-n/issue/1/'>issue 1</a>).</li>
+<li>Various documentation and release fixes.</li>
+</ul></dd>
+
+<dt>1.1, 2014 May 3</dt>
 <dd>Converted to a generic class, <code>exam-n</code>, ready for wider
 distribution.
 Available on <a href='https://bitbucket.org/nxg/exam-n/'>bitbucket</a>

Modified: trunk/Master/texmf-dist/doc/latex/exam-n/sample/Makefile
===================================================================
--- trunk/Master/texmf-dist/doc/latex/exam-n/sample/Makefile	2016-12-20 01:05:25 UTC (rev 42754)
+++ trunk/Master/texmf-dist/doc/latex/exam-n/sample/Makefile	2016-12-20 22:54:48 UTC (rev 42755)
@@ -1,3 +1,7 @@
+%.pdf: %.tex ../exam-n.cls
+	TEXINPUTS=..: pdflatex $<
+	if grep 'Rerun to get cross' ${<:.tex=.log}; then TEXINPUTS=..: pdflatex $<; else :; fi
+
 all: sample_exam.pdf
 
 sample_exam.pdf: numerical1-solution.pdf
@@ -8,9 +12,12 @@
 	rm -f $@
 	sed '1s/documentclass/documentclass[showsolutions]/' sample_exam.tex >sample_exam_solution.tex
 
-%.pdf: %.tex
-	TEXINPUTS=..: pdflatex $<
-	if grep 'Rerun to get cross' ${<:.tex=.log}; then TEXINPUTS=..: pdflatex $<; else :; fi
+# This will depend somehow on the .dtx file in the parent directory,
+# but expressing that here second-guesses how that file is actually
+# generated, so skip this ('don't repeat yourself'; also, this is only
+# occasionally used while testing)
+../exam-n.cls:
+	cd ..; $(MAKE) exam-n.cls
 
 clean:
-	rm -f sample_exam*.pdf sample_exam_solution.tex *.log *.aux
+	rm -f *.pdf *.log *.aux sample_exam_solution.tex

Modified: trunk/Master/texmf-dist/doc/latex/exam-n/sample/cosmo1.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/exam-n/sample/cosmo1.tex	2016-12-20 01:05:25 UTC (rev 42754)
+++ trunk/Master/texmf-dist/doc/latex/exam-n/sample/cosmo1.tex	2016-12-20 22:54:48 UTC (rev 42755)
@@ -1,10 +1,11 @@
 \documentclass[compose]{exam-n}
 
 \usepackage{graphics}
+\graphicspath{{fig/}}
 
 \begin{document}
 
-\begin{question}{20}  \author{Andrew Davies}
+\begin{question}{20}  \author{Reginald Q Whimsy}
 % Have a blank line here, to check that the question number remains
 % nicely lined up, even if there are lines between the environment
 % opening and the text.
@@ -22,15 +23,15 @@
 
 \part Show that, under the action of gravity alone, the scale size
 of the Universe varies according to
-\begin{equation*}
+\begin{equation}
 \ddot{R}=-\frac{4\pi G \rho_0}{3R^2}
-\end{equation*}
+\end{equation}
 \partmarks*{4}
 and that, consequently,
 \begin{equation*}
 \dot{R}^2=-\frac{8\pi G \rho_0}{3R}=-K.
+\partmarks*{3}
 \end{equation*}
-\partmarks*{3}
 
 Express $K$ in terms of the present values of the Hubble constant
 $H_0$ and of the density parameter $\Omega_0$.
@@ -68,6 +69,10 @@
 \end{tabular}
 \caption{\label{t:dullness}A remarkably dull table}
 \end{table}
+Finis.
+\begin{questiondata}
+Hubble's law: $v=H_0 D$
+\end{questiondata}
 \partmarks{4}
 \begin{solution}
 Explanations are superfluous; all that is, is.
@@ -84,8 +89,5 @@
 you work out how many deuterium nuclei decayed during the typing of
 this table?).
 \end{solution}
-\begin{questiondata}
-Hubble's law: $v=H_0 D$
-\end{questiondata}
 \end{question}
 \end{document}

Modified: trunk/Master/texmf-dist/doc/latex/exam-n/sample/excos1.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/exam-n/sample/excos1.tex	2016-12-20 01:05:25 UTC (rev 42754)
+++ trunk/Master/texmf-dist/doc/latex/exam-n/sample/excos1.tex	2016-12-20 22:54:48 UTC (rev 42755)
@@ -9,7 +9,7 @@
 \answer Tunguska
 \item Arizona
 \item Off the Mexican coast
-\item Egypt
+\item Swindon
 \begin{solution}
 The evidence for this is a dirty big hole in the ground in Siberia.
 \end{solution}
@@ -20,7 +20,7 @@
 \item 2.6 Billion Years
 \item 260 Million Years
 \item 26 Million Years % not marked as correct
-\item 26 Thousand Years
+\item 4 Thousand Years after the dominant lifeform invents fire
 \end{mcq}
 
 \begin{mcq}

Added: trunk/Master/texmf-dist/doc/latex/exam-n/sample/fig/spiral.eps
===================================================================
--- trunk/Master/texmf-dist/doc/latex/exam-n/sample/fig/spiral.eps	                        (rev 0)
+++ trunk/Master/texmf-dist/doc/latex/exam-n/sample/fig/spiral.eps	2016-12-20 22:54:48 UTC (rev 42755)
@@ -0,0 +1,22 @@
+%!PS-Adobe-3.0 EPSF-3.0
+% Shrinking squares, cgl Feb 97
+% Adapted from http://www.ntg.nl/maps/pdf/19_12.pdf
+% this version...
+%%Creator: norman at astro.gla.ac.uk
+%%BoundingBox: 0 0 200 125
+/b 0.6180339887 def  % (\sqrt5-1)/2
+/x 200 def
+/y x b mul def
+/square {
+  0 y lineto y y lineto y 0 lineto
+  y 0 y 180 90 arcn y y translate
+} def 
+0.35 setlinewidth
+16 {
+  0 0 moveto square -90 rotate
+  /x y def /y x b mul def
+} repeat
+stroke
+
+%showpage 
+

Added: trunk/Master/texmf-dist/doc/latex/exam-n/sample/fig/spiral.pdf
===================================================================
(Binary files differ)

Index: trunk/Master/texmf-dist/doc/latex/exam-n/sample/fig/spiral.pdf
===================================================================
--- trunk/Master/texmf-dist/doc/latex/exam-n/sample/fig/spiral.pdf	2016-12-20 01:05:25 UTC (rev 42754)
+++ trunk/Master/texmf-dist/doc/latex/exam-n/sample/fig/spiral.pdf	2016-12-20 22:54:48 UTC (rev 42755)

Property changes on: trunk/Master/texmf-dist/doc/latex/exam-n/sample/fig/spiral.pdf
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Deleted: trunk/Master/texmf-dist/doc/latex/exam-n/sample/numerical1-solution.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/exam-n/sample/numerical1-solution.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/exam-n/sample/numerical1-solution.tex	2016-12-20 01:05:25 UTC (rev 42754)
+++ trunk/Master/texmf-dist/doc/latex/exam-n/sample/numerical1-solution.tex	2016-12-20 22:54:48 UTC (rev 42755)
@@ -6,6 +6,9 @@
 opposed to superimposed on each other), and disappear when the
 noshowsolutions option is present.
 
+(In the real situation, the corresponding PDF would be a scan of a hand-written
+solution.)
+
 \fontsize{72}{72}\selectfont
 \centering
 Numerical 1 solution, page one

Modified: trunk/Master/texmf-dist/doc/latex/exam-n/sample/numerical2.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/exam-n/sample/numerical2.tex	2016-12-20 01:05:25 UTC (rev 42754)
+++ trunk/Master/texmf-dist/doc/latex/exam-n/sample/numerical2.tex	2016-12-20 22:54:48 UTC (rev 42755)
@@ -9,6 +9,9 @@
 probable joint values of $(A,B)$  and the most probable value of
 $A$ given (a different) $B$. \partmarks{5}
 
+\label{q:numerical2}
+Note that this is question \ref{q:numerical2} on p.\pageref{q:numerical2}.
+
 Explain what is meant by \emph{marginalisation} in Bayesian
 inference and how it can be interpreted in terms the above plot.
 \partmarks{5}

Modified: trunk/Master/texmf-dist/doc/latex/exam-n/sample/numerical3.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/exam-n/sample/numerical3.tex	2016-12-20 01:05:25 UTC (rev 42754)
+++ trunk/Master/texmf-dist/doc/latex/exam-n/sample/numerical3.tex	2016-12-20 22:54:48 UTC (rev 42755)
@@ -6,6 +6,10 @@
 probability, and explain carefully how parameter estimation is
 performed in each regime.\partmarks{10}
 
+\label{q:numerical3}
+Note that this is question \ref{q:numerical3} on
+p.\pageref{q:numerical3}.  It's the one after question~\ref{q:numerical2}.
+
 A square ccd with $M\times M$ pixels takes a dark frame for
 calibration purposes, registering a small number of electrons in
 each pixel from thermal noise. The probability of there being $n_i$

Deleted: trunk/Master/texmf-dist/doc/latex/exam-n/sample/sample_exam.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/exam-n/sample/sample_exam.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/exam-n/sample/sample_exam.tex	2016-12-20 01:05:25 UTC (rev 42754)
+++ trunk/Master/texmf-dist/doc/latex/exam-n/sample/sample_exam.tex	2016-12-20 22:54:48 UTC (rev 42755)
@@ -1,5 +1,6 @@
 \documentclass{exam-n}
-%\documentclass[bigfont,sansserif]{exam-n}
+%\documentclass[largefont]{exam-n}
+%\documentclass[hugefont,sansserif]{exam-n}
 %\documentclass[mtpro2,showsolutions]{exam-n}
 %\documentclass[mtpro2,showsolutions,sansserif]{exam-n}
 %\documentclass[draft,showsolutions,sansserif]{exam-n}

Deleted: trunk/Master/texmf-dist/doc/latex/exam-n/sample/sample_exam_solution.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/exam-n/sample/sample_exam_solution.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/exam-n/sample/sample_exam_solution.tex	2016-12-20 01:05:25 UTC (rev 42754)
+++ trunk/Master/texmf-dist/doc/latex/exam-n/sample/sample_exam_solution.tex	2016-12-20 22:54:48 UTC (rev 42755)
@@ -1,5 +1,6 @@
 \documentclass[showsolutions]{exam-n}
-%\documentclass[bigfont,sansserif]{exam-n}
+%\documentclass[largefont]{exam-n}
+%\documentclass[hugefont,sansserif]{exam-n}
 %\documentclass[mtpro2,showsolutions]{exam-n}
 %\documentclass[mtpro2,showsolutions,sansserif]{exam-n}
 %\documentclass[draft,showsolutions,sansserif]{exam-n}

Deleted: trunk/Master/texmf-dist/doc/latex/exam-n/sample/spiral.eps
===================================================================
(Binary files differ)

Deleted: trunk/Master/texmf-dist/doc/latex/exam-n/sample/spiral.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/exam-n/sample_exam.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/exam-n/sample_exam_solution.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/source/latex/exam-n/exam-n.drv
===================================================================
--- trunk/Master/texmf-dist/source/latex/exam-n/exam-n.drv	2016-12-20 01:05:25 UTC (rev 42754)
+++ trunk/Master/texmf-dist/source/latex/exam-n/exam-n.drv	2016-12-20 22:54:48 UTC (rev 42755)
@@ -6,10 +6,10 @@
 %%
 %% exam-n.dtx  (with options: `driver')
 %% 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,13 +27,13 @@
 %% 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
 %%
 
 \documentclass{ltxdoc}
 \title{exam-n: exam papers}
 \author{Norman Gray\\(\texttt{norman at astro.gla.ac.uk})}
-\date{Release 1.1}
+\date{Release 1.1.4}
 \usepackage{url}
 \newcommand\Lopt[1]{\textsf {#1}} % options
 \newcommand\file[1]{\texttt {#1}}

Modified: trunk/Master/texmf-dist/source/latex/exam-n/exam-n.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/exam-n/exam-n.dtx	2016-12-20 01:05:25 UTC (rev 42754)
+++ trunk/Master/texmf-dist/source/latex/exam-n/exam-n.dtx	2016-12-20 22:54:48 UTC (rev 42755)
@@ -3,10 +3,10 @@
 %
 % Generated file : DO NOT EDIT
 %
-%% 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
@@ -17,7 +17,7 @@
 %% version 2005/12/01 or later.
 %%
 %% This work has the LPPL maintenance status `maintained'.
-%% 
+%%
 %% The Current Maintainer of this work is Norman Gray <http://nxg.me.uk>
 %%
 %% This work consists of the files exam-n.dtx and exam-n.ins,
@@ -24,20 +24,20 @@
 %% the derived file exam-n.cls,
 %% and the associated *.clo files.
 
-%<+package|driver|example>%%%% Source: Mercurial revision 6f818b549982, 2014-05-03 13:42 +0100, tag 1.1 + 0
+%<+package|driver|example>%%%% Source: Mercurial revision e8a612cb25f4, 2016-12-19 16:49 +0000, tag exam-n-1.1.4 + 0
 %%
 %<*package|driver>
 
 %</package|driver>
 %<+package>\NeedsTeXFormat{LaTeX2e}
-%<+package>\ProvidesClass{exam-n}[2014/05/03 1.1]
-%<+package>\typeout{Class: `exam-n 1.1 <2014/05/03>}
+%<+package>\ProvidesClass{exam-n}[2016/12/19 1.1.4]
+%<+package>\typeout{Class: `exam-n 1.1.4 <2016/12/19>}
 %
 %<*driver>
 \documentclass{ltxdoc}
 \title{exam-n: exam papers}
 \author{Norman Gray\\(\texttt{norman at astro.gla.ac.uk})}
-\date{Release 1.1}
+\date{Release 1.1.4}
 \usepackage{url}
 \newcommand\Lopt[1]{\textsf {#1}} % options
 \newcommand\file[1]{\texttt {#1}}
@@ -203,7 +203,7 @@
 %    should use \Lopt{draft}; and you should use \Lopt{final} only for
 %    the final version.
 %    The \Lopt{draft} option switches on the \Lopt{showsolutions}
-%    option (below), displays |\comment| remarks, 
+%    option (below), displays |\comment| remarks,
 %    and makes some mild layout changes.
 %    The \Lopt{compose} option implies the \Lopt{showsolutions} option,
 %    causes questions to be formatted one per page, and turns off
@@ -273,8 +273,8 @@
 %    superstition -- there seems remarkably little actual evidence
 %    either way).
 %
-%    \item[\Lopt{bigfont}]
-%    Produce a version of the paper in a `huge' font (36pt size) for
+%    \item[\Lopt{largefont}, or \Lopt{hugefont}]
+%    Produce a version of the paper in a `big' font (18pt) or `huge' font (36pt) for
 %    the benefit of students with visual impairments.  See notes below.
 %
 % \end{description}
@@ -284,7 +284,7 @@
 % modifications.  Most typically, these changes will affect the
 % rubric, and the sheet of physical constants.
 % The only generic style option is \Lopt{A1}
-% (which is included as an example of how such a file is written). 
+% (which is included as an example of how such a file is written).
 % See section~\ref{s:custom} below.
 %
 % In some circumstances -- for example when processing exam scripts
@@ -292,7 +292,7 @@
 % control package options from outside the package.  If there is a
 % file called \texttt{exam-n.config} in the input path (most likely in
 % the same directory as the exam paper), then this is read in when any
-% exam script is processed, and will supplement, any
+% exam script is processed, and will supplement any
 % options in the |\documentclass| line.  For example, if this file were present
 % and contained the line |\ExecuteOptions{showsolutions}|, then the
 % typeset exam would include the solutions.  Note that this will
@@ -303,17 +303,20 @@
 % make immediate use of amsmath features if you wish (see
 % \texttt{\small http://www.ams.org/tex/amslatex.html} for discussion).
 %
-% The change of font size with the \Lopt{bigfont} option requires a
-% couple of minor layout changes.  You may need to make some other
-% changes by hand, in this case.  You can do that by bracketing the
-% adjusted text in \cmd|\ifbigfont<big font
-% material>\else<normal font material>\fi|.  The \Lpackage{amsmath}
+% The change of font size with the \Lopt{hugefont} option requires a
+% couple of minor layout changes.  You may need to force some similar
+% changes in the exam paper, in this case.  You can do that by bracketing the
+% adjusted text in \cmd|\ifbigfont<big font material>\else<normal font
+% material>\fi|; the |\ifbigfont| flag is true in the case of
+% \Lopt{hugefont}, but not \Lopt{largefont}.  If you want the
+% |\ifbigfont| flag to apply to \Lopt{largefont}, too, then you may
+% set |\bigfonttrue| in a suitable place.  The \Lpackage{amsmath}
 % \texttt{multline} environment can be useful here.  The exams
 % convener should review the result carefully: a few judicious
 % \cmd|\ifbigfont\newpage\fi| insertions can make the result look less
-% awful.  The \Lopt{bigfont} option applies to the content of
-% solutions if the \Lopt{showsolutions} option is present; this may or
-% may not be the optimal choice.
+% awful.  The \Lopt{largefont} and \Lopt{hugefont} options apply to
+% the content of solutions if the \Lopt{showsolutions} option is
+% present; this may or may not be the optimal choice.
 %
 % At the bottom of each page, you see a faint identification code, such
 % as `QM/123-456'.  This consists of an exam identifier, extracted from
@@ -328,7 +331,7 @@
 % \label{s:question}
 %
 % Within the document, you include questions within a \Lenv{question}
-% environment, within which you may further have 
+% environment, within which you may further have
 % \Lenv{questiondata} and \Lenv{solution} environments.
 %
 % \DescribeEnv{question}
@@ -353,38 +356,48 @@
 % \Lopt{perquestionmarks} option is present or not.  If it is present
 % (the default) then the \Lenv{question} environment takes a non-empty
 % argument showing the total marks available for a question.
-% In addition, the class checks that the |\partmarks| within the
-% question add up to this declared goal mark.
+% In addition, the class checks that the |\partmarks| commands within the
+% question (see below) add up to this declared goal mark.
+% If the \Lopt{showmarktotals} option is present, then this (expected and
+% checked) total is displayed at the end of the question.
 %
-% If the option is not present, then questions have no individual marks, the
+% If the \Lopt{perquestionmarks} option is \emph{not} present,
+% then questions have no individual marks, the
 % environment takes no marks argument, and no marks are shown (this is usual
 % in essay-question exams, which typically comprise a sequence of
-% short equal-valued questions with an explanatory rubric).  The
-% |\partmarks| command cannot be used within the question.  If the
-% \Lopt{showmarktotals} option is present, then this (expected and
-% checked) total is displayed at the end of the question.
+% short equal-valued questions with an explanatory rubric).
+% Also, in this case the |\partmarks| command cannot be used within the question.
 %
 % The \Lenv{question} environment takes an optional argument, giving
 % the expected question number.  In \Lopt{compose} mode, this is used
 % as the question number (unsurprisingly).  In the two other modes,
-% this is compared with the expected question number, based on the
-% number of preceding \Lenv{question} environments in the file, so
+% this is compared with the question number which would be generated based on the
+% position in the sequence of \Lenv{question} environments in the file, so
 % that the first \Lenv{question} environment is for question one, the
 % second for question two, and so on.  If these do not match, the exam
 % class displays a warning in \Lopt{draft} mode, and produces a fatal
-% error in \Lopt{final} mode.  You should generally give this argument
-% -- it is intended to help catch embarrassing errors.
+% error in \Lopt{final} mode.
+% The intention is that this can act as a check that all expected
+% questions are present; see also the |\numquestions| command.
+% \iffalse XXX How useful is this in fact? Should I just discard this,
+% especially since includequestion has a similar features? \fi
 %
+% \DescribeMacro{\QuestionNumberChecksOff}
 % In some cases, the questions are not numbered in this
 % straightforward fashion, so that you might have questions~`2A'
-% and~`2B'.  In this case, the check is not meaningful, and you can
+% and~`2B'.  In this case, the check is not meaningful, and you must
 % suppress it by calling the macro |\QuestionNumberChecksOff| in the
-% preamble, and the question-number argument is required (though it
-% must still appear within square brackets).  If these checks are off,
-% but a \Lenv{question} appears without a forced question number, then
-% the class warns about this, but still numbers the question as the
-% next one in sequence.
+% preamble.  After that, you must provide a question-number argument
+% (in square brackets) for every question.
 %
+% In some odder circumstances, you might not want to have any question
+% numbers at all; for example, you might want to require examinees to
+% attempt \emph{all} of the questions, and so simply have a mark for
+% the whole exam.  There isn't a mode for this as such, but if you use
+% the \cs{QuestionNumberChecksOff} macro, and give |[\space]| as the
+% optional `question number' at the beginning of the \Lenv{question}
+% environment, then this will have the desired effect.
+%
 % \DescribeEnv{solution}
 % The \Lenv{solution} environment, contained within the \Lenv{question}
 % environment, contains the solution to the question, or other
@@ -494,7 +507,16 @@
 %    controlled by the exam style, as customised in
 %    Sect.~\ref{s:custom}.  This macro starts a new paragraph.
 %
+%    You can use the |\part| macro within solutions: this is useful if
+%    you have the entire \Lenv{solution} environment at the end of the
+%    question, but distracting if you intersperse the \Lenv{solution}
+%    environments between question parts.  The |\part| macro within
+%    solutions increments separately from the increments within the question,
+%    so if you use this in the solutions, you must have as many
+%    |\part|s in the solution as there are parts in the question.
+%
 % \DescribeMacro{\partmarks}
+% \DescribeMacro{\partmarks*}
 %    Macros \cmd|\partmarks{<num>}| and \cmd|\partmarks*{<num>}| announce
 %    the number of marks associated with the current part of a question.
 %    The class checks that the number of marks here does add up to the
@@ -501,15 +523,20 @@
 %    number declared at the beginning of the {question} environment.
 %    You will typically have just one |\partmarks| per |\part|, but
 %    you can have more if you want.
-%    The starred version should be used when a part ends with an unnumbered
-%    equation, as it adjusts the spacing appropriately; it might also
-%    be useful at the end of a part which finishes with an
+%    The starred version differs by adjusting the position of the mark
+%    indicator, and should be used either (i) after (for example) an
 %    itemized list, or some other structure which leaves an expanse of
-%    white space on the right-hand side of the page.
+%    white space on the right-hand side of the page; or (ii) within
+%    an \emph{unnumbered} equation.  If, in case (ii), the style of
+%    the part-marks indicators is such that the indicator may be
+%    mistaken for an equation number, then it would be wise to use
+%    either |\partmarks*| or plain |\partmarks| after the equation,
+%    instead.
+%
 %    The unstarred version should only be used at the end of a
 %    paragraph, and in fact forces a paragraph end; the starred
-%    version should generally be used only at the end of a paragraph,
-%    but it doesn't force one.
+%    version should on stylistic grounds generally be used only at the
+%    end of a paragraph, but it doesn't force one.
 %
 % \DescribeMacro{\comment}
 %    \cmd|\comment{<text>}| associates a comment with a part of the text.
@@ -527,11 +554,11 @@
 % \DescribeMacro{\shout}
 % If there is part of a question which is, for example, incomplete,
 % and which needs a more prominent callout than `comment', then you
-% should |\shout{...}| it.  Shouts appear in all modes (including
+% should |\shout{...}| it.  Shouts appear in all modes (\emph{including}
 % \Lopt{final}) and appear whether or not the class is showing solutions.
 % This makes a prominent remark in the text, and also in a list of
-% shouts at the end of the text.  Your co-authors really have no
-% excuse for missing it after that.
+% shouts at the end of the text.  Your co-authors, or the exam
+% proof-checker, really have no excuse for missing it after that.
 %
 % \DescribeMacro{\leftnudge}
 % For various reasons, most often because of printing problems, it can
@@ -571,8 +598,8 @@
 % \begin{description}
 % \item[University course code]
 %     This is the code for the course (and thus for the paper) as it
-%     appears in university information systems (for example,
-%     MyCampus), and is a university-unique code such as `PHYS3031'.
+%     appears in university information systems, and is a
+%     university-unique code such as `PHYS3031'.
 % \item[School course code]
 %     This is a more informal, but more recognisable, code for the
 %     course/paper, as it is generally recognised within the school;
@@ -584,7 +611,7 @@
 %     This is a textual description of the qualifications that the
 %     students doing this exam are heading for.  This text has little
 %     formal weight, but might help a lost student realise they're in
-%     completely the wrong exam room\dots.  This is something like 
+%     completely the wrong exam room\dots.  This is something like
 %     |{Physics 3\\Chemical Physics 3}| (separate each description
 %     using |\\|).
 % \end{description}
@@ -599,7 +626,7 @@
 % \DescribeMacro{\paperident}
 % It can be convenient to add some identification to each page, if for
 % no other reason than to double-check that you haven't inserted a
-% field theory question into an ExCos exam.  The command |\paperident|
+% field theory question into an `astronomy for poets' exam.  The command |\paperident|
 % allows you to declare some text which appears at the bottom of each
 % page of the exam.  It will typically repeat some of the text in the
 % |\schoolcoursecode| or |\degreedescriptions| arguments.
@@ -724,7 +751,7 @@
 % The most typical changes here will be to adjust the exam rubric for
 % a particular class, with the command |\baserubric|, and to change the
 % sheet of physical constants, with the command |\constantssheet|.
-% See the file |A1.clo| for examples.
+% See the sample file |A1.clo| for examples.
 %
 % Examine this sample \file{SpecialExam.clo} file:
 % \begin{verbatim}
@@ -734,7 +761,8 @@
 % \OverrideFormatting{
 % \renewcommand\FormatPartMarks[1]{\{#1\}}
 % \renewcommand\FormatPartNumber
-%   {\hbox to 0pt{\hss (\alph{partnumber})\hskip1em}}
+%   {\hbox to 0pt{\hss (\StylePartNumber{partnumber})\hskip1em}}
+% \let\StylePartNumber\roman % as opposed to \alph
 % \renewcommand\FormatQuestionNumber
 %   {\hbox to 0pt{\hss \textbf{\@currentquestion}\hskip2.5em}}
 % }
@@ -776,6 +804,11 @@
 % markers will jut into the left-hand margin, rather than being
 % run-in.
 %
+% \item[StylePartNumber]
+% This overrides how to style the |\part| markers.  The default is
+% |\alph|, but you might prefer, for example, |\Roman| or |\arabic|.
+% Override this with |\let\StylePartNumber\Roman|.
+%
 % \item[FormatQuestionNumber]
 % If you adjust the part marks, you should probably adjust the
 % formatting of the question number also.
@@ -1100,12 +1133,30 @@
 \DeclareOption{colour}{}
 %    \end{macrocode}
 %
-% Option \Lopt{bigfont} prints a version of the exam in a `huge'
-% font, to help students with visual impairments.
+% Options \Lopt{largefont} and \Lopt{hugefont} print versions of the
+% exam in `big' or `huge' font sizes, to help students with visual impairments.
+% The available font variants are represented as numbers.
+% Note: the |\examn at fontvariant| mechanism is in principle more
+% general than simply size variants, but  some of the code below
+% assumes that |\examn at fontvariant| greater than zero means large
+% text, and so would need to be adjusted if this becomes untrue.
+%
+% The flag |\ifbigfont| is true if the font is `significantly large';
+% option \Lopt{hugefont} sets it true, option \Lopt{largefont} does
+% not; it's intended to be a user-visible and -settable flag.
+% \emph{Note:} the \Lopt{hugefont} option used to be \Lopt{bigfont};
+% the latter is deprecated and may be removed in v1.2.
 %    \begin{macrocode}
+\newcount\examn at fontvariant
+  \examn at fontvariant=0 % the default
 \newif\ifbigfont
-\bigfontfalse
-\DeclareOption{bigfont}{\bigfonttrue}
+  \bigfontfalse
+\DeclareOption{largefont}{\examn at fontvariant=1 \bigfontfalse}
+% Deprecate [bigfont]; consider removing in v1.2
+\DeclareOption{bigfont}{%
+  \ClassWarning{exam-n}{OPTION [bigfont] HAS BEEN DEPRECATED; use [hugefont] instead}
+  \examn at fontvariant=2 \bigfonttrue}
+\DeclareOption{hugefont}{\examn at fontvariant=2 \bigfonttrue}
 %    \end{macrocode}
 %
 % This class is based on the article class.  Load it, and pass the \texttt{a4paper}
@@ -1253,7 +1304,7 @@
 %    \begin{macrocode}
 \def\examn at setdocident{%
   \begingroup
-    % yes, a big \ifcase would be more straightforward; 
+    % yes, a big \ifcase would be more straightforward;
     % no, that wouldn't be any fun at all
     % (also it ends up looking messy and even tricksier).
     \def\@step##1##2\@nil{\advance\@tempcnta##1 \def\@tempa{##2}}
@@ -1328,15 +1379,15 @@
     \fi
     \ClassWarningNoLine{exam-n}{Using Mathtime fonts}
   \or % use mtpro2 fonts
-    \RequirePackage[T1]{fontenc} 
-    \RequirePackage{textcomp} 
+    \RequirePackage[T1]{fontenc}
+    \RequirePackage{textcomp}
     \ifexamn at serif
       \renewcommand\rmdefault{ptm} % the default
     \else
-      \RequirePackage[scaled=0.9]{helvet} 
+      \RequirePackage[scaled=0.9]{helvet}
       \renewcommand\rmdefault{phv}
     \fi
-    \RequirePackage[mtpbb]{mtpro2} 
+    \RequirePackage[mtpbb]{mtpro2}
     \ClassWarningNoLine{exam-n}{Using MTPro2 fonts}
   \else
     \ClassError{exam-n}{Impossible value of mtselect: \examn at mtselect}
@@ -1362,9 +1413,27 @@
 % implement both of them by redefining |\examn at bodyfontchange|, so
 % they're not in practice (a future fix, perhaps).
 %    \begin{macrocode}
-\ifbigfont
+\ifcase\examn at fontvariant
+  % default: do nothing
+\or
+  % font variant 1: 18pt
   \def\examn at 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 at variantFormatPartMarks
+  }
+\or
+  % font variant 2: 36pt
+  \def\examn at bodyfontchange{
+    \renewcommand\normalsize{%
       \@setfontsize\normalsize{36}{42}%
       \abovedisplayskip 36\p@ \@plus7\p@ \@minus17.5\p@
       \abovedisplayshortskip \z@ \@plus10.5\p@
@@ -1374,19 +1443,29 @@
     \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 at variantFormatPartMarks
+  }
+\else
+  % Bad font variant
+  \ClassError{exam-n}
+    {Bad font variant \examn at fontvariant}
+    {I didn't expect to see that number (broken style file re largefont/hugefont?)}
 \fi
 %    \end{macrocode}
+% The above font variants require a |\FormatPartMarks| variant which
+% avoids being pushed off the edge of the page.
+%    \begin{macrocode}
+\def\examn at 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}
+%    \end{macrocode}
 %
-%
 % \subsubsection{Exam metadata}
 %
 %    \begin{macrocode}
@@ -1420,7 +1499,7 @@
   \let\@tempb\leavevmode
   \def\dd##1\\{%
     \def\@tempa{##1}%
-    \ifx\@tempa\@empty 
+    \ifx\@tempa\@empty
       \let\next\relax
     \else
       \@tempb\hbox{##1}\let\next\dd
@@ -1459,12 +1538,12 @@
 \def\CheckTotalQuestions{%
   \ifnum\@draftstatus < 2
     \ifx\@numquestions\@empty \else
-      \ifnum\questionnumber=\@numquestions \else
+      \ifnum\c at 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
@@ -1581,7 +1660,7 @@
 % |begingroup |ttfamily
 % \catcode`\{=12 \catcode`\}=12 \catcode`\\=12
 % |noindent \newcommand\FormatPartNumber{|linebreak
-% |noindent|quad\hbox to 2em{(\alph{partnumber})\hss}}
+% |noindent|quad\hbox to 2em{(\StylePartNumber{partnumber})\hss}}
 % |endgroup
 % \end{quotation}
 % works adequately as a part number,
@@ -1592,19 +1671,38 @@
 \setlength{\parskip}{\bigskipamount}
 %    \end{macrocode}
 %
+% We must clear out any floats at the end of the paper, without
+% forcing a new page (figures and tables don't float, but there are
+% other packages which can generate floats, such as the
+% \Lenv{sidewaystable} from the \Lpackage{rotating} package).
+% This technique is simplified form Donald Arsenau's \Lpackage{placeins} package.
+%    \begin{macrocode}
+\def\examn at flushfloats{\par
+  \begingroup
+    \edef\@tempa{\@deferlist\@dbldeferlist}
+    \ifx\@tempa\@empty \else
+      \clearpage
+    \fi
+  \endgroup
+}
+%    \end{macrocode}
 % Text at the end of the paper.  Command |\ClosingText| is added to
 % |\AtEndDocument|, below.
 %    \begin{macrocode}
 \ifcase\@draftstatus % Final version
   \def\ClosingText{
+    \examn at flushfloats
     \begin{center}\textbf{End of Paper}\\\end{center}
     \mark{END}}
 \or % Draft version
   \def\ClosingText{
+    \examn at 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 at flushfloats
+    \mark{END}}
 \fi
 %    \end{macrocode}
 %
@@ -1649,7 +1747,7 @@
   \def\@tempa{END}
   \xdef\examn at topmark{\botmark}
   \ifx\examn at topmark\@empty
-    \formatcontinuations{Paper continued over}%
+    \formatcontinuations{Paper continued over\dots}%
   \else\ifx\examn at topmark\@tempa
     \formatcontinuations{END}
   \else
@@ -1817,7 +1915,7 @@
           \leftskip=0pt plus1fil \rightskip=0pt \parfillskip=0pt
           \baselineskip=2.5ex
           \parskip=0.25ex
-          \let\\\par 
+          \let\\\par
             \ifx\@examdate\@empty
               \shout{missing exam date}
             \else
@@ -1883,15 +1981,16 @@
       \vskip 2\baselineskip plus 0.3fil
       \parindent=0pt
       \parskip=0.5\baselineskip
-      \ifbigfont
+      \ifnum\examn at 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}
@@ -1903,10 +2002,10 @@
 %    \end{macrocode}
 % Let the base rubric be a justified block of text near the bottom.
 %    \begin{macrocode}
-      \ifx\@baserubric\@empty \else
-        \@baserubric \par
-      \fi
-    \fi % end \ifbigfont\else
+        \ifx\@baserubric\@empty \else
+          \@baserubric \par
+        \fi
+      \fi % end \ifbigfont \else ...
     \end{center}
 %    \end{macrocode}
 % These various fractions of fil glue don't add up as I'd expect
@@ -1955,7 +2054,7 @@
   %
   \examn at bodyfontchange
   \normalfont\normalsize
-  \ifbigfont
+  \ifnum\examn at fontvariant>0
     % Put the rubric on a second page, in the 'huge' size.
     \begin{center}
       \parskip=18pt
@@ -2016,7 +2115,7 @@
 % their arguments.  If we don't, then \LaTeX\ gets \emph{terribly}
 % confused about what the mark is.  I don't quite follow what happens
 % in this case, but symptoms include Babel blowing up, and
-% \TeX\ running out of stack space.
+% \TeX\ running out of stack space.  So: bad.
 %    \begin{macrocode}
 \let\sectionmark\@gobble
 \let\subsectionmark\@gobble
@@ -2032,13 +2131,24 @@
 \def\subparagraph{\@badsection{subparagraph}}
 %    \end{macrocode}
 %
+% The above redefinitions break the |\tableofcontents| macro.
+% It's unlikely but \emph{possibly} useful, in some cases, to have a
+% table of contents in an exam paper.  Whether or not it is, we should
+% avoid breaking it, on a principle of least surprise.  The following
+% makes the macro work again, even though it's not particularly
+% pretty.
+%    \begin{macrocode}
+\renewcommand\tableofcontents{\bigskip
+  \hbox to \textwidth{\hfil\textbf{\Large Contents}\hfil}%
+  \@starttoc{toc}}
+%    \end{macrocode}
+%
 % Counters:
 %    \begin{macrocode}
 \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
 %    \end{macrocode}
 %
 % Counter partnumber holds the number (i,ii,iii, etc) of the parts
@@ -2063,8 +2173,15 @@
 % The default |\FormatPartNumber| creates a box the same size as a
 % parindent.  This therefore assumes that it's following a |\noindent|.
 %    \begin{macrocode}
-\newcommand\FormatPartNumber{\hbox to \parindent{(\alph{partnumber})\hss}}
+\newcommand\FormatPartNumber{\hbox to \parindent{(\StylePartNumber{partnumber})\hss}}
 %    \end{macrocode}
+% And by default we use alphanumeric counters for parts (we abstract
+% this, rather than simply including |\alph| in the definition of
+% |\FormatPartNumber|, so that we use the same style for the
+% `answerpartnumber' counter.
+%    \begin{macrocode}
+\let\StylePartNumber\alph
+%    \end{macrocode}
 %
 % A flag indicating whether we should start a new page before the next
 % question.  This is manipulated by both |\section| and |\question|.
@@ -2139,7 +2256,7 @@
       % 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
@@ -2153,8 +2270,29 @@
       \global\advance\marktotal #1
       \if at tempswa
 %    \end{macrocode}
-% Just after maths (or some other display which doesn't fill the line)
-% -- move the part mark up a bit.  We don't automatically end the
+% This is the starred form of |\partmarks|.  That is, this is being invoked
+% (i) just after maths (or some other display which doesn't fill the line),
+% \emph{or} (ii) at the end of an unnumbered equation.  In case (i),
+% we move the part mark up a bit; in case (ii), we format the
+% partmarks as a type of equation number
+%
+% We handle case (ii) first, by detecting whether we're in a maths
+% display. If so, we format the partmarks as an equation number, using
+% |\eqno|.  Note that \Lpackage{amsmath} maths (which is what we're
+% using here) formats this differently if the material following
+% |\eqno| is of zero size, so we make this slightly larger than that.
+%    \begin{macrocode}
+        \ifdim\displaywidth>0pt
+          \if at 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
+%    \end{macrocode}
+% Case (i), not in maths: We don't automatically end the
 % paragraph here, because a display will often not be the end of a paragraph.
 % I am not at all convinced that this is the correct approach
 % to nudging the partmarks text up the right amount.  The
@@ -2161,17 +2299,19 @@
 % following appears to do roughly the right thing, but there's a
 % strong element of trial and error in it.
 %    \begin{macrocode}
-        \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}%
+          \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
 %    \end{macrocode}
-% Not after maths.  We also end the paragraph here.
-% This is filched from the TeXBook, p106.
+% We've called the unstarred version of |\partmarks|.  We also end the paragraph here
+% (this technique is filched from the TeXBook, p106).
 %    \begin{macrocode}
       \else
         \ifdim\@partmarksspace > 0pt
@@ -2235,8 +2375,8 @@
       {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 at question{#1}{\@tempa}%
   \else
     \ClassWarning{exam-n}{Forcing question number
@@ -2304,8 +2444,8 @@
 %    \begin{macrocode}
    {\par
     \ifnum\ex at mcqi<\ex at 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
@@ -2312,8 +2452,8 @@
     \fi
     \ifcase\ex at 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
@@ -2321,8 +2461,8 @@
        % ex at 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
@@ -2380,8 +2520,19 @@
     \questionpreamble{}
   \fi
   \setcounter{partnumber}{0}
-  \global\advance\questionnumber 1
+  \setcounter{answerpartnumber}{0}
 %    \end{macrocode}
+% If the argument |#1| is non-empty, then it is a number, forcing the
+% question number.  This is local, however -- don't use it to change
+% the sequence of questions, so don't set the `questionnumber'
+% counter, but only the current label.
+%    \begin{macrocode}
+  \refstepcounter{questionnumber}
+  \def\@tempa{#1}
+  \ifx\@tempa\@empty \else
+    \edef\@currentlabel{#1}
+  \fi
+%    \end{macrocode}
 %
 % If |pageperquestion| is true, then start a new page here (unless
 % this is the first question).
@@ -2410,9 +2561,9 @@
 %    \begin{macrocode}
     \ifx\@tempa\@empty
       % no optional argument -- easy
-      \def\@currentquestion{\the\questionnumber}
+      \def\@currentquestion{\thequestionnumber}
 %    \end{macrocode}
-% 
+%
 % We have a non-null optional argument in |#1|.
 % Check the question number in the argument.  If there's a
 % mismatch, warn in draft mode, and fail in final mode.  First,
@@ -2433,20 +2584,19 @@
           (the formatting below may be messed up).\par
       \fi
 %    \end{macrocode}
-% Switch on the draft status: in the final version, this mismatch is
-% an error
+% Switch on the draft status: in the final version, this mismatch is an error
 %    \begin{macrocode}
       \ifcase\@draftstatus
         % Final version
         \@tempcnta=#1
-        \ifnum\questionnumber=\@tempcnta
+        \ifnum\c at 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?}
@@ -2453,7 +2603,7 @@
             \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
@@ -2465,9 +2615,9 @@
         % Draft version -- let the given number override
         % \the\questionnumber, but warn if there's a difference.
         \@tempcnta=#1
-        \ifnum\questionnumber=\@tempcnta \else
+        \ifnum\c at 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
@@ -2482,9 +2632,9 @@
       % 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
@@ -2498,11 +2648,18 @@
 % question number: if it happens before, and there is a page-break
 % immediately before the new question, we can get a spurious
 % `Q?? continued' on the previous page.
+%
+% If a paragraph starts inside a level of grouping -- for example
+% |{\bf 1} text...| or even just |{T}ext| -- then the |\everypar|
+% tokens are expanded inside that group, which means that the
+% resetting of |\everypar| is local, with the result that the tokens
+% are reused for the next paragraph.  Make the emptying of |\everypar|
+% global for that reason.
 %    \begin{macrocode}
   \everypar{\setbox0=\lastbox % discard \box0
     \FormatQuestionNumber
     \mark{\@currentquestion}%
-    \everypar{}}
+    \global\everypar{}}
 }
 %    \end{macrocode}
 % Format the question number.  This command is documented as existing,
@@ -2512,8 +2669,7 @@
   {\hbox to 0pt{\hss \textbf{\@currentquestion}\hskip1em}}
 %    \end{macrocode}
 %
-% Finish off the question.
-%
+% Finish off the question:
 % Format the indication of the total number
 % of marks, and do a few consistency checks.
 %    \begin{macrocode}
@@ -2532,6 +2688,9 @@
         \break
     \fi
     \fi
+%    \end{macrocode}
+% In the case where the mark total doesn't match, make a noise about it.
+%    \begin{macrocode}
   \else
     \ClassWarning{exam-n}
       {Question \@currentquestion\space has a total of \the\marktotal\space marks,
@@ -2544,6 +2703,9 @@
       \expandafter\shout\expandafter{\@tempa}
     \end{center}
   \fi
+%    \end{macrocode}
+% Make a few tidyups in the end-question wrapper.
+%    \begin{macrocode}
   \examn at endquestion{%
     \if at showmarktotals
       \par                      % into vertical mode
@@ -2567,8 +2729,10 @@
 %
 % The \Lenv{questiondata} environment allows the author to provide
 % some additional data or equations for the question.
+% This environment ends a preceding paragraph.
 %    \begin{macrocode}
 \newenvironment{questiondata}{%
+  \par
   \penalty50 % poor break
   \vbox\bgroup
     \slshape
@@ -2584,7 +2748,7 @@
     \medskip
     \hrule width \textwidth
     \par
-  \egroup
+  \egroup % end of \vbox
 }
 %    \end{macrocode}
 %
@@ -2672,7 +2836,7 @@
 % remark to a list of exclamations which are highlighted at the end of
 % the document.
 % The argument to |\@shout| can have expandable things (such as
-% |\the\questionnumber|) in it.
+% |\thequestionnumber|) in it.
 % Shouts appear in all modes and cannot be suppressed.
 %    \begin{macrocode}
 \newtoks\@allshouts \@allshouts={}
@@ -2744,6 +2908,22 @@
 \@insolutionfalse
 %    \end{macrocode}
 %
+% We want to use |\part| within solutions.  If we were to do so naively
+% however, we would end up incrementing the |partnumber| counter
+% which that macro uses, which either disturbs the numbering of the
+% parts in the question (if the solutions are interspersed in the
+% question) or starts out of sequence (if the solutions are at the
+% end).  So we maintain a separate counter.  Additionally, we want to
+% force the formatting of the solution parts, to be independent of the
+% formatting in the main question
+%    \begin{macrocode}
+\newcounter{answerpartnumber}
+\newcommand{\examn at solutionpart}{%
+  \par
+  \stepcounter{answerpartnumber}
+  \noindent\hbox to \parindent{(\StylePartNumber{answerpartnumber})\hss}}
+%    \end{macrocode}
+%
 % Specify how solutions should be shown.  The following makes them
 % ragged right, slightly smaller and slanted, with rules fore and aft.
 % This doesn't leap out, but the difference should be detectable.
@@ -2759,6 +2939,7 @@
   \fi
   \examn at dummycaptions             % dummy captions within solutions
   \typeout{SHOWING SOLUTIONS}
+  \let\part\examn at solutionpart
 %    \end{macrocode}
 % Checks done; now get on with the layout
 %    \begin{macrocode}
@@ -2767,7 +2948,7 @@
   \parskip 0.5\baselineskip
   \raggedright
   \color{solutiontext}%\slshape
-  \ifbigfont\else
+  \ifbigfont \else
     \small
   \fi
   \hrule
@@ -2776,6 +2957,7 @@
   \vskip -\parskip              % cancel out the following parskip
   \textbf{\highlighted{Solution:}}\hskip2em
   \ignorespaces
+  \parindent=2em
 }
 %    \end{macrocode}
 % The end of the solution environment is simple, and simply matches
@@ -2789,7 +2971,7 @@
   \hrule
 }
 %    \end{macrocode}
-% 
+%
 % The content of the \Lenv{solution} environment is balanced \LaTeX\
 % text, and so does not have to be complicated; in particular, it does
 % not have to have the generality, and the consequent restrictions, of
@@ -2897,7 +3079,7 @@
   }
 }
 %    \end{macrocode}
-% 
+%
 % \subsubsection{Solutions and pdfpages}
 %
 % It appears that the \Lpackage{pdfpages} package is incompatible with

Modified: trunk/Master/texmf-dist/tex/latex/exam-n/exam-n.cls
===================================================================
--- trunk/Master/texmf-dist/tex/latex/exam-n/exam-n.cls	2016-12-20 01:05:25 UTC (rev 42754)
+++ trunk/Master/texmf-dist/tex/latex/exam-n/exam-n.cls	2016-12-20 22:54:48 UTC (rev 42755)
@@ -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 at header@shoutformat#1{{\Huge\bfseries #1}}
 }
 \DeclareOption{colour}{}
+\newcount\examn at fontvariant
+  \examn at fontvariant=0 % the default
 \newif\ifbigfont
-\bigfontfalse
-\DeclareOption{bigfont}{\bigfonttrue}
+  \bigfontfalse
+\DeclareOption{largefont}{\examn at fontvariant=1 \bigfontfalse}
+\DeclareOption{bigfont}{%
+  \ClassWarning{exam-n}{OPTION [bigfont] HAS BEEN DEPRECATED; use [hugefont] instead}
+  \examn at fontvariant=2 \bigfonttrue}
+\DeclareOption{hugefont}{\examn at fontvariant=2 \bigfonttrue}
 \PassOptionsToClass{a4paper}{article}
 \newtoks\@styleoverrides
 \@styleoverrides={}
@@ -228,9 +234,27 @@
   \DeclareRobustCommand\normalfont
     {\usefont\encodingdefault\sfdefault\seriesdefault\shapedefault \relax}
 \fi
-\ifbigfont
+\ifcase\examn at fontvariant
+  % default: do nothing
+\or
+  % font variant 1: 18pt
   \def\examn at 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 at variantFormatPartMarks
+  }
+\or
+  % font variant 2: 36pt
+  \def\examn at bodyfontchange{
+    \renewcommand\normalsize{%
       \@setfontsize\normalsize{36}{42}%
       \abovedisplayskip 36\p@ \@plus7\p@ \@minus17.5\p@
       \abovedisplayshortskip \z@ \@plus10.5\p@
@@ -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 at variantFormatPartMarks
+  }
+\else
+  % Bad font variant
+  \ClassError{exam-n}
+    {Bad font variant \examn at fontvariant}
+    {I didn't expect to see that number (broken style file re largefont/hugefont?)}
 \fi
+\def\examn at 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 @@
 \def\CheckTotalQuestions{%
   \ifnum\@draftstatus < 2
     \ifx\@numquestions\@empty \else
-      \ifnum\questionnumber=\@numquestions \else
+      \ifnum\c at 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 @@
 }
 \setlength{\parindent}{2em}
 \setlength{\parskip}{\bigskipamount}
+\def\examn at flushfloats{\par
+  \begingroup
+    \edef\@tempa{\@deferlist\@dbldeferlist}
+    \ifx\@tempa\@empty \else
+      \clearpage
+    \fi
+  \endgroup
+}
 \ifcase\@draftstatus % Final version
   \def\ClosingText{
+    \examn at flushfloats
     \begin{center}\textbf{End of Paper}\\\end{center}
     \mark{END}}
 \or % Draft version
   \def\ClosingText{
+    \examn at 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 at flushfloats
+    \mark{END}}
 \fi
 \RequirePackage{fancyhdr}
 \pagestyle{fancy}
@@ -390,7 +433,7 @@
   \def\@tempa{END}
   \xdef\examn at topmark{\botmark}
   \ifx\examn at topmark\@empty
-    \formatcontinuations{Paper continued over}%
+    \formatcontinuations{Paper continued over\dots}%
   \else\ifx\examn at topmark\@tempa
     \formatcontinuations{END}
   \else
@@ -552,15 +595,16 @@
       \vskip 2\baselineskip plus 0.3fil
       \parindent=0pt
       \parskip=0.5\baselineskip
-      \ifbigfont
+      \ifnum\examn at 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 @@
             \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 @@
   %
   \examn at bodyfontchange
   \normalfont\normalsize
-  \ifbigfont
+  \ifnum\examn at fontvariant>0
     % Put the rubric on a second page, in the 'huge' size.
     \begin{center}
       \parskip=18pt
@@ -654,11 +698,13 @@
 \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 at nobreak \else
@@ -672,7 +718,8 @@
   \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 at newpagebeforequestion
 \if at pageperquestion
   \@newpagebeforequestiontrue
@@ -713,7 +760,7 @@
       % 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 @@
     \else
       \global\advance\marktotal #1
       \if at 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 at 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 @@
       {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 at question{#1}{\@tempa}%
   \else
     \ClassWarning{exam-n}{Forcing question number
@@ -802,8 +860,8 @@
     \fi}
    {\par
     \ifnum\ex at mcqi<\ex at 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
@@ -810,8 +868,8 @@
     \fi
     \ifcase\ex at 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 @@
        % ex at 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 @@
     \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 at prequestionspace{%
     \if at nobreak
       % after a heading (or something like that)
@@ -876,7 +939,7 @@
     \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,14 +952,14 @@
       \ifcase\@draftstatus
         % Final version
         \@tempcnta=#1
-        \ifnum\questionnumber=\@tempcnta
+        \ifnum\c at 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?}
@@ -903,7 +966,7 @@
             \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 @@
         % Draft version -- let the given number override
         % \the\questionnumber, but warn if there's a difference.
         \@tempcnta=#1
-        \ifnum\questionnumber=\@tempcnta \else
+        \ifnum\c at 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,9 +992,9 @@
       % 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
@@ -938,7 +1001,7 @@
   \everypar{\setbox0=\lastbox % discard \box0
     \FormatQuestionNumber
     \mark{\@currentquestion}%
-    \everypar{}}
+    \global\everypar{}}
 }
 \newcommand\FormatQuestionNumber
   {\hbox to 0pt{\hss \textbf{\@currentquestion}\hskip1em}}
@@ -987,6 +1050,7 @@
   }
 }
 \newenvironment{questiondata}{%
+  \par
   \penalty50 % poor break
   \vbox\bgroup
     \slshape
@@ -1002,7 +1066,7 @@
     \medskip
     \hrule width \textwidth
     \par
-  \egroup
+  \egroup % end of \vbox
 }
 \newcommand\questionpreamble[1]{\gdef\examn at questionpreamble{#1}}
 \let\examn at questionpreamble\@empty
@@ -1080,6 +1144,11 @@
 \let\@includequestionoverridenumber\@empty
 \newif\if at insolution
 \@insolutionfalse
+\newcounter{answerpartnumber}
+\newcommand{\examn at solutionpart}{%
+  \par
+  \stepcounter{answerpartnumber}
+  \noindent\hbox to \parindent{(\StylePartNumber{answerpartnumber})\hss}}
 \def\@formatsolution{\par
   \if at insolution
     \ClassError{exam-n}{Misplaced solution}{You can't have a solution within a solution}
@@ -1088,12 +1157,13 @@
   \fi
   \examn at dummycaptions             % dummy captions within solutions
   \typeout{SHOWING SOLUTIONS}
+  \let\part\examn at 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 @@
   \vskip -\parskip              % cancel out the following parskip
   \textbf{\highlighted{Solution:}}\hskip2em
   \ignorespaces
+  \parindent=2em
 }
 \def\end at formatsolution{%
   \par

Modified: trunk/Master/tlpkg/libexec/ctan2tds
===================================================================
--- trunk/Master/tlpkg/libexec/ctan2tds	2016-12-20 01:05:25 UTC (rev 42754)
+++ trunk/Master/tlpkg/libexec/ctan2tds	2016-12-20 22:54:48 UTC (rev 42755)
@@ -1562,6 +1562,7 @@
  'etdipa',	'NULL',			# doc says "copy all files"
  'europasscv',  '(icon|logo).*\.pdf|' . $standardtex,
  'europecv',    'EuropeFlag|europasslogo|\.cls|\.def',
+ 'exam-n',	'\.cls',		# not .clo example file
  'fancytooltips',       'fancytipmark\..*|' . $standardtex,
  'figflow',     '\.tex',
  'fjodor',      'fjodor\.sty',          # not srbook-mem.sty



More information about the tex-live-commits mailing list