[gforth] / gforth / Attic / texinfo.tex  

gforth: gforth/Attic/texinfo.tex

Diff for /gforth/Attic/texinfo.tex between version 1.3 and 1.4

version 1.3, Wed Sep 6 21:00:32 1995 UTC version 1.4, Sat Apr 5 16:49:20 1997 UTC
Line 1 
Line 1 
 %% TeX macros to handle texinfo files  %% TeX macros to handle texinfo files
   
 %   Copyright (C) 1985, 86, 88, 90, 91, 92, 93, 1994 Free Software Foundation, Inc.  %  Copyright (C) 1985, 86, 88, 90, 91, 92, 93,
   %                94, 95, 1996 Free Software Foundation, Inc.
   
 %This texinfo.tex file is free software; you can redistribute it and/or  %This texinfo.tex file is free software; you can redistribute it and/or
 %modify it under the terms of the GNU General Public License as  %modify it under the terms of the GNU General Public License as
Line 14 
Line 15 
   
 %You should have received a copy of the GNU General Public License  %You should have received a copy of the GNU General Public License
 %along with this texinfo.tex file; see the file COPYING.  If not, write  %along with this texinfo.tex file; see the file COPYING.  If not, write
 %to the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139,  %to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
 %USA.  %Boston, MA 02111-1307, USA.
   
   
 %In other words, you are welcome to use, share and improve this program.  %In other words, you are welcome to use, share and improve this program.
 %You are forbidden to forbid anyone else to use, share and improve  %You are forbidden to forbid anyone else to use, share and improve
 %what you give them.   Help stamp out software-hoarding!  %what you give them.   Help stamp out software-hoarding!
   
   
   % Send bug reports to bug-texinfo@prep.ai.mit.edu.
   % Please include a *precise* test case in each bug report.
   
   
   % Make it possible to create a .fmt file just by loading this file:
   % if the underlying format is not loaded, start by loading it now.
   % Added by gildea November 1993.
   \expandafter\ifx\csname fmtname\endcsname\relax\input plain\fi
   
 % This automatically updates the version number based on RCS.  % This automatically updates the version number based on RCS.
 \def\deftexinfoversion$#1: #2 ${\def\texinfoversion{#2}}  \def\deftexinfoversion$#1: #2 ${\def\texinfoversion{#2}}
 \deftexinfoversion$Revision$  \deftexinfoversion$Revision$
 \message{Loading texinfo package [Version \texinfoversion]:}  \message{Loading texinfo package [Version \texinfoversion]:}
   
 % Print the version number if in a .fmt file.  % If in a .fmt file, print the version number
 \everyjob{\message{[Texinfo version \texinfoversion]}\message{}}  % and turn on active characters that we couldn't do earlier because
   % they might have appeared in the input file name.
   \everyjob{\message{[Texinfo version \texinfoversion]}\message{}
     \catcode`+=\active \catcode`\_=\active}
   
 % Save some parts of plain tex whose names we will redefine.  % Save some parts of plain tex whose names we will redefine.
   
 \let\ptextilde=\~  
 \let\ptexlbrace=\{  
 \let\ptexrbrace=\}  
 \let\ptexdots=\dots  
 \let\ptexdot=\.  
 \let\ptexstar=\*  
 \let\ptexend=\end  
 \let\ptexbullet=\bullet  
 \let\ptexb=\b  \let\ptexb=\b
   \let\ptexbullet=\bullet
 \let\ptexc=\c  \let\ptexc=\c
   \let\ptexcomma=\,
   \let\ptexdot=\.
   \let\ptexdots=\dots
   \let\ptexend=\end
   \let\ptexequiv = \equiv
 \let\ptexi=\i  \let\ptexi=\i
   \let\ptexlbrace=\{
   \let\ptexrbrace=\}
   \let\ptexstar=\*
 \let\ptext=\t  \let\ptext=\t
 \let\ptexl=\l  \let\ptextilde=\~
 \let\ptexL=\L  
   
 % Be sure we're in horizontal mode when doing a tie, since we make space  % Be sure we're in horizontal mode when doing a tie, since we make space
 % equivalent to this in @example-like environments. Otherwise, a space  % equivalent to this in @example-like environments. Otherwise, a space
Line 53 
Line 67 
 % since \penalty is valid in vertical mode, we'd end up putting the  % since \penalty is valid in vertical mode, we'd end up putting the
 % penalty on the vertical list instead of in the new paragraph.  % penalty on the vertical list instead of in the new paragraph.
 {\catcode`@ = 11  {\catcode`@ = 11
  \gdef\tie{\leavevmode\penalty\@M\ }   % Avoid using \@M directly, because that causes trouble
    % if the definition is written into an index file.
    \global\let\tiepenalty = \@M
    \gdef\tie{\leavevmode\penalty\tiepenalty\ }
 }  }
 \let\~ = \tie                  % And make it available as @~.  \let\~ = \tie                  % And make it available as @~.
   
   
 \message{Basics,}  \message{Basics,}
 \chardef\other=12  \chardef\other=12
   
Line 86 
Line 104 
 \hyphenation{eshell}  \hyphenation{eshell}
   
 % Margin to add to right of even pages, to left of odd pages.  % Margin to add to right of even pages, to left of odd pages.
 \newdimen \bindingoffset  \bindingoffset=0pt  \newdimen \bindingoffset
 \newdimen \normaloffset   \normaloffset=\hoffset  \newdimen \normaloffset
 \newdimen\pagewidth \newdimen\pageheight  \newdimen\pagewidth \newdimen\pageheight
 \pagewidth=\hsize \pageheight=\vsize  
   
 % Sometimes it is convenient to have everything in the transcript file  % Sometimes it is convenient to have everything in the transcript file
 % and nothing on the terminal.  We don't just call \tracingall here,  % and nothing on the terminal.  We don't just call \tracingall here,
Line 120 
Line 137 
 %---------------------End change-----------------------  %---------------------End change-----------------------
   
 % \onepageout takes a vbox as an argument.  Note that \pagecontents  % \onepageout takes a vbox as an argument.  Note that \pagecontents
 % does insertions itself, but you have to call it yourself.  % does insertions, but you have to call it yourself.
 \chardef\PAGE=255  \output={\onepageout{\pagecontents\PAGE}}  \chardef\PAGE=255  \output={\onepageout{\pagecontents\PAGE}}
 \def\onepageout#1{\hoffset=\normaloffset  \def\onepageout#1{%
     \hoffset=\normaloffset
 \ifodd\pageno  \advance\hoffset by \bindingoffset  \ifodd\pageno  \advance\hoffset by \bindingoffset
 \else \advance\hoffset by -\bindingoffset\fi  \else \advance\hoffset by -\bindingoffset\fi
 {\escapechar=`\\\relax % makes sure backslash is used in output files.    {%
 \shipout\vbox{{\let\hsize=\pagewidth \makeheadline} \pagebody{#1}%      \escapechar = `\\ % use backslash in output files.
 {\let\hsize=\pagewidth \makefootline}}}%      \indexdummies
 \advancepageno \ifnum\outputpenalty>-20000 \else\dosupereject\fi}      \shipout\vbox{%
         {\let\hsize=\pagewidth \makeheadline}%
         \pagebody{#1}%
         {\let\hsize=\pagewidth \makefootline}%
       }%
     }%
     \advancepageno
     \ifnum\outputpenalty>-20000 \else\dosupereject\fi
   }
   
 %%%% For @cropmarks command %%%%  %%%% For @cropmarks command %%%%
   
Line 349 
Line 375 
 %\def\'{{'}}  %\def\'{{'}}
   
 % Used to generate quoted braces.  % Used to generate quoted braces.
   
 \def\mylbrace {{\tt \char '173}}  \def\mylbrace {{\tt \char '173}}
 \def\myrbrace {{\tt \char '175}}  \def\myrbrace {{\tt \char '175}}
 \let\{=\mylbrace  \let\{=\mylbrace
 \let\}=\myrbrace  \let\}=\myrbrace
   \begingroup
     % Definitions to produce actual \{ & \} command in an index.
     \catcode`\{ = 12 \catcode`\} = 12
     \catcode`\[ = 1 \catcode`\] = 2
     \catcode`\@ = 0 \catcode`\\ = 12
     @gdef@lbracecmd[\{]%
     @gdef@rbracecmd[\}]%
   @endgroup
   
   % Accents: @, @dotaccent @ringaccent @ubaraccent @udotaccent
   % Others are defined by plain TeX: @` @' @" @^ @~ @= @v @H.
   \let\, = \c
   \let\dotaccent = \.
   \def\ringaccent#1{{\accent23 #1}}
   \let\tieaccent = \t
   \let\ubaraccent = \b
   \let\udotaccent = \d
   
   % Other special characters: @questiondown @exclamdown
   % Plain TeX defines: @AA @AE @O @OE @L (and lowercase versions) @ss.
   \def\questiondown{?`}
   \def\exclamdown{!`}
   
   % Dotless i and dotless j, used for accents.
   \def\imacro{i}
   \def\jmacro{j}
   \def\dotless#1{%
     \def\temp{#1}%
     \ifx\temp\imacro \ptexi
     \else\ifx\temp\jmacro \j
     \else \errmessage{@dotless can be used only with i or j}%
     \fi\fi
   }
   
 % @: forces normal size whitespace following.  % @: forces normal size whitespace following.
 \def\:{\spacefactor=1000 }  \def\:{\spacefactor=1000 }
Line 520 
Line 578 
 \def\nofillexdentyyy #1{{\advance \leftskip by -\exdentamount  \def\nofillexdentyyy #1{{\advance \leftskip by -\exdentamount
 \leftline{\hskip\leftskip{\rm#1}}}}  \leftline{\hskip\leftskip{\rm#1}}}}
   
   % @inmargin{TEXT} puts TEXT in the margin next to the current paragraph.
   
   \def\inmargin#1{%
   \strut\vadjust{\nobreak\kern-\strutdepth
     \vtop to \strutdepth{\baselineskip\strutdepth\vss
     \llap{\rightskip=\inmarginspacing \vbox{\noindent #1}}\null}}}
   \newskip\inmarginspacing \inmarginspacing=1cm
   \def\strutdepth{\dp\strutbox}
   
 %\hbox{{\rm#1}}\hfil\break}}  %\hbox{{\rm#1}}\hfil\break}}
   
 % @include file    insert text of that file as input.  % @include file    insert text of that file as input.
   % Allow normal characters that  we make active in the argument (a file name).
 \def\include{\parsearg\includezzz}  \def\include{\begingroup
 %Use \input\thisfile to avoid blank after \input, which may be an active    \catcode`\\=12
 %char (in which case the blank would become the \input argument).    \catcode`~=12
 %The grouping keeps the value of \thisfile correct even when @include    \catcode`^=12
 %is nested.    \catcode`_=12
 \def\includezzz #1{\begingroup    \catcode`|=12
 \def\thisfile{#1}\input\thisfile    \catcode`<=12
     \catcode`>=12
     \catcode`+=12
     \parsearg\includezzz}
   % Restore active chars for included file.
   \def\includezzz#1{\endgroup\begingroup
     % Read the included file in a group so nested @include's work.
     \def\thisfile{#1}%
     \input\thisfile
 \endgroup}  \endgroup}
   
 \def\thisfile{}  \def\thisfile{}
Line 545 
Line 620 
 % @sp n   outputs n lines of vertical space  % @sp n   outputs n lines of vertical space
   
 \def\sp{\parsearg\spxxx}  \def\sp{\parsearg\spxxx}
 \def\spxxx #1{\par \vskip #1\baselineskip}  \def\spxxx #1{\vskip #1\baselineskip}
   
 % @comment ...line which is ignored...  % @comment ...line which is ignored...
 % @c is the same as @comment  % @c is the same as @comment
