1  The file minutes-new.dtx, a class to write meeting minutes with L^{A}TEX 2ε

Abstract

This is a quick hack to make writing minutes for meetings easier. In particular it was designed for the Communications and Digital Systems Teaching Group.

Contents

1 How to use this class 1 1.1 Mandatory macros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 1.2 Optional Macros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 1.3 What must follow the \begindocument . . . . . . . . . . . . . . . . . . . . . 1 1.4 Comands to use in minute items . . . . . . . . . . . . . . . . . . . . . . . . . 2 1.5 Options available . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 1.6 Bugs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2

2 The implementation 2 2.1 Producing the documentation . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 2.2 Identification part . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 2.3 Declaration of options . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4

2.3.1 Pass all other options unchanged to article.cls . . . . . . . . . . . . 4 2.4 Execution of options . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 2.5 Special class file commands . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 2.6 Package loading . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 2.7 Commands to make things work . . . . . . . . . . . . . . . . . . . . . . . . . 4

3 The heading, and meeting number 5

4 Numbered headings within the minutes 6

5 Numbering the minute items within each heading 6

6 The stuff automatically inserted at the beginning of the minutes 7

1 How to use this class

The best way to see how to use this is by example. See the file minutest.tex for a complete example.

1.1 Mandatory macros

There are a number of mandatory macros that must be called by the user in the preamble,

or this won’t work. These are \meetingDate, \meetingTime and \meetingMonth.

\meetingDate The macro \meetingDate takes one mandatory argument, which is the date of the meet-

ing. This can be entered in any format you like. I write it as “21 January 1996”.

\meetingTime The macro \meetingTime takes one mandatory argument, which is the time of the

meeting. This can be entered in any format you like. I write it like this: “8.30–9.30 am”.

\meetingMonth The macro \meetingMonth takes one mandatory argument, which is the month that the meeting was held. This can be entered in any format you like. I call it like this:

 \meetingMonth{January}

The value is used in the heading on the front page and on the top header of every page after the first.

1.2 Optional Macros

\meeting The \meeting command sets a counter meetingNum to the value of its argument. I don’t use it with the Blaxcell Street Public School Council minutes, but I left the code there in case it might come in handy later. You can access it with \arabic{meetingNum}.

1.3 What must follow the \begindocument

After the \begin{document} you need the following:

• A list of all the participants. I usually present this in a tabular form like this:

      \begin{tabular}{@{}l@{\hspace{8mm}}l@{}}
      Nigel Montague (chairman) & Kin Cheong, Chu \\
      Tze Shan, Lam & Lawrence Wong \\
      Albert Ho & Michael Chan \\
      Nick Urbanik
      \end{tabular}

• A suitable skip to separate the participant list from the minutes.

      \vspace{3ex}

This is probably not essential, but that’s what I use.

• A heading for the action column:

      \marginlabel{\textbf{Action}}

• An \numerate environment to enclose the minutes

\heading • Before the first item in the minutes, there needs to be a \heading, otherwise the first items in the minutes will be preceeded by a zero digit and a full stop: 0.. . .

      \heading{The first heading...}

1.4 Comands to use in minute items

\heading The \heading macro is used to create a heading (a numbered section) within an enumerate environment. All the items have a counter that is numbered within this heading number; the item number is reset to zero at the beginning of each new heading.

\subheading The \subheading macro is used to create a subheading (an unnumbered subsection) within an enumerate environment. The item number is not reset to zero at the beginning of each new \subheading; only at the start of each \heading.

\action The \action macro takes one argument which is the name of a person. The name is set

in bold in the action column to the right of the place where this macro is called.

\actioni The macro \actioni is the same as \action but the argument is also printed at the

current position. This is simply to save typing.

\marginlabel The \marginlabel command is copied from page 74 of The L^{A}TEX Companion. It overcomes the problem with lack of hyphenation of the first word in an ordinary \marginpar text. I haven’t used this command, but have used most of the idea of it when writing the

\action and \actioni macros.

1.5 Options available

There is a \raftver option which adds the word “draft” to headers and main title, and puts a diagonal word in soft grey across the document if it is printed as postscript.

1.6 Bugs

The heading is hardwired into this class. It means that it requires a lot of modification to use this for some other purpose other than writing minutes for Blaxcell Street Public School Council. Need to make a macro that lets you choose the logo, and other such stuff. Should probably have defaults set using a configuration file, but should be able to override them within the document.

2 The implementation

2.1 Producing the documentation

Here is a short driver program that can be extracted with the L^{A}TEX 2εdocstrip program. It is not necessary to create a separate driver file from this, however; you can just run this file,

minutes-new.dtx through L^{A}TEX 2ε.
 1 % % %<*driver>
 2 % % \ProvidesFile{minutes-new.drv} \documentclass[twoside]{ltxdoc}
 3 % % \usepackage{fancyhdr}
 4 % %

