diff options
Diffstat (limited to 'macros/latex/contrib/ntgclass/rapport.dtx')
-rw-r--r-- | macros/latex/contrib/ntgclass/rapport.dtx | 3560 |
1 files changed, 3560 insertions, 0 deletions
diff --git a/macros/latex/contrib/ntgclass/rapport.dtx b/macros/latex/contrib/ntgclass/rapport.dtx new file mode 100644 index 0000000000..9033f939ac --- /dev/null +++ b/macros/latex/contrib/ntgclass/rapport.dtx @@ -0,0 +1,3560 @@ +% \CheckSum{0} +% +% +% \iffalse +%<*dtx> +\Providesfile{wijzer.dtx} +%</dtx> +%<class>\NeedsTeXFormat{LaTeX2e} +%<class>\ProvidesClass{wijzer} +%<driver>\ProvidesFile{wijzer.drv} +%\Providesfile{wijzer.dtx} + [PTT Research computer handboeken] +% +%<*driver> +\documentclass{ptt-ltxdoc} +\usepackage[dutch]{babel} +\CodelineNumbered +\CodelineIndex +\EnableCrossrefs +\DoNotIndex{\',\.,\@M,\@@input,\@addtoreset,\@arabic,\@badmath} +\DoNotIndex{\@centercr,\@cite} +\DoNotIndex{\@dotsep,\@empty,\@float,\@gobble,\@gobbletwo,\@ignoretrue} +\DoNotIndex{\@input,\@ixpt,\@m} +\DoNotIndex{\@minus,\@mkboth,\@ne,\@nil,\@nomath,\@plus,\@set@topoint} +\DoNotIndex{\@tempboxa,\@tempcnta,\@tempdima,\@tempdimb} +\DoNotIndex{\@tempswafalse,\@tempswatrue,\@viipt,\@viiipt,\@vipt} +\DoNotIndex{\@vpt,\@warning,\@xiipt,\@xipt,\@xivpt,\@xpt,\@xviipt} +\DoNotIndex{\@xxpt,\@xxvpt,\\,\ ,\addpenalty,\addtolength,\addvspace} +\DoNotIndex{\advance,\Alph,\alph} +\DoNotIndex{\arabic,\ast,\begin,\begingroup,\bfseries,\bgroup,\box} +\DoNotIndex{\bullet} +\DoNotIndex{\cdot,\cite,\CodelineIndex,\cr,\day,\DeclareOption} +\DoNotIndex{\def,\DisableCrossrefs,\divide,\DocInput,\documentclass} +\DoNotIndex{\DoNotIndex,\egroup,\ifdim,\else,\fi,\em,\endtrivlist} +\DoNotIndex{\EnableCrossrefs,\end,\end@dblfloat,\end@float,\endgroup} +\DoNotIndex{\endlist,\everycr,\everypar,\ExecuteOptions,\expandafter} +\DoNotIndex{\fbox} +\DoNotIndex{\filedate,\filename,\fileversion,\fontsize,\framebox,\gdef} +\DoNotIndex{\global,\halign,\hangindent,\hbox,\hfil,\hfill,\hrule} +\DoNotIndex{\hsize,\hskip,\hspace,\hss,\if@tempswa,\ifcase,\or,\fi,\fi} +\DoNotIndex{\ifhmode,\ifvmode,\ifnum,\iftrue,\ifx,\fi,\fi,\fi,\fi,\fi} +\DoNotIndex{\input} +\DoNotIndex{\jobname,\kern,\leavevmode,\let,\leftmark} +\DoNotIndex{\list,\llap,\long,\m@ne,\m@th,\mark,\markboth,\markright} +\DoNotIndex{\month,\newcommand,\newcounter,\newenvironment} +\DoNotIndex{\NeedsTeXFormat,\newdimen} +\DoNotIndex{\newlength,\newpage,\nobreak,\noindent,\null,\number} +\DoNotIndex{\numberline,\OldMakeindex,\OnlyDescription,\p@} +\DoNotIndex{\pagestyle,\par,\paragraph,\paragraphmark,\parfillskip} +\DoNotIndex{\penalty,\PrintChanges,\PrintIndex,\ProcessOptions} +\DoNotIndex{\protect,\ProvidesClass,\raggedbottom,\raggedright} +\DoNotIndex{\refstepcounter,\relax,\renewcommand,\reset@font} +\DoNotIndex{\rightmargin,\rightmark,\rightskip,\rlap,\rmfamily,\roman} +\DoNotIndex{\roman,\secdef,\selectfont,\setbox,\setcounter,\setlength} +\DoNotIndex{\settowidth,\sfcode,\skip,\sloppy,\slshape,\space} +\DoNotIndex{\symbol,\the,\trivlist,\typeout,\tw@,\undefined,\uppercase} +\DoNotIndex{\usecounter,\usefont,\usepackage,\vfil,\vfill,\viiipt} +\DoNotIndex{\viipt,\vipt,\vskip,\vspace} +\DoNotIndex{\wd,\xiipt,\year,\z@} +\newcommand{\m}[1]{\mbox{$\langle$\it #1\/$\rangle$}} +\providecommand{\marg}[1]{{\ttfamiliy\char`\{}\m{#1}{\ttfamiliy\char`\}}} +\providecommand{\oarg}[1]{{\ttfamiliy[}\m{#1}{\ttfamiliy]}} +\begin{document} +\DocInput{wijzer.dtx} +\clearpage +\PrintIndex +\end{document} +%</driver> +% \fi +% +% \GetFileInfo{wijzer.dtx} +% \title{Document Class \texttt{wijzer}} +% \author{Johannes Braams} +% \date{Version~\fileversion, dated~\filedate} +% \maketitle +% \tableofcontents +% \clearpage +% +% \StopEventually{} ^^A +% +% \section{Introduction} +% +% \section{The {\sc docstrip} modules} +% +% The following modules are used in the implementation to direct +% {\sc docstrip} in generating the external files: +% \begin{center} +% \begin{tabular}{ll} +% class & produce the document class\\ +% type1 & produce the `1' variants of the classes\\ +% type3 & produce the `3' variants of the classes\\ +% driver & produce a documentation driver file \\ +% \end{tabular} +% \end{center} +% +% \section{Initial Code} +% +% In this part we define a few commands that are used later on. +% +% \begin{macro}{\@ptsize} +% This control sequence is used to store the second digit of the +% pointsize we are typesetting in. So, normally, it's value is one +% of 0, 1 or 2. +% \begin{macrocode} +%<*class> +\newcommand\@ptsize{} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\if@restonecol} +% When the document has to printed in two columns, we sometimes +% have to temporarily switch to one column. This switch is used to +% remember to switch back. +% \begin{macrocode} +\newif\if@restonecol +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\if@titlepage} +% A switch to indicate if a titlepage has to be produced. +% \begin{macrocode} +\newif\if@titlepage +\@titlepagetrue +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\if@openright} +% A switch to indicate if chapters must start on a right-hand page. +% The default for the report class is no; for the book class it's +% yes. +% \begin{macrocode} +\newif\if@openright +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\if@openbib} +% A switch to indicate if the bibliography has to be produced in +% the ``open'' format. The default is to use a ``closed'' format. +% \begin{macrocode} +\newif\if@openbib +\@openbibfalse +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\if@oldtoc} +% A switch to indicate if `old' layout of the table of contents +% should be produced. These document classes normally produce a +% table of contents that looks quite different from what the +% standard classes produce. +% \begin{macrocode} +\newif\if@oldtoc +\@oldtocfalse +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\if@allcaps} +% By default the text on the titlepage is set in capital letters. +% This can be disabled by the option \Lopt{mctitle}, which sets the +% switch |\if@allcaps| to false. +% \begin{macrocode} +\newif\if@allcaps +% \end{macro} +% +% \begin{macro}{\if@titlecentered} +% In the document classes \file{wijzer3} the +% default placement of the title that is produced by |\maketitle| +% is flushleft. This can be changed by the switch +% |\if@titlecentered|. +% \begin{macrocode} +%<+type3>\newif\if@titlecentered +%<+type3>\@titlecenteredfalse +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\if@revlabel} +% These document classes need to be able to change the positioning +% of the label in labeled lists. This switch is used for that +% purpose. +% \begin{macrocode} +\newif\if@revlabel +% \end{macrocode} +% \end{macro} +% +% \section{Declaration of Options} +% +% +% \subsection{Setting Paper Sizes} +% +% The variables |\paperwidth| and |\paperheight| should reflect the +% physical paper size after trimming. For desk printer output this +% is usually the real paper size since there is no post-processing. +% Classes for real book production will probably add other paper +% sizes and additionally the production of crop marks for trimming. +% \begin{macrocode} +\DeclareOption{a4paper} + {\setlength\paperheight {297mm}% + \setlength\paperwidth {210mm}} +\DeclareOption{a5paper} + {\setlength\paperheight {210mm}% + \setlength\paperwidth {148mm}} +\DeclareOption{b5paper} + {\setlength\paperheight {250mm}% + \setlength\paperwidth {176mm}} +\DeclareOption{letterpaper} + {\setlength\paperheight {11in}% + \setlength\paperwidth {8.5in}} +\DeclareOption{legalpaper} + {\setlength\paperheight {14in}% + \setlength\paperwidth {8.5in}} +\DeclareOption{executivepaper} + {\setlength\paperheight {10.5in}% + \setlength\paperwidth {7.25in}} +% \end{macrocode} +% +% The option \Lopt{landscape} switches the values of |\paperheight| +% and |\paperwidth|, assuming the dimensions wer given for portrait +% paper. +% \begin{macrocode} +\DeclareOption{landscape} + {\setlength\@tempdima {\paperheight}% + \setlength\paperheight {\paperwidth}% + \setlength\paperwidth {\@tempdima}} +% \end{macrocode} +% +% \subsection{Choosing the type size} +% +% The type size options are handled by defining |\@ptsize| to contain +% the last digit of the size in question and branching on |\ifcase| +% statements. This is done for historical reasons to stay compatible +% with other packages that use the |\@ptsize| variable to select +% special actions. It makes the declarations of size options less +% than 10pt difficult, although one can probably use \texttt{9} +% and \texttt{8} assuming that a class won't define both +% \Lopt{8pt} and \Lopt{18pt} options. +% +% \begin{macrocode} +\DeclareOption{10pt}{\renewcommand\@ptsize{0}} +\DeclareOption{11pt}{\renewcommand\@ptsize{1}} +\DeclareOption{12pt}{\renewcommand\@ptsize{2}} +% \end{macrocode} +% +% +% \subsection{Two-side or one-side printing} +% +% For two-sided printing we use the switch |\if@twoside|. In +% addition we have to set the |\if@mparswitch| to get any margin +% paragraphs into the outside margin. +% \begin{macrocode} +\DeclareOption{oneside}{\@twosidefalse \@mparswitchfalse} +\DeclareOption{twoside}{\@twosidetrue \@mparswitchtrue} +% \end{macrocode} +% +% +% \subsection{Draft option} +% +% If the user requests \Lopt{draft} we show any overfull boxes. +% We could probably add some more interesting stuff to this option. +% \begin{macrocode} +\DeclareOption{draft}{\setlength\overfullrule{5pt}} +\DeclareOption{final}{\setlength\overfullrule{0pt}} +% \end{macrocode} +% +% \subsection{Titlepage option} +% An article usually has no separate titlepage, but the user can +% request one. +% \begin{macrocode} +\DeclareOption{titlepage}{\@titlepagetrue} +\DeclareOption{notitlepage}{\@titlepagefalse} +% \end{macrocode} +% +% \subsection{openright option} +% This option determines whether or not a chapter must start on +% a right-hand page +% request one. +% \begin{macrocode} +\DeclareOption{openright}{\@openrighttrue} +\DeclareOption{openany}{\@openrightfalse} +% \end{macrocode} +% +% For these document classes there used to be a file +% \file{voorwerk.sty} which was a replacement for +% \file{titlepag.sty}. Therefore we also have the option +% \Lopt{voorwerk}. +% \begin{macrocode} +\DeclareOption{voorwerk}{\@titlepagetrue} +\DeclareOption{geenvoorwerk}{\@titlepagefalse} +% \end{macrocode} +% +% +% \subsection{Table of contents formatting} +% +% This document class uses a new layout for the table of contents, +% but in order to maintain compatibility with the standard \LaTeXe +% document classes we supply an extra option: \Lopt{oldtoc}. If +% this option is specified the switch |\if@oldtoc| will be set +% true. +% \begin{macrocode} +\DeclareOption{oldtoc}{\@oldtoctrue} +% \end{macrocode} +% +% \subsection{Formatting of the title} +% +% The option \Lopt{titlecentered} changes the behaviour of the +% |\maketitle| command. It then produces a title like it does for +% the \file{artikel1} document class. +% \begin{macrocode} +%<+type3>\DeclareOption{titlecentered}{\@titlecenteredtrue} +% \end{macrocode} +% +% In this document class the titlepage uses all capital +% letters. The option \Lopt{mctitle} (for `mixed case') prevents +% this. +% \begin{macrocode} +\DeclareOption{mctitle}{\@allcapsfalse} +\DeclareOption{uctitle}{\@allcapstrue} +% \end{macrocode} +% +% \subsection{Twocolumn printing} +% +% Two-column and one-column printing is again realized via a switch. +% \begin{macrocode} +\DeclareOption{onecolumn}{\@twocolumnfalse} +\DeclareOption{twocolumn}{\@twocolumntrue} +% \end{macrocode} +% +% \subsection{Equation numbering on the left} +% +% The option \Lopt{leqno} can be used to get the equation numbers +% on the left side of the equation. +% \begin{macrocode} +\DeclareOption{leqno}{\input{leqno.clo}} +% \end{macrocode} +% +% \subsection{Flush left displays} +% +% The option \Lopt{fleqn} redefines the displayed math environmens +% in such a way that they come out flush left, with an indentation +% of |\mathindent| from the prevailing left margin. +% \begin{macrocode} +\DeclareOption{fleqn}{\input{fleqn.clo}} +% \end{macrocode} +% +% \subsection{Open bibliography} +% +% The option \Lopt{openbib} produces the ``open'' bibliography +% style, in which each block starts on a new line, and succeeding +% lines in a block are indented by |\bibindent|. +% \begin{macrocode} +\DeclareOption{openbib}{\@openbibtrue} +% \end{macrocode} +% +% +% \section{Executing Options} +% +% Here we execute the default options to initialize certain +% variables. +% \begin{macrocode} +\ExecuteOptions{a4paper,10pt,oneside,onecolumn,final,uctitle,openany} +% \end{macrocode} +% +% The |\ProcessOptions| command causes the execution of the code +% for every option \Lopt{FOO} +% which is declared and for which the user typed +% the \Lopt{FOO} option in his +% |\documentclass| command. For every option \Lopt{BAR} he typed, +% which is not declared, the option is assumed to be a global option. +% All options will be passed as document options to any +% |\usepackage| command in the document preamble. +% \begin{macrocode} +\ProcessOptions +% \end{macrocode} +% Now that all the options have been executed we can load the +% chosen class option file that contains all size dependent code. +% \begin{macrocode} +\input{ntg1\@ptsize.clo} +% \end{macrocode} +% +% \section{Loading Packages} +% +% These class files do not load additional packages. +% +% +% \section{Document Layout} +% \label{sec:maincode} +% +% In this section we are finally dealing with the nasty typographical +% details. +% +% \subsection{Paragraphing} +% +% \begin{macro}{\lineskip} +% \begin{macro}{\normallineskip} +% These parameters control \TeX's behaviour when two lines tend to +% come too close together. +% \begin{macrocode} +\setlength\lineskip{1\p@} +\setlength\normallineskip{1\p@} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\baselinestretch} +% This is used as a multiplier for |\baselineskip|. The default is +% to {\em not\/} stretch the baselines. +% \begin{macrocode} +\renewcommand\baselinestretch{} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\unitindent} +% These document classes all use a single dimension for a number of +% layout parameters: +% \begin{itemize} +% \item the label width in section heading, +% \item the |\parindent| +% \item the footnote label indent (= half |\unitindent|) +% \item listindent on the first level +% \end{itemize} +% \begin{macrocode} +\newdimen\unitindent +% \end{macrocode} +% The default setting accomodates three levels of single digit +% section numbering. +% \begin{macrocode} +{\setbox0\hbox{\normalsize\rmfamily 2.2.2\hskip.5em} + \global\unitindent=\wd0} +% \end{macrocode} +% +% \begin{macro}{\othermargin} +% Other indentations are maximal label width plus white space. +% \begin{macrocode} +\newdimen\othermargin +{\setbox0\hbox{\normalsize (m)\hskip.6em}\global\othermargin=\wd0} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{if@needwriteindent} +% If this is not enough, a new width is calculated, set, and the +% file{.aux} file contains an instruction that will set +% |\unitindent| on the next run. +% +% For this we need a switch +% \begin{macrocode} +\newif\if@needwriteindent +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@indentset} +% And a command that sets the various parameters. +% \begin{macrocode} +\newcommand\@indentset{% +%<-type3> \global\parindent=\unitindent + \global\leftmargini=\unitindent + \global\@needwriteindenttrue} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@writeindent} +% The |\end{document}| command will call |\@writeindent| to write +% the final width of |\unitindent| on the \file{.aux} file. Also a +% command is written to set |\unitindent|. To be compatible with +% other document classes a check is written to the \file{.aux} file +% for the existence of |\unitindent|. This prevents nasty errors +% when another document class is used. +% \begin{macrocode} +\newcommand\@writeindent[1]{\immediate\write\@mainaux + {\string\@ifundefined{unitindent}{\string\newdimen\string\unitindent + \let\string\@indentset\relax}{}} + \immediate\write\@mainaux{\global\string\unitindent=#1\string\relax + \string\@indentset \string\relax}} +% \end{macrocode} +% \end{macro} +% +% We need to use the hook into |\end{document}| to write the final +% value of |\unitindent| om the file{.aux} file for the next run. +% \begin{macrocode} +\AtEndDocument{% + \if@filesw + \if@needwriteindent + \@writeindent{\the\unitindent} + \fi + \fi} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\parskip} +% \begin{macro}{\parindent} +% |\parskip| gives extra vertical space between paragraphs and +% |\parindent| is the width of the paragraph indentation. The value +% of |\parindent| depends on whether we are in two column mode. +% \begin{macrocode} +%<*type1> +\setlength\parskip{0\p@} +\setlength\parindent{\unitindent} +%</type1> +%<*type3> +\setlength\parskip{.5\baselineskip \@plus .1\baselineskip + \@minus .1\baselineskip} +\setlength\parindent{\z@} +%</type3> +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\@lowpenalty} +% \begin{macro}{\@medpenalty} +% \begin{macro}{\@highpenalty}% +% The commands |\nopagebreak| and |\nolinebreak| put in penalties +% to discourage these breaks at the point they are put in. +% They use |\@lowpenalty|, |\@medpenalty| or |\@highpenalty|, +% dependent on their argument. +% \begin{macrocode} +\@lowpenalty 51 +\@medpenalty 151 +\@highpenalty 301 +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\clubpenalty} +% \begin{macro}{\widowpenalty} +% These penalties are use to discourrage club and widow lines. +% Because we use their default values we only show them here, +% commented out. +% \begin{macrocode} +% \clubpenalty 150 +% \widowpenalty 150 +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\displaywidowpenalty} +% \begin{macro}{\predisplaypenalty} +% \begin{macro}{\postdisplaypenalty} +% Discourrage (but not so much) widows in front of a math display +% and forbid breaking directly in front of a display. Allow break +% after a display without a penalty. Again the default values are +% used, therefore we only show them here. +% \begin{macrocode} +% \displaywidowpenalty 50 +% \predisplaypenalty 10000 +% \postdisplaypenalty 0 +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\interlinepenalty} +% Allow the breaking of a page in the middle of a paragraph. +% \begin{macrocode} +% \interlinepenalty 0 +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\brokenpenalty} +% We allow the breaking of a page after a hyphenated line. +% \begin{macrocode} +% \brokenpenalty 0 +% \end{macrocode} +% \end{macro} +% +% \subsubsection{Float placement parameters} +% +% All float parameters are given default values in the \LaTeXe{} +% kernel. For this reason counters only need to be set with +% |\setcounter| and other parameters are set using |\renewcommand|. +% +% \paragraph{Limits for the placement of floating objects} +% +% \begin{macro}{\c@topnumber} +% The \Lcount{topnumber} counter holds the maximum number of +% floats that can appear on the top of a text page. +% \begin{macrocode} +\setcounter{topnumber}{2} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\topfraction} +% This indicates the maximum part of a text page that can be +% occupied by floats at the top. +% \begin{macrocode} +\renewcommand\topfraction{.7} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\c@bottomnumber} +% The \Lcount{bottomnumber} counter holds the maximum number of +% floats that can appear on the bottom of a text page. +% \begin{macrocode} +\setcounter{bottomnumber}{1} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\bottomfraction} +% This indicates the maximum part of a text page that can be +% occupied by floats at the bottom. +% \begin{macrocode} +\renewcommand\bottomfraction{.3} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\c@totalnumber} +% This indicates the maximum number of floats that can appear on +% any text page. +% \begin{macrocode} +\setcounter{totalnumber}{3} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\textfraction} +% This indicates the minimum part of a text page that has to be +% occupied by text. +% \begin{macrocode} +\renewcommand\textfraction{.2} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\floatpagefraction} +% This indicates the minimum part of a page that has to be +% occupied by floating objects before a `float page' is produced. +% \begin{macrocode} +\renewcommand\floatpagefraction{.5} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\c@dbltopnumber} +% The \Lcount{dbltopnumber} counter holds the maximum number of +% two column floats that can appear on the top of a two column text +% page. +% \begin{macrocode} +\setcounter{dbltopnumber}{2} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\dbltopfraction} +% This indicates the maximum part of a two column text page that +% can be occupied by two column floats at the top. +% \begin{macrocode} +\renewcommand\dbltopfraction{.7} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\dblfloatpagefraction} +% This indicates the minimum part of a page that has to be +% occupied by two column wide floating objects before a `float +% page' is produced. +% \begin{macrocode} +\renewcommand\dblfloatpagefraction{.5} +% \end{macrocode} +% \end{macro} +% +% \subsection{Page Styles} +% +% The page style \pstyle{foo} is defined by defining the command +% |\ps@foo|. This command should make only local definitions. +% There should be no stray spaces in the definition, since they +% could lead to mysterious extra spaces in the output (well, that's +% something that should be always avoided). +% +% \begin{macro}{\@evenhead} +% \begin{macro}{\@oddhead} +% \begin{macro}{\@evenfoot} +% \begin{macro}{\@oddfoot} +% The |\ps@...| command defines the macros |\@oddhead|, +% |\@oddfoot|, |\@evenhead|, and |\@evenfoot| to define the running +% heads and feet---e.g., |\@oddhead| is the macro to produce the +% contents of the heading box for odd-numbered pages. It is called +% inside an |\hbox| of width |\textwidth|. +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\thispagestyle} +% Several commands (|\index|, |\maketitle|) give a +% |\thispagestyle{plain}| command, which will overrule a +% |\pagestyle{empty}| command. This situation is almost always +% unwanted. Therefore we provide a more careful definition. +% +% First save the original definition. +% \begin{macrocode} +\let\Thispagestyle\thispagestyle +% \end{macrocode} +% Then we provide the new definition, for which we must also adapt +% |\pagestyle| a little. +% \begin{macrocode} +\newcommand\@emptypagestyle{empty} +\renewcommand\pagestyle[1]{\@nameuse{ps@#1}\def\@currentpagestyle{#1}} +\renewcommand\thispagestyle[1]{% + \ifx\@currentpagestyle\@emptypagestyle + \else + \global\@specialpagetrue + \gdef\@specialstyle{#1}% + \fi} +% \end{macrocode} +% \end{macro} +% +% \subsubsection{Marking conventions} +% +% To make headings determined by the sectioning commands, the page +% style defines the commands |\chaptermark|, |\sectionmark|, +% \ldots,\\ +% where |\chaptermark{|\meta{TEXT}|}| is called by +% |\chapter| to set a mark, and so on. +% +% The |\...mark| commands and the |\...head| macros are defined +% with the help of the following macros. (All the |\...mark| +% commands should be initialized to no-ops.) +% +% \LaTeX{} extends \TeX's |\mark| facility by producing two kinds +% of marks, a `left' and a `right' mark, using the following +% commands: +% \begin{flushleft} +% |\markboth{|\meta{LEFT}|}{|\meta{RIGHT}|}|: Adds both marks. +% +% |\markright{|\meta{RIGHT}|}|: Adds a `right' mark. +% +% |\leftmark|: Used in the |\@oddhead|, |\@oddfoot|, |\@evenhead| +% or |\@evenfoot| macros, it gets the current `left' +% mark. |\leftmark| works like \TeX's |\botmark| +% command. +% +% |\rightmark|: Used in the |\@oddhead|, |\@oddfoot|, |\@evenhead| +% or |\@evenfoot| macros, it gets the current +% `right' mark. |\rightmark| works like \TeX's +% |\firstmark| command. +% \end{flushleft} +% +% The marking commands work reasonably well for right marks +% `numbered within' left marks--e.g., the left mark is changed by a +% |\chapter| command and the right mark is changed by a |\section| +% command. However, it does produce somewhat anomalous results if +% two |\markboth|'s occur on the same page. +% +% +% Commands like |\tableofcontents| that should set the marks in some +% page styles use a |\@mkboth| command, which is |\let| by the +% pagestyle command (|\ps@...|) to |\markboth| for setting the +% heading or to |\@gobbletwo| to do nothing. +% +% +% \begin{macrocode} +% %%%\mark{{}{}} % Initializes TeX's marks <--- can vanish +% \end{macrocode} +% +% \subsubsection{Defining the page styles} +% \label{sec:pagestyle} +% +% The pagestyle \pstyle{empty} is defined in \file{latex.dtx}, but +% the pagestyle \pstyle{plain} is slightly altered here. The +% difference is that the page numbers are set flush right in +% onesided and flush left and right in the twosided style. +% +% \begin{macro}{\ps@plain} +% +% \begin{macrocode} +\renewcommand\ps@plain{% +% \end{macrocode} +% The running head are empty in this pagestyle, the page number +% appears in the running foot. +% \begin{macrocode} + \let\@oddhead\@empty\let\@evenhead\@empty + \def\@oddfoot{\hfil\PageFont\thepage}% + \if@twoside + \def\@evenfoot{\PageFont\thepage\hfil}% + \else + \let\@evenfoot\@oddfoot + \fi +% \end{macrocode} +% Because the running heads should be empty we |let| |\@mkboth| to +% |\@gobbletwo|, thus disabling the mark commands. +% \begin{macrocode} + \let\@mkboth\@gobbletwo} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\ps@headings} +% The definition of the page style \pstyle{headings} has to be +% different for two sided printing than it is for one sided +% printing. +% +% \begin{macrocode} +\if@twoside + \def\ps@headings{% +% \end{macrocode} +% The running feet are empty in this page style, the running head +% contains the page number and one of the marks. +% \begin{macrocode} + \let\@oddfoot\@empty\let\@evenfoot\@empty + \def\@evenhead{{\PageFont\thepage}\hfil\MarkFont\leftmark}% + \def\@oddhead{{\MarkFont\rightmark}\hfil\PageFont\thepage}% +% \end{macrocode} +% +% When using this page style, the contents of the running head is +% determined by the chapter and section titles. So we |\let| +% |\@mkboth| to |\markboth|. +% \begin{macrocode} + \let\@mkboth\markboth +% \end{macrocode} +% +% In thisdocument class we use the |\chaptermark| +% and |\sectionmark| macros to fill the running heads. +% +% Note the use of |##1| for the parameter of the |\chaptermark| +% command, which will be defined when |\ps@headings| is executed. +% +% \begin{macrocode} + \def\chaptermark##1{% + \markboth {\uppercase{\ifnum \c@secnumdepth >\m@ne + \@chapapp\ \thechapter. \ \fi + ##1}}{}}% + \def\sectionmark##1{% + \markright {\uppercase{\ifnum \c@secnumdepth >\z@ + \thesection. \ \fi + ##1}}}} +% \end{macrocode} +% +% The definition of |\ps@headings| for one sided printing can be +% much simpler, because we treat even and odd pages the same. +% Therefore we don't need to define |\@even...|. +% \begin{macrocode} +\else + \def\ps@headings{% + \let\@oddfoot\@empty + \def\@oddhead{{\MarkFont\rightmark}\hfil\PageFont\thepage}% + \let\@mkboth\markboth +% \end{macrocode} +% We use |\markright| now instead of |\markboth| as we did for two +% sided printing. +% \begin{macrocode} + \def\chaptermark##1{% + \markright {\uppercase{\ifnum \c@secnumdepth >\m@ne + \@chapapp\ \thechapter. \ \fi + ##1}}}} +\fi +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\ps@myheadings} +% The definition of the page style \pstyle{myheadings} is fairly +% simple because the user determines the contents of the running +% head himself by using the |\markboth| and |\markright| commands. +% +% \begin{macrocode} +\def\ps@myheadings{% + \let\@oddfoot\@empty\let\@evenfoot\@empty + \def\@evenhead{{\PageFont\thepage}\hfil\MarkFont\leftmark}% + \def\@oddhead{{\MarkFont\rightmark}\hfil\PageFont\thepage}% +% \end{macrocode} +% +% We have to make sure that the marking commands that are used by +% the chapter and section headings are disabled. We do this +% |\let|ting them to a macro that gobbles its argument(s). +% \begin{macrocode} + \let\@mkboth\@gobbletwo + \let\chaptermark\@gobble + \let\sectionmark\@gobble + } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\PageFont} +% \begin{macro}{\MarkFont} +% These macros are use to store the fonts that are used to typeset +% the pagenumber (|\PageFont|) and the marks (|\MarkFont|) in the +% running head and feet. +% \begin{macrocode} +\newcommand\PageFont{\rmfamily} +\newcommand\MarkFont{\slshape} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\RunningFonts} +% Use this macro to change the fonts that are used in the running +% heads. +% \begin{macrocode} +\newcommand\RunningFonts[2]{% + \renewcommand\PageFont{#1}\renewcommand\MarkFont{#2}} +% \end{macrocode} +% \end{macro} +% +% \section{Document Markup} +% +% \subsection{The title} +% +% \begin{macro}{\title} +% \begin{macro}{\author} +% \begin{macro}{\date} +% These three macros are provided by \file{latex.dtx} to provide +% information about the title, author(s) and date of the document. +% The information is stored away in internal control sequences. +% It is the task of the |\maketitle| command to use the +% information provided. The definitions of these macros are shown +% here for information. +% \begin{macrocode} +% \newcommand\title[1]{\gdef\@title{#1}} +% \newcommand\author[1]{\gdef\@author{#1}} +% \newcommand\date[1]{\gdef\@date{#1}} +% \end{macrocode} +% The |\date| macro gets today's date by default. +% \begin{macrocode} +% \gdef\@date{\today} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\TitleFont} +% This selects the font to use in the title of the document. +% \begin{macrocode} +\newcommand\TitleFont{\bfseries} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\maketitle} +% The definition of |\maketitle| depends on whether a seperate +% title page is made. This is the default for this document class. +% Note that the title, author and date information is printed in +% capital letters by default. This can be changed by the option +% \Lopt{mctitle}. +% +% When we are making a title page, we locally redefine +% |\footnotesize| and |\footnoterule| to change the appearance of +% the footnotes that are produced by the |\thanks| command. +% \begin{macrocode} +\renewcommand\TitleFont{\rmfamily} +\newcommand\maketitle{% + \begin{titlepage}% + \let\footnotesize\small + \let\footnoterule\relax +% \end{macrocode} +% Footnotes on the titlepage, generated by the use of |\thanks|, +% use symbols in these document classes. +% \begin{macrocode} + \long\def\@makefntext##1{\parindent\z@ + \def\labelitemi{--}\@revlabeltrue + \leavevmode$\m@th^{\@thefnmark}$\kern1em\relax ##1} + \renewcommand\thefootnote{\fnsymbol{footnote}}% +% \end{macrocode} +% We center the entire title vertically; the centering is set off a +% little by adding a |\vskip|. In compatibility mode the pagenumber +% is set to 0 to keep the behaviour of \LaTeX\ 2.09 style files +% \begin{macrocode} + \if@compatibility\setcounter{page}{0}\fi + \null\vfil + \vskip 60\p@ +% \end{macrocode} +% Then we set the title, in a |\LARGE| font; leave a little space +% and set the author(s) in a |\large| font. We do this inside a +% tabular environment to get them in a single column. +% Before the date we leave a little whitespace again. +% \begin{macrocode} + \begin{center}% + \TitleFont + {\LARGE \def\\{\penalty -\@M} + \if@allcaps + \expandafter\uc@nothanks\@title\thanks\relax + \else + \@title + \fi\par}% + \vskip 3em% + {\large + \lineskip .75em \parindent\z@ + \begin{tabular}[t]{c}% + \if@allcaps + \expandafter\uc@authornothanks\@author\and\relax + \else + \@author + \fi + \end{tabular}\par}% + \vskip 1.5em% + {\large + \if@allcaps + \uppercase\expandafter{\@date}% + \else + \@date + \fi\par}% + \end{center}\par +% \end{macrocode} +% Then we call |\@thanks| to print the information that goes into +% the footnote and finish the page. +% \begin{macrocode} + \@thanks + \vfil\null + \end{titlepage}% +% \end{macrocode} +% We reset the \Lcount{footnote} counter, disable |\thanks| and +% |\maketitle| and save some storage space by emptying the internal +% information macros. +% \begin{macrocode} + \setcounter{footnote}{0}% + \let\thanks\relax\let\maketitle\relax + \gdef\@thanks{}\gdef\@author{}\gdef\@title{}} +% \end{macrocode} +% +% We want to have the title, author and date information in +% uppercase, but we have to be very carefull not to put too much +% text in uppercase. The macros that perform the filtering of texts +% that shouldn't be in uppercase were developped with th help of +% Howard Trickey. +% +% \begin{macro}{\uc@nothanks} +% This macro takes all the text up to the first use of |\thanks| +% and passes it to |\uppercase|. The use of |\futurelet| will store +% the token \emph{after} the |\thanks| in |\@tempa|. The macro +% |\u@tx| uses that information to determine what to do next. +% \begin{macrocode} +\def\uc@nothanks#1\thanks{\uppercase{#1}\futurelet\@tempa\uc@tx} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\uc@authornothanks} +% A document can have more than one author. Usually they are +% seperated with |\and|. For each author a footnote --using +% |\thanks| can be present. Therefore this macro takes all the text +% up to the first use of |\and|, thus picking up all the +% information for one author. This is than passsed to +% |\uc@nothanks|, which checks for the presence of |\thanks|. For +% this to work the argument of |\uc@nothanks| has to be delimited +% by |\thanks\relax|. +% \begin{macrocode} +\def\uc@authornothanks#1\and{\uc@nothanks#1\thanks\relax +% \end{macrocode} +% Then we have to check whether the |\and| we ound earlier was put +% in by the user, in which case information for another user will +% follow, or by the call from another macro, in which case the +% |\and| will be followed by a |\relax| token. The |\futurelet| +% contstruct stores the first token \emph{after} the |\and| in +% |\@tempa| to be inspected by |\u@ax|. +% \begin{macrocode} + \futurelet\@tempa\uc@ax} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\uc@ax} +% When |\@tempa| contains a |\relax| token nothing needs to be +% done, when it doesn't we put in a linebreak |\\| the word `and' +% (stored in |\andname| so that this control sequence can be +% redeined for other languages), another linebreak and we call +% |\uc@authornothanks| to continue processing. The |\expandafter| +% lets \TeX\ see the |\fi| first. +% \begin{macrocode} +\def\uc@ax{% + \ifx\@tempa\relax + \else + \\ \andname \\ \expandafter\uc@authornothanks + \fi} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\uc@tx} +% This macro simply checks whether |\@tempa| contains a |\relax| +% token. When it doesn't further processing is performed by +% |\u@ty|. +% \begin{macrocode} +\def\uc@tx{\ifx\@tempa\relax + \else \expandafter\uc@ty \fi} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\uc@ty} +% The macro |\uc@ty| gets executed when the |\thanks| that +% delimited text earlier on in the processing had a real argument. +% In that case it was a |\thanks| put in by the user, \emph{not} by +% these macros. Therefore the argument is now passed to |\thanks| +% and processing continues by calling |\uc@nothanks|. +% \begin{macrocode} +\def\uc@ty#1{\thanks{#1}\uc@nothanks} +% \end{macrocode} +% \end{macro} +% +% When the title is not on a page of its own, the layout of the +% title is a little different. We use symbols to mark the footnotes +% and we have to deal with two column documents. +% +% Therefore we first start a new group to keep changes local. Then +% we redefine |\thefootnote| to use |\fnsymbol|; and change +% |\@makefnmark| so that footnotemarks have zero width (to make the +% centering of the author names look better). We also want raised +% footnotemarkers in the footnotes here. +% \begin{macrocode} +\else +\newcommand\maketitle{\par + \begingroup + \renewcommand\thefootnote{\fnsymbol{footnote}}% + \def\@makefnmark{\hbox to\z@{$\m@th^{\@thefnmark}$\hss}}% + \def\@makefntext{\@xmakefntext{$\m@th^{\@thefnmark}$}}% +% \end{macrocode} +% If this is a twocolumn document we start a new page in twocolumn +% mode, with the title set to the full width of the text. The +% actual printing of the title information is left to +% |\@maketitle|. +% \begin{macrocode} + \if@twocolumn + \ifnum \col@number=\@ne + \@maketitle + \else + \twocolumn[\@maketitle]% + \fi + \else +% \end{macrocode} +% When this is not a twocolumn document we just start a new page, +% prevent floating objects from appearing on the top of this page +% and print the title information. +% \begin{macrocode} + \newpage + \global\@topnum\z@ + \@maketitle + \fi +% \end{macrocode} +% This page gets a \pstyle{plain} layout. We call |\@thanks| to +% produce the footnotes. +% \begin{macrocode} + \thispagestyle{plain}\@thanks +% \end{macrocode} +% Now we can close the group, reset the \Lcount{footnote} counter, +% disable |\thanks|, |\maketitle| and |\@maketitle| and save some +% storage space by emptying the internal information macros. +% \begin{macrocode} + \endgroup + \setcounter{footnote}{0}% + \let\thanks\relax + \let\maketitle\relax\let\@maketitle\relax + \gdef\@thanks{}\gdef\@author{}\gdef\@title{}} +% \end{macrocode} +% +% \begin{macro}{\@maketitle} +% This macro takes care of formatting the title information when we +% have no seperate title page. +% +% We always start a new page, leave some white space and center the +% information. The title is set in a |\LARGE| font, the author +% names and the in a |\large| font. +% \begin{macrocode} +\def\@maketitle{% + \newpage + \null + \vskip 2em% +%<+type3>\if@titlecentered + \begin{center}% + {\LARGE \TitleFont \@title \par}% + \vskip 1.5em% + {\large \TitleFont + \lineskip .5em% + \begin{tabular}[t]{c}% + \@author + \end{tabular}\par}% + \vskip 1em% + {\large \TitleFont \@date}% + \end{center}% +%<*type3> + \else + {\LARGE \TitleFont \head@style \@title \par} \vskip 1.5em + {\large \TitleFont \lineskip .5em \tabcolsep\z@ + \def\and{%%% \begin{tabular} has already started + \end{tabular}\hskip 1em plus .17fil + \begin{tabular}[t]{l}}%% \end{tabular} will come + \begin{tabular}[t]{l}\@author\end{tabular}\par} + \vskip 1em {\large \TitleFont \@date} + \fi +%</type3> + \par + \vskip 1.5em} +\fi +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \subsection{Chapters and Sections} +% +% \subsubsection{Building blocks} +% The definitions in this part of the class file make use of two +% macros, |\@startsection| and |\secdef|, which are defined by +% \file{latex.dtx}. To understand what is going on here, we +% describe their syntax. +% +% The macro |\@startsection| has 6 required arguments, optionally +% followed by a $*$, an optional argument and a required argument: +% +% |\@startsection|\meta{name}\meta{level}\meta{indent}^^A +% \meta{beforeskip}\meta{afterskip}\meta{style} +% optional *\\ +% \null\hphantom{\bslash @startsection}^^A +% |[|\meta{altheading}|]|\meta{heading} +% +% It is a generic command to start a section, the arguments have +% the following meaning: +% +% \begin{description} +% \item[\meta{name}] The name of the user level command, e.g., +% `section'. +% \item[\meta{level}] A number, denoting the depth of the section +% -- e.g., chapter=1, section = 2, etc. A section number +% will be printed if and only if \meta{level} $<=$ the value +% of the \Lcount{secnumdepth} counter. +% \item[\meta{indent}] The indentation of the heading from the left +% margin +% \item[\meta{beforeskip}] The absolute value of this argument +% gives the skip to leave above the heading. If it is +% negative, then the paragraph indent of the text following +% the heading is suppressed. +% \item[\meta{afterskip}] If positive, this gives the skip to leave +% below the heading, else it gives the skip to leave to the +% right of a run-in heading. +% \item[\meta{style}] Commands to set the style of the heading. +% \item[$*$] When this is missing the heading is numbered and the +% corresponding counter is incremented. +% \item[\meta{altheading}] Gives an alternative heading to use in +% the table of contents and in the running heads. This should +% be present when the $*$ form is used. +% \item[\meta{heading}] The heading of the new section. +% \end{description} +% A sectioning command is normally defined to |\@startsection| and +% its first six arguments. +% +% The macro |\secdef| can be used when a sectioning command is +% defined without using |\@startsection|. It has two arguments: +% +% |\secdef|\meta{unstarcmds}\meta{starcmds} +% +% \begin{description} +% \item[\meta{unstarcmds}] Used for the normal form of the +% sectioning command. +% \item[\meta{starcmds}] Used for the $*$-form of the +% sectioning command. +% \end{description} +% +% You can use |\secdef| as follows: +% \begin{verbatim} +% \def\chapter { ... \secdef \CMDA \CMDB } +% \def\CMDA [#1]#2{ ... } % Command to define +% % \chapter[...]{...} +% \def\CMDB #1{ ... } % Command to define +% % \chapter*{...} +% \end{verbatim} +% +% \begin{macro}{\head@style} +% In the definition of chapter and section commands a number of +% settings frequently occur. Therefore we store them in a control +% sequence. +% +% Section headings are to be set extremely raggedright, with no +% hyphenations, not even at explicit hyphens. +% +% \begin{macrocode} +\newcommand\head@style{% + \interlinepenalty \@M + \hyphenpenalty=\@M \exhyphenpenalty=\@M + \rightskip=0cm plus .7\hsize\relax} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@sect} +% The definition of this macro from \file{latex.dtx} needs to be +% repeated here because we want to modify its behaviour with +% respect to: +% \begin{enumerate} +% \item the width of the number, which is fixed; +% \item checking the value of |\unitindent|; +% \item formatting the section title ragged right; +% \item changing the argument of |\contentsline|. +% \end{enumerate} +% \begin{macrocode} +\def\@sect#1#2#3#4#5#6[#7]#8{\ifnum #2>\c@secnumdepth + \let\@svsec\@empty\else + \refstepcounter{#1}% +% \end{macrocode} +% The following code (within the group) checks the value of +% |\unitindent|. If the sectionnumber is wider than |\unitindent| +% its value is adapted and a flag is set to rememeber to store the +% new value in the \file{.aux}-file. +% \begin{macrocode} + \begingroup + \setbox\@tempboxa=\hbox{#6\relax + \csname the#1\endcsname + \hskip.5em} + \ifdim\wd\@tempboxa>\unitindent + \global\unitindent=\wd\@tempboxa + \@indentset + \fi + \endgroup + \let\@@protect\protect + \def\protect{\noexpand\protect\noexpand}% + \edef\@svsec{\@seccntformat{#1}}% + \let\protect\@@protect\fi + \@tempskipa #5\relax + \ifdim \@tempskipa>\z@ + \begingroup #6\relax + \@hangfrom{\hskip #3\relax\@svsec}{\head@style #8\par}% + \endgroup + \csname #1mark\endcsname{#7}% + \addcontentsline{toc}{#1}{% + \ifnum #2>\c@secnumdepth + \else + \protect\numberline{\csname the#1\endcsname}% + \fi + \toc@font#2 #7}% + \else + \def\@svsechd{#6\hskip #3\relax + \@svsec #8\csname #1mark\endcsname{#7}% + \addcontentsline{toc}{#1}{% + \ifnum #2>\c@secnumdepth + \else + \protect\numberline{\csname the#1\endcsname}% + \fi + \toc@font#2 #7}}% + \fi + \@xsect{#5}} +% \end{macrocode} +% This macro was introduced in \LaTeXe, its definition is changed +% here to get the fixed with of the section number. +% \begin{macrocode} +\def\@seccntformat#1{% + \hbox to \unitindent{\csname the#1\endcsname \hfil}% + } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@ssect} +% Similar changes need to be made to the definition of |\@ssect|, +% which is used in `starred' sections. +% \begin{macrocode} +\def\@ssect#1#2#3#4#5{\@tempskipa #3\relax + \ifdim \@tempskipa>\z@ + \begingroup #4\relax + \@hangfrom{\hskip #1}{\head@style #5\par}\endgroup + \else \def\@svsechd{#4\hskip #1\relax #5}\fi + \@xsect{#3}} +% \end{macrocode} +% \end{macro} +% +% \subsubsection{Mark commands} +% +% \begin{macro}{\chaptermark} +% \begin{macro}{\sectionmark} +% \begin{macro}{\subsectionmark} +% \begin{macro}{\subsubsectionmark} +% \begin{macro}{\paragraphmark} +% \begin{macro}{\subparagraphmark} +% Default initializations of |\...mark| commands. These commands +% are used in the definition of the page styles (see +% section~\ref{sec:pagestyle}) Most of them are already defined by +% \file{latex.ltx}, so they are only shown here. +% +% \begin{macrocode} +\newcommand\chaptermark[1]{} +% \newcommand\sectionmark[1]{} +% \newcommand\subsectionmark[1]{} +% \newcommand\subsubsectionmark[1]{} +% \newcommand\paragraphmark[1]{} +% \newcommand\subparagraphmark[1]{} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \subsubsection{Define Counters} +% +% \begin{macro}{\c@secnumdepth} +% The value of the counter \Lcount{secnumdepth} gives the depth of +% the highest-level sectioning command that is to produce section +% numbers. +% \begin{macrocode} +\setcounter{secnumdepth}{2} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\c@part} +% \begin{macro}{\c@chapter} +% \begin{macro}{\c@section} +% \begin{macro}{\c@subsection} +% \begin{macro}{\c@subsubsection} +% \begin{macro}{\c@paragraph} +% \begin{macro}{\c@subparagraph} +% These counters are used for the section numbers. The macro\\ +% |\newcounter{|\meta{newctr}|}[|\meta{oldctr}|]|\\ +% defines \meta{newctr} to be a counter, which is reset to zero when +% counter \meta{oldctr} is stepped. Counter \meta{oldctr} must +% already be defined. +% +% \begin{macrocode} +\newcounter {part} +\newcounter {chapter} +\newcounter {section}[chapter] +\newcounter {subsection}[section] +\newcounter {subsubsection}[subsection] +\newcounter {paragraph}[subsubsection] +\newcounter {subparagraph}[paragraph] +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\thepart} +% \begin{macro}{\thechapter} +% \begin{macro}{\thesection} +% \begin{macro}{\thesubsection} +% \begin{macro}{\thesubsubsection} +% \begin{macro}{\theparagraph} +% \begin{macro}{\thesubparagraph} +% For any counter \Lcount{CTR}, |\theCTR| is a macro that defines +% the printed version of counter \Lcount{CTR}. It is defined in +% terms of the following macros: +% +% |\arabic{|\Lcount{COUNTER}|}| prints the value of +% \Lcount{COUNTER} as an arabic numeral. +% +% |\roman{|\Lcount{COUNTER}|}| prints the value of +% \Lcount{COUNTER} as a lowercase roman numberal. +% +% |\Roman{|\Lcount{COUNTER}|}| prints the value of +% \Lcount{COUNTER} as an uppercase roman numberal. +% +% |\alph{|\Lcount{COUNTER}|}| prints the value of \Lcount{COUNTER} +% as a lowercase letter: $1 =$~a, $2 =$~ b, etc. +% +% |\Alph{|\Lcount{COUNTER}|}| prints the value of \Lcount{COUNTER} +% as an uppercase letter: $1 =$~A, $2 =$~B, etc. +% +% \begin{macrocode} +\renewcommand\thepart {\Roman{part}} +\renewcommand\thechapter {\arabic{chapter}} +\renewcommand\thesection {\thechapter.\arabic{section}} +\renewcommand\thesubsection {\thesection.\arabic{subsection}} +\renewcommand\thesubsubsection {\thesubsection .\arabic{subsubsection}} +\renewcommand\theparagraph {\thesubsubsection.\arabic{paragraph}} +\renewcommand\thesubparagraph {\theparagraph.\arabic{subparagraph}} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\@chapapp} +% |\@chapapp| is initially defined to be `|\chaptername|'. The +% |\appendix| command redefines it to be `|\appendixname|'. +% +% \begin{macrocode} +\newcommand\@chapapp{\chaptername} +% \end{macrocode} +% \end{macro} +% +% \subsubsection{Parts} +% +% \begin{macro}{\part} +% The command to start a new part of our document. +% +% We start a new (righthand) page and use the \pstyle{empty}. +% \begin{macrocode} +\newcommand\part{\cleardoublepage + \thispagestyle{empty}% +% \end{macrocode} +% When we are making a two column document, this will be a one +% column page. We use |@tempswa| to remember to switch back to two +% columns. +% \begin{macrocode} + \if@twocolumn + \onecolumn + \@tempswatrue + \else + \@tempswafalse + \fi +% \end{macrocode} +% We need an empty box to prevent the fil glue from disappearing. +% \begin{macrocode} + \hbox{}\vfil +% \end{macrocode} +% Here we use |\secdef| to indicate wwhich commands to use to make +% the actual heading. +% \begin{macrocode} + \secdef\@part\@spart} +% \end{macrocode} +% +% \begin{macro}{\@part} +% This macro does the actual formatting of the title of the part. +% +% \begin{macro}{\PartFont} +% The font used to typeset the part is stored in this maro. +% \begin{macrocode} +\newcommand\PartFont{\bfseries} +% \end{macrocode} +% \end{macro} +% +% When \Lcount{secnumdepth} is larger than $-2$ for this document +% class, we have a numbered part, otherwise it is unnumbered. +% \begin{macrocode} +\def\@part[#1]#2{% + \ifnum \c@secnumdepth >-2\relax + \refstepcounter{part}% + \addcontentsline{toc}{part}{\thepart\hspace{1em}\toc@case{#1}}% + \else + \addcontentsline{toc}{part}{\toc@case{#1}}% + \fi +% \end{macrocode} +% We empty the mark registers and center the title on the page. +% Also we prevent breaking between lines and reset the font. +% \begin{macrocode} + \markboth{}{} + {\centering + \interlinepenalty \@M + \reset@font +% \end{macrocode} +% When this is a numbered part we have to print the number. We have +% to expand |\partname| before |\uppercase| is called, therefore we +% use a temporary control sequence that, when called will execute +% |\uppercase| on the contents of |\partname|. +% \begin{macrocode} + \ifnum \c@secnumdepth >-2\relax + \Large\PartFont + \edef\@tempa{\noexpand\uppercase{\partname}}\@tempa~\thepart + \par +% \end{macrocode} +% We leave some space before we print the title and leave the +% finishing up to |\@endpart|. +% \begin{macrocode} + \vskip 20\p@ + \fi + \Large \PartFont \uppercase{#2}\par}% + \@endpart} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@spart} +% This macro does the actual formatting of the title of the part +% when the star form of the user command was used. In this case we +% {\em never} print a number. Otherwise the formatting is the same. +% +% \begin{macrocode} +\def\@spart#1{% + {\centering + \interlinepenalty \@M + \reset@font + \Large \PartFont #1\par}% + \@endpart} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@endpart} +% This macro finishes the part page, for both |\@part| and +% |\@spart|. +% +% First we fill the current page. +% \begin{macrocode} +\def\@endpart{\vfil\newpage +% \end{macrocode} +% Then, when we are in twosided mode, we produce a completely blank +% page. +% \begin{macrocode} + \if@twoside + \hbox{}% + \thispagestyle{empty}% + \newpage + \fi +% \end{macrocode} +% When this was a two column document we have to switch back to two +% column mode. +% \begin{macrocode} + \if@tempswa + \twocolumn + \fi} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \subsubsection{Chapters} +% +% \begin{macro}{\chapter} +% A chapter should always start on a new page therefore we start by +% calling |\clearpage| and setting the pagestyle for this page to +% \pstyle{plain}. +% \begin{macrocode} +\newcommand\chapter{\if@openright\cleardoublepage\else\clearpage\fi + \thispagestyle{plain}% +% \end{macrocode} +% Then we prevent floats from appearing at the top of this page +% because it looks weird to see a floating object above a chapter +% title. +% \begin{macrocode} + \global\@topnum\z@ +% \end{macrocode} +% Then we suppress the indentation of the first paragraph by +% setting the switch |\@afterindent| to |false|. We use |\secdef| +% to specify the macros to use for actually setting the chapter +% title. +% \begin{macrocode} + \@afterindentfalse + \secdef\@chapter\@schapter} +% \end{macrocode} +% +% \begin{macro}{\@chapter} +% This macro is called when we have a numbered chapter. When +% \Lcount{secnumdepth} is larger than $-1$ we display the chapter +% number. We also inform the user that a new chapter is about to be +% typeset by writing a message to the terminal. +% \begin{macrocode} +\def\@chapter[#1]#2{% + \ifnum \c@secnumdepth >\m@ne + \refstepcounter{chapter}% + \typeout{\@chapapp\space\thechapter.}% + \addcontentsline{toc}{chapter}% + {\protect\numberline{\thechapter}\toc@font0 #1}% + \else + \addcontentsline{toc}{chapter}{\toc@font0 #1}% + \fi +% \end{macrocode} +% After having written an entry to the table of contents we store +% the (alternative) title of this chapter with |\chaptermark| and +% add some white space to the lists of figures and tables. +% \begin{macrocode} + \chaptermark{#1}% + \addtocontents{lof}{\protect\addvspace{10\p@}}% + \addtocontents{lot}{\protect\addvspace{10\p@}}% +% \end{macrocode} +% Then we call upon |\@makechapterhead| to format the actual +% chapter title. We have to do this in a special way when we are in +% twocolumn mode in order to have the chapter title use the entire +% |\textwidth|. In one column mode we call |\@afterheading| which +% takes care of suppressing the indentation. +% \begin{macrocode} + \if@twocolumn + \@topnewpage[\@makechapterhead{#2}]% + \else + \@makechapterhead{#2}% + \@afterheading + \fi} +% \end{macrocode} +% +% \begin{macro}{\ChapFont} +% The font used to typeset the chapters is stored in this maro. +% \begin{macrocode} +\newcommand\ChapFont{\bfseries} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@makechapterhead} +% The macro above uses |\@makechapterhead|\meta{text} to format the +% heading of the chapter. +% +% We begin by leaving some white space. The we open a group in +% which we have a paragraph indent of 0pt, and in which we have the +% text set ragged right. We also reset the font. +% \begin{macrocode} +\def\@makechapterhead#1{% + \vspace*{50\p@ \@plus 5\p@}% + {\setlength\parindent{\z@}% + \setlength\parskip {\z@}% + \head@style \reset@font +% \end{macrocode} +% Then we check whether the number of the chapter has to be printed. +% If so we leave some whitespace between the chapternumber and its +% title. +% \begin{macrocode} + \ifnum \c@secnumdepth >\m@ne + \Large\ChapFont \@chapapp{} \thechapter + \par + \vskip 20\p@ + \fi +% \end{macrocode} +% Now we set the title in a large bold font. We prevent a pagebreak +% at this point and leave some whitespace before the text begins. +% \begin{macrocode} + \Large \ChapFont #1\par + \nobreak + \vskip 40\p@ + }} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\@schapter} +% This macro is called when we have an unnumbered chapter. It is +% much simpler than |\@chapter| because it only needs to typeset +% the chapter title. +% \begin{macrocode} +\def\@schapter#1{\if@twocolumn + \@topnewpage[\@makeschapterhead{#1}]% + \else + \@makeschapterhead{#1}% + \@afterheading + \fi} +% \end{macrocode} +% +% \begin{macro}{\@makeschapterhead} +% The macro above uses |\@makeschapterhead|\meta{text}to format +% the heading of the chapter. It is similar to |\@makechapterhead| +% except that it never has to print a chapter number. +% +% \begin{macrocode} +\def\@makeschapterhead#1{% + \vspace*{50\p@\@plus 5\p@}% + {\setlength\parindent{\z@}% + \setlength\parskip{\z@}% + \head@style + \reset@font + \Large \ChapFont #1\par + \nobreak + \vskip 40\p@ + }} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% +% \subsubsection{Lower level headings} +% +% These commands all make use of |\@startsection|. +% \begin{macro}{\section} +% This gives a normal heading with white space above the heading +% (the whitespace below the heading will be generated by the +% |\parskip| that is inserted at the start of the first paragraph), +% the title set in |\large\bfseries|, and no indentation on the +% first paragraph. +% \begin{macrocode} +\newcommand\section{% + \@startsection {section}{1}{\z@}% + {-2\baselineskip\@plus -1\baselineskip \@minus -.5\baselineskip}% +%<+type1> {.5\baselineskip}% +%<+type3> {.01\baselineskip}% + {\reset@font\large\SectFont}} +% \end{macrocode} +% +% \begin{macro}{\SectFont} +% The font used to typeset the sections is stored in this maro. +% \begin{macrocode} +\newcommand\SectFont{\bfseries} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\subsection} +% This gives a normal heading with white space above the heading, +% the title set in |\normalsize\bfseries|, and no indentation on +% the first paragraph. +% \begin{macrocode} +\newcommand\subsection{% + \@startsection{subsection}{2}{\z@}% + {-1\baselineskip\@plus -.5\baselineskip \@minus -.25\baselineskip}% +%<+type1> {.25\baselineskip}% +%<+type3> {.01\baselineskip}% + {\reset@font\normalsize\SSectFont}} +% \end{macrocode} +% +% \begin{macro}{\SSectFont} +% The font used to typeset the subsections is stored in this maro. +% \begin{macrocode} +\newcommand\SSectFont{\bfseries} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\subsubsection} +% This gives a normal heading with white space above the heading, +% the title set in |\normalsize\tm|, and no indentation on the +% first paragraph. +% \begin{macrocode} +\newcommand\subsubsection{% + \@startsection{subsubsection}{3}{\z@}% + {-1\baselineskip plus -.5\baselineskip minus -.25\baselineskip}% +%<+type1> {.25\baselineskip}% +%<+type3> {.01\baselineskip}% + {\reset@font\normalsize\SSSectFont}} +% \end{macrocode} +% +% \begin{macro}{\SSSectFont} +% The font used to typeset the subsubsections is stored in this maro. +% \begin{macrocode} +\newcommand\SSSectFont{\rmfamily} +\newcommand\SSSectFont{\slshape} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\paragraph} +% This gives a run-in heading with white space above and to the +% right of the heading, the title set in |\normalsize\slshape|. +% \begin{macrocode} +\newcommand\paragraph{% + \@startsection{paragraph}{4}{\z@}% + {3.25ex \@plus1ex \@minus.2ex}% + {-1em}% + {\reset@font\normalsize\ParaFont}} +% \end{macrocode} +% +% \begin{macro}{\ParaFont} +% The font used to typeset the paragraphs is stored in this maro. +% \begin{macrocode} +\newcommand\ParaFont{\slshape} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\subparagraph} +% This gives an indented run-in heading with white space above and +% to the right of the heading, the title set in +% |\normalsize\slshape|. +% \begin{macrocode} +\newcommand\subparagraph{% + \@startsection{subparagraph}{5}{\parindent}% + {3.25ex \@plus1ex \@minus .2ex}% + {-1em}% + {\reset@font\normalsize\SParaFont}} +% \end{macrocode} +% +% \begin{macro}{\SParaFont} +% The font used to typeset the subparagraphs is stored in this maro. +% \begin{macrocode} +\newcommand\SParaFont{\slshape} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\Headingfonts} +% To change the fonts that are used to typeset the title,part, +% chapter and section headings this macro can be used. +% \begin{macrocode} +\newcommand\HeadingFonts[8]{% + \renewcommand\TitleFont{#1}% + \renewcommand\PartFont{#2}% + \renewcommand\ChapFont{#3}% + \renewcommand\SectFont{#4}% + \renewcommand\SSectFont{#5}% + \renewcommand\SSSectFont{#6}% + \renewcommand\ParaFont{#7}% + \renewcommand\SParaFont{#8}} +% \end{macrocode} +% \end{macro} +% +% \subsection{Lists} +% +% \subsubsection{General List Parameters} +% +% The following commands are used to set the default values for the list +% environment's parameters. See the \LaTeX{} manual for an explanation +% of the meanings of the parameters. Defaults for the list +% environment are set as follows. First, |\rightmargin|, +% |\listparindent| and |\itemindent| are set to 0pt. Then, for a Kth +% level list, the command |\@listK| is called, where `K' denotes `i', +% '`i', ... , `vi'. (I.e., |\@listiii| is called for a third-level +% list.) By convention, |\@listK| should set |\leftmargin| to +% |\leftmarginK|. +% +% \begin{macro}{\leftmargin} +% \begin{macro}{\leftmargini} +% \begin{macro}{\leftmarginii} +% \begin{macro}{\leftmarginiii} +% \begin{macro}{\leftmarginiv} +% \begin{macro}{\leftmarginv} +% \begin{macro}{\leftmarginvi} +% For efficiency, level-one list's values are defined at top level, and +% |\@listi| is defined to set only |\leftmargin|. +% +% \begin{macrocode} +\setlength\leftmargini {\unitindent} +\setlength\leftmarginii {\othermargin} +\setlength\leftmarginiii{\othermargin} +\setlength\leftmarginiv {\othermargin} +\setlength\leftmarginv {\othermargin} +\setlength\leftmarginvi {1em} +% \end{macrocode} +% Here we set the top level leftmargin. +% \begin{macrocode} +\setlength\leftmargin {\leftmargini} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\labelsep} +% \begin{macro}{\labelwidth} +% |\labelsep| is the distance between the label and the text of an +% item; |\labelwidth| is the width of the label. +% \begin{macrocode} +\setlength \labelsep {5\p@} +\setlength \labelwidth{\leftmargini} +\addtolength\labelwidth{-\labelsep} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\partopsep} +% When the user leaves a blank line before the environment an extra +% vertical space of |\partopsep| is inserted, in addition to +% |\parskip| and |\topsep|. +% \begin{macrocode} +\setlength\partopsep{\z@} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\topsep} +% Extra vertical space, in addition to |\parskip|, added above and +% below list and paragraphing environments. +% \begin{macrocode} +\setlength\topsep{\z@} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@beginparpenalty} +% \begin{macro}{\@endparpenalty} +% These penalties are inserted before and after a list or paragraph +% environment. They are set to a bonus value to encourage page +% breaking at these points. +% \begin{macro}{\@itempenalty} +% This penalty is inserted between list items. +% \begin{macrocode} +\@beginparpenalty -\@lowpenalty +\@endparpenalty -\@lowpenalty +\@itempenalty -\@lowpenalty +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\@listI} +% \begin{macro}{\@listi} +% |\@listI| defines top level and |\@listi| values of +% |\leftmargin|, |\parsep|, |\topsep|, and |\itemsep| +% +% \begin{macrocode} +\def\@listI{% + \leftmargin\unitindent + \labelsep.5em% + \labelwidth\leftmargin + \advance\labelwidth-\labelsep + \parsep \z@ +%<-type3> \topsep 0\p@ \@plus\p@ +%<+type3> \topsep -.5\parskip \@plus\p@ + \itemsep 0\p@ \@plus1\p@} +\let\@listi\@listI +% \end{macrocode} +% We have to initialise these parameters. +% \begin{macrocode} +\@listi +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\@listii} +% \begin{macro}{\@listiii} +% \begin{macro}{\@listiv} +% \begin{macro}{\@listv} +% \begin{macro}{\@listvi} +% Here are the same macros for the higher level lists. +% \begin{macrocode} +\def\@listii {\leftmargin\leftmarginii + \labelsep .5em% + \labelwidth\leftmarginii + \advance\labelwidth-\labelsep +%<-type3> \topsep 0\p@ \@plus\p@ +%<+type3> \topsep -.5\parskip\@plus\p@ + \parsep \z@ + \itemsep \z@ \@plus\p@} +\def\@listiii{\leftmargin\leftmarginiii + \labelsep .5em% + \labelwidth\leftmarginiii + \advance\labelwidth-\labelsep +%<-type3> \topsep 0\p@ \@plus\p@ +%<+type3> \topsep -.5\parskip\@plus\p@ + \parsep \z@ + \partopsep \z@ \@plus\p@ + \itemsep \z@ \@plus\p@} +\def\@listiv {\leftmargin\leftmarginiv + \labelsep .5em% + \labelwidth\leftmarginiv% + \advance\labelwidth-\labelsep +%<-type3> \topsep 0\p@ \@plus\p@ +%<+type3> \topsep -.5\parskip\@plus\p@ + \parsep \z@ + \itemsep \z@ \@plus\p@} +\def\@listv {\leftmargin\leftmarginv + \labelsep .5em% + \labelwidth\leftmarginv + \advance\labelwidth-\labelsep% +%<-type3> \topsep 0\p@ \@plus\p@ +%<+type3> \topsep -.5\parskip\@plus\p@ + \parsep \z@ + \itemsep \z@ \@plus\p@} +\def\@listvi {\leftmargin\leftmarginvi + \labelsep .5em + \labelwidth\leftmarginvi + \advance\labelwidth{-\labelsep}% +%<-type3> \topsep 0\p@ \@plus\p@ +%<+type3> \topsep -.5\parskip\@plus\p@ + \parsep \z@ + \itemsep \z@ \@plus\p@} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \subsubsection{Enumerate} +% +% The enumerate environment uses four counters: \Lcount{enumi}, +% \Lcount{enumii}, \Lcount{enumiii} and \Lcount{enumiv}, where +% \Lcount{enumN} controls the numbering of the Nth level +% enumeration. +% +% \begin{macro}{\theenumi} +% \begin{macro}{\theenumii} +% \begin{macro}{\theenumiii} +% \begin{macro}{\theenumiv} +% The counters are already defined in \file{latex.dtx}, but their +% representation is changed here. +% +% \begin{macrocode} +\renewcommand\theenumi{\arabic{enumi}} +\renewcommand\theenumii{\alph{enumii}} +\renewcommand\theenumiii{\roman{enumiii}} +\renewcommand\theenumiv{\Alph{enumiv}} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\labelenumi} +% \begin{macro}{\labelenumii} +% \begin{macro}{\labelenumiii} +% \begin{macro}{\labelenumiv} +% The label for each item is generated by the commands\\ +% |\labelenumi| ... |\labelenumiv|. +% \begin{macrocode} +\newcommand\labelenumi{\theenumi.} +\newcommand\labelenumii{(\theenumii)} +\newcommand\labelenumiii{\theenumiii.} +\newcommand\labelenumiv{\theenumiv.} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\p@enumii} +% \begin{macro}{\p@enumiii} +% \begin{macro}{\p@enumiv} +% The expansion of |\p@enumN||\theenumN| defines the output of a +% |\ref| command when referencing an item of the Nth level of an +% enumerated list. +% \begin{macrocode} +\renewcommand\p@enumii{\theenumi} +\renewcommand\p@enumiii{\theenumi(\theenumii)} +\renewcommand\p@enumiv{\p@enumiii\theenumiii} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% +% \begin{environment}{enumerate} +% We want to have different label positioning on different levels of +% list. To acheive this we have to redefine the \Lenv{enumerate} +% environment. +% +% \begin{macrocode} +\renewenvironment{enumerate}{% + \ifnum \@enumdepth >3 + \@toodeep + \else + \advance\@enumdepth \@ne + \edef\@enumctr{enum\romannumeral\the\@enumdepth}% + \list{\csname label\@enumctr\endcsname} + {\usecounter{\@enumctr}% +%<+type1> \ifnum \@listdepth=1 + \if@revlabel + \def\makelabel##1{\hskip .5\unitindent{##1\hfil}}% + \else +%<-type3> \def\makelabel##1{\hfil##1} +%<+type3> \def\makelabel##1{##1\hfil} + \fi +%<*type1> + \else + \def\makelabel##1{##1\hfil}% +%</type1> + \fi + }% + \fi} +% \end{macrocode} +% We try to suppress spaces after these list constructs. +% \begin{macrocode} + {\global\@ignoretrue \endlist} +% \end{macrocode} +% \end{environment} +% +% \subsubsection{Itemize} +% +% \begin{macro}{\labelitemi} +% \begin{macro}{\labelitemii} +% \begin{macro}{\labelitemiii} +% \begin{macro}{\labelitemiv} +% Itemization is controlled by four commands: |\labelitemi|, +% |\labelitemii|, |\labelitemiii|, and |\labelitemiv|, which define +% the labels of thevarious itemization levels: the symbols used are +% bullet, bold en-dash, asterisk and centred dot. +% +% \begin{macrocode} +\newcommand\labelitemi{$\m@th\bullet$} +\newcommand\labelitemii{\bfseries --} +\newcommand\labelitemiii{$\m@th\ast$} +\newcommand\labelitemiv{$\m@th\cdot$} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{environment}{itemize} +% We want to have differen label positioning on different levels of +% list. To acheive this we have to redefine the \Lenv{itemize} +% environment. +% \begin{macrocode} +\renewenvironment{itemize}{% + \ifnum \@itemdepth >3 + \@toodeep + \else + \advance\@itemdepth \@ne + \edef\@itemitem{labelitem\romannumeral\the\@itemdepth}% + \list{\csname\@itemitem\endcsname}% + {% +%<+type1> \ifnum \@listdepth=1\relax + \if@revlabel + \def\makelabel##1{\hskip .5\unitindent{##1\hfil}}\else +%<+type1> \def\makelabel##1{\hfil##1} +%<+type3> \def\makelabel##1{##1\hfil} + \fi +%<*type1> + \else + \def\makelabel##1{##1\hfil} + \fi +%</type1> + }% + \fi} +% \end{macrocode} +% We try to suppress spaces after these list constructs. +% \begin{macrocode} + {\global\@ignoretrue \endlist} +% \end{macrocode} +% \end{environment} +% +% \subsubsection{Description} +% +% \begin{environment}{description} +% The description environment is defined here -- while the itemize +% and enumerate environments are defined in \file{latex.dtx}. +% +% \begin{macrocode} +\newenvironment{description} + {\list{}{\labelwidth\z@ \itemindent-\leftmargin + \let\makelabel\descriptionlabel}} + {\endlist} +% \end{macrocode} +% \end{environment} +% +% \begin{macro}{\descriptionlabel} +% To change the formatting of the label, you must redefine +% |\descriptionlabel|. +% +% \begin{macrocode} +\newcommand\descriptionlabel[1]{\hspace\labelsep \bfseries #1} +% \end{macrocode} +% \end{macro} +% +% \subsection{Adapting existing environments} +% +% Because we globally set |\topsep| to zero, we need to modify the +% definitions of a number of environments slightly to get a litle +% whitespace around them. +% +% \begin{environment}{center} +% Add a litle surrounding whitespace. +% \begin{macrocode} +%<*type1> +\def\center + {\topsep=.25\baselineskip \@plus .1\baselineskip + \@minus .1\baselineskip + \trivlist \centering\item[]} +\let\endcenter\endtrivlist +% \end{macrocode} +% \end{environment} +% +% \begin{environment}{flushleft} +% Add a litle surrounding whitespace. +% \begin{macrocode} +\def\flushleft + {\topsep=.25\baselineskip \@plus .1\baselineskip + \@minus .1\baselineskip + \trivlist \raggedright\item[]} +\let\endflushleft=\endtrivlist +% \end{macrocode} +% \end{environment} +% +% \begin{environment}{flushright} +% Add a litle surrounding whitespace. +% \begin{macrocode} +\def\flushright + {\topsep=.25\baselineskip \@plus .1\baselineskip + \@minus .1\baselineskip + \trivlist \raggedleft\item[]} +\let\endflushright=\endtrivlist +%</type1> +% \end{macrocode} +% \end{environment} +% +% \begin{environment}{verbatim} +% In \Lenv{verbatim} we add a little surrounding whitespace, +% --which for \file{rapport3} is negative to +% compensate for the positive |\parskip|-- but also an indent for +% the \file{rapport1} document class. +% \begin{macrocode} +\def\verbatim{% +%<*type1> + \topsep=.25\baselineskip \@plus .1\baselineskip + \@minus .1\baselineskip + \@verbatim + \leftskip\unitindent +%</type1> +%<*type3> + \topsep=-.5\parskip + \@verbatim +%</type3> + \frenchspacing\@vobeyspaces \@xverbatim} +%<+type1>\def\endverbatim{\if@newlist \leavevmode\fi\endtrivlist} +% \end{macrocode} +% \end{environment} +% +% \subsection{Defining new environments} +% +% \subsubsection{Abstract} +% +% \begin{environment}{abstract} +% When we are producing a separate titlepage we also put the +% abstract on a page of its own. It will be centred vertically on +% the page. +% +% \begin{macrocode} +\if@titlepage + \newenvironment{abstract}{% + \titlepage + \null\vfil + \hbox{\SectFont \abstractname} + \noindent\ignorespaces} + {\par\vfil\null\endtitlepage} +% \end{macrocode} +% When we are not making a seperate titlepagewe have to check if we +% are in twocolumn mode. In that case the abstract is set as a +% |\section*|, otherwise the abstract is typeset flushleft, an +% amount |\unitindent| smaller as the normal text. +% \begin{macrocode} +\else + \newenvironment{abstract}{% + \if@twocolumn + \section*{\abstractname}% + \else + \small + \bgroup\rightskip=\unitindent + \hbox{\SectFont \abstractname}% + \noindent\ignorespaces +% \end{macrocode} + \fi} +% \end{macrocode} +% Which implies that the definition of |\end{abstract}| is also +% different. +% \begin{macrocode} + {\if@twocolumn\else\par\egroup\fi} +\fi +% \end{macrocode} +% \end{environment} +% +% \subsubsection{Verse} +% +% \begin{environment}{verse} +% The verse environment is defined by making clever use of the +% list environment's parameters. The user types |\\| to end a line. +% This is implemented by |\let|'ing |\\| equal |\@centercr|. +% +% \begin{macrocode} +\newenvironment{verse} + {\let\\=\@centercr + \list{}{\itemsep\z@ + \itemindent-1.5em% + \listparindent\itemindent + \rightmargin\leftmargin + \advance\leftmargin1.5em}% + \item[]} + {\endlist} +% \end{macrocode} +% \end{environment} +% +% \subsubsection{Quotation} +% +% \begin{environment}{quotation} +% The quotation environment is also defined by making clever use of +% the list environment's parameters. The lines in the environment +% are set smaller than |\textwidth|. The first line of a paragraph +% inside this environment is indented. +% +% \begin{macrocode} +\newenvironment{quotation} + {\list{}{% + \listparindent\z@ + \itemindent\listparindent + \rightmargin\leftmargin + \parsep\z@ \@plus\p@}% + \item[]} + {\endlist} +% \end{macrocode} +% \end{environment} +% +% \subsubsection{Quote} +% +% \begin{environment}{quote} +% The quote environment is like the quotation environment except +% that paragraphs are not indented. +% +% \begin{macrocode} +\newenvironment{quote} + {\list{}{\rightmargin\leftmargin}% + \item[]} + {\endlist} +% \end{macrocode} +% \end{environment} +% +% \subsubsection{Theorem} +% +% \begin{macro}{\@begintheorem} +% \begin{macro}{\@opargbegintheorem} +% \begin{macro}{\@endtheorem} +% These document classes have a slightly modified \Lenv{theorem} +% environment style. Surrounding whitespace is added and an +% initialisation of |\labelsep|. Finally a slanted font instead of +% an italic font is used. +% \begin{macrocode} +\def\@begintheorem#1#2{% + \vskip\baselineskip \labelsep=.5em% + \trivlist + \item[\hskip \labelsep{\bfseries #1\ #2}]\slshape} +\def\@opargbegintheorem#1#2#3{% + \vskip\baselineskip \labelsep=.5em% + \trivlist + \item[\hskip \labelsep{\bfseries #1\ #2\ (#3)}]\slshape} +\def\@endtheorem{\endtrivlist \vskip\baselineskip} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \subsubsection{Titlepage} +% +% \begin{environment}{titlepage} +% In the normal environments, the titlepage environment does nothing +% but start and end a page, and inhibit page numbers. It also resets +% the page number to zero. In two-column style, it still makes a +% one-column page. +% +% \begin{macrocode} +\newenvironment{titlepage} + { + \if@twocolumn + \@restonecoltrue\onecolumn + \else + \@restonecolfalse\newpage + \fi + \thispagestyle{empty}% + \if@compatibility + \setcounter{page}{0} + \else + \setcounter{page}{1}% + \fi} + {\if@restonecol\twocolumn \else \newpage \fi + \setcounter{page}{1}% + } +% \end{macrocode} +% \end{environment} +% +% \subsubsection{Appendix} +% +% \begin{macro}{\appendix} +% +% The |\appendix| command is not really an environment, it is a +% macro that makes some changes in the way things are done. +% +% In this document class the |\appendix| command must do the +% following: +% \begin{itemize} +% \item reset the chapter and section counters to zero, +% \item set |\@chapapp| to |\appendixname| (for messages), +% \item redefine the chapter counter to produce appendix numbers, +% \item possibly redefine the |\chapter| command if appendix titles +% and headings are to look different from chapter titles and +% headings. +% \end{itemize} +% +% \begin{macrocode} +\newcommand\appendix{\par + \setcounter{chapter}{0}% + \setcounter{section}{0}% + \renewcommand\@chapapp{\appendixname}% + \renewcommand\thechapter{\Alph{chapter}}} +% \end{macrocode} +% \end{macro} +% +% \subsection{Setting parameters for existing environments} +% +% \subsubsection{Array and tabular} +% +% \begin{macro}{\arraycolsep} +% The columns in an array environment are separated by +% 2|\arraycolsep|. +% \begin{macrocode} +\setlength\arraycolsep{5\p@} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\tabcolsep} +% The columns in an tabular environment are separated by +% 2|\tabcolsep|. +% \begin{macrocode} +\setlength\tabcolsep{6\p@} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\arrayrulewidth} +% The width of rules in the array and tabular environments is given +% by |\arrayrulewidth|. +% \begin{macrocode} +\setlength\arrayrulewidth{.4\p@} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\doublerulesep} +% The space between adjacent rules in the array and tabular +% environments is given by |\doublerulesep|. +% \begin{macrocode} +\setlength\doublerulesep{2\p@} +% \end{macrocode} +% \end{macro} +% +% \subsubsection{Tabbing} +% +% \begin{macro}{\tabbingsep} +% This controls the space that the |\'| command puts in. (See +% \LaTeX{} manual for an explanation.) +% \begin{macrocode} +\setlength\tabbingsep{\labelsep} +% \end{macrocode} +% \end{macro} +% +% \subsubsection{Minipage} +% +% \begin{macro}{\@minipagerestore} +% The macro |\@minipagerestore| is called upon entry to a minipage +% environment to set up things that are to be handled differently +% inside a minipage environment. +% +% \begin{macrocode} +%<+type1>\def\@minipagerestore{\parindent\unitindent} +%<*type3> +\def\@minipagerestore{% + \parskip=.5\baselineskip \@plus .1\baselineskip + \@minus .1\baselineskip} +%</type3> +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@mpfootins} +% Minipages have their own footnotes; |\skip||\@mpfootins| plays +% same r\^ole for footnotes in a minipage as |\skip||\footins| does +% for ordinary footnotes. +% +% \begin{macrocode} +\skip\@mpfootins = \skip\footins +% \end{macrocode} +% \end{macro} +% +% \subsubsection{Framed boxes} +% +% \begin{macro}{\fboxsep} +% The space left by |\fbox| and |\framebox| between the box and the +% text in it. +% \begin{macro}{\fboxrule} +% The width of the rules in the box made by |\fbox| and |\framebox|. +% \begin{macrocode} +\setlength\fboxsep{3\p@} +\setlength\fboxrule{.4\p@} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \subsubsection{Equation and eqnarray} +% +% \begin{macro}{\theequation} +% The equation counter will be reset at beginning of a new chapter +% and the equation number will be prefixed by the chapter number. +% +% This code must follow the |\chapter| definition, or more exactly +% the definition of the chapter counter. +% \begin{macrocode} +\@addtoreset{equation}{chapter} +\renewcommand\theequation{\thechapter.\arabic{equation}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\jot} +% |\jot| is the extra space added between lines of an eqnarray +% environment. The default value is used. +% \begin{macrocode} +% \setlength\jot{3pt} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@eqnnum} +% The macro |\@eqnnum| defines how equation numbers are to appear in +% equations. Again the default is used. +% +% \begin{macrocode} +% \def\@eqnnum{(\theequation)} +% \end{macrocode} +% \end{macro} +% +% \subsection{Floating objects} +% +% The file \file{latex.dtx} only defines a number of tools with +% which floating objects can be defined. This is done in the +% document class. It needs to define the following macros for each +% floating object of type \texttt{TYPE} (e.g., \texttt{TYPE} = +% figure). +% +% \begin{description} +% \item[\texttt{\bslash fps@TYPE}] +% The default placement specifier for floats of type +% \texttt{TYPE}. +% +% \item[\texttt{\bslash ftype@TYPE}] +% The type number for floats of type \texttt{TYPE}. Each +% \texttt{TYPE} has associated a unique positive {\texttt +% TYPE} number, which is a power of two. E.g., figures might +% have type number 1, tables type number 2, programs type +% number 4, etc. +% +% \item[\texttt{\bslash ext@TYPE}] +% The file extension indicating the file on which the contents +% list for float type \texttt{TYPE} is stored. For example, +% |\ext@figure| = `lof'. +% +% \item[\texttt{\bslash fnum@TYPE}] +% A macro to generate the figure number for a caption. For +% example, |\fnum@TYPE| == `Figure |\thefigure|'. +% +% \item[\texttt{\bslash @makecaption{\meta{num}}{\meta{text}}}] +% A macro to make a caption, with \meta{num} the value produced +% by |\fnum@...| and \meta{text} the text of the caption. It +% can assume it's in a |\parbox| of the appropriate width. +% This will be used for {\em all} floating objects. +% +% \end{description} +% +% The actual environment that implements a floating object such as +% a figure is defined using the macros |\@float| and |\end@float|, +% which are defined in \file{latex.dtx}. +% +% An environment that implements a single column floating object is +% started with |\@float{|\texttt{TYPE}|}[|\meta{placement}|]| of type +% \texttt{TYPE} with \meta{placement} as the placement specifier. +% The default value of \meta{PLACEMENT} is defined by |\fps@TYPE|. +% +% The environment is ended by |\end@float|. E.g., |\figure| == +% |\@float|{figure}, |\endfigure| == |\end@float|. +% +% \subsubsection{Figure} +% +% Here is the implementation of the figure environment. +% +% \begin{macro}{\c@figure} +% First we have to allocate a counter to number the figures. In +% this document class the figures are numbered per chapter. +% \begin{macrocode} +\newcounter{figure}[chapter] +\renewcommand\thefigure{\thechapter.\@arabic\c@figure} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\fps@figure} +% \begin{macro}{\ftype@figure} +% \begin{macro}{\ext@figure} +% \begin{macro}{\num@figure} +% Here are the parameters for the floating objects of type `figure'. +% \begin{macrocode} +\def\fps@figure{tbp} +\def\ftype@figure{1} +\def\ext@figure{lof} +\def\fnum@figure{\figurename~\thefigure} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{environment}{figure} +% \begin{environment}{figure*} +% And the definition of the actual environment. The form with the +% |*| is used for double column figures. +% \begin{macrocode} +\newenvironment{figure} + {\@float{figure}} + {\end@float} +\newenvironment{figure*} + {\@dblfloat{figure}} + {\end@dblfloat} +% \end{macrocode} +% \end{environment} +% \end{environment} +% +% \subsubsection{Table} +% +% Here is the implementation of the table environment. It is very +% much the same as the figure environment. +% +% \begin{macro}{\c@table} +% First we have to allocate a counter to number the tables. In this +% document class the tables are numbered per chapter. +% \begin{macrocode} +\newcounter{table}[chapter] +\renewcommand\thetable{\thechapter.\@arabic\c@table} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\fps@table} +% \begin{macro}{\ftype@table} +% \begin{macro}{\ext@table} +% \begin{macro}{\num@table} +% Here are the parameters for the floating objects of type `table'. +% \begin{macrocode} +\def\fps@table{tbp} +\def\ftype@table{2} +\def\ext@table{lot} +\def\fnum@table{\tablename~\thetable} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{environment}{table} +% \begin{environment}{table*} +% And the definition of the actual environment. The form with the +% |*| is used for double column tables. +% \begin{macrocode} +\newenvironment{table} + {\@float{table}} + {\end@float} +\newenvironment{table*} + {\@dblfloat{table}} + {\end@dblfloat} +% \end{macrocode} +% \end{environment} +% \end{environment} +% +% \subsubsection{Captions} +% +% \begin{macro}{\@makecaption} +% The |\caption| command calls |\@makecaption| to format the +% caption of floating objects. It gets two arguments, +% \meta{number}, the number of the floating object and \meta{text}, +% the text of the caption. Usually \meta{number} contains a string +% such as `Figure 3.2'. The macro can assume it is called inside a +% |\parbox| of right width, with |\normalsize|. +% +% \begin{macro}{\abovecaptionskip} +% \begin{macro}{\belowcaptionskip} +% These lengths contain the amount of white space to leave above +% and below the caption. +% \begin{macrocode} +\newlength\abovecaptionskip +\newlength\belowcaptionskip +\setlength\abovecaptionskip{10\p@} +\setlength\belowcaptionskip{0\p@} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% The definition of this macro is |\long| in order to allow more +% then one paragraph in a caption. +% \begin{macrocode} +\long\def\@makecaption#1#2{% + \vskip\abovecaptionskip +% \end{macrocode} +% We want to see if the caption fits on one line on the page, +% therefore we first typeset it in a temporary box. +% \begin{macrocode} + \sbox\@tempboxa{{\CaptionLabelFont#1:} \CaptionTextFont#2}% +% \end{macrocode} +% We can the measure its width. It that is larger than the current +% |\hsize| we typeset the caption as an ordinary paragraph. +% \begin{macrocode} + \ifdim \wd\@tempboxa >\hsize + {\CaptionLabelFont#1:} \CaptionTextFont#2\par +% \end{macrocode} +% If the caption fits, we center it. +% \begin{macrocode} + \else + \hbox to\hsize{\hfil\box\@tempboxa\hfil}% + \fi + \vskip\belowcaptionskip} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\CaptionLabelFont} +% \begin{macro}{\CaptionTextFont} +% These macros can contain the fonts used for typesetting captions. +% By default they do nothing. +% \begin{macrocode} +\newcommand\CaptionLabelFont{\relax} +\newcommand\CaptionTextFont{\relax} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\CaptionFonts} +% To change the fonts that are used to typeset captions +% this macro can be used. +% \begin{macrocode} +\newcommand\CaptionFonts[2]{% + \renewcommand\CaptionLabelFont{#1}% + \renewcommand\CaptionTextFont{#2}% + } +% \end{macrocode} +% \end{macro} +% +% \subsection{Font changing} +% +% Here we supply the declarative font changing commands that were +% common in \LaTeX\ version 2.09 and earlier. These commands work +% in text mode \emph{and} in math mode. They are provided for +% compatibility, but one should start using the |\text...| and +% |\math...| commands instead. These commands are defined using +% |\DeclareOldFontCommand|, a command with three arguments: the user +% command to be defined; \LaTeX\ commands to execute in text mode +% and \LaTeX\ commands to execute in math mode. +% +% \begin{macro}{\rm} +% \begin{macro}{\tt} +% \begin{macro}{\sf} +% +% The commands to change the family. When in compatibility mode we +% select the `default' font first, to get \LaTeX2.09 behviour. +% \begin{macrocode} +\DeclareOldFontCommand{\rm}{\normalfont\rmfamily}{\mathrm} +\DeclareOldFontCommand{\sf}{\normalfont\sffamily}{\mathsf} +\DeclareOldFontCommand{\tt}{\normalfont\ttfamily}{\mathtt} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\bf} +% The command to change to the bold series. One should use +% |\mdseries| to explicitly switch back to medium series. +% \begin{macrocode} +\DeclareOldFontCommand{\bf}{\normalfont\bfseries}{\mathbf} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\sl} +% \begin{macro}{\it} +% \begin{macro}{\sc} +% +% And the commands to change the shape of the font. The slanted and +% small caps shapes are not available by default as math alphabets, +% so those changes do nothing in math mode. One should use +% |\upshape| to explicitly change back to the upright shape. +% \begin{macrocode} +\DeclareOldFontCommand{\it}{\normalfont\itshape}{\mathit} +\DeclareOldFontCommand{\sl}{\normalfont\slshape}{\relax} +\DeclareOldFontCommand{\sc}{\normalfont\scshape}{\relax} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\cal} +% \begin{macro}{\mit} +% +% The commands |\cal| and |\mit| should only be used in math mode, +% outside math mode they have no effect. Currently the New Font +% Selection Scheme defines these commands to generate warning +% messages. Therefore we have to define them `by hand'. +% \begin{macrocode} +\renewcommand{\cal}{\protect\pcal} +\newcommand{\pcal}{\@fontswitch{\relax}{\mathcal}} +\renewcommand{\mit}{\protect\pmit} +\newcommand{\pmit}{\@fontswitch{\relax}{\mathnormal}} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\pem} +% The definition of |\pem| is changed here to have slanted instead +% of italic fonts. +% \begin{macrocode} +\def\pem{\@nomath\em \ifdim \fontdimen\@ne\font >\z@ + \upshape \else \slshape \fi} +% \end{macrocode} +% \end{macro} +% +% \section{Cross Referencing} +% \subsection{Table of Contents, etc.} +% +% A |\section| command writes a +% |\contentsline{section}{|\meta{title}|}{|\meta{page}|}| command +% on the \file{.toc} file, where \meta{title} contains the +% contents of the entry and \meta{page} is the page number. If +% sections are being numbered, then \meta{title} will be of the +% form |\numberline{|\meta{num}|}{|\meta{heading}|}| where +% \meta{num} is the number produced by |\thesection|. Other +% sectioning commands work similarly. +% +% A |\caption| command in a `figure' environment writes +% +% |\contentsline{figure}{\numberline{|\meta{num}|}{|% +% \meta{caption}|}}{|\meta{page}|}| +% +% on the .\file{lof} file, where \meta{num} is the number produced +% by |\thefigure| and \meta{caption} is the figure caption. It +% works similarly for a `table' environment. +% +% The command |\contentsline{|\meta{name}|}| expands to +% |\l@|\meta{name}. So, to specify the table of contents, we must +% define |\l@chapter|, |\l@section|, |\l@subsection|, ... ; to +% specify the list of figures, we must define |\l@figure|; and so +% on. Most of these can be defined with either the +% |\@dottedtocline| or the |\@regtocline| command, which work as +% follows. +% +% |\@dottedtocline{|\meta{level}|}{|\meta{indent}|}{|^^A +% \meta{numwidth}|}{|^^A +% \meta{title}|}{|\meta{page}|}| +% +% |\@regtocline{|\meta{level}|}{|\meta{title}|}{|\meta{page}|}| +% +% \begin{description} +% \item[\meta{level}] An entry is produced only if\meta{ level} +% $<=$ value of the \Lcount{tocdepth} counter. Note, +% |\chapter| is level 0, |\section| is level 1, etc. +% \item[\meta{indent}] The indentation from the outer left margin +% of the start of the contents line. +% \item[\meta{numwidth}] The width of a box in which the section +% number is to go, if \meta{title} includes a |\numberline| +% command. +% \end{description} +% +% \begin{macro}{\@pnumwidth} +% \begin{macro}{\@tocrmarg} +% \begin{macro}{\@dotsep} +% This command uses the following three parameters, which are set +% with a |\newcommand| (so em's can be used to make them depend upon +% the font). +% \begin{description} +% \item[\texttt{\bslash @pnumwidth}] The width of a box in which the +% page number is put. +% \item[\texttt{\bslash @tocrmarg}] The right margin for multiple +% line entries. One wants |\@tocrmarg| > or = |\@pnumwidth| +% \item[\texttt{\bslash @dotsep}] Separation between dots, in mu +% units. Should be defined as a number like 2 or 1.7 +% \end{description} +% +% \begin{macrocode} +\newcommand\@pnumwidth{1.55em} +\newcommand\@tocrmarg {2.55em} +\newcommand\@dotsep{4.5} +\setcounter{tocdepth}{2} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \subsubsection{Table of Contents} +% +% \begin{macro}{\tableofcontents} +% This macro is used to request that \LaTeX{} produces a table of +% contents. The tables of contents, figures etc. are always set in +% single-column style. +% +% \begin{macrocode} +\newcommand\tableofcontents{% + \if@twocolumn + \@restonecoltrue\onecolumn + \else + \@restonecolfalse + \fi +% \end{macrocode} +% The title is set using the |\chapter*| command, making sure that +% the running head --if one is required-- contains the right +% information. +% \begin{macrocode} + \chapter*{\contentsname + \@mkboth{\uppercase{\contentsname}}{\uppercase{\contentsname}}}% +% \end{macrocode} +% The the actual table of contents is made by calling +% |\@starttoc{toc}|. After that we restore twocolumn mode if +% necessary. +% \begin{macrocode} + \@starttoc{toc}% + \if@restonecol\twocolumn\fi + } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@starttoc} +% The internal \LaTeXe macro |\@starttoc| needs to be adapted for +% the \file{rapport3} document classes,in order to deal with a the +% fact that for these document classes the |\parskip| is normally +% non-zero. We don't want that in the table of contents. +% \begin{macrocode} +%<*type3> +\def\@starttoc#1{\begingroup + \makeatletter + \parskip\z@ + \@input{\jobname.#1}% + \if@filesw + \expandafter\newwrite\csname tf@#1\endcsname + \immediate\openout \csname tf@#1\endcsname \jobname.#1\relax + \fi \global\@nobreakfalse \endgroup} +%</type3> +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@regtocline} +% These document classes use a different format for the table of +% contents than the standard classes from which they were +% developped. In order to acheive this different format we defined +% the macro |\@regtocline|. +% \begin{macrocode} +\newcommand\@regtocline[3]{% + \ifnum #1>\c@tocdepth + \else + \vskip \z@ plus .2pt + {\hangindent\z@ \@afterindenttrue \interlinepenalty\@M + \leftskip\unitindent + \rightskip=\unitindent plus 1fil + \parfillskip=0cm + \@tempdima=\unitindent + \parindent\z@ + \leavevmode + \hbox{}\hskip -\leftskip\relax#2\nobreak + \hskip 1em \nobreak{\slshape #3}\par + }% + \fi} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\toc@font} +% The changed definition of |\@sect| that we use, selects a +% different font for the table of contents for the various header +% levels. It does this using |\toc@font|. +% \begin{macrocode} +\if@oldtoc + \newcommand\toc@font[1]{\relax} +\else + \newcommand\toc@font[1]{% + \ifcase#1\relax + \bfseries + \or\slshape + \or\rmfamily + \fi} +\fi +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\toc@case} +% The entries for parts are typeset in capital letters in the new +% style of the table of contents. In the old style this isn't +% done. The macro |\toc@case| is used to switch this. +% \begin{macrocode} +\if@oldtoc + \newcommand\toc@case{\relax} +\else + \newcommand\toc@case{\uppercase} +\fi +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\l@part} +% Each sectioning command needs an additional macro to format its +% entry in the table of contents, as described above. The macro for +% the entry for parts is defined in a special way. +% +% First we make sure that if a pagebreak should occur, it occurs +% {\em before} this entry. Also a little whitespace is added and a +% group begun to keep changes local. +% +% First we have the definition from the standard classes. +% \begin{macrocode} +\if@oldtoc +\newcommand\l@part[2]{% + \addpenalty{-\@highpenalty}% + \addvspace{2.25em \@plus\p@}% + \begingroup +% \end{macrocode} +% The macro |\numberline| requires that the width of the box that +% holds the part number is stored in \LaTeX's scratch register +% |\@tempdima|. Therefore we put it there. +% \begin{macrocode} + \setlength\@tempdima{3em}% +% \end{macrocode} +% The we set |\parindent| to 0pt and use |\rightskip| to leave +% enough room for the pagenumbers. To prevent overfull box messages +% the |\parfillskip| is set to a negative value. +% \begin{macrocode} + \parindent \z@ \rightskip \@pnumwidth + \parfillskip -\@pnumwidth +% \end{macrocode} +% Now we can set the entry, in a large bold font. We make sure to +% leave vertical mode, set the part title and add the pagenumber, +% set flush right. +% \begin{macrocode} + {\leavevmode + \large \bfseries #1\hfil \hbox to\@pnumwidth{\hss #2}}\par +% \end{macrocode} +% Prevent a pagebreak immediately after this entry, but use +% |\everypar| to reset the |\if@nobreak| switch. Finally we close +% the group. +% \begin{macrocode} + \nobreak + \global\@nobreaktrue + \everypar{\global\@nobreakfalse\everypar{}} + \endgroup} +% \end{macrocode} +% Then we can introduce our new definition. +% \begin{macrocode} +\else + \newcommand\l@part{\addpenalty{-\@highpenalty} + \addvspace{2.25em \@plus \p@}\@regtocline{0}} +\fi +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\l@chapter} +% This macro formats the entries in the table of contents for +% chapters. It is very similar to |\l@part| +% +% First we make sure that if a pagebreak should occur, it occurs +% {\em before} this entry. Also a little whitespace is added and a +% group begun to keep changes local. +% +% Again we first present the `standard' definition +% \begin{macrocode} +\if@oldtoc +\newcommand\l@chapter[2]{% + \addpenalty{-\@highpenalty}% + \vskip 1.0em \@plus\p@ +% \end{macrocode} +% +% The macro |\numberline| requires that the width of the box that +% holds the part number is stored in \LaTeX's scratch register +% |\@tempdima|. Therefore we put it there. We begin a group, and +% change some of the paragraph parameters. +% \begin{macrocode} + \setlength\@tempdima{1.5em}% + \begingroup + \parindent \z@ \rightskip \@pnumwidth + \parfillskip -\@pnumwidth +% \end{macrocode} +% Then we leave vertical mode and switch to a bold font. +% \begin{macrocode} + \leavevmode \bfseries +% \end{macrocode} +% Because we do not use |\numberline| here, we have do some fine +% tuning `by hand', before we can set the entry. We discourage but +% not disallow a pagebreak immediately after a chapter entry. +% \begin{macrocode} + \advance\leftskip\@tempdima + \hskip -\leftskip + #1\nobreak\hfil \nobreak\hbox to\@pnumwidth{\hss #2}\par + \penalty\@highpenalty + \endgroup} +% \end{macrocode} +% Then we present our new definition. +% \begin{macrocode} +\else + \newcommand\l@chapter{\@regtocline{0}} +\fi +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\l@section} +% In this document class the definition for +% |\l@section| is very simple. +% \begin{macrocode} +\if@oldtoc + \newcommand\l@section {\@dottedtocline{1}{1.5em}{2.3em}} +\else + \newcommand\l@section {\@regtocline{1}} +\fi +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\l@subsection} +% \begin{macro}{\l@subsubsection} +% \begin{macro}{\l@paragraph} +% \begin{macro}{\l@subparagraph} +% All lower level entries are defined using the macro +% |\@dottedtocline| or |\@regtocline| (see above). +% \begin{macrocode} +\if@oldtoc + \newcommand\l@subsection {\@dottedtocline{2}{3.8em}{3.2em}} + \newcommand\l@subsubsection{\@dottedtocline{3}{7.0em}{4.1em}} + \newcommand\l@paragraph {\@dottedtocline{4}{10em}{5em}} + \newcommand\l@subparagraph {\@dottedtocline{5}{12em}{6em}} +\else + \newcommand\l@subsection {\@regtocline{2}} + \newcommand\l@subsubsection{\@regtocline{3}} + \newcommand\l@paragraph {\@regtocline{4}} + \newcommand\l@subparagraph {\@regtocline{5}} +\fi +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \subsubsection{List of figures} +% +% \begin{macro}{\listoffigures} +% This macro is used to request that \LaTeX{} produces a list of +% figures. It is very similar to |\tableofcontents|. +% +% \begin{macrocode} +\newcommand\listoffigures{% + \if@twocolumn + \@restonecoltrue\onecolumn + \else + \@restonecolfalse + \fi + \chapter*{\listfigurename + \@mkboth{\uppercase{\listfigurename}}% + {\uppercase{\listfigurename}}}% + \@starttoc{lof}% + } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\l@figure} +% This macro produces an entry in the list of figures. +% \begin{macrocode} +\if@oldtoc + \newcommand\l@figure{\@dottedtocline{1}{1.5em}{2.3em}} +\else + \newcommand\l@figure{\@regtocline{1}} +\fi +% \end{macrocode} +% \end{macro} +% +% \subsubsection{List of tables} +% +% \begin{macro}{\listoftables} +% This macro is used to request that \LaTeX{} produces a list of +% tables. It is very similar to |\tableofcontents|. +% +% \begin{macrocode} +\newcommand\listoftables{% + \if@twocolumn + \@restonecoltrue\onecolumn + \else + \@restonecolfalse + \fi + \chapter*{\listtablename + \@mkboth{\uppercase{\listtablename}}{\uppercase{\listtablename}}}% + \@starttoc{lot}% + \if@restonecol\twocolumn\fi + } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\l@table} +% This macro produces an entry in the list of tables. +% \begin{macrocode} +\let\l@table\l@figure +% \end{macrocode} +% \end{macro} +% +% \subsection{Bibliography} +% +% \begin{macro}{\bibindent} +% The ``open'' bibliography format uses an indentation of +% |\bibindent|. +% \begin{macrocode} +\newdimen\bibindent +\bibindent=1.5em +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\newblock} +% This is a dummy definition for this macro which is used in the +% \textsf{thebibliography} environment. +% \begin{macrocode} +\newcommand\newblock{} +% \end{macrocode} +% \end{macro} +% +% \begin{environment}{thebibliography} +% The `thebibliography' environment executes the following +% commands: +% +% |\renewcommand\newblock{\hskip .11em \@plus .33em \@minus .07em}| +% -- Defines the ``closed'' format, where the blocks (major units +% of information) of an entry run together. +% +% |\sloppy| -- Used because it's rather hard to do line breaks in +% bibliographies, +% +% |\sfcode`\.=1000\relax| -- +% Causes a `.' (period) not to produce an end-of-sentence space. +% +% The implementation of this environment is based on the generic +% list environment. It uses the \Lcount{enumiv} counter internally +% to generate the labels of the list. +% +% When an empty `thebibliography' environment is found, a warning +% is issued. +% +% \begin{macrocode} +\newenvironment{thebibliography}[1] + {\chapter*{\bibname + \@mkboth{\uppercase{\bibname}}% + {\uppercase{\bibname}}}% + \list{\@biblabel{\arabic{enumiv}}}% + {\settowidth\labelwidth{\@biblabel{#1}}% + \leftmargin\labelwidth + \advance\leftmargin\labelsep + \if@openbib + \advance\leftmargin\bibindent + \itemindent -\bibindent + \listparindent \itemindent + \parsep \z@ + \fi + \usecounter{enumiv}% + \let\p@enumiv\@empty + \renewcommand\theenumiv{\arabic{enumiv}}}% + \if@openbib + \renewcommand\newblock{\par} + \else + \renewcommand\newblock{\hskip .11em \@plus.33em \@minus.07em}% + \fi + \sloppy\clubpenalty4000\widowpenalty4000% + \sfcode`\.=\@m} + {\def\@noitemerr{\@warning{Empty `thebibliography' environment}}% + \endlist} +% \end{macrocode} +% \end{environment} +% +% \begin{macro}{\@biblabel} +% The label for a |\bibitem[...]| command is produced by this +% macro. The default from \file{latex.dtx} is used. +% \begin{macrocode} +% \renewcommand\@biblabel[1]{[#1]\hfill} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@cite} +% The output of the |\cite| command is produced by this macro. The +% default from \file{latex.dtx} is used. +% \begin{macrocode} +% \renewcommand\@cite[1]{[#1]} +% \end{macrocode} +% \end{macro} +% +% \subsection{The index} +% +% \begin{environment}{theindex} +% The environment `theindex' can be used for indices. It makes an +% index with two columns, with each entry a seperate paragraph. At +% the user level the commands |\item|, |\subitem| and |\subsubitem| +% are used to produce index entries of various levels. When a new +% letter of the alphabet is encountered an amount of |\indexspace| +% white space can be added. +% +% \begin{macrocode} +\newenvironment{theindex} + {\if@twocolumn + \@restonecolfalse + \else + \@restonecoltrue + \fi + \columnseprule \z@ + \columnsep 35\p@ + \twocolumn[\@makeschapterhead{\indexname}]% + \@mkboth{\uppercase{\indexname}}% + {\uppercase{\indexname}}% + \thispagestyle{plain}\parindent\z@ + \parskip\z@ \@plus .3\p@\relax + \let\item\@idxitem} +% \end{macrocode} +% When the document continues after the index and it was a one +% column document we have to switch back to one column after the +% index. +% \begin{macrocode} + {\if@restonecol\onecolumn\else\clearpage\fi} +% \end{macrocode} +% \end{environment} +% +% \begin{macro}{\@idxitem} +% \begin{macro}{\subitem} +% \begin{macro}{\subsubitem} +% Thsee macros are used to format the entries in the index. ^^AA ??? +% \begin{macrocode} +\newcommand\@idxitem {\par\hangindent 40\p@} +\newcommand\subitem {\par\hangindent 40\p@ \hspace*{20\p@}} +\newcommand\subsubitem{\par\hangindent 40\p@ \hspace*{30\p@}} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\indexspace} +% The amount of white space that is inserted between `letter +% blocks' in the index. +% \begin{macrocode} +\newcommand\indexspace{\par \vskip 10\p@ \@plus5\p@ \@minus3\p@\relax} +% \end{macrocode} +% \end{macro} +% +% \subsection{Footnotes} +% +% \begin{macro}{\footnoterule} +% Usually, footnotes are separated from the main body of the text +% by a small rule. This rule is drawn by the macro |\footnoterule|. +% We have to make sure that the rule takes no vertical space (see +% \file{plain.tex}) so we compensate for the natural heigth of the +% rule of 0.4pt by adding the right amount of vertical skip. +% +% To prevent the rule from colliding with the footnote we first add +% a little negative vertical skip, then we put the rule and add +% some positive vertical skip. +% \begin{macrocode} +\renewcommand\footnoterule{% + \kern-3\p@ + \kern.5\baselineskip + \hrule\@width\unitindent + \kern.4\baselineskip +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\c@footnote} +% Footnotes are numbered within chapters. +% \begin{macrocode} +% \newcounter{footnote} +\@addtoreset{footnote}{chapter} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@makefntext} +% The footnote mechanism of \LaTeX{} calls the macro |\@makefntext| +% to produce the actual footnote. The macro gets the text of the +% footnote as its argument and should use |\@thefnmark| as the mark +% of the footnote. The macro |\@makefntext|is called when +% effectively inside a |\parbox| of width |\columnwidth| (i.e., +% with |\hsize| = |\columnwidth|). +% +% An example of what can be achieved is given by the following piece +% of \TeX\ code. +% \begin{verbatim} +% \long\def\@xmakefntext#1#2{% +% %<-type3> \parindent=.5\unitindent +% %<+type3> \parindent=\z@\parskip=.5\baselineskip +% \def\labelitemi{--}\@revlabeltrue +% {\setbox0=\hbox {#1\hskip.5em plus 1fil}% +% \dimen0=2\wd0 +% \ifdim\dimen0>\unitindent +% \global\unitindent=\dimen0 +% \@indentset +% \fi}% +% \@setpar{\@@par +% \@tempdima \hsize +% \advance\@tempdima-.5\unitindent +% \parshape \@ne .5\unitindent \@tempdima}% +% \par +% \noindent\llap{\hbox to .5\unitindent{#1\hfil}}#2} +% \end{verbatim} +% The effect of this definition is that all lines of the footnote +% are indented by 10pt, while the first line of a new paragraph is +% indented by 1em. To change these dimensions, just substitute the +% desired value for `10pt' (in both places) or `1em'. The mark is +% flushright against the footnote. +% +% In these document classes we use a simpler macro, in which the +% footnote text is set like an ordinary text paragraph, with no +% indentation except on the first line of the footnote. Thus, all +% the macro must do is set |\parindent| to the appropriate value +% for succeeding paragraphs and put the proper indentation before +% the mark. We change the label of itemized lists inside footnotes +% and need to check that the |\unitindent| is large enough for our +% purposes. +% +% For most of the document classes produced from this file we need +% a slightly modified |\@makefntext| on the title page, so we +% introduce an extra macro, |\@xmakefntext|. +% \begin{macrocode} +\def\@makefntext{\@xmakefntext{$\m@th\@thefnmark$.}} +\long\def\@xmakefntext#1{% + \parindent\z@ + \def\labelitemi{--}\@revlabeltrue + {\setbox0=\hbox {#1\hskip.5em plus 1fil} + \dimen0=2\wd0\relax + \ifdim\dimen0>\unitindent + \global\unitindent=\dimen0\relax + \@indentset + \fi} + \leavevmode\hbox to .5\unitindent{#1\hfil}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@makefnmark} +% The footnote markers that are printed in the text to point to the +% footnotes should be produced by the macro |\@makefnmark|. We use +% the default definition for it. +% \begin{macrocode} +%\def\@makefnmark{\hbox{$^{\@thefnmark}\m@th$}} +% \end{macrocode} +% \end{macro} +% +% \section{Initialization} +% +% \subsection{Words} +% +% \begin{macro}{\contentsname} +% \begin{macro}{\listfigurename} +% \begin{macro}{\listtablename} +% \begin{macro}{\refname} +% \begin{macro}{\bibname} +% \begin{macro}{\indexname} +% \begin{macro}{\figurename} +% \begin{macro}{\tablename} +% \begin{macro}{\partname} +% \begin{macro}{\chaptername} +% \begin{macro}{\appendixname} +% \begin{macro}{\abstractname} +% \begin{macro}{\seename} +% \begin{macro}{\andname} +% This document class is for documents prepared in the English language. +% To prepare a version for another language, various English words must +% be replaced. All the English words that require replacement are +% defined below in command names. +% +% \begin{macrocode} +\newcommand\contentsname{Contents} +\newcommand\listfigurename{List of Figures} +\newcommand\listtablename{List of Tables} +\newcommand\bibname{Bibliography} +\newcommand\indexname{Index} +\newcommand\figurename{Figure} +\newcommand\tablename{Table} +\newcommand\partname{Part} +\newcommand\chaptername{Chapter} +\newcommand\appendixname{Appendix} +\newcommand\abstractname{Abstract} +\newcommand\seename{see} +\newcommand\andname{and} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \subsection{Date} +% +% \begin{macro}{\today} +% This macro uses the \TeX\ primitives |\month|, |\day| and |\year| +% to provide the date of the \LaTeX-run. +% \begin{macrocode} +\newcommand\today{\ifcase\month\or + January\or February\or March\or April\or May\or June\or + July\or August\or September\or October\or November\or December\fi + \space\number\day, \number\year} +% \end{macrocode} +% \end{macro} +% +% \subsection{Two column mode} +% +% \begin{macro}{\columnsep} +% This gives the distance between two columns in two column mode. +% \begin{macrocode} +\setlength\columnsep{10\p@} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\columnseprule} +% This gives the width of the rule between two columns in two +% column mode. We have no visible rule. +% \begin{macrocode} +\setlength\columnseprule{0\p@} +% \end{macrocode} +% \end{macro} +% +% \subsection{The page style} +% +% We have \pstyle{plain} pages unless the user specified +% otherwise. We use arabic pagenumbers. +% \begin{macrocode} +\pagestyle{plain} +\pagenumbering{arabic} % Arabic page numbers +% \end{macrocode} +% +% When the \Lopt{twocolumn} option was specified we call +% |\twocolumn| to activate this mode. We try to make each column as +% long as the others, but call |sloppy| to make our life easier. +% \begin{macrocode} +\if@twocolumn + \twocolumn + \sloppy + \flushbottom +% \end{macrocode} +% Normally we call |\onecolumn| to initiate typesetting in one +% column. +% \begin{macrocode} +\else + \onecolumn +\fi +% \end{macrocode} +% +% \begin{macro}{\frenchspacing} +% Controls the amount of space after a punctuation mark. +% \begin{macrocode} +\frenchspacing +%</class> +% \end{macrocode} +% \end{macro} +% +% \Finale +% +\endinput +% |