%
% This file defines 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

\typeout{Document Style 'MIT-Press-Book'.  Version of 23-Oct-86.}

%  The type size option is handled by reading a different file for each 
%  size, as follows, to define font size-specific commands:
%       10pt : 10MITPRB, 11pt : 11MITPRB, 12pt : 12MITPRB
%  Implemented by \def'ing \@ptsize to second digit of file name.
%  However, only 10pt is available now.
%

\def\@ptsize{0}               % Default is 10MITPRB.STY
\@namedef{ds@11pt}{\def\@ptsize{1}} % 11pt option reads in 11MITPRB.STY
\@namedef{ds@12pt}{\def\@ptsize{2}} % 12pt option reads in 12MITPRB.STY

%  Two-side or one-side printing: this document style only allows
%  twoside.
%

\@twosidetrue                  %  Always two-sided printing.
\@mparswitchtrue               %  Marginpars go on outside of page.

\newif\if@bradford
\newif\if@cogsci
\@bradfordfalse
\@cogscifalse

\def\ds@bradford{\@bradfordtrue}
                               % 'bradford' option makes front matter
                               % come out as for a Bradford Book.

\def\ds@cogsci{\@cogscitrue}   % 'bradford,cogsci' makes front matter
                               % for Computational Models of
                               % Cognition and Perception

\def\ds@twoside{}              %  Allows vacuous twoside option.

%  draft option
%
% \overfullrule = 0pt          % Default is don't mark overfull hboxes.
\newif\ifdraft
\draftfalse
\def\ds@draft{\relax
   \overfullrule 5pt\relax     % Causes overfull hboxes to be marked.
   \drafttrue}

% The \@options command causes the execution of every command \ds@FOO 
% which is defined and for which the user typed the FOO option in his
% \documentstyle command.  For every option BAR he typed for which
% \ds@BAR is not defined, the file BAR.sty will be read after the present
% (main) .STY file is executed.

\@options

\input invertedparagraphs % from texlocal
\makeatletter

\input 1\@ptsize mitprb.sty\relax

\newif\if@restonecol          % Used in a few places later.

% This is used in the \programspacing definition in the 1xMITPRB file 
% [at least].  It causes a change in \baselinestretch to become
% effective immediately.  It has the unfortunate side-effect of
% selecting the \rm typeface.

\def\newbaselinestretch#1{\def\baselinestretch{#1}\@currsize}


%    ****************************************
%    *                LISTS                 *
%    ****************************************
%

% ENUMERATE
%  Enumeration is done with four counters: enumi, enumii, enumiii
%  and enumiv, where enumN controls the numbering of the Nth level
%  enumeration.  The label is generated by the commands \labelenumi 
%  ... \labelenumiv.  The expansion of \p@enumN\theenumN defines the 
%  output of a \ref command.  

\def\labelenumi{\arabic{enumi}.}    
\def\theenumi{\arabic{enumi}}     
 
\def\labelenumii{(\alph{enumii})}
\def\theenumii{\alph{enumii}}
\def\p@enumii{\theenumi}

\def\labelenumiii{\roman{enumiii}.}
\def\theenumiii{\roman{enumiii}}
\def\p@enumiii{\theenumi(\theenumii)}

\def\labelenumiv{\Alph{enumiv}.}
\def\theenumiv{\Alph{enumiv}}     
\def\p@enumiv{\p@enumiii\theenumiii}

% ITEMIZE
% Itemization is controlled by four commands: \labelitemi, \labelitemii,
% \labelitemiii, and \labelitemiv, which define the labels of the various 
% itemization levels.

\def\labelitemi{$\bullet$}
\def\labelitemii{\bf --}
\def\labelitemiii{$\ast$}
\def\labelitemiv{$\cdot$}


% VERSE
%   The verse environment is defined by making clever use of the
%   list environment's parameters.  The user types \\ to end a line.
%   This is implemented by \let'in \\ equal \@centercr.
%
\def\verse{\let\\=\@centercr  
  \list{}{\itemsep\z@ \itemindent -1.5em\listparindent \itemindent 
          \rightmargin\leftmargin\advance\leftmargin 1.5em}\item[]}
\let\endverse\endlist

% QUOTATION
%   Fills lines
%   Indents paragraph
%   
\def\quotation{\list{}{\listparindent 1.5em
    \itemindent\listparindent
    \rightmargin\leftmargin\parsep 0pt plus 1pt}\item[]}
\let\endquotation=\endlist

% QUOTE -- same as quotation except no paragraph indentation,
%
\def\quote{\list{}{\rightmargin\leftmargin}\item[]}
\let\endquote=\endlist

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

\def\descriptionlabel#1{\hspace\labelsep \bf #1}
\def\description{\list{}{\labelwidth\z@ \itemindent-\leftmargin
       \let\makelabel\descriptionlabel}}

\let\enddescription\endlist

\newdimen\descriptionmargin
\descriptionmargin=3em

% INVERTED PARAGRAPHS
%
% Used for the bibliography, in this document style.
%
% The dimension \invertedparindent is set in the
% 1xMITPRB file.
%
% The invertedparagraphs environment is now defined by
% another file on TEXLOCAL:, which is read before the
% 1xMITPRB file.

% TABBING BOXES
%
% The \begin{tabbingbox}...\end{tabbingbox} environment saves
% a tabbing environment in a box.  This is one way to make a
% box out of a bunch of lines and have the width of the
% box be equal to the width of the longest line.  Naturally,
% tabbing commands are also available in the box, but they aren't
% used much.
%
% An optional position argument [t], [b], or [c] as for \parbox
% may be supplied.  The default is [b].
%
% A second optional argument [boxnumber] causes the box to be
% saved in the indicated box number, instead of being returned.
% Sample use of this form: \begin{tabbingbox}[b][0]...
% 
% The definition is on texlocal now.

\input tabbingbox
\makeatletter

% ALPHABETICALLY NUMBERED LISTS
%
% These are made part of the document style in case we want to change
% the format of the label in a standardized way.
%