Line 558 
Line 633 
   
 \let\c=\comment  \let\c=\comment
   
   % @paragraphindent  is defined for the Info formatting commands only.
   \let\paragraphindent=\comment
   
 % Prevent errors for section commands.  % Prevent errors for section commands.
 % Used in @ignore and in failing conditionals.  % Used in @ignore and in failing conditionals.
 \def\ignoresections{%  \def\ignoresections{%
Line 592 
Line 670 
 % incorrectly.  % incorrectly.
 %  %
 \def\ignoremorecommands{%  \def\ignoremorecommands{%
     \let\defcodeindex = \relax
   \let\defcv = \relax    \let\defcv = \relax
   \let\deffn = \relax    \let\deffn = \relax
   \let\deffnx = \relax    \let\deffnx = \relax
Line 615 
Line 694 
   \let\printindex = \relax    \let\printindex = \relax
   \let\pxref = \relax    \let\pxref = \relax
   \let\settitle = \relax    \let\settitle = \relax
     \let\setchapternewpage = \relax
     \let\setchapterstyle = \relax
     \let\everyheading = \relax
     \let\evenheading = \relax
     \let\oddheading = \relax
     \let\everyfooting = \relax
     \let\evenfooting = \relax
     \let\oddfooting = \relax
     \let\headings = \relax
   \let\include = \relax    \let\include = \relax
   \let\lowersections = \relax    \let\lowersections = \relax
   \let\down = \relax    \let\down = \relax
Line 623 
Line 711 
   \let\set = \relax    \let\set = \relax
   \let\clear = \relax    \let\clear = \relax
   \let\item = \relax    \let\item = \relax
   \let\message = \relax  
 }  }
   
 % Ignore @ignore ... @end ignore.  % Ignore @ignore ... @end ignore.
Line 638 
Line 725 
 \def\menu{\doignore{menu}}  \def\menu{\doignore{menu}}
 \def\direntry{\doignore{direntry}}  \def\direntry{\doignore{direntry}}
   
   % Also ignore @macro ... @end macro.  The user must run texi2dvi,
   % which runs makeinfo to do macro expansion.  Ignore @unmacro, too.
   \def\macro{\doignore{macro}}
   \let\unmacro = \comment
   
   
   % @dircategory CATEGORY  -- specify a category of the dir file
   % which this file should belong to.  Ignore this in TeX.
   \let\dircategory = \comment
   
 % Ignore text until a line `@end #1'.  % Ignore text until a line `@end #1'.
 %  %
 \def\doignore#1{\begingroup  \def\doignore#1{\begingroup
Line 669 
Line 766 
     \immediate\write16{If you are running another version of TeX, relax.}      \immediate\write16{If you are running another version of TeX, relax.}
     \immediate\write16{If you are running Unix TeX 3.0, kill this TeX process.}      \immediate\write16{If you are running Unix TeX 3.0, kill this TeX process.}
     \immediate\write16{  Then upgrade your TeX installation if you can.}      \immediate\write16{  Then upgrade your TeX installation if you can.}
       \immediate\write16{  (See ftp://ftp.gnu.ai.mit.edu/pub/gnu/TeX.README.)}
     \immediate\write16{If you are stuck with version 3.0, run the}      \immediate\write16{If you are stuck with version 3.0, run the}
     \immediate\write16{  script ``tex3patch'' from the Texinfo distribution}      \immediate\write16{  script ``tex3patch'' from the Texinfo distribution}
     \immediate\write16{  to use a workaround.}      \immediate\write16{  to use a workaround.}
     \immediate\write16{}      \immediate\write16{}
     \warnedobstrue      \global\warnedobstrue
     \fi      \fi
 }  }
   
Line 749 
Line 847 
 % Since we want to separate VAR from REST-OF-LINE (which might be  % Since we want to separate VAR from REST-OF-LINE (which might be
 % empty), we can't just use \parsearg; we have to insert a space of our  % empty), we can't just use \parsearg; we have to insert a space of our
 % own to delimit the rest of the line, and then take it out again if we  % own to delimit the rest of the line, and then take it out again if we
 % didn't need it.  % didn't need it.  Make sure the catcode of space is correct to avoid
   % losing inside @example, for instance.
 %  %
 \def\set{\parsearg\setxxx}  \def\set{\begingroup\catcode` =10 \parsearg\setxxx}
 \def\setxxx#1{\setyyy#1 \endsetyyy}  \def\setxxx#1{\setyyy#1 \endsetyyy}
 \def\setyyy#1 #2\endsetyyy{%  \def\setyyy#1 #2\endsetyyy{%
   \def\temp{#2}%    \def\temp{#2}%
   \ifx\temp\empty \global\expandafter\let\csname SET#1\endcsname = \empty    \ifx\temp\empty \global\expandafter\let\csname SET#1\endcsname = \empty
   \else \setzzz{#1}#2\endsetzzz % Remove the trailing space \setxxx inserted.    \else \setzzz{#1}#2\endsetzzz % Remove the trailing space \setxxx inserted.
   \fi    \fi
     \endgroup
 }  }
 \def\setzzz#1#2 \endsetzzz{\expandafter\xdef\csname SET#1\endcsname{#2}}  % Can't use \xdef to pre-expand #2 and save some time, since \temp or
   % \next or other control sequences that we've defined might get us into
   % an infinite loop. Consider `@set foo @cite{bar}'.
   \def\setzzz#1#2 \endsetzzz{\expandafter\gdef\csname SET#1\endcsname{#2}}
   
 % @clear VAR clears (i.e., unsets) the variable VAR.  % @clear VAR clears (i.e., unsets) the variable VAR.
 %  %
Line 871 
Line 974 
 \expandafter\expandafter\expandafter\appendixsetref{\lastnode}\fi  \expandafter\expandafter\expandafter\appendixsetref{\lastnode}\fi
 \global\let\lastnode=\relax}  \global\let\lastnode=\relax}
   
   % @refill is a no-op.
 \let\refill=\relax  \let\refill=\relax
   
 % @setfilename is done at the beginning of every texinfo file.  % @setfilename is done at the beginning of every texinfo file.
Line 885 
Line 989 
    \comment % Ignore the actual filename.     \comment % Ignore the actual filename.
 }  }
   
   % @bye.
 \outer\def\bye{\pagealignmacro\tracingstats=1\ptexend}  \outer\def\bye{\pagealignmacro\tracingstats=1\ptexend}
   
 \def\inforef #1{\inforefzzz #1,,,,**}  % \def\macro#1{\begingroup\ignoresections\catcode`\#=6\def\macrotemp{#1}\parsearg\macroxxx}
 \def\inforefzzz #1,#2,#3,#4**{\putwordSee{} \putwordInfo{} \putwordfile{} \file{\ignorespaces #3{}},  % \def\macroxxx#1#2 \end macro{%
   node \samp{\ignorespaces#1{}}}  % \expandafter\gdef\macrotemp#1{#2}%
   % \endgroup}
   
   %\def\linemacro#1{\begingroup\ignoresections\catcode`\#=6\def\macrotemp{#1}\parsearg\linemacroxxx}
   %\def\linemacroxxx#1#2 \end linemacro{%
   %\let\parsearg=\relax
   %\edef\macrotempx{\csname M\butfirst\expandafter\string\macrotemp\endcsname}%
   %\expandafter\xdef\macrotemp{\parsearg\macrotempx}%
   %\expandafter\gdef\macrotempx#1{#2}%
   %\endgroup}
   
   %\def\butfirst#1{}
   
   
 \message{fonts,}  \message{fonts,}
   
