% % This file helps define the MIT-Press-Book document style, created and % maintained by EB@OZ. Please do not modify it. % % Modified from REPORT DOCUMENT STYLE -- Released 23 September 1985 % for LaTeX version 2.09 % which was % Copyright (C) 1985 by Leslie Lamport % **************************************** % * FONTS * % **************************************** % \lineskip 1pt % \lineskip is 1pt for all font sizes. \normallineskip 1pt \def\baselinestretch{1} % see also \programspacing below % LaTex (LFONTS.TEX) leaves out some font sizes that we'll be using. % Therefore we redefine \vipt and \viipt to remove the corresponding % \@subfont calls. However, if we do this we must also create % pxl font files of the proper magnifications for our printers. % Since we've created new pxl font files for small \tt sizes only, % we'll remove \@subfont calls for \tt alone. \def\vipt{\textfont\z@\sixrm \scriptfont\z@\sixrm \scriptscriptfont\z@\sixrm \textfont\@ne\sixmi \scriptfont\@ne\sixmi \scriptscriptfont\@ne\sixmi \textfont\tw@\sixsy \scriptfont\tw@\sixsy \scriptscriptfont\tw@\sixsy \textfont\thr@@\tenex \scriptfont\thr@@\tenex \scriptscriptfont\thr@@\tenex \def\prm{\fam\z@\sixrm}% \def\unboldmath{\everymath{}\everydisplay{}\@nomath \unboldmath\@boldfalse}\@boldfalse \def\boldmath{\@subfont\boldmath\unboldmath}% \def\pit{\@subfont\it\rm}% \def\psl{\@subfont\sl\rm}% \def\pbf{\@getfont\pbf\bffam\@vipt{ambx7 scaled857}}% \def\ptt{\@getfont\ptt\ttfam\@vipt{amtt8 at 6pt}}% %% NEW \def\psf{\@subfont\sf\rm}% \def\psc{\@subfont\sc\rm}% \def\ly{\fam\lyfam\sixly}\textfont\lyfam\sixly \scriptfont\lyfam\sixly \scriptscriptfont\lyfam\sixly \@setstrut\rm} \def\viipt{\textfont\z@\sevrm \scriptfont\z@\sixrm \scriptscriptfont\z@\fivrm \textfont\@ne\sevmi \scriptfont\@ne\fivmi \scriptscriptfont\@ne\fivmi \textfont\tw@\sevsy \scriptfont\tw@\fivsy \scriptscriptfont\tw@\fivsy \textfont\thr@@\tenex \scriptfont\thr@@\tenex \scriptscriptfont\thr@@\tenex \def\prm{\fam\z@\sevrm}% \def\unboldmath{\everymath{}\everydisplay{}\@nomath \unboldmath\@boldfalse}\@boldfalse \def\boldmath{\@subfont\boldmath\unboldmath}% \def\pit{\fam\itfam\sevit}\textfont\itfam\sevit \scriptfont\itfam\sevit \scriptscriptfont\itfam\sevit \def\psl{\@subfont\sl\it}% \def\pbf{\@getfont\pbf\bffam\@viipt{ambx7}}% \def\ptt{\@getfont\ptt\ttfam\@vipt{amtt8 at 7pt}}% %% NEW \def\psf{\@subfont\sf\rm}% \def\psc{\@subfont\sc\rm}% \def\ly{\fam\lyfam\sevly}\textfont\lyfam\sevly \scriptfont\lyfam\fivly \scriptscriptfont\lyfam\fivly \@setstrut \rm} % Each size-changing command \SIZE executes the command % \@setsize\SIZE{BASELINESKIP}\FONTSIZE\@FONTSIZE % where: % BASELINESKIP = Normal value of \baselineskip for that size. (Actual % value will be \baselinestretch * BASELINESKIP.) % % \FONTSIZE = Name of font-size command. The currently available % (preloaded) font sizes are: \vpt (5pt), \vipt (6pt), % \viipt (etc.), \viiipt, \ixpt, \xpt, \xipt, \xiipt, % \xivpt, \xviipt, \xxpt, \xxvpt. % \@FONTSIZE = The same as the font-size command except with an % '@' in front---e.g., if \FONTSIZE = \xivpt then % \@FONTSIZE = \@xivpt. % % For reasons of efficiency that needn't concern the designer, % the document style defines \@normalsize instead of \normalsize . This is % done only for \normalsize, not for any other size-changing commands. \def\@normalsize{\@setsize\normalsize{13pt}\xpt\@xpt \abovedisplayskip 10pt plus2pt minus5pt% \belowdisplayskip \abovedisplayskip \abovedisplayshortskip \z@ plus3pt% \belowdisplayshortskip 6pt plus3pt minus3pt} \def\small{\@setsize\small{11pt}\ixpt\@ixpt \abovedisplayskip 8.5pt plus 3pt minus 4pt% \belowdisplayskip \abovedisplayskip \abovedisplayshortskip \z@ plus2pt% \belowdisplayshortskip 4pt plus2pt minus 2pt \def\@listi{\topsep 4pt plus 2pt minus 2pt\parsep 2pt plus 1pt minus 1pt \itemsep \parsep}} % We add several sizes in between \small and \tiny. % They are mainly for use in typesetting large \tt programs % or traces; they are not standard. % In order, the sizes go \small \smaller \verysmall \quitesmall \tiny. % \def\smaller{\@setsize\smaller{10pt}\viiipt\@viiipt \abovedisplayskip 7.5pt plus 3pt minus 4pt% \belowdisplayskip \abovedisplayskip \abovedisplayshortskip \z@ plus2pt% \belowdisplayshortskip 4pt plus2pt minus 2pt \def\@listi{\topsep 3pt plus 2pt minus 2pt\parsep 2pt plus 1pt minus 1pt \itemsep \parsep}} \def\verysmall{\@setsize\verysmall{9pt}\viipt\@viipt \abovedisplayskip 6.5pt plus 3pt minus 4pt% \belowdisplayskip \abovedisplayskip \abovedisplayshortskip \z@ plus2pt% \belowdisplayshortskip 4pt plus2pt minus 2pt \def\@listi{\topsep 3pt plus 2pt minus 2pt\parsep 2pt plus 1pt minus 1pt \itemsep \parsep}} \def\tiny{\@setsize\tiny{8pt}\vipt\@vipt} \def\footnotesize{\@setsize\footnotesize{9.5pt}\viiipt\@viiipt \abovedisplayskip 6pt plus 2pt minus 4pt% \belowdisplayskip \abovedisplayskip \abovedisplayshortskip \z@ plus 1pt% \belowdisplayshortskip 3pt plus 1pt minus 2pt \def\@listi{\topsep 3pt plus 1pt minus 1pt\parsep 2pt plus 1pt minus 1pt \itemsep \parsep}} % This one is new in the MIT-Press-Book style; it's not used in the % REPORT style. \def\captionsize{\@setsize\captionsize{10pt}\ixpt\@ixpt \abovedisplayskip 6pt plus 2pt minus 4pt% \belowdisplayskip \abovedisplayskip \abovedisplayshortskip \z@ plus 1pt% \belowdisplayshortskip 3pt plus 1pt minus 2pt \def\@listi{\topsep 3pt plus 1pt minus 1pt\parsep 2pt plus 1pt minus 1pt \itemsep \parsep}} % This one is new as well. It's used in the 'program' environment. % \def\programspacing{\newbaselinestretch{0.75}} \def\scriptsize{\@setsize\scriptsize{8pt}\viipt\@viipt} \def\large{\@setsize\large{14pt}\xiipt\@xiipt} \def\Large{\@setsize\Large{18pt}\xivpt\@xivpt} \def\LARGE{\@setsize\LARGE{22pt}\xviipt\@xviipt} \def\huge{\@setsize\huge{25pt}\xxpt\@xxpt} \def\Huge{\@setsize\Huge{30pt}\xxvpt\@xxvpt} \normalsize % Choose the normalsize font. % PICTURE ENVIRONMENT BUG: % % Change \the\fontdimen8\tenlnw to a larger value so that % \thicklines will work better with horizontal and vertical % lines. I don't know what's wrong here; it may be our % printers. % \fontdimen8\tenlnw=1.0pt %% empirically determined value % **************************************** % * PAGE LAYOUT * % **************************************** % % All margin dimensions measured from a point one inch from top and side % of page. % SIDE MARGINS: \oddsidemargin 56pt % Left margin on odd-numbered pages. \evensidemargin 56pt % Left margin on even-numbered pages. \marginparwidth 107pt % Width of marginal notes. \marginparsep 11pt % Horizontal space between outer margin and % marginal note % VERTICAL SPACING: % Top of page: \topmargin 27pt % Nominal distance from top of page to top of % box containing running head. \headheight 12pt % Height of box containing running head. \headsep 24pt % Space between running head and text. % \topskip = 10pt % '\baselineskip' for first line of page. % Bottom of page: \footheight 0pt % Height of box containing running foot. \footskip 0pt % Distance from baseline of box containing foot % to baseline of last line of text. % DIMENSION OF TEXT: \textheight 500pt % Height of text (including footnotes and figures, % excluding running head and foot). \textwidth 334pt % Width of text line. % For two-column mode: \columnsep 10pt % Space between columns \columnseprule 0pt % Width of rule between columns. % Parameters used by the special table of contents format that's used % in the MIT-Press-Book style. \newdimen\toc@leftwidth \toc@leftwidth 7.5pc \newdimen\toc@rightwidth \toc@rightwidth 18.7pc \newdimen\toc@colsep \toc@colsep .8pc \newdimen\toc@prechapterskip \toc@prechapterskip 20pt \newdimen\toc@postchapterskip \toc@postchapterskip 8pt % A \raggedbottom command causes 'ragged bottom' pages: pages set to % natural height instead of being stretched to exactly \textheight. % FOOTNOTES: \footnotesep 6.65pt % Height of strut placed at the beginning of every % footnote = height of normal \footnotesize strut, % so no extra space between footnotes. \skip\footins 9pt plus 4pt minus 2pt % Space between last line of text and % top of first footnote. % CAPTIONSKIP -- Made a parameter in this document style. \newdimen\precaptionskip \precaptionskip 0pt % default is none % FLOATS: (a float is something like a figure or table) % % FOR FLOATS ON A TEXT PAGE: % % ONE-COLUMN MODE OR SINGLE-COLUMN FLOATS IN TWO-COLUMN MODE: \floatsep 12pt plus 2pt minus 2pt % Space between adjacent floats moved % to top or bottom of text page. \textfloatsep 20pt plus 2pt minus 4pt % Space between main text and floats % at top or bottom of page. \intextsep 12pt plus 2pt minus 2pt % Space between in-text figures and % text. \@maxsep 20pt % The maximum of \floatsep, % \textfloatsep and \intextsep (minus % the stretch and shrink). % TWO-COLUMN FLOATS IN TWO-COLUMN MODE: \dblfloatsep 12pt plus 2pt minus 2pt % Same as \floatsep for double-column % figures in two-column mode. \dbltextfloatsep 20pt plus 2pt minus 4pt % \textfloatsep for double-column % floats. \@dblmaxsep 20pt % The maximum of \dblfloatsep and % \dbltexfloatsep. % FOR FLOATS ON A SEPARATE FLOAT PAGE OR COLUMN: % ONE-COLUMN MODE OR SINGLE-COLUMN FLOATS IN TWO-COLUMN MODE: \@fptop 0pt plus 1fil % Stretch at top of float page/column. (Must be % 0pt plus ...) \@fpsep 8pt plus 2fil % Space between floats on float page/column. \@fpbot 0pt plus 1fil % Stretch at bottom of float page/column. (Must be % 0pt plus ... ) % DOUBLE-COLUMN FLOATS IN TWO-COLUMN MODE. \@dblfptop 0pt plus 1fil % Stretch at top of float page. (Must be 0pt plus ...) \@dblfpsep 8pt plus 2fil % Space between floats on float page. \@dblfpbot 0pt plus 1fil % Stretch at bottom of float page. (Must be % 0pt plus ... ) % MARGINAL NOTES: % \marginparpush 5pt % Minimum vertical separation between two marginal % notes. % **************************************** % * PARAGRAPHING * % **************************************** % \parskip 4.4pt plus 1pt % Extra vertical space between paragraphs. \parindent 22pt % Width of paragraph indentation. \topsep 8pt plus 2pt minus 4pt % Extra vertical space, in addition to % \parskip, added above and below list and % paragraphing environments. \partopsep 2pt plus 1pt minus 1pt % Extra vertical space, in addition to % \parskip and \topsep, added when user % leaves blank line before environment. \itemsep 4pt plus 2pt minus 1pt % Extra vertical space, in addition to % \parskip, added between list items. \invertedparindent\parindent % This dimension is defined in the % texlocal:invertedparagraphs file, % which is read before this file is. % The following page-breaking penalties are defined \@lowpenalty 51 % Produced by \nopagebreak[1] or \nolinebreak[1] \@medpenalty 151 % Produced by \nopagebreak[2] or \nolinebreak[2] \@highpenalty 301 % Produced by \nopagebreak[3] or \nolinebreak[3] \@beginparpenalty -\@lowpenalty % Before a list or paragraph environment. \@endparpenalty -\@lowpenalty % After a list or paragraph environment. \@itempenalty -\@lowpenalty % Between list items. % \clubpenalty % 'Club line' at bottom of page. % \widowpenalty % 'Widow line' at top of page. % \displaywidowpenalty % Math display widow line. % \predisplaypenalty % Breaking before a math display. % \postdisplaypenalty % Breaking after a math display. % \interlinepenalty % Breaking at a line within a paragraph. % \brokenpenalty % Breaking after a hyphenated line. \widowpenalty 10000 \clubpenalty 10000 % **************************************** % * CHAPTERS AND SECTIONS * % **************************************** % % \def\part{\cleardoublepageempty % Starts new page. \thispagestyle{empty} % Page style of part page is 'empty' \if@twocolumn % IF two-column style \onecolumn % THEN \onecolumn \@tempswatrue % @tempswa := true \else \@tempswafalse % ELSE @tempswa := false \fi % FI \bgroup\parindent 0pt\raggedright\secdef\@part\@spart} \def\@part[#1]#2{\ifnum \c@secnumdepth >-2\relax % IF secnumdepth > -2 \refstepcounter{part} % THEN step part counter \addcontentsline{toc}{part} {\protect\numberline{\thepart} #1}\else% ELSE add unnumbered line \addcontentsline{toc}{part}{#1}\fi % FI \markboth{}{} \ifnum \c@secnumdepth >-2\relax % IF secnumdepth > -2 \@chapterheadlayout{Part \thepart:}{#1}\else \@chapterheadlayout{}{#1}\fi \@endpart} % \@endpart finishes the part page % \def\@endpart{\par\egroup % END centering \vfil\newpage % End page with 1fil glue. \if@twoside % IF twoside printing \hbox{} % THEN Produce totally blank page \thispagestyle{empty} \newpage \fi % FI \if@tempswa % IF @tempswa = true \twocolumn % THEN \twocolumn \fi} % FI \def\@spart#1{\@chapterheadlayout{}{#1}\@endpart} % The chapter headings will be formatted as follows: % % Chapter 27 % --------------------------------------------- % Still Further Considerations % % The \@chapterheadlayout definition helps keep the line the same distance from % the top of the page and the text regardless of what happens. % However, things could be changed so that the text moves downward if % the chapter has a long title. % % A \chapter*{...} chapter DOES appear in the table of contents, % in this document style; however, it appears in a different format % from a normal chapter. \def\@topchapterdecls{\parindent\z@\raggedright\Large\bf} \def\@topchapterbox#1{\hbox{\vbox to 58pt{\vfill \parbox[b]{\textwidth}{\raggedright\hyphenpenalty5000 #1}}}\par \hbox to \textwidth{\hrulefill}} \def\@bottomchapterbox#1{\hbox{}\par \vbox to 65pt{\parbox[b]{\textwidth}{\raggedright\hyphenpenalty1000 #1}\vfill}} \def\@chapterheadlayout#1#2{\@topchapterbox{#1}\@bottomchapterbox{#2}} % \@makechapterhead {TEXT} : Makes the heading for the \chapter command. % \def\@makechapterhead#1{ % Heading for \chapter command \bgroup \@topchapterdecls % IF secnumdepth > -1 THEN % print 'Chapter' and number. \ifnum \c@secnumdepth >\m@ne \@chapterheadlayout{\@chapapp\ \thechapter}{#1}\else \@chapterheadlayout{}{#1}\fi \nobreak \egroup} % \@makeschapterhead {TEXT} : Makes the heading for the \chapter* command. % \def\@makeschapterhead#1{ % Heading for \chapter* command \bgroup \@topchapterdecls \@chapterheadlayout{}{#1}\nobreak \egroup} % \secdef{UNSTARCMDS}{STARCMDS} : % When defining a \chapter or \section command without using % \@startsection, you can use \secdef as follows: % \def\chapter { ... \secdef \CMDA \CMDB } % \def\CMDA [#1]#2{ ... } % Command to define \chapter[...]{...} % \def\CMDB #1{ ... } % Command to define \chapter*{...} \def\chapter{\clearchapterpage % Starts new page, possibly leaving a blank one. \thispagestyle{empty} % Page style of chapter page is empty \global\@topnum\z@ % Prevents figures from going at top of page. \@afterindentfalse % Suppresses indent in first paragraph. Change \secdef\@chapter\@schapter} % to \@afterindenttrue to have indent. \def\@chapter[#1]#2{\ifnum \c@secnumdepth >\m@ne \refstepcounter{chapter} \typeout{Book \@chapapp\space\thechapter.} \addcontentsline{toc}{chapter}{\protect \numberline{\thechapter}#2}\else \addcontentsline{toc}{chapter}{#1}\fi \chaptermark{#1} \addtocontents{lof}{\protect\addvspace{10pt}} % Adds between-chapter space \addtocontents{lot}{\protect\addvspace{10pt}} % to lists of figs & tables. \if@twocolumn % Tests for two-column mode. \@topnewpage[\@makechapterhead{#2}] \else \@makechapterhead{#2} \@afterheading % Routine called after chapter and \fi} % section heading. % We arrange for \chapter* entries to appear in the table of contents, but % indicated with "schapter" rather than "chapter". \def\@schapter#1{\addcontentsline{toc}{schapter}{#1}\if@twocolumn \@topnewpage[\@makeschapterhead{#1}] \else \@makeschapterhead{#1}\@afterheading\fi \markboth{#1}{#1}} % \chapter{...} isn't supposed to be used in the front matter; % \chapter*{...} is supposed to be used instead. \def\front@chapter[#1]#2{\front@schapter{#2}} \def\front@makeschapterhead#1{\bgroup % Heading for \chapter* command in \parindent 0pt\raggedright % front matter \large\uppercase{#1}\par\nobreak \vspace{20pt} \egroup \@afterindenttrue \@afterheading} % \@startsection {NAME}{LEVEL}{INDENT}{BEFORESKIP}{AFTERSKIP}{STYLE} % optional * [ALTHEADING]{HEADING} % Generic command to start a section. % NAME : e.g., 'subsection' % LEVEL : a number, denoting depth of section -- e.g., chapter=1, % section = 2, etc. A section number will be printed if % and only if LEVEL < or = the value of the secnumdepth % counter. % INDENT : Indentation of heading from left margin % BEFORESKIP : Absolute value = skip to leave above the heading. % If negative, then paragraph indent of text following % heading is suppressed. % AFTERSKIP : if positive, then skip to leave below heading, % else - skip to leave to right of run-in heading. % STYLE : commands to set style % If '*' missing, then increments the counter. If it is present, then % there should be no [ALTHEADING] argument. A sectioning command % is normally defined to \@startsection + its first six arguments. % In the MIT-Press-Book style, I've set up only chapters and sections % to suppress paragraph indentation -- not subsections. \def\section{\@startsection{section}{1}{\z@}{-3.5ex plus -1ex minus -.2ex}{2.3ex plus .2ex}{\Large\bf\raggedright}} \def\subsection{\@startsection{subsection}{2}{\z@}{3.25ex plus 1ex minus .2ex}{1.5ex plus .2ex}{\large\bf\raggedright}} \def\subsubsection{\@startsection{subsubsection}{3}{\z@}{3.25ex plus 1ex minus .2ex}{1.5ex plus .2ex}{\large\sl\raggedright}} \def\paragraph{\@startsection {paragraph}{4}{\z@}{3.25ex plus 1ex minus .2ex}{-1em}{\normalsize \sl\raggedright}} \def\subparagraph{\@startsection {subparagraph}{4}{\parindent}{3.25ex plus 1ex minus .2ex}{-1em}{\normalsize\sl\raggedright}} % Default initializations of \...mark commands. (See below for their % use in defining page styles. % \def\chaptermark#1{} % \def\sectionmark#1{} % Preloaded definitions % \def\subsectionmark#1{} % \def\subsubsectionmark#1{} % \def\paragraphmark#1{} % \def\subparagraphmark#1{} % APPENDIX % % The \appendix command must do the following: % -- reset the chapter counter to zero % -- set \@chapapp to Appendix (for messages) % -- redefine the chapter counter to produce appendix numbers % -- reset the section counter to zero % -- redefine the \chapter command if appendix titles and headings are % to look different from chapter titles and headings. % % In this document style, we also set the tocdepth counter to % zero so that sections of appendices will not go in the table % of contents. % % Also, we do a \clearpage in the \appendix command in this document % style. Among other things, that allows us to do an \immediate\write % instead of a \write for the \addtocontents. \def\appendix{\clearpage \setcounter{chapter}{0} \setcounter{section}{0} \def\@chapapp{Appendix} \bgroup \let\latexwrite\write \def\write{\immediate\latexwrite} \addtocontents{toc}{\protect\@tocappendix} \egroup \def\thechapter{\Alph{chapter}}} \def\@tocappendix{\def\@chapapp{Appendix}\setcounter{tocdepth}{0}} % INDEX INDENTATION \newlength\indexindent {\small \global\indexindent=0.6em} % **************************************** % * LISTS * % **************************************** % % The following commands are used to set the default values for the list % environment's parameters. See the LaTeX manual for an explanation of % the meanings of the parameters. Defaults for the list environment are % set as follows. First, \rightmargin, \listparindent and \itemindent % are set to 0pt. Then, for a Kth level list, the command \@listK is % called, where 'K' denotes 'i', 'ii', ... , 'vi'. (I.e., \@listiii is % called for a third-level list.) By convention, \@listK should set % \leftmargin to \leftmarginK. % % For efficiency, level-one list's values are defined at top level, and % \@listi is defined to set only \leftmargin. \leftmargini 25pt \leftmarginii 22pt % > \labelsep + width of '(m)' \leftmarginiii 18.7pt % > \labelsep + width of 'vii.' \leftmarginiv 17pt % > \labelsep + width of 'M.' \leftmarginv 10pt \leftmarginvi 10pt \leftmargin\leftmargini \labelsep 5pt \labelwidth\leftmargini\advance\labelwidth-\labelsep \parsep 4pt plus 2pt minus 1pt \def\@listi{\leftmargin\leftmargini} \def\@listii{\leftmargin\leftmarginii \labelwidth\leftmarginii\advance\labelwidth-\labelsep \topsep 4pt plus 2pt minus 1pt \parsep 2pt plus 1pt minus 1pt \itemsep \parsep} \def\@listiii{\leftmargin\leftmarginiii \labelwidth\leftmarginiii\advance\labelwidth-\labelsep \topsep 2pt plus 1pt minus 1pt \parsep \z@ \partopsep 1pt plus 0pt minus 1pt \itemsep \topsep} \def\@listiv{\leftmargin\leftmarginiv \labelwidth\leftmarginiv\advance\labelwidth-\labelsep} \def\@listv{\leftmargin\leftmarginv \labelwidth\leftmarginv\advance\labelwidth-\labelsep} \def\@listvi{\leftmargin\leftmarginvi \labelwidth\leftmarginvi\advance\labelwidth-\labelsep}