I have had problems with getting the correct \filedate and \fileversion from this file. I keep getting them from the file a4.sty. I believe the next line is supposed to fix such a problem, but it leaves them undefined.

 5 % % % \GetFileInfo{minutes-new.dtx}
 6 % %

This is definitely the wrong place to put \fileversion, \fileversion and \docdate, since it is hard to find them here, but at the moment it’s the only place where I can get them to work!

 7 % % \def\fileversion{1.0b}
 8 % % \def\filedate{17 May 2005}
 9 % % \def\docdate{17 May 2005}
10 % %

These depend on the package fancyhdr. If you don’t have it, you may want to comment out these lines. You may prefer to comment out the line \thispagestyle{empty} further down.

11 % % \pagestyle{fancy}
12 % % \lhead[\textbf{\upshape The file \texttt{minutes-new.dtx},
13 % %          a class to write meeting minutes with  \LaTeXe}]%
14 % %       {\textbf{\thepage}}
15 % % \rhead[\textbf{\thepage}]{\textbf{\upshape The file
16 % %     \texttt{minutes-new.dtx}, a class to write meeting minutes with
17 % %     \LaTeXe}}
18 % % \cfoot{}
19 % %
20 % % \EnableCrossrefs % Make a full index.
21 % % %\DisableCrossrefs % Make no index.
22 % % \CodelineIndex % Index by line numbers rather than by page.
23 % % \PageIndex % index commands using page numbers.
24 % % \DoNotIndex{\textbf,\texttt,bfseries,\renewcommand,\providescommand}
25 % % \DoNotIndex{\filedate,\filename,\fileversion}
26 % % \DoNotIndex{\DoNotIndex,\arabic} \DoNotIndex{\NeedsTeXFormat}
27 % % \RecordChanges % Show change history.
28 % % %\OnlyDescription % uncomment this to not format the code.

29