Line 901 
Line 1018 
 \def\sf{\fam=\sffam \tensf}  \def\sf{\fam=\sffam \tensf}
 \let\li = \sf % Sometimes we call it \li, not \sf.  \let\li = \sf % Sometimes we call it \li, not \sf.
   
   % We don't need math for this one.
   \def\ttsl{\tenttsl}
   
 %% Try out Computer Modern fonts at \magstephalf  %% Try out Computer Modern fonts at \magstephalf
 \let\mainmagstep=\magstephalf  \let\mainmagstep=\magstephalf
   
 % Set the font macro #1 to the font named #2, adding on the  % Set the font macro #1 to the font named #2, adding on the
 % specified font prefix (normally `cm').  % specified font prefix (normally `cm').
 \def\setfont#1#2{\font#1=\fontprefix#2}  % #3 is the font's design size, #4 is a scale factor
   \def\setfont#1#2#3#4{\font#1=\fontprefix#2#3 scaled #4}
   
 % Use cm as the default font prefix.  % Use cm as the default font prefix.
 % To specify the font prefix, you must define \fontprefix  % To specify the font prefix, you must define \fontprefix
Line 914 
Line 1035 
 \ifx\fontprefix\undefined  \ifx\fontprefix\undefined
 \def\fontprefix{cm}  \def\fontprefix{cm}
 \fi  \fi
   % Support font families that don't use the same naming scheme as CM.
   \def\rmshape{r}
   \def\rmbshape{bx}               %where the normal face is bold
   \def\bfshape{b}
   \def\bxshape{bx}
   \def\ttshape{tt}
   \def\ttbshape{tt}
   \def\ttslshape{sltt}
   \def\itshape{ti}
   \def\itbshape{bxti}
   \def\slshape{sl}
   \def\slbshape{bxsl}
   \def\sfshape{ss}
   \def\sfbshape{ss}
   \def\scshape{csc}
   \def\scbshape{csc}
   
 \ifx\bigger\relax  \ifx\bigger\relax
 \let\mainmagstep=\magstep1  \let\mainmagstep=\magstep1
 \setfont\textrm{r12}  \setfont\textrm\rmshape{12}{1000}
 \setfont\texttt{tt12}  \setfont\texttt\ttshape{12}{1000}
 \else  \else
 \setfont\textrm{r10 scaled \mainmagstep}  \setfont\textrm\rmshape{10}{\mainmagstep}
 \setfont\texttt{tt10 scaled \mainmagstep}  \setfont\texttt\ttshape{10}{\mainmagstep}
 \fi  \fi
 % Instead of cmb10, you many want to use cmbx10.  % Instead of cmb10, you many want to use cmbx10.
 % cmbx10 is a prettier font on its own, but cmb10  % cmbx10 is a prettier font on its own, but cmb10
 % looks better when embedded in a line with cmr10.  % looks better when embedded in a line with cmr10.
 \setfont\textbf{b10 scaled \mainmagstep}  \setfont\textbf\bfshape{10}{\mainmagstep}
 \setfont\textit{ti10 scaled \mainmagstep}  \setfont\textit\itshape{10}{\mainmagstep}
 \setfont\textsl{sl10 scaled \mainmagstep}  \setfont\textsl\slshape{10}{\mainmagstep}
 \setfont\textsf{ss10 scaled \mainmagstep}  \setfont\textsf\sfshape{10}{\mainmagstep}
 \setfont\textsc{csc10 scaled \mainmagstep}  \setfont\textsc\scshape{10}{\mainmagstep}
   \setfont\textttsl\ttslshape{10}{\mainmagstep}
 \font\texti=cmmi10 scaled \mainmagstep  \font\texti=cmmi10 scaled \mainmagstep
 \font\textsy=cmsy10 scaled \mainmagstep  \font\textsy=cmsy10 scaled \mainmagstep
   
 % A few fonts for @defun, etc.  % A few fonts for @defun, etc.
 \setfont\defbf{bx10 scaled \magstep1} %was 1314  \setfont\defbf\bxshape{10}{\magstep1} %was 1314
 \setfont\deftt{tt10 scaled \magstep1}  \setfont\deftt\ttshape{10}{\magstep1}
 \def\df{\let\tentt=\deftt \let\tenbf = \defbf \bf}  \def\df{\let\tentt=\deftt \let\tenbf = \defbf \bf}
   
 % Fonts for indices and small examples.  % Fonts for indices and small examples (9pt).
 % We actually use the slanted font rather than the italic,  % We actually use the slanted font rather than the italic,
 % because texinfo normally uses the slanted fonts for that.  % because texinfo normally uses the slanted fonts for that.
 % Do not make many font distinctions in general in the index, since they  % Do not make many font distinctions in general in the index, since they
 % aren't very useful.  % aren't very useful.
 \setfont\ninett{tt9}  \setfont\ninett\ttshape{9}{1000}
 \setfont\indrm{r9}  \setfont\indrm\rmshape{9}{1000}
 \setfont\indit{sl9}  \setfont\indit\slshape{9}{1000}
 \let\indsl=\indit  \let\indsl=\indit
 \let\indtt=\ninett  \let\indtt=\ninett
   \let\indttsl=\ninett
 \let\indsf=\indrm  \let\indsf=\indrm
 \let\indbf=\indrm  \let\indbf=\indrm
 \let\indsc=\indrm  \setfont\indsc\scshape{10}{900}
 \font\indi=cmmi9  \font\indi=cmmi9
 \font\indsy=cmsy9  \font\indsy=cmsy9
   
 % Fonts for headings  % Chapter (and unnumbered) fonts (17.28pt).
 \setfont\chaprm{bx12 scaled \magstep2}  \setfont\chaprm\rmbshape{12}{\magstep2}
 \setfont\chapit{ti12 scaled \magstep2}  \setfont\chapit\itbshape{10}{\magstep3}
 \setfont\chapsl{sl12 scaled \magstep2}  \setfont\chapsl\slbshape{10}{\magstep3}
 \setfont\chaptt{tt12 scaled \magstep2}  \setfont\chaptt\ttbshape{12}{\magstep2}
 \setfont\chapsf{ss12 scaled \magstep2}  \setfont\chapttsl\ttslshape{10}{\magstep3}
   \setfont\chapsf\sfbshape{12}{\magstep2}
 \let\chapbf=\chaprm  \let\chapbf=\chaprm
 \setfont\chapsc{csc10 scaled\magstep3}  \setfont\chapsc\scbshape{10}{\magstep3}
 \font\chapi=cmmi12 scaled \magstep2  \font\chapi=cmmi12 scaled \magstep2
 \font\chapsy=cmsy10 scaled \magstep3  \font\chapsy=cmsy10 scaled \magstep3
   
 \setfont\secrm{bx12 scaled \magstep1}  % Section fonts (14.4pt).
 \setfont\secit{ti12 scaled \magstep1}  \setfont\secrm\rmbshape{12}{\magstep1}
 \setfont\secsl{sl12 scaled \magstep1}  \setfont\secit\itbshape{10}{\magstep2}
 \setfont\sectt{tt12 scaled \magstep1}  \setfont\secsl\slbshape{10}{\magstep2}
 \setfont\secsf{ss12 scaled \magstep1}  \setfont\sectt\ttbshape{12}{\magstep1}
 \setfont\secbf{bx12 scaled \magstep1}  \setfont\secttsl\ttslshape{10}{\magstep2}
 \setfont\secsc{csc10 scaled\magstep2}  \setfont\secsf\sfbshape{12}{\magstep1}
   \let\secbf\secrm
   \setfont\secsc\scbshape{10}{\magstep2}
 \font\seci=cmmi12 scaled \magstep1  \font\seci=cmmi12 scaled \magstep1
 \font\secsy=cmsy10 scaled \magstep2  \font\secsy=cmsy10 scaled \magstep2
   
 % \setfont\ssecrm{bx10 scaled \magstep1}    % This size an font looked bad.  % \setfont\ssecrm\bxshape{10}{\magstep1}    % This size an font looked bad.
 % \setfont\ssecit{cmti10 scaled \magstep1}    % The letters were too crowded.  % \setfont\ssecit\itshape{10}{\magstep1}    % The letters were too crowded.
 % \setfont\ssecsl{sl10 scaled \magstep1}  % \setfont\ssecsl\slshape{10}{\magstep1}
 % \setfont\ssectt{tt10 scaled \magstep1}  % \setfont\ssectt\ttshape{10}{\magstep1}
 % \setfont\ssecsf{ss10 scaled \magstep1}  % \setfont\ssecsf\sfshape{10}{\magstep1}
   
 %\setfont\ssecrm{b10 scaled 1315}       % Note the use of cmb rather than cmbx.  %\setfont\ssecrm\bfshape{10}{1315}      % Note the use of cmb rather than cmbx.
 %\setfont\ssecit{ti10 scaled 1315}      % Also, the size is a little larger than  %\setfont\ssecit\itshape{10}{1315}      % Also, the size is a little larger than
 %\setfont\ssecsl{sl10 scaled 1315}      % being scaled magstep1.  %\setfont\ssecsl\slshape{10}{1315}      % being scaled magstep1.
 %\setfont\ssectt{tt10 scaled 1315}  %\setfont\ssectt\ttshape{10}{1315}
 %\setfont\ssecsf{ss10 scaled 1315}  %\setfont\ssecsf\sfshape{10}{1315}
   
 %\let\ssecbf=\ssecrm  %\let\ssecbf=\ssecrm
   
 \setfont\ssecrm{bx12 scaled \magstephalf}  % Subsection fonts (13.15pt).
 \setfont\ssecit{ti12 scaled \magstephalf}  \setfont\ssecrm\rmbshape{12}{\magstephalf}
 \setfont\ssecsl{sl12 scaled \magstephalf}  \setfont\ssecit\itbshape{10}{1315}
 \setfont\ssectt{tt12 scaled \magstephalf}  \setfont\ssecsl\slbshape{10}{1315}
 \setfont\ssecsf{ss12 scaled \magstephalf}  \setfont\ssectt\ttbshape{12}{\magstephalf}
 \setfont\ssecbf{bx12 scaled \magstephalf}  \setfont\ssecttsl\ttslshape{10}{\magstep1}
 \setfont\ssecsc{csc10 scaled \magstep1}  \setfont\ssecsf\sfbshape{12}{\magstephalf}
   \let\ssecbf\ssecrm
   \setfont\ssecsc\scbshape{10}{\magstep1}
 \font\sseci=cmmi12 scaled \magstephalf  \font\sseci=cmmi12 scaled \magstephalf
 \font\ssecsy=cmsy10 scaled \magstep1  \font\ssecsy=cmsy10 scaled \magstep1
 % The smallcaps and symbol fonts should actually be scaled \magstep1.5,  % The smallcaps and symbol fonts should actually be scaled \magstep1.5,
 % but that is not a standard magnification.  % but that is not a standard magnification.
   
 % Fonts for title page:  % Fonts for title page:
 \setfont\titlerm{bx12 scaled \magstep3}  \setfont\titlerm\rmbshape{12}{\magstep3}
 \let\authorrm = \secrm  \let\authorrm = \secrm
   
 % In order for the font changes to affect most math symbols and letters,  % In order for the font changes to affect most math symbols and letters,
Line 1022 
Line 1166 
 % The font-changing commands redefine the meanings of \tenSTYLE, instead  % The font-changing commands redefine the meanings of \tenSTYLE, instead
 % of just \STYLE.  We do this so that font changes will continue to work  % of just \STYLE.  We do this so that font changes will continue to work
 % in math mode, where it is the current \fam that is relevant in most  % in math mode, where it is the current \fam that is relevant in most
 % cases, not the current.  Plain TeX does, for example,  % cases, not the current font.  Plain TeX does \def\bf{\fam=\bffam
 % \def\bf{\fam=\bffam \tenbf}  By redefining \tenbf, we obviate the need  % \tenbf}, for example.  By redefining \tenbf, we obviate the need to
 % to redefine \bf itself.  % redefine \bf itself.
 \def\textfonts{%  \def\textfonts{%
   \let\tenrm=\textrm \let\tenit=\textit \let\tensl=\textsl    \let\tenrm=\textrm \let\tenit=\textit \let\tensl=\textsl
   \let\tenbf=\textbf \let\tentt=\texttt \let\smallcaps=\textsc    \let\tenbf=\textbf \let\tentt=\texttt \let\smallcaps=\textsc
   \let\tensf=\textsf \let\teni=\texti \let\tensy=\textsy    \let\tensf=\textsf \let\teni=\texti \let\tensy=\textsy \let\tenttsl=\textttsl
   \resetmathfonts}    \resetmathfonts}
 \def\chapfonts{%  \def\chapfonts{%
   \let\tenrm=\chaprm \let\tenit=\chapit \let\tensl=\chapsl    \let\tenrm=\chaprm \let\tenit=\chapit \let\tensl=\chapsl
   \let\tenbf=\chapbf \let\tentt=\chaptt \let\smallcaps=\chapsc    \let\tenbf=\chapbf \let\tentt=\chaptt \let\smallcaps=\chapsc
   \let\tensf=\chapsf \let\teni=\chapi \let\tensy=\chapsy    \let\tensf=\chapsf \let\teni=\chapi \let\tensy=\chapsy \let\tenttsl=\chapttsl
   \resetmathfonts}    \resetmathfonts \setleading{19pt}}
 \def\secfonts{%  \def\secfonts{%
   \let\tenrm=\secrm \let\tenit=\secit \let\tensl=\secsl    \let\tenrm=\secrm \let\tenit=\secit \let\tensl=\secsl
   \let\tenbf=\secbf \let\tentt=\sectt \let\smallcaps=\secsc    \let\tenbf=\secbf \let\tentt=\sectt \let\smallcaps=\secsc
   \let\tensf=\secsf \let\teni=\seci \let\tensy=\secsy    \let\tensf=\secsf \let\teni=\seci \let\tensy=\secsy \let\tenttsl=\secttsl
   \resetmathfonts}    \resetmathfonts \setleading{16pt}}
 \def\subsecfonts{%  \def\subsecfonts{%
   \let\tenrm=\ssecrm \let\tenit=\ssecit \let\tensl=\ssecsl    \let\tenrm=\ssecrm \let\tenit=\ssecit \let\tensl=\ssecsl
   \let\tenbf=\ssecbf \let\tentt=\ssectt \let\smallcaps=\ssecsc    \let\tenbf=\ssecbf \let\tentt=\ssectt \let\smallcaps=\ssecsc
   \let\tensf=\ssecsf \let\teni=\sseci \let\tensy=\ssecsy    \let\tensf=\ssecsf \let\teni=\sseci \let\tensy=\ssecsy \let\tenttsl=\ssecttsl
   \resetmathfonts}    \resetmathfonts \setleading{15pt}}
   \let\subsubsecfonts = \subsecfonts % Maybe make sssec fonts scaled magstephalf?
 \def\indexfonts{%  \def\indexfonts{%
   \let\tenrm=\indrm \let\tenit=\indit \let\tensl=\indsl    \let\tenrm=\indrm \let\tenit=\indit \let\tensl=\indsl
   \let\tenbf=\indbf \let\tentt=\indtt \let\smallcaps=\indsc    \let\tenbf=\indbf \let\tentt=\indtt \let\smallcaps=\indsc
   \let\tensf=\indsf \let\teni=\indi \let\tensy=\indsy    \let\tensf=\indsf \let\teni=\indi \let\tensy=\indsy \let\tenttsl=\indttsl
   \resetmathfonts}    \resetmathfonts \setleading{12pt}}
   
 % Set up the default fonts, so we can use them for creating boxes.  % Set up the default fonts, so we can use them for creating boxes.
 %  %
Line 1059 
Line 1204 
 \newcount\fontdepth \fontdepth=0  \newcount\fontdepth \fontdepth=0
   
 % Fonts for short table of contents.  % Fonts for short table of contents.
 \setfont\shortcontrm{r12}  \setfont\shortcontrm\rmshape{12}{1000}
 \setfont\shortcontbf{bx12}  \setfont\shortcontbf\bxshape{12}{1000}
 \setfont\shortcontsl{sl12}  \setfont\shortcontsl\slshape{12}{1000}
   
 %% Add scribe-like font environments, plus @l for inline lisp (usually sans  %% Add scribe-like font environments, plus @l for inline lisp (usually sans
 %% serif) and @ii for TeX italic  %% serif) and @ii for TeX italic
Line 1088 
Line 1233 
 \def\restorehyphenation{\hyphenchar\font = `- }  \def\restorehyphenation{\hyphenchar\font = `- }
   
 \def\t#1{%  \def\t#1{%
   {\tt \nohyphenation \rawbackslash \frenchspacing #1}%    {\tt \rawbackslash \frenchspacing #1}%
   \null    \null
 }  }
 \let\ttfont = \t  \let\ttfont = \t
 %\def\samp #1{`{\tt \rawbackslash \frenchspacing #1}'\null}  
 \def\samp #1{`\tclose{#1}'\null}  \def\samp #1{`\tclose{#1}'\null}
 \def\key #1{{\tt \nohyphenation \uppercase{#1}}\null}  \setfont\smallrm\rmshape{8}{1000}
   \font\smallsy=cmsy9
   \def\key#1{{\smallrm\textfont2=\smallsy \leavevmode\hbox{%
     \raise0.4pt\hbox{$\langle$}\kern-.08em\vtop{%
       \vbox{\hrule\kern-0.4pt
        \hbox{\raise0.4pt\hbox{\vphantom{$\langle$}}#1}}%
       \kern-0.4pt\hrule}%
     \kern-.06em\raise0.4pt\hbox{$\rangle$}}}}
   % The old definition, with no lozenge:
   %\def\key #1{{\ttsl \nohyphenation \uppercase{#1}}\null}
 \def\ctrl #1{{\tt \rawbackslash \hat}#1}  \def\ctrl #1{{\tt \rawbackslash \hat}#1}
   
 \let\file=\samp  \let\file=\samp
   \let\url=\samp % perhaps include a hypertex \special eventually
   \def\email#1{$\langle${\tt #1}$\rangle$}
   
 % @code is a modification of @t,  % @code is a modification of @t,
 % which makes spaces the same size as normal in the surrounding text.  % which makes spaces the same size as normal in the surrounding text.
Line 1123 
Line 1278 
 }  }
   
 % We *must* turn on hyphenation at `-' and `_' in \code.  % We *must* turn on hyphenation at `-' and `_' in \code.
 % Otherwise, it is too hard to avoid overful hboxes  % Otherwise, it is too hard to avoid overfull hboxes
 % in the Emacs manual, the Library manual, etc.  % in the Emacs manual, the Library manual, etc.
   
 % Unfortunately, TeX uses one parameter (\hyphenchar) to control  % Unfortunately, TeX uses one parameter (\hyphenchar) to control
 % both hyphenation at - and hyphenation within words.  % both hyphenation at - and hyphenation within words.
 % We must therefore turn them both off (\tclose does that)  % We must therefore turn them both off (\tclose does that)
 % and arrange explicitly to hyphenate an a dash.  % and arrange explicitly to hyphenate at a dash.
 %  -- rms.  %  -- rms.
 {  {
 \catcode`\-=\active  \catcode`\-=\active
Line 1141 
Line 1296 
 % ever called.  -- mycroft  % ever called.  -- mycroft
 \global\def\indexbreaks{\catcode`\-=\active \let-\realdash \catcode`\_=\active \let_\realunder}  \global\def\indexbreaks{\catcode`\-=\active \let-\realdash \catcode`\_=\active \let_\realunder}
 }  }
   
 \def\realdash{-}  \def\realdash{-}
 \def\realunder{_}  \def\realunder{_}
 \def\codedash{-\discretionary{}{}{}}  \def\codedash{-\discretionary{}{}{}}
Line 1151 
Line 1307 
   
 % @kbd is like @code, except that if the argument is just one @key command,  % @kbd is like @code, except that if the argument is just one @key command,
 % then @kbd has no effect.  % then @kbd has no effect.
   %
 \def\xkey{\key}  \def\xkey{\key}
 \def\kbdfoo#1#2#3\par{\def\one{#1}\def\three{#3}\def\threex{??}%  \def\kbdfoo#1#2#3\par{\def\one{#1}\def\three{#3}\def\threex{??}%
 \ifx\one\xkey\ifx\threex\three \key{#2}%  \ifx\one\xkey\ifx\threex\three \key{#2}%
 \else\tclose{\look}\fi  \else{\tclose{\ttsl\look}}\fi
 \else\tclose{\look}\fi}  \else{\tclose{\ttsl\look}}\fi}
   
   % Check if we are currently using a typewriter font.  Since all the
   % Computer Modern typewriter fonts have zero interword stretch (and
   % shrink), and it is reasonable to expect all typewriter fonts to have
   % this property, we can check that font parameter.
   %
   \def\ifmonospace{\ifdim\fontdimen3\font=0pt }
   
 % Typeset a dimension, e.g., `in' or `pt'.  The only reason for the  % Typeset a dimension, e.g., `in' or `pt'.  The only reason for the
 % argument is to make the input look right: @dmn{pt} instead of  % argument is to make the input look right: @dmn{pt} instead of
Line 1166 
Line 1329 
   
 \def\kbd#1{\def\look{#1}\expandafter\kbdfoo\look??\par}  \def\kbd#1{\def\look{#1}\expandafter\kbdfoo\look??\par}
   
 \def\l#1{{\li #1}\null}         %  % @l was never documented to mean ``switch to the Lisp font'',
   % and it is not used as such in any manual I can find.  We need it for
   % Polish suppressed-l.  --karl, 22sep96.
   %\def\l#1{{\li #1}\null}
   
 \def\r#1{{\rm #1}}              % roman font  \def\r#1{{\rm #1}}              % roman font
 % Use of \lowercase was suggested.  % Use of \lowercase was suggested.
 \def\sc#1{{\smallcaps#1}}       % smallcaps font  \def\sc#1{{\smallcaps#1}}       % smallcaps font
 \def\ii#1{{\it #1}}             % italic font  \def\ii#1{{\it #1}}             % italic font
   
   % @pounds{} is a sterling sign.
   \def\pounds{{\it\$}}
   
   
 \message{page headings,}  \message{page headings,}
   
 \newskip\titlepagetopglue \titlepagetopglue = 1.5in  \newskip\titlepagetopglue \titlepagetopglue = 1.5in
