summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/source/latex/bangorexam/bangorexam.dtx
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2016-10-09 22:59:03 +0000
committerKarl Berry <karl@freefriends.org>2016-10-09 22:59:03 +0000
commitca8c7aacb845a15368d8eb5901ad86a0d821c7ca (patch)
treef9b5bab83aee9611b4f3bcc7a938aad524c48423 /Master/texmf-dist/source/latex/bangorexam/bangorexam.dtx
parent08b96c312c68a33902a948ab94b27b779eaed4cf (diff)
bangorexam (9oct16)
git-svn-id: svn://tug.org/texlive/trunk@42242 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/source/latex/bangorexam/bangorexam.dtx')
-rw-r--r--Master/texmf-dist/source/latex/bangorexam/bangorexam.dtx585
1 files changed, 585 insertions, 0 deletions
diff --git a/Master/texmf-dist/source/latex/bangorexam/bangorexam.dtx b/Master/texmf-dist/source/latex/bangorexam/bangorexam.dtx
new file mode 100644
index 00000000000..6287774a016
--- /dev/null
+++ b/Master/texmf-dist/source/latex/bangorexam/bangorexam.dtx
@@ -0,0 +1,585 @@
+%\iffalse
+%<*package>
+%% \CharacterTable
+%% {Upper-case\A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
+%% Lower-case\a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
+%% Digits\0\1\2\3\4\5\6\7\8\9
+%% Exclamation \! Double quote \" Hash (number) \#
+%% Dollar\$ Percent \% Ampersand \&
+%% Acute accent \' Left paren\( Right paren \)
+%% Asterisk \* Plus \+ Comma \,
+%% Minus \- Point \. Solidus \/
+%% Colon \: Semicolon \; Less than \<
+%% Equals\= Greater than \> Question mark \?
+%% Commercial at \@ Left bracket \[ Backslash \\
+%% Right bracket \] Circumflex\^ Underscore\_
+%% Grave accent \` Left brace\{ Vertical bar \|
+%% Right brace \} Tilde \~}
+%</package>
+%\fi
+% \iffalse
+% Doc-Source file to use with LaTeX2e
+% Copyright (C) 2016 Cameron Gray <c.gray@bangor.ac.uk>, all rights reserved.
+% \fi
+% \iffalse
+%<*driver>
+\documentclass[a4paper]{ltxdoc}
+
+\usepackage[top=2cm, bottom=2cm, right=2cm, left=2in, headsep=14pt]{geometry}
+\usepackage{fancyhdr,courier}
+\fancyhead[R]{\texttt{bangorexam} - Exam Document Class}
+\renewcommand{\headrulewidth}{0.5pt}
+\fancyfoot{}
+\fancyfoot[R]{\thepage}
+\setlength\parindent{0pt}
+\hyphenpenalty=10000
+\hbadness=10000
+\sloppy
+\begin{document}
+\DocInput{bangorexam.dtx}
+\end{document}
+%</driver>
+%\fi
+%\CheckSum{432}
+%\RecordChanges
+%\changes{v1.0}{2016/09/26}{Initial version.}
+%\pagestyle{fancy}
+%\title{Bangor University Computer Science Department\\ Exam Document Class}
+%\author{Cameron Gray \texttt{<c.gray@bangor.ac.uk>}}
+%\date{September 26, 2016}
+%\maketitle
+%
+%\begin{abstract}
+%Starting with the 2016/17 academic year, the Computer Science department at
+%Bangor University have moved to \LaTeX\ for preparation of examination papers
+%for all taught courses. This was done for multiple reasons, including the
+%reduction of burden on support staff.
+%
+%This package is the embodiment of that effort. It includes all of the
+%elements needed to produce an examination paper, including examiner's copies
+%with solutions included.
+%\end{abstract}
+%
+%\section{Usage - Class Options}
+%The document class is activated (or loaded) using the usual \LaTeX\ command
+%|\documentclass{bangorexam}|. The class requires one of the following options
+%to control which `style' of exam paper is produced.
+%
+%\oarg{ab} - produces a compulsory Section A and a `two from three' Section B
+%exam.
+%\oarg{twofour} - produces a single part `two from four' exam.
+%
+%The `answers' option controls the inclusion of solutions as part of the
+%output.
+%
+%|\documentclass[ab]{bangorexam}| - produces the student form of a Section A/B
+%exam paper.
+%
+%|\documentclass[ab,answers]{bangorexam}| - produces the examiner form of the
+%paper.
+%
+%\section{Usage - Preamble Macros}
+%The class includes several macros that must be added to the document's
+%preamble. These set important aspects such as the module code and title.
+%
+%\ \\
+%
+%\DescribeMacro{\school\marg{English name}\marg{Welsh name}} The name of the
+%school setting this exam, provided in both English and Welsh.
+%
+%\ \\
+%
+%\DescribeMacro{\module\marg{code}\marg{full name}} The code (including the
+%3-letter prefix) and full name of the module.
+%
+%\ \\
+%
+%\DescribeMacro{\examperiod\marg{resit\textbar{}s1\textbar{}s2}} Specifies
+%the period of the exam, s1 for January/End of Semester 1, s2 for May/End of
+%Semester 2, or resit for Supplementary exams (August Resits).
+%
+%\ \\
+%
+%\DescribeMacro{\timeallowed\marg{hours}} The amount of time allowed in hours.
+%This should be the numerical part only, e.g. |\timeallowed{1\half}| or
+%|\timeallowed{3}|.
+%
+%\ \\
+%
+%\section{Usage - Body Macros}
+%Various macros exist to typeset the questions within the exam paper. The
+%macros listed here are provided to comply with Bangor University's style and
+%formatting requirements. Users should not adjust any formatting, font,
+%header, footer, margin other other display parameters. Please use |\emph{}|
+%for italic text and |\textbf{}| for boldface fonts only. The document class
+%has been designed to support amsmath and amssymb mathematics typesetting
+%with the conventional font.
+%
+%\ \\
+%
+%\DescribeMacro{\sectiona} \[\emph{Only applies when class option ab is
+%active.}\] Begins the compulsory Section A.
+%
+%\ \\
+%
+%\DescribeMacro{\sectionb} \[\emph{Only applies when class option ab is
+%active.}\] Begins the student-choice Section B.
+%
+%\ \\
+%
+%\DescribeMacro{\pointsdesc\marg{description}} Sets the suffix/descriptive text
+%following a points value. This defaults to an empty string, so 5 points would
+%be rendered as |[5]|. Setting |\pointsdesc{%}| would result in |[5%]|.
+%
+%\ \\
+%
+%\DescribeMacro{\guidance\marg{guidance text}} Sets a 'guidance' paragraph at
+%the beginning of all question sections (at the start for two of four or both
+%of section A and B if ab).
+%
+%\ \\
+%
+%\DescribeMacro{\guidancea\marg{guidance text}} Sets a 'guidance' paragraph at
+%the start of section A only.
+%
+%\ \\
+%
+%\DescribeMacro{\guidanceb\marg{guidance text}} Sets a 'guidance' paragraph at
+%the start of section B only.
+%
+%\ \\
+%
+%\section{Usage - Environments}
+%There are three key environments |questions|, |parts|, and |solution|.
+%These represent a numbered sequence of questions, parts and sub-parts of one
+%question, and a solution/answer for a question respectively.
+%
+%\subsection{Questions Environment}
+%All questions must be set within a questions environment. You may add other
+%items, such as explanations, images, scenarios etc., in this environment
+%too. The most simple questions environment is as follows:\\
+%\begin{verbatim}
+%\begin{questions}
+%\end{questions}
+%\end{verbatim}
+%However, this will not actually produce any output.
+%
+%Questions must be added with use of the |\question| macro.
+%
+%\ \\
+%
+%\DescribeMacro{\question\oarg{points} Question Text} This macro can only
+%be used within the Questions environment and is used to typeset a question.
+%The optional argument sets the number of points/marks/percentage awarded for
+%correct answers. See the |\pointsdesc| macro for customisation options.
+%
+%Whenever a new block is started (with |\begin{questions}|), the numbering
+%begins at 1. (Questions, at present, can only be labelled with Arabic
+%numerals.)
+%
+%\subsection{Parts Environment}
+%Within a question, examiners may wish to have multiple sub-questions (a.k.a
+%parts). This is provided for by the |\begin{parts}...\end{parts}|
+%environment. Each sub-question or part is handled with the part macro.
+%
+%\ \\
+%
+%\DescribeMacro{\part\oarg{points} Part Text} This macro can only be used
+%within the parts environment and is used to typeset a sub-question. The
+%optional parameter sets the number of points/marks/percentage awarded for
+%correct answers. See the |\pointsdesc| macro for customisation options.
+%
+%\ \\
+%
+%The parts environment may only be used within the questions
+%environment, as in the example below:
+%
+%\begin{verbatim}
+%\begin{questions}
+% \question Use the graph in Figure 1 to answer the following:
+% \begin{parts}
+%\part Sub-question 1
+%\part[10] Sub-question 2
+% \end{parts}
+%\end{questions}
+%\end{verbatim}
+%
+%\ \\
+%
+%Whenever a new block is started (with |\begin{parts}|), the sub-question
+%numbering begins with a). (Sub-questions, at present, can only be labelled
+%with English letters).
+%
+%\subsection{Solution Environment}
+%Following either a |\question| or |\part|, the examiner should include a
+%solution block. This block/environment will only be included if the answers
+%class option is in effect. (See Class Options for more details). Any standard
+%LaTeX content can be placed in a solution block. A minimal example is below:
+%
+%\begin{verbatim}
+%\begin{questions}
+% \question A really hard question.
+% \begin{solution}
+%The answer is placed here.
+% \end{solution}
+%\end{questions}
+%\end{verbatim}
+%
+%\ \\
+%
+%\section{Usage - Multiple Choice Questions}
+%There are four environments that will allow typesetting of multiple choice
+%selections depending on the desired layout. All must be used within a
+%Questions or Parts environment.
+%
+%The first pair present a list of possible responses labelled with letters.
+%The |choices| environment presents one choice per line, whereas the
+%|horizontalchoices| environment lays out choices in a single paragraph,
+%wrapping lines wherever necessary.
+%
+%The second pair present tick or check boxes instead of labelled choices.
+%A |checkboxes| environment will again typeset options one to a line, and the
+%|horizontalcheckboxes| environment will present all options in one paragraph.
+%
+%Within any of the four environments each choice is typeset using the choice
+%macro. Please note; there is no points argument for individual choices, this
+%should be handled at the question or part level.
+%
+%\ \\
+%
+%\DescribeMacro{\choice Choice Text} Typesets a single choice according to
+%which environment it is placed in.
+%
+%Solutions to multiple choice questions are handled somewhat differently.
+%Instead of a |solutions| environment, typeset the correct option using the
+%|correctchoice| macro.
+%
+%\ \\
+%
+%\DescribeMacro{\correctchoice Choice Text} Typeset the correct choice based
+%on where the macro is placed. When |answers| is in effect, the output of
+%this macro will either highlight the option in boldface, or replace the
+%checkbox with a tick.
+%
+%
+%
+%
+%\StopEventually{}
+%\section{The Code}
+%\iffalse
+%\begin{macrocode}
+%<*bangorexam.cls>
+%\end{macrocode}
+%\fi
+%\begin{macrocode}
+\def\version{1.0.0}
+
+\NeedsTeXFormat{LaTeX2e}
+
+\ProvidesClass{bangorexam}[2016/10/03 \version C. Gray]
+
+% Based on the Exam document class by Philip S. Hirschhorn
+% Developed/Adapted for Bangor University by C. Gray
+
+\RequirePackage[dvipsnames]{xcolor}
+\RequirePackage[T1]{fontenc}
+\RequirePackage[UKenglish]{babel}
+\RequirePackage[UKenglish]{isodate}
+\RequirePackage[utf8]{inputenc}
+
+\RequirePackage{array}
+\RequirePackage{color}
+\RequirePackage{etoolbox}
+\RequirePackage{graphicx}
+\RequirePackage{ifthen}
+\RequirePackage{letltxmacro}
+\RequirePackage{newpxtext,newpxmath}
+\RequirePackage{totcount}
+\RequirePackage{xstring}
+
+\RequirePackage{courier}
+
+% *******************************************************************
+% Class Level Options
+% *******************************************************************
+
+% Enable Welsh headings, etc. Does not affect the cover sheet.
+% -------------------------------------------------------------------
+\DeclareOption{welsh}{%
+\newcommand{\welsh}{true}%
+}%
+% Exam Type
+% -------------------------------------------------------------------
+\DeclareOption{ab}{%
+\newtotcounter{sectiona}%
+\newtotcounter{sectionb}
+\newcommand{\examtype}{ab}%
+\newcommand{\engTypeText}{Answer {\bf Section A} (compulsory) and {\bf any two} questions from {\bf Section B}.}%
+\newcommand{\welTypeText}{Atebwch {\bf Adran A} (gorfodol) ac {\bf unrhyw ddau} gwestiwn o {\bf Adran B}.}%
+\newcommand{\sectionAHeader}{\textbf{ADRAN A} --- Atebwch BOB cwestiwn (Cyfanswm marciau \total{sectiona})}%
+\newcommand{\sectionBHeader}{\textbf{ADRAN B} --- Atebwch unrhyw DDAU chwestiwn (\total{sectionb} marc yr un)}%
+\ifx\welsh\undefined%
+\renewcommand{\sectionAHeader}{\textbf{SECTION A} --- Answer \textbf{ALL} questions (Total marks \total{sectiona})}%
+\renewcommand{\sectionBHeader}{\textbf{SECTION B} --- Answer any \textbf{TWO} questions (\total{sectionb} marks each)}%
+\fi%
+}%
+\DeclareOption{twofour}{%
+\newcommand{\examtype}{twofour}%
+\newcommand{\engTypeText}{Answer \textbf{two} out of four questions.}%
+\newcommand{\welTypeTest}{Atebwch \textbf{ddau} o'r pedwar cwestiwn.}%
+}%
+\DeclareOption{answers}{\PassOptionsToClass{\CurrentOption}{exam}}%
+\DeclareOption{draft}{\PassOptionsToClass{\CurrentOption}{exam}}%
+\ProcessOptions\relax%
+
+\ifx\examtype\undefined%
+\ClassError{bangorexam}{An exam type option has not been defined; use ab or twofour in the class options.}%
+\fi%
+
+\LoadClass[a4paper,twoside,11pt,addpoints]{exam}%
+
+% *******************************************************************
+% Layout
+% *******************************************************************
+% Page layout
+\setlength{\parindent}{0mm}%
+\setlength{\parskip}{1ex plus 0.5ex minus 0.2ex}%
+
+% Footer
+\pagestyle{headandfoot}%
+\coverfooter{}{}{\iflastpage{}{/ troi drosodd\\/ turn over}{}}%
+\footer{}{}{\oddeven{}{\iflastpage{}{/ troi drosodd / turn over}}}%
+
+% Cover Column Definition
+\newcolumntype{C}[1]{>{\centering\arraybackslash}p{#1}}
+
+\SolutionEmphasis{\color{red}}
+
+% *******************************************************************
+% Configuration Macros
+% *******************************************************************
+\newcounter{tmp}
+\newtotcounter{all}
+
+\newcommand{\school}[2] {%
+\def \engSchool {\expandafter\MakeUppercase\expandafter{#1}}%
+\def \welSchool {\expandafter\MakeUppercase\expandafter{#2}}%
+}%
+\newcommand{\module}[2]{%
+\StrSubstitute{#1}{-}{}[\mTmp]%
+\def \moduleCode {\expandafter\MakeUppercase\expandafter{\mTmp}}%
+\def \moduleName {#2}%
+}%
+\newcommand{\examperiod}[1]{%
+\setcounter{tmp}{\the\year}%
+\ifnum \the\month>8%
+\stepcounter{tmp}%
+\newcommand{\examYear}{\arabic{tmp}}%
+\else%
+\newcommand{\examYear}{\arabic{tmp}}%
+\fi%
+\newcommand{\welSemesterText}{Arholiadau Diwedd Semester\ \welSemester}%
+\newcommand{\engSemesterText}{End of Semester \engSemester\ Examinations}%
+\ifthenelse{\equal{#1}{s1}}{%
+\def \welSemester {Un}%
+\def \engSemester {One}%
+\def \welExamMonth {IONAWR}%
+\def \engExamMonth {JANUARY}%
+}{}%
+\ifthenelse{\equal{#1}{s2}}{%
+\def \welSemester {Dau}%
+\def \engSemester {Two}%
+\def \welExamMonth {MAI}%
+\def \engExamMonth {MAY}%
+}{}%
+\ifthenelse{\equal{#1}{resit}}{%
+\renewcommand{\welSemesterText}{Arholiadau Atodol}%
+\renewcommand{\engSemesterText}{Supplementary Examination}%
+\def \welExamMonth {AWST}%
+\def \engExamMonth {AUGUST}%
+}{}%
+}
+
+\newcommand{\timeallowed}[1]{%
+\def \timeAllowed {#1}%
+}
+
+\newcommand{\guidance}[1]{%
+\def \guidance@a {#1}%
+\def \guidance@b {#1}%
+}
+
+\newcommand{\guidancea}[1]{%
+\def \guidance@a {#1}%
+}
+
+\newcommand{\guidanceb}[1]{%
+\def \guidance@b {#1}%
+}
+
+% *******************************************************************
+% Cover Page
+% *******************************************************************
+
+\renewcommand{\maketitle}{%
+\ifx\timeAllowed\undefined%
+\ClassError{bangorexam}{The time allowed for this exam has not been defined (missing \backslash timealllowed?).}%
+\fi%
+\ifx\engExamMonth\undefined%
+\ClassError{bangorexam}{The exam period for this exam has not been set (missing \backslash examperiod?).}%
+\fi%
+\ifx\moduleCode\undefined%
+\ClassError{bangorexam}{The module details for this exam have not been specified (missing \backslash module?).}%
+\fi%
+\ifx\welSchool\undefined%
+\ClassError{bangorexam}{The academic school setting this exam has not been defined (missing \backslash school?).}%
+\fi%
+
+\begin{center}
+\bfseries
+\huge
+PRIFYSGOL\\
+\large\mbox{}\\
+\huge
+BANGOR\\
+\large\mbox{}\\
+\huge
+UNIVERSITY
+
+\vfill
+\Large
+\welSchool \\
+\engSchool
+\end{center}
+\medskip
+\large
+\begin{tabular}{C{0.5\textwidth}C{0.5\textwidth}}
+{\bf \welSemesterText\par\welExamMonth\ \examYear}\par\vspace*{\bigskipamount}
+Amser a ganiateir:~\timeAllowed~awr &%
+{\bf \engSemesterText\par\engExamMonth\ \examYear}\par\vspace*{\bigskipamount}
+Time allowed:~\timeAllowed~hours
+\end{tabular}
+
+\vspace*{20mm}
+\LARGE
+\begin{center}
+{\bf \moduleCode\\
+\mbox{}\\
+\moduleName}
+
+\vfill
+\large
+{\welTypeText} \\
+{\engTypeText} \\
+\
+
+\medskip
+{\bf Total marks \total{all}}
+\vfill
+\end{center}
+}
+\AtBeginDocument{
+\begin{coverpages}
+\setlength{\hoffset}{0mm}
+\setlength{\marginparwidth}{0pt}
+\maketitle
+\end{coverpages}
+\pointsinrightmargin
+}
+
+% *******************************************************************
+% Section Commands
+% *******************************************************************
+\newcommand{\hassectiona}{false}%
+\newcommand{\hassectionb}{false}%
+\newcommand{\inDoc}{none}%
+\newcommand{\sectiona} {%
+\ifthenelse{\equal{\examtype}{twofour}}{\ClassError{bangorexam}{\\sectiona used in a 'two from four' exam.}}{}%
+\ifthenelse{\equal{\hassectiona}{true}}{\ClassError{bangorexam}{There is already a \\sectiona in this exam.}}{}%
+\renewcommand{\hassectiona}{true}%
+\renewcommand{\inDoc}{secA}%
+\clearpage
+{%
+\LARGE
+\textbf{\moduleCode: \quad \moduleName}
+
+\vspace*{8mm}
+\large
+\sectionAHeader
+\ifcsdef{guidance@a}{\normalsize\par\guidance@a}{}%
+}
+\vspace*{8mm}
+}
+
+\newcommand{\sectionb}{%
+\ifthenelse{\equal{\examtype}{twofour}}{\ClassError{bangorexam}{\\sectionb used in a 'two from four' exam.}}{}
+\ifthenelse{\equal{\hassectionb}{true}}{\ClassError{bangorexam}{There is already a \\sectionb in this exam.}}{}
+\renewcommand{\hassectionb}{true}
+\renewcommand{\inDoc}{secB}
+\clearpage
+{%
+\large
+\sectionBHeader
+\ifcsdef{guidance@b}{\normalsize\par\guidance@b}{}%
+}
+\vspace*{8mm}
+}
+
+% *******************************************************************
+% Patch Questions to make it Section-aware
+% *******************************************************************
+\renewcommand{\questionshook}{%
+ \edef\mytemp{{\inDoc}}%
+ \expandafter\ifstrequal\mytemp{secB}{\addtocounter{question}{100}}{}%
+}
+
+\renewcommand{\thequestion}{%
+ \edef\mytemp{{\inDoc}}%
+ \setcounter{tmp}{0}%
+ \addtocounter{tmp}{\value{question}}%
+ \expandafter\ifstrequal\mytemp{secB}{\addtocounter{tmp}{-100}\arabic{tmp}}{\arabic{question}}%
+}
+
+\newcommand{\be@adduppoints}[1]{%
+ \edef\mytemp{{\inDoc}}%
+ \expandafter\ifstrequal\mytemp{secA}%
+ {%
+ \addtocounter{sectiona}{#1}%
+ \addtocounter{all}{#1}%
+ }%
+ {}%
+ \expandafter\ifstrequal\mytemp{secB}%
+ {%
+ \ifnumcomp{\value{sectionb}}{=}{0}%
+ {%
+ \addtocounter{sectionb}{#1}%
+ \addtocounter{all}{#1}%
+ \addtocounter{all}{#1}}%
+ {}%
+ \ifnumcomp{\value{sectionb}}{=}{#1}%
+ {}%
+ {%
+ \ClassError{bangorexam}{Section B question \arabic{question} does not have an equal number of points (Existing Section B question worth \arabic{sectionb})}%
+ }%
+ }%
+ {}%
+}
+
+\newcommand{\patchqnumaddpoints}{%
+\be@adduppoints{\totalpoints}%
+}
+\pointformat{[\thepoints]}
+\pointname{\null\patchqnumaddpoints}
+\newcommand{\pointsdec}[1]{%
+\pointname{#1}\patchqnumaddpoints
+}
+% \end{macrocode}%\iffalse
+% \begin{macrocode}
+%</bangorexam.cls>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%\fi
+%\Finale
+\endinput \ No newline at end of file