\newcounter{alphlist}
\renewcommand{\thealphlist}{(\alph{alphlist})}

\newenvironment{alphlist}%
{\list{\thealphlist}{\usecounter{alphlist}\def\makelabel##1{##1\hfil}}}%
{\endlist}

% \tt PROGRAMS AND TRACES
%
% We define a \begin{program}...\end{program} environment that is
% set in \tt with reduced line spacing.  There's also a version
% that produces a box, \begin{programbox}...\end{programbox},
% with the same optional arguments as \begin{tabbingbox}.
%
% Verbatim mode is not set, so TeX features can be used.
% \obeycr is not set either, since an \obeycr command can just
% be typed if desired.
% 

\def\program{\programspacing\tt\tabbing}
\let\endprogram\endtabbing

\def\programbox{\programspacing\tt\tabbingbox}
\let\endprogrambox\endtabbingbox


%    ****************************************
%    *         OTHER ENVIRONMENTS           *
%    ****************************************
%
%
% THEOREM 
% \@begintheorem ... \@endtheorem are the commands executed at the
% beginning and end of a (user-defined) theorem-like environment,
% except \@opargbegintheorem is executed when an optional argument is
% given.  Cf. LATEX.TEX.
%
% \def\@begintheorem#1#2{\it \trivlist \item[\hskip \labelsep{\bf #1\ #2}]}
% \def\@opargbegintheorem#1#2#3{\it \trivlist
%       \item[\hskip \labelsep{\bf #1\ #2\ (#3)}]}
% \def\@endtheorem{\endtrivlist}
%
% In the MIT-Press-Book document style, I set theorems in \rm type
% instead of \it and I add a colon.  I also make it easier to change
% this behavior by introducing the macro \theoremstart, which gets
% three arguments that are usually just concatenated but are supplied
% separately to allow possible font-switching:
%
%               \theoremstart{Theorem}{1.3}{}
%               \theoremstart{Theorem}{1.3}{ (Jones)}.
%
% Finally, I don't understand why Latex uses the \list environment
% to do theorems, and it makes things come out wrong from my point
% of view.  I'll remove the use of \list as well.

\def\theoremstart#1#2#3{\par\rm\noindent{\bf #1\ #2\rm#3\bf:\ }}

\def\@begintheorem#1#2{\theoremstart{#1}{#2}{}}
\def\@opargbegintheorem#1#2#3{\theoremstart{#1}{#2}{ (#3)}}

% TITLEPAGE
%  In the normal environments, the titlepage environment does nothing but 
%  start and end a page, and inhibit page numbers.  It also resets the
%  page number to zero.  In two-column style, it still makes a one-column
%  page.
\def\titlepage{\@restonecolfalse\if@twocolumn\@restonecoltrue\onecolumn
     \else \newpage \fi \thispagestyle{empty}\c@page\z@}

\def\endtitlepage{\if@restonecol\twocolumn \else \newpage \fi}

% ARRAY AND TABULAR
%

\arraycolsep 5pt     % Half the space between columns in an array environment.
\tabcolsep 6pt       % Half the space between columns in a tabular environment.
\arrayrulewidth .4pt % Width of rules in array and tabular environment.
\doublerulesep 2pt   % Space between adjacent rules in array or tabular env.

% TABBING
%
\tabbingsep \labelsep   % Space used by the \' command.  (See LaTeX manual.)

% MINIPAGE
%  \@minipagerestore is called upon entry to a minipage environment to
%  set up things that are to be handled differently inside a minipage
%  environment. In the current styles, it does nothing.
%
% \skip\@mpfootins : plays same role for footnotes in a minipage as
%                    \skip\footins does for ordinary footnotes

\skip\@mpfootins = \skip\footins

% FRAMEBOX
%
\fboxsep = 3pt    % Space left between box and text by \fbox and \framebox.
\fboxrule = .4pt  % Width of rules in box made by \fbox and \framebox.


%    ****************************************
%    *        CHAPTERS AND SECTIONS         *
%    ****************************************
%
% DEFINE COUNTERS:
%
% \newcounter{NEWCTR}[OLDCTR] : Defines NEWCTR to be a counter, which is 
%                               reset to zero when counter OLDCTR is stepped.  
%                               Counter OLDCTR must already be defined.

\newcounter{part}
\newcounter {chapter}
\newcounter {section}[chapter]
\newcounter {subsection}[section]
\newcounter {subsubsection}[subsection]
\newcounter {paragraph}[subsubsection]
\newcounter {subparagraph}[paragraph]

% For any counter CTR, \theCTR is a macro that defines the printed version
% of counter CTR.  It is defined in terms of the following macros:
%
%  \arabic{COUNTER} : The value of COUNTER printed as an arabic numeral.
%  \roman{COUNTER}  : Its value printed as a lower-case roman numberal.
%  \Roman{COUNTER}  : Its value printed as an upper-case roman numberal.
%  \alph{COUNTER}   : Value of COUNTER printed as a lower-case letter:
%                         1 = a, 2 = b, etc.
%  \Alph{COUNTER}   : Value of COUNTER printed as an upper-case letter:
%                           1 = A, 2 = B, etc.
%

\def\thepart          {\Roman{part}}
\def\thechapter       {\arabic{chapter}}
\def\thesection       {\thechapter.\arabic{section}}
\def\thesubsection    {\thesection.\arabic{subsection}}
\def\thesubsubsection {\thesubsection .\arabic{subsubsection}}
\def\theparagraph     {\thesubsubsection.\arabic{paragraph}}
\def\thesubparagraph  {\theparagraph.\arabic{subparagraph}}
                     
% This macro is like \cleardoublepage, but its inserted blank
% page has an empty pagestyle.
\def\cleardoublepageempty{\clearpage\if@twoside \ifodd\c@page\else
    \hbox{}\thispagestyle{empty}\newpage\if@twocolumn
        \hbox{}\thispagestyle{empty}\newpage\fi\fi\fi}

% In this document style, \cleardoublepage should always mean
% \cleardoublepageempty.

\let\latexcleardoublepage\cleardoublepage
\let\cleardoublepage\cleardoublepageempty

\let\clearchapterpage\cleardoublepageempty

% \@chapapp is initially defined to be 'Chapter'.  The \appendix
% command redefines it to be 'Appendix'.
%
\def\@chapapp{Chapter}


%    ****************************************
%    *         TABLE OF CONTENTS, ETC.      *
%    ****************************************
%
% A \subsection command writes a 
%       \contentsline{subsection}{TITLE}{PAGE}
% command on the .toc file, where TITLE contains the contents of the
% entry and PAGE is the page number.  If subsections are being numbered,
% then TITLE will be of the form
%       \numberline{NUM}{HEADING}
% where NUM is the number produced by \thesubsection.  Other sectioning
% commands work similarly.  
%
% A \caption command in a 'figure' environment writes
%    \contentsline{figure}{\numberline{NUM}{CAPTION}}{PAGE}
% on the .lof file, where NUM is the number produced by \thefigure and
% CAPTION is the figure caption.  It works similarly for a 'table' environment.
%
% The command \contentsline{NAME} expands to \l@NAME.  So, to specify
% the table of contents, we must define \l@chapter, \l@section, 
% \l@subsection, ... ; to specify the list of figures, we must define
% \l@figure; and so on.  Most of these can be defined with the
% \@dottedtocline command, which works as follows.
%
% \@dottedtocline{LEVEL}{INDENT}{NUMWIDTH}{TITLE}{PAGE}
%    LEVEL    : An entry is produced only if LEVEL < or = value of 
%               'tocdepth' counter.  Note, \chapter is level 0, \section
%               is level 1, etc.
%    INDENT   : The indentation from the outer left margin of the start of 
%               the contents line.
%    NUMWIDTH : The width of a box in which the section number is to go,
%               if TITLE includes a \numberline command.
%   
% This command uses the following three parameters, which are set
% with a \def (so em's can be used to make them depend upon the font).
%   \@pnumwidth : The width of a box in which the page number is put.
%   \@tocrmarg  : The right margin for multiple line entries.  One
%                 wants \@tocrmarg > or = \@pnumwidth
%   \@dotsep    : Separation between dots, in mu units.  Should be \def'd to
%                 a number like 2 or 1.7
%
% The MIT-Press-Book style does not use the \@dottedtocline macro. Instead,
% it uses a special contents style that is controlled by the parameters
% \toc@leftwidth, \toc@rightwidth, and \toc@colsep that are set by the
% 1xMITPRB file.  The macro \toc@atpage{TITLE}{PAGE} could also be redefined.
% In addition, there's \toc@prechapterskip and \toc@postchapterskip.

\def\toc@atpage#1#2{#1~~#2\hfill}

% The l@TYPE macros receive arguments l@TYPE{NUMBEREDTITLE}{PAGE},
% where NUMBEREDTITLE is actually {\numberline{NUM}TITLE} if there's
% a section number.

\newbox\toc@leftbox
\newbox\toc@rightbox

\def\l@chapter#1#2{\bgroup
   \pagebreak[3]\parindent\z@
   \def\numberline##1{\global\setbox\toc@leftbox\hbox to \toc@leftwidth
        {\large \@chapapp\ ##1\hfill}}
   % #1 better use \numberline!
   \setbox\toc@rightbox\hbox
        {\parbox[t]{\toc@rightwidth}{\raggedright\bf
                        \toc@atpage{#1}{#2}\large\strut}}
   \vspace{\toc@prechapterskip}
   \hbox to \textwidth{\hbox to \toc@leftwidth{\hrulefill}\hskip
                       \toc@colsep\hbox to \toc@rightwidth{\hrulefill}\hfill}
   \nopagebreak\par
   \hbox to\textwidth{\box\toc@leftbox\hskip\toc@colsep\box\toc@rightbox\hfill}
   \lineskip\parskip\nopagebreak\par
   \hrule height\z@\nopagebreak
   \vspace{\toc@postchapterskip}
   \egroup}

% The definition of \@schapter in this document style arranges for a
% contents line entry that calls \l@schapter for a \chapter* section.

\def\l@schapter#1#2{\bgroup
   \parindent\z@
   \hbox to \textwidth{\large\rm\toc@atpage{#1}{#2}\hfill}
   \par\egroup}

\def\l@part#1#2{\bgroup
   \pagebreak[3]
   \parindent\z@
   \def\numberline##1{\global\setbox\toc@leftbox\hbox{\large\bf Part ##1: }}
   \vspace{\toc@prechapterskip}
   \setbox\toc@rightbox\hbox
        {\parbox[t]{\toc@rightwidth % not really the right parameter
                         }{\large\bf #1}}
   \hbox to \textwidth{\box\toc@leftbox\box\toc@rightbox\hfill}
   \par
   \nobreak
   % Remove prechapter skip
   \vspace{-\toc@prechapterskip}
   \egroup}

\def\l@section#1#2{\ifnum 1>\c@tocdepth \else
   \nopagebreak[2]\bgroup\raggedright
   \@tempdima\toc@leftwidth
   \advance\@tempdima\toc@colsep
   \parindent\z@\parskip\z@\leftskip\@tempdima
   \def\numberline##1{}
   \toc@atpage{#1}{#2}
   \par\egroup
   \fi}

% Contents entries for subsections are turned off by
% default.  But if they were turned on, they would come out in the
% same style (without section numbers) but indented slightly and
% in slanted type.

\def\l@subsection#1#2{\ifnum 2>\c@tocdepth \else
   \bgroup\raggedright
   \@tempdima\toc@leftwidth
   \advance\@tempdima\toc@colsep
   \advance\@tempdima 2em
   \parindent\z@\parskip\z@\leftskip\@tempdima
   \def\numberline##1{}
   \toc@atpage{#1}{#2}
   \par\egroup
   \fi}

\def\l@subsubsection#1#2{\ifnum 3>\c@tocdepth \else
   \bgroup\raggedright
   \@tempdima\toc@leftwidth
   \advance\@tempdima\toc@colsep
   \advance\@tempdima 4em
   \parindent\z@\parskip\z@\leftskip\@tempdima
   \def\numberline##1{}
   {\sl\toc@atpage{#1}{#2}}
   \par\egroup
   \fi}

% Since I don't know how anything further should come out,
% I'll just disallow them.

\def\l@paragraph#1#2{}
\def\l@subparagraph#1#2{}

% Lists of tables and figures aren't really supported in the
% MIT-Press-Book style, but these definitions will marginally
% work in the \begin{frontmatter}...\end{frontmatter} style.

% LIST OF FIGURES
%
\def\listoffigures{\@restonecolfalse\if@twocolumn\@restonecoltrue\onecolumn
  \fi\chapter*{List of Figures}\@starttoc{lof}\if@restonecol\twocolumn
  \fi}

\def\l@figure{\@dottedtocline{1}{1.5em}{2.3em}}

\def\@pnumwidth{1.55em}
\def\@tocrmarg {2.55em}
\def\@dotsep{4.5}

% LIST OF TABLES
%
\def\listoftables{\@restonecolfalse\if@twocolumn\@restonecoltrue\onecolumn
  \fi\chapter*{List of Tables}\@starttoc{lot}\if@restonecol\twocolumn
  \fi}

\let\l@table\l@figure



%    ****************************************
%    *             BIBLIOGRAPHY             *
%    ****************************************
%
% The thebibliography environment executes the following commands:
%
%  \def\newblock{\hskip .11em plus .33em minus -.07em} --
%      Defines the `closed' format, where the blocks (major units of 
%      information) of an entry run together.
%
%  \sloppy  -- Used because it's rather hard to do line breaks in 
%      bibliographies,
% 
%  \sfcode`\.=1000\relax --
%      Causes a `.' (period) not toproduce an end-of-sentence space.
%
% In the MIT-Press-Book document style, the Latex bibliographic database
% is not currently supported.  References are entered by hand.
%
% Also, for some reason MIT Press prefers 'References' to
% 'Bibliography' so we use that as the chapter* heading.
%
% This thebibliography environment doesn't take an argument.

\def\thebibliography{\addtocontents{toc}{\vskip\toc@prechapterskip}
  \chapter*{References}\invertedparagraphs
  \def\newblock{\hskip .11em plus .33em minus -.07em}
  \sloppy
  \sfcode`\.=1000\relax
  \label{start-biblio}}

\def\endthebibliography{\endlist\label{end-biblio}}

% \def\@biblabel#1{[#1]\hfill}  % Produces the label for a \bibitem[...]
                                % command. 
% \def\@cite#1{[#1]}            % Produces the output of the \cite command.



%    ****************************************
%    *              THE INDEX               *
%    ****************************************
%
% THE THEINDEX ENVIRONMENT
% Produces double column format, with each paragraph a separate entry.
% The user commands \item, \subitem and \subsubitem are used to
% produce the entries, and \indexspace adds an extra vertical space
% that's the right size to put above the first entry with a new letter
% of the alphabet.
%
% Index entries are produced automatically by Latex, but the sorted
% index itself must be produced by other means.
%
% The commands \mainentry{...}, \subentry{...}, and \newdictletter{...}
% that are defined here correspond to the commands that are produced
% by an index sorting system that runs on MIT-PREP (contact eb@oz).
% 
% If that system is used, the following syntax should be used
% for \index commands, involving certain bracketed keywords:
%
% \index{Main topic}
% \index{Main topic, subtopic}                  %% ", " is separator
% \index{Main,~topic,~with,~commas, subtopic}   %% ",~" is not separator
%
% never \index{{\it Topic, subtopic}}           %% NEVER do this --
%                                               %% topic and subtopic will be
%                                               %% mechanically split
%                                               %% apart during the sorting
%                                               %% process and the braces
%                                               %% won't match any more!!
%       \index{\it Topic, subtopic}             %% This is OK but only the
%                                               %% topic will be italicized.
% 
% \index{[begin] Complexity classes, discussion of}     %% start a range
% \index{[end] Complexity classes, discussion of}       %% end a range
%
% \index{3SAT [as] three-sat}                   %% alphabetize as "three-sat"
% \index{{\it Aspects\/}, contrasted with modern work}  %% already alphabetizes
%                                                       %% correctly
% \index{3SAT [as] three-sat, 3CNF and [as] three-cnf and}
%
% \index{Computational complexity [see] Complexity}     %% refer elsewhere
% \index{Problem, methods for solving [see] Algorithm}  %% refer elsewhere
%
% never \index{...&%<>@#...} -- some characters forbidden
%
% these \nindex{complexity classes} are...
%                               % roughly like:
%                               % \index{Complexity classes}complexity classes
%
% ... work by \nindex[N.]{Chomsky} ...
%                               % \index{Chomsky,~N.}Chomsky
%
% ... solving the \nindex{problem}[solving the] ...
%                               % roughly like
%                               % \index{Problem, solving the}problem
%

\def\theindex{\@restonecoltrue\if@twocolumn\@restonecolfalse\fi
\columnseprule \z@
\columnsep 15pt\relax\twocolumn
\chapter*{Index}\small\parindent\z@\parskip\z@ plus .3pt\relax
\raggedright
\let\item\@idxitem\frenchspacing}

\def\endtheindex{\if@restonecol\onecolumn\else\clearpage\fi}

% The \nindex macro will capitalize the first token of its argument,
% if the first token is a letter.  It will also skip over the known
% typeface-changing commands \rm, \it, \em, \sl, \bf,
% but over no other commands.  Thus \nindex{computational complexity}
% and \nindex{\it computational complexity} will both capitalize
% the first "C".
%
% Note that \nindex{\it Aspects} capitalizes the index entry as well
% as the text, while {\it \nindex{parallel computation}} capitalizes
% only the text.

\def\@idxredefs{\def~{\string~}\def\@tempa{ }%
\edef\cal{\string\cal\@tempa}%
\edef\sc{\string\sc\@tempa}%
}

\newtoks\idx@toks

% \@nindexA{...} -- just one argument
%
\def\@nindexA#1{{\global\cap@toks{}\@caplook#1\@@capend
   \@idxredefs\xdef\@tempa{{\the\cap@toks}}\expandafter
   \index\@tempa}{#1}}

\def\nindex{\@ifnextchar[\@nindexB\@nindexY}

% \@nindexB[N.]{Chomsky}
%
\def\@nindexB[#1]#2{{\global\cap@toks{}\@caplook#2\@@capend
   \@idxredefs\xdef\@tempa{{\the\cap@toks,~#1}}\expandafter
   \index\@tempa}{#2}}

% can't use \@ifnextchar here because it gobbles spaces!!

\def\@nindexY#1{\def\@idxtempa{{#1}}\futurelet\@idxtempb\@nindexZ}
\def\@nindexZ{\if[\@idxtempb\def\@idxtempb{\expandafter
   \@nindexC\@idxtempa}\else
   \def\@idxtempb{\expandafter\@nindexA\@idxtempa}\fi%]
\@idxtempb}

% \@nindexC{topic}[subtopic]
%
\def\@nindexC#1[#2]{{\global\cap@toks{}\@caplook#1\@@capend
   \@idxredefs\xdef\@tempa{{\the\cap@toks, #2}}\expandafter
   \index\@tempa}{#1}}

% Capitalizing mechanism for ...text...\@@capend:
% If the first token of ...text... is identifiable as a letter,
% capitalize it.  Skip over a small set of known font-changing commands when
% looking for the first token.  This only works for easy cases.
% (Note:  There's not any \capitalize any more; it was only defined
% for testing.)
%
% \capitalize{foo}      ==> Foo
% \capitalize{\it foo}  ==> \it Foo
% \capitalize{{\it foo}}==> {\it foo} %% doesn't capitalize
%
% The special-effect typefaces \sc, \tt, \sf aren't in the list.
% All of this is actually very hard to accomplish.
%
% The expansion actually involves "\uppercase{f}" instead of "F".

\newtoks\cap@toks

\def\@tokadd#1#2{#1=\expandafter{\the#1#2}}

\def\@caplook{\futurelet\@tempa\@captest}

\def\@capgobble#1\@@capend{\global\cap@toks\expandafter{\the\cap@toks #1}}

\def\@capskip{\def\@tempa##1{\global\@tokadd\cap@toks{##1}\@caplook}}

\def\@captest{\relax
\ifcat a\@tempa\def\@tempa##1{\global\@tokadd\cap@toks
      {\uppercase{##1}}\@capgobble}%
\else\ifx \@tempa\rm \@capskip
   \else\ifx \@tempa\it \@capskip
   \else\ifx \@tempa\em \@capskip
   \else\ifx \@tempa\sl \@capskip
   \else\ifx \@tempa\bf \@capskip
   \else\let\@tempa\@capgobble\fi\fi\fi\fi\fi\fi\@tempa}

\def\@idxitem{\parindent 0\indexindent\par\hangindent 1\indexindent}

\def\subitem{\parindent 2\indexindent\par\hangindent 3\indexindent}

\def\subsubitem{\parindent 4\indexindent\hangindent 5\indexindent}

\def\indexspace{\par \vspace{10pt plus 5pt minus 3pt}}

% Routines called by output of sorting procedures

\def\mainentry#1{\pagebreak[2]\item {#1}}

\def\subentry#1{\subitem {#1}}

\def\newdictletter#1{\indexspace}


%    ****************************************
%    *             FOOTNOTES                *
%    ****************************************
%
% \footnoterule is a macro to draw the rule separating the footnotes from
% the text.  It should take zero vertical space, so it needs a negative
% skip to compensate for any positive space taken by the rule.  (See
% PLAIN.TEX.)

\def\footnoterule{\kern-3\p@   
  \hrule width .4\columnwidth 
  \kern 2.6\p@}                 % The \hrule has default height of .4pt .

% \newcounter{footnote}
\@addtoreset{footnote}{chapter}  % Numbers footnotes within chapters

%   \@makefntext{NOTE} :
%        Must produce the actual footnote, using \@thefnmark as the mark 
%        of the footnote and NOTE as the text.  It is called when effectively
%        inside a \parbox of width \columnwidth (i.e., with \hsize = 
%        \columnwidth).  
%
%        The following macro indents all lines of the footnote by 10pt, and 
%        indents the first line of a new paragraph by 1em.  To change these 
%        dimensions, just substitute the desired value for '10pt' [in both 
%        places] or '1em'.  The mark is flushright against the footnote. 
%          \long\def\@makefntext#1{\@setpar{\@@par\@tempdima \hsize 
%             \advance\@tempdima-10pt\parshape \@ne 10pt \@tempdima}\par
%             \parindent 1em\noindent \hbox to \z@{\hss$^{\@thefnmark}$}#1}
%
%        A simpler macro is used, in which the footnote text is
%        set like an ordinary text paragraph, with no indentation except
%        on the first line of a paragraph, and the first line of the 
%        footnote.  Thus, all the macro must do is set \parindent
%        to the appropriate value for succeeding paragraphs and put the 
%        proper indentation before mark.

\long\def\@makefntext#1{\parindent 1em\noindent 
            \hbox to 1.8em{\hss$^{\@thefnmark}$}#1}

% \@makefnmark : A macro to generate the footnote marker that goes
%    in the text.  Default used.
%



%    ****************************************
%    *         FIGURES AND TABLES           *
%    ****************************************
% 
% Float placement parameters.  See LaTeX manual for their definition.
%
\setcounter{topnumber}{2}
\def\topfraction{.7}
\setcounter{bottomnumber}{1}
\def\bottomfraction{.3}
\setcounter{totalnumber}{3}
\def\textfraction{.2}
\def\floatpagefraction{.5}
\setcounter{dbltopnumber}{2}
\def\dbltopfraction{.7}
\def\dblfloatpagefraction{.5}

% Redefine the \caption command so that the optional argument is null
% if omitted, instead of defaulting to the caption text.  This is
% because we're assuming captions are long and will cause \caption to
% choke if the optional argument is omitted.

\long\def\nulldefault@dblarg#1{\@ifnextchar[{#1}{\ndfl@xdblarg{#1}}}
\long\def\ndfl@xdblarg#1#2{#1[]{#2}}

\def\caption{\refstepcounter\@captype \nulldefault@dblarg{\@caption\@captype}}

% \@makecaption{NUMBER}{TEXT} : Macro to make a figure or table caption.  
%      NUMBER : Figure or table number--e.g., 'Figure 3.2' 
%      TEXT   : The caption text.
%  Macro should be called inside a \parbox of right width, with \normalsize.
%  In this document style, we use footnote-style captions.

\newif\iflongcaption            % can be temporarily set true
                                % so it won't try the hbox bit

\long\def\@makecaption#1#2{
   \bgroup\captionsize            % 10MITPRB defines \captionsize
   \vskip\precaptionskip
   \iflongcaption
   #1: #2\par
   \else
   \setbox\@tempboxa\hbox{#1: #2}
   \ifdim \wd\@tempboxa >\hsize   % IF longer than one line:
       \unhbox\@tempboxa\par      %   THEN set as ordinary paragraph.
     \else                        %   ELSE  center.
       \hbox to\hsize{\hfil\box\@tempboxa\hfil}  
   \fi
   \fi
   \egroup}

% The caption style can be temporarily redefined to produce effects like
% "Figure 10 (facing page):", as in
%
% \setcaptionstyle[figure]{Figure \thefigure\ (facing page)}
% 
% Here we make the "optional" argument required, so it can't be left out.
%

\def\setcaptionstyle[#1]#2{\expandafter\def\csname fnum@#1\endcsname}

% A command for putting a separator rule at the bottom of a figure.

\newcommand{\figurerule}{\par\vskip 5pt\hrule\vskip 5pt\relax}

% This one goes at the top of a figure that's at the bottom of the page.

\newcommand{\bottomfigurerule}{\par\hrule\relax}

% Define a synonym for compatibility with some older files of ours.

\let\longcaption\caption

% To define a float of type TYPE (e.g., TYPE = figure), the document style 
% must define the following.
%
%  \fps@TYPE   : The default placement specifier for floats of type TYPE.
%
%  \ftype@TYPE : The type number for floats of type TYPE.  Each TYPE has
%                associated a unique positive TYPE NUMBER, which is a power 
%                of two.  E.g., figures might have type number 1, tables type 
%                number 2, programs type number 4, etc.
%
%  \ext@TYPE   : The file extension indicating the file on which the 
%                contents list for float type TYPE is stored.  For example, 
%                \ext@figure = 'lof'.
%
%  \fnum@TYPE  : A macro to generate the figure number for a caption.
%                For example, \fnum@TYPE == Figure \thefigure.
%
%  The actual float-making environment commands--e.g., the commands
%  \figure and \endfigure--are defined in terms of the macros \@float
%  and \end@float, which are described below.
%
%  \@float{TYPE}[PLACEMENT] : Macro to begin a float environment for a 
%     single-column float of type TYPE with PLACEMENT as the placement 
%     specifier.  The default value of PLACEMENT is defined by \fps@TYPE.   
%     The environment is ended by \end@float.  
%     E.g., \figure == \@float{figure}, \endfigure == \end@float.


% FIGURE

\newcounter{figure}[chapter]
\def\thefigure{\thechapter.\@arabic\c@figure}

\def\fps@figure{tbp}
\def\ftype@figure{1}
\def\ext@figure{lof}
\def\fnum@figure{Figure \thefigure}
\def\figure{\@float{figure}}
\let\endfigure\end@float
\@namedef{figure*}{\@dblfloat{figure}}
\@namedef{endfigure*}{\end@dblfloat}

% TABLE
%
\newcounter{table}[chapter]
\def\thetable{\thechapter.\@arabic\c@table}

\def\fps@table{tbp}
\def\ftype@table{2}
\def\ext@table{lot}
\def\fnum@table{Table \thetable}
\def\table{\@float{table}}
\let\endtable\end@float
\@namedef{table*}{\@dblfloat{table}}
\@namedef{endtable*}{\end@dblfloat}


%    ****************************************
%    *         TITLE AND ABSTRACT           *
%    ****************************************
%
%
% The titlepage environment is omitted here, since there are more
% specialized macros for making the half-title and full-title pages
% in this document style.

% \input titlepage.sty


%    ****************************************
%    *            PAGE STYLES               *
%    ****************************************
%
% The page style 'foo' is defined by defining the command \ps@foo.  This
% command should make only local definitions.  There should be no stray
% spaces in the definition, since they could lead to mysterious extra
% spaces in the output.
%
% The \ps@... command defines the macros \@oddhead, \@oddfoot,
% \@evenhead, and \@evenfoot to define the running heads and
% feet---e.g., \@oddhead is the macro to produce the contents of the
% heading box for odd-numbered pages.  It is called inside an \hbox of
% width \textwidth.
%
% To make headings determined by the sectioning commands, the page style
% defines the commands \chaptermark, \sectionmark, ... , where
% \chaptermark{TEXT} is called by \chapter to set a mark, and so on.
% The \...mark commands and the \...head macros are defined with the
% help of the following macros.  (All the \...mark commands should be
% initialized to no-ops.)
%
% MARKING CONVENTIONS:
% LaTeX extends TeX's \mark facility by producing two kinds of marks
% a 'left' and a 'right' mark, using the following commands:
%     \markboth{LEFT}{RIGHT} : Adds both marks.
%     \markright{RIGHT}      : Adds a 'right' mark.
%     \leftmark  : Used in the \@oddhead, \@oddfoot, \@evenhead or \@evenfoot
%                  macro, gets the current 'left'  mark.  Works like TeX's 
%                  \botmark command.
%     \rightmark : Used in the \@oddhead, \@oddfoot, \@evenhead or \@evenfoot
%                  macro, gets the current 'right'  mark.  Works like TeX's 
%                  \firstmark command.
% The marking commands work reasonably well for right marks 'numbered 
% within' left marks--e.g., the left mark is changed by a \chapter command and
% the right mark is changed by a \section command.  However, it does
% produce somewhat anomalous results if two \bothmark's occur on the same page.
% 

\mark{{}{}}   % Initializes TeX's marks

% \def\ps@empty{\def\@oddhead{}
%   \def\@oddfoot{}
%   \def\@evenhead{}\def\@evenfoot{}}
%
% \def\ps@plain{\def\@oddhead{}
%   \def\@oddfoot{\rm\hfil\thepage\hfil}
%   \def\@evenhead{}
%   \let\@evenfoot\@oddfoot}

% In this document style, I have introduced a counter 'headmarkdepth' that
% determines whether sections, subsections, etc. change the page heading.

\newcounter{headmarkdepth}

\def\ps@headings{\def\@oddfoot{}%       % No feet.
\def\@evenfoot{}%                       % No feet.
%
% Heading style across two pages: 
% nn     Methodological Preliminaries | Chapter 2          nn
%
\def\@evenhead{{\small\bf \thepage}\hfill       % Left heading.
      {\let\\ \relax\sl\leftmark}}%
\def\@oddhead{{\sl \rightmark}\hfill
      {\let\\ \relax\small\bf\thepage}}%        % Right heading.
%
\def\chaptermark##1{\ifnum 0>\c@headmarkdepth\else\markboth{##1}{\@chapapp\ \thechapter}\fi}%
\def\sectionmark##1{\ifnum 1>\c@headmarkdepth\else\markright{##1}\fi}%
\def\subsectionmark##1{\ifnum 2>\c@headmarkdepth\else\markright{##1}\fi}%
}

\ps@headings


%    ****************************************
%    *            MISCELLANEOUS             *
%    ****************************************
%
% DATE
%
\def\today{\ifcase\month\or
  January\or February\or March\or April\or May\or June\or
  July\or August\or September\or October\or November\or December\fi
  \space\number\day, \number\year}

% EQUATION and EQNARRAY -- put here because it must follow \chapter definition
%
% \newcounter{equation}    
%
\@addtoreset{equation}{chapter}   % Makes \chapter reset 'equation' counter.

\def\theequation{\thechapter.\arabic{equation}}

% \jot = 3pt      % Extra space added between lines of an eqnarray environment

% The macro \@eqnnum defines how equation numbers are to appear in equations.
%
% \def\@eqnnum{(\theequation)} 
% 


%    *********************************************
%    *           SPECIAL PAGE FORMAT             *
%    *********************************************
%
%    Alignment marks and a copyright notice are added.
%

\def\@vcut{\hrule height 18pt depth 0pt width .5pt\relax}
\def\@hcut{\vrule height .5pt depth 0pt width 17.5pt\relax}

\def\@ltcut{
  \vbox to 24pt{
    \hbox to 0pt{\hskip-30pt\vbox to 0pt{\@vcut\vss}\@hcut\hfil}
    \vfil}}
\def\@lbcut{
  \vbox to 24pt{
    \vfil
    \hbox to 0pt{\hskip-30pt\vbox{\@vcut}\@hcut\hfil}}}
\def\@rtcut{
  \vbox to 24pt{
    \hbox to 0pt{\hfil\@hcut\vbox to 0pt{\@vcut\vss}\hskip-30pt}
    \vfil}}
\def\@rbcut{
  \vbox to 24pt{
    \vfil
    \hbox to 0pt{\hfil\@hcut\vbox{\@vcut}\hskip-30pt}}}

\def\@outputpage{\begingroup\catcode`\ =10 \if@specialpage 
     \global\@specialpagefalse\@nameuse{ps@\@specialstyle}\fi
     \if@twoside 
       \ifodd\count\z@ \let\@thehead\@oddhead \let\@thefoot\@oddfoot
            \let\@themargin\oddsidemargin
          \else \let\@thehead\@evenhead
          \let\@thefoot\@evenfoot \let\@themargin\evensidemargin
     \fi\fi
     \shipout
     \vbox{\normalsize \baselineskip\z@ \lineskip\z@
           \vskip \topmargin \moveright\@themargin
           \vbox{\hbox to 27pc{\@ltcut\hfil\@rtcut}\setbox\@tempboxa
                 \vbox to\headheight{\vfil \hbox to\textwidth{\@thehead}}
                 \dp\@tempboxa\z@
                 \box\@tempboxa
                 \vskip \headsep
                 \box\@outputbox
                 \vskip0pt
                 \hbox to 27pc{\@lbcut\hfil\@rbcut}
                 \hbox to 27pc{\hfil\vrule width 0pt height 10pt\bf
                                \arabic{page}\hfil}
                 \vskip 10pt
                 \hbox to 27pc{\hfil\presscopyright\hfil}}}
     \global\@colht\textheight
     \endgroup
     \stepcounter{page}\let\firstmark\botmark}

\def\presscopyright{\rm Copyright \copyright\ \today\ by the MIT Press}


%    ****************************************
%    *           FRONT MATTER               *
%    ****************************************
%
% The environment \begin{frontmatter}...\end{frontmatter} is used for
% the title page, table of contents, preface, and so forth.  It
% redefines the page numbering.  Sections should be indicated with
% the \chapter* command.

\newif\ifpluralauthors
\pluralauthorsfalse

\long\def\@contentsignore#1\@endcontentsignore{}

\def\frontmatter{\def\thepage{\roman{page}}\relax
  \let\@makeschapterhead\front@makeschapterhead
  \clearpage
  \setcounter{page}{1}\setcounter{footnote}{0}\relax
  \let\@chapter\front@chapter
  \let\clearchapterpage\clearpage
  % no contents lines until table of contents has been output
  \addtocontents{toc}{\protect\@contentsignore}
  % no page numbering until table of contents has been output
  \pagestyle{empty}}

\def\endfrontmatter{\cleardoublepageempty
  \setcounter{page}{1}\setcounter{footnote}{0}}

\if@bradford
\def\halftitlepage#1{\clearpage\bgroup
    \@topchapterdecls\@topchapterbox{#1\vspace{0.5in}}\egroup
    \thispagestyle{empty}\clearpage}
\else
\def\halftitlepage#1{\clearpage\bgroup\flushleft
   \def\baselinestretch{1.10}\Large\bf#1\endflushleft
   \egroup\thispagestyle{empty}\clearpage}
\fi

\if@bradford
\def\fulltitlepage#1#2{\cleardoublepageempty
  \begingroup
  \let\clearpage\relax\halftitlepage{#1}\flushleft
  \large\rm #2\vfill
  \normalsize\bf A Bradford Book\\
  \rm The MIT Press\\Cambridge, Massachusetts\\
  London, England\endflushleft
  \endgroup\thispagestyle{empty}\newpage}
\else
\def\fulltitlepage#1#2{\cleardoublepageempty
  \begingroup\flushleft
  \def\baselinestretch{1.10}\Large\bf#1\\[20pt]\large\rm#2\\
  \vfill\normalsize The MIT Press\\Cambridge, Massachusetts\\
  London, England\endflushleft
  \endgroup\thispagestyle{empty}\newpage}
\fi

\if@bradford
\if@cogsci
\def\bookseriespage#1{\clearpage{\flushleft\rm
\input mitprcogsci \\
{\bf Computational Models of Cognition and Perception}\\[5pt]
Editors\\[5pt]
#1\\[10pt]}\raggedright\parindent\z@}
\else
\def\bookseriespage{\clearpage
    \@topchapterdecls\@topchapterbox{}\normalsize\parskip\z@
    \vspace{10pt}\mbox{\input mitprbb }\ \large\bf Bradford Books\par
    \vspace{10pt}\small\rm
    \invertedparagraphs}
\fi
\else
\def\bookseriespage{\clearpage\flushleft\small\parskip 8pt}
\fi

\if@bradford
\if@cogsci
\def\seriesbook#1 #2\par{{\it #1}, #2\par}
\else
\def\seriesbook#1 #2/#3. \par{#2. #1. #3.\par}
\fi
\else
\def\seriesbook#1 #2\par{{\sl #1\/} #2\par}
\fi

\if@bradford
\if@cogsci
\def\endbookseriespage{\clearpage}
\else
\def\endbookseriespage{\endinvertedparagraphs\clearpage}
\fi
\else
\def\endbookseriespage{\endflushleft\clearpage}
\fi

% TABLEOFCONTENTS
%  In report style, \tableofcontents, \listoffigures, etc. are always
%  set in single-column style.  @restonecol

% This should be done inside \begin{frontmatter}...\end{frontmatter},
% for this document style.  Otherwise the \chapter* command here
% won't work as we expect.

\def\tableofcontents{\@restonecolfalse\if@twocolumn\@restonecoltrue\onecolumn
  \fi
  \chapter*{Contents}\bgroup\raggedbottom
  \raggedright\hyphenpenalty1000\@starttoc{toc}\egroup
  \if@restonecol\twocolumn\fi
  \pagestyle{headings}\let\clearchapterpage\cleardoublepageempty
  \addtocontents{toc}{\protect\@endcontentsignore}}

% Sample usage of \libraryofcongress:
%
% \begin{copyrightpage}
%
% \publishersnote
%
% \libraryofcongress
%    \author Berwick, Robert C.
%    \title The acquisition of syntactic knowledge.
%    \series (The MIT Press series in artificial intelligence.)
%    \keywords 1.~Artificial intelligence.  2.~Linguistics---Data processing.
%     3.~Language acquisition.  4.~Learning---Mathematical models.  I.~Title.
%     II.~Series.
%    \numbers Q335.B48 1985 \and 401.9 \and 85--11460
%    \isbn 0-262-02226-5
% \done
%
% \end{copyrightpage}

\def\publishersnote{\input mitprpn }

\def\copyrightpage{\flushleft\parskip 10pt}
\def\endcopyrightpage{\vfill\clearpage}

% redefine this if the bibliography pages have to be killed from the entry;
% MIT Press actually says to leave them out
\def\libraryofcongressbib{Bibliography: p.\pageref{start-biblio}--\pageref{end-biblio}}
%\def\libraryofcongressbib{Bibliography: p.}

\def\libraryofcongress\author #1\title #2\series #3\keywords #4\numbers #5\isbn #6\done
{{\bf Library of Congress Cataloging-in-Publication Data}\par
\begin{minipage}{3.5in}\raggedright\let\and\qquad
\def\skip{\hskip 2em\relax}%
#1\\
{\skip #2}\par
{\skip #3}\\
{\skip \libraryofcongressbib}\\
{\skip Includes index.}\\
{\skip\let\and\quad #4}\\
#5\\
ISBN #6
\end{minipage}}

\def\aiseriesforeword{\input mitpraisf }


%    ****************************************
%    *           INITIALIZATION             *
%    ****************************************
%
% Default initializations

\pagenumbering{arabic}      % Arabic page numbers
\onecolumn                  % Single-column.
\flushbottom                % No ragged bottom.

% The value of the counter secnumdepth gives the depth of the
% highest-level sectioning command that is to produce section numbers.
%
% \chapter = 0
% \section = 1
% \subsection = 2

\setcounter{secnumdepth}{1}      % Default: Sections only, not subsections.
\setcounter{tocdepth}{1}         % Contents lines for sections but not
                                 % subsections.
\setcounter{headmarkdepth}{0}    % Default: Chapters only.

% As for the Latex small-caps font-loading bug, we'll have none of it.

\load{\normalsize}{\cal}
\load{\small}{\cal}
\load{\large}{\cal}
\load{\normalsize}{\sc}
\load{\large}{\sc}
\load{\small}{\sc}
\load{\normalsize}{\sf}

%
% Load some convenient abbreviations as part of the document style.
% Also, change the format used by the \sectref command.
%

\input etcetera % on texlocal
\makeatletter
\def\sectref{section~\ref}

