home *** CD-ROM | disk | FTP | other *** search
/ Fresh Fonts 1 / freshfonts1.bin / programs / amiga / pastex / macros / latex2e / contrib / supported / exams / exam.dtx (.txt) < prev    next >
LaTeX Document  |  1994-02-25  |  45KB  |  1,194 lines

  1. % \iffalse meta-comment
  2. % IMPORTANT NOTICE:
  3. % Please do not request updates from us directly.  Distribution is
  4. % done through Mail-Servers and TeX organizations.
  5. % You are not allowed to change this file.
  6. % You are NOT ALLOWED to distribute this file alone.  You are NOT
  7. % ALLOWED to take money for the distribution or use of either this
  8. % file or a changed version, except for a nominal charge for copying
  9. % etc.
  10. % \fi
  11. % \CheckSum{1240}
  12. %% \CharacterTable
  13. %%  {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
  14. %%   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
  15. %%   Digits        \0\1\2\3\4\5\6\7\8\9
  16. %%   Exclamation   \!     Double quote  \"     Hash (number) \#
  17. %%   Dollar        \$     Percent       \%     Ampersand     \&
  18. %%   Acute accent  \'     Left paren    \(     Right paren   \)
  19. %%   Asterisk      \*     Plus          \+     Comma         \,
  20. %%   Minus         \-     Point         \.     Solidus       \/
  21. %%   Colon         \:     Semicolon     \;     Less than     \<
  22. %%   Equals        \=     Greater than  \>     Question mark \?
  23. %%   Commercial at \@     Left bracket  \[     Backslash     \\
  24. %%   Right bracket \]     Circumflex    \^     Underscore    \_
  25. %%   Grave accent  \`     Left brace    \{     Vertical bar  \|
  26. %%   Right brace   \}     Tilde         \~}
  27. % \changes{3.0a}{1994/02/13}{First version for LaTeX2E and docstrip}
  28. % \title{Typesetting of Exams for \LaTeX{} version 2e}
  29. % \author{%
  30. % Copyright (C) 1994 by Hans van der Meer
  31. % \maketitle
  32. % \tableofcontents
  33. % \StopEventually{}    ^^A 
  34. % \section{Identification}
  35. %    This document classes can only be used with \LaTeXe, so we make
  36. %    sure that an appropriate message is displayed when another \TeX{}
  37. %    format is used.
  38. %    \begin{macrocode}
  39. %<*exam>
  40. \NeedsTeXFormat{LaTeX2e}[1993/12/01]
  41. %    \end{macrocode}
  42. %    We store the date, version and name of this file in three control
  43. %    sequences, for future use.
  44. %    \begin{macrocode}
  45. \def\fileversion{3.0a}
  46. \def\filedate{1994/02/13}
  47. \def\filename{exam.dtx}
  48. %    \end{macrocode}
  49. %    Announce the Class name and its version:
  50. %    \begin{macrocode}
  51. \ProvidesClass{exam}[\filedate\space Production of exams]
  52. %    \end{macrocode}
  53. %     And display it on the terminal (and the log file):
  54. %    \begin{macrocode}
  55. \typeout{Standard Document Class `exam' <\filedate>.}
  56. %    \end{macrocode}
  57. % \section{Declaration of Class Options}
  58. %    In this part we define the options for this class that are additional
  59. %    to those of its parent class.
  60. % \subsection{Switching answers on and off}
  61. % The flag |\ifanswers| governs the production of answers in the
  62. % typesetting of problems. With the |answers| options in the
  63. % optional argument of the document class this option is turned on.
  64. % At the same time an output stream is allocated on which a log of the
  65. % problems chosen will appear.
  66. % \begin{macro}{\ifanswers}
  67. %    \begin{macrocode}
  68. \newif\ifanswers
  69. \DeclareOption{answers}{\answerstrue\newwrite\listfile}
  70. %    \end{macrocode}
  71. % \end{macro}
  72. % \subsection{Typesetting a Catalogue of Problems}
  73. % The flag |\ifseries| initiates the production of a problem collection.
  74. % In order to show the answers too the |\ifanswer| flag is set, but
  75. % note that in this case no log of problems is produced.
  76. % Consequently on output to the problem log a test on |\ifseries|
  77. % is always necessary.
  78. % \begin{macro}{\ifseries}
  79. %    \begin{macrocode}
  80. \newif\ifseries
  81. \DeclareOption{series}{\seriestrue\answerstrue}
  82. %    \end{macrocode}
  83. % \end{macro}
  84. % \section{Loading of Parent Class}
  85. % Since the \emph{exam class} is implemented as a modification
  86. % of an existing document class, we must load the parent class.
  87. % However in order to make changes in parent class easy the
  88. % name of this class is parametrized in macro |\parentclass|.
  89. % Obvious candidates are \emph{article} and \emph{report}.
  90. % \begin{macro}{\parentclass}
  91. %    \begin{macrocode}
  92. \newcommand\parentclass{artikel1}
  93. %    \end{macrocode}
  94. % \end{macro}
  95. % The options of the |\documentclass| call which are not specific for the
  96. % \emph{exam class} must be passed to the parent class.
  97. % We take the opportunity to select some defaults, e.g.\ the
  98. % point size and the production of a titlepage (not automatically
  99. % added if the parent class is \emph{article}.
  100. % After this we process the local options and load the parent class.
  101. %    \begin{macrocode}
  102. \DeclareOption*{\PassOptionsToClass{\CurrentOption}{\parentclass}}
  103. \PassOptionsToClass{titlepage,12pt}{\parentclass}
  104. \ProcessOptions
  105. \LoadClass{\parentclass}
  106. %    \end{macrocode}
  107. % \subsection{Loading Additional Packages}
  108. % This is the place where additional packages can be loaded.
  109. % \section{Producing an Exam}
  110. % First we need a counter for exams, since in one run more than
  111. % one exam can be produced.
  112. % By stepping this counter we will effect the automatic reset of
  113. % the counter that numbers the problems and keep the scores.
  114. % \begin{macro}{\examnum}
  115. %    \begin{macrocode}
  116. \newcounter{examnum}
  117. %    \end{macrocode}
  118. % \end{macro}
  119. % Exams are produced within the |exam| environment. This environment takes
  120. % 2 parameters. The first is optional and is used for the initialization
  121. % of the random generator.\footnote{Not in use if a series
  122. % is run} The default value is 0, which effectively shuts off the
  123. % randomness.
  124. % The second parameter must be present, but may be empty.
  125. % It fixes the date for which the exam is planned; an empty argument
  126. % fills this with the current date.
  127. % \begin{environment}{exam}
  128. %    \begin{macrocode}
  129. \newenvironment{exam}[2][0]{%
  130.   \stepcounter{examnum}%
  131.   \@ifemptyarg{#2}{}{\date{#2}}%
  132. %    \end{macrocode}
  133. % When a series is run we start with a titlepage.\footnote{%
  134. % If not inhibited by the |notitlepage| option.} 
  135. % In the other cases production of the titlepage is deferred to the end of
  136. % the exam, so that we may print the number of problems it contains.
  137. % When an exam with answers is in production we write a few
  138. % messages to the problem log (date and starting value of the
  139. % random generator).
  140. %    \begin{macrocode}
  141.   \ifseries\SRset{0}\maketitle\else\SRset{#1}%
  142.     \ifanswers
  143.       \immediate\openout\listfile=\jobname.lst
  144.       \immediate\write\listfile{\Exam\space\@date}%
  145.       \immediate\write\listfile{Random generator = \SRvalue}%
  146.   \fi\fi
  147. %    \end{macrocode}
  148. % At each separate exam the first page gets the number one.
  149. %    \begin{macrocode}
  150.   \setcounter{page}{1}}{%
  151. %    \end{macrocode}
  152. % At the end of the exam, if necessary,
  153. % a list of problems and a titlepage are produced.
  154. %    \begin{macrocode}
  155.   \ifseries\else
  156.     \ifanswers\makelist\fi
  157.     \maketitle
  158.   \fi}
  159. %    \end{macrocode}
  160. % \end{environment}
  161. % \subsection{Problem listing}
  162. % The next macro typesets the list of problems chosen.
  163. % It also contains the score values for each problem and
  164. % a cumulative total of them.
  165. % The typesetting of this list is extremely primitive.
  166. % One minor note: the reading of the list is bracketed by
  167. % |\makeatletter| and |\makeatother| in order not to choke
  168. % in the |@| characters in its macro calls.
  169. % \begin{macro}{\makelist}
  170. %    \begin{macrocode}
  171. \newcommand\makelist{%    
  172.   \immediate\closeout\listfile
  173.   \immediate\openin\listfile=\jobname.lst
  174.   \newpage
  175.   \begin{ttfamily}
  176.     \parskip=\z@skip\parindent=\z@
  177.     \obeylines
  178.     \makeatletter
  179.     \InputIfFileExists{\jobname.lst}%
  180.       {}{\typeout{ERROR! File \jobname.lst not found}}%
  181.     \makeatother
  182.   \end{ttfamily}
  183.   \immediate\closein\listfile
  184.   \newpage}
  185. %    \end{macrocode}
  186. % \end{macro}
  187. % \section{Choice of Problems}
  188. % We start with a counter |\problemnum| with which the problems
  189. % of the exam are neatly numbered. This counter is automatically
  190. % reset each time a new |exam| environment is entered.
  191. % A second representation of the current problem is collected
  192. % in token register |\problemid|.
  193. % \begin{macro}{\problemnum}
  194. % \begin{macro}{\problemid}
  195. %    \begin{macrocode}
  196. \newcounter{problemnum}[examnum]
  197. \newtoks\problemid
  198. %    \end{macrocode}
  199. % \end{macro}
  200. % \end{macro}
  201. % Each question resides in its own file, which is called up
  202. % |\question|. Of its three parameters the first is
  203. % optional and provides a means of communication with the
  204. % problem itself. To achieve this the first 
  205. % argumen