| 1 | % \begin{meta-comment} |
| 2 | % |
| 3 | % $Id: strayman.dtx,v 1.4 2003/11/07 11:32:53 mdw Exp $ |
| 4 | % |
| 5 | % Document class for Straylight manuals |
| 6 | % |
| 7 | % (c) 1996 Straylight |
| 8 | % |
| 9 | % \end{meta-comment} |
| 10 | % |
| 11 | % \begin{meta-comment} <general public licence> |
| 12 | %% |
| 13 | %% strayman -- a LaTeX document class for Straylight manuals |
| 14 | %% Copyright (c) 1996 Straylight |
| 15 | %% |
| 16 | %% This program is free software; you can redistribute it and/or modify |
| 17 | %% it under the terms of the GNU General Public License as published by |
| 18 | %% the Free Software Foundation; either version 2 of the License, or |
| 19 | %% (at your option) any later version. |
| 20 | %% |
| 21 | %% This program is distributed in the hope that it will be useful, |
| 22 | %% but WITHOUT ANY WARRANTY; without even the implied warranty of |
| 23 | %% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| 24 | %% GNU General Public License for more details. |
| 25 | %% |
| 26 | %% You should have received a copy of the GNU General Public License |
| 27 | %% along with this program; if not, write to the Free Software |
| 28 | %% Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. |
| 29 | %% |
| 30 | % \end{meta-comment} |
| 31 | % |
| 32 | % \begin{meta-comment} <Package preamble> |
| 33 | %<+strayman>\NeedsTeXFormat{LaTeX2e} |
| 34 | %<+strayman>\ProvidesClass{strayman} |
| 35 | %<+strayman> [2003/09/04 1.10 Straylight document class] |
| 36 | % \end{meta-comment} |
| 37 | % |
| 38 | % \CheckSum{3058} |
| 39 | %% \CharacterTable |
| 40 | %% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z |
| 41 | %% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z |
| 42 | %% Digits \0\1\2\3\4\5\6\7\8\9 |
| 43 | %% Exclamation \! Double quote \" Hash (number) \# |
| 44 | %% Dollar \$ Percent \% Ampersand \& |
| 45 | %% Acute accent \' Left paren \( Right paren \) |
| 46 | %% Asterisk \* Plus \+ Comma \, |
| 47 | %% Minus \- Point \. Solidus \/ |
| 48 | %% Colon \: Semicolon \; Less than \< |
| 49 | %% Equals \= Greater than \> Question mark \? |
| 50 | %% Commercial at \@ Left bracket \[ Backslash \\ |
| 51 | %% Right bracket \] Circumflex \^ Underscore \_ |
| 52 | %% Grave accent \` Left brace \{ Vertical bar \| |
| 53 | %% Right brace \} Tilde \~} |
| 54 | %% |
| 55 | % |
| 56 | % \begin{meta-comment} <driver> |
| 57 | % |
| 58 | %<*driver> |
| 59 | \documentclass[10pt,a4paper,book,nohyperref]{strayman} |
| 60 | \input{mdwtools} |
| 61 | \usepackage{mdwlist} |
| 62 | \describesclass{strayman} |
| 63 | \errorcontextlines\maxdimen |
| 64 | \title[The \strayman\ document class] |
| 65 | {The \strayman\footnote{The \strayman\ document class is currently % |
| 66 | at version \mdwfileinfo{strayman.cls}{version}, dated % |
| 67 | \mdwfileinfo{strayman.cls}{date}.} {} document class} |
| 68 | \newenvironment{syndisplay}{\display\synshorts}{\enddisplay} |
| 69 | \DeclareRobustCommand\strayman{\package{strayman}} |
| 70 | \mdwdoc |
| 71 | %</driver> |
| 72 | % |
| 73 | % \end{meta-comment} |
| 74 | % |
| 75 | % \chapter{About the \strayman\ document class} |
| 76 | % |
| 77 | % The standard \LaTeX\ document classes are all very well for simple |
| 78 | % documents, but the style isn't appropriate for works like manuals. |
| 79 | % The \strayman\ document class is an attempt to rectify this situation, |
| 80 | % providing an attractive and distinctive style for Straylight documents. |
| 81 | % The layout is based on an earlier style built for \emph{Impression} |
| 82 | % documents, although many improvements have been made. This document |
| 83 | % was typeset using \strayman, and it demonstrates the design far better |
| 84 | % than I can describe it. |
| 85 | % |
| 86 | % |
| 87 | % \section{Document class options} |
| 88 | % |
| 89 | % The document class provides many options, most of which are taken from |
| 90 | % the standard \LaTeX\ classes. |
| 91 | % |
| 92 | % \begin{description} |
| 93 | % \def\|{\ensuremath\vert} |
| 94 | % |
| 95 | % \item [\texttt{a4paper} \| \texttt{a5paper} \| \texttt{b5paper} \| |
| 96 | % \texttt{letterpaper} \| \texttt{legalpaper} \| |
| 97 | % \texttt{executivepaper}] Select the output paper size. Since |
| 98 | % \strayman\ is intended to be used mainly for manuals, the default |
| 99 | % size is |a5paper|. |
| 100 | % |
| 101 | % \item [\texttt{landscape}] Swaps the width and height of the paper. |
| 102 | % Probably not much use, to be honest. |
| 103 | % |
| 104 | % \item [\texttt{9pt} \| \texttt{10pt} \| \texttt{11pt} \| \texttt{12pt}] |
| 105 | % Selects the basic type size for the document. The |9pt| option is |
| 106 | % nonstandard, but it is the default, since larger sizes don't work |
| 107 | % well on A5~paper. |
| 108 | % |
| 109 | % \item [\texttt{text}] Sets up the page layout and fonts so that the |
| 110 | % output can be converted fairly easily into a raw text file. |
| 111 | % |
| 112 | % \item [\texttt{oneside} \| \texttt{twoside}] Selects one- or two-sided |
| 113 | % page layouts. Note that one-sided output doesn't look too good. |
| 114 | % |
| 115 | % \item [\texttt{draft} \| \texttt{final}] Select various options for draft |
| 116 | % or final copy. |
| 117 | % |
| 118 | % \item [\texttt{titlepage} \| \texttt{notitlepage}] Selects whether |
| 119 | % the |\maketitle| displays its output on a separate title page. |
| 120 | % |
| 121 | % \item [\texttt{openright} \| \texttt{openany}] Select whether chapters |
| 122 | % start only on quarto pages, or any page. The default is |openright|. |
| 123 | % |
| 124 | % \item [\texttt{onecolumn} \| \texttt{twocolumn}] Choose whether the |
| 125 | % main body text is set in one or two columns. Note that this uses |
| 126 | % \LaTeX's built-in column handling, not the \package{multicol} |
| 127 | % package. |
| 128 | % |
| 129 | % \item [\texttt{leqno}] Put the equation numbers on the left, not the |
| 130 | % right. |
| 131 | % |
| 132 | % \item [\texttt{fleqn}] Typeset displayed equations left aligned. |
| 133 | % |
| 134 | % \item [\texttt{openbib}] Use the `open' style for the bibliography. |
| 135 | % |
| 136 | % \item [\texttt{article}] Change the formatting slightly, in a way more |
| 137 | % suited to short documents. |
| 138 | % |
| 139 | % \item [\texttt{square} \| \texttt{rounded}] These options are passed |
| 140 | % directly to the \package{syntax} package, when it's loaded. |
| 141 | % |
| 142 | % \end{description} |
| 143 | % |
| 144 | % |
| 145 | % \section{The \texttt{text} option} |
| 146 | % |
| 147 | % In order to facilitate creation of attractively formatted text files |
| 148 | % from \LaTeX\ documents, \strayman\ provides a |text| option. This will |
| 149 | % set up \emph{all} the fonts to be monospaced, in the same size. The page |
| 150 | % size is set up to be a multiple of the character size. The command |
| 151 | % \begin{syndisplay} |
| 152 | % "dvi2tty -e-17" <filename> |
| 153 | % \end{syndisplay} |
| 154 | % appears to produce a reasonable output from a DVI file created in this |
| 155 | % way. The output will need to be formatted and corrected slightly by hand |
| 156 | % although there's a good deal less work to do than might be required |
| 157 | % otherwise. |
| 158 | % |
| 159 | % |
| 160 | % \section{That's it} |
| 161 | % |
| 162 | % That's all I'm writing for now. It's a document class. It defines the |
| 163 | % style. What more do you expect? |
| 164 | % |
| 165 | % |
| 166 | % \implementation |
| 167 | % |
| 168 | % \chapter{Implementation} |
| 169 | % |
| 170 | % \section{Options handling} |
| 171 | % |
| 172 | % From here on, a lot of the code is shamelessly borrowed from |
| 173 | % \file{book.cls} and other places. This is what code re-use is for. |
| 174 | % |
| 175 | % This bit handles all the options on the |\documentclass| command, either |
| 176 | % altering our own internal arguments, or loading other packages as |
| 177 | % appropriate. |
| 178 | % |
| 179 | % \subsection{Set up some defaults} |
| 180 | % |
| 181 | % We create some variables to hold the settings, and initialise them to |
| 182 | % sensible values. |
| 183 | % |
| 184 | % \begin{macrocode} |
| 185 | %<*strayman> |
| 186 | \newcommand\@ptsize{} |
| 187 | \newif\if@restonecol\@restonecolfalse |
| 188 | \newif\if@titlepage\@titlepagefalse |
| 189 | \newif\if@openright\@openrighttrue |
| 190 | \newif\if@openbib\@openbibfalse |
| 191 | \newif\if@appendix\@appendixfalse |
| 192 | \newif\if@article\@articletrue |
| 193 | \newif\if@offsetpages\@offsetpagestrue |
| 194 | \newif\if@numbering\@numberingtrue |
| 195 | \newif\if@herefloats\@herefloatsfalse |
| 196 | \newif\if@runinsubsubsec\@runinsubsubsectrue |
| 197 | \newif\if@hyperref\@hyperreftrue |
| 198 | \newif\if@indentpar |
| 199 | \newdimen\pagesurround |
| 200 | \let\headfam\rmfamily |
| 201 | \let\pad@margin\@empty |
| 202 | \def\@delayed{} |
| 203 | \def\@delaycode#1{% |
| 204 | \expandafter\def\expandafter\@delayed\expandafter{\@delayed#1}% |
| 205 | } |
| 206 | % \end{macrocode} |
| 207 | % |
| 208 | % \subsection{Declare the options we support} |
| 209 | % |
| 210 | % This is just a tedious list of all the options. |
| 211 | % |
| 212 | % \begin{macrocode} |
| 213 | \DeclareOption{a4paper}{% |
| 214 | \paperheight297mm% |
| 215 | \paperwidth210mm% |
| 216 | \pagesurround1in% |
| 217 | } |
| 218 | \DeclareOption{a5paper}{% |
| 219 | \paperheight210mm% |
| 220 | \paperwidth148mm% |
| 221 | \pagesurround12mm% |
| 222 | } |
| 223 | \DeclareOption{b5paper}{% |
| 224 | \paperheight250mm% |
| 225 | \paperwidth176mm% |
| 226 | \pagesurround1in% |
| 227 | } |
| 228 | \DeclareOption{letterpaper}{% |
| 229 | \paperheight11in% |
| 230 | \paperwidth8.5in% |
| 231 | \pagesurround1in% |
| 232 | } |
| 233 | \DeclareOption{legalpaper}{% |
| 234 | \paperheight14in% |
| 235 | \paperwidth8.5in% |
| 236 | \pagesurround1in% |
| 237 | } |
| 238 | \DeclareOption{executivepaper}{% |
| 239 | \paperheight10.5in% |
| 240 | \paperwidth7.25in% |
| 241 | \pagesurround1in% |
| 242 | } |
| 243 | \DeclareOption{landscape}{% |
| 244 | \@tempdima\paperheight% |
| 245 | \paperheight\paperwidth% |
| 246 | \paperwidth\@tempdima% |
| 247 | } |
| 248 | \DeclareOption{8pt}{\renewcommand\@ptsize{8pt}} |
| 249 | \DeclareOption{9pt}{\renewcommand\@ptsize{9pt}} |
| 250 | \DeclareOption{10pt}{\renewcommand\@ptsize{10pt}} |
| 251 | \DeclareOption{11pt}{\renewcommand\@ptsize{11pt}} |
| 252 | \DeclareOption{12pt}{\renewcommand\@ptsize{12pt}} |
| 253 | \DeclareOption{text}{% |
| 254 | \renewcommand\@ptsize{text}% |
| 255 | \setbox\z@\hbox{\texttt{M\strut}}% |
| 256 | \newdimen\tt@chw\tt@chw\wd\z@% |
| 257 | \newdimen\tt@chh\tt@chh\ht\z@\advance\tt@chh\dp\z@% |
| 258 | \paperwidth77\tt@chw% |
| 259 | \paperheight60\tt@chh% |
| 260 | \raggedright% |
| 261 | \def\pad@margin{.} |
| 262 | } |
| 263 | \DeclareOption{oneside}{\@twosidefalse \@mparswitchfalse} |
| 264 | \DeclareOption{twoside}{\@twosidetrue \@mparswitchfalse \reversemarginpar} |
| 265 | \DeclareOption{draft}{\overfullrule5\p@} |
| 266 | \DeclareOption{final}{\overfullrule\z@} |
| 267 | \DeclareOption{titlepage}{\@titlepagetrue} |
| 268 | \DeclareOption{notitlepage}{\@titlepagefalse} |
| 269 | \DeclareOption{openright}{\@openrighttrue} |
| 270 | \DeclareOption{openany}{\@openrightfalse} |
| 271 | \DeclareOption{onecolumn}{\@twocolumnfalse} |
| 272 | \DeclareOption{twocolumn}{\@twocolumntrue} |
| 273 | \DeclareOption{offsetpages}{\@offsetpagestrue} |
| 274 | \DeclareOption{nooffsetpages}{\@offsetpagesfalse} |
| 275 | \DeclareOption{herefloats}{\@herefloatstrue} |
| 276 | \DeclareOption{noherefloats}{\@herefloatsfalse} |
| 277 | \DeclareOption{leqno}{\input{leqno.clo}} |
| 278 | \DeclareOption{fleqn}{\input{fleqn.clo}} |
| 279 | \DeclareOption{openbib}{\@openbibtrue} |
| 280 | \DeclareOption{article}{\@articletrue} |
| 281 | \DeclareOption{noarticle}{\@articlefalse} |
| 282 | \DeclareOption{numbering}{\@numberingtrue} |
| 283 | \DeclareOption{nonumbering}{\@numberingfalse} |
| 284 | \DeclareOption{runinsubsubsec}{\@runinsubsubsectrue} |
| 285 | \DeclareOption{noruninsubsubsec}{\@runinsubsubsecfalse} |
| 286 | \DeclareOption{indentpar}{\@indentpartrue} |
| 287 | \DeclareOption{noindentpar}{\@indentparfalse} |
| 288 | \DeclareOption{book}{\@titlepagetrue\@articlefalse} |
| 289 | \DeclareOption{hyperref}{\@hyperreftrue} |
| 290 | \DeclareOption{nohyperref}{\@hyperreffalse} |
| 291 | % \end{macrocode} |
| 292 | % |
| 293 | % \subsection{Set up the options} |
| 294 | % |
| 295 | % We set up some default options, and then read the user's. |
| 296 | % |
| 297 | % \begin{macrocode} |
| 298 | \ExecuteOptions{a4paper,10pt,twoside,onecolumn,final} |
| 299 | \ProcessOptions |
| 300 | % \end{macrocode} |
| 301 | % |
| 302 | % If this is PDF\TeX\ then tell it the page bounds. |
| 303 | % |
| 304 | % \begin{macrocode} |
| 305 | \newif\ifpdfing\pdfingfalse |
| 306 | \if1\ifx\pdfoutput\@@undefined@@0\else\the\pdfoutput\fi |
| 307 | \pdfingtrue |
| 308 | \fi |
| 309 | \ifpdfing |
| 310 | \pdfpageheight\paperheight |
| 311 | \pdfpagewidth\paperwidth |
| 312 | \fi |
| 313 | \if@hyperref |
| 314 | \AtEndOfClass{% |
| 315 | \RequirePackage[% |
| 316 | bookmarks = true, bookmarksnumbered = true, bookmarksdepth = 3, |
| 317 | colorlinks = true, linkcolor = blue, citecolor = blue, urlcolor = blue, |
| 318 | breaklinks = true]{hyperref} |
| 319 | } |
| 320 | \ifpdfing |
| 321 | \PassOptionsToPackage{pdftex}{hyperref} |
| 322 | \else |
| 323 | \PassOptionsToPackage{dvips}{hyperref} |
| 324 | \fi |
| 325 | \fi |
| 326 | % \end{macrocode} |
| 327 | % |
| 328 | % \subsection{Read in the text size option} |
| 329 | % |
| 330 | % The text sizing is rather messy. We store this in a separate file. To |
| 331 | % keep this stuff away from other classes, we use the file \emph{extension} |
| 332 | % as the size specifier, rather than the filename, which is the normal |
| 333 | % \LaTeX\ way of doing this. This is a \riscos\ thing mainly: I don't like |
| 334 | % loads of directories cluttering up my disk, and it means that I can move |
| 335 | % the whole of the \strayman\ stuff around as one directory. |
| 336 | % |
| 337 | % \begin{macrocode} |
| 338 | \input{strayman.\@ptsize} |
| 339 | %</strayman> |
| 340 | % \end{macrocode} |
| 341 | % |
| 342 | % \section{Package loading} |
| 343 | % |
| 344 | % \begin{macrocode} |
| 345 | %<*strayman> |
| 346 | \RequirePackage{fancyhdr} |
| 347 | \RequirePackage{multicol} |
| 348 | \@delayed |
| 349 | %</strayman> |
| 350 | % \end{macrocode} |
| 351 | % |
| 352 | % \section{Page layout} |
| 353 | % |
| 354 | % This is largely the domain of the size option files. |
| 355 | % |
| 356 | % \begin{macrocode} |
| 357 | %<*8pt|9pt|10pt|11pt|12pt|text> |
| 358 | %<+8pt>\ProvidesFile{strayman.8pt} |
| 359 | %<+9pt>\ProvidesFile{strayman.9pt} |
| 360 | %<+10pt>\ProvidesFile{strayman.10pt} |
| 361 | %<+11pt>\ProvidesFile{strayman.11pt} |
| 362 | %<+12pt>\ProvidesFile{strayman.12pt} |
| 363 | %<+text>\ProvidesFile{strayman.text} |
| 364 | % \end{macrocode} |
| 365 | % |
| 366 | % \subsection{Font sizes} |
| 367 | % |
| 368 | % These are fairly standard, and mainly copied from the original size |
| 369 | % options. |
| 370 | % |
| 371 | % \begin{macro}{\@setparskip} |
| 372 | % |
| 373 | % Because we separate paragraphs by vertical space, we need to vary this |
| 374 | % gap when we change font size. This macro does the job. |
| 375 | % |
| 376 | % \begin{macrocode} |
| 377 | \newskip\@parskip |
| 378 | \newdimen\@parshortfall |
| 379 | \def\@setparskip{% |
| 380 | \@parskip.67\baselineskip\@plus\p@\relax% |
| 381 | \ifdim\parskip=\z@\else\parskip\@parskip\relax\fi% |
| 382 | \@parshortfall\@parskip\advance\@parshortfall-\parskip% |
| 383 | } |
| 384 | \def\set@vsep#1{#1\@parshortfall\advance#1} |
| 385 | % \end{macrocode} |
| 386 | % \end{macro} |
| 387 | % |
| 388 | % \begin{macro}{\normalsize} |
| 389 | % |
| 390 | % Defines the standard size of text in the document. |
| 391 | % |
| 392 | % \begin{macrocode} |
| 393 | \renewcommand\normalsize{% |
| 394 | %<*8pt> |
| 395 | \@setfontsize\normalsize\@viiipt{9.6\p@}% |
| 396 | \abovedisplayskip8\p@\@plus2\p@\@minus4\p@% |
| 397 | \set@vsep\abovedisplayshortskip\z@\@plus3\p@% |
| 398 | \set@vsep\belowdisplayshortskip6\p@\@plus3\p@\@minus3\p@% |
| 399 | %</8pt> |
| 400 | %<*9pt> |
| 401 | \@setfontsize\normalsize\@ixpt\@xipt% |
| 402 | \abovedisplayskip9\p@\@plus2\p@\@minus5\p@% |
| 403 | \set@vsep\abovedisplayshortskip\z@\@plus3\p@% |
| 404 | \set@vsep\belowdisplayshortskip6\p@\@plus3\p@\@minus3\p@% |
| 405 | %</9pt> |
| 406 | %<*10pt> |
| 407 | \@setfontsize\normalsize\@xpt\@xiipt% |
| 408 | \abovedisplayskip10\p@\@plus2\p@\@minus5\p@% |
| 409 | \set@vsep\abovedisplayshortskip\z@\@plus3\p@% |
| 410 | \set@vsep\belowdisplayshortskip6\p@\@plus3\p@\@minus3\p@% |
| 411 | %</10pt> |
| 412 | %<*11pt> |
| 413 | \@setfontsize\normalsize\@xipt{13.6}% |
| 414 | \abovedisplayskip11\p@\@plus3\p@\@minus6\p@% |
| 415 | \set@vsep\abovedisplayshortskip\z@\@plus3\p@% |
| 416 | \set@vsep\belowdisplayshortskip6.5\p@ \@plus3.5\p@\@minus3\p@% |
| 417 | %</11pt> |
| 418 | %<*12pt> |
| 419 | \@setfontsize\normalsize\@xiipt{14.5}% |
| 420 | \abovedisplayskip12\p@\@plus3\p@\@minus7\p@% |
| 421 | \set@vsep\abovedisplayshortskip\z@\@plus3\p@% |
| 422 | \set@vsep\belowdisplayshortskip6.5\p@ \@plus3.5\p@\@minus3\p@% |
| 423 | %</12pt> |
| 424 | %<*text> |
| 425 | \@setfontsize\normalsize\@xpt\@xiipt% |
| 426 | \abovedisplayskip10\p@\@plus2\p@\@minus5\p@% |
| 427 | \set@vsep\abovedisplayshortskip\z@\@plus3\p@% |
| 428 | \set@vsep\belowdisplayshortskip6\p@\@plus3\p@\@minus3\p@% |
| 429 | %</text> |
| 430 | \belowdisplayskip\abovedisplayskip% |
| 431 | \let\@listi\@listI% |
| 432 | \@setparskip% |
| 433 | } |
| 434 | \normalsize |
| 435 | \if@indentpar |
| 436 | \parskip0pt\@plus\p@ |
| 437 | \else |
| 438 | \parskip2ex\@plus\p@ |
| 439 | \fi |
| 440 | % \end{macrocode} |
| 441 | % \end{macro} |
| 442 | % |
| 443 | % \begin{macro}{\small} |
| 444 | % |
| 445 | % The |\small| size is defined with similar care to |\normalsize|. The |
| 446 | % list defaults are altered to cope with our different value for |\parskip|. |
| 447 | % We can then separate this out independently from the typesize. |
| 448 | % |
| 449 | % \begin{macrocode} |
| 450 | %<+text>\let\small\normalsize |
| 451 | %<*8pt|9pt|10pt|11pt|12pt> |
| 452 | \newcommand\small{% |
| 453 | %<*8pt> |
| 454 | \@setfontsize\small\@viipt{8.4}% |
| 455 | \abovedisplayskip8\p@\@plus2\p@\@minus4\p@% |
| 456 | \set@vsep\abovedisplayshortskip\z@\@plus2\p@% |
| 457 | \set@vsep\belowdisplayshortskip4\p@\@plus2\p@\@minus2\p@% |
| 458 | %</8pt> |
| 459 | %<*9pt> |
| 460 | \@setfontsize\small\@viiipt{9.5}% |
| 461 | \abovedisplayskip8\p@\@plus2\p@\@minus4\p@% |
| 462 | \set@vsep\abovedisplayshortskip\z@\@plus2\p@% |
| 463 | \set@vsep\belowdisplayshortskip4\p@\@plus2\p@\@minus2\p@% |
| 464 | %</9pt> |
| 465 | %<*10pt> |
| 466 | \@setfontsize\small\@ixpt{11}% |
| 467 | \abovedisplayskip8.5\p@\@plus3\p@\@minus4\p@% |
| 468 | \set@vsep\abovedisplayshortskip\z@\@plus2\p@% |
| 469 | \set@vsep\belowdisplayshortskip4\p@\@plus2\p@\@minus2\p@% |
| 470 | %</10pt> |
| 471 | %<*11pt> |
| 472 | \@setfontsize\small\@xpt\@xiipt% |
| 473 | \abovedisplayskip10\p@\@plus2\p@\@minus5\p@% |
| 474 | \set@vsep\abovedisplayshortskip\z@\@plus3\p@% |
| 475 | \set@vsep\belowdisplayshortskip6\p@\@plus3\p@\@minus3\p@% |
| 476 | %</11pt> |
| 477 | %<*12pt> |
| 478 | \@setfontsize\small\@xipt{13.6}% |
| 479 | \abovedisplayskip11\p@\@plus3\p@\@minus6\p@% |
| 480 | \set@vsep\abovedisplayshortskip\z@ \@plus3\p@% |
| 481 | \set@vsep\belowdisplayshortskip6.5\p@ \@plus3.5\p@\@minus3\p@% |
| 482 | %</12pt> |
| 483 | \def\@listi{% |
| 484 | \leftmargin\leftmargini% |
| 485 | \topsep\@parshortfall% |
| 486 | \parsep\@parskip% |
| 487 | \itemsep\z@% |
| 488 | }% |
| 489 | \belowdisplayskip\abovedisplayskip% |
| 490 | \@setparskip% |
| 491 | } |
| 492 | %</8pt|9pt|10pt|11pt|12pt> |
| 493 | % \end{macrocode} |
| 494 | % \end{macro} |
| 495 | % |
| 496 | % \begin{macro}{\footnotesize} |
| 497 | % |
| 498 | % This is also defined with the meticulous care of |\normalsize|, and |
| 499 | % altered in the same way as for |\small|. |
| 500 | % |
| 501 | % \begin{macrocode} |
| 502 | %<+text>\let\footnotesize\normalsize |
| 503 | %<*8pt|9pt|10pt|11pt|12pt> |
| 504 | \newcommand\footnotesize{% |
| 505 | %<*8pt> |
| 506 | \@setfontsize\footnotesize\@vipt\@viipt% |
| 507 | \set@vsep\abovedisplayskip6\p@\@plus2\p@\@minus4\p@% |
| 508 | \set@vsep\abovedisplayshortskip\z@\@plus\p@% |
| 509 | \set@vsep\belowdisplayshortskip3\p@\@plus\p@\@minus2\p@% |
| 510 | %</8pt> |
| 511 | %<*9pt> |
| 512 | \@setfontsize\footnotesize\@viipt{8.4}% |
| 513 | \set@vsep\abovedisplayskip6\p@\@plus2\p@\@minus4\p@% |
| 514 | \set@vsep\abovedisplayshortskip\z@\@plus\p@% |
| 515 | \set@vsep\belowdisplayshortskip3\p@\@plus\p@\@minus2\p@% |
| 516 | %</9pt> |
| 517 | %<*10pt> |
| 518 | \@setfontsize\footnotesize\@viiipt{9.5}% |
| 519 | \set@vsep\abovedisplayskip6\p@\@plus2\p@\@minus4\p@% |
| 520 | \set@vsep\abovedisplayshortskip\z@\@plus\p@% |
| 521 | \set@vsep\belowdisplayshortskip3\p@\@plus\p@\@minus2\p@% |
| 522 | %</10pt> |
| 523 | %<*11pt> |
| 524 | \@setfontsize\footnotesize\@ixpt{11}% |
| 525 | \set@vsep\abovedisplayskip8\p@\@plus2\p@\@minus4\p@% |
| 526 | \set@vsep\abovedisplayshortskip\z@\@plus\p@% |
| 527 | \set@vsep\belowdisplayshortskip4\p@\@plus2\p@\@minus2\p@% |
| 528 | %</11pt> |
| 529 | %<*12pt> |
| 530 | \@setfontsize\footnotesize\@xpt\@xiipt |
| 531 | \set@vsep\abovedisplayskip10\p@\@plus2\p@\@minus5\p@% |
| 532 | \set@vsep\abovedisplayshortskip\z@\@plus3\p@% |
| 533 | \set@vsep\belowdisplayshortskip6\p@\@plus3\p@\@minus3\p@% |
| 534 | %</12pt> |
| 535 | \def\@listi{% |
| 536 | \leftmargin\leftmargini% |
| 537 | \topsep\@parshortfall% |
| 538 | \parsep\@parskip% |
| 539 | \itemsep\z@% |
| 540 | }% |
| 541 | \belowdisplayskip\abovedisplayskip% |
| 542 | \@setparskip% |
| 543 | } |
| 544 | %</8pt|9pt|10pt|11pt|12pt> |
| 545 | % \end{macrocode} |
| 546 | % \end{macro} |
| 547 | % |
| 548 | % The other sizes are all much simpler. We introduce a new size, |
| 549 | % |\listingsize|, which is used for the \env{listing} environment, to ensure |
| 550 | % that 77 columns of text fit across an A5 sheet. |
| 551 | % |
| 552 | % \begin{macrocode} |
| 553 | %<*8pt> |
| 554 | \newcommand\scriptsize{\@setfontsize\scriptsize\@vpt\@vipt\@setparskip} |
| 555 | \newcommand\tiny{\@setfontsize\tiny{4}\@vpt\@setparskip} |
| 556 | \newcommand\large{\@setfontsize\large\@xpt\@xiipt\@setparskip} |
| 557 | \newcommand\Large{\@setfontsize\Large\@xipt{13}\@setparskip} |
| 558 | \newcommand\LARGE{\@setfontsize\LARGE\@xiipt\@xivpt\@setparskip} |
| 559 | \newcommand\huge{\@setfontsize\huge\@xviipt{20}\@setparskip} |
| 560 | \newcommand\Huge{\@setfontsize\Huge\@xxpt{26}\@setparskip} |
| 561 | %</8pt> |
| 562 | %<*9pt> |
| 563 | \newcommand\scriptsize{\@setfontsize\scriptsize\@vipt\@viipt\@setparskip} |
| 564 | \newcommand\tiny{\@setfontsize\tiny\@vpt\@vipt\@setparskip} |
| 565 | \newcommand\large{\@setfontsize\large\@xipt{13}\@setparskip} |
| 566 | \newcommand\Large{\@setfontsize\Large\@xiipt{14.4}\@setparskip} |
| 567 | \newcommand\LARGE{\@setfontsize\LARGE\@xivpt{17}\@setparskip} |
| 568 | \newcommand\huge{\@setfontsize\huge\@xviipt{20}\@setparskip} |
| 569 | \newcommand\Huge{\@setfontsize\Huge\@xxpt{26}\@setparskip} |
| 570 | %</9pt> |
| 571 | %<*10pt> |
| 572 | \newcommand\scriptsize{\@setfontsize\scriptsize\@viipt\@viiipt\@setparskip} |
| 573 | \newcommand\tiny{\@setfontsize\tiny\@vpt\@vipt\@setparskip} |
| 574 | \newcommand\large{\@setfontsize\large\@xiipt{14}\@setparskip} |
| 575 | \newcommand\Large{\@setfontsize\Large\@xivpt{18}\@setparskip} |
| 576 | \newcommand\LARGE{\@setfontsize\LARGE\@xviipt{22}\@setparskip} |
| 577 | \newcommand\huge{\@setfontsize\huge\@xxpt{25}\@setparskip} |
| 578 | \newcommand\Huge{\@setfontsize\Huge\@xxvpt{30}\@setparskip} |
| 579 | %</10pt> |
| 580 | %<*11pt> |
| 581 | \newcommand\scriptsize{\@setfontsize\scriptsize\@viiipt{9.5}\@setparskip} |
| 582 | \newcommand\tiny{\@setfontsize\tiny\@vipt\@viipt\@setparskip} |
| 583 | \newcommand\large{\@setfontsize\large\@xiipt{14}\@setparskip} |
| 584 | \newcommand\Large{\@setfontsize\Large\@xivpt{18}\@setparskip} |
| 585 | \newcommand\LARGE{\@setfontsize\LARGE\@xviipt{22}\@setparskip} |
| 586 | \newcommand\huge{\@setfontsize\huge\@xxpt{25}\@setparskip} |
| 587 | \newcommand\Huge{\@setfontsize\Huge\@xxvpt{30}\@setparskip} |
| 588 | %</11pt> |
| 589 | %<*12pt> |
| 590 | \newcommand\scriptsize{\@setfontsize\scriptsize\@viiipt{9.5}\@setparskip} |
| 591 | \newcommand\tiny{\@setfontsize\tiny\@vipt\@viipt\@setparskip} |
| 592 | \newcommand\large{\@setfontsize\large\@xivpt{18}\@setparskip} |
| 593 | \newcommand\Large{\@setfontsize\Large\@xviipt{22}\@setparskip} |
| 594 | \newcommand\LARGE{\@setfontsize\LARGE\@xxpt{25}\@setparskip} |
| 595 | \newcommand\huge{\@setfontsize\huge\@xxvpt{30}\@setparskip} |
| 596 | \let\Huge\huge |
| 597 | %</12pt> |
| 598 | %<+8pt|9pt|10pt|11pt|12pt>\let\listingsize\footnotesize |
| 599 | %<*text> |
| 600 | \def\scriptsize{\@setfontsize\scriptsize\@xpt\@xiipt\@setparskip} |
| 601 | \let\tiny\scriptsize |
| 602 | \let\large\scriptsize |
| 603 | \let\Large\scriptsize |
| 604 | \let\LARGE\scriptsize |
| 605 | \let\huge\scriptsize |
| 606 | \let\Huge\scriptsize |
| 607 | \let\listingsize\scriptsize |
| 608 | % |
| 609 | \let\txt@selectfont\selectfont |
| 610 | \def\selectfont{% |
| 611 | \fontfamily\ttdefault% |
| 612 | \fontseries{m}% |
| 613 | \fontshape{n}% |
| 614 | \txt@selectfont% |
| 615 | } |
| 616 | %</text> |
| 617 | %</8pt|9pt|10pt|11pt|12pt|text> |
| 618 | % \end{macrocode} |
| 619 | % |
| 620 | % \subsection{Paragraph layout} |
| 621 | % |
| 622 | % Here we define various paragraph layout parameters. |
| 623 | % |
| 624 | % First, set up the line separation parameters. |\baselineskip| is set |
| 625 | % up by the individual size commands. |
| 626 | % |
| 627 | % \begin{macrocode} |
| 628 | %<*strayman> |
| 629 | \lineskip\p@ |
| 630 | \normallineskip\p@ |
| 631 | % \end{macrocode} |
| 632 | % |
| 633 | % We don't try to stretch the baselines apart: |
| 634 | % |
| 635 | % \begin{macrocode} |
| 636 | \renewcommand\baselinestretch{} |
| 637 | % \end{macrocode} |
| 638 | % |
| 639 | % Paragraph indentation is set up later. |
| 640 | % |
| 641 | % Set up some standard penalty values. |
| 642 | % |
| 643 | % \begin{macrocode} |
| 644 | \@lowpenalty 51 |
| 645 | \@medpenalty 151 |
| 646 | \@highpenalty 301 |
| 647 | %</strayman> |
| 648 | % \end{macrocode} |
| 649 | % |
| 650 | % \subsection{Page layout} |
| 651 | % |
| 652 | % Our layout is a bit different to the standard \LaTeX\ ones: we leave a lot |
| 653 | % of space down the left hand side: this is reserved for headings and |
| 654 | % marginal notes. |
| 655 | % |
| 656 | % Calculating the size of the space on the left, which we call |\leftindent|, |
| 657 | % is complicated. We want to use as much of the width of the page as |
| 658 | % possible, unlike the \LaTeX\ defaults, making sure that we can fit on |
| 659 | % 77 columns of |\listingsize\tt| text. We also try to make space for a |
| 660 | % reasonable amount of marginal text, although we don't worry too much if |
| 661 | % that suffers. |
| 662 | % |
| 663 | % The calculation is done as follows. More than about 40\,mm of margin will |
| 664 | % look very strange. We must have at least 104\,mm of main text, which |
| 665 | % leaves 20\,mm for the notes on A5 paper (actually, 17\,mm, since we leave |
| 666 | % 3\,mm gap between the notes and the main text). We divide the page |
| 667 | % horizontally into $s$\,mm of left border, $m$\,mm of marginal notes, |
| 668 | % $t$\,mm of body text, and another $s$\,mm of right border, giving |
| 669 | % a total of $w$\,mm. The value $s$ is given to us by the parameter |
| 670 | % |\pagesurround|. |
| 671 | % |
| 672 | % Articles look odd with a big gap down the side, so this is reduced when |
| 673 | % necessary. |
| 674 | % |
| 675 | % We calculate the quantity~$m$ as $\min\bigl(40,17(w-2s-3)/121+3\bigr)$\@. |
| 676 | % Then we calculate $t=w-m-24-3$. |
| 677 | % |
| 678 | % \begin{macrocode} |
| 679 | %<*8pt|9pt|10pt|11pt|12pt|text> |
| 680 | \newdimen\leftindent |
| 681 | %<*8pt|9pt|10pt|11pt|12pt> |
| 682 | \leftindent\paperwidth |
| 683 | \if@offsetpages |
| 684 | \advance\leftindent-2\pagesurround |
| 685 | \advance\leftindent-3mm |
| 686 | \leftindent0.1405\leftindent |
| 687 | \advance\leftindent3mm |
| 688 | \ifdim\leftindent>40mm\relax |
| 689 | \leftindent40mm |
| 690 | \fi |
| 691 | \if@article\divide\leftindent\tw@\fi |
| 692 | \ifdim\leftindent<15mm\leftindent15mm\fi |
| 693 | \else |
| 694 | \leftindent\z@ |
| 695 | \fi |
| 696 | %</8pt|9pt|10pt|11pt|12pt> |
| 697 | %<+text>\leftindent8\tt@chw |
| 698 | % \end{macrocode} |
| 699 | % |
| 700 | % In two-column layouts, we prevent headings from being outdented, by |
| 701 | % zeroing |\sectindent|. Chapter headings and suchlike are still outdented |
| 702 | % as before. We do not support margin paragraphs in two-column layouts. |
| 703 | % |
| 704 | % \begin{macrocode} |
| 705 | \newdimen\sectindent |
| 706 | \if@twocolumn |
| 707 | \sectindent\z@ |
| 708 | \else |
| 709 | \sectindent\if@numbering\z@\else\if@article\else\tw@\fi\leftindent\fi |
| 710 | \fi |
| 711 | % \end{macrocode} |
| 712 | % |
| 713 | % Having set up the size of the margin, we can get on with the rest of the |
| 714 | % setting up. |
| 715 | % |
| 716 | % First, we fix |\hoffset| and |\voffset| so we can work on the whole size |
| 717 | % of the paper. |
| 718 | % |
| 719 | % \begin{macrocode} |
| 720 | \advance\hoffset-1in |
| 721 | \advance\voffset-1in |
| 722 | % \end{macrocode} |
| 723 | % |
| 724 | % Now we can design the page layout in earnest. We begin with the vertical |
| 725 | % layout. |
| 726 | % |
| 727 | % \begin{macrocode} |
| 728 | %<+8pt>\topskip8\p@ |
| 729 | %<+9pt>\topskip9\p@ |
| 730 | %<+10pt>\topskip10\p@ |
| 731 | %<+11pt>\topskip11\p@ |
| 732 | %<+12pt>\topskip12\p@ |
| 733 | %<+text>\topskip\tt@chh |
| 734 | %<-text>\topmargin\pagesurround |
| 735 | %<+text>\topmargin\z@ |
| 736 | %<-text>\headheight12\p@ |
| 737 | %<+text>\headheight12\p@ |
| 738 | %<-text>\headsep.5\pagesurround |
| 739 | %<+text>\headsep2\tt@chh |
| 740 | %<+text>\advance\headsep-12\p@ |
| 741 | %<-text>\footskip12\p@ |
| 742 | %<-text>\advance\footskip.5\pagesurround |
| 743 | %<+text>\footskip2\tt@chh |
| 744 | \textheight\paperheight |
| 745 | %<-text>\advance\textheight-24\p@ |
| 746 | %<-text>\advance\textheight-3\pagesurround |
| 747 | %<+text>\advance\textheight-4\tt@chh |
| 748 | % \end{macrocode} |
| 749 | % |
| 750 | % Now we define the horizontal layout. |
| 751 | % |
| 752 | % \begin{macrocode} |
| 753 | \oddsidemargin\leftindent |
| 754 | %<-text>\advance\oddsidemargin\pagesurround |
| 755 | \evensidemargin\oddsidemargin |
| 756 | \textwidth\paperwidth |
| 757 | \advance\textwidth-\oddsidemargin |
| 758 | %<-text> \advance\textwidth-\pagesurround |
| 759 | %<-text>\marginparsep3mm |
| 760 | %<+text>\marginparsep\tt@chw |
| 761 | \marginparwidth\leftindent |
| 762 | \advance\marginparwidth-\marginparsep |
| 763 | % \end{macrocode} |
| 764 | % |
| 765 | % Setting |\maxdepth| is fairly simple. This looks odd, because normally |
| 766 | % there's some messing for compatibility with \LaTeX~2.09. |
| 767 | % |
| 768 | % \begin{macrocode} |
| 769 | \maxdepth.5\topskip |
| 770 | \@maxdepth\maxdepth |
| 771 | % \end{macrocode} |
| 772 | % |
| 773 | % Marginal notes need some setting up. |
| 774 | % |
| 775 | % \begin{macrocode} |
| 776 | \marginparpush5\p@ |
| 777 | % \end{macrocode} |
| 778 | % |
| 779 | % Footnotes need some setting up now. |
| 780 | % |
| 781 | % \begin{macrocode} |
| 782 | %<+8pt>\footnotesep5.8\p@ |
| 783 | %<+9pt>\footnotesep6.2\p@ |
| 784 | %<+10pt>\footnotesep6.65\p@ |
| 785 | %<+11pt>\footnotesep7.7\p@ |
| 786 | %<+12pt>\footnotesep8.4\p@ |
| 787 | %<+8pt>\setlength{\skip\footins}{7\p@\@plus4\p@\@minus2\p@} |
| 788 | %<+9pt>\setlength{\skip\footins}{8\p@\@plus4\p@\@minus2\p@} |
| 789 | %<+10pt>\setlength{\skip\footins}{9\p@\@plus4\p@\@minus2\p@} |
| 790 | %<+11pt>\setlength{\skip\footins}{10\p@\@plus4\p@\@minus2\p@} |
| 791 | %<+12pt>\setlength{\skip\footins}{10.8\p@\@plus4\p@\@minus2\p@} |
| 792 | %</8pt|9pt|10pt|11pt|12pt|text> |
| 793 | % \end{macrocode} |
| 794 | % |
| 795 | % \subsection{Float placement} |
| 796 | % |
| 797 | % First, we determine how we position the floats on the page. |
| 798 | % |
| 799 | % \begin{macrocode} |
| 800 | %<*strayman> |
| 801 | \setcounter{topnumber}{2} |
| 802 | \renewcommand\topfraction{.7} |
| 803 | \setcounter{bottomnumber}{1} |
| 804 | \renewcommand\bottomfraction{.3} |
| 805 | \setcounter{totalnumber}{3} |
| 806 | \renewcommand\textfraction{.1} |
| 807 | \renewcommand\floatpagefraction{.8} |
| 808 | \setcounter{dbltopnumber}{2} |
| 809 | \renewcommand\dbltopfraction{.7} |
| 810 | \renewcommand\dblfloatpagefraction{.5} |
| 811 | %</strayman> |
| 812 | % \end{macrocode} |
| 813 | % |
| 814 | % Now we define the glue which surrounds floats. |
| 815 | % |
| 816 | % \begin{macrocode} |
| 817 | %<*8pt|9pt|10pt|11pt|12pt> |
| 818 | \floatsep12\p@\@plus2\p@\@minus2\p@ |
| 819 | \textfloatsep20\p@\@plus2\p@\@minus4\p@ |
| 820 | \dbltextfloatsep20\p@\@plus2\p@\@minus4\p@ |
| 821 | %<+8pt|9pt|10pt|11pt>\intextsep12\p@\@plus2\p@\@minus 2\p@ |
| 822 | %<+8pt|9pt|10pt|11pt>\dblfloatsep12\p@\@plus2\p@\@minus 2\p@ |
| 823 | %<+12pt>\intextsep14\p@\@plus4\p@\@minus 4\p@ |
| 824 | %<+12pt>\dblfloatsep14\p@\@plus2\p@\@minus 4\p@ |
| 825 | % \end{macrocode} |
| 826 | % |
| 827 | % We must now define the parameters for float pages and columns. |
| 828 | % |
| 829 | % \begin{macrocode} |
| 830 | \@fptop0\p@\@plus 1fil |
| 831 | %<+8pt|9pt|10pt|11pt>\@fpsep8\p@\@plus2fil |
| 832 | %<+12pt>\@fpsep10\p@\@plus2fil |
| 833 | \@fpbot0\p@\@plus 1fil |
| 834 | % |
| 835 | \@dblfptop0\p@\@plus 1fil |
| 836 | %<+8pt|9pt|10pt|11pt>\@dblfpsep8\p@\@plus 2fil |
| 837 | %<+12pt>\@dblfpsep10\p@\@plus2fil |
| 838 | \@dblfpbot0\p@\@plus 1fil |
| 839 | %</8pt|9pt|10pt|11pt|12pt> |
| 840 | % \end{macrocode} |
| 841 | % |
| 842 | % \section{Headers and footers} |
| 843 | % |
| 844 | % This part defines the standard page styles. By default, \strayman\ |
| 845 | % imports \package{fancyheadings} and uses them, although this section is |
| 846 | % retained in case anything actually needs the original \LaTeX-style |
| 847 | % headings. |
| 848 | % |
| 849 | % \begin{macrocode} |
| 850 | %<*strayman> |
| 851 | \def\ps@headings{% |
| 852 | \let\@oddfoot\@empty\let\@evenfoot\@empty |
| 853 | \def\@evenhead{\thepage\hfil\slshape\leftmark}% |
| 854 | \def\@oddhead{{\slshape\rightmark}\hfil\thepage}% |
| 855 | \let\@mkboth\markboth |
| 856 | \def\chaptermark##1{\markboth {\thechapter. ##1}{}}% |
| 857 | \def\sectionmark##1{\markright {\thesection. ##1}}% |
| 858 | } |
| 859 | % |
| 860 | \def\ps@myheadings{% |
| 861 | \let\@oddfoot\@empty\let\@evenfoot\@empty |
| 862 | \def\@evenhead{\thepage\hfil\slshape\leftmark}% |
| 863 | \def\@oddhead{{\slshape\rightmark}\hfil\thepage}% |
| 864 | \let\@mkboth\@gobbletwo |
| 865 | \let\chaptermark\@gobble |
| 866 | \let\sectionmark\@gobble |
| 867 | } |
| 868 | % \end{macrocode} |
| 869 | % |
| 870 | % \section{Titles} |
| 871 | % |
| 872 | % \begin{macro}{\maketitle} |
| 873 | % This is a bit of a thorny issue at the moment. Really, these titles need |
| 874 | % a complete rewrite. The |\maketitle| command will only be used for inside |
| 875 | % front covers anyway. I'm wondering if it wouldn't be better just to use |
| 876 | % special case code for each individual manual. Until a decision is made, |
| 877 | % I'll leave this as it was in \package{book}. |
| 878 | % |
| 879 | % \begin{note} |
| 880 | % This code is largely uncommented. It seems to be fairly straightforward, |
| 881 | % and if I do need to change it, I'll probably start again from scratch |
| 882 | % anyway. |
| 883 | % \end{note} |
| 884 | % |
| 885 | % \begin{macrocode} |
| 886 | \if@titlepage |
| 887 | % |
| 888 | \newcommand\maketitle{% |
| 889 | \begin{titlepage}% |
| 890 | \let\footnotesize\small% |
| 891 | \let\footnoterule\relax% |
| 892 | \null\vfil% |
| 893 | \vskip 60\p@% |
| 894 | \begin{center}% |
| 895 | {\LARGE\@title\par}% |
| 896 | \vskip3em% |
| 897 | {% |
| 898 | \large% |
| 899 | \lineskip.75em% |
| 900 | \begin{tabular}[t]{c}% |
| 901 | \@author% |
| 902 | \end{tabular}% |
| 903 | \par% |
| 904 | }% |
| 905 | \vskip1.5em% |
| 906 | {\large \@date \par}% % Set date in \large size. |
| 907 | \end{center}% |
| 908 | \par% |
| 909 | \@thanks% |
| 910 | \vfil\null% |
| 911 | \end{titlepage}% |
| 912 | \setcounter{footnote}{0}% |
| 913 | \let\thanks\relax% |
| 914 | \let\maketitle\relax% |
| 915 | \gdef\@thanks{}% |
| 916 | \gdef\@author{}% |
| 917 | \gdef\@title{}% |
| 918 | } |
| 919 | % |
| 920 | \else |
| 921 | % |
| 922 | \newcommand\maketitle{% |
| 923 | \par% |
| 924 | \begingroup% |
| 925 | \renewcommand\thefootnote{\fnsymbol{footnote}}% |
| 926 | \def\@makefnmark{\hb@xt@\z@{$\m@th^{\@thefnmark}$\hss}}% |
| 927 | \long\def\@makefntext##1{% |
| 928 | \parindent1em\noindent% |
| 929 | \hb@xt@1.8em{\hss$\m@th^{\@thefnmark}$}##1% |
| 930 | }% |
| 931 | \if@twocolumn% |
| 932 | \ifnum\col@number=\@ne% |
| 933 | \@maketitle% |
| 934 | \else% |
| 935 | \twocolumn[\@maketitle]% |
| 936 | \fi% |
| 937 | \else% |
| 938 | \newpage% |
| 939 | \global\@topnum\z@% % Prevents figures from going at top of page. |
| 940 | \@maketitle% |
| 941 | \fi% |
| 942 | \thispagestyle{plain}% |
| 943 | \@thanks% |
| 944 | \endgroup% |
| 945 | \setcounter{footnote}{0}% |
| 946 | \let\thanks\relax% |
| 947 | \let\maketitle\relax% |
| 948 | \let\@maketitle\relax% |
| 949 | \gdef\@thanks{}% |
| 950 | \gdef\@author{}% |
| 951 | \gdef\@title{}% |
| 952 | } |
| 953 | % |
| 954 | \fi |
| 955 | % |
| 956 | \def\@maketitle{% |
| 957 | \newpage% |
| 958 | \null% |
| 959 | \vskip2em% |
| 960 | \begin{center}% |
| 961 | {\LARGE\@title\par}% |
| 962 | \vskip1.5em% |
| 963 | {% |
| 964 | \large% |
| 965 | \lineskip.5em% |
| 966 | \begin{tabular}[t]{c}% |
| 967 | \@author% |
| 968 | \end{tabular}% |
| 969 | \par% |
| 970 | }% |
| 971 | \vskip 1em% |
| 972 | {\large\@date}% |
| 973 | \end{center}% |
| 974 | \par% |
| 975 | \vskip1.5em% |
| 976 | } |
| 977 | % \end{macrocode} |
| 978 | % \end{macro} |
| 979 | % |
| 980 | % \begin{environment}{titlepage} |
| 981 | % |
| 982 | % The \env{titlepage} environment typesets its contents on a title page. |
| 983 | % The implementation is fairly straightforward: we just need to do some |
| 984 | % fiddling with two-column layouts. We also add in some hacking to make |
| 985 | % title pages centred properly, a bit like the \env{central} environment. |
| 986 | % |
| 987 | % \begin{macrocode} |
| 988 | \newenvironment{titlepage}{% |
| 989 | \cleardoublepage% |
| 990 | \if@twocolumn% |
| 991 | \@restonecoltrue\onecolumn% |
| 992 | \else% |
| 993 | \@restonecolfalse\newpage% |
| 994 | \fi% |
| 995 | \centrepage% |
| 996 | \if@compatibility% |
| 997 | \setcounter{page}{0}% |
| 998 | \fi% |
| 999 | }{% |
| 1000 | \thispagestyle{empty}% |
| 1001 | \if@restonecol% |
| 1002 | \twocolumn% |
| 1003 | \else% |
| 1004 | \newpage% |
| 1005 | \fi% |
| 1006 | } |
| 1007 | % \end{macrocode} |
| 1008 | % \end{environment} |
| 1009 | % |
| 1010 | % \begin{macro}{\centrepage} |
| 1011 | % |
| 1012 | % Change the page layout to centre everything properly. We guard against |
| 1013 | % this sort of thing happening again by clearing |\leftindent| and |
| 1014 | % |\sectindent|. This should only be cleared after the page has been |
| 1015 | % finished, for obvious reasons. |
| 1016 | % |
| 1017 | % \begin{macrocode} |
| 1018 | \def\centrepage{% |
| 1019 | \advance\oddsidemargin-\leftindent% |
| 1020 | \advance\evensidemargin-\leftindent% |
| 1021 | \advance\textwidth\leftindent% |
| 1022 | \advance\linewidth\leftindent% |
| 1023 | \advance\leftmargini0.5\leftindent% |
| 1024 | \leftindent\z@% |
| 1025 | \sectindent\z@% |
| 1026 | \hsize\textwidth% |
| 1027 | } |
| 1028 | % \end{macrocode} |
| 1029 | % \end{macro} |
| 1030 | % |
| 1031 | % \section{Sectioning commands} |
| 1032 | % |
| 1033 | % In \strayman, quite a lot of the sectioning is different. We |
| 1034 | % don't tend to number sections much. Also, the chapter heading style has |
| 1035 | % been completely rewritten (several times). |
| 1036 | % |
| 1037 | % \subsection{Setting up the counters} |
| 1038 | % |
| 1039 | % This is pretty simple stuff. |
| 1040 | % |
| 1041 | % \begin{macrocode} |
| 1042 | \newcommand\chaptermark[1]{} |
| 1043 | \setcounter{secnumdepth}{\if@numbering\if@runinsubsubsec2\else3\fi\else0\fi} |
| 1044 | \newcounter {part} |
| 1045 | \newcounter {chapter} |
| 1046 | \newcounter {section}[chapter] |
| 1047 | \newcounter {subsection}[section] |
| 1048 | \newcounter {subsubsection}[subsection] |
| 1049 | \newcounter {paragraph}[subsubsection] |
| 1050 | \newcounter {subparagraph}[paragraph] |
| 1051 | \renewcommand\thepart {\Roman{part}} |
| 1052 | \renewcommand\thechapter {\arabic{chapter}} |
| 1053 | \if@article |
| 1054 | \renewcommand\thesection {\arabic{section}} |
| 1055 | \else |
| 1056 | \renewcommand\thesection {\thechapter.\arabic{section}} |
| 1057 | \fi |
| 1058 | \renewcommand\thesubsection {\thesection.\arabic{subsection}} |
| 1059 | \renewcommand\thesubsubsection {\thesubsection .\arabic{subsubsection}} |
| 1060 | \renewcommand\theparagraph {\thesubsubsection.\arabic{paragraph}} |
| 1061 | \renewcommand\thesubparagraph {\theparagraph.\arabic{subparagraph}} |
| 1062 | % \end{macrocode} |
| 1063 | % |
| 1064 | % \subsection{Frontmatter, mainmatter and backmatter} |
| 1065 | % |
| 1066 | % We start off thinking we're in the main matter. The user ought to put a |
| 1067 | % |\frontmatter| command at the beginning of the document if this is not |
| 1068 | % correct, as it usually won't be. |
| 1069 | % |
| 1070 | % \begin{macrocode} |
| 1071 | \newif\if@mainmatter |
| 1072 | \@mainmattertrue |
| 1073 | \newcommand\frontmatter{% |
| 1074 | \cleardoublepage% |
| 1075 | \@mainmatterfalse% |
| 1076 | \pagenumbering{roman}% |
| 1077 | } |
| 1078 | \newcommand\mainmatter{% |
| 1079 | \cleardoublepage% |
| 1080 | \@mainmattertrue% |
| 1081 | \pagenumbering{arabic}% |
| 1082 | } |
| 1083 | \newcommand\backmatter{% |
| 1084 | \if@openright% |
| 1085 | \cleardoublepage% |
| 1086 | \else% |
| 1087 | \clearpage% |
| 1088 | \fi% |
| 1089 | \@mainmatterfalse% |
| 1090 | } |
| 1091 | % \end{macrocode} |
| 1092 | % |
| 1093 | % \subsection{Abstracts} |
| 1094 | % |
| 1095 | % \begin{environment}{abstract} |
| 1096 | % |
| 1097 | % The \env{abstract} environment reduces the type size and margins slightly. |
| 1098 | % Abstracts are placed on their own pages when the |titlepage| option is |
| 1099 | % enabled. The code is filched from the LaTeX article class. |
| 1100 | % |
| 1101 | % \begin{macrocode} |
| 1102 | \if@titlepage |
| 1103 | \newenvironment{abstract}{% |
| 1104 | \titlepage |
| 1105 | \null\vfil |
| 1106 | \@beginparpenalty\@lowpenalty |
| 1107 | \begin{center}% |
| 1108 | \bfseries \abstractname |
| 1109 | \@endparpenalty\@M |
| 1110 | \end{center}}% |
| 1111 | {\par\vfil\null\endtitlepage} |
| 1112 | \else |
| 1113 | \newenvironment{abstract}{% |
| 1114 | \if@twocolumn |
| 1115 | \section*{\abstractname}% |
| 1116 | \else |
| 1117 | \small |
| 1118 | \list{}{% |
| 1119 | \def\makelabel##1{% |
| 1120 | \normalfont% |
| 1121 | \fontseries{b}\fontfamily\headdefault\selectfont% |
| 1122 | ##1% |
| 1123 | }% |
| 1124 | \labelsep1em\labelwidth\z@\itemindent\labelsep% |
| 1125 | \rightmargin\leftmargin% |
| 1126 | } |
| 1127 | \item[\abstractname]% |
| 1128 | \fi} |
| 1129 | {\if@twocolumn\else\endlist\fi} |
| 1130 | \fi |
| 1131 | % \end{macrocode} |
| 1132 | % \end{environment} |
| 1133 | % |
| 1134 | % \subsection{Appendices} |
| 1135 | % |
| 1136 | % \begin{macro}{\appendix} |
| 1137 | % |
| 1138 | % This command sets everything up to typeset the appendix. |
| 1139 | % |
| 1140 | % \begin{macrocode} |
| 1141 | \newcommand\appendix{% |
| 1142 | \par% |
| 1143 | \setcounter{chapter}{0}% |
| 1144 | \setcounter{section}{0}% |
| 1145 | \renewcommand\@chapapp{\appendixname}% |
| 1146 | \if@article% |
| 1147 | \renewcommand\thesection{\Alph{section}}% |
| 1148 | \else% |
| 1149 | \renewcommand\thechapter{\Alph{chapter}}% |
| 1150 | \fi% |
| 1151 | \@appendixtrue% |
| 1152 | } |
| 1153 | % \end{macrocode} |
| 1154 | % \end{macro} |
| 1155 | % |
| 1156 | % \subsection{Parts} |
| 1157 | % |
| 1158 | % Part headings are typeset on completely unadorned sheets, devoid of page |
| 1159 | % numbers and suchlike. Because of the strange page layout, we have to |
| 1160 | % put the part heading into a |central| environment. to stop the page looking |
| 1161 | % horribly lopsided. |
| 1162 | % |
| 1163 | % \begin{macro}{\part} |
| 1164 | % |
| 1165 | % The |\part| macro moves to an appropriate page, changes the pagestyle to |
| 1166 | % empty to switch off page numbering, and then calls |\@part| or |\@spart| |
| 1167 | % as appropriate, according to whether a \lit* was supplied. We put some |
| 1168 | % |\vfil| glue in, to vertically centre anything that these commands typeset, |
| 1169 | % and ensure printing in a single column. |
| 1170 | % |
| 1171 | % \begin{macrocode} |
| 1172 | \newcommand\part{% |
| 1173 | \cleardoublepage% |
| 1174 | \thispagestyle{empty}% |
| 1175 | \if@twocolumn% |
| 1176 | \onecolumn% |
| 1177 | \@tempswatrue% |
| 1178 | \else% |
| 1179 | \@tempswafalse% |
| 1180 | \fi% |
| 1181 | \hbox{}\vfil% |
| 1182 | \begin{centrepage}% |
| 1183 | \secdef\@part\@spart% |
| 1184 | } |
| 1185 | % \end{macrocode} |
| 1186 | % |
| 1187 | % \begin{macro}{\@part} |
| 1188 | % |
| 1189 | % This is where most of the part heading typesetting is done. We stick a |
| 1190 | % line in the contents file, clear the heading markers, and typeset the |
| 1191 | % heading in the biggest letters we can find. When we're done, we call |
| 1192 | % |\@endpart| to do some common cleaning up. |
| 1193 | % |
| 1194 | % \begin{macrocode} |
| 1195 | \def\@part[#1]#2{% |
| 1196 | \ifnum\c@secnumdepth>-2\relax% |
| 1197 | \refstepcounter{part}% |
| 1198 | \addcontentsline{toc}{part}{\thepart\hspace{1em}#1}% |
| 1199 | \else% |
| 1200 | \addcontentsline{toc}{part}{#1}% |
| 1201 | \fi% |
| 1202 | \markboth{}{}% |
| 1203 | \centering% |
| 1204 | \interlinepenalty\@M% |
| 1205 | \reset@font% |
| 1206 | \ifnum\c@secnumdepth>-2\relax% |
| 1207 | \huge\bfseries\headfam\partname~\thepart% |
| 1208 | \par% |
| 1209 | \vskip20\p@ |
| 1210 | \fi% |
| 1211 | \normalfont\Huge\bfseries\headfam#2\par% |
| 1212 | \@endpart% |
| 1213 | } |
| 1214 | % \end{macrocode} |
| 1215 | % \end{macro} |
| 1216 | % |
| 1217 | % \begin{macro}{\@spart} |
| 1218 | % |
| 1219 | % Here we typeset just the part heading: numbers have been suppressed. Also |
| 1220 | % we don't put things into the contents file. Otherwise, this is similar to |
| 1221 | % |\@part|. |
| 1222 | % |
| 1223 | % \begin{macrocode} |
| 1224 | \def\@spart#1{% |
| 1225 | \centering% |
| 1226 | \interlinepenalty\@M% |
| 1227 | \reset@font% |
| 1228 | \normalfont\Huge\bfseries\headfam#1\par% |
| 1229 | \@endpart% |
| 1230 | } |
| 1231 | % \end{macrocode} |
| 1232 | % \end{macro} |
| 1233 | % |
| 1234 | % \begin{macro}{\@endpart} |
| 1235 | % |
| 1236 | % This does the clearing up operation after a part has been typeset. We |
| 1237 | % insert the other |\vfil| glue to centre the heading, clear the other |
| 1238 | % side of the page, if printing two-sided, and return if necessary to |
| 1239 | % two-column printing. |
| 1240 | % |
| 1241 | % \begin{macrocode} |
| 1242 | \def\@endpart{% |
| 1243 | \vfil\newpage% |
| 1244 | \end{centrepage}% |
| 1245 | \if@twoside% |
| 1246 | \hbox{}% |
| 1247 | \thispagestyle{empty}% |
| 1248 | \newpage% |
| 1249 | \fi% |
| 1250 | \if@tempswa% |
| 1251 | \twocolumn% |
| 1252 | \fi% |
| 1253 | } |
| 1254 | % \end{macrocode} |
| 1255 | % \end{macro} |
| 1256 | % \end{macro} |
| 1257 | % |
| 1258 | % \subsection{Chapters} |
| 1259 | % |
| 1260 | % The chapter typesetting has been more-or-less rewritten. We'll follow this |
| 1261 | % in a reasonable amount of detail. |
| 1262 | % |
| 1263 | % \begin{macro}{\@chapapp} |
| 1264 | % |
| 1265 | % Because |\appendix| needs to change what chapters are called, we add a |
| 1266 | % level of indirection through |\@chapapp|: |
| 1267 | % |
| 1268 | % \begin{macrocode} |
| 1269 | \newcommand\@chapapp{\chaptername} |
| 1270 | % \end{macrocode} |
| 1271 | % \end{macro} |
| 1272 | % |
| 1273 | % \begin{macro}{\chapter} |
| 1274 | % |
| 1275 | % The |\chapter| command is the main dispatcher for chapters. We move to |
| 1276 | % an appropriate page, depending on the |openright| setting, suppress |
| 1277 | % headers, and then call |\@chapter| or |\@schapter| as appropriate. |
| 1278 | % |
| 1279 | % \begin{macrocode} |
| 1280 | \newcommand\chapter{% |
| 1281 | \if@openright% |
| 1282 | \cleardoublepage% |
| 1283 | \else% |
| 1284 | \clearpage% |
| 1285 | \fi% |
| 1286 | \thispagestyle{plain}% |
| 1287 | \global\@topnum\z@% |
| 1288 | \@afterindentfalse% |
| 1289 | \secdef\@chapter\@schapter% |
| 1290 | } |
| 1291 | % \end{macrocode} |
| 1292 | % |
| 1293 | % \begin{macro}{\@chapter} |
| 1294 | % |
| 1295 | % There's a lot of messing about to do, depending on whether we're in the |
| 1296 | % main matter and so on. We'll take this carefully. |
| 1297 | % |
| 1298 | % \begin{macrocode} |
| 1299 | \def\@chapter[#1]#2{% |
| 1300 | % \end{macrocode} |
| 1301 | % |
| 1302 | % The first thing to do is put a line in the contents table. We need to |
| 1303 | % check |secnumdepth| and the |mainmatter| flag for this: we should only |
| 1304 | % include a number if both these tests pass. In this case, we also type a |
| 1305 | % message on the terminal. |
| 1306 | % |
| 1307 | % \begin{macrocode} |
| 1308 | \ifnum\c@secnumdepth>\m@ne% |
| 1309 | \if@mainmatter% |
| 1310 | \refstepcounter{chapter}% |
| 1311 | \typeout{\@chapapp\space\thechapter.}% |
| 1312 | \addcontentsline{toc}{chapter}{\protect\numberline{\thechapter}#1}% |
| 1313 | \else |
| 1314 | \addcontentsline{toc}{chapter}{#1}% |
| 1315 | \fi |
| 1316 | \else |
| 1317 | \addcontentsline{toc}{chapter}{#1} |
| 1318 | \fi |
| 1319 | % \end{macrocode} |
| 1320 | % |
| 1321 | % Now we put a bit of space in the lists of figures and tables, and set up |
| 1322 | % the mark to put the chapter heading in the running header. |
| 1323 | % \begin{macrocode} |
| 1324 | \chaptermark{#1}% |
| 1325 | \addtocontents{lof}{\protect\addvspace{10\p@}}% |
| 1326 | \addtocontents{lot}{\protect\addvspace{10\p@}}% |
| 1327 | % \end{macrocode} |
| 1328 | % |
| 1329 | % Finally, we need to decide how to typeset the chapter heading. On |
| 1330 | % single-column chapters, this is easy. On double-column formats, we need |
| 1331 | % to do horrid things with |\@topnewpage|. |
| 1332 | % |
| 1333 | % \begin{macrocode} |
| 1334 | \if@twocolumn% |
| 1335 | \@topnewpage[\@makechapterhead{% |
| 1336 | \hb@xt@.5\leftindent{\thechapter\hfil}% |
| 1337 | }{#2}]% |
| 1338 | \else% |
| 1339 | \@makechapterhead{% |
| 1340 | \hb@xt@.5\leftindent{\thechapter\hfil}% |
| 1341 | }{#2}% |
| 1342 | \@afterheading% |
| 1343 | \fi% |
| 1344 | } |
| 1345 | % \end{macrocode} |
| 1346 | % \end{macro} |
| 1347 | % |
| 1348 | % \begin{macro}{\@makechapterhead} |
| 1349 | % |
| 1350 | % This macro actually does the job of typesetting a chapter heading. Call |
| 1351 | % this routine as |\@makechapterhead{|\synt{number}|}{|\synt{title}|}|. |
| 1352 | % Here, \synt{number} is how to typeset the chapter number, and \synt{title} |
| 1353 | % is the rest of the title. To suppress the number, just leave \synt{number} |
| 1354 | % empty. The number is only typeset when it is correct to do so anyway. |
| 1355 | % |
| 1356 | % The spacing is rather awkward. We have to cope with two-column layouts, |
| 1357 | % which seem to require different spacing. In a double-column layout, |
| 1358 | % the title is normally one |\baselineskip| too high. Also, the space I |
| 1359 | % add at the bottom of the heading gets eaten in double-column chapters, |
| 1360 | % because I'm actually typesetting into a vbox which is floated to the top |
| 1361 | % by \LaTeX\ in a fairly horrid way. This can't really be worked around, |
| 1362 | % so we just make the space beneath the heading equal to |\dbltextfloatsep|, |
| 1363 | % which is what gets added anyway. |
| 1364 | % |
| 1365 | % The other snags are to do with the rule after the chapter heading. |
| 1366 | % Firstly, this is meant to be typeset into the left margin, like the |
| 1367 | % heading itself, which is a bit messy. More awkwardly, we have to be |
| 1368 | % careful not to let the depth of the line vary when the chapter heading has |
| 1369 | % descenders, although obviously we must lower the rule if the heading really |
| 1370 | % is very deep indeed. |
| 1371 | % |
| 1372 | % |
| 1373 | % We'll approach this a bit at a time. |
| 1374 | % |
| 1375 | % \begin{macrocode} |
| 1376 | \def\@makechapterhead#1#2{% |
| 1377 | \begingroup% % Stop my hacking messing things up |
| 1378 | % \end{macrocode} |
| 1379 | % |
| 1380 | % First, the top spacing. This is divided into two parts, by an invisible |
| 1381 | % rule: the |\vskip| above the rule is eaten by \TeX\ if this is a genuine |
| 1382 | % new page, but put into the floating vbox if this is a two-column affair. |
| 1383 | % The second bit is added in both cases. |
| 1384 | % |
| 1385 | % \begin{macrocode} |
| 1386 | \vskip\baselineskip% % This is gobbled in single column |
| 1387 | \hrule\@height\z@% % Stops TeX from binning my vskips |
| 1388 | \vskip32\p@% % Start chapters in a funny place |
| 1389 | % \end{macrocode} |
| 1390 | % |
| 1391 | % Now we actually typeset the heading. This is fairly simple: we must just |
| 1392 | % check that we need to typeset the number. |
| 1393 | % |
| 1394 | % \begin{macrocode} |
| 1395 | \normalfont\Huge\bfseries\headfam% % Choose a nice font for it |
| 1396 | \raggedright % Don't justify -- it looks nasty |
| 1397 | \@hangfrom{\hskip-\leftindent}% % Start text at `real left margin' |
| 1398 | \ifnum\c@secnumdepth>\m@ne% % Do we typeset chapter numbers? |
| 1399 | \if@mainmatter% % Are we past the front matter? |
| 1400 | #1% % Yes -- then typeset the number |
| 1401 | \fi\fi% % Now back to normality |
| 1402 | {#2}% % Typeset the actual chapter head |
| 1403 | \par\nobreak% % Back to vmode again, please |
| 1404 | % \end{macrocode} |
| 1405 | % |
| 1406 | % The next tricky bit is the space before the ruleoff. We must be careful |
| 1407 | % here: |
| 1408 | % |
| 1409 | % \begin{itemize} |
| 1410 | % |
| 1411 | % \item We want the rule to be the right depth below the heading baseline, |
| 1412 | % regardless of whether the heading contains descenders: helpfully, \TeX\ |
| 1413 | % omits |\baselineskip| glue before and after rules. |
| 1414 | % |
| 1415 | % \item We want the rule to always be below any oddly deep descenders that |
| 1416 | % a strange user might throw at us (e.g., horrid fractions or weird |
| 1417 | % |\vrule|s). |
| 1418 | % |
| 1419 | % \end{itemize} |
| 1420 | % |
| 1421 | % We accomplish this by scrutinising |\prevdepth| carefully. |
| 1422 | % |
| 1423 | % \begin{macrocode} |
| 1424 | \@tempdima14\p@% % Be this low below the baseline |
| 1425 | \advance\@tempdima-\prevdepth% % This is the actual skip then |
| 1426 | \ifdim\@tempdima<8\p@% % Is this not enough skippage? |
| 1427 | \@tempdima8\p@% % No: then skip some more |
| 1428 | \fi% |
| 1429 | \vskip\@tempdima% % Skip a bit below the title |
| 1430 | % \end{macrocode} |
| 1431 | % |
| 1432 | % Now we can set the rule. This needs a little care. |
| 1433 | % |
| 1434 | % \begin{macrocode} |
| 1435 | \@tempskipa\textwidth% % Find the width of the column |
| 1436 | \advance\@tempskipa\leftindent% % Add on the big lefthand gap |
| 1437 | \nointerlineskip% % Don't add any more space please |
| 1438 | \moveleft\leftindent\vbox{% % Shift something left by an amount |
| 1439 | \hrule\@width\@tempskipa% % Typeset the rule nicely |
| 1440 | }% |
| 1441 | \nointerlineskip% % Don't leave a gap beneath it |
| 1442 | % \end{macrocode} |
| 1443 | % |
| 1444 | % Finally, we leave a gap. In two-column layouts this is done for us, and |
| 1445 | % \LaTeX\ gobbles this glue and replaces it with |\dbltextfloatsep|. To make |
| 1446 | % things consistent, this is the glue we use anyway. |
| 1447 | % |
| 1448 | % \begin{macrocode} |
| 1449 | \nobreak% % This would be a bad place to break |
| 1450 | \vspace{\dbltextfloatsep}% % Add in some extra glue beneath |
| 1451 | \endgroup% |
| 1452 | } |
| 1453 | % \end{macrocode} |
| 1454 | % \end{macro} |
| 1455 | % |
| 1456 | % \begin{macro}{\@makeschapterhead} |
| 1457 | % |
| 1458 | % This is now just a veneer onto |\@makechapterhead|. It's needed, because |
| 1459 | % other bits of \LaTeX\ call it. |
| 1460 | % |
| 1461 | % \begin{macrocode} |
| 1462 | \def\@makeschapterhead{% |
| 1463 | \@makechapterhead{} |
| 1464 | } |
| 1465 | % \end{macrocode} |
| 1466 | % \end{macro} |
| 1467 | % |
| 1468 | % \begin{macro}{\@schapter} |
| 1469 | % |
| 1470 | % This macro typesets a starred chapter heading. This is terribly simple, |
| 1471 | % compared to the sort of things we've been doing so far. |
| 1472 | % |
| 1473 | % \begin{macrocode} |
| 1474 | \def\@schapter#1{% |
| 1475 | \if@twocolumn% |
| 1476 | \@topnewpage[\@makeschapterhead{#1}]% |
| 1477 | \else% |
| 1478 | \@makeschapterhead{#1}% |
| 1479 | \@afterheading% |
| 1480 | \fi% |
| 1481 | } |
| 1482 | % \end{macrocode} |
| 1483 | % \end{macro} |
| 1484 | % \end{macro} |
| 1485 | % |
| 1486 | % \subsection{The other sectioning commands} |
| 1487 | % |
| 1488 | % These are all defined through |\@startsection|. They've been modified |
| 1489 | % to typeset sections and subsections hanging into the left margin, and to |
| 1490 | % moderate the amount of following space, due to the extra |\parskip| already |
| 1491 | % introduced. |
| 1492 | % |
| 1493 | % \begin{macrocode} |
| 1494 | \def\@defsection#1#2#3#4#5#6{% |
| 1495 | \expandafter\newcommand\csname#1\endcsname{% |
| 1496 | \skip@#4\advance\skip@\ifdim\skip@<\z@-\fi\@parshortfall% |
| 1497 | \skip\tw@#5\relax\ifdim\skip\tw@>\z@\advance\skip\tw@\@parshortfall\fi% |
| 1498 | \@startsection% |
| 1499 | {#1}% |
| 1500 | {#2}% |
| 1501 | {#3}% |
| 1502 | \skip@ |
| 1503 | {\skip\tw@}% |
| 1504 | {\reset@font#6\bfseries\headfam}% |
| 1505 | }% |
| 1506 | } |
| 1507 | \@defsection |
| 1508 | {section}% % Section name (for contents) |
| 1509 | {1}% % Level number (for numbering) |
| 1510 | {-.5\sectindent}% % Indentation of title |
| 1511 | {-1.5ex\@plus-1ex\@minus-.2ex}% % Space after title (vert/horiz) |
| 1512 | {.3ex\@plus.2ex}% % Space before title |
| 1513 | {\reset@font\Large\bfseries\headfam}% How to typeset the title |
| 1514 | \@defsection |
| 1515 | {subsection}% |
| 1516 | {2}% |
| 1517 | {-.25\sectindent}% |
| 1518 | {-1.25ex\@plus-1ex\@minus-.2ex}% |
| 1519 | {\p@\@plus.2ex}% |
| 1520 | {\reset@font\large\bfseries\headfam}% |
| 1521 | \if@runinsubsubsec |
| 1522 | \@defsection |
| 1523 | {subsubsection}% |
| 1524 | {3}% |
| 1525 | {\z@}% |
| 1526 | {0pt\@plus1ex\@minus.2ex}% |
| 1527 | {-1em}% |
| 1528 | {\reset@font\normalsize\bfseries\headfam}% |
| 1529 | \@defsection |
| 1530 | {paragraph}% |
| 1531 | {4}% |
| 1532 | {\z@}% |
| 1533 | {0pt\@plus.5ex\@minus.1ex}% |
| 1534 | {-1em}% |
| 1535 | {\reset@font\normalsize\bfseries\headfam}% |
| 1536 | \@defsection |
| 1537 | {subparagraph}% |
| 1538 | {5}% |
| 1539 | {\parindent}% |
| 1540 | {0pt\@plus.5ex\@minus.1ex}% |
| 1541 | {-1em}% |
| 1542 | {\reset@font\normalsize\bfseries\headfam}% |
| 1543 | \else |
| 1544 | \@defsection |
| 1545 | {subsubsection}% |
| 1546 | {3}% |
| 1547 | {\z@}% |
| 1548 | {-1.25ex\@plus-1ex\@minus-.2ex}% |
| 1549 | {\p@\@plus.2ex}% |
| 1550 | {\reset@font\normalsize\bfseries\headfam}% |
| 1551 | \@defsection |
| 1552 | {paragraph}% |
| 1553 | {4}% |
| 1554 | {\z@}% |
| 1555 | {0pt\@plus1ex\@minus.2ex}% |
| 1556 | {-1em}% |
| 1557 | {\reset@font\normalsize\bfseries\headfam}% |
| 1558 | \@defsection |
| 1559 | {subparagraph}% |
| 1560 | {5}% |
| 1561 | {\parindent}% |
| 1562 | {0pt\@plus.5ex\@minus.1ex}% |
| 1563 | {-1em}% |
| 1564 | {\reset@font\normalsize\bfseries\headfam}% |
| 1565 | \fi |
| 1566 | % \end{macrocode} |
| 1567 | % |
| 1568 | % \subsection{Section number formatting} |
| 1569 | % |
| 1570 | % \begin{macro}{\@seccntformat} |
| 1571 | % |
| 1572 | % The macro is given a section counter and must format it in some nice way. |
| 1573 | % |
| 1574 | % \begin{macrocode} |
| 1575 | \def\@seccntformat#1{% |
| 1576 | \llap{\csname the#1\endcsname{\normalsize\quad}\hfil}% |
| 1577 | } |
| 1578 | % |
| 1579 | % \subsection{Top level sectioning} |
| 1580 | % |
| 1581 | % \begin{macro}{\@topsect} |
| 1582 | % |
| 1583 | % Articles are divided into sections; other documents are divided into |
| 1584 | % chapters. Things like the table of contents need to know which. |
| 1585 | % |
| 1586 | % \begin{macrocode} |
| 1587 | \if@article |
| 1588 | \def\@topsect@star{\section*} |
| 1589 | \let\@topsect\section |
| 1590 | \else |
| 1591 | \let\@topsect@star\chapter |
| 1592 | \let\@topsect\chapter |
| 1593 | \fi |
| 1594 | % \end{macrocode} |
| 1595 | % |
| 1596 | % \end{macro} |
| 1597 | % |
| 1598 | % |
| 1599 | % \section{List handling} |
| 1600 | % |
| 1601 | % A surprising number of \LaTeX's environments are defined in terms of |
| 1602 | % lists, many of which hide the fact by putting the entire text in one big |
| 1603 | % item. |
| 1604 | % |
| 1605 | % This part of the document class has to set up lots of list parameters. |
| 1606 | % This is largely the same as the standard classes, altered slightly to cope |
| 1607 | % with the different paragraph spacing. |
| 1608 | % |
| 1609 | % \subsection{General list parameters} |
| 1610 | % |
| 1611 | % Default left margins for lists: |
| 1612 | % |
| 1613 | % \begin{macrocode} |
| 1614 | \if@twocolumn |
| 1615 | \leftmargini2em |
| 1616 | \else |
| 1617 | \leftmargini2.2em |
| 1618 | \fi |
| 1619 | \leftmarginii2em |
| 1620 | \leftmarginiii1.87em |
| 1621 | \leftmarginiv1.7em |
| 1622 | \if@twocolumn |
| 1623 | \leftmarginv.5em |
| 1624 | \leftmarginvi.5em |
| 1625 | \else |
| 1626 | \leftmarginv1em |
| 1627 | \leftmarginvi1em |
| 1628 | \fi |
| 1629 | % \end{macrocode} |
| 1630 | % And now we can set the paragraph indent. |
| 1631 | % \begin{macrocode} |
| 1632 | \if@indentpar |
| 1633 | \parindent\leftmargini |
| 1634 | \else |
| 1635 | \parindent\z@ |
| 1636 | \fi |
| 1637 | % \end{macrocode} |
| 1638 | % |
| 1639 | % Other spacing defaults: |
| 1640 | % |
| 1641 | % \begin{macrocode} |
| 1642 | \leftmargin\leftmargini |
| 1643 | \labelsep.5em |
| 1644 | \labelwidth\leftmargini |
| 1645 | \advance\labelwidth-\labelsep |
| 1646 | \partopsep\z@\@plus1\p@\@minus1\p@ |
| 1647 | % \end{macrocode} |
| 1648 | % |
| 1649 | % Interline penalties: |
| 1650 | % |
| 1651 | % \begin{macrocode} |
| 1652 | \@beginparpenalty -\@lowpenalty |
| 1653 | \@endparpenalty -\@lowpenalty |
| 1654 | \@itempenalty -\@lowpenalty |
| 1655 | % \end{macrocode} |
| 1656 | % |
| 1657 | % Now we define the defaults for the list environments. These have managed |
| 1658 | % to migrate from the size options into the main document class. |
| 1659 | % |
| 1660 | % \begin{macrocode} |
| 1661 | \def\@listI{% |
| 1662 | \leftmargin\leftmargini% |
| 1663 | \parsep\@parskip% |
| 1664 | \topsep\@parshortfall% |
| 1665 | \itemsep\z@% |
| 1666 | } |
| 1667 | \let\@listi\@listI |
| 1668 | \@listi% |
| 1669 | \def\@listii{% |
| 1670 | \topsep\z@\@plus\p@% |
| 1671 | \leftmargin\leftmarginii% |
| 1672 | \labelwidth\leftmarginii% |
| 1673 | \advance\labelwidth-\labelsep% |
| 1674 | } |
| 1675 | \def\@listiii{% |
| 1676 | \leftmargin\leftmarginiii% |
| 1677 | \labelwidth\leftmarginiii% |
| 1678 | \advance\labelwidth-\labelsep% |
| 1679 | % \partopsep\p@\@plus\z@\@minus\p@% |
| 1680 | } |
| 1681 | \def\@listiv{% |
| 1682 | \leftmargin\leftmarginiv% |
| 1683 | \labelwidth\leftmarginiv% |
| 1684 | \advance\labelwidth-\labelsep% |
| 1685 | } |
| 1686 | \def\@listv{% |
| 1687 | \leftmargin\leftmarginv% |
| 1688 | \labelwidth\leftmarginv% |
| 1689 | \advance\labelwidth-\labelsep% |
| 1690 | } |
| 1691 | \def\@listvi{% |
| 1692 | \leftmargin\leftmarginvi% |
| 1693 | \labelwidth\leftmarginvi% |
| 1694 | \advance\labelwidth-\labelsep% |
| 1695 | } |
| 1696 | % \end{macrocode} |
| 1697 | % |
| 1698 | % \subsection{Numbering things} |
| 1699 | % |
| 1700 | % \begin{macro}{\numberwithin} |
| 1701 | % |
| 1702 | % Does the obvious thing. Optional argument gives numbering style. |
| 1703 | % |
| 1704 | % \begin{macrocode} |
| 1705 | \def\numberwithin{\@testopt\nw@i\arabic} |
| 1706 | \def\nw@i[#1]#2#3{% |
| 1707 | \@addtoreset{#2}{#3}% |
| 1708 | \expandafter\xdef\csname the#2\endcsname{% |
| 1709 | \expandafter\noexpand\csname the#3\endcsname.% |
| 1710 | \noexpand#1{#2}}% |
| 1711 | } |
| 1712 | % \end{macrocode} |
| 1713 | % |
| 1714 | % \end{macro} |
| 1715 | % |
| 1716 | % \begin{macro}{\removefromreset} |
| 1717 | % |
| 1718 | % Does the obvious thing. |
| 1719 | % |
| 1720 | % \begin{macrocode} |
| 1721 | \def\removefromreset#1#2{% |
| 1722 | \begingroup% |
| 1723 | \def\@tempa{#1}% |
| 1724 | \toks@{}% |
| 1725 | \def\@elt##1{% |
| 1726 | \def\@tempb{##1}% |
| 1727 | \ifx\@tempa\@tempb% |
| 1728 | \else\toks@\expandafter{\the\toks@\@elt{##1}}% |
| 1729 | \fi% |
| 1730 | } |
| 1731 | \csname cl@#2\endcsname% |
| 1732 | \expandafter\xdef\csname cl@#2\endcsname{\the\toks@}% |
| 1733 | \endgroup% |
| 1734 | } |
| 1735 | % \end{macrocode} |
| 1736 | % |
| 1737 | % \end{macro} |
| 1738 | % |
| 1739 | % \subsection{Enumerated lists} |
| 1740 | % |
| 1741 | % We busily redefine all the counters for enumerated lists, and how to |
| 1742 | % typeset them. |
| 1743 | % |
| 1744 | % How to typeset the numbers: |
| 1745 | % |
| 1746 | % \begin{macrocode} |
| 1747 | \renewcommand\theenumi{\arabic{enumi}} |
| 1748 | \renewcommand\theenumii{\alph{enumii}} |
| 1749 | \renewcommand\theenumiii{\roman{enumiii}} |
| 1750 | \renewcommand\theenumiv{\Alph{enumiv}} |
| 1751 | % \end{macrocode} |
| 1752 | % |
| 1753 | % Typesetting the item labels: |
| 1754 | % |
| 1755 | % \begin{macrocode} |
| 1756 | \newcommand\labelenumi{\theenumi.} |
| 1757 | \newcommand\labelenumii{(\theenumii)} |
| 1758 | \newcommand\labelenumiii{\theenumiii.} |
| 1759 | \newcommand\labelenumiv{\theenumiv.} |
| 1760 | % \end{macrocode} |
| 1761 | % |
| 1762 | % And finally how to typeset references to the items: |
| 1763 | % |
| 1764 | % \begin{macrocode} |
| 1765 | \renewcommand\p@enumii{\theenumi} |
| 1766 | \renewcommand\p@enumiii{\theenumi(\theenumii)} |
| 1767 | \renewcommand\p@enumiv{\p@enumiii\theenumiii} |
| 1768 | % \end{macrocode} |
| 1769 | % |
| 1770 | % \subsection{Itemized lists} |
| 1771 | % |
| 1772 | % We set up the various bullet shapes for the itemized lists. |
| 1773 | % |
| 1774 | % \begin{macrocode} |
| 1775 | \newcommand\labelitemi{$\m@th\bullet$} |
| 1776 | \newcommand\labelitemii{\normalfont\bfseries --} |
| 1777 | \newcommand\labelitemiii{$\m@th\ast$} |
| 1778 | \newcommand\labelitemiv{$\m@th\cdot$} |
| 1779 | % \end{macrocode} |
| 1780 | % |
| 1781 | % \subsection{Description lists} |
| 1782 | % |
| 1783 | % This has been redefined a little to make it more sensible. The old version |
| 1784 | % had a weird |\hspace\labelsep| in the labelling macro. This has now been |
| 1785 | % added into the main list definition. You can now redefine |
| 1786 | % |\descriptionlabel| without fear of messing up the spacing. |
| 1787 | % |
| 1788 | % \begin{environment}{description} |
| 1789 | % |
| 1790 | % Here we set up the main list parameters. The label width is zeroed to |
| 1791 | % ensure that the text is always indented nicely. |
| 1792 | % |
| 1793 | % \begin{macrocode} |
| 1794 | \def\description{% |
| 1795 | \list{}{% |
| 1796 | \labelwidth\z@% |
| 1797 | \itemindent-\leftmargin% |
| 1798 | \advance\itemindent\labelsep% |
| 1799 | \def\makelabel{\descriptionlabel}% |
| 1800 | }% |
| 1801 | } |
| 1802 | \let\enddescription\endlist |
| 1803 | % \end{macrocode} |
| 1804 | % |
| 1805 | % \begin{macro}{\descriptionlabel} |
| 1806 | % |
| 1807 | % This typesets a description label. Redefine it the obvious way for |
| 1808 | % different exciting effects. |
| 1809 | % |
| 1810 | % \begin{macrocode} |
| 1811 | \def\descriptionlabel#1{\normalfont\bfseries #1} |
| 1812 | % \end{macrocode} |
| 1813 | % |
| 1814 | % \end{macro} |
| 1815 | % \end{environment} |
| 1816 | % |
| 1817 | % \subsection{Other list-based environments} |
| 1818 | % |
| 1819 | % Several other standard environments are defined in terms of lists. These |
| 1820 | % are all dealt with here. |
| 1821 | % |
| 1822 | % \begin{environment}{verse} |
| 1823 | % |
| 1824 | % The \env{verse} environment is specially fiddled so that |\\| works as it |
| 1825 | % should. There's nothing else exciting about it. |
| 1826 | % |
| 1827 | % \begin{macrocode} |
| 1828 | \newenvironment{verse}{% |
| 1829 | \let\\\@centercr% |
| 1830 | \list{}{% |
| 1831 | \itemsep\z@% |
| 1832 | \itemindent-1.5em% |
| 1833 | \listparindent\itemindent% |
| 1834 | \rightmargin\leftmargin% |
| 1835 | \advance\leftmargin1.5em% |
| 1836 | }% |
| 1837 | \item[]% |
| 1838 | }{% |
| 1839 | \endlist% |
| 1840 | } |
| 1841 | % \end{macrocode} |
| 1842 | % \end{environment} |
| 1843 | % |
| 1844 | % \begin{environment}{quotation} |
| 1845 | % |
| 1846 | % The \env{quotation} environment is a pretty standard display, except that |
| 1847 | % we kill off inter-paragraph space. The current definition means that |
| 1848 | % \env{quotation}s are typeset in normal indented-paragraph style, which |
| 1849 | % is inconsistent with the rest of the document style. |
| 1850 | % |
| 1851 | % \begin{macrocode} |
| 1852 | \newenvironment{quotation}{% |
| 1853 | \list{}{% |
| 1854 | \listparindent\z@% |
| 1855 | \itemindent\listparindent% |
| 1856 | \rightmargin\leftmargin% |
| 1857 | }% |
| 1858 | \item[]% |
| 1859 | }{% |
| 1860 | \endlist% |
| 1861 | } |
| 1862 | % \end{macrocode} |
| 1863 | % \end{environment} |
| 1864 | % |
| 1865 | % \begin{environment}{quote} |
| 1866 | % |
| 1867 | % This is even simpler. We just pull in the right margin a bit. |
| 1868 | % |
| 1869 | % \begin{macrocode} |
| 1870 | \newenvironment{quote}{% |
| 1871 | \list{}{% |
| 1872 | \rightmargin\leftmargin% |
| 1873 | }% |
| 1874 | \item[]% |
| 1875 | }{% |
| 1876 | \endlist% |
| 1877 | } |
| 1878 | % \end{macrocode} |
| 1879 | % \end{environment} |
| 1880 | % |
| 1881 | % \begin{environment}{display} |
| 1882 | % |
| 1883 | % The \env{display} environment is intended for any other displays which you |
| 1884 | % need to typeset. This is \emph{not} a standard environment. |
| 1885 | % |
| 1886 | % \begin{macrocode} |
| 1887 | \newenvironment{display}{% |
| 1888 | \list{}{% |
| 1889 | \leftmargin1em% |
| 1890 | \rightmargin\leftmargin% |
| 1891 | \labelsep\z@% |
| 1892 | \labelwidth\z@% |
| 1893 | }% |
| 1894 | \item[]\relax% |
| 1895 | }{% |
| 1896 | \endlist% |
| 1897 | } |
| 1898 | % \end{macrocode} |
| 1899 | % \end{environment} |
| 1900 | % |
| 1901 | % And some quick hacking of the theorem environment. |
| 1902 | % |
| 1903 | % \section{Other parameters} |
| 1904 | % |
| 1905 | % We define some miscellaneous parameters for standard environments. |
| 1906 | % |
| 1907 | % \begin{macrocode} |
| 1908 | \arraycolsep5\p@ |
| 1909 | \tabcolsep6\p@ |
| 1910 | \arrayrulewidth.4\p@ |
| 1911 | \doublerulesep2\p@ |
| 1912 | \tabbingsep\labelsep |
| 1913 | \skip\@mpfootins\skip\footins |
| 1914 | \fboxsep3\p@ |
| 1915 | \fboxrule.4\p@ |
| 1916 | % |
| 1917 | \if@article |
| 1918 | \renewcommand\theequation{\arabic{equation}} |
| 1919 | \else |
| 1920 | \@addtoreset{equation}{chapter} |
| 1921 | \renewcommand\theequation{\thechapter.\arabic{equation}} |
| 1922 | \fi |
| 1923 | % \end{macrocode} |
| 1924 | % |
| 1925 | % \section{Floats} |
| 1926 | % |
| 1927 | % Since raw \LaTeX\ doesn't actually define any floating objects, we have |
| 1928 | % to do some of the work here. This isn't actually terribly arduous. For |
| 1929 | % a float called \synt{float}, we have to define the following macros: |
| 1930 | % |
| 1931 | % \begin{description} |
| 1932 | % \let\descriptionlabel\relax |
| 1933 | % |
| 1934 | % \item[\texttt{\bslash fps@}\synt{float}] is the default float positioning |
| 1935 | % argument for the float type. |
| 1936 | % |
| 1937 | % \item[\texttt{\bslash ftype@}\synt{float}] is a flag bit for the float |
| 1938 | % type. This is used in \LaTeX's |\output| routine to identify floats of |
| 1939 | % this type. |
| 1940 | % |
| 1941 | % \item[\texttt{\bslash ext@}\synt{float}] is the file extension for the |
| 1942 | % list of these floats (e.g., \lit{lof} for figures). |
| 1943 | % |
| 1944 | % \item[\texttt{\bslash fnum@}\synt{float}] is a macro which generates the |
| 1945 | % caption number. For figures, this expands to `|Figure~\thefigure|'. |
| 1946 | % |
| 1947 | % \end{description} |
| 1948 | % |
| 1949 | % We must also define |\@makecaption|, which typesets a float caption in |
| 1950 | % an appropriate way, and an environment for each type of float. |
| 1951 | % |
| 1952 | % \subsection{Figures} |
| 1953 | % |
| 1954 | % This is all fairly straightforward stuff. First, we create a counter for |
| 1955 | % figures: |
| 1956 | % |
| 1957 | % \begin{macrocode} |
| 1958 | \newcounter{figure}[chapter] |
| 1959 | \if@article |
| 1960 | \renewcommand\thefigure{\@arabic\c@figure} |
| 1961 | \else |
| 1962 | \renewcommand\thefigure{\thechapter.\@arabic\c@figure} |
| 1963 | \fi |
| 1964 | % \end{macrocode} |
| 1965 | % |
| 1966 | % Now we define all the macros \LaTeX\ requires. |
| 1967 | % |
| 1968 | % \begin{macrocode} |
| 1969 | \if@herefloats\def\fps@figure{htbp}\else\def\fps@figure{tbp}\fi |
| 1970 | \def\ftype@figure{1} |
| 1971 | \def\ext@figure{lof} |
| 1972 | \def\fnum@figure{\figurename~\thefigure} |
| 1973 | % \end{macrocode} |
| 1974 | % |
| 1975 | % \begin{environment}{figure} |
| 1976 | % \begin{environment}{figure*} |
| 1977 | % |
| 1978 | % Finally, we create the \env{figure} and \env{figure$*$} environments. |
| 1979 | % |
| 1980 | % \begin{macrocode} |
| 1981 | \newenvironment{figure}{\@float{figure}}{\end@float} |
| 1982 | \newenvironment{figure*}{\@dblfloat{figure}}{\end@dblfloat} |
| 1983 | % \end{macrocode} |
| 1984 | % \end{environment} |
| 1985 | % \end{environment} |
| 1986 | % |
| 1987 | % \subsection{Tables} |
| 1988 | % |
| 1989 | % This is pretty similar to the figure handling. |
| 1990 | % |
| 1991 | % \begin{macrocode} |
| 1992 | \newcounter{table}[chapter] |
| 1993 | \if@article |
| 1994 | \renewcommand\thetable{\@arabic\c@table} |
| 1995 | \else |
| 1996 | \renewcommand\thetable{\thechapter.\@arabic\c@table} |
| 1997 | \fi |
| 1998 | % |
| 1999 | \if@herefloats\def\fps@table{htbp}\else\def\fps@table{tbp}\fi |
| 2000 | \def\ftype@table{2} |
| 2001 | \def\ext@table{lot} |
| 2002 | \def\fnum@table{\tablename~\thetable} |
| 2003 | % |
| 2004 | \newenvironment{table}{\@float{table}}{\end@float} |
| 2005 | \newenvironment{table*}{\@dblfloat{table}}{\end@dblfloat} |
| 2006 | % \end{macrocode} |
| 2007 | % |
| 2008 | % \subsection{Other float parameters} |
| 2009 | % |
| 2010 | % \begin{macro}{\@makecaption} |
| 2011 | % |
| 2012 | % The |\@makecaption| macro is called to display a float caption. It will |
| 2013 | % typeset its argument either centred in a box, if it is short enough, or |
| 2014 | % in a paragraph if it is longer than a line. |
| 2015 | % |
| 2016 | % \begin{macrocode} |
| 2017 | \newlength\abovecaptionskip |
| 2018 | \newlength\belowcaptionskip |
| 2019 | \abovecaptionskip10\p@ |
| 2020 | \belowcaptionskip0\p@ |
| 2021 | % |
| 2022 | \long\def\captionstyle#1#2{\itshape #1: #2} |
| 2023 | \long\def\@makecaption#1#2{% |
| 2024 | \vskip\abovecaptionskip% |
| 2025 | \sbox\@tempboxa{\captionstyle{#1}{#2}}% |
| 2026 | \ifdim\wd\@tempboxa>\hsize% |
| 2027 | \unhbox\@tempboxa\par% |
| 2028 | \else% |
| 2029 | \hb@xt@\hsize{\hfil\unhbox\@tempboxa\hfil}% |
| 2030 | \fi% |
| 2031 | \vskip\belowcaptionskip% |
| 2032 | } |
| 2033 | % \end{macrocode} |
| 2034 | % \end{macro} |
| 2035 | % |
| 2036 | % \section{Font commands} |
| 2037 | % |
| 2038 | % We allow the `old' font commands to do sensible \textsf{NFSS} things, since |
| 2039 | % we don't have any legacy documents. This means that we have proper |
| 2040 | % abbreviations for font changes. We also add |\nm| to return to a normal |
| 2041 | % font, whatever that may mean. |
| 2042 | % |
| 2043 | % \begin{macrocode} |
| 2044 | \DeclareOldFontCommand{\rm}{\rmfamily}{\mathrm} |
| 2045 | \DeclareOldFontCommand{\sf}{\sffamily}{\mathsf} |
| 2046 | \DeclareOldFontCommand{\tt}{\ttfamily}{\mathtt} |
| 2047 | \DeclareOldFontCommand{\bf}{\bfseries}{\mathbf} |
| 2048 | \DeclareOldFontCommand{\md}{\mdseries}{\@nomath\md} |
| 2049 | \DeclareOldFontCommand{\it}{\itshape}{\mathit} |
| 2050 | \DeclareOldFontCommand{\up}{\upshape}{\@nomath\up} |
| 2051 | \DeclareOldFontCommand{\sl}{\slshape}{\@nomath\sl} |
| 2052 | \DeclareOldFontCommand{\sc}{\scshape}{\@nomath\sc} |
| 2053 | \DeclareOldFontCommand{\nm}{\normalfont}{\mathnormal} |
| 2054 | % \end{macrocode} |
| 2055 | % |
| 2056 | % Now we define some special commands which only work in maths mode. It |
| 2057 | % seems that older versions of \LaTeX\ (in particular, that at Warwick |
| 2058 | % University) don't define these commands initially, so we'd better not |
| 2059 | % use |\renewcommand| after all. We also dispose of lots of messing with |
| 2060 | % |\protect| by using |\DeclareRobustCommand|. |
| 2061 | % |
| 2062 | % \begin{macrocode} |
| 2063 | \DeclareRobustCommand\cal{\@fontswitch{\relax}{\mathcal}} |
| 2064 | \DeclareRobustCommand\pmit{\@fontswitch{\relax}{\mathnormal}} |
| 2065 | % \end{macrocode} |
| 2066 | % |
| 2067 | % \section{Tables of contents} |
| 2068 | % |
| 2069 | % This section deals with tables of contents, and lists of figures. |
| 2070 | % |
| 2071 | % \subsection{Contents} |
| 2072 | % |
| 2073 | % First, we have to define some parameters. |
| 2074 | % |
| 2075 | % \begin{macrocode} |
| 2076 | \newcommand\@pnumwidth{2em} |
| 2077 | \newcommand\@tocrmarg {3em} |
| 2078 | \newcommand\@dotsep{4.5} |
| 2079 | \setcounter{tocdepth}{\if@runinsubsubsec1\else2\fi} |
| 2080 | % \end{macrocode} |
| 2081 | % |
| 2082 | % \begin{macro}{\tableofcontents} |
| 2083 | % |
| 2084 | % This is the main command for setting up tables of contents. We ensure |
| 2085 | % a single-page layout, put in the chapter heading, read in the contents |
| 2086 | % file, and then restore the old layout. |
| 2087 | % |
| 2088 | % \begin{macrocode} |
| 2089 | \def\@tocthing#1#2{% |
| 2090 | \@ifnextchar[{\@tocthing@i{#1}{#2}}{\@tocthing@i{#1}{#2}[\relax][\relax]}% |
| 2091 | } |
| 2092 | \def\@tocthing@i#1#2[#3][#4]{% |
| 2093 | \if@twocolumn\@restonecoltrue\onecolumn\else\@restonecolfalse\fi% |
| 2094 | \@topsect@star{#1}#3{\parskip\z@\@starttoc{#2}}#4% |
| 2095 | \if@restonecol\twocolumn\fi% |
| 2096 | } |
| 2097 | \newcommand\tableofcontents{\@tocthing\contentsname{toc}} |
| 2098 | % \end{macrocode} |
| 2099 | % \end{macro} |
| 2100 | % |
| 2101 | % Each section type \synt{type} is typeset by a command |\l@|\synt{type}: |
| 2102 | % for example, the |\l@chapter| command typesets the entry for a chapter |
| 2103 | % heading. |
| 2104 | % |
| 2105 | % \begin{macro}{\l@part} |
| 2106 | % |
| 2107 | % This command is vaguely interesting. We'll explore in detail. |
| 2108 | % |
| 2109 | % \begin{macrocode} |
| 2110 | \def\l@part#1#2{% |
| 2111 | % \end{macrocode} |
| 2112 | % |
| 2113 | % We don't typeset the entry if |tocdepth| tells us not to. What kind of |
| 2114 | % stupid user is going to disable \emph{all} the contents items. |
| 2115 | % |
| 2116 | % \begin{macrocode} |
| 2117 | \ifnum\c@tocdepth>-2\relax% |
| 2118 | % \end{macrocode} |
| 2119 | % |
| 2120 | % Before we start, we try to break above the title. Later, we'll disable |
| 2121 | % breaking afterwards. We then leave some vertical space. |
| 2122 | % |
| 2123 | % \begin{macrocode} |
| 2124 | \addpenalty{-\@highpenalty}% |
| 2125 | \addvspace{2.25em\@plus\p@}% |
| 2126 | % \end{macrocode} |
| 2127 | % |
| 2128 | % We open a group, to avoid messing other things up. The |\numberline| |
| 2129 | % macro, which numbers the entry on the left, typesets its argument in a box |
| 2130 | % of width |\@tempdima|, which we must set up. We then set up the values |
| 2131 | % of |\rightskip| and |\parfillskip| to avoid printing over the page number. |
| 2132 | % We also make |\interlinepenalty| infinite to suppress breaking pages in |
| 2133 | % the middle of the title. |
| 2134 | % |
| 2135 | % \begin{macrocode} |
| 2136 | \begingroup% |
| 2137 | \@tempdima3em% |
| 2138 | \parindent\z@% |
| 2139 | \rightskip\@pnumwidth% |
| 2140 | \parfillskip-\@pnumwidth% |
| 2141 | \interlinepenalty\@M |
| 2142 | % \end{macrocode} |
| 2143 | % |
| 2144 | % Time to typeset the actual title. This is fairly simple, apart from |
| 2145 | % a complicated mixture of glue and penalties, which handles a line break |
| 2146 | % right at the end of the title. |
| 2147 | % |
| 2148 | % \begin{macrocode} |
| 2149 | {% |
| 2150 | \leavevmode% |
| 2151 | \large\bfseries {#1}% |
| 2152 | \nobreak\hfil\penalty\@highpenalty\hbox{}\nobreak\hfil% |
| 2153 | \hb@xt@\@pnumwidth{\hss #2}% |
| 2154 | }% |
| 2155 | % \end{macrocode} |
| 2156 | % |
| 2157 | % Now we end the paragraph and suppress page breaking here. |
| 2158 | % |
| 2159 | % \begin{macrocode} |
| 2160 | \par% |
| 2161 | \nobreak% |
| 2162 | \global\@nobreaktrue% |
| 2163 | \everypar{\global\@nobreakfalse\everypar{}}% |
| 2164 | \endgroup% |
| 2165 | \fi% |
| 2166 | } |
| 2167 | % \end{macrocode} |
| 2168 | % \end{macro} |
| 2169 | % |
| 2170 | % \begin{macro}{\@artsw} |
| 2171 | % |
| 2172 | % Define a macro named after the first or second argument depending on |
| 2173 | % whether the document is an article. |
| 2174 | % |
| 2175 | % \begin{macrocode} |
| 2176 | \def\@artsw#1#2#3{% |
| 2177 | \edef\@tempa{#1\if@article\noexpand#3\else\noexpand#2\fi}% |
| 2178 | \@tempa% |
| 2179 | } |
| 2180 | % \end{macrocode} |
| 2181 | % |
| 2182 | % \end{macro} |
| 2183 | % |
| 2184 | % \begin{macro}{\l@chapter} |
| 2185 | % |
| 2186 | % This is terribly similar to the previous macro. |
| 2187 | % |
| 2188 | % \begin{macrocode} |
| 2189 | \@artsw\def\l@chapter\l@section#1#2{% |
| 2190 | \ifnum\c@tocdepth >\m@ne% |
| 2191 | \addpenalty{-\@highpenalty}% |
| 2192 | \vskip1.0em\@plus\p@% |
| 2193 | \setlength\@tempdima{2em}% |
| 2194 | \begingroup% |
| 2195 | \interlinepenalty\@M |
| 2196 | \parindent\z@% |
| 2197 | \rightskip\@pnumwidth% |
| 2198 | \parfillskip-\@pnumwidth% |
| 2199 | \leavevmode% |
| 2200 | \bfseries% |
| 2201 | \advance\leftskip\@tempdima% |
| 2202 | \hskip-\leftskip% |
| 2203 | {#1}% |
| 2204 | \nobreak\hfil\penalty\@highpenalty\hbox{}\nobreak\hfil% |
| 2205 | \hb@xt@\@pnumwidth{\hss #2}% |
| 2206 | \par% |
| 2207 | \penalty\@highpenalty% |
| 2208 | \endgroup% |
| 2209 | \fi% |
| 2210 | } |
| 2211 | % \end{macrocode} |
| 2212 | % \end{macro} |
| 2213 | % |
| 2214 | % The other types are all defined in terms of |\@dottedtocline|, which is |
| 2215 | % redefined beloew. |
| 2216 | % |
| 2217 | % \begin{macrocode} |
| 2218 | \@artsw\def\l@section\l@subsection{\@dottedtocline{1}{2em}{2.5em}} |
| 2219 | \@artsw\def\l@subsection\l@subsubsection{\@dottedtocline{2}{4.5em}{3.2em}} |
| 2220 | \@artsw\def\l@subsubsection\l@paragraph{\@dottedtocline{3}{7.7em}{4.1em}} |
| 2221 | \@artsw\def\l@paragraph\l@subparagraph{\@dottedtocline{4}{10.5em}{5em}} |
| 2222 | \@artsw\def\l@subparagraph\@tempa{\@dottedtocline{5}{12.5em}{6em}} |
| 2223 | % \end{macrocode} |
| 2224 | % |
| 2225 | % \begin{macro}{\@dottedtocline} |
| 2226 | % |
| 2227 | % This is actually a part of the \LaTeX\ kernel, although it's not quite |
| 2228 | % right the way it is. We've improved the handling of line breaks after the |
| 2229 | % title. |
| 2230 | % |
| 2231 | % \begin{macrocode} |
| 2232 | \def\@dottedtocline#1#2#3#4#5{% |
| 2233 | % \end{macrocode} |
| 2234 | % |
| 2235 | % We have to make sure that we're meant to typeset this contents entry. |
| 2236 | % |
| 2237 | % \begin{macrocode} |
| 2238 | \ifnum#1>\c@tocdepth\else% |
| 2239 | % \end{macrocode} |
| 2240 | % |
| 2241 | % Now we add in a little stretchy space. |
| 2242 | % |
| 2243 | % \begin{macrocode} |
| 2244 | \vskip\z@\@plus.2\p@% |
| 2245 | % \end{macrocode} |
| 2246 | % |
| 2247 | % Set up the paragraph layout now. We forbid page breaks in the middle of |
| 2248 | % the title. |
| 2249 | % |
| 2250 | % \begin{macrocode} |
| 2251 | {% |
| 2252 | \leftskip#2\relax% |
| 2253 | \rightskip\@tocrmarg% |
| 2254 | \parfillskip-\rightskip% |
| 2255 | \parindent#2\relax% |
| 2256 | \@afterindenttrue% |
| 2257 | \interlinepenalty\@M% |
| 2258 | % \end{macrocode} |
| 2259 | % |
| 2260 | % Now we typeset the actual title. |
| 2261 | % |
| 2262 | % \begin{macrocode} |
| 2263 | \leavevmode% |
| 2264 | \@tempdima#3\relax% |
| 2265 | \advance\leftskip\@tempdima% |
| 2266 | \hbox{}% |
| 2267 | \hskip-\leftskip% |
| 2268 | {#4}% |
| 2269 | % \end{macrocode} |
| 2270 | % |
| 2271 | % This is the clever bit. After the actual title, we add the following |
| 2272 | % items: |
| 2273 | % |
| 2274 | % \begin{itemize} |
| 2275 | % |
| 2276 | % \item A |\nobreak| penalty, to stop a break from eating the glue. |
| 2277 | % |
| 2278 | % \item A glob of |\hfil| glue. If there's a line break after this glue, |
| 2279 | % the title is set flush left as a result of this. Otherwise, it is ignored |
| 2280 | % because the leaders are |\hfill|. |
| 2281 | % |
| 2282 | % \item A penalty. This is a reasonable place to break the line if |
| 2283 | % necessary. |
| 2284 | % |
| 2285 | % \item An empty |\hbox|. This stops the following glue from being discarded |
| 2286 | % at the beginning of a new line. |
| 2287 | % |
| 2288 | % \item Another |\nobreak|, which stops a break at the following glue item. |
| 2289 | % |
| 2290 | % \item The dotted |\leaders|, which have |\hfill| stretchiness. This forces |
| 2291 | % the page number to be flush right. |
| 2292 | % |
| 2293 | % \end{itemize} |
| 2294 | % |
| 2295 | % The net result of all this is we can now cope with a line break at the |
| 2296 | % end of the title, before the page number, which means that the dots are |
| 2297 | % put on the next line. The original \LaTeX\ version forced the last word |
| 2298 | % of the title onto the next line as well, which can cause underful boxes. |
| 2299 | % |
| 2300 | % \begin{macrocode} |
| 2301 | \nobreak\hfil\penalty\@highpenalty\hbox{}\nobreak% |
| 2302 | \leaders\hbox{$\m@th\mkern\@dotsep mu.\mkern\@dotsep mu$}\hfill% |
| 2303 | \hb@xt@\@pnumwidth{\hfil\reset@font\rmfamily#5}\par% |
| 2304 | }% |
| 2305 | \fi% |
| 2306 | } |
| 2307 | % \end{macrocode} |
| 2308 | % \end{macro} |
| 2309 | % |
| 2310 | % \subsection{Lists of figures and tables} |
| 2311 | % |
| 2312 | % These macros are terribly similar to the other ones. |
| 2313 | % |
| 2314 | % \begin{macrocode} |
| 2315 | \newcommand\listoffigures{\@tocthing\listfigurename{lof}} |
| 2316 | \newcommand\l@figure{\@dottedtocline{0}{0pt}{2em}} |
| 2317 | \newcommand\listoftables{\@tocthing\listtablename{lot}} |
| 2318 | \let\l@table\l@figure |
| 2319 | % \end{macrocode} |
| 2320 | % |
| 2321 | % \section{Bibliography} |
| 2322 | % |
| 2323 | % This isn't actually terribly interesting. |
| 2324 | % |
| 2325 | % \begin{environment}{thebibliography} |
| 2326 | % |
| 2327 | % \begin{macrocode} |
| 2328 | \newdimen\bibindent |
| 2329 | \bibindent1.5em |
| 2330 | % |
| 2331 | \newenvironment{thebibliography}[1]{% |
| 2332 | \@topsect\bibname% |
| 2333 | \list{\@biblabel{\arabic{enumiv}}}% |
| 2334 | {\settowidth\labelwidth{\@biblabel{#1}}% |
| 2335 | \leftmargin\labelwidth% |
| 2336 | \advance\leftmargin\labelsep% |
| 2337 | \if@openbib% |
| 2338 | \advance\leftmargin\bibindent% |
| 2339 | \itemindent-\bibindent% |
| 2340 | \listparindent\itemindent% |
| 2341 | \parsep\z@% |
| 2342 | \fi% |
| 2343 | \usecounter{enumiv}% |
| 2344 | \let\p@enumiv\@empty% |
| 2345 | \renewcommand\theenumiv{\arabic{enumiv}}}% |
| 2346 | \if@openbib% |
| 2347 | \renewcommand\newblock{\par}% |
| 2348 | \else% |
| 2349 | \renewcommand\newblock{\hskip.11em\@plus.33em\@minus.07em}% |
| 2350 | \fi% |
| 2351 | \sloppy% |
| 2352 | \clubpenalty4000% |
| 2353 | \widowpenalty4000% |
| 2354 | \sfcode`\.\@m% |
| 2355 | }{% |
| 2356 | \def\@noitemerr{\@latex@warning{Empty `thebibliography' environment}}% |
| 2357 | \endlist% |
| 2358 | } |
| 2359 | % |
| 2360 | \newcommand\newblock{} |
| 2361 | % \end{macrocode} |
| 2362 | % \end{environment} |
| 2363 | % |
| 2364 | % \section{Index} |
| 2365 | % |
| 2366 | % Defines the \env{theindex} environment. |
| 2367 | % |
| 2368 | % \begin{environment}{theindex} |
| 2369 | % |
| 2370 | % The macros are fairly simple. We change to a two column layout, and |
| 2371 | % redefine |\item| appropriately. |
| 2372 | % |
| 2373 | % \begin{macrocode} |
| 2374 | \newenvironment{theindex}{% |
| 2375 | \columnseprule\z@% |
| 2376 | \columnsep35\p@% |
| 2377 | \@topsect\indexname% |
| 2378 | \if@twocolumn\else% |
| 2379 | \begin{multicols}{2}% |
| 2380 | \fi% |
| 2381 | \parskip\z@\@plus.3\p@\relax% |
| 2382 | \raggedright% |
| 2383 | \let\item\@idxitem% |
| 2384 | }{% |
| 2385 | \if@twocolumn\else% |
| 2386 | \end{multicols}% |
| 2387 | \fi% |
| 2388 | } |
| 2389 | % \end{macrocode} |
| 2390 | % \end{environment} |
| 2391 | % |
| 2392 | % Now we define the item and spacing macros. |
| 2393 | % |
| 2394 | % \begin{macrocode} |
| 2395 | \newcommand\@idxitem {\par\hangindent 40\p@} |
| 2396 | \newcommand\subitem {\par\hangindent 40\p@ \hspace*{20\p@}} |
| 2397 | \newcommand\subsubitem{\par\hangindent 40\p@ \hspace*{30\p@}} |
| 2398 | \newcommand\indexspace{\par \vskip 10\p@ \@plus5\p@ \@minus3\p@\relax} |
| 2399 | % \end{macrocode} |
| 2400 | % |
| 2401 | % \begin{macro}{\passim} |
| 2402 | % |
| 2403 | % The |passim| encapsulator is used to typeset the word `\textit{passim}' |
| 2404 | % after a page range. |
| 2405 | % |
| 2406 | % \begin{macrocode} |
| 2407 | \def\passim#1{#1 \textit{passim}} % Passim encapsulator for indices |
| 2408 | % \end{macrocode} |
| 2409 | % \end{macro} |
| 2410 | % |
| 2411 | % Other useful commands for indexing: |
| 2412 | % |
| 2413 | % \begin{description*} |
| 2414 | % \def\descriptionlabel#1{\ttfamily \bslash #1} |
| 2415 | % |
| 2416 | % \item[Term] typesets its argument in italics, and adds it to the index. |
| 2417 | % |
| 2418 | % \item[term] typesets its first argument in italics, and adds its second |
| 2419 | % to the index. |
| 2420 | % |
| 2421 | % \item[Index] typesets its argument normally, and adds it to the index. |
| 2422 | % |
| 2423 | % \end{description*} |
| 2424 | % |
| 2425 | % \begin{macrocode} |
| 2426 | \def\Term#1{\emph{#1}\index{#1}} |
| 2427 | \def\term#1{\emph{#1}\index} |
| 2428 | \def\Index#1{#1\index{#1}} |
| 2429 | % \end{macrocode} |
| 2430 | % |
| 2431 | % \section{Footnotes} |
| 2432 | % |
| 2433 | % \begin{macro}{\footnoterule} |
| 2434 | % |
| 2435 | % This macro typesets the rule above footnotes. This is a bit more complex |
| 2436 | % than the default: we try and typeset the rule to be at most 1\,in wide, |
| 2437 | % although if the column isn't wide enough, we use $4\over10$~of the |
| 2438 | % box width instead. |
| 2439 | % |
| 2440 | % \begin{macrocode} |
| 2441 | \def\footnoterule{% |
| 2442 | \@tempdima.4\columnwidth% |
| 2443 | \ifdim\@tempdima>1in\relax% |
| 2444 | \@tempdima1in\relax% |
| 2445 | \fi% |
| 2446 | \kern-3\p@% |
| 2447 | \hrule\@width\@tempdima% |
| 2448 | \kern2.6\p@% |
| 2449 | } |
| 2450 | % \end{macrocode} |
| 2451 | % \end{macro} |
| 2452 | % |
| 2453 | % We number footnotes within chapters: |
| 2454 | % |
| 2455 | % \begin{macrocode} |
| 2456 | \@addtoreset{footnote}{chapter} |
| 2457 | % \end{macrocode} |
| 2458 | % |
| 2459 | % \begin{macro}{\@makefntext} |
| 2460 | % |
| 2461 | % This is the macro which actually typesets a footnote. This is rather |
| 2462 | % complicated. It's based on example code from \file{classes.dtx} which |
| 2463 | % doesn't actually work properly. |
| 2464 | % |
| 2465 | % \begin{macrocode} |
| 2466 | \long\def\@makefntext#1{% |
| 2467 | % \end{macrocode} |
| 2468 | % |
| 2469 | % First, we redefine |\par| to set up the correct paragraph shape. This |
| 2470 | % is indented from the left margin by a small amount. |
| 2471 | % |
| 2472 | % \begin{macrocode} |
| 2473 | \@setpar{% |
| 2474 | \@@par% |
| 2475 | \@tempdima\hsize% |
| 2476 | \advance\@tempdima-1.6em% |
| 2477 | \parshape\@ne1.6em\@tempdima% |
| 2478 | }% |
| 2479 | % \end{macrocode} |
| 2480 | % |
| 2481 | % Now we set up some parameters so that \env{list} environments work properly |
| 2482 | % within the footnote. We also clear |\parindent| to prevent nasty |
| 2483 | % indentation. The |\par| sets up the paragraph shape for the next |
| 2484 | % paragraph: we're in vertical mode already, so it does nothing else. |
| 2485 | % |
| 2486 | % \begin{macrocode} |
| 2487 | \advance\linewidth-1.6em% |
| 2488 | \advance\@totalleftmargin1.6em% |
| 2489 | \par% |
| 2490 | \parindent\z@% |
| 2491 | % \end{macrocode} |
| 2492 | % |
| 2493 | % We leave vertical mode to stop the hbox created by |\llap| from being |
| 2494 | % stacked vertically. Then we typeset the footnote mark, and put in the |
| 2495 | % main text. Finally we leave some space afterwards, to space out the next |
| 2496 | % footnote. |
| 2497 | % |
| 2498 | % \begin{macrocode} |
| 2499 | \leavevmode% |
| 2500 | \llap{\@makefnmark\enspace}#1\par% |
| 2501 | \vskip\parskip% |
| 2502 | } |
| 2503 | % \end{macrocode} |
| 2504 | % \end{macro} |
| 2505 | % |
| 2506 | % \begin{macro}{\@makecol} |
| 2507 | % |
| 2508 | % The standard \LaTeX\ output routine messes up footnotes a bit, in my |
| 2509 | % opinion: |
| 2510 | % \begin{itemize} |
| 2511 | % |
| 2512 | % \item If a page is cut off short, because the next item won't fit (e.g., |
| 2513 | % a section heading), then footnotes are added right below the end |
| 2514 | % of the text, which can look strange. |
| 2515 | % |
| 2516 | % \item Footnotes are displayed \emph{above} floats at the bottom of a page, |
| 2517 | % which also looks strange. |
| 2518 | % |
| 2519 | % \item The |\@makefntext| routine above needs to add vertical space between |
| 2520 | % footnotes, but this leaves a gap at the very bottom. We remove this |
| 2521 | % gap with an |\unskip|. |
| 2522 | % |
| 2523 | % \end{itemize} |
| 2524 | % |
| 2525 | % \begin{macrocode} |
| 2526 | \def\@makecol{% |
| 2527 | \setbox\@outputbox \box\@cclv |
| 2528 | \xdef\@freelist{\@freelist\@midlist}% |
| 2529 | \global \let \@midlist \@empty |
| 2530 | \@combinefloats |
| 2531 | \ifvoid\footins \else |
| 2532 | \setbox\@outputbox \vbox {% |
| 2533 | \boxmaxdepth \@maxdepth |
| 2534 | \unvbox \@outputbox |
| 2535 | \vskip \skip\footins |
| 2536 | \vfil |
| 2537 | \footnoterule |
| 2538 | \unvbox \footins |
| 2539 | \unskip |
| 2540 | }% |
| 2541 | \fi |
| 2542 | \ifvbox\@kludgeins |
| 2543 | \@makespecialcolbox |
| 2544 | \else |
| 2545 | \setbox\@outputbox \vbox to\@colht {% |
| 2546 | \@texttop |
| 2547 | \dimen@ \dp\@outputbox |
| 2548 | \unvbox \@outputbox |
| 2549 | \vskip -\dimen@ |
| 2550 | \@textbottom |
| 2551 | }% |
| 2552 | \fi |
| 2553 | \global \maxdepth \@maxdepth |
| 2554 | } |
| 2555 | % \end{macrocode} |
| 2556 | % \end{macro} |
| 2557 | % |
| 2558 | % \section{Tidying up} |
| 2559 | % |
| 2560 | % This section gathers together various other useful bits of standard |
| 2561 | % document class setting. |
| 2562 | % |
| 2563 | % \subsection{Item names} |
| 2564 | % |
| 2565 | % These commands typeset bits of text. They can then be redefined by |
| 2566 | % \package{babel} and suchlike. |
| 2567 | % |
| 2568 | % \begin{macrocode} |
| 2569 | \newcommand\contentsname{Contents} |
| 2570 | \newcommand\listfigurename{List of figures} |
| 2571 | \newcommand\listtablename{List of tables} |
| 2572 | \if@article\newcommand\bibname{References} |
| 2573 | \else\newcommand\bibname{Bibliography}\fi |
| 2574 | \newcommand\indexname{Index} |
| 2575 | \newcommand\figurename{Figure} |
| 2576 | \newcommand\tablename{Table} |
| 2577 | \newcommand\partname{Part} |
| 2578 | \newcommand\abstractname{Abstract} |
| 2579 | \newcommand\chaptername{Chapter} |
| 2580 | \newcommand\appendixname{Appendix} |
| 2581 | \newcommand\today{\number\day\space\ifcase\month\or |
| 2582 | January\or February\or March\or April\or May\or June\or |
| 2583 | July\or August\or September\or October\or November\or December\fi |
| 2584 | \space\number\year} |
| 2585 | % \end{macrocode} |
| 2586 | % |
| 2587 | % \subsection{Final fiddling for two columns} |
| 2588 | % |
| 2589 | % \begin{macrocode} |
| 2590 | \columnsep10\p@ |
| 2591 | \columnseprule\z@ |
| 2592 | \pagestyle{headings} |
| 2593 | \pagenumbering{arabic} % Arabic page numbers |
| 2594 | \if@twocolumn |
| 2595 | \twocolumn |
| 2596 | \sloppy |
| 2597 | \flushbottom |
| 2598 | \else |
| 2599 | \onecolumn |
| 2600 | \fi |
| 2601 | % \end{macrocode} |
| 2602 | % |
| 2603 | % \section{The \protect\env{central} environment} |
| 2604 | % |
| 2605 | % Because of the strange layout of the pages, text which is centred using |
| 2606 | % normal \LaTeX\ commands is centred in the text area, not on the page, |
| 2607 | % which is undesirable for large headings, like part headings. |
| 2608 | % |
| 2609 | % \begin{environment}{central} |
| 2610 | % |
| 2611 | % The \env{central} environment typesets its contents centrally on the page. |
| 2612 | % It should only be used from outer vertical mode. |
| 2613 | % |
| 2614 | % The code just creates a box of the appropriate size and moves it into the |
| 2615 | % right place. |
| 2616 | % |
| 2617 | % \begin{macrocode} |
| 2618 | \newenvironment{central}{% |
| 2619 | \par% |
| 2620 | \vbox\bgroup\moveleft\leftindent\vbox\bgroup% |
| 2621 | \textwidth\paperwidth% |
| 2622 | \advance\textwidth-2\pagesurround\relax% |
| 2623 | \hsize\textwidth% |
| 2624 | \hrule\@height\z@\@depth\z@\@width\hsize% |
| 2625 | }{% |
| 2626 | \egroup% |
| 2627 | \egroup% |
| 2628 | } |
| 2629 | % \end{macrocode} |
| 2630 | % \end{environment} |
| 2631 | % |
| 2632 | % \section{Headers and footers} |
| 2633 | % |
| 2634 | % The \strayman\ class uses \package{fancyheadings} for its headers |
| 2635 | % and footers. This has already been included in the preamble. We now |
| 2636 | % need to fix a few problems with \package{fancyheadings} and set up some |
| 2637 | % macros. |
| 2638 | % |
| 2639 | % \begin{macro}{\title} |
| 2640 | % |
| 2641 | % We extend |\title|, and give it an optional argument. It can now specify |
| 2642 | % the document title as used by |\maketitle| and the running title for the |
| 2643 | % header separately. |
| 2644 | % |
| 2645 | % We store the running header in the macro |\@headertitle|, which is |
| 2646 | % initially empty. |
| 2647 | % |
| 2648 | % \begin{macrocode} |
| 2649 | \def\@headertitle{} |
| 2650 | % \end{macrocode} |
| 2651 | % |
| 2652 | % Now we define the |\title| macro, using |\@dblarg| to duplicate the |
| 2653 | % mandatory argument if the optional one is omitted. |
| 2654 | % |
| 2655 | % \begin{macrocode} |
| 2656 | \def\title{\@dblarg\title@i} |
| 2657 | \def\title@i[#1]#2{% |
| 2658 | \gdef\@title{#2}% |
| 2659 | \gdef\@headertitle{#1}% |
| 2660 | } |
| 2661 | % \end{macrocode} |
| 2662 | % \end{macro} |
| 2663 | % |
| 2664 | % \begin{macro}{\innerhead} |
| 2665 | % \begin{macro}{\innerfoot} |
| 2666 | % |
| 2667 | % We allow the user to specify an `inner heading' which is displayed on the |
| 2668 | % inside of the header on of each page. This can be used for security |
| 2669 | % classifications, for example. Any \package{fancyheadings} commands can |
| 2670 | % be used to control the header, which is expanded on each page. |
| 2671 | % |
| 2672 | % \begin{macrocode} |
| 2673 | \def\l@innerhead{} |
| 2674 | \def\r@innerhead{} |
| 2675 | \def\l@innerfoot{} |
| 2676 | \def\r@innerfoot{} |
| 2677 | \def\innerhead{\@dblarg\innerhead@i} |
| 2678 | \def\innerhead@i[#1]#2{% |
| 2679 | \def\l@innerhead{#1}% |
| 2680 | \def\r@innerhead{#2}% |
| 2681 | } |
| 2682 | \def\innerfoot{\@dblarg\innerfoot@i} |
| 2683 | \def\innerfoot@i[#1]#2{% |
| 2684 | \def\l@innerfoot{#1}% |
| 2685 | \def\r@innerfoot{#2}% |
| 2686 | } |
| 2687 | % \end{macrocode} |
| 2688 | % \end{macro} |
| 2689 | % \end{macro} |
| 2690 | % |
| 2691 | % The next step is to set up the headings: |
| 2692 | % |
| 2693 | % \begin{macrocode} |
| 2694 | \let\headrulewidth\z@ |
| 2695 | \headwidth\textwidth |
| 2696 | \advance\headwidth\leftindent |
| 2697 | \fancypagestyle{headings}{% |
| 2698 | \fancyhf{} |
| 2699 | \fancyhead[LE]{\bfseries\@headertitle} |
| 2700 | \if@article\fancyhead[RO]{\rightmark}\else\fancyhead[RO]{\leftmark}\fi |
| 2701 | \fancyhead[RE]{\l@innerhead} \fancyhead[LO]{\r@innerhead} |
| 2702 | \fancyfoot[RE]{\l@innerfoot} \fancyfoot[LO]{\r@innerfoot} |
| 2703 | \fancyfoot[LE,RO]{\thepage} |
| 2704 | } |
| 2705 | \fancypagestyle{plain}{% |
| 2706 | \fancyhf{}% |
| 2707 | \fancyfoot[RE]{\l@innerfoot} \fancyfoot[LO]{\r@innerfoot} |
| 2708 | \fancyfoot[LE,RO]{\thepage}% |
| 2709 | } |
| 2710 | \let\ps@fancy\ps@@fancy |
| 2711 | % \end{macrocode} |
| 2712 | % |
| 2713 | % The \package{fancyheadings} package by default expects pages to be |
| 2714 | % symmetrical. We have to redefine the |\ps@fancy| macro to make it |
| 2715 | % work properly. |
| 2716 | % |
| 2717 | % \begin{macrocode} |
| 2718 | \def\@lodd{\ifodd\c@page\hss\else\relax\fi} |
| 2719 | \def\@rodd{\ifodd\c@page\relax\else\hss\fi} |
| 2720 | % \end{macrocode} |
| 2721 | % |
| 2722 | % Finally, we can choose the page style we want: |
| 2723 | % |
| 2724 | % \begin{macrocode} |
| 2725 | \pagestyle{headings} |
| 2726 | % \end{macrocode} |
| 2727 | % |
| 2728 | % \section{Parbox alteration} |
| 2729 | % |
| 2730 | % The standard \LaTeX\ |\parbox| command, and the \env{minipage} environment, |
| 2731 | % reset |\parskip| to zero, which is inconsistent with the document style. |
| 2732 | % We amend |\@arrayparboxrestore|, the macro which sets up the paragraph |
| 2733 | % style for parboxes. |
| 2734 | % |
| 2735 | % First, we define a macro explaining how the parbox should set the spacing. |
| 2736 | % |
| 2737 | % \begin{macrocode} |
| 2738 | \def\parboxparskip{2ex} |
| 2739 | % \end{macrocode} |
| 2740 | % |
| 2741 | % Next, we redefine the macro. This is taken directly from the \LaTeXe |
| 2742 | % source. |
| 2743 | % |
| 2744 | % \begin{macrocode} |
| 2745 | \def\@arrayparboxrestore{% |
| 2746 | \let\par\@@par |
| 2747 | \let\-\@dischyph |
| 2748 | \let\'\@acci\let\`\@accii\let\=\@acciii |
| 2749 | \parindent\z@ \parskip\z@ |
| 2750 | \everypar{\parskip\parboxparskip\everypar{}}% |
| 2751 | \linewidth\hsize |
| 2752 | \@totalleftmargin\z@ |
| 2753 | \leftskip\z@skip \rightskip\z@skip \@rightskip\z@skip |
| 2754 | \parfillskip\@flushglue \lineskip\normallineskip |
| 2755 | \baselineskip\normalbaselineskip |
| 2756 | \@noskipsectrue% % The comp.text.tex gurus said it should be |
| 2757 | \sloppy} |
| 2758 | % \end{macrocode} |
| 2759 | % |
| 2760 | % |
| 2761 | % \section{Other features} |
| 2762 | % |
| 2763 | % At the end is a miscellany of useful features. |
| 2764 | % |
| 2765 | % \subsection{Other typesetting conventions} |
| 2766 | % |
| 2767 | % Some items need typesetting in particular ways. |
| 2768 | % |
| 2769 | % \begin{macrocode} |
| 2770 | \let\key\textit |
| 2771 | \let\button\textbf |
| 2772 | \def\submenu{\ensuremath\Rightarrow} |
| 2773 | \let\name\relax |
| 2774 | \def\file#1{\mbox{\itshape #1\/}} |
| 2775 | % \end{macrocode} |
| 2776 | % |
| 2777 | % \subsection{And finally} |
| 2778 | % |
| 2779 | % \begin{macrocode} |
| 2780 | \sloppy |
| 2781 | \raggedbottom |
| 2782 | \def\riscos{RISC~OS} |
| 2783 | \hyphenpenalty1000 |
| 2784 | %</strayman> |
| 2785 | % \end{macrocode} |
| 2786 | % |
| 2787 | % \Finale |
| 2788 | % |
| 2789 | \endinput |