NTG Document Class brief for L^{A}TEX version 2e

Victor Eijkhout  Johannes Braams

February 17, 1997

Contents

1 Introduction 2

2 Initial Code 2 2.1 Setting Paper Sizes . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 2.2 Choosing the type size . . . . . . . . . . . . . . . . . . . . . . . . . 3 2.3 Two-side or one-side printing . . . . . . . . . . . . . . . . . . . . . 4 2.4 Draft option . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 2.5 Equation numbering on the left . . . . . . . . . . . . . . . . . . . . 4 2.6 Flush left displays . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 2.7 Typewriter alignment . . . . . . . . . . . . . . . . . . . . . . . . . 4 2.8 Folding lines . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 2.9 Address placement . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 2.10 Support for different languages . . . . . . . . . . . . . . . . . . . . 5

3 Executing Options 5

4 Loading Packages 8

5 Document Layout 8 5.1 Fonts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 5.2 Paragraphing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 5.3 Page Layout . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9

5.3.1 Vertical spacing . . . . . . . . . . . . . . . . . . . . . . . . . 9 5.3.2 The dimension of text . . . . . . . . . . . . . . . . . . . . . 10 5.3.3 Margins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 5.3.4 The address field . . . . . . . . . . . . . . . . . . . . . . . . 10 5.3.5 Changing head and text heights . . . . . . . . . . . . . . . 10 5.3.6 Information in the foot . . . . . . . . . . . . . . . . . . . . 11 5.3.7 Footnotes . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11

5.4 Page Styles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 5.4.1 Marking conventions . . . . . . . . . . . . . . . . . . . . . . 11 5.4.2 Defining the page styles . . . . . . . . . . . . . . . . . . . . 12 6 Document Markup 13

6.1 Global Declarations . . . . . . . . . . . . . . . . . . . . . . . . . . 13 6.2 The generic letter commands . . . . . . . . . . . . . . . . . . . . . 14

6.2.1 The address window . . . . . . . . . . . . . . . . . . . . . . 16 6.2.2 The reference line . . . . . . . . . . . . . . . . . . . . . . . 17 6.2.3 The headers and footers . . . . . . . . . . . . . . . . . . . . 18 6.2.4 The little rules . . . . . . . . . . . . . . . . . . . . . . . . . 19 6.2.5 Page breaking control . . . . . . . . . . . . . . . . . . . . . 19

6.3 Customizing the labels . . . . . . . . . . . . . . . . . . . . . . . . . 22 6.4 Lists . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23

6.4.1 General List Parameters . . . . . . . . . . . . . . . . . . . . 23 6.4.2 Enumerate . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 6.4.3 Itemize . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 6.4.4 Description . . . . . . . . . . . . . . . . . . . . . . . . . . . 26

6.5 Defining new environments . . . . . . . . . . . . . . . . . . . . . . 26 6.5.1 Verse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 6.5.2 Quotation . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 6.5.3 Quote . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 6.5.4 Theorem . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27

6.6 Setting parameters for existing environments . . . . . . . . . . . . 27 6.6.1 Array and tabular . . . . . . . . . . . . . . . . . . . . . . . 27 6.6.2 Tabbing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 6.6.3 Minipage . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 6.6.4 Framed boxes . . . . . . . . . . . . . . . . . . . . . . . . . . 28 6.6.5 Equation and eqnarray . . . . . . . . . . . . . . . . . . . . . 28

6.7 Font changing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28 6.8 Footnotes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 6.9 Words . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 6.10 Two column mode . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 6.11 The page style . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 6.12 Single or double sided printing . . . . . . . . . . . . . . . . . . . . 32

1 Introduction

This file contains the document class brief that was made available by Working Group 13 of the NTG (Nederlandstalige TEX Gebruikersgroep). It defines more commands than the standard document class letter, but a letter made with the letter document class is still processable with this document class.

2 Initial Code

In this part we define a few comands that are used later on.

\@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.

1 ⟨∗brief⟩

2 \newcommand*\@ptsize{}

\if@typhulp This switch is used to decide whether or not to put a small line on the paper that is used to align the paper in a typewriter.

 3 \newif\if@typhulp

\if@streepjes A switch to indicate if the ‘folding lines’ should be printed

 4 \newif\if@streepjes

\if@adresrechts This switch indicates if the addressing information is to be set on the left or on the right side of the letter.

 5 \newif\if@adresrechts

\if@elfinch A switch to remember whether we are using A4 or letter paper. (possibly obsolete)

 6 \newif\if@elfinch

2.1 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.

 7 \DeclareOption{a4paper}
 8 {\setlength\paperheight {297mm}%
 9  \setlength\paperwidth  {210mm}\@elfinchfalse}