Line 1318 
Line 1488 
 % @headings after       turns on double-sided headings after this page.  % @headings after       turns on double-sided headings after this page.
 % @headings doubleafter turns on double-sided headings after this page.  % @headings doubleafter turns on double-sided headings after this page.
 % @headings singleafter turns on single-sided headings after this page.  % @headings singleafter turns on single-sided headings after this page.
 % By default, they are off.  % By default, they are off at the start of a document,
   % and turned `on' after @end titlepage.
   
 \def\headings #1 {\csname HEADINGS#1\endcsname}  \def\headings #1 {\csname HEADINGS#1\endcsname}
   
Line 1332 
Line 1503 
 % title on inside top of left hand pages, and page numbers on outside top  % title on inside top of left hand pages, and page numbers on outside top
 % edge of all pages.  % edge of all pages.
 \def\HEADINGSdouble{  \def\HEADINGSdouble{
 %\pagealignmacro  
 \global\pageno=1  \global\pageno=1
 \global\evenfootline={\hfil}  \global\evenfootline={\hfil}
 \global\oddfootline={\hfil}  \global\oddfootline={\hfil}
 \global\evenheadline={\line{\folio\hfil\thistitle}}  \global\evenheadline={\line{\folio\hfil\thistitle}}
 \global\oddheadline={\line{\thischapter\hfil\folio}}  \global\oddheadline={\line{\thischapter\hfil\folio}}
   \global\let\contentsalignmacro = \chapoddpage
 }  }
   \let\contentsalignmacro = \chappager
   
 % For single-sided printing, chapter title goes across top left of page,  % For single-sided printing, chapter title goes across top left of page,
 % page number on top right.  % page number on top right.
 \def\HEADINGSsingle{  \def\HEADINGSsingle{
 %\pagealignmacro  
 \global\pageno=1  \global\pageno=1
 \global\evenfootline={\hfil}  \global\evenfootline={\hfil}
 \global\oddfootline={\hfil}  \global\oddfootline={\hfil}
 \global\evenheadline={\line{\thischapter\hfil\folio}}  \global\evenheadline={\line{\thischapter\hfil\folio}}
 \global\oddheadline={\line{\thischapter\hfil\folio}}  \global\oddheadline={\line{\thischapter\hfil\folio}}
   \global\let\contentsalignmacro = \chappager
 }  }
 \def\HEADINGSon{\HEADINGSdouble}  \def\HEADINGSon{\HEADINGSdouble}
   
Line 1358 
Line 1531 
 \global\oddfootline={\hfil}  \global\oddfootline={\hfil}
 \global\evenheadline={\line{\folio\hfil\thistitle}}  \global\evenheadline={\line{\folio\hfil\thistitle}}
 \global\oddheadline={\line{\thischapter\hfil\folio}}  \global\oddheadline={\line{\thischapter\hfil\folio}}
   \global\let\contentsalignmacro = \chapoddpage
 }  }
   
 \def\HEADINGSsingleafter{\let\HEADINGShook=\HEADINGSsinglex}  \def\HEADINGSsingleafter{\let\HEADINGShook=\HEADINGSsinglex}
Line 1366 
Line 1540 
 \global\oddfootline={\hfil}  \global\oddfootline={\hfil}
 \global\evenheadline={\line{\thischapter\hfil\folio}}  \global\evenheadline={\line{\thischapter\hfil\folio}}
 \global\oddheadline={\line{\thischapter\hfil\folio}}  \global\oddheadline={\line{\thischapter\hfil\folio}}
   \global\let\contentsalignmacro = \chappager
 }  }
   
 % Subroutines used in generating headings  % Subroutines used in generating headings
Line 1389 
Line 1564 
 \def\settitle{\parsearg\settitlezzz}  \def\settitle{\parsearg\settitlezzz}
 \def\settitlezzz #1{\gdef\thistitle{#1}}  \def\settitlezzz #1{\gdef\thistitle{#1}}
   
   
 \message{tables,}  \message{tables,}
   
 % @tabs -- simple alignment  % @tabs -- simple alignment
Line 1421 
Line 1597 
   
 \newif\ifitemxneedsnegativevskip  \newif\ifitemxneedsnegativevskip
   
 \def\itemxpar{\par\ifitemxneedsnegativevskip\vskip-\parskip\nobreak\fi}  \def\itemxpar{\par\ifitemxneedsnegativevskip\nobreak\vskip-\parskip\nobreak\fi}
   
 \def\internalBitem{\smallbreak \parsearg\itemzzz}  \def\internalBitem{\smallbreak \parsearg\itemzzz}
 \def\internalBitemx{\itemxpar \parsearg\itemzzz}  \def\internalBitemx{\itemxpar \parsearg\itemzzz}
Line 1528 
Line 1704 
 \def\tablez #1#2#3#4#5#6{%  \def\tablez #1#2#3#4#5#6{%
 \aboveenvbreak %  \aboveenvbreak %
 \begingroup %  \begingroup %
 \def\Edescription{\Etable}% Neccessary kludge.  \def\Edescription{\Etable}% Necessary kludge.
 \let\itemindex=#1%  \let\itemindex=#1%
 \ifnum 0#3>0 \advance \leftskip by #3\mil \fi %  \ifnum 0#3>0 \advance \leftskip by #3\mil \fi %
 \ifnum 0#4>0 \tableindent=#4\mil \fi %  \ifnum 0#4>0 \tableindent=#4\mil \fi %
Line 1692 
Line 1868 
 \flushcr}  \flushcr}
   
 % @multitable macros  % @multitable macros
 % Amy Hendrickson, 8/18/94  % Amy Hendrickson, 8/18/94, 3/6/96
 %  %
 % @multitable ... @endmultitable will make as many columns as desired.  % @multitable ... @endmultitable will make as many columns as desired.
 % Contents of each column will wrap at width given in preamble. Width  % Contents of each column will wrap at width given in preamble. Width
Line 1704 
Line 1880 
 % To make preamble:  % To make preamble:
 %  %
 % Either define widths of columns in terms of percent of \hsize:  % Either define widths of columns in terms of percent of \hsize:
 %   @multitable @percentofhsize .2 .3 .5  %   @multitable @columnfractions .25 .3 .45
 %   @item ...  %   @item ...
 %  %
 %   Numbers following @percentofhsize are the percent of the total  %   Numbers following @columnfractions are the percent of the total
 %   current hsize to be used for each column. You may use as many  %   current hsize to be used for each column. You may use as many
 %   columns as desired.  %   columns as desired.
   
   
 % Or use a template:  % Or use a template:
 %   @multitable {Column 1 template} {Column 2 template} {Column 3 template}  %   @multitable {Column 1 template} {Column 2 template} {Column 3 template}
 %   @item ...  %   @item ...
 %   using the widest term desired in each column.  %   using the widest term desired in each column.
   %
   % For those who want to use more than one line's worth of words in
   % the preamble, break the line within one argument and it
   % will parse correctly, i.e.,
   %
   %     @multitable {Column 1 template} {Column 2 template} {Column 3
   %      template}
   % Not:
   %     @multitable {Column 1 template} {Column 2 template}
   %      {Column 3 template}
   
 % Each new table line starts with @item, each subsequent new column  % Each new table line starts with @item, each subsequent new column
 % starts with @tab. Empty columns may be produced by supplying @tab's  % starts with @tab. Empty columns may be produced by supplying @tab's
 % with nothing between them for as many times as empty columns are needed,  % with nothing between them for as many times as empty columns are needed,
 % ie, @tab@tab@tab will produce two empty columns.  % ie, @tab@tab@tab will produce two empty columns.
   
 % @item, @tab, @multicolumn or @endmulticolumn do not need to be on their  % @item, @tab, @multitable or @end multitable do not need to be on their
 % own lines, but it will not hurt if they are.  % own lines, but it will not hurt if they are.
   
 % Sample multitable:  % Sample multitable:
Line 1743 
Line 1929 
 %   @endmultitable  %   @endmultitable
   
 % Default dimensions may be reset by user.  % Default dimensions may be reset by user.
 % @intableparskip will set vertical space between paragraphs in table.  % @multitableparskip is vertical space between paragraphs in table.
 % @intableparindent will set paragraph indent in table.  % @multitableparindent is paragraph indent in table.
 % @spacebetweencols will set horizontal space to be left between columns.  % @multitablecolmargin is horizontal space to be left between columns.
 % @spacebetweenlines will set vertical space to be left between lines.  % @multitablelinespace is space to leave between table items, baseline
   %                                                            to baseline.
   %   0pt means it depends on current normal line spacing.
   
 %%%%  %%%%
 % Dimensions  % Dimensions
   
 \newdimen\intableparskip  \newskip\multitableparskip
 \newdimen\intableparindent  \newskip\multitableparindent
 \newdimen\spacebetweencols  \newdimen\multitablecolspace
 \newdimen\spacebetweenlines  \newskip\multitablelinespace
 \intableparskip=0pt  \multitableparskip=0pt
 \intableparindent=6pt  \multitableparindent=6pt
 \spacebetweencols=12pt  \multitablecolspace=12pt
 \spacebetweenlines=12pt  \multitablelinespace=0pt
   
 %%%%  %%%%
 % Macros used to set up halign preamble:  % Macros used to set up halign preamble:
 \let\endsetuptable\relax  \let\endsetuptable\relax
 \def\xendsetuptable{\endsetuptable}  \def\xendsetuptable{\endsetuptable}
 \let\percentofhsize\relax  \let\columnfractions\relax
 \def\xpercentofhsize{\percentofhsize}  \def\xcolumnfractions{\columnfractions}
 \newif\ifsetpercent  \newif\ifsetpercent
   
   %% 2/1/96, to allow fractions to be given with more than one digit.
   \def\pickupwholefraction#1 {\global\advance\colcount by1 %
   \expandafter\xdef\csname col\the\colcount\endcsname{.#1\hsize}%
   \setuptable}
   
 \newcount\colcount  \newcount\colcount
 \def\setuptable#1{\def\firstarg{#1}%  \def\setuptable#1{\def\firstarg{#1}%
 \ifx\firstarg\xendsetuptable\let\go\relax%  \ifx\firstarg\xendsetuptable\let\go\relax%
 \else  \else
   \ifx\firstarg\xpercentofhsize\global\setpercenttrue%    \ifx\firstarg\xcolumnfractions\global\setpercenttrue%
   \else    \else
     \ifsetpercent      \ifsetpercent
        \if#1.\else%         \let\go\pickupwholefraction   % In this case arg of setuptable
        \global\advance\colcount by1 %                                       % is the decimal point before the
        \expandafter\xdef\csname col\the\colcount\endcsname{.#1\hsize}%                                       % number given in percent of hsize.
        \fi                                       % We don't need this so we don't use it.
     \else      \else
        \global\advance\colcount by1         \global\advance\colcount by1
        \setbox0=\hbox{#1}%         \setbox0=\hbox{#1 }% Add a normal word space as a separator;
                             % typically that is always in the input, anyway.
        \expandafter\xdef\csname col\the\colcount\endcsname{\the\wd0}%         \expandafter\xdef\csname col\the\colcount\endcsname{\the\wd0}%
     \fi%      \fi%
   \fi%    \fi%
   \let\go\setuptable%  \ifx\go\pickupwholefraction\else\let\go\setuptable\fi%
 \fi\go}  \fi\go}
   
 %%%%  %%%%
 % multitable syntax  % multitable syntax
 \def\tab{&}  \def\tab{&\hskip1sp\relax} % 2/2/96
                              % tiny skip here makes sure this column space is
                              % maintained, even if it is never used.
   
   
 %%%%  %%%%
 % @multitable ... @endmultitable definitions:  % @multitable ... @endmultitable definitions:
   
 \def\multitable#1\item{\bgroup  \def\multitable{\parsearg\dotable}
   
   \def\dotable#1{\bgroup
 \let\item\cr  \let\item\cr
 \tolerance=9500  \tolerance=9500
 \hbadness=9500  \hbadness=9500
 \parskip=\intableparskip  \setmultitablespacing
 \parindent=\intableparindent  \parskip=\multitableparskip
   \parindent=\multitableparindent
 \overfullrule=0pt  \overfullrule=0pt
 \global\colcount=0\relax%  \global\colcount=0\relax%
 \def\Emultitable{\global\setpercentfalse\global\everycr{}\cr\egroup\egroup}%  \def\Emultitable{\global\setpercentfalse\global\everycr{}\cr\egroup\egroup}%
  % To parse everything between @multitable and @item :   % To parse everything between @multitable and @item :
 \def\one{#1}\expandafter\setuptable\one\endsetuptable  \setuptable#1 \endsetuptable
  % Need to reset this to 0 after \setuptable.   % Need to reset this to 0 after \setuptable.
 \global\colcount=0\relax%  \global\colcount=0\relax%
  %   %
Line 1813 
Line 2014 
  % \vtop will set a single line and will also let text wrap and   % \vtop will set a single line and will also let text wrap and
  % continue for many paragraphs if desired.   % continue for many paragraphs if desired.
 \halign\bgroup&\global\advance\colcount by 1\relax%  \halign\bgroup&\global\advance\colcount by 1\relax%
 \vtop{\hsize=\expandafter\csname col\the\colcount\endcsname  \multistrut\vtop{\hsize=\expandafter\csname col\the\colcount\endcsname
  % In order to keep entries from bumping into each other   % In order to keep entries from bumping into each other
  % we will add a \leftskip of \spacebetweencols to all columns after   % we will add a \leftskip of \multitablecolspace to all columns after
  % the first one.   % the first one.
  %  If a template has been used, we will add \spacebetweencols   %  If a template has been used, we will add \multitablecolspace
  % to the width of each template entry.   % to the width of each template entry.
  %  If user has set preamble in terms of percent of \hsize   %  If user has set preamble in terms of percent of \hsize
  % we will use that dimension as the width of the column, and   % we will use that dimension as the width of the column, and
Line 1829 
Line 2030 
   \ifsetpercent    \ifsetpercent
   \else    \else
    % If user has <not> set preamble in terms of percent of \hsize     % If user has <not> set preamble in terms of percent of \hsize
    % we will advance \hsize by \spacebetweencols     % we will advance \hsize by \multitablecolspace
   \advance\hsize by \spacebetweencols    \advance\hsize by \multitablecolspace
   \fi    \fi
  % In either case we will make \leftskip=\spacebetweencols:   % In either case we will make \leftskip=\multitablecolspace:
 \leftskip=\spacebetweencols  \leftskip=\multitablecolspace
 \fi  \fi
 \noindent##}\cr%  \noindent##\multistrut}\cr%
  % \everycr will reset column counter, \colcount, at the end of   % \everycr will reset column counter, \colcount, at the end of
  % each line. Every column  entry will cause \colcount to advance by one.   % each line. Every column  entry will cause \colcount to advance by one.
  % The table preamble   % The table preamble
  % looks at the current \colcount to find the correct column width.   % looks at the current \colcount to find the correct column width.
 \global\everycr{\noalign{\nointerlineskip\vskip\spacebetweenlines  \global\everycr{\noalign{%
 \filbreak%% keeps underfull box messages off when table breaks over pages.  \filbreak%% keeps underfull box messages off when table breaks over pages.
 \global\colcount=0\relax}}}  \global\colcount=0\relax}}
   }
   
   \def\setmultitablespacing{% test to see if user has set \multitablelinespace.
   % If so, do nothing. If not, give it an appropriate dimension based on
   % current baselineskip.
   \ifdim\multitablelinespace=0pt
   %% strut to put in table in case some entry doesn't have descenders,
   %% to keep lines equally spaced
   \let\multistrut = \strut
   %% Test to see if parskip is larger than space between lines of
   %% table. If not, do nothing.
   %%        If so, set to same dimension as multitablelinespace.
   \else
   \gdef\multistrut{\vrule height\multitablelinespace depth\dp0
   width0pt\relax} \fi
   \ifdim\multitableparskip>\multitablelinespace
   \global\multitableparskip=\multitablelinespace
   \global\advance\multitableparskip-7pt %% to keep parskip somewhat smaller
                                         %% than skip between lines in the table.
   \fi%
   \ifdim\multitableparskip=0pt
   \global\multitableparskip=\multitablelinespace
   \global\advance\multitableparskip-7pt %% to keep parskip somewhat smaller
                                         %% than skip between lines in the table.
   \fi}
   
   
 \message{indexing,}  \message{indexing,}
 % Index generation facilities  % Index generation facilities
Line 1944 
Line 2171 
 \def\L{\realbackslash L}%  \def\L{\realbackslash L}%
 \def\ss{\realbackslash ss}%  \def\ss{\realbackslash ss}%
 % Take care of texinfo commands likely to appear in an index entry.  % Take care of texinfo commands likely to appear in an index entry.
   % (Must be a way to avoid doing expansion at all, and thus not have to
   % laboriously list every single command here.)
   \def\@{@}% will be @@ when we switch to @ as escape char.
   %\let\{ = \lbracecmd
   %\let\} = \rbracecmd
 \def\_{{\realbackslash _}}%  \def\_{{\realbackslash _}}%
 \def\w{\realbackslash w }%  \def\w{\realbackslash w }%
 \def\bf{\realbackslash bf }%  \def\bf{\realbackslash bf }%
 \def\rm{\realbackslash rm }%  %\def\rm{\realbackslash rm }%
 \def\sl{\realbackslash sl }%  \def\sl{\realbackslash sl }%
 \def\sf{\realbackslash sf}%  \def\sf{\realbackslash sf}%
 \def\tt{\realbackslash tt}%  \def\tt{\realbackslash tt}%
 \def\gtr{\realbackslash gtr}%  \def\gtr{\realbackslash gtr}%
 \def\less{\realbackslash less}%  \def\less{\realbackslash less}%
 \def\hat{\realbackslash hat}%  \def\hat{\realbackslash hat}%
 \def\char{\realbackslash char}%  %\def\char{\realbackslash char}%
 \def\TeX{\realbackslash TeX}%  \def\TeX{\realbackslash TeX}%
 \def\dots{\realbackslash dots }%  \def\dots{\realbackslash dots }%
 \def\copyright{\realbackslash copyright }%  \def\copyright{\realbackslash copyright }%
 \def\tclose##1{\realbackslash tclose {##1}}%  \def\tclose##1{\realbackslash tclose {##1}}%
 \def\code##1{\realbackslash code {##1}}%  \def\code##1{\realbackslash code {##1}}%
   \def\dotless##1{\realbackslash dotless {##1}}%
 \def\samp##1{\realbackslash samp {##1}}%  \def\samp##1{\realbackslash samp {##1}}%
 \def\t##1{\realbackslash r {##1}}%  \def\,##1{\realbackslash ,{##1}}%
   \def\t##1{\realbackslash t {##1}}%
 \def\r##1{\realbackslash r {##1}}%  \def\r##1{\realbackslash r {##1}}%
 \def\i##1{\realbackslash i {##1}}%  \def\i##1{\realbackslash i {##1}}%
 \def\b##1{\realbackslash b {##1}}%  \def\b##1{\realbackslash b {##1}}%
Line 1972 
Line 2206 
 \def\kbd##1{\realbackslash kbd {##1}}%  \def\kbd##1{\realbackslash kbd {##1}}%
 \def\dfn##1{\realbackslash dfn {##1}}%  \def\dfn##1{\realbackslash dfn {##1}}%
 \def\emph##1{\realbackslash emph {##1}}%  \def\emph##1{\realbackslash emph {##1}}%
   \unsepspaces
 }  }
   
   % If an index command is used in an @example environment, any spaces
   % therein should become regular spaces in the raw index file, not the
   % expansion of \tie (\\leavevmode \penalty \@M \ ).
   {\obeyspaces
    \gdef\unsepspaces{\obeyspaces\let =\space}}
   
 % \indexnofonts no-ops all font-change commands.  % \indexnofonts no-ops all font-change commands.
 % This is used when outputting the strings to sort the index by.  % This is used when outputting the strings to sort the index by.
 \def\indexdummyfont#1{#1}  \def\indexdummyfont#1{#1}
Line 1982 
Line 2223 
   
 \def\indexnofonts{%  \def\indexnofonts{%
 % Just ignore accents.  % Just ignore accents.
   \let\,=\indexdummyfont
 \let\"=\indexdummyfont  \let\"=\indexdummyfont
 \let\`=\indexdummyfont  \let\`=\indexdummyfont
 \let\'=\indexdummyfont  \let\'=\indexdummyfont
Line 1994 
Line 2236 
 \let\u=\indexdummyfont  \let\u=\indexdummyfont
 \let\v=\indexdummyfont  \let\v=\indexdummyfont
 \let\H=\indexdummyfont  \let\H=\indexdummyfont
   \let\dotless=\indexdummyfont
 % Take care of the plain tex special European modified letters.  % Take care of the plain tex special European modified letters.
 \def\oe{oe}%  \def\oe{oe}%
 \def\ae{ae}%  \def\ae{ae}%
Line 2027 
Line 2270 
 \let\var=\indexdummyfont  \let\var=\indexdummyfont
 \let\TeX=\indexdummytex  \let\TeX=\indexdummytex
 \let\dots=\indexdummydots  \let\dots=\indexdummydots
   \def\@{@}%
 }  }
   
 % To define \realbackslash, we must make \ not be an escape.  % To define \realbackslash, we must make \ not be an escape.
Line 2043 
Line 2287 
 % #1 is name of index, #2 is stuff to put there  % #1 is name of index, #2 is stuff to put there
 \def\doind #1#2{%  \def\doind #1#2{%
 % Put the index entry in the margin if desired.  % Put the index entry in the margin if desired.
 \ifx\SETmarginindex\relax\else%    \ifx\SETmarginindex\relax\else
 \insert\margin{\hbox{\vrule height8pt depth3pt width0pt #2}}%  \insert\margin{\hbox{\vrule height8pt depth3pt width0pt #2}}%
 \fi%    \fi
 {\count10=\lastpenalty %    {%
 {\indexdummies % Must do this here, since \bf, etc expand at this stage      \count255=\lastpenalty
 \escapechar=`\\%      {%
 {\let\folio=0% Expand all macros now EXCEPT \folio        \indexdummies % Must do this here, since \bf, etc expand at this stage
         \escapechar=`\\
         {%
           \let\folio=0 % We will expand all macros now EXCEPT \folio.
 \def\rawbackslashxx{\indexbackslash}% \indexbackslash isn't defined now  \def\rawbackslashxx{\indexbackslash}% \indexbackslash isn't defined now
 % so it will be output as is; and it will print as backslash in the indx.          % so it will be output as is; and it will print as backslash.
 %  %
 % Now process the index-string once, with all font commands turned off,          % First process the index-string with all font commands turned off
 % to get the string to sort the index by.          % to get the string to sort by.
 {\indexnofonts          {\indexnofonts \xdef\indexsorttmp{#2}}%
 \xdef\temp1{#2}%          %
 }%          % Now produce the complete index entry, with both the sort key and the
 % Now produce the complete index entry.  We process the index-string again,          % original text, including any font commands.
 % this time with font commands expanded, to get what to print in the index.          \toks0 = {#2}%
 \edef\temp{%  \edef\temp{%
 \write \csname#1indfile\endcsname{%  \write \csname#1indfile\endcsname{%
 \realbackslash entry {\temp1}{\folio}{#2}}}%              \realbackslash entry{\indexsorttmp}{\folio}{\the\toks0}}%
 \temp }%          }%
 }\penalty\count10}}          \temp
         }%
       }%
       \penalty\count255
     }%
   }
   
 \def\dosubind #1#2#3{%  \def\dosubind #1#2#3{%
 {\count10=\lastpenalty %  {\count10=\lastpenalty %
Line 2125 
Line 2377 
   
 \def\printindex{\parsearg\doprintindex}  \def\printindex{\parsearg\doprintindex}
   
 \def\doprintindex#1{%  \def\doprintindex#1{\begingroup
   \tex    \dobreak \chapheadingskip{10000}%
   \dobreak \chapheadingskip {10000}  
   \catcode`\%=\other\catcode`\&=\other\catcode`\#=\other  
   \catcode`\$=\other  
   \catcode`\~=\other  
   \indexbreaks  
   %    %
   % The following don't help, since the chars were translated    \indexfonts \rm
   % when the raw index was written, and their fonts were discarded    \tolerance = 9500
   % due to \indexnofonts.    \indexbreaks
   %\catcode`\"=\active    \def\indexbackslash{\rawbackslashxx}%
   %\catcode`\^=\active    % Index files are almost Texinfo source, but we use \ as the escape
   %\catcode`\_=\active    % character.  It would be better to use @, but that's too big a change
   %\catcode`\|=\active    % to make right now.
   %\catcode`\<=\active    \catcode`\\ = 0
   %\catcode`\>=\active    \catcode`\@ = 11
   % %    \escapechar = `\\
   \def\indexbackslash{\rawbackslashxx}  
   \indexfonts\rm \tolerance=9500 \advance\baselineskip -1pt  
   \begindoublecolumns    \begindoublecolumns
   %    %
   % See if the index file exists and is nonempty.    % See if the index file exists and is nonempty.
Line 2169 
Line 2414 
   \fi    \fi
   \closein 1    \closein 1
   \enddoublecolumns    \enddoublecolumns
   \Etex  \endgroup}
 }  
   
 % These macros are used by the sorted index file itself.  % These macros are used by the sorted index file itself.
 % Change them to control the appearance of the index.  % Change them to control the appearance of the index.
Line 2224 
Line 2468 
   %    %
   % Insert the text of the index entry.  TeX will do line-breaking on it.    % Insert the text of the index entry.  TeX will do line-breaking on it.
   #1%    #1%
   % The following is kluged to not output a line of dots in the index if    % The following is kludged to not output a line of dots in the index if
   % there are no page numbers.  The next person who breaks this will be    % there are no page numbers.  The next person who breaks this will be
   % cursed by a Unix daemon.    % cursed by a Unix daemon.
   \def\tempa{{\rm }}%    \def\tempa{{\rm }}%
Line 2261 
Line 2505 
 \noindent\hskip\secondaryindent\hbox{#1}\indexdotfill #2\par  \noindent\hskip\secondaryindent\hbox{#1}\indexdotfill #2\par
 }}  }}
   
 %% Define two-column mode, which is used in indexes.  % Define two-column mode, which we use to typeset indexes.
 %% Adapted from the TeXbook, page 416.  % Adapted from the TeXbook, page 416, which is to say,
   % the manmac.tex format used to print the TeXbook itself.
 \catcode `\@=11  \catcode `\@=11
   
 \newbox\partialpage  \newbox\partialpage
   
 \newdimen\doublecolumnhsize  \newdimen\doublecolumnhsize
   
 \def\begindoublecolumns{\begingroup  \def\begindoublecolumns{\begingroup % ended by \enddoublecolumns
   % Grab any single-column material above us.    % Grab any single-column material above us.
   \output = {\global\setbox\partialpage    \output = {\global\setbox\partialpage
     =\vbox{\unvbox255\kern -\topskip \kern \baselineskip}}%      =\vbox{\unvbox255\kern -\topskip \kern \baselineskip}}%
Line 2302 
Line 2546 
   % Double the \vsize as well.  (We don't need a separate register here,    % Double the \vsize as well.  (We don't need a separate register here,
   % since nobody clobbers \vsize.)    % since nobody clobbers \vsize.)
   \vsize = 2\vsize    \vsize = 2\vsize
   \doublecolumnpagegoal  
 }  }
   
 \def\enddoublecolumns{\eject \endgroup \pagegoal=\vsize \unvbox\partialpage}  
   
 \def\doublecolumnsplit{\splittopskip=\topskip \splitmaxdepth=\maxdepth  
   \global\dimen@=\pageheight \global\advance\dimen@ by-\ht\partialpage  
   \global\setbox1=\vsplit255 to\dimen@ \global\setbox0=\vbox{\unvbox1}  
   \global\setbox3=\vsplit255 to\dimen@ \global\setbox2=\vbox{\unvbox3}  
   \ifdim\ht0>\dimen@ \setbox255=\vbox{\unvbox0\unvbox2} \global\setbox255=\copy5 \fi  
   \ifdim\ht2>\dimen@ \setbox255=\vbox{\unvbox0\unvbox2} \global\setbox255=\copy5 \fi  
 }  
 \def\doublecolumnpagegoal{%  
   \dimen@=\vsize \advance\dimen@ by-2\ht\partialpage \global\pagegoal=\dimen@  
 }  
 \def\pagesofar{\unvbox\partialpage %  
   \hsize=\doublecolumnhsize % have to restore this since output routine  
   \wd0=\hsize \wd2=\hsize \hbox to\pagewidth{\box0\hfil\box2}}  
 \def\doublecolumnout{%  \def\doublecolumnout{%
   \setbox5=\copy255    \splittopskip=\topskip \splitmaxdepth=\maxdepth
   {\vbadness=10000 \doublecolumnsplit}    % Get the available space for the double columns -- the normal
   \ifvbox255    % (undoubled) page height minus any material left over from the
     \setbox0=\vtop to\dimen@{\unvbox0}    % previous page.
     \setbox2=\vtop to\dimen@{\unvbox2}    \dimen@=\pageheight \advance\dimen@ by-\ht\partialpage
     \onepageout\pagesofar \unvbox255 \penalty\outputpenalty    % box0 will be the left-hand column, box1 the right.
   \else    \setbox0=\vsplit255 to\dimen@ \setbox2=\vsplit255 to\dimen@
     \setbox0=\vbox{\unvbox5}    \onepageout\pagesofar
     \ifvbox0    \unvbox255 \penalty\outputpenalty
       \dimen@=\ht0 \advance\dimen@ by\topskip \advance\dimen@ by-\baselineskip  }
       \divide\dimen@ by2 \splittopskip=\topskip \splitmaxdepth=\maxdepth  \def\pagesofar{%
       {\vbadness=10000    % The contents of the output page -- any previous material,
         \loop \global\setbox5=\copy0    % followed by the two boxes we just split.
           \setbox1=\vsplit5 to\dimen@    \unvbox\partialpage
           \setbox3=\vsplit5 to\dimen@    \hsize = \doublecolumnhsize
           \ifvbox5 \global\advance\dimen@ by1pt \repeat    \wd0=\hsize \wd2=\hsize \hbox to\pagewidth{\box0\hfil\box2}%
         \setbox0=\vbox to\dimen@{\unvbox1}  
         \setbox2=\vbox to\dimen@{\unvbox3}  
         \global\setbox\partialpage=\vbox{\pagesofar}  
         \doublecolumnpagegoal  
       }        }
     \fi  \def\enddoublecolumns{%
   \fi    \output={\balancecolumns}\eject % split what we have
     \endgroup
     % Back to normal single-column typesetting, but take account of the
     % fact that we just accumulated some stuff on the output page.
     \pagegoal=\vsize
   }
   \def\balancecolumns{%
     % Called on the last page of the double column material.
     \setbox0=\vbox{\unvbox255}%
     \dimen@ = \ht0
     \advance\dimen@ by \topskip
     \advance\dimen@ by-\baselineskip
     \divide\dimen@ by 2
     \splittopskip = \topskip
     % Loop until we get a decent breakpoint.
     {\vbadness=10000 \loop \global\setbox3=\copy0
       \global\setbox1=\vsplit3 to\dimen@
       \ifdim\ht3>\dimen@ \global\advance\dimen@ by1pt \repeat}%
     \setbox0=\vbox to\dimen@{\unvbox1}%
     \setbox2=\vbox to\dimen@{\unvbox3}%
     \pagesofar
 }  }
   
 \catcode `\@=\other  \catcode `\@=\other
   
   
 \message{sectioning,}  \message{sectioning,}
 % Define chapters, sections, etc.  % Define chapters, sections, etc.
   
Line 2518 
Line 2762 
 \global\let\subsubsection = \appendixsubsubsec  \global\let\subsubsection = \appendixsubsubsec
 }}  }}
   
   % @centerchap is like @unnumbered, but the heading is centered.
   \outer\def\centerchap{\parsearg\centerchapyyy}
   \def\centerchapyyy #1{{\let\unnumbchapmacro=\centerchapmacro \unnumberedyyy{#1}}}
   
 \outer\def\top{\parsearg\unnumberedyyy}  \outer\def\top{\parsearg\unnumberedyyy}
 \outer\def\unnumbered{\parsearg\unnumberedyyy}  \outer\def\unnumbered{\parsearg\unnumberedyyy}
 \def\unnumberedyyy #1{\unnmhead0{#1}} % normally unnmhead0 calls unnumberedzzz  \def\unnumberedyyy #1{\unnmhead0{#1}} % normally unnmhead0 calls unnumberedzzz
Line 2562 
Line 2810 
 \penalty 10000 %  \penalty 10000 %
 }}  }}
   
 \outer\def\appenixsection{\parsearg\appendixsecyyy}  \outer\def\appendixsection{\parsearg\appendixsecyyy}
 \outer\def\appendixsec{\parsearg\appendixsecyyy}  \outer\def\appendixsec{\parsearg\appendixsecyyy}
 \def\appendixsecyyy #1{\apphead1{#1}} % normally calls appendixsectionzzz  \def\appendixsecyyy #1{\apphead1{#1}} % normally calls appendixsectionzzz
 \def\appendixsectionzzz #1{\seccheck{appendixsection}%  \def\appendixsectionzzz #1{\seccheck{appendixsection}%
Line 2620 
Line 2868 
 \outer\def\unnumberedsubsec{\parsearg\unnumberedsubsecyyy}  \outer\def\unnumberedsubsec{\parsearg\unnumberedsubsecyyy}
 \def\unnumberedsubsecyyy #1{\unnmhead2{#1}} %normally calls unnumberedsubseczzz  \def\unnumberedsubsecyyy #1{\unnmhead2{#1}} %normally calls unnumberedsubseczzz
 \def\unnumberedsubseczzz #1{\seccheck{unnumberedsubsec}%  \def\unnumberedsubseczzz #1{\seccheck{unnumberedsubsec}%
 \plainsecheading {#1}\gdef\thissection{#1}%  \plainsubsecheading {#1}\gdef\thissection{#1}%
 {\chapternofonts%  {\chapternofonts%
 \edef\temp{{\realbackslash unnumbsubsecentry{#1}{\noexpand\folio}}}%  \edef\temp{{\realbackslash unnumbsubsecentry{#1}{\noexpand\folio}}}%
 \escapechar=`\\%  \escapechar=`\\%
Line 2665 
Line 2913 
 \outer\def\unnumberedsubsubsec{\parsearg\unnumberedsubsubsecyyy}  \outer\def\unnumberedsubsubsec{\parsearg\unnumberedsubsubsecyyy}
 \def\unnumberedsubsubsecyyy #1{\unnmhead3{#1}} %normally unnumberedsubsubseczzz  \def\unnumberedsubsubsecyyy #1{\unnmhead3{#1}} %normally unnumberedsubsubseczzz
 \def\unnumberedsubsubseczzz #1{\seccheck{unnumberedsubsubsec}%  \def\unnumberedsubsubseczzz #1{\seccheck{unnumberedsubsubsec}%
 \plainsecheading {#1}\gdef\thissection{#1}%  \plainsubsubsecheading {#1}\gdef\thissection{#1}%
 {\chapternofonts%  {\chapternofonts%
 \edef\temp{{\realbackslash unnumbsubsubsecentry{#1}{\noexpand\folio}}}%  \edef\temp{{\realbackslash unnumbsubsubsecentry{#1}{\noexpand\folio}}}%
 \escapechar=`\\%  \escapechar=`\\%
Line 2724 
Line 2972 
                   \parindent=0pt\raggedright                    \parindent=0pt\raggedright
                   \rm #1\hfill}}\bigskip \par\penalty 200}                    \rm #1\hfill}}\bigskip \par\penalty 200}
   
 \def\heading{\parsearg\secheadingi}  % @heading, @subheading, @subsubheading.
   \def\heading{\parsearg\plainsecheading}
 \def\subheading{\parsearg\subsecheadingi}  \def\subheading{\parsearg\plainsubsecheading}
   \def\subsubheading{\parsearg\plainsubsubsecheading}
 \def\subsubheading{\parsearg\subsubsecheadingi}  
   
 % These macros generate a chapter, section, etc. heading only  % These macros generate a chapter, section, etc. heading only
 % (including whitespace, linebreaking, etc. around it),  % (including whitespace, linebreaking, etc. around it),
Line 2742 
Line 2989 
 %%% Define plain chapter starts, and page on/off switching for it  %%% Define plain chapter starts, and page on/off switching for it
 % Parameter controlling skip before chapter headings (if needed)  % Parameter controlling skip before chapter headings (if needed)
   
 \newskip \chapheadingskip \chapheadingskip = 30pt plus 8pt minus 4pt  \newskip\chapheadingskip
   
 \def\chapbreak{\dobreak \chapheadingskip {-4000}}  \def\chapbreak{\dobreak \chapheadingskip {-4000}}
 \def\chappager{\par\vfill\supereject}  \def\chappager{\par\vfill\supereject}
Line 2751 
Line 2998 
 \def\setchapternewpage #1 {\csname CHAPPAG#1\endcsname}  \def\setchapternewpage #1 {\csname CHAPPAG#1\endcsname}
   
 \def\CHAPPAGoff{  \def\CHAPPAGoff{
   \global\let\contentsalignmacro = \chappager
 \global\let\pchapsepmacro=\chapbreak  \global\let\pchapsepmacro=\chapbreak
 \global\let\pagealignmacro=\chappager}  \global\let\pagealignmacro=\chappager}
   
 \def\CHAPPAGon{  \def\CHAPPAGon{
   \global\let\contentsalignmacro = \chappager
 \global\let\pchapsepmacro=\chappager  \global\let\pchapsepmacro=\chappager
 \global\let\pagealignmacro=\chappager  \global\let\pagealignmacro=\chappager
 \global\def\HEADINGSon{\HEADINGSsingle}}  \global\def\HEADINGSon{\HEADINGSsingle}}
   
 \def\CHAPPAGodd{  \def\CHAPPAGodd{
   \global\let\contentsalignmacro = \chapoddpage
 \global\let\pchapsepmacro=\chapoddpage  \global\let\pchapsepmacro=\chapoddpage
 \global\let\pagealignmacro=\chapoddpage  \global\let\pagealignmacro=\chapoddpage
 \global\def\HEADINGSon{\HEADINGSdouble}}  \global\def\HEADINGSon{\HEADINGSdouble}}
Line 2768 
Line 3018 
   
 \def\CHAPFplain{  \def\CHAPFplain{
 \global\let\chapmacro=\chfplain  \global\let\chapmacro=\chfplain
 \global\let\unnumbchapmacro=\unnchfplain}  \global\let\unnumbchapmacro=\unnchfplain
   \global\let\centerchapmacro=\centerchfplain}
   
   % Plain chapter opening.
   % #1 is the text, #2 the chapter number or empty if unnumbered.
 \def\chfplain #1#2{%  \def\chfplain #1#2{%
   \pchapsepmacro    \pchapsepmacro
   {%    {%
     \chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000      \chapfonts \rm
                      \parindent=0pt\raggedright      \def\chapnum{#2}%
                      \rm #2\enspace #1}%      \setbox0 = \hbox{#2\ifx\chapnum\empty\else\enspace\fi}%
       \vbox{\hyphenpenalty=10000 \tolerance=5000 \parindent=0pt \raggedright
             \hangindent = \wd0 \centerparametersmaybe
             \unhbox0 #1\par}%
   }%    }%
   \bigskip    \nobreak\bigskip % no page break after a chapter title
   \penalty5000    \nobreak
 }  }
   
 \def\unnchfplain #1{%  % Plain opening for unnumbered.
 \pchapsepmacro %  \def\unnchfplain#1{\chfplain{#1}{}}
 {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000  
                   \parindent=0pt\raggedright  % @centerchap -- centered and unnumbered.
                   \rm #1\hfill}}\bigskip \par\penalty 10000 %  \let\centerparametersmaybe = \relax
 }  \def\centerchfplain#1{{%
     \def\centerparametersmaybe{%
       \advance\rightskip by 3\rightskip
       \leftskip = \rightskip
       \parfillskip = 0pt
     }%
     \chfplain{#1}{}%
   }}
   
 \CHAPFplain % The default  \CHAPFplain % The default
   
 \def\unnchfopen #1{%  \def\unnchfopen #1{%
Line 2800 
Line 3064 
 \par\penalty 5000 %  \par\penalty 5000 %
 }  }
   
   \def\centerchfopen #1{%
   \chapoddpage {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000
                          \parindent=0pt
                          \hfill {\rm #1}\hfill}}\bigskip \par\penalty 10000 %
   }
   
 \def\CHAPFopen{  \def\CHAPFopen{
 \global\let\chapmacro=\chfopen  \global\let\chapmacro=\chfopen
 \global\let\unnumbchapmacro=\unnchfopen}  \global\let\unnumbchapmacro=\unnchfopen
   \global\let\centerchapmacro=\centerchfopen}
   
 % Parameter controlling skip before section headings.  
   
 \newskip \subsecheadingskip  \subsecheadingskip = 17pt plus 8pt minus 4pt  % Section titles.
 \def\subsecheadingbreak{\dobreak \subsecheadingskip {-500}}  \newskip\secheadingskip
   
 \newskip \secheadingskip  \secheadingskip = 21pt plus 8pt minus 4pt  
 \def\secheadingbreak{\dobreak \secheadingskip {-1000}}  \def\secheadingbreak{\dobreak \secheadingskip {-1000}}
   \def\secheading#1#2#3{\sectionheading{sec}{#2.#3}{#1}}
   \def\plainsecheading#1{\sectionheading{sec}{}{#1}}
   
 % @paragraphindent  is defined for the Info formatting commands only.  % Subsection titles.
 \let\paragraphindent=\comment  \newskip \subsecheadingskip
   \def\subsecheadingbreak{\dobreak \subsecheadingskip {-500}}
 % Section fonts are the base font at magstep2, which produces  \def\subsecheading#1#2#3#4{\sectionheading{subsec}{#2.#3.#4}{#1}}
 % a size a bit more than 14 points in the default situation.  \def\plainsubsecheading#1{\sectionheading{subsec}{}{#1}}
   
 \def\secheading #1#2#3{\secheadingi {#2.#3\enspace #1}}  
 \def\plainsecheading #1{\secheadingi {#1}}  
 \def\secheadingi #1{{\advance \secheadingskip by \parskip %  
 \secheadingbreak}%  
 {\secfonts \vbox{\hyphenpenalty=10000\tolerance=5000  
                  \parindent=0pt\raggedright  
                  \rm #1\hfill}}%  
 \ifdim \parskip<10pt \kern 10pt\kern -\parskip\fi \penalty 10000 }  
   
   
 % Subsection fonts are the base font at magstep1,  % Subsubsection titles.
 % which produces a size of 12 points.  \let\subsubsecheadingskip = \subsecheadingskip
   \let\subsubsecheadingbreak = \subsecheadingbreak
   \def\subsubsecheading#1#2#3#4#5{\sectionheading{subsubsec}{#2.#3.#4.#5}{#1}}
   \def\plainsubsubsecheading#1{\sectionheading{subsubsec}{}{#1}}
   
 \def\subsecheading #1#2#3#4{\subsecheadingi {#2.#3.#4\enspace #1}}  
 \def\subsecheadingi #1{{\advance \subsecheadingskip by \parskip %  
 \subsecheadingbreak}%  
 {\subsecfonts \vbox{\hyphenpenalty=10000\tolerance=5000  
                      \parindent=0pt\raggedright  
                      \rm #1\hfill}}%  
 \ifdim \parskip<10pt \kern 10pt\kern -\parskip\fi \penalty 10000 }  
   
 \def\subsubsecfonts{\subsecfonts} % Maybe this should change:  % Print any size section title.
                                   % Perhaps make sssec fonts scaled  %
                                   % magstep half  % #1 is the section type (sec/subsec/subsubsec), #2 is the section
 \def\subsubsecheading #1#2#3#4#5{\subsubsecheadingi {#2.#3.#4.#5\enspace #1}}  % number (maybe empty), #3 the text.
 \def\subsubsecheadingi #1{{\advance \subsecheadingskip by \parskip %  \def\sectionheading#1#2#3{%
 \subsecheadingbreak}%    {%
 {\subsubsecfonts \vbox{\hyphenpenalty=10000\tolerance=5000      \expandafter\advance\csname #1headingskip\endcsname by \parskip
                        \parindent=0pt\raggedright      \csname #1headingbreak\endcsname
                        \rm #1\hfill}}%    }%
 \ifdim \parskip<10pt \kern 10pt\kern -\parskip\fi \penalty 10000}    {%
       % Switch to the right set of fonts.
       \csname #1fonts\endcsname \rm
       %
       % Only insert the separating space if we have a section number.
       \def\secnum{#2}%
       \setbox0 = \hbox{#2\ifx\secnum\empty\else\enspace\fi}%
       %
       \vbox{\hyphenpenalty=10000 \tolerance=5000 \parindent=0pt \raggedright
             \hangindent = \wd0 % zero if no section number
             \unhbox0 #3}%
     }%
     \ifdim\parskip<10pt \nobreak\kern10pt\nobreak\kern-\parskip\fi \nobreak
   }
   
   
 \message{toc printing,}  \message{toc printing,}
   
 % Finish up the main text and prepare to read what we've written  % Finish up the main text and prepare to read what we've written
 % to \contentsfile.  % to \contentsfile.
   
 \newskip\contentsrightmargin \contentsrightmargin=1in  \newskip\contentsrightmargin \contentsrightmargin=1in
 \def\startcontents#1{%  \def\startcontents#1{%
    \pagealignmacro     % If @setchapternewpage on, and @headings double, the contents should
      % start on an odd page, unlike chapters.  Thus, we maintain
      % \contentsalignmacro in parallel with \pagealignmacro.
      % From: Torbjorn Granlund <tege@matematik.su.se>
      \contentsalignmacro
    \immediate\closeout \contentsfile     \immediate\closeout \contentsfile
    \ifnum \pageno>0     \ifnum \pageno>0
       \pageno = -1              % Request roman numbered pages.        \pageno = -1              % Request roman numbered pages.
Line 2892 
Line 3164 
       \secfonts        \secfonts
       \let\rm=\shortcontrm \let\bf=\shortcontbf \let\sl=\shortcontsl        \let\rm=\shortcontrm \let\bf=\shortcontbf \let\sl=\shortcontsl
       \rm        \rm
         \hyphenpenalty = 10000
       \advance\baselineskip by 1pt % Open it up a little.        \advance\baselineskip by 1pt % Open it up a little.
       \def\secentry ##1##2##3##4{}        \def\secentry ##1##2##3##4{}
       \def\unnumbsecentry ##1##2{}        \def\unnumbsecentry ##1##2{}
Line 2935 
Line 3208 
   % This space should be plenty, since a single number is .5em, and the    % This space should be plenty, since a single number is .5em, and the
   % widest letter (M) is 1em, at least in the Computer Modern fonts.    % widest letter (M) is 1em, at least in the Computer Modern fonts.
   % (This space doesn't include the extra space that gets added after    % (This space doesn't include the extra space that gets added after
   % the label; that gets put in in \shortchapentry above.)    % the label; that gets put in by \shortchapentry above.)
   \advance\dimen0 by 1.1em    \advance\dimen0 by 1.1em
   \hbox to \dimen0{#1\hfil}%    \hbox to \dimen0{#1\hfil}%
 }  }
Line 2956 
Line 3229 
   \dosubsubsecentry{#2.#3.#4.#5\labelspace#1}{#6}}    \dosubsubsecentry{#2.#3.#4.#5\labelspace#1}{#6}}
 \def\unnumbsubsubsecentry#1#2{\dosubsubsecentry{#1}{#2}}  \def\unnumbsubsubsecentry#1#2{\dosubsubsecentry{#1}{#2}}
   
   
 % This parameter controls the indentation of the various levels.  % This parameter controls the indentation of the various levels.
 \newdimen\tocindent \tocindent = 3pc  \newdimen\tocindent \tocindent = 3pc
   
 % Now for the actual typesetting. In all these, #1 is the text and #2 is the  % Now for the actual typesetting. In all these, #1 is the text and #2 is the
 % page number.  % page number.
 %  %
 % If the toc has to be broken over pages, we would want to be at chapters  % If the toc has to be broken over pages, we want it to be at chapters
 % if at all possible; hence the \penalty.  % if at all possible; hence the \penalty.
 \def\dochapentry#1#2{%  \def\dochapentry#1#2{%
    \penalty-300 \vskip\baselineskip     \penalty-300 \vskip1\baselineskip plus.33\baselineskip minus.25\baselineskip
    \begingroup     \begingroup
      \chapentryfonts       \chapentryfonts
      \tocentry{#1}{\dopageno{#2}}%       \tocentry{#1}{\dopageno{#2}}%
    \endgroup     \endgroup
    \nobreak\vskip .25\baselineskip     \nobreak\vskip .25\baselineskip plus.1\baselineskip
 }  }
   
 \def\dosecentry#1#2{\begingroup  \def\dosecentry#1#2{\begingroup
Line 2994 
Line 3266 
 % can't do that in the \entry macro, since index entries might consist  % can't do that in the \entry macro, since index entries might consist
 % of hyphenated-identifiers-that-do-not-fit-on-a-line-and-nothing-else.)  % of hyphenated-identifiers-that-do-not-fit-on-a-line-and-nothing-else.)
 %  %
   % \turnoffactive is for the sake of @" used for umlauts.
 \def\tocentry#1#2{\begingroup  \def\tocentry#1#2{\begingroup
   \hyphenpenalty = 10000    \vskip 0pt plus1pt % allow a little stretch for the sake of nice page breaks
   \entry{#1}{#2}%    \entry{\turnoffactive #1}{\turnoffactive #2}%
 \endgroup}  \endgroup}
   
 % Space between chapter (or whatever) number and the title.  % Space between chapter (or whatever) number and the title.
Line 3020 
Line 3293 
 \newbox\pushcharbox    \newbox\bullbox  \newbox\pushcharbox    \newbox\bullbox
 \newbox\equivbox       \newbox\errorbox  \newbox\equivbox       \newbox\errorbox
   
 \let\ptexequiv = \equiv  
   
 %{\tentt  %{\tentt
 %\global\setbox\dblarrowbox = \hbox to 1em{\hfil$\Rightarrow$\hfil}  %\global\setbox\dblarrowbox = \hbox to 1em{\hfil$\Rightarrow$\hfil}
 %\global\setbox\longdblarrowbox = \hbox to 1em{\hfil$\mapsto$\hfil}  %\global\setbox\longdblarrowbox = \hbox to 1em{\hfil$\mapsto$\hfil}
Line 3032 
Line 3303 
 %                                      depth .1ex\hfil}  %                                      depth .1ex\hfil}
 %}  %}
   
   % @point{}, @result{}, @expansion{}, @print{}, @equiv{}.
 \def\point{$\star$}  \def\point{$\star$}
   
 \def\result{\leavevmode\raise.15ex\hbox to 1em{\hfil$\Rightarrow$\hfil}}  \def\result{\leavevmode\raise.15ex\hbox to 1em{\hfil$\Rightarrow$\hfil}}
 \def\expansion{\leavevmode\raise.1ex\hbox to 1em{\hfil$\mapsto$\hfil}}  \def\expansion{\leavevmode\raise.1ex\hbox to 1em{\hfil$\mapsto$\hfil}}
 \def\print{\leavevmode\lower.1ex\hbox to 1em{\hfil$\dashv$\hfil}}  \def\print{\leavevmode\lower.1ex\hbox to 1em{\hfil$\dashv$\hfil}}
   
 \def\equiv{\leavevmode\lower.1ex\hbox to 1em{\hfil$\ptexequiv$\hfil}}  \def\equiv{\leavevmode\lower.1ex\hbox to 1em{\hfil$\ptexequiv$\hfil}}
   
 % Adapted from the TeXbook's \boxit.  % Adapted from the TeXbook's \boxit.
Line 3069 
Line 3339 
 \catcode `\$=3 \catcode `\&=4 \catcode `\#=6  \catcode `\$=3 \catcode `\&=4 \catcode `\#=6
 \catcode `\^=7 \catcode `\_=8 \catcode `\~=13 \let~=\tie  \catcode `\^=7 \catcode `\_=8 \catcode `\~=13 \let~=\tie
 \catcode `\%=14  \catcode `\%=14
 \catcode 43=12  \catcode 43=12 % plus
 \catcode`\"=12  \catcode`\"=12
 \catcode`\==12  \catcode`\==12
 \catcode`\|=12  \catcode`\|=12
Line 3077 
Line 3347 
 \catcode`\>=12  \catcode`\>=12
 \escapechar=`\\  \escapechar=`\\
 %  %
   \let\,=\ptexcomma
 \let\~=\ptextilde  \let\~=\ptextilde
 \let\{=\ptexlbrace  \let\{=\ptexlbrace
 \let\}=\ptexrbrace  \let\}=\ptexrbrace
 \let\.=\ptexdot  \let\.=\ptexdot
 \let\*=\ptexstar  \let\*=\ptexstar
 \let\dots=\ptexdots  \let\dots=\ptexdots
   \def\endldots{\mathinner{\ldots\ldots\ldots\ldots}}
   \def\enddots{\relax\ifmmode\endldots\else$\mathsurround=0pt \endldots\,$\fi}
 \def\@{@}%  \def\@{@}%
 \let\bullet=\ptexbullet  \let\bullet=\ptexbullet
 \let\b=\ptexb \let\c=\ptexc \let\i=\ptexi \let\t=\ptext \let\l=\ptexl  \let\b=\ptexb \let\c=\ptexc \let\i=\ptexi \let\t=\ptext
 \let\L=\ptexL  
 %  %
 \let\Etex=\endgroup}  \let\Etex=\endgroup}
   