30 % % \title{The file \texttt{minutes-new.dtx}, a class to write meeting minutes
31 % %   with \LaTeXe.\thanks{This file has version number \fileversion,
32 % %     dated \filedate.}\\[2pt] It contains the code for
33 % %   \texttt{minutes-new.cls}} \author{Nick Urbanik} \date{\filedate}
34 % % \begin{document}
35 % % \thispagestyle{empty} \maketitle
36 % % \providecommand{\Lenv}[1]{\textsf{#1}}
37 % % \providecommand{\pkg}[1]{\texttt{#1}}
38 % % \providecommand{\file}[1]{\texttt{#1}}
39 % % \DocInput{minutes-new.dtx}
40 % % \PrintIndex%
41 % % \PrintChanges
42 % %

Now tell the people what they need to do next to get the index and change list:

43 % % \typeout{Next, to make the index and changes list for this
44 % %   documentation:}%
45 % % \typeout{2. makeindex -s gind.ist minutes-new}%
46 % % \typeout{3. makeindex -s gglo.ist -o minutes-new.gls minutes-new.glo}%
47 % % \typeout{Finally, run this file through LaTeX once more.}
48 % %

49 % % \end{document}
50 % % %</driver>
51 % %

52 ⟨∗driver⟩

53 \documentclass{ltxdoc}
54 \usepackage{fancyhdr}
55 % These depend on the package |fancyhdr|.  If you don't have it, you
56 % may want to comment out these lines.  You may prefer to comment out the
57 % line |\thispagestyle{empty}| further down.
58 %    \begin{macrocode}
59 \pagestyle{fancy}
60 \lhead[\textbf{\upshape The file \texttt{minutes-new.dtx},
61  a class to write meeting minutes with  \LaTeXe}]%
62  {\textbf{\thepage}}
63 \rhead[\textbf{\thepage}]{\textbf{\upshape The file
64  \texttt{minutes-new.dtx}, a class to write meeting minutes with
65  \LaTeXe}}
66 \cfoot{}
67 \EnableCrossrefs % Make a full index.
68 %\DisableCrossrefs % Make no index.
69 \CodelineIndex % Index by line numbers rather than by page.
70 %\PageIndex % index commands using page numbers.
71 \RecordChanges % Show change history.
72 \DoNotIndex{\textbf,\texttt,bfseries,\renewcommand,\providescommand}
73 \DoNotIndex{\filedate,\filename,\fileversion}
74 \DoNotIndex{\DoNotIndex,\arabic} \DoNotIndex{\NeedsTeXFormat}
75 %\OnlyDescription % uncomment this to not format the code.
76 \begin{document}
77 \DocInput{minutes-new.dtx}

Now tell the people what they need to do next to get the index and change list:

78 \typeout{Next, to make the index and changes list for this
79 documentation:}%
80 \typeout{2. makeindex -s gind.ist minutes-new}%
81 \typeout{3. makeindex -s gglo.ist -o minutes-new.gls minutes-new.glo}%
82 \typeout{Finally, run this file through LaTeX once more.}
83 \end{document}

84 ⟨/driver⟩

2.2 Identification part

85 ⟨∗class⟩

86 \NeedsTeXFormat{LaTeX2e}[1995/12/01]
87 \ProvidesClass{minutes-new}[1996/01/22 For meeting minutes.]

2.3 Declaration of options

88 \DeclareOption{draftver}{%
89 \AtEndOfClass%
90 {%
91  % Want DRAFT diagonally across the first page, then at the bottom
92  % of subsequent pages.  The options for the draftcopy package were:
93  % light,first,bottomafter.
94  \def\draft{DRAFT version for comment\\\relax}%
95  \draftcopySetGrey{0.85}% .90 is light, .85 is dark. .975 seemed okay..
96  \draftcopyLastPage{9999}%
97  \draftcopy@bottomAftertrue
98  }%

99 }

2.3.1 Pass all other options unchanged to article.cls

100 \DeclareOption*{\PassOptionsToClass{\CurrentOption}{article}}

2.4 Execution of options

101 \ProcessOptions

2.5 Special class file commands

102 \LoadClass[a4paper,12pt]{article}

2.6 Package loading

103 \RequirePackage{%
104 fancyhdr,%
105 calc,%
106 xspace,%
107 graphicx,%
108 varioref,%
109 vmargin,%
110 mdwlist,% For suspend, resume.
111 nick,%
112 rcs}

Want to be able to use the draftcopy package. Use the none option so that by default, there will be no DRAFT message displayed on the minutes.

113 \RequirePackage[none]{draftcopy}

2.7 Commands to make things work

These macros come from the vmargin package.

114 \setpapersize{A4}
115 \shiftmargins
116 \setmarginsrb{20mm}% left
117  {20mm}% top
118  {37mm}% right
119  {15mm}% bottom
120  {15pt}% headheight---increase to stop fancyhdr warn
121  {11mm}% headsep
122  {0pt}%  footheight
123  {11mm}% footskip

Now it would be nice to have the header rule have the same protrusion on both the left and right side fo the page. We refer to page 99 of The L^{A}TEX Companion to see how to do it. The left margin was set above at 20 mm, the right at 37 mm, so add a further 17 mm to the width of the head rule on the right hand side.

124  \addtolength{\headwidth}{17mm}

This defines the stuff for the actions. I just used the marginpar macros. First we define a font for writing the actions. This can be changed by the user in the preamble.

\actionFont
125  \newcommand{\actionFont}[1]{\textbf{\footnotesize#1}}

This is from page 74 of the Companion. I haven’t found a use for it in the minutes, but the idea is used to define \action and \actioni.

126  \newcommand{\marginlabel}[1]
127  {\mbox{}\marginpar{\raggedright\hspace{0pt}#1}}
\action \actioni
128 \newcommand{\action}[1]
129  {\mbox{}\marginpar{\raggedright\hspace{0pt}{\actionFont{#1}}}}
130 \newcommand{\actioni}[1]
131  {#1\marginpar{\raggedright\hspace{0pt}{\actionFont{#1}}}}

We want the actions 4.5 mm to the right of the minute items, and set in a box that is 28 mm wide.

132 \setlength{\marginparsep}{4.5mm}
133 \setlength{\marginparwidth}{28mm}

This is the stuff from fancyhdr.sty for the heading at the top of each page:

134 \pagestyle{fancyplain}
135 %\lhead{\fancyplain{File: \fileNumber}{\bfseries \draft\thisOrganisation{}
136 %                 \hspace*{2ex} Meeting~\Month}}
137 \lhead{\fancyplain{}{\bfseries \draft\thisOrganisation{}
138  \hspace{2ex}\thisMeetingMonth~Meeting}}
139 \rhead{\fancyplain{}{\rmfamily\bfseries\thepage}}
140 \cfoot{}
141 \lfoot{}
142 %\lfoot{\fancyplain{}{File: \fileNumber}}

3 The heading, and meeting number

These macros are not meant to be called by the user; rather, they simply give a default value to these names that is used automatically at the beginning of the document. The user should change the name with the macros \department and \organisation.

\thisDepartment
\thisOrganisation
\fileNumber
\draft

143 \newcommand{\thisDepartment}%

144 {}

145 \newcommand{\thisOrganisation}%
146 {Blaxcell Street Public School Council}
147 \newcommand*{\fileNumber}{}
148 \newcommand*{\draft}{}
149 \newcommand*{\department}%
150 [1][]%
151 {\def\thisDepartment{#1}\relax}
\organisation
152 \newcommand*{\organisation}%
153 [1][Blaxcell Street Public School Council]%
154 {\renewcommand*{\protect\thisOrganisation}{#1}\relax}
155 %{\def\thisOrganisation{#1}\relax}
\meetingDate
\meetingTime
\meetingMonth
\meeting

156 \newcommand*{\meetingDate}[1]{\def\thisMeetingDate{#1}\relax}
157 \newcommand*{\meetingTime}[1]{\def\thisMeetingTime{#1}\relax}
158 \newcommand*{\meetingMonth}[1]{\def\thisMeetingMonth{#1}\relax}
159 \newcommand{\meeting}[1]%

160 {%

161 \setcounter{meetingNum}{#1}%

162 }

4 Numbered headings within the minutes

This is based on code from my result.sty:

  \newlength{\itemIndent}
  \newcommand{\heading}[1]{{%
     \setlength{\itemIndent}{\linewidth}
     \addtolength{\indentLen}{-\textwidth}%
     \hspace*{\indentLen}%
     \parbox[t]{\textwidth}{%
        \noindent%
         ...
     }
  }}

… but I can do better:

\heading
163 %\newcommand{\heading}[1]{{%
164 %   \item[]\hspace*{-\leftmargin}%
165 %   \parbox[t]{\textwidth}%
166 %   {%
167 %      \section{#1}%
168 %   }%
169 %}}

Well, that’s okay, but there can be too much space before or after the heading. Maybe better to use a simpler approach, something like this:

170 \newcommand{\heading}[1]{%
171  \end{enumerate}%
172  \section{#1}%
173  \begin{enumerate}%
174  \partopsep=1pt%
175  \itemsep = 2pt%
176  \parskip = 0pt\relax

Now here is a macro to do subheadings. This does not reset the item counter, and it is not numbered, to avoid confusion with the items of the meeting.

\subheading
178 %\newcommand{\subheading}[1]{{%
179 %   \item[]\hspace*{-\leftmargin}%
180 %   \parbox[t]{\textwidth}%
181 %   {%
182 %      \subsection*{#1}%
183 %   }%
184 %}}

Well, that’s okay, but there can be too much space before or after the heading. Maybe better to use the mdwlist.sty, something like this:

185 \newcommand{\subheading}[1]{%
186 \suspend{enumerate}%
187 \subsection*{#1}%
188 \resume{enumerate}%
189  \partopsep=1pt%
190  \itemsep = 2pt%
191  \parskip = 0pt\relax

192 }

This is the number for the meeting—a value must be supplied by the user using the \meeting macro.

meetingNum
193 \newcounter{meetingNum}

5 Numbering the minute items within each heading

Now I want to have the minute items numbered within each section. The \@addtoreset macro is described on page 22 of the Companion.

194 \def\labelenumi{{\bfseries \thesection.\theenumi.}}
195 \@addtoreset{enumi}{section}

6 The stuff automatically inserted at the beginning of the minutes

This gets inserted at the beginning of each set of minutes. The format is rather rigid. It needs a list of participants as the first thing. It also needs the line

  \marginlabel{\textbf{Action}}

at the beginning of the enumerated environment.

196 \AtBeginDocument%

197 {%

198 \newlength{\logowidth}%
199 \newlength{\sideWidth}%
200 \newlength{\logoSep}%
201 \setlength{\logowidth}{31.5mm}%
202 \setlength{\logoSep}{0em}%
203 \setlength{\sideWidth}{\textwidth}%
204 \addtolength{\sideWidth}{-\logowidth}%
205 \addtolength{\sideWidth}{-\logoSep}%
206 \thispagestyle{plain}
207 \vspace*{-20mm}
208 \noindent%
209 \includegraphics[width=\logowidth]{blaxcell-logo}%
210 \hspace{\logoSep}%
211 \begin{minipage}[b][\logowidth-2em][c]{\sideWidth}%
212  \centering%
213  \noindent%
214  \bfseries%
215  %\thisDepartment

217  %\vfill

218

219  \large
220  \draft

221

222  \vfill

223

224  \thisOrganisation{}\\
225  \thisMeetingMonth~Meeting

226

227  \vfill

228

229  \mbox{}
230 \end{minipage}\\[2ex]
231 %   \begin{center}
232 %   \large\bfseries \thisDepartment

233

234 %   \draft

235

236 %   \thisOrganisation{} Meeting~\arabic{meetingNum}
237 %   \end{center}

238

239 \vspace{1ex}

240

241 \begin{tabular}{@{}ll@{}}
242 Date held: & \thisMeetingDate\\
243 Time:      & \thisMeetingTime
244 \end{tabular}

245

246 \vspace{2ex}

247

248 Participants:\par

249 }

250 ⟨/class⟩

251 \endinput