10 \DeclareOption{a5paper}
11 {\ClassWarning{brief}{Paper size A5 not supported, using A4}%
12  \setlength\paperheight {297mm}%
13  \setlength\paperwidth  {210mm}\@elfinchfalse}
14 \DeclareOption{b5paper}
15 {\ClassWarning{brief}{Paper size B5 not supported, using A4}%
16  \setlength\paperheight {297mm}%
17  \setlength\paperwidth  {210mm}\@elfinchfalse}
18 \DeclareOption{letterpaper}
19 {\setlength\paperheight {11in}%
20  \setlength\paperwidth  {8.5in}\@elfinchtrue}
21 \DeclareOption{USletter}
22 {\setlength\paperheight {11in}%
23  \setlength\paperwidth  {8.5in}\@elfinchtrue}
24 \DeclareOption{legalpaper}
25 {\ClassWarning{brief}
26  {Paper size `legal' not supported, using `letter'}%
27  \setlength\paperheight {14in}%
28  \setlength\paperwidth  {8.5in}\@elfinchtrue}
29 \DeclareOption{executivepaper}
30 {\ClassWarning{brief}
31  {Paper size `executive' not supported, using `letter'}%
32  \setlength\paperheight {10.5in}%
33  \setlength\paperwidth  {7.25in}\@elfinchtrue}

2.2 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 9 and 8 assuming that a class wont define both 8pt and 18pt options.

34 \DeclareOption{10pt}{\renewcommand*\@ptsize{0}}
35 \DeclareOption{11pt}{\renewcommand*\@ptsize{1}}
36 \DeclareOption{12pt}{\renewcommand*\@ptsize{2}}

2.3 Two-side or one-side printing

Two-sided printing was not supported in the L^{A}TEX 2.09 version of this documentclass.

37 \if@compatibility
38 \DeclareOption{twoside}{\@latexerr{No 'twoside' layout for letters}%
39  \@eha}
40 \else
41 \DeclareOption{twoside}{\@twosidetrue  \@mparswitchtrue}
42 \fi
43 \DeclareOption{oneside}{\@twosidefalse \@mparswitchfalse}

2.4 Draft option

If the user requests draft we show any overfull boxes. We could probably add some more interesting stuff to this option.

44 \DeclareOption{draft}{\setlength\overfullrule{5pt}}
45 \DeclareOption{final}{\setlength\overfullrule{0pt}}

2.5 Equation numbering on the left

The option leqno can be used to get the equation numbers on the left side of the equation.

46 \DeclareOption{leqno}{\input{leqno.clo}}

2.6 Flush left displays

The option 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.

47 \DeclareOption{fleqn}{\input{fleqn.clo}}

2.7 Typewriter alignment

48 \DeclareOption{typhulp}{\@typhulptrue}
49 \DeclareOption{geentyphulp}{\@typhulpfalse}

2.8 Folding lines

It is possible to print ‘folding lines’ on the far right side of the paper.

50 \DeclareOption{streepjes}{\@streepjestrue}
51 \DeclareOption{geenstreepjes}{\@streepjesfalse}

2.9 Address placement

The address information can be put either on the left or on the right side of the letter

52 \DeclareOption{adreslinks}{\@adresrechtsfalse}
53 \DeclareOption{adresrechts}{\@adresrechtstrue}

2.10 Support for different languages

In the original document style brief the options to support the various languages were all dutch words. To be compatible with both the old version of the document class and with the recommended set of language options we have at least two options for each language.

First Dutch,

54 \DeclareOption{nederlands}{\AtEndOfClass{\dutchbrief}}
55 \DeclareOption{dutch}     {\AtEndOfClass{\dutchbrief}}

then British English,

56 \DeclareOption{engels}    {\AtEndOfClass{\englishbrief}}
57 \DeclareOption{english}   {\AtEndOfClass{\englishbrief}}

American English,

58 \DeclareOption{USengels}  {\AtEndOfClass{\americanbrief}}
59 \DeclareOption{american}  {\AtEndOfClass{\americanbrief}}

German

60 \DeclareOption{duits}     {\AtEndOfClass{\germanbrief}}
61 \DeclareOption{german}    {\AtEndOfClass{\germanbrief}}

and finally french.

62 \DeclareOption{frans}     {\AtEndOfClass{\frenchbrief}}
63 \DeclareOption{french}    {\AtEndOfClass{\frenchbrief}}
64 \DeclareOption{francais}  {\AtEndOfClass{\frenchbrief}}

3 Executing Options

Here we execute the default options to initialize certain variables.

65 \ExecuteOptions{a4paper,11pt,oneside,onecolumn,final,%
66  geentyphulp,geenstreepjes,adreslinks,%
67  nederlands}

The \ProcessOptions command causes the execution of the code for every option FOO which is declared and for which the user typed the FOO option in his \documentclass command. For every option 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.

68 \ProcessOptions\relax

Now that all the options have been executed we can define the user-level size changing commands. Their definition depends on which of the 10pt, 11pt or 12pt options was specified.

\normalsize \@normalsize The user level command for the main size is \normalsize. Internally L^{A}TEX uses \@normalsize when it refers to the main size. \@normalsize will be defined to work like \normalsize if the latter is redefined from its default definition (that just issues an error message). Otherwise \@normalsize simply selects a 10pt/12pt size.

The \normalsize macro also sets new values for

\abovedisplayskip, \abovedisplayshortskip and
69 \ifcase\@ptsize
70 \renewcommand*\normalsize{%
71  \@setfontsize\normalsize\@xpt\@xiipt
72  \abovedisplayskip 10\p@ \@plus2\p@ \@minus5\p@
73  \abovedisplayshortskip \z@ \@plus3\p@
74  \belowdisplayshortskip 6\p@ \@plus3\p@ \@minus3\p@
75  \belowdisplayskip \abovedisplayskip
76  \let\@listi\@listI}
77 \or
78 \renewcommand*\normalsize{%
79  \@setfontsize\normalsize\@xipt{13.6}%
80  \abovedisplayskip 11\p@ \@plus3\p@ \@minus6\p@
81  \abovedisplayshortskip \z@ \@plus3\p@
82  \belowdisplayshortskip 6.5\p@ \@plus3.5\p@ \@minus3\p@
83  \belowdisplayskip \abovedisplayskip
84  \let\@listi\@listI}
85 \or
86 \renewcommand*\normalsize{%
87  \@setfontsize\normalsize\@xiipt{15}%
88  \abovedisplayskip 12\p@ \@plus3\p@ \@minus7\p@
89  \abovedisplayshortskip \z@ \@plus3\p@
90  \belowdisplayshortskip 6.5\p@ \@plus3.5\p@ \@minus3\p@
91  \belowdisplayskip \abovedisplayskip
92  \let\@listi\@listI}
93 \fi
Make \@normalsize a synonymn for \normalsize.
94 \let\@normalsize\normalsize

We initially choose the normalsize font.

95 \normalsize
\small This is similar to \normalsize.
96 \ifcase\@ptsize
97 \newcommand*\small{%
98  \@setfontsize\small\@ixpt{11}%
99  \abovedisplayskip 8.5\p@ \@plus3\p@ \@minus4\p@
100  \abovedisplayshortskip \z@ \@plus2\p@
101  \belowdisplayshortskip 4\p@ \@plus2\p@ \@minus2\p@
102  \belowdisplayskip \abovedisplayskip}
103 \or
104 \newcommand*\small{%
105  \@setfontsize\small\@xpt\@xiipt
106  \abovedisplayskip 10\p@ \@plus2\p@ \@minus5\p@
107  \abovedisplayshortskip \z@ \@plus3\p@
108  \belowdisplayshortskip 6\p@ \@plus3\p@ \@minus3\p@
109  \belowdisplayskip \abovedisplayskip}

110 \or
111 \newcommand*\small{%
112  \@setfontsize\small\@xipt{13.6}%
113  \abovedisplayskip 11\p@ \@plus3\p@ \@minus6\p@
114  \abovedisplayshortskip \z@ \@plus3\p@
115  \belowdisplayshortskip 6.5\p@ \@plus3.5\p@ \@minus3\p@
116  \belowdisplayskip \abovedisplayskip}
117 \fi
\footnotesize This is similar to \normalsize.
118 \ifcase\@ptsize
119 \newcommand*\footnotesize{%
120  \@setfontsize\footnotesize\@viiipt{9.5}%
121  \abovedisplayskip 6\p@ \@plus2\p@ \@minus4\p@
122  \abovedisplayshortskip \z@ \@plus\p@
123  \belowdisplayshortskip 3\p@ \@plus\p@ \@minus2\p@
124  \belowdisplayskip \abovedisplayskip}
125 \or
126 \newcommand*\footnotesize{%
127  \@setfontsize\footnotesize\@ixpt{11}%
128  \abovedisplayskip 8\p@ \@plus2\p@ \@minus4\p@
129  \abovedisplayshortskip \z@ \@plus\p@
130  \belowdisplayshortskip 4\p@ \@plus2\p@ \@minus2\p@
131  \belowdisplayskip \abovedisplayskip}
132 \or
133 \newcommand*\footnotesize{%
134  \@setfontsize\footnotesize\@xpt\@xiipt
135  \abovedisplayskip 10\p@ \@plus2\p@ \@minus5\p@
136  \abovedisplayshortskip \z@ \@plus3\p@
137  \belowdisplayshortskip 6\p@ \@plus3\p@ \@minus3\p@
138  \belowdisplayskip \abovedisplayskip}
139 \fi

\scriptsize \tiny \large \Large \LARGE \huge \Huge These are all much simpler than the previous macros, they just select a new fontsize, but leave the parameters for displays and lists alone.

140 \ifcase\@ptsize
141 \newcommand*\scriptsize{\@setfontsize\scriptsize\@viipt\@viiipt}
142 \newcommand*\tiny{\@setfontsize\tiny\@vpt\@vipt}
143 \newcommand*\large{\@setfontsize\large\@xiipt{14}}
144 \newcommand*\Large{\@setfontsize\Large\@xivpt{18}}
145 \newcommand*\LARGE{\@setfontsize\LARGE\@xviipt{22}}
146 \newcommand*\huge{\@setfontsize\huge\@xxpt{25}}
147 \newcommand*\Huge{\@setfontsize\Huge\@xxvpt{30}}
148 \or
149 \newcommand*\scriptsize{\@setfontsize\scriptsize\@viiipt{9.5}}
150 \newcommand*\tiny{\@setfontsize\tiny\@vipt\@viipt}
151 \newcommand*\large{\@setfontsize\large\@xiipt{14}}
152 \newcommand*\Large{\@setfontsize\Large\@xivpt{18}}
153 \newcommand*\LARGE{\@setfontsize\LARGE\@xviipt{22}}
154 \newcommand*\huge{\@setfontsize\huge\@xxpt{25}}
155 \newcommand*\Huge{\@setfontsize\Huge\@xxvpt{30}}
156 \or
157 \newcommand*\scriptsize{\@setfontsize\scriptsize\@viiipt{9.5}}
158 \newcommand*\tiny{\@setfontsize\tiny\@vipt\@viipt}

159 \newcommand*\large{\@setfontsize\large\@xivpt{18}}
160 \newcommand*\Large{\@setfontsize\Large\@xviipt{22}}
161 \newcommand*\LARGE{\@setfontsize\LARGE\@xxpt{25}}
162 \newcommand*\huge{\@setfontsize\huge\@xxvpt{30}}
163 \let\Huge=\huge
164 \fi

4 Loading Packages

This class file does not load additional packages.

5 Document Layout

In this section we are finally dealing with the nasty typographical details.

5.1 Fonts

We use two fixed fonts in these letters.

165 \newfont\refkopfont{cmssq8}
166 \DeclareFixedFont\kleinvet{\encodingdefault}%
167  {\rmdefault}%
168  {\bfdefault}%
169  {\shapedefault}%
170  {7}

5.2 Paragraphing

\lineskip \normallineskip These parameters control TEX’s behaviour when two lines tend to come too close together.

171 \setlength\lineskip{1\p@}
172 \setlength\normallineskip{1\p@}

\baselinestretch This is used as a multiplier for \baselineskip. The default is to not stretch the baselines.

173 \renewcommand*\baselinestretch{}

\parskip \parindent \parskip gives extra vertical space between paragraphs and \parindent is the width of the paragraph indentation. Letters are typeset without paragraph indentation.

174 \setlength\parskip{0.7em \@plus .3em \@minus .2em}
175 \setlength\parindent{0\p@}
\@lowpenalty \@medpenalty \@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, dependant on their argument.

176 \@lowpenalty   51
177 \@medpenalty  151
178 \@highpenalty 301

\clubpenalty \widowpenalty These penalties are use to discourage club and widow lines. Because we use their default values we only show them here, commented out.

179 % \clubpenalty  150
180 % \widowpenalty 150

\displaywidowpenalty \predisplaypenalty \postdisplaypenalty Discourage (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.

181 % \displaywidowpenalty 50
182 % \predisplaypenalty   10000
183 % \postdisplaypenalty  0

\interlinepenalty Allow the breaking of a page in the middle of a paragraph.

184 % \interlinepenalty 0

\brokenpenalty We allow the breaking of a page after a hyphenated line.

185 % \brokenpenalty 0

5.3 Page Layout

All margin dimensions are measured from a point one inch from the top and lefthand side of the page.

5.3.1 Vertical spacing

\headheight \headsep The \headheight is the height of the box that will contain the running head. The \headsep is the distance between the bottom of the running head and the top of the text. \topskip is the \baselineskip for the first line on a page.

186 \setlength\headheight{37mm}
187 \setlength\headsep   {0mm}

\footskip The distance from the baseline of the box which contains the running footer to the baseline of last line of text is controlled by the \footskip. Bottom of page:

188 \setlength\footskip{25\p@}

\maxdepth \@maxdepth The TEX primitive register \maxdepth has a function that is similar to that of \topskip. The register \@maxdepth should always contain a copy of \maxdepth. In both plain TEX and L^{A}TEX 2.09 \maxdepth had a fixed value of 4pt; in native L^{A}TEX2e mode we let the value depend on the typesize. We set it so that \maxdepth + \topskip = typesize ×1.5. As it happens, in these classes \topskip is equal to the typesize, therefor we set \maxdepth to half the value of \topskip.

189 \if@compatibility
190 \setlength\maxdepth{4\p@}
191 \else
192 \setlength\maxdepth{.5\topskip}
193 \fi
194 \setlength\@maxdepth\maxdepth

5.3.2 The dimension of text

\textwidth \textheight The dimensions of the text are fixed; they are defined in the nen norm which this class implements.

195 \setlength\textwidth{144mm}
196 \setlength\textheight{197mm}
197 \if@elfinch \addtolength\textheight{-17.6mm} \fi
\rightskip \@rightskip
198 \setlength\@rightskip{0cm \@plus 5cm}
199 \setlength\rightskip{\@rightskip}

5.3.3 Margins

\oddsidemargin \evensidemargin \marginparwidth Again, these dimensions are based on the nen norm.
200 \setlength\@tempdima{\paperwidth}
201 \addtolength\@tempdima{-2in}
202 \addtolength\@tempdima{-\textwidth}
203 \setlength\oddsidemargin   {7.6mm}
204 \setlength\evensidemargin  {\oddsidemargin}
205 \setlength\marginparwidth  {0\p@}

\marginparsep \marginparpush The horizontal space between the main text and marginal notes is determined by \marginparsep, the minimum vertical separation between two marginal notes is

 controlled by \marginparpush.
206 \setlength\marginparsep {0\p@}
207 \setlength\marginparpush{0\p@}

\topmargin The \topmargin is the distance between the top of ‘the printable area’ –which is 1 inch below the top of the paper– and the top of the box which contains the running head.

208 \setlength\topmargin{-12.4mm}

5.3.4 The address field

The address information has to be put on a specific place.

\vensterskip
\@vensterskip
209 \newdimen\vensterskip
210 \setlength\vensterskip{50mm}
211 \newdimen\@vensterskip

5.3.5 Changing head and text heights

This class has a much higher head on the first page of a letter than on subsequent pages.

\@firstheadheight
\@otherheadheight
\@othertextheight
\@otherheadsep
\@vervolgsep

212 \newdimen\@firstheadheight
213 \newdimen\@otherheadheight
214 \newdimen\@othertextheight
215 \newdimen\@otherheadsep
216 \newdimen\@vervolgsep
217 \setlength\@otherheadsep{2mm}

\@prepareerhoofden
218 \def\@prepareerhoofden{%
219 \setlength\@vensterskip{\vensterskip}%
220 \addtolength\@vensterskip{-50mm}%
221 \setlength\@firstheadheight{\headheight}%
222 \setlength\@otherheadheight{\headheight}%
223 \setlength\@othertextheight{\textheight}%

224 }

5.3.6 Information in the foot

We also reserve some space at the bottom of the paper to print some information about the sender of the letter.

\footsep The distance between the text and this foot information

225 \newdimen\footsep
226 \setlength\footsep{15mm}

5.3.7 Footnotes

\footnotesep \footnotesep is the height of the strut placed at the beginning of every footnote. It equals the height of a normal \footnotesize strut in this class, thus no extra space occurs between footnotes.

227 \setlength\footnotesep{12\p@}

\footins \skip\footins is the space between the last line of the main text and the top of the first footnote.

228 \setlength{\skip\footins}{10\p@ \@plus 2\p@ \@minus 4\p@}

5.4 Page Styles

The page style 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).

\@evenhead \@oddhead \@evenfoot \@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.

5.4.1 Marking conventions

To make headings determined by the sectioning commands, the page style defines

the commands \chaptermark, \sectionmark, . . . , where \chaptermark{⟨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.)

L^{A}TEX extends TEX’s \mark facility by producing two kinds of marks, a ‘left’ and a ‘right’ mark, using the following commands:

\markboth{⟨LEFT ⟩}{⟨RIGHT ⟩}: Adds both marks. \markright{⟨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.

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.

229 % %%%\mark{{}{}}   % Initializes TeX's marks   <--- can vanish

5.4.2 Defining the page styles

The pagestyles empty and plain are defined in the L^{A}TEX kernel (ltpage.dtx), but these definitions are changed to a simpler version for this document class.

\ps@headings The definition of the page style headings has to be different for two sided printing than it is for one sided printing.

230 \if@twoside
231 \def\ps@headings{%

The running feet contain some information about the sender of the letter. The feet aer the same for even and odd pages.

232  \def\@oddfoot{\voetregel\hss}%
233  \let\@evenfoot\@oddfoot

The running head contains some information about this letter. The head is the same for even and odd pages.

234  \def\@oddhead{%
235  \vbox to \@otherheadheight
236  {\vervolghoofd\vfil
237  \if@streepjes\streepjes{\@firstheadheight}\fi}\hss}
238  \let\@evenhead\@oddhead}

For one sided printing we don’t need to define \@evenhead so the definition is somewhat simpler.

239 \else
240 \def\ps@headings{%
241  \def\@oddfoot{\voetregel\hss}%
242  \def\@oddhead{%
243  \vbox to \@otherheadheight
244  {\vervolghoofd\vfil
245  \if@streepjes\streepjes{\@otherheadheight}\fi}\hss}}
246 \fi

\ps@firstpage On the first page the head contains much more than on other pages, therefore the height of the head and text need to be adapted.

247 \def\ps@firstpage{%
248 \global\headheight=\@otherheadheight
249 \global\textheight=\@othertextheight %?? werkt dit ??
250 \global\headsep=\@otherheadsep
251 \def\@oddhead{\vbox to \@firstheadheight
252  {\briefhoofd\vfil
253  \if@streepjes\streepjes{\@firstheadheight}\fi}%
254  \hss}
255 \def\@evenhead{}
256 \def\@oddfoot{\voetregel\hss} \let\@evenfoot\@oddfoot}

\ps@empty The definition of the page style empty is simple: No running head or foot at all.

257 \def\ps@empty{%
258  \let\@oddfoot\@empty\let\@oddhead\@empty
259  \let\@evenfoot\@empty\let\@evenhead\@empty}

\ps@plain The definition of the page style plain is again simple.

260 \def\ps@plain{%
261  \let\@oddhead\@empty
262  \def\@oddfoot{\normalfont\hfil\thepage}%
263  \def\@evenfoot{\normalfont\hfil\thepage}}

6 Document Markup

6.1 Global Declarations

The following declarations, shown with examples, give information about the sender:

• \name{Dr. L. User} : to be used for the return address on the envelope.

• \signature{Larry User} : goes after the closing.

• \address{3245 Foo St.\\Gnu York} : used as the return address in the

letter and on the envelope. If not declared, then an institutional standard address is used.

• \location{Room 374} : Acts as modifier to the standard institutional address.

• \telephone{(415)123-4567} : Just in case some style puts it on the letter.

\name \fromname
264 \def\name#1{\def\fromname{#1}}
265 \def\fromname{}
\ondertekening \signature \fromsig This macro stores the signature.
266 \newcommand*\ondertekening[1]{\def\fromsig{#1}}
267 \def\fromsig{}
268 \let\signature\ondertekening

\address
269 \newcommand*\address[1]{\maakbriefhoofd*{}{#1}}
\location
\fromlocation
270 \newcommand*{\location}[1]{\def\fromlocation{#1}}
271 \def\fromlocation{}
\telephone
\telephonenum
272 \newcommand*{\telephone}[1]{\def\telephonenum{#1}}
273 \def\telephonenum{}

\makelabels The \makelabels declaration causes mailing labels to be made.

274 \newcommand*{\makelabels}{%

At the beginning of the document, we need to activate the \@mlabel and \@startlabels commands, as well as write \@startlabels to the .aux file.

275 \AtBeginDocument{%
276  \let\@startlabels\startlabels
277  \let\@mlabel\mlabel
278  \if@filesw
279  \immediate\write\@mainaux{\string\@startlabels}\fi}%

At the end of the document we need to write \clearpage to the .aux file.

280 \AtEndDocument{%
281  \if@filesw\immediate\write\@mainaux{\string\clearpage}\fi}}

\makelabels is allowed only before the \begin{document} command.

282 \@onlypreamble\makelabels

6.2 The generic letter commands

brief The brief environment creates a new letter, starting from page 1. (The first page is unnumbered.) It has a single argument, which is the adressee and his address, as in

   \begin{brief}{Sam Jones \\
                  Institute for Retarded Study\\
                  Princeton, N.J.}

Local declarations, such as \address, can follow the \begin{brief}.

283 \newenvironment{brief}[1]
284 {\newpage
285  \if@twoside \ifodd\c@page
286  \else\thispagestyle{empty} \hbox{}\newpage\fi
287  \fi
288  \c@page\@ne
289  \interlinepenalty=200 % smaller than the TeXbook value

The \leavevmode and \ignorespaces commands are there for protecting against an empty argument.

290  \@processto{\leavevmode\ignorespaces #1}%

Now we can start filling in the various fields in the references line. First the adressee.

291  \@defrefveld{\@Ad}{\geadresseerdetekst}{\toname}

Then the date. When nothing was specified we use \vandaag.

292  \ifdim\wd\@Dt=0cm \@defrefveld{\@Dt}{\datumtekst}{\vandaag}\fi

Now we can prepare the letterheads. It couldn’t be done earlier because the user can specify that he uses a different kind of ‘window envelope’.

293  \@prepareerhoofden

We may need to adapt the height of the head and the text body on the following pages. Therefore we measure the height of the head on those pages.

294  {\setbox\@tempboxa\vervolghoofd
295  \@tempdima\ht\@tempboxa
296  \advance\@tempdima by -\@otherheadheight
297  \ifdim\@tempdima>0\p@
298  \global\advance\@otherheadheight by \@tempdima
299  \global\advance\@othertextheight by -\@tempdima
300  \fi}

We have to do the same for the foot of the letter.

301  {\setbox\@tempboxa=\vbox{\voetregel}
302  \global\footskip=\ht\@tempboxa
303  \global\advance\footskip by \footsep}%

304 }

The end of the environment possibly writes the address information on the .aux file.

305 {\stopletter\@@par\pagebreak\@@par
306  \if@filesw
307  \begingroup
308  \let\\=\relax
309  \let\protect\@unexpandable@protect
310  \immediate\write\@auxout
311  {\string\@mlabel{\returnaddress}{\toname\\\toaddress}}%
312  \endgroup
313  \fi}

letter The letter environment is a synonime for the brief environment, to provide compatibility with the standard letter document class.

314 \let\letter\brief
315 \let\endletter\endbrief
\@processto \@xproc \@yproc  \@processto gets the \toname and \toaddress from the letter environment’s

macro argument. \@xproc and \@yproc are auxiliary macros.

316 \long\def\@processto#1{\@xproc #1\\@@@\ifx\toaddress\@empty
317  \else \@yproc #1@@@\fi}
318 \long\def\@xproc #1\\#2@@@{\def\toname{#1}\def\toaddress{#2}}
319 \long\def\@yproc #1\\#2@@@{\def\toaddress{#2}}

\antwoordadres The command \antwoordadres takes the return address as an argument. The various parts of the address should be separated by \\, which will be turned into bullets.

320 \newif\if@antwoordadres
321 \newcommand*\antwoordadres[1]{%
322 \@antwoordadrestrue\renewcommand*\@antwoordadres{#1}}
323 \newcommand*\@antwoordadres{}

6.2.1 The address window

The address for the letter will be placed in such a way that a ‘window envelope’ can be used to send the letter.

\adresveldbreedte The width of the address window.

324 \newdimen\adresveldbreedte

\adresveld This command formats the address window.

325 \newcommand*{\adresveld}{%
326 \hbox{}\kern-\topskip
327 \kern\@vensterskip
328 \begingroup

Compute the width of the address window

329  \if@adresrechts
330  \setlength\adresveldbreedte{4\refveldbreedte}%
331  \addtolength\adresveldbreedte{-76mm}%
332  \def\@tempa{\moveright 76mm}%
333  \else
334  \let\@tempa\relax
335  \setlength\adresveldbreedte{83mm}%
336  \fi

Store the address in a box.

337  \setbox\@tempboxa\vtop{%
338  \hsize\adresveldbreedte
339  \@normalsize
340  \parindent\z@\parskip\z@
341  \rightskip0\p@\@plus\adresveldbreedte
342  \let\\\@nobreakcr \toname \\ \toaddress}

Format the return address if one was given.

343  {\baselineskip\z@\lineskip\z@
344  \if@antwoordadres
345  \@tempa\vbox to \z@{%
346  \hb@xt@\adresveldbreedte{%
347  \kleinvet
348  \def\\{\unskip\enspace$\bullet$\enspace\ignorespaces}%
349  \@antwoordadres\hfil}
350  \kern2\p@\hrule \vss}
351  \fi

Print a small rule as typing aid if required.

352  \if@typhulp
353  \@tempa\llap{\vbox to \z@{\vskip9mm\streepje\vss}}
354  \fi

And finally print the address information. Note that this way of position the box which contains the address information has the advantage that no matter how high or deep the box is, the following information will always be printed in the same spot on the paper.

355  \kern9mm \kern-\ht\@tempboxa \@tempdima=\dp\@tempboxa
356  \@tempa\box\@tempboxa \kern-\@tempdima
357  \vskip31mm}\endgroup}

6.2.2 The reference line

\refveldbreedte The width of the various fields in this line. It is determined in nen 3516

358 \newdimen\refveldbreedte
359 \setlength\refveldbreedte{38mm}

\@defrefveld A macro to help in defining the various fields.

360 \def\@defrefveld#1#2#3{\setbox#1\@refveld{#2}{#3}}

\@refveld The macro \@refveld stores the formatted field in a box.

361 \def\@refveld#1#2{%
362 \vtop{\hsize\refveldbreedte
363  \parskip\z@\parindent\z@
364  \everypar{}%
365  \lineskiplimit\z@\baselineskip12\p@
366  \lineskip\z@
367  \rightskip0\p@ \@plus \refveldbreedte \@minus .5\refveldbreedte
368  \vbox{\refkopfont\baselineskip10\p@#1\@@par}
369  \kern2\p@
370  \strut #2}}

\@UB \@UK \@OK \@Dt We allocate four box registers to store the four fields in

371 \newbox\@UB \newbox\@UK \newbox\@OK \newbox\@Dt

\uwbriefvan The command\uwbriefvan can be used to show the date of the letter to which your letter is an answer

372 \newcommand*\uwbriefvan[1]{\@defrefveld{\@UB}{\uwbrieftekst}{#1}}

\uwkenmerk The command \uwkenmerk can be used to show the reference of the letter to which your letter is an answer

373 \newcommand*\uwkenmerk[1]{\@defrefveld{\@UK}{\uwkenmerktekst}{#1}}

\onskenmerk Store our reference in a box register.

374 \newcommand*\onskenmerk[1]{\@defrefveld{\@OK}{\onskenmerktekst}{#1}}

\datum To store the date in a box register. When the user gives an empty argument no date will be printed. When he doesn’t use \datum he will get today’s date.

375 \newcommand*\datum[1]{\def\@tempa{}\def\@tempb{#1}%
376 \ifx\@tempa\@tempb
377  \setbox\@Dt\hbox{ }%
378 \else
379  \@defrefveld{\@Dt}{\datumtekst}{#1}%
380 \fi}

\referentieregel This collects all the information for the reference line.

381 \def\referentieregel{\hbox
382  {\hb@xt@\refveldbreedte{\copy\@UB\hfil}%
383  \hb@xt@\refveldbreedte{\copy\@UK\hfil}%
384  \hb@xt@\refveldbreedte{\copy\@OK\hfil}%
385  \hb@xt@\refveldbreedte{\copy\@Dt\hfil}\hss}}

\vervolgreferentieregel On the second and following pages a simple reference line can be printed. It contains the address information, the date and the page number.

\@Ad For this purpose we need to allocate another box register.

386 \newbox\@Ad
387 \def\vervolgreferentieregel{%
388 \hbox{%
389  \hb@xt@\refveldbreedte{\copy\@Ad\hfil}%
390  \hskip\refveldbreedte
391  \hb@xt@\refveldbreedte{\copy\@Dt\hfil}%
392  \@refveld{\bladnummertekst}{\thepage}\hss}}

6.2.3 The headers and footers

\briefhoofd \vervolghoofd The headings are empty by default.

393 \newcommand*\briefhoofd{}
394 \newcommand*\vervolghoofd{\vbox{}}

\maakbriefhoofd The usage of this command creates non-empty headers.

395 \newcommand*\maakbriefhoofd
396 {\@ifstar {\@kortvervolgbriefhoofd}{\@langvervolgbriefhoofd}}

\@kortvervolgbriefhoofd This creates a shortened heading for following pages

397 \newcommand*\@kortvervolgbriefhoofd[2]{%
398 \@maakbriefhoofd{#1}{#2}
399 \def\vervolghoofd{%
400  \vbox{\hsize=4\refveldbreedte
401  \hb@xt@\hsize{\Large \normalfont\sffamily #1\strut\hfil}
402  \hrule \kern2mm \vervolgreferentieregel}}}

\@langvervolgbriefhoofd This creates a long heading for following pages by just using \briefhoofd.

403 \newcommand*\@langvervolgbriefhoofd[2]{
404 \@maakbriefhoofd{#1}{#2}
405 \def\vervolghoofd{%
406  \vbox{\briefhoofd\vskip2mm
407  \vervolgreferentieregel
408  \vbox{}}}}

\@maakbriefhoofd This was used in the two preceding macros; it defines \briefhoofd.

409 \newcommand*\@maakbriefhoofd[2]{\def\briefhoofd{%
410  \vbox{\hsize=4\refveldbreedte
411  \hb@xt@\hsize{\Large \normalfont\sffamily #1\strut\hfil}
412  \hrule
413  \moveright 3\refveldbreedte\@refveld{\strut #2}{}
414  \vbox{}}}}

\@voetruimte A box to store the footer in.

415 \newbox\@voetruimte
416 \setbox\@voetruimte=\hbox{}

\@voetteller We need to know how many items are placed in the footer.

417 \newcount\@voetteller
\voetregel  \voetregel just copies the box \@voetruimte.
418 \newcommand*\voetregel{\copy\@voetruimte}

\voetitem A command to add an information field to the footer.

419 \newcommand*\voetitem[2]{%
420 \advance\@voetteller by 1
421 \setbox\@voetruimte\hb@xt@4\refveldbreedte{%
422  \unhbox\@voetruimte
423  \ifcase\@voetteller \relax \or \relax \or \hfil \else \hfill
424  \fi
425  \@refveld{#1}{#2}\hskip0\p@ \@plus 3\refveldbreedte}}
426 \let\footitem\voetitem

6.2.4 The little rules

\streepje A shorthand for one little rule.

427 \newcommand*\streepje{\hb@xt@2mm{\hrulefill}}

\streepjes This prints the folding rules

428 \newcommand*\streepjes[1]{%
429 \vbox to \z@{%

We have to backup to a position 13mm below the edge of the paper.

430  \kern-#1\relax
431  \hb@xt@\textwidth{%

Then we can print a rule on the left side of the paper, half way down to align for a perforator.

432  \llap{\perfstreepje\kern24mm}\hfill

The folding rules are printed on the right hand side of the paper.

433  \rlap{\kern24mm\vouwstreepjes}}
434 \vss}}

\perfstreepje Prints a \streepje halfway down the paper. A4 paper is 297 mm high; we start from a position 13mm below the edge of the paper. Hence the \kern 135mm.

435 \newcommand*\perfstreepje{\vtop{\kern\z@ \kern 135mm \streepje}}

\vouwstreepjes This prints two folding rules.

436 \newcommand*\vouwstreepjes{%
437 \vtop{\kern\z@
438  \kern 92mm %% 105-13
439  \streepje  %% denk maar dat dit geen dikte heeft
440  \kern 50mm %% 155-150
441  \streepje}}

6.2.5 Page breaking control

\stopbreaks
442 \def\stopbreaks{\interlinepenalty \@M
443 \def\par{\@@par\nobreak}\let\\=\@nobreakcr
444 \let\vspace\@nobreakvspace}
\nobreakvspace
\nobreakvspacex
\nobreakcr

445 \def\@nobreakvspace{\@ifstar{\@nobreakvspacex}{\@nobreakvspacex}}

446

447 \def\@nobreakvspacex#1{\ifvmode\nobreak\vskip #1\relax\else

448  \@bsphack\vadjust{\nobreak\vskip #1}\@esphack\fi}

449

450 \def\@nobreakcr{\vadjust{\penalty\@M}\@ifstar{\@xnewline}{\@xnewline}}
\startbreaks
451 \def\startbreaks{\let\\=\@normalcr
452 \interlinepenalty 200\def\par{\@@par\penalty 200\relax}}

\opening Text is begun with the \opening command, whose argument generates the salutation, as in

   \opening{Dear Henry,}

This should produce everything up to and including the ‘Dear Henry,’ and a

command that follows. Since there’s a \vfil at the bottom of every page, it can add vertical fil to position a short letter. It should use the following commands:

• \toname : name part of ’to’ address. Will be one line long.

• \toaddress : address part of ’to’ address. The lines separated by \\.

• \fromname : name of sender.

• \fromaddress : argument of current \address declaration– null if none. Should use standard institutional address if null.

• \fromlocation : argument of current \location declaration–null if none.

• \telephonenum : argument of current \telephone declaration–null if none.

453 \newcommand*\opening[1]{%
454 \thispagestyle{firstpage}%
455 \adresveld
456 \prevdepth=-1000\p@ \vskip-2\p@ %% ????
457 \referentieregel
458 \@dosubject #1\par\nobreak}

\@dosubject This prints the subject of the letter if one was specified.

459 \def\@dosubject{%
460 \ifx\@empty\@subject
461 \else
462  \par\noindent
463  \parbox[t]{\textwidth}
464  {\@hangfrom{\refkopfont \betrefttekst \enspace}%
465  \normalfont\rmfamily\ignorespaces \@subject\strut}%
466  \par
467 \fi}

\afsluiting \closing The body of the letter follows, ended by a \afsluiting command, as in

         \afsluiting{Yours truly,}

This commands generates the closing matter, and the signature. An obvious thing to do is to use a \parbox for the closing and the signature. Should use the following:

• \fromsig : argument of current \signature declaration or, if null, the

      \fromname.

• \stopbreaks : a macro that inhibits page breaking.

468 \newcommand*\afsluiting[1]{\par\nobreak\vspace{\parskip}%
469 \stopbreaks
470 \ifx\@empty\fromsig
471  \def\ondertekening##1{\def\fromsig{##1}\@afsluiting{#1}}%
472 \else
473  \@afsluiting{#1}%
474 \fi}
475 \let\closing\afsluiting
476 \def\open@af{\vtop\bgroup\hsize.3\textwidth \raggedright}

The internal command \@afsluiting takes care of printing the closing text.

477 \newcommand*\@afsluiting[1]{%
478 \def\en{\strut\egroup\open@af}%
479 \noindent
480 \parbox{.5\textwidth}{%
481  \raggedright \ignorespaces #1\\[6\medskipamount]%
482  \open@af \fromsig \strut\egroup}}
\smallskipamount \mdeskipamount \bigskipamount Of these three, only \medskipmount is actually used above.
483 %\smallskipamount=.5\parskip
484 \medskipamount=\parskip
485 %\bigskipamount=2\parskip

\betreft \re The command \betreft (\re) stores the subject of the letter.

486 \newcommand*\betreft[1]{\def\@subject{#1}}
487 \def\@subject{}
488 \let\re\betreft

\cc After the \closing you can put arbitrary stuff, which is typeset with zero \parindent and no page breaking. Commands designed for use after the closing are:

   \cc{Tinker\\Evers\\Chance}

which produces:

cc: Tinker Evers Chance

Note the obvious use of \parbox.

489 \newcommand*{\cc}[1]{\par\noindent
490 \parbox[t]{\textwidth}{\@hangfrom{\normalfont\ccname: }%
491  \ignorespaces #1\strut}\par}
\bijlage \bijlagen \encl    \bijlagen{Foo(2)\\Bar}

which produces:

bijlagen: Foo(2)

Bar

492 \newcommand*{\bijlage}[1]{%
493 \par\noindent

494 \parbox[t]{\textwidth}{\@hangfrom{\normalfont\bijlagetekst\ }%
495  \ignorespaces #1\strut}\par}
496 \newcommand*{\bijlagen}[1]{%
497 \par\noindent
498 \parbox[t]{\textwidth}{\@hangfrom{\normalfont\bijlagentekst\ }%
499  \ignorespaces #1\strut}\par}
500 \let\encl\bijlagen

\ps The only thing \ps needs to do is call \startbreaks, which allows page breaking again.

501 \def\ps{\par\startbreaks}

\stopletter The \stopletter command is called by \endletter to do the following:

• Add any desired fil or other material at the end of the letter.

• Define \returnaddress to be the return address for the mailing label. More precisely, it is the first argument of the \mlabel command described below. It should be defined to null if the return address doesn’t appear on the labels. Any command, other than \\, that should not be expanded until the \mlabel command is actually executed must be preceded by \protect. Whenever possible, \protect commands in the definition of \returnaddress—it’s much more efficient that way. In particular, when the standard return address is used, you should define \returnaddress to

something like \protect\standardreturnaddress.
502 \def\stopletter{}

6.3 Customizing the labels

Commands for generating the labels are put on the .AUX file, which is read in and processed by the \end{document} command. You have to define the following two commands:

• \startlabels : Should reset the page layout parameters if necessary.

• \mlabel{⟨return address⟩}{⟨to adress⟩} : Command to generate a single label.

\returnaddress
503 \def\returnaddress{}
\labelcount
504 \newcount\labelcount

\startlabels The following \startlabels command sets things up for producing labels in two columns of five 2” × 4-1/4” labels each, suitable for reproducing onto Avery brand number 5352 address labels.

505 \newcommand*{\startlabels}{\labelcount\z@
506 \pagestyle{empty}%
507 \let\@texttop\relax
508 \topmargin -50\p@
509 \headsep \z@

510 \oddsidemargin -35\p@
511 \evensidemargin -35\p@
512 \textheight 10in
513 \@colht\textheight  \@colroom\textheight \vsize\textheight
514 \textwidth 550\p@
515 \columnsep 26\p@
516 \ifcase \@ptsize\relax
517  \normalsize
518 \or
519  \small
520 \or
521  \footnotesize
522 \fi
523 \baselineskip \z@
524 \lineskip \z@
525 \boxmaxdepth \z@
526 \parindent \z@
527 \twocolumn\relax}

\@startlabels \@startlabels is the command name that is written to the .aux file. It is a no-op at first, and defined to be the same as \startlabels in the \begin{document} hook.

528 \let\@startlabels=\relax

\mlabel This command prints an address label; it is used when the user specified \makelabels in the preamble of his document. The command \mlabel takes two arguments; the second argument is supposed to be the address; the first argument can be used to print a return address. In this document class we ignore the first argument. Also the labels are supposed to be 2 inch high and 3.6 inch wide. When your address labels have a different width you will have to defined your own \mlabel command.

529 \newcommand*{\mlabel}[2]{%
530 \parbox[b][2in][c]{262\p@}{\strut\ignorespaces #2}%

531 }

\@mlabel \@mlabel is written to the .aux file in place of \mlabel. That allows to define it as a no-op per default, and activate it in the \begin{document} hook.

532 \let\@mlabel=\@gobbletwo

6.4 Lists

6.4.1 General List Parameters

The following commands are used to set the default values for the list environment’s parameters. See the L^{A}TEX 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’, ‘ii’, ... , ‘vi’. (I.e., \@listiii is called for a third-level list.) By convention, \@listK should

set \leftmargin to \leftmarginK.
\leftmargin \leftmargini \leftmarginii \leftmarginiii \leftmarginiv \leftmarginv \leftmarginvi For efficiency, level-one list’s values are defined at top level, and \@listi is defined
to set only \leftmargin.

533 \setlength\leftmargini  {2.5em}

The following three are calculated so that they are larger than the sum of \labelsep and the width of the default labels (which are ‘(m)’, ‘vii.’ and ‘M.’).

534 \setlength\leftmarginii  {2.2em}
535 \setlength\leftmarginiii {1.87em}
536 \setlength\leftmarginiv  {1.7em}
537 \setlength\leftmarginv  {1em}
538 \setlength\leftmarginvi {1em}

Here we set the top level leftmargin.

539 \setlength\leftmargin    {\leftmargini}

\labelsep \labelwidth \labelsep is the distance between the label and the text of an item; \labelwidth is the width of the label.

540 \setlength  \labelsep  {5\p@}
541 \setlength  \labelwidth{\leftmargini}
542 \addtolength\labelwidth{-\labelsep}

\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.

543 \setlength\partopsep{0\p@}

\topsep Extra vertical space, in addition to \parskip, added above and below list and paragraphing environments.

544 \setlength\topsep{.4em}

\@beginparpenalty \@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.

\@itempenalty This penalty is inserted between list items.

545 \@beginparpenalty -\@lowpenalty
546 \@endparpenalty   -\@lowpenalty
547 \@itempenalty     -\@lowpenalty
\@listI \@listi  \@listI defines top level and \@listi values of \leftmargin, \parsep, \topsep,
and \itemsep

These values have been taken from the ones in the document class artikel3.

548 \def\@listI{\leftmargin\leftmargini
549  \labelsep.5em%
550  \labelwidth\leftmargin
551  \advance\labelwidth-\labelsep
552  \topsep .5\parskip \@plus \p@
553  \parsep \z@
554  \itemsep\parsep}
555 \let\@listi\@listI

We have to initialise these parameters.

556 \@listi

\@listii \@listiii \@listiv \@listv \@listvi Here are the same macros for the higher level lists.

557 \def\@listii {\leftmargin\leftmarginii
558  \labelsep  .5em%
559  \labelwidth\leftmarginii

560  \advance\labelwidth-\labelsep
561  \topsep -.5\parskip \@plus \p@
562  \parsep \z@
563  \itemsep\parsep}
564 \def\@listiii{\leftmargin\leftmarginiii
565  \labelsep  .5em%
566  \labelwidth\leftmarginiii
567  \advance\labelwidth-\labelsep
568  \topsep -.5\parskip \@plus \p@
569  \parsep \z@
570  \partopsep \z@
571  \itemsep   \topsep}
572 \def\@listiv {\leftmargin\leftmarginiv
573  \labelsep  .5em%
574  \labelwidth\leftmarginiv
575  \advance\labelwidth-\labelsep
576  \topsep -.5\parskip \@plus \p@}
577 \def\@listv  {\leftmargin\leftmarginv
578  \labelsep  .5em%
579  \labelwidth\leftmarginv
580  \advance\labelwidth-\labelsep
581  \topsep -.5\parskip \@plus \p@}
582 \def\@listvi {\leftmargin\leftmarginvi
583  \labelsep  .5em%
584  \labelwidth\leftmarginvi
585  \advance\labelwidth-\labelsep
586  \topsep -.5\parskip \@plus \p@}

6.4.2 Enumerate

The enumerate environment uses four counters: enumi, enumii, enumiii and enumiv, where enumN controls the numbering of the Nth level enumeration.

\theenumi \theenumii \theenumiii \theenumiv The counters are already defined in in the L^{A}TEX kernel (ltlists.dtx), but their representation is changed here.

587 \renewcommand*{\theenumi}{\@arabic\c@enumi}
588 \renewcommand*{\theenumii}{\@alph\c@enumii}
589 \renewcommand*{\theenumiii}{\@roman\c@enumiii}
590 \renewcommand*{\theenumiv}{\@Alph\c@enumiv}
\labelenumi \labelenumii \labelenumiii \labelenumiv The label for each item is generated by the commands \labelenumi ... \labelenumiv.
591 \newcommand*{\labelenumi}{\theenumi.}
592 \newcommand*{\labelenumii}{(\theenumii)}
593 \newcommand*{\labelenumiii}{\theenumiii.}
594 \newcommand*{\labelenumiv}{\theenumiv.}
\p@enumii \p@enumiii \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.

595 \renewcommand*{\p@enumii}{\theenumi}
596 \renewcommand*{\p@enumiii}{\theenumi(\theenumii)}
597 \renewcommand*{\p@enumiv}{\p@enumiii\theenumiii}

6.4.3 Itemize

\labelitemi \labelitemii \labelitemiii \labelitemiv Itemization is controlled by \labelitemi, \labelitemii, \labelitemiii, and

\labelitemiv, which define the labels of the various itemization levels: the symbols used are bullet, bold en-dash, asterisk and centred dot.

598 \newcommand*{\labelitemi}{$\m@th\bullet$}
599 \newcommand*{\labelitemii}{\normalfont\bfseries --}
600 \newcommand*{\labelitemiii}{$\m@th\ast$}
601 \newcommand*{\labelitemiv}{$\m@th\cdot$}

6.4.4 Description

description The description environment is defined here – while the itemize and enumerate environments are defined in the L^{A}TEX kernel (ltlists.dtx).

602 \newenvironment{description}
603  {\list{}{\labelwidth\z@ \itemindent-\leftmargin
604  \let\makelabel\descriptionlabel}}
605  {\endlist}

\descriptionlabel To change the formatting of the label, you must redefine \descriptionlabel.

606 \newcommand*\descriptionlabel[1]{\hspace\labelsep
607  \normalfont\bfseries #1}

6.5 Defining new environments

6.5.1 Verse

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.
608 \newenvironment{verse}
609  {\let\\=\@centercr
610  \list{}{\setlength\itemsep{\z@}%
611  \setlength\itemindent{-15\p@}%
612  \setlength\listparindent{\itemindent}%
613  \setlength\rightmargin{\leftmargin}%
614  \addtolength\leftmargin{15\p@}}%
615  \item[]}
616  {\endlist}

6.5.2 Quotation

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.

617 \newenvironment{quotation}
618  {\list{}{\setlength\listparindent{1.5em}%
619  \setlength\itemindent{\listparindent}%
620  \setlength\rightmargin{\leftmargin}}%
621  \item[]}
622  {\endlist}

6.5.3 Quote

quote The quote environment is like the quotation environment except that paragraphs are not indented.

623 \newenvironment{quote}
624  {\list{}{\setlength\rightmargin{\leftmargin}}%
625  \item[]}
626  {\endlist}

6.5.4 Theorem

This document class does not define it’s own theorem environemts, the defaults, supplied by L^{A}TEX kernel (ltthm.dtx) are available.

6.6 Setting parameters for existing environments

6.6.1 Array and tabular

\arraycolsep The columns in an array environment are separated by 2\arraycolsep.

627 \setlength\arraycolsep{5\p@}

\tabcolsep The columns in an tabular environment are separated by 2\tabcolsep.

628 \setlength\tabcolsep{6\p@}

\arrayrulewidth The width of vertical rules in the array and tabular environments is given by

\arrayrulewidth.
629 \setlength\arrayrulewidth{.4\p@}

\doublerulesep The space between adjacent rules in the array and tabular environments is given

by \doublerulesep.
630 \setlength\doublerulesep{2\p@}

6.6.2 Tabbing

\tabbingsep This controls the space that the \' command puts in. (See L^{A}TEX manual for an explanation.)

631 \setlength\tabbingsep{\labelsep}

6.6.3 Minipage

\@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. In the current styles, it does nothing.

\@mpfootins Minipages have their own footnotes; \skip\@mpfootins plays same rôle for footnotes in a minipage as \skip\footins does for ordinary footnotes.

632 \skip\@mpfootins = \skip\footins

6.6.4 Framed boxes

\fboxsep The space left by \fbox and \framebox between the box and the text in it.

\fboxrule The width of the rules in the box made by \fbox and \framebox.

633 \setlength\fboxsep{3\p@}
634 \setlength\fboxrule{.4\p@}

6.6.5 Equation and eqnarray

\theequation The equation counter will be typeset using arabic numbers.

635 \renewcommand*{\theequation}{\@arabic\c@equation}

\jot \jot is the extra space added between lines of an eqnarray environment. The default value is used.

636 % \setlength\jot{3pt}

\@eqnnum The macro \@eqnnum defines how equation numbers are to appear in equations. Again the default is used.

637 % \def\@eqnnum{(\theequation)}

6.7 Font changing

Here we supply the declarative font changing commands that were common in L^{A}TEX version 2.09 and earlier. These commands work in text mode and in math mode. They are provided for compatiblity, but one should start using the \text... and \math... commands instead. These commands are redefined using \@renewfontswitch, a command with three arguments: the user command to be defined; L^{A}TEX commands to execute in text mode and L^{A}TEX commands to execute in math mode.

\rm \tt \sf The commands to change the family.

638 \DeclareOldFontCommand{\rm}{\normalfont\rmfamily}{\mathrm}
639 \DeclareOldFontCommand{\sf}{\normalfont\sffamily}{\mathsf}
640 \DeclareOldFontCommand{\tt}{\normalfont\ttfamily}{\mathtt}

\bf The command to change to the bold series. One should use \mdseries to explicitly switch back to medium series.

641 \DeclareOldFontCommand{\bf}{\normalfont\bfseries}{\mathbf}

\sl \it \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.

642 \DeclareOldFontCommand{\it}{\normalfont\itshape}{\mathit}
643 \DeclareOldFontCommand{\sl}{\normalfont\slshape}{\relax}
644 \DeclareOldFontCommand{\sc}{\normalfont\scshape}{\relax}

{\cal \atop \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’.

645 \DeclareRobustCommand*{\cal}{\@fontswitch{\relax}{\mathcal}}
646 \DeclareRobustCommand*{\mit}{\@fontswitch{\relax}{\mathnormal}}

6.8 Footnotes

\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 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 make sure we end up at the same point where we begun this operation.

647 \renewcommand*{\footnoterule}{%
648 \kern-\p@
649 \hrule \@width .4\columnwidth
650 \kern .6\p@}

\c@footnote Footnotes are numbered within chapters in the report and book document styles.

651 % \newcounter{footnote}

\@makefntext The footnote mechanism of L^{A}TEX calls the macro \@makefntext to produce the actual footnote. The macro gets the text of the footnote as its argument and should use \@makefnmark to produce 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.

          \long\def\@makefntext#1{%
             \@setpar{\@@par
                      \@tempdima = \hsize
                      \advance\@tempdima-10pt
                      \parshape \@ne 10pt \@tempdima}%
             \par
             \parindent 1em\noindent
             \hb@xt@\z@{\hss\@makefnmark}#1}

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 a paragraph, and 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.

652 \long\def\@makefntext#1{\noindent\@makefnmark#1}

\@makefnmark The footnote markers that are printed in the text to point to the footnotes should be produced by the macro \@makefnmark.

653 \def\@makefnmark{\hb@xt@\leftmargini{\normalfont\@thefnmark.\hfil}}

6.9 Words

This document class supports a number of languages. All words that will be printed byu the class code are stored in commands which can be redefined if you want to use a different language.

\dutchbrief This stores dutch strings.

654 \newcommand*{\dutchbrief}{%
655 \def\uwbrieftekst{Uw brief van}
656 \def\uwkenmerktekst{Uw kenmerk}
657 \def\onskenmerktekst{Ons kenmerk}
658 \def\datumtekst{Datum}
659 \def\geadresseerdetekst{Geadresseerde}
660 \def\bladnummertekst{Bladnummer}
661 \def\vandaag{\number\day~\ifcase\month\or
662  januari\or februari\or maart\or april\or mei\or juni\or juli\or
663  augustus\or september\or oktober\or november\or december\fi
664  \space \number\year}
665 \def\betrefttekst{Onderwerp:}
666 \def\ccname{cc}
667 \def\bijlagetekst{Bijlage:}
668 \def\bijlagentekst{Bijlagen:}
669 \def\telefoontekst{telefoon}}

\englishbrief This stores English strings.

670 \newcommand*{\englishbrief}{%
671 \def\uwbrieftekst{Your letter of}
672 \def\uwkenmerktekst{Your reference}
673 \def\onskenmerktekst{Our reference}
674 \def\datumtekst{Date}
675 \def\geadresseerdetekst{To}
676 \def\bladnummertekst{Page}
677 \def\vandaag{\ifcase\day\or
678  1st\or 2nd\or 3rd\or 4th\or 5th\or
679  6th\or 7th\or 8th\or 9th\or 10th\or
680  11th\or 12th\or 13th\or 14th\or 15th\or
681  16th\or 17th\or 18th\or 19th\or 20th\or
682  21st\or 22nd\or 23rd\or 24th\or 25th\or
683  26th\or 27th\or 28th\or 29th\or 30th\or
684  31st\fi~\ifcase\month\or
685  January\or February\or March\or April\or May\or June\or
686  July\or August\or September\or October\or November\or December\fi
687  \space \number\year}
688 \def\betrefttekst{Re:}
689 \def\ccname{cc}
690 \def\bijlagetekst{Enclosure:}
691 \def\bijlagentekst{Enclosures:}
692 \def\telefoontekst{telephone}}

\americanbrief This stores American english strings

693 \newcommand*{\americanbrief}{%
694 \def\uwbrieftekst{Your letter of}
695 \def\uwkenmerktekst{Your reference}
696 \def\onskenmerktekst{Our reference}

697 \def\datumtekst{Date}
698 \def\geadresseerdetekst{To}
699 \def\bladnummertekst{Page}
700 \def\vandaag{\ifcase\month\or
701  January\or February\or March\or April\or May\or June\or
702  July\or August\or September\or October\or November\or December\fi
703  \space\number\day, \number\year}
704 \def\betrefttekst{Re:}
705 \def\ccname{cc}
706 \def\bijlagetekst{Enclosure:}
707 \def\bijlagentekst{Enclosures:}
708 \def\telefoontekst{telephone}}

\germanbrief This stores the German versions of the strings.

709 \newcommand*{\germanbrief}{%
710 \def\uwbrieftekst{Ihr Brief vom}
711 \def\uwkenmerktekst{Ihr Zeichen}
712 \def\onskenmerktekst{Unser Zeichen}
713 \def\datumtekst{Datum}
714 \def\geadresseerdetekst{An}
715 \def\bladnummertekst{Seite}
716 \def\vandaag{\number\day.~\ifcase\month\or
717  Januar\or Februar\or M\"arz\or April\or Mai\or Juni\or
718  Juli\or August\or September\or Oktober\or November\or Dezember\fi
719  \space\number\year}
720 \def\betrefttekst{Betrifft:}
721 \def\ccname{Kopien an}
722 \def\bijlagetekst{Anlage:}
723 \def\bijlagentekst{Anlagen:}
724 \def\telefoontekst{Telefon}}

\frenchbrief And finally to store the french strings

725 \newcommand*{\frenchbrief}{%
726 \def\uwbrieftekst{Votre lettre du}
727 \def\uwkenmerktekst{Vos r\'ef\'erences:}
728 \def\onskenmerktekst{Nos r\'ef\'erences:}
729 \def\datumtekst{Date:}
730 \def\geadresseerdetekst{\`A l'attention de}
731 \def\bladnummertekst{Page}
732 \def\vandaag{\number\day\ifnum\day=1$^{er}$\fi
733  ~\ifcase\month\or janvier\or
734  f\'evrier\or mars\or avril\or mai\or juin\or
735  juillet\or ao\^ut\or septembre\or octobre\or
736  novembre\or d\'ecembre\fi \space \number\year}
737 \def\betrefttekst{Objet:}
738 \def\ccname{Copie \`a}
739 \def\bijlagetekst{Pi\`ece jointe:}
740 \def\bijlagentekst{Pi\`eces jointes:}
741 \def\telefoontekst{T\'el\'ephone:}}

6.10 Two column mode

\columnsep This gives the distance between two columns in two column mode.

742 \setlength\columnsep{10\p@}

\columnseprule This gives the width of the rule between two columns in two column mode. We have no visible rule.

743 \setlength\columnseprule{0\p@}

6.11 The page style

We have headings pages in this document class by default. We use arabic pagenumbers.

744 \pagestyle{headings}
745 \pagenumbering{arabic}

6.12 Single or double sided printing

We don’t try to make each page as long as all the others.

746 \raggedbottom

\@texttop The document class letter sets \@texttop to \vskip 0pt plus .00006fil on the first page of a letter, which centers a short letter on the page. This class however doesn’t want the letter to be centered on the page.

747 \let\@texttop\relax

We always start in one column mode.

748 \onecolumn

749 ⟨/brief⟩