Line 3251 
Line 3523 
   \let\Esmalllisp = \nonfillfinish    \let\Esmalllisp = \nonfillfinish
   \let\Esmallexample = \nonfillfinish    \let\Esmallexample = \nonfillfinish
   %    %
   % Smaller interline space and fonts for small examples.    % Smaller fonts for small examples.
   \setleading{10pt}%  
   \indexfonts \tt    \indexfonts \tt
   \rawbackslash % make \ output the \ character from the current font (tt)    \rawbackslash % make \ output the \ character from the current font (tt)
   \gobble    \gobble
Line 3341 
Line 3612 
   
 \gdef\functionparens{\boldbrax\let&=\amprm\parencount=0 }  \gdef\functionparens{\boldbrax\let&=\amprm\parencount=0 }
 \gdef\boldbrax{\let(=\opnr\let)=\clnr\let[=\lbrb\let]=\rbrb}  \gdef\boldbrax{\let(=\opnr\let)=\clnr\let[=\lbrb\let]=\rbrb}
   % This is used to turn on special parens
   % but make & act ordinary (given that it's active).
   \gdef\boldbraxnoamp{\let(=\opnr\let)=\clnr\let[=\lbrb\let]=\rbrb\let&=\ampnr}
   
 % Definitions of (, ) and & used in args for functions.  % Definitions of (, ) and & used in args for functions.
 % This is the definition of ( outside of all parentheses.  % This is the definition of ( outside of all parentheses.
Line 3549 
Line 3823 
 \def\deftypefunargs #1{%  \def\deftypefunargs #1{%
 % Expand, preventing hyphenation at `-' chars.  % Expand, preventing hyphenation at `-' chars.
 % Note that groups don't affect changes in \hyphenchar.  % Note that groups don't affect changes in \hyphenchar.
 \functionparens  % Use \boldbraxnoamp, not \functionparens, so that & is not special.
   \boldbraxnoamp
 \tclose{#1}% avoid \code because of side effects on active chars  \tclose{#1}% avoid \code because of side effects on active chars
 \interlinepenalty=10000  \interlinepenalty=10000
 \advance\rightskip by 0pt plus 1fil  \advance\rightskip by 0pt plus 1fil
Line 3776 
Line 4051 
   
 \def\deftpx #1 {\errmessage{@deftpx in invalid context}}  \def\deftpx #1 {\errmessage{@deftpx in invalid context}}
   
   
 \message{cross reference,}  \message{cross reference,}
 % Define cross-reference macros  % Define cross-reference macros
 \newwrite \auxfile  \newwrite \auxfile
Line 3783 
Line 4059 
 \newif\ifhavexrefs  % True if xref values are known.  \newif\ifhavexrefs  % True if xref values are known.
 \newif\ifwarnedxrefs  % True if we warned once that they aren't known.  \newif\ifwarnedxrefs  % True if we warned once that they aren't known.
   
   % @inforef is simple.
   \def\inforef #1{\inforefzzz #1,,,,**}
   \def\inforefzzz #1,#2,#3,#4**{\putwordSee{} \putwordInfo{} \putwordfile{} \file{\ignorespaces #3{}},
     node \samp{\ignorespaces#1{}}}
   
 % \setref{foo} defines a cross-reference point named foo.  % \setref{foo} defines a cross-reference point named foo.
   
 \def\setref#1{%  \def\setref#1{%
Line 3816 
Line 4097 
   \setbox0=\hbox{\printednodename}%    \setbox0=\hbox{\printednodename}%
   \ifdim \wd0 = 0pt    \ifdim \wd0 = 0pt
     % No printed node name was explicitly given.      % No printed node name was explicitly given.
     \ifx\SETxref-automatic-section-title\relax %      \expandafter\ifx\csname SETxref-automatic-section-title\endcsname\relax
         % Use the node name inside the square brackets.
         \def\printednodename{\ignorespaces #1}%
       \else
       % Use the actual chapter/section title appear inside        % Use the actual chapter/section title appear inside
       % the square brackets.  Use the real section title if we have it.        % the square brackets.  Use the real section title if we have it.
       \ifdim \wd1>0pt%        \ifdim \wd1>0pt%
Line 3825 
Line 4109 
       \else        \else
         \ifhavexrefs          \ifhavexrefs
           % We know the real title if we have the xref values.            % We know the real title if we have the xref values.
           \def\printednodename{\refx{#1-title}}%            \def\printednodename{\refx{#1-title}{}}%
         \else          \else
           % Otherwise just copy the Info node name.            % Otherwise just copy the Info node name.
           \def\printednodename{\ignorespaces #1}%            \def\printednodename{\ignorespaces #1}%
         \fi%          \fi%
       \fi        \fi
       \def\printednodename{#1-title}%  
     \else  
       % Use the node name inside the square brackets.  
       \def\printednodename{\ignorespaces #1}%  
     \fi      \fi
   \fi    \fi
   %    %
Line 4019 
Line 4299 
 % The trailing space in the following definition for supereject is  % The trailing space in the following definition for supereject is
 % vital for proper filling; pages come out unaligned when you do a  % vital for proper filling; pages come out unaligned when you do a
 % pagealignmacro call if that space before the closing brace is  % pagealignmacro call if that space before the closing brace is
 % removed.  % removed. (Generally, numeric constants should always be followed by a
   % space to prevent strange expansion errors.)
 \def\supereject{\par\penalty -20000\footnoteno =0 }  \def\supereject{\par\penalty -20000\footnoteno =0 }
   
 % @footnotestyle is meaningful for info output only..  % @footnotestyle is meaningful for info output only..
Line 4144 
Line 4425 
   
 % Set some numeric style parameters, for 8.5 x 11 format.  % Set some numeric style parameters, for 8.5 x 11 format.
   
 %\hsize = 6.5in  \hsize = 6in
   \hoffset = .25in
 \newdimen\defaultparindent \defaultparindent = 15pt  \newdimen\defaultparindent \defaultparindent = 15pt
 \parindent = \defaultparindent  \parindent = \defaultparindent
 \parskip 18pt plus 1pt  \parskip 3pt plus 2pt minus 1pt
 \setleading{15pt}  \setleading{13.2pt}
 \advance\topskip by 1.2cm  \advance\topskip by 1.2cm
   
   \chapheadingskip = 15pt plus 4pt minus 2pt
   \secheadingskip = 12pt plus 3pt minus 2pt
   \subsecheadingskip = 9pt plus 2pt minus 2pt
   
 % Prevent underfull vbox error messages.  % Prevent underfull vbox error messages.
 \vbadness=10000  \vbadness=10000
   
Line 4173 
Line 4459 
   
 % Use @smallbook to reset parameters for 7x9.5 format  (or else 7x9.25)  % Use @smallbook to reset parameters for 7x9.5 format  (or else 7x9.25)
 \def\smallbook{  \def\smallbook{
     \global\chapheadingskip = 15pt plus 4pt minus 2pt
 % These values for secheadingskip and subsecheadingskip are    \global\secheadingskip = 12pt plus 3pt minus 2pt
 % experiments.  RJC 7 Aug 1992    \global\subsecheadingskip = 9pt plus 2pt minus 2pt
 \global\secheadingskip = 17pt plus 6pt minus 3pt    %
 \global\subsecheadingskip = 14pt plus 6pt minus 3pt  
   
 \global\lispnarrowing = 0.3in  \global\lispnarrowing = 0.3in
 \setleading{12pt}  \setleading{12pt}
 \advance\topskip by -1cm  \advance\topskip by -1cm
 \global\parskip 3pt plus 1pt    \global\parskip 2pt plus 1pt
 \global\hsize = 5in  \global\hsize = 5in
 \global\vsize=7.5in  \global\vsize=7.5in
 \global\tolerance=700  \global\tolerance=700
Line 4190 
Line 4474 
 \global\contentsrightmargin=0pt  \global\contentsrightmargin=0pt
 \global\deftypemargin=0pt  \global\deftypemargin=0pt
 \global\defbodyindent=.5cm  \global\defbodyindent=.5cm
     %
 \global\pagewidth=\hsize  \global\pagewidth=\hsize
 \global\pageheight=\vsize  \global\pageheight=\vsize
     %
 \global\let\smalllisp=\smalllispx  \global\let\smalllisp=\smalllispx
 \global\let\smallexample=\smalllispx  \global\let\smallexample=\smalllispx
 \global\def\Esmallexample{\Esmalllisp}  \global\def\Esmallexample{\Esmalllisp}
Line 4219 
Line 4503 
 \global\pageheight=\vsize  \global\pageheight=\vsize
 }  }
   
   \bindingoffset=0pt
   \normaloffset=\hoffset
   \pagewidth=\hsize
   \pageheight=\vsize
   
 % Allow control of the text dimensions.  Parameters in order: textheight;  % Allow control of the text dimensions.  Parameters in order: textheight;
 % textwidth; \voffset; \hoffset (!); binding offset.  All require a dimension;  % textwidth; voffset; hoffset; binding offset; topskip.
   % All require a dimension;
 % header is additional; added length extends the bottom of the page.  % header is additional; added length extends the bottom of the page.
   
 \def\changepagesizes#1#2#3#4#5{  \def\changepagesizes#1#2#3#4#5#6{
  \global\vsize= #1   \global\vsize= #1
    \global\topskip= #6
  \advance\vsize by \topskip   \advance\vsize by \topskip
  \global\voffset= #3   \global\voffset= #3
  \global\hsize= #2   \global\hsize= #2
Line 4237 
Line 4528 
  \global\normaloffset= #4   \global\normaloffset= #4
  \global\bindingoffset= #5}   \global\bindingoffset= #5}
   
 % This layout is compatible with Latex on A4 paper.  % A specific text layout, 24x15cm overall, intended for A4 paper.  Top margin
   % 29mm, hence bottom margin 28mm, nominal side margin 3cm.
   \def\afourlatex
           {\global\tolerance=700
           \global\hfuzz=1pt
           \setleading{12pt}
           \global\parskip 15pt plus 1pt
           \advance\baselineskip by 1.6pt
           \changepagesizes{237mm}{150mm}{3.6mm}{3.6mm}{3mm}{7mm}
           }
   
 \def\afourlatex{\changepagesizes{22cm}{15cm}{7mm}{4.6mm}{5mm}}  % Use @afourwide to print on European A4 paper in wide format.
   \def\afourwide{\afourpaper
   \changepagesizes{9.5in}{6.5in}{\hoffset}{\normaloffset}{\bindingoffset}{7mm}}
   
 % Define macros to output various characters with catcode for normal text.  % Define macros to output various characters with catcode for normal text.
 \catcode`\"=\other  \catcode`\"=\other
Line 4288 
Line 4590 
 \catcode`\_=\active  \catcode`\_=\active
 \def_{\ifusingtt\normalunderscore\_}  \def_{\ifusingtt\normalunderscore\_}
 % Subroutine for the previous macro.  % Subroutine for the previous macro.
 \def\_{\lvvmode \kern.06em \vbox{\hrule width.3em height.1ex}}  \def\_{\leavevmode \kern.06em \vbox{\hrule width.3em height.1ex}}
   
 % \lvvmode is equivalent in function to \leavevmode.  
 % Using \leavevmode runs into trouble when written out to  
 % an index file due to the expansion of \leavevmode into ``\unhbox  
 % \voidb@x'' ---which looks to TeX like ``\unhbox \voidb\x'' due to our  
 % magic tricks with @.  
 \def\lvvmode{\vbox to 0pt{}}  
   
 \catcode`\|=\active  \catcode`\|=\active
 \def|{{\tt \char '174}}  \def|{{\tt \char '174}}
Line 4314 
Line 4609 
 {\catcode`\==\active  {\catcode`\==\active
 \global\def={{\tt \char 61}}}  \global\def={{\tt \char 61}}}
   
   \catcode`+=\active
   \catcode`\_=\active
   
   % If a .fmt file is being used, characters that might appear in a file
   % name cannot be active until we have parsed the command line.
   % So turn them off again, and have \everyjob (or @setfilename) turn them on.
   % \otherifyactive is called near the end of this file.
   \def\otherifyactive{\catcode`+=\other \catcode`\_=\other}
   
 \catcode`\@=0  \catcode`\@=0
   
 % \rawbackslashxx output one backslash character in current font  % \rawbackslashxx output one backslash character in current font
Line 4356 
Line 4660 
 @let>=@normalgreater  @let>=@normalgreater
 @let+=@normalplus}  @let+=@normalplus}
   
   % Make _ and + \other characters, temporarily.
   % This is canceled by @fixbackslash.
   @otherifyactive
   
 % If a .fmt file is being used, we don't want the `\input texinfo' to show up.  % If a .fmt file is being used, we don't want the `\input texinfo' to show up.
 % That is what \eatinput is for; after that, the `\' should revert to printing  % That is what \eatinput is for; after that, the `\' should revert to printing
 % a backslash.  % a backslash.
Line 4366 
Line 4674 
 % On the other hand, perhaps the file did not have a `\input texinfo'. Then  % On the other hand, perhaps the file did not have a `\input texinfo'. Then
 % the first `\{ in the file would cause an error. This macro tries to fix  % the first `\{ in the file would cause an error. This macro tries to fix
 % that, assuming it is called before the first `\' could plausibly occur.  % that, assuming it is called before the first `\' could plausibly occur.
   % Also back turn on active characters that might appear in the input
   % file name, in case not using a pre-dumped format.
 %  %
 @gdef@fixbackslash{@ifx\@eatinput @let\ = @normalbackslash @fi}  @gdef@fixbackslash{@ifx\@eatinput @let\ = @normalbackslash @fi
     @catcode`+=@active @catcode`@_=@active}
   
 %% These look ok in all fonts, so just make them not special.  The @rm below  %% These look ok in all fonts, so just make them not special.  The @rm below
 %% makes sure that the current font starts out as the newly loaded cmr10  %% makes sure that the current font starts out as the newly loaded cmr10


Generate output suitable for use with a patch program
Legend:
Removed from v.1.3  
changed lines
  Added in v.1.4

CVS Admin

Powered by ViewCVS 1.0-dev
(Powered by ViewCVS)

ViewCVS and CVS Help