summaryrefslogtreecommitdiff
path: root/editors
diff options
context:
space:
mode:
authorwiz <wiz>2000-12-16 13:54:50 +0000
committerwiz <wiz>2000-12-16 13:54:50 +0000
commite9eb5978e2ce0bda652a42390cd404f3edcd9663 (patch)
treecd8826215ee3ef5690c80ed93918b24c9e36b37b /editors
parent931229a8bcd39d37f7653bd386cc9e866c2079c3 (diff)
downloadpkgsrc-e9eb5978e2ce0bda652a42390cd404f3edcd9663.tar.gz
Don't patch $Revision$ in the file (otherwise this patch would never
apply cleanly).
Diffstat (limited to 'editors')
-rw-r--r--editors/mule/files/patch-sum4
-rw-r--r--editors/mule/patches/patch-bb7112
2 files changed, 2849 insertions, 4267 deletions
diff --git a/editors/mule/files/patch-sum b/editors/mule/files/patch-sum
index 7200ea8be2b..a469bc2c17c 100644
--- a/editors/mule/files/patch-sum
+++ b/editors/mule/files/patch-sum
@@ -1,4 +1,4 @@
-$NetBSD: patch-sum,v 1.2 2000/12/16 03:21:16 kei Exp $
+$NetBSD: patch-sum,v 1.3 2000/12/16 13:54:51 wiz Exp $
MD5 (patch-aa) = 7ea2769158c781897538a3e288731072
MD5 (patch-ab) = 30328117a0190ca42366961fd38c9c6d
@@ -22,4 +22,4 @@ MD5 (patch-av) = 78da6b62d9c1c00b56715d7f8a3ccf04
MD5 (patch-aw) = 1c619081c2ee3c55585c1ffc7acdc034
MD5 (patch-az) = 850d146d480411d2d2a66301fbe2fa51
MD5 (patch-ba) = 222cfdb4a3f3b48e6efc9acee272f466
-MD5 (patch-bb) = de69661cccaf18648cb9ef3129463a5a
+MD5 (patch-bb) = d7f830c0c5cd224d059df2f8720797e4
diff --git a/editors/mule/patches/patch-bb b/editors/mule/patches/patch-bb
index 3d9df958cbc..2aecb2b6d9e 100644
--- a/editors/mule/patches/patch-bb
+++ b/editors/mule/patches/patch-bb
@@ -1,4272 +1,2854 @@
-$NetBSD: patch-bb,v 1.2 2000/12/16 03:21:16 kei Exp $
+$NetBSD: patch-bb,v 1.3 2000/12/16 13:54:50 wiz Exp $
-*** man/texinfo.tex.orig Fri Oct 21 13:19:39 1994
---- man/texinfo.tex Sat Dec 16 12:02:00 2000
-***************
-*** 1,6 ****
-! %% TeX macros to handle texinfo files
-
-! % Copyright (C) 1985, 86, 88, 90, 91, 92, 93, 1994 Free Software Foundation, Inc.
-
- %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
---- 1,8 ----
-! %% TeX macros to handle Texinfo files.
-! %% Id: texinfo.tex,v 1.1.1.2 1997/09/24 19:26:42 gwr Exp
-
-! % Copyright (C) 1985, 86, 88, 90, 91, 92, 93,
-! % 94, 95, 96, 97 Free Software Foundation, Inc.
-
- %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
-***************
-*** 14,51 ****
-
- %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
-! %to the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139,
-! %USA.
-
-
- %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
- %what you give them. Help stamp out software-hoarding!
-
- % This automatically updates the version number based on RCS.
- \def\deftexinfoversion$#1: #2 ${\def\texinfoversion{#2}}
-! \deftexinfoversion$Revision: 1.2 $
- \message{Loading texinfo package [Version \texinfoversion]:}
-
-! % Print the version number if in a .fmt file.
-! \everyjob{\message{[Texinfo version \texinfoversion]}\message{}}
-
- % 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\ptexc=\c
- \let\ptexi=\i
- \let\ptext=\t
-- \let\ptexl=\l
-- \let\ptexL=\L
-
- % 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
---- 16,65 ----
-
- %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
-! %to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-! %Boston, MA 02111-1307, USA.
-
-
- %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
- %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.
- \def\deftexinfoversion$#1: #2 ${\def\texinfoversion{#2}}
-! \deftexinfoversion Revision: 1.1.1.2
- \message{Loading texinfo package [Version \texinfoversion]:}
-
-! % If in a .fmt file, print the version number
-! % 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.
-
- \let\ptexb=\b
-+ \let\ptexbullet=\bullet
- \let\ptexc=\c
-+ \let\ptexcomma=\,
-+ \let\ptexdot=\.
-+ \let\ptexdots=\dots
-+ \let\ptexend=\end
-+ \let\ptexequiv = \equiv
- \let\ptexi=\i
-+ \let\ptexlbrace=\{
-+ \let\ptexrbrace=\}
-+ \let\ptexstar=\*
- \let\ptext=\t
-
- % 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
-***************
-*** 53,61 ****
- % since \penalty is valid in vertical mode, we'd end up putting the
- % penalty on the vertical list instead of in the new paragraph.
- {\catcode`@ = 11
-! \gdef\tie{\leavevmode\penalty\@M\ }
- }
-! \let\~ = \tie % And make it available as @~.
-
- \message{Basics,}
- \chardef\other=12
---- 67,78 ----
- % since \penalty is valid in vertical mode, we'd end up putting the
- % penalty on the vertical list instead of in the new paragraph.
- {\catcode`@ = 11
-! % 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\ }
- }
-!
-
- \message{Basics,}
- \chardef\other=12
-***************
-*** 86,95 ****
- \hyphenation{eshell}
-
- % Margin to add to right of even pages, to left of odd pages.
-! \newdimen \bindingoffset \bindingoffset=0pt
-! \newdimen \normaloffset \normaloffset=\hoffset
- \newdimen\pagewidth \newdimen\pageheight
-- \pagewidth=\hsize \pageheight=\vsize
-
- % Sometimes it is convenient to have everything in the transcript file
- % and nothing on the terminal. We don't just call \tracingall here,
---- 103,111 ----
- \hyphenation{eshell}
-
- % Margin to add to right of even pages, to left of odd pages.
-! \newdimen \bindingoffset
-! \newdimen \normaloffset
- \newdimen\pagewidth \newdimen\pageheight
-
- % Sometimes it is convenient to have everything in the transcript file
- % and nothing on the terminal. We don't just call \tracingall here,
-***************
-*** 102,182 ****
- \showboxbreadth\maxdimen\showboxdepth\maxdimen
- }%
-
-! %---------------------Begin change-----------------------
- %
-! %%%% For @cropmarks command.
-! % Dimensions to add cropmarks at corners Added by P. A. MacKay, 12 Nov. 1986
- %
- \newdimen\cornerlong \newdimen\cornerthick
-! \newdimen \topandbottommargin
-! \newdimen \outerhsize \newdimen \outervsize
-! \cornerlong=1pc\cornerthick=.3pt % These set size of cropmarks
- \outerhsize=7in
- %\outervsize=9.5in
- % Alternative @smallbook page size is 9.25in
- \outervsize=9.25in
- \topandbottommargin=.75in
-! %
-! %---------------------End change-----------------------
-
- % \onepageout takes a vbox as an argument. Note that \pagecontents
-! % does insertions itself, but you have to call it yourself.
-! \chardef\PAGE=255 \output={\onepageout{\pagecontents\PAGE}}
-! \def\onepageout#1{\hoffset=\normaloffset
-! \ifodd\pageno \advance\hoffset by \bindingoffset
-! \else \advance\hoffset by -\bindingoffset\fi
-! {\escapechar=`\\\relax % makes sure backslash is used in output files.
-! \shipout\vbox{{\let\hsize=\pagewidth \makeheadline} \pagebody{#1}%
-! {\let\hsize=\pagewidth \makefootline}}}%
-! \advancepageno \ifnum\outputpenalty>-20000 \else\dosupereject\fi}
-!
-! %%%% For @cropmarks command %%%%
-!
-! % Here is a modification of the main output routine for Near East Publications
-! % This provides right-angle cropmarks at all four corners.
-! % The contents of the page are centerlined into the cropmarks,
-! % and any desired binding offset is added as an \hskip on either
-! % site of the centerlined box. (P. A. MacKay, 12 November, 1986)
-! %
-! \def\croppageout#1{\hoffset=0pt % make sure this doesn't mess things up
-! {\escapechar=`\\\relax % makes sure backslash is used in output files.
-! \shipout
-! \vbox to \outervsize{\hsize=\outerhsize
-! \vbox{\line{\ewtop\hfill\ewtop}}
-! \nointerlineskip
-! \line{\vbox{\moveleft\cornerthick\nstop}
-! \hfill
-! \vbox{\moveright\cornerthick\nstop}}
-! \vskip \topandbottommargin
-! \centerline{\ifodd\pageno\hskip\bindingoffset\fi
-! \vbox{
-! {\let\hsize=\pagewidth \makeheadline}
-! \pagebody{#1}
-! {\let\hsize=\pagewidth \makefootline}}
-! \ifodd\pageno\else\hskip\bindingoffset\fi}
-! \vskip \topandbottommargin plus1fill minus1fill
-! \boxmaxdepth\cornerthick
-! \line{\vbox{\moveleft\cornerthick\nsbot}
-! \hfill
-! \vbox{\moveright\cornerthick\nsbot}}
-! \nointerlineskip
-! \vbox{\line{\ewbot\hfill\ewbot}}
-! }}
- \advancepageno
-! \ifnum\outputpenalty>-20000 \else\dosupereject\fi}
-! %
-! % Do @cropmarks to get crop marks
-! \def\cropmarks{\let\onepageout=\croppageout }
-
- \def\pagebody#1{\vbox to\pageheight{\boxmaxdepth=\maxdepth #1}}
- {\catcode`\@ =11
- \gdef\pagecontents#1{\ifvoid\topins\else\unvbox\topins\fi
- \dimen@=\dp#1 \unvbox#1
- \ifvoid\footins\else\vskip\skip\footins\footnoterule \unvbox\footins\fi
- \ifr@ggedbottom \kern-\dimen@ \vfil \fi}
- }
-
-- %
- % Here are the rules for the cropmarks. Note that they are
- % offset so that the space between them is truly \outerhsize or \outervsize
- % (P. A. MacKay, 12 November, 1986)
---- 118,225 ----
- \showboxbreadth\maxdimen\showboxdepth\maxdimen
- }%
-
-! % For @cropmarks command.
-! % Do @cropmarks to get crop marks.
-! %
-! \newif\ifcropmarks
-! \let\cropmarks = \cropmarkstrue
- %
-! % Dimensions to add cropmarks at corners.
-! % Added by P. A. MacKay, 12 Nov. 1986
- %
- \newdimen\cornerlong \newdimen\cornerthick
-! \newdimen\topandbottommargin
-! \newdimen\outerhsize \newdimen\outervsize
-! \cornerlong=1pc\cornerthick=.3pt % These set size of cropmarks
- \outerhsize=7in
- %\outervsize=9.5in
- % Alternative @smallbook page size is 9.25in
- \outervsize=9.25in
- \topandbottommargin=.75in
-!
-! % Main output routine.
-! \chardef\PAGE = 255
-! \output = {\onepageout{\pagecontents\PAGE}}
-!
-! \newbox\headlinebox
-! \newbox\footlinebox
-
- % \onepageout takes a vbox as an argument. Note that \pagecontents
-! % does insertions, but you have to call it yourself.
-! \def\onepageout#1{%
-! \ifcropmarks \hoffset=0pt \else \hoffset=\normaloffset \fi
-! %
-! \ifodd\pageno \advance\hoffset by \bindingoffset
-! \else \advance\hoffset by -\bindingoffset\fi
-! %
-! % Do this outside of the \shipout so @code etc. will be expanded in
-! % the headline as they should be, not taken literally (outputting ''code).
-! \setbox\headlinebox = \vbox{\let\hsize=\pagewidth \makeheadline}%
-! \setbox\footlinebox = \vbox{\let\hsize=\pagewidth \makefootline}%
-! %
-! {%
-! % Have to do this stuff outside the \shipout because we want it to
-! % take effect in \write's, yet the group defined by the \vbox ends
-! % before the \shipout runs.
-! %
-! \escapechar = `\\ % use backslash in output files.
-! \indexdummies % don't expand commands in the output.
-! \normalturnoffactive % \ in index entries must not stay \, e.g., if
-! % the page break happens to be in the middle of an example.
-! \shipout\vbox{%
-! \ifcropmarks \vbox to \outervsize\bgroup
-! \hsize = \outerhsize
-! \line{\ewtop\hfil\ewtop}%
-! \nointerlineskip
-! \line{%
-! \vbox{\moveleft\cornerthick\nstop}%
-! \hfill
-! \vbox{\moveright\cornerthick\nstop}%
-! }%
-! \vskip\topandbottommargin
-! \line\bgroup
-! \hfil % center the page within the outer (page) hsize.
-! \ifodd\pageno\hskip\bindingoffset\fi
-! \vbox\bgroup
-! \fi
-! %
-! \unvbox\headlinebox
-! \pagebody{#1}%
-! \unvbox\footlinebox
-! %
-! \ifcropmarks
-! \egroup % end of \vbox\bgroup
-! \hfil\egroup % end of (centering) \line\bgroup
-! \vskip\topandbottommargin plus1fill minus1fill
-! \boxmaxdepth = \cornerthick
-! \line{%
-! \vbox{\moveleft\cornerthick\nsbot}%
-! \hfill
-! \vbox{\moveright\cornerthick\nsbot}%
-! }%
-! \nointerlineskip
-! \line{\ewbot\hfil\ewbot}%
-! \egroup % \vbox from first cropmarks clause
-! \fi
-! }% end of \shipout\vbox
-! }% end of group with \turnoffactive
- \advancepageno
-! \ifnum\outputpenalty>-20000 \else\dosupereject\fi
-! }
-!
-! \newinsert\margin \dimen\margin=\maxdimen
-
- \def\pagebody#1{\vbox to\pageheight{\boxmaxdepth=\maxdepth #1}}
- {\catcode`\@ =11
- \gdef\pagecontents#1{\ifvoid\topins\else\unvbox\topins\fi
-+ % marginal hacks, juha@viisa.uucp (Juha Takala)
-+ \ifvoid\margin\else % marginal info is present
-+ \rlap{\kern\hsize\vbox to\z@{\kern1pt\box\margin \vss}}\fi
- \dimen@=\dp#1 \unvbox#1
- \ifvoid\footins\else\vskip\skip\footins\footnoterule \unvbox\footins\fi
- \ifr@ggedbottom \kern-\dimen@ \vfil \fi}
- }
-
- % Here are the rules for the cropmarks. Note that they are
- % offset so that the space between them is truly \outerhsize or \outervsize
- % (P. A. MacKay, 12 November, 1986)
-***************
-*** 344,354 ****
- %\def\'{{'}}
-
- % Used to generate quoted braces.
--
- \def\mylbrace {{\tt \char '173}}
- \def\myrbrace {{\tt \char '175}}
- \let\{=\mylbrace
- \let\}=\myrbrace
-
- % @: forces normal size whitespace following.
- \def\:{\spacefactor=1000 }
---- 387,429 ----
- %\def\'{{'}}
-
- % Used to generate quoted braces.
- \def\mylbrace {{\tt \char '173}}
- \def\myrbrace {{\tt \char '175}}
- \let\{=\mylbrace
- \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.
- \def\:{\spacefactor=1000 }
-***************
-*** 359,364 ****
---- 434,448 ----
- % @. is an end-of-sentence period.
- \def\.{.\spacefactor=3000 }
-
-+ % @enddots{} is an end-of-sentence ellipsis.
-+ \gdef\enddots{$\mathinner{\ldotp\ldotp\ldotp\ldotp}$\spacefactor=3000}
-+
-+ % @! is an end-of-sentence bang.
-+ \gdef\!{!\spacefactor=3000 }
-+
-+ % @? is an end-of-sentence query.
-+ \gdef\?{?\spacefactor=3000 }
-+
- % @w prevents a word break. Without the \leavevmode, @w at the
- % beginning of a paragraph, when TeX is still in vertical mode, would
- % produce a whole line of output instead of starting the paragraph.
-***************
-*** 506,522 ****
- \def\nofillexdentyyy #1{{\advance \leftskip by -\exdentamount
- \leftline{\hskip\leftskip{\rm#1}}}}
-
- %\hbox{{\rm#1}}\hfil\break}}
-
- % @include file insert text of that file as input.
-!
-! \def\include{\parsearg\includezzz}
-! %Use \input\thisfile to avoid blank after \input, which may be an active
-! %char (in which case the blank would become the \input argument).
-! %The grouping keeps the value of \thisfile correct even when @include
-! %is nested.
-! \def\includezzz #1{\begingroup
-! \def\thisfile{#1}\input\thisfile
- \endgroup}
-
- \def\thisfile{}
---- 590,623 ----
- \def\nofillexdentyyy #1{{\advance \leftskip by -\exdentamount
- \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}}
-
- % @include file insert text of that file as input.
-! % Allow normal characters that we make active in the argument (a file name).
-! \def\include{\begingroup
-! \catcode`\\=12
-! \catcode`~=12
-! \catcode`^=12
-! \catcode`_=12
-! \catcode`|=12
-! \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}
-
- \def\thisfile{}
-***************
-*** 531,537 ****
- % @sp n outputs n lines of vertical space
-
- \def\sp{\parsearg\spxxx}
-! \def\spxxx #1{\par \vskip #1\baselineskip}
-
- % @comment ...line which is ignored...
- % @c is the same as @comment
---- 632,638 ----
- % @sp n outputs n lines of vertical space
-
- \def\sp{\parsearg\spxxx}
-! \def\spxxx #1{\vskip #1\baselineskip}
-
- % @comment ...line which is ignored...
- % @c is the same as @comment
-***************
-*** 544,549 ****
---- 645,653 ----
-
- \let\c=\comment
-
-+ % @paragraphindent is defined for the Info formatting commands only.
-+ \let\paragraphindent=\comment
-+
- % Prevent errors for section commands.
- % Used in @ignore and in failing conditionals.
- \def\ignoresections{%
-***************
-*** 578,583 ****
---- 682,688 ----
- % incorrectly.
- %
- \def\ignoremorecommands{%
-+ \let\defcodeindex = \relax
- \let\defcv = \relax
- \let\deffn = \relax
- \let\deffnx = \relax
-***************
-*** 601,606 ****
---- 706,720 ----
- \let\printindex = \relax
- \let\pxref = \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\lowersections = \relax
- \let\down = \relax
-***************
-*** 609,627 ****
- \let\set = \relax
- \let\clear = \relax
- \let\item = \relax
-- \let\message = \relax
- }
-
- % Ignore @ignore ... @end ignore.
- %
- \def\ignore{\doignore{ignore}}
-
-! % Also ignore @ifinfo, @menu, and @direntry text.
- %
- \def\ifinfo{\doignore{ifinfo}}
- \def\menu{\doignore{menu}}
- \def\direntry{\doignore{direntry}}
-
- % Ignore text until a line `@end #1'.
- %
- \def\doignore#1{\begingroup
---- 723,752 ----
- \let\set = \relax
- \let\clear = \relax
- \let\item = \relax
- }
-
- % Ignore @ignore ... @end ignore.
- %
- \def\ignore{\doignore{ignore}}
-
-! % Also ignore @ifinfo, @ifhtml, @html, @menu, and @direntry text.
- %
- \def\ifinfo{\doignore{ifinfo}}
-+ \def\ifhtml{\doignore{ifhtml}}
-+ \def\html{\doignore{html}}
- \def\menu{\doignore{menu}}
- \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'.
- %
- \def\doignore#1{\begingroup
-***************
-*** 653,663 ****
- \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{ Then upgrade your TeX installation if you can.}
- \immediate\write16{If you are stuck with version 3.0, run the}
- \immediate\write16{ script ``tex3patch'' from the Texinfo distribution}
- \immediate\write16{ to use a workaround.}
- \immediate\write16{}
-! \warnedobstrue
- \fi
- }
-
---- 778,789 ----
- \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{ 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{ script ``tex3patch'' from the Texinfo distribution}
- \immediate\write16{ to use a workaround.}
- \immediate\write16{}
-! \global\warnedobstrue
- \fi
- }
-
-***************
-*** 733,749 ****
- % 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
- % own to delimit the rest of the line, and then take it out again if we
-! % didn't need it.
- %
-! \def\set{\parsearg\setxxx}
- \def\setxxx#1{\setyyy#1 \endsetyyy}
- \def\setyyy#1 #2\endsetyyy{%
- \def\temp{#2}%
- \ifx\temp\empty \global\expandafter\let\csname SET#1\endcsname = \empty
- \else \setzzz{#1}#2\endsetzzz % Remove the trailing space \setxxx inserted.
- \fi
- }
-! \def\setzzz#1#2 \endsetzzz{\expandafter\xdef\csname SET#1\endcsname{#2}}
-
- % @clear VAR clears (i.e., unsets) the variable VAR.
- %
---- 859,882 ----
- % 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
- % own to delimit the rest of the line, and then take it out again if we
-! % didn't need it. Make sure the catcode of space is correct to avoid
-! % losing inside @example, for instance.
- %
-! \def\set{\begingroup\catcode` =10
-! \catcode`\-=12 \catcode`\_=12 % Allow - and _ in VAR.
-! \parsearg\setxxx}
- \def\setxxx#1{\setyyy#1 \endsetyyy}
- \def\setyyy#1 #2\endsetyyy{%
- \def\temp{#2}%
- \ifx\temp\empty \global\expandafter\let\csname SET#1\endcsname = \empty
- \else \setzzz{#1}#2\endsetzzz % Remove the trailing space \setxxx inserted.
- \fi
-+ \endgroup
- }
-! % 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.
- %
-***************
-*** 752,761 ****
-
- % @value{foo} gets the text saved in variable foo.
- %
-! \def\value#1{\expandafter
-! \ifx\csname SET#1\endcsname\relax
-! {\{No value for ``#1''\}}
-! \else \csname SET#1\endcsname \fi}
-
- % @ifset VAR ... @end ifset reads the `...' iff VAR has been defined
- % with @set.
---- 885,900 ----
-
- % @value{foo} gets the text saved in variable foo.
- %
-! \def\value{\begingroup
-! \catcode`\-=12 \catcode`\_=12 % Allow - and _ in VAR.
-! \valuexxx}
-! \def\valuexxx#1{%
-! \expandafter\ifx\csname SET#1\endcsname\relax
-! {\{No value for ``#1''\}}%
-! \else
-! \csname SET#1\endcsname
-! \fi
-! \endgroup}
-
- % @ifset VAR ... @end ifset reads the `...' iff VAR has been defined
- % with @set.
-***************
-*** 855,860 ****
---- 994,1000 ----
- \expandafter\expandafter\expandafter\appendixsetref{\lastnode}\fi
- \global\let\lastnode=\relax}
-
-+ % @refill is a no-op.
- \let\refill=\relax
-
- % @setfilename is done at the beginning of every texinfo file.
-***************
-*** 869,879 ****
- \comment % Ignore the actual filename.
- }
-
- \outer\def\bye{\pagealignmacro\tracingstats=1\ptexend}
-
-! \def\inforef #1{\inforefzzz #1,,,,**}
-! \def\inforefzzz #1,#2,#3,#4**{\putwordSee{} \putwordInfo{} \putwordfile{} \file{\ignorespaces #3{}},
-! node \samp{\ignorespaces#1{}}}
-
- \message{fonts,}
-
---- 1009,1032 ----
- \comment % Ignore the actual filename.
- }
-
-+ % @bye.
- \outer\def\bye{\pagealignmacro\tracingstats=1\ptexend}
-
-! % \def\macro#1{\begingroup\ignoresections\catcode`\#=6\def\macrotemp{#1}\parsearg\macroxxx}
-! % \def\macroxxx#1#2 \end macro{%
-! % \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,}
-
-***************
-*** 885,982 ****
- \def\sf{\fam=\sffam \tensf}
- \let\li = \sf % Sometimes we call it \li, not \sf.
-
- %% Try out Computer Modern fonts at \magstephalf
- \let\mainmagstep=\magstephalf
-
- \ifx\bigger\relax
- \let\mainmagstep=\magstep1
-! \font\textrm=cmr12
-! \font\texttt=cmtt12
- \else
-! \font\textrm=cmr10 scaled \mainmagstep
-! \font\texttt=cmtt10 scaled \mainmagstep
- \fi
- % Instead of cmb10, you many want to use cmbx10.
- % cmbx10 is a prettier font on its own, but cmb10
- % looks better when embedded in a line with cmr10.
-! \font\textbf=cmb10 scaled \mainmagstep
-! \font\textit=cmti10 scaled \mainmagstep
-! \font\textsl=cmsl10 scaled \mainmagstep
-! \font\textsf=cmss10 scaled \mainmagstep
-! \font\textsc=cmcsc10 scaled \mainmagstep
- \font\texti=cmmi10 scaled \mainmagstep
- \font\textsy=cmsy10 scaled \mainmagstep
-
- % A few fonts for @defun, etc.
-! \font\defbf=cmbx10 scaled \magstep1 %was 1314
-! \font\deftt=cmtt10 scaled \magstep1
- \def\df{\let\tentt=\deftt \let\tenbf = \defbf \bf}
-
-! % Fonts for indices and small examples.
- % We actually use the slanted font rather than the italic,
- % because texinfo normally uses the slanted fonts for that.
- % Do not make many font distinctions in general in the index, since they
- % aren't very useful.
-! \font\ninett=cmtt9
-! \font\indrm=cmr9
-! \font\indit=cmsl9
- \let\indsl=\indit
- \let\indtt=\ninett
- \let\indsf=\indrm
- \let\indbf=\indrm
-! \let\indsc=\indrm
- \font\indi=cmmi9
- \font\indsy=cmsy9
-
-! % Fonts for headings
-! \font\chaprm=cmbx12 scaled \magstep2
-! \font\chapit=cmti12 scaled \magstep2
-! \font\chapsl=cmsl12 scaled \magstep2
-! \font\chaptt=cmtt12 scaled \magstep2
-! \font\chapsf=cmss12 scaled \magstep2
- \let\chapbf=\chaprm
-! \font\chapsc=cmcsc10 scaled\magstep3
- \font\chapi=cmmi12 scaled \magstep2
- \font\chapsy=cmsy10 scaled \magstep3
-
-! \font\secrm=cmbx12 scaled \magstep1
-! \font\secit=cmti12 scaled \magstep1
-! \font\secsl=cmsl12 scaled \magstep1
-! \font\sectt=cmtt12 scaled \magstep1
-! \font\secsf=cmss12 scaled \magstep1
-! \font\secbf=cmbx12 scaled \magstep1
-! \font\secsc=cmcsc10 scaled\magstep2
- \font\seci=cmmi12 scaled \magstep1
- \font\secsy=cmsy10 scaled \magstep2
-
-! % \font\ssecrm=cmbx10 scaled \magstep1 % This size an font looked bad.
-! % \font\ssecit=cmti10 scaled \magstep1 % The letters were too crowded.
-! % \font\ssecsl=cmsl10 scaled \magstep1
-! % \font\ssectt=cmtt10 scaled \magstep1
-! % \font\ssecsf=cmss10 scaled \magstep1
-!
-! %\font\ssecrm=cmb10 scaled 1315 % Note the use of cmb rather than cmbx.
-! %\font\ssecit=cmti10 scaled 1315 % Also, the size is a little larger than
-! %\font\ssecsl=cmsl10 scaled 1315 % being scaled magstep1.
-! %\font\ssectt=cmtt10 scaled 1315
-! %\font\ssecsf=cmss10 scaled 1315
-
- %\let\ssecbf=\ssecrm
-
-! \font\ssecrm=cmbx12 scaled \magstephalf
-! \font\ssecit=cmti12 scaled \magstephalf
-! \font\ssecsl=cmsl12 scaled \magstephalf
-! \font\ssectt=cmtt12 scaled \magstephalf
-! \font\ssecsf=cmss12 scaled \magstephalf
-! \font\ssecbf=cmbx12 scaled \magstephalf
-! \font\ssecsc=cmcsc10 scaled \magstep1
- \font\sseci=cmmi12 scaled \magstephalf
- \font\ssecsy=cmsy10 scaled \magstep1
- % The smallcaps and symbol fonts should actually be scaled \magstep1.5,
- % but that is not a standard magnification.
-
- % Fonts for title page:
-! \font\titlerm = cmbx12 scaled \magstep3
- \let\authorrm = \secrm
-
- % In order for the font changes to affect most math symbols and letters,
---- 1038,1173 ----
- \def\sf{\fam=\sffam \tensf}
- \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
- \let\mainmagstep=\magstephalf
-
-+ % Set the font macro #1 to the font named #2, adding on the
-+ % specified font prefix (normally `cm').
-+ % #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.
-+ % To specify the font prefix, you must define \fontprefix
-+ % before you read in texinfo.tex.
-+ \ifx\fontprefix\undefined
-+ \def\fontprefix{cm}
-+ \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
- \let\mainmagstep=\magstep1
-! \setfont\textrm\rmshape{12}{1000}
-! \setfont\texttt\ttshape{12}{1000}
- \else
-! \setfont\textrm\rmshape{10}{\mainmagstep}
-! \setfont\texttt\ttshape{10}{\mainmagstep}
- \fi
- % Instead of cmb10, you many want to use cmbx10.
- % cmbx10 is a prettier font on its own, but cmb10
- % looks better when embedded in a line with cmr10.
-! \setfont\textbf\bfshape{10}{\mainmagstep}
-! \setfont\textit\itshape{10}{\mainmagstep}
-! \setfont\textsl\slshape{10}{\mainmagstep}
-! \setfont\textsf\sfshape{10}{\mainmagstep}
-! \setfont\textsc\scshape{10}{\mainmagstep}
-! \setfont\textttsl\ttslshape{10}{\mainmagstep}
- \font\texti=cmmi10 scaled \mainmagstep
- \font\textsy=cmsy10 scaled \mainmagstep
-
- % A few fonts for @defun, etc.
-! \setfont\defbf\bxshape{10}{\magstep1} %was 1314
-! \setfont\deftt\ttshape{10}{\magstep1}
- \def\df{\let\tentt=\deftt \let\tenbf = \defbf \bf}
-
-! % Fonts for indices and small examples (9pt).
- % We actually use the slanted font rather than the italic,
- % because texinfo normally uses the slanted fonts for that.
- % Do not make many font distinctions in general in the index, since they
- % aren't very useful.
-! \setfont\ninett\ttshape{9}{1000}
-! \setfont\indrm\rmshape{9}{1000}
-! \setfont\indit\slshape{9}{1000}
- \let\indsl=\indit
- \let\indtt=\ninett
-+ \let\indttsl=\ninett
- \let\indsf=\indrm
- \let\indbf=\indrm
-! \setfont\indsc\scshape{10}{900}
- \font\indi=cmmi9
- \font\indsy=cmsy9
-
-! % Chapter (and unnumbered) fonts (17.28pt).
-! \setfont\chaprm\rmbshape{12}{\magstep2}
-! \setfont\chapit\itbshape{10}{\magstep3}
-! \setfont\chapsl\slbshape{10}{\magstep3}
-! \setfont\chaptt\ttbshape{12}{\magstep2}
-! \setfont\chapttsl\ttslshape{10}{\magstep3}
-! \setfont\chapsf\sfbshape{12}{\magstep2}
- \let\chapbf=\chaprm
-! \setfont\chapsc\scbshape{10}{\magstep3}
- \font\chapi=cmmi12 scaled \magstep2
- \font\chapsy=cmsy10 scaled \magstep3
-
-! % Section fonts (14.4pt).
-! \setfont\secrm\rmbshape{12}{\magstep1}
-! \setfont\secit\itbshape{10}{\magstep2}
-! \setfont\secsl\slbshape{10}{\magstep2}
-! \setfont\sectt\ttbshape{12}{\magstep1}
-! \setfont\secttsl\ttslshape{10}{\magstep2}
-! \setfont\secsf\sfbshape{12}{\magstep1}
-! \let\secbf\secrm
-! \setfont\secsc\scbshape{10}{\magstep2}
- \font\seci=cmmi12 scaled \magstep1
- \font\secsy=cmsy10 scaled \magstep2
-
-! % \setfont\ssecrm\bxshape{10}{\magstep1} % This size an font looked bad.
-! % \setfont\ssecit\itshape{10}{\magstep1} % The letters were too crowded.
-! % \setfont\ssecsl\slshape{10}{\magstep1}
-! % \setfont\ssectt\ttshape{10}{\magstep1}
-! % \setfont\ssecsf\sfshape{10}{\magstep1}
-!
-! %\setfont\ssecrm\bfshape{10}{1315} % Note the use of cmb rather than cmbx.
-! %\setfont\ssecit\itshape{10}{1315} % Also, the size is a little larger than
-! %\setfont\ssecsl\slshape{10}{1315} % being scaled magstep1.
-! %\setfont\ssectt\ttshape{10}{1315}
-! %\setfont\ssecsf\sfshape{10}{1315}
-
- %\let\ssecbf=\ssecrm
-
-! % Subsection fonts (13.15pt).
-! \setfont\ssecrm\rmbshape{12}{\magstephalf}
-! \setfont\ssecit\itbshape{10}{1315}
-! \setfont\ssecsl\slbshape{10}{1315}
-! \setfont\ssectt\ttbshape{12}{\magstephalf}
-! \setfont\ssecttsl\ttslshape{10}{\magstep1}
-! \setfont\ssecsf\sfbshape{12}{\magstephalf}
-! \let\ssecbf\ssecrm
-! \setfont\ssecsc\scbshape{10}{\magstep1}
- \font\sseci=cmmi12 scaled \magstephalf
- \font\ssecsy=cmsy10 scaled \magstep1
- % The smallcaps and symbol fonts should actually be scaled \magstep1.5,
- % but that is not a standard magnification.
-
- % Fonts for title page:
-! \setfont\titlerm\rmbshape{12}{\magstep3}
- \let\authorrm = \secrm
-
- % In order for the font changes to affect most math symbols and letters,
-***************
-*** 995,1028 ****
- % The font-changing commands redefine the meanings of \tenSTYLE, instead
- % 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
-! % cases, not the current. Plain TeX does, for example,
-! % \def\bf{\fam=\bffam \tenbf} By redefining \tenbf, we obviate the need
-! % to redefine \bf itself.
- \def\textfonts{%
- \let\tenrm=\textrm \let\tenit=\textit \let\tensl=\textsl
- \let\tenbf=\textbf \let\tentt=\texttt \let\smallcaps=\textsc
-! \let\tensf=\textsf \let\teni=\texti \let\tensy=\textsy
- \resetmathfonts}
- \def\chapfonts{%
- \let\tenrm=\chaprm \let\tenit=\chapit \let\tensl=\chapsl
- \let\tenbf=\chapbf \let\tentt=\chaptt \let\smallcaps=\chapsc
-! \let\tensf=\chapsf \let\teni=\chapi \let\tensy=\chapsy
-! \resetmathfonts}
- \def\secfonts{%
- \let\tenrm=\secrm \let\tenit=\secit \let\tensl=\secsl
- \let\tenbf=\secbf \let\tentt=\sectt \let\smallcaps=\secsc
-! \let\tensf=\secsf \let\teni=\seci \let\tensy=\secsy
-! \resetmathfonts}
- \def\subsecfonts{%
- \let\tenrm=\ssecrm \let\tenit=\ssecit \let\tensl=\ssecsl
- \let\tenbf=\ssecbf \let\tentt=\ssectt \let\smallcaps=\ssecsc
-! \let\tensf=\ssecsf \let\teni=\sseci \let\tensy=\ssecsy
-! \resetmathfonts}
- \def\indexfonts{%
- \let\tenrm=\indrm \let\tenit=\indit \let\tensl=\indsl
- \let\tenbf=\indbf \let\tentt=\indtt \let\smallcaps=\indsc
-! \let\tensf=\indsf \let\teni=\indi \let\tensy=\indsy
-! \resetmathfonts}
-
- % Set up the default fonts, so we can use them for creating boxes.
- %
---- 1186,1220 ----
- % The font-changing commands redefine the meanings of \tenSTYLE, instead
- % 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
-! % cases, not the current font. Plain TeX does \def\bf{\fam=\bffam
-! % \tenbf}, for example. By redefining \tenbf, we obviate the need to
-! % redefine \bf itself.
- \def\textfonts{%
- \let\tenrm=\textrm \let\tenit=\textit \let\tensl=\textsl
- \let\tenbf=\textbf \let\tentt=\texttt \let\smallcaps=\textsc
-! \let\tensf=\textsf \let\teni=\texti \let\tensy=\textsy \let\tenttsl=\textttsl
- \resetmathfonts}
- \def\chapfonts{%
- \let\tenrm=\chaprm \let\tenit=\chapit \let\tensl=\chapsl
- \let\tenbf=\chapbf \let\tentt=\chaptt \let\smallcaps=\chapsc
-! \let\tensf=\chapsf \let\teni=\chapi \let\tensy=\chapsy \let\tenttsl=\chapttsl
-! \resetmathfonts \setleading{19pt}}
- \def\secfonts{%
- \let\tenrm=\secrm \let\tenit=\secit \let\tensl=\secsl
- \let\tenbf=\secbf \let\tentt=\sectt \let\smallcaps=\secsc
-! \let\tensf=\secsf \let\teni=\seci \let\tensy=\secsy \let\tenttsl=\secttsl
-! \resetmathfonts \setleading{16pt}}
- \def\subsecfonts{%
- \let\tenrm=\ssecrm \let\tenit=\ssecit \let\tensl=\ssecsl
- \let\tenbf=\ssecbf \let\tentt=\ssectt \let\smallcaps=\ssecsc
-! \let\tensf=\ssecsf \let\teni=\sseci \let\tensy=\ssecsy \let\tenttsl=\ssecttsl
-! \resetmathfonts \setleading{15pt}}
-! \let\subsubsecfonts = \subsecfonts % Maybe make sssec fonts scaled magstephalf?
- \def\indexfonts{%
- \let\tenrm=\indrm \let\tenit=\indit \let\tensl=\indsl
- \let\tenbf=\indbf \let\tentt=\indtt \let\smallcaps=\indsc
-! \let\tensf=\indsf \let\teni=\indi \let\tensy=\indsy \let\tenttsl=\indttsl
-! \resetmathfonts \setleading{12pt}}
-
- % Set up the default fonts, so we can use them for creating boxes.
+--- man/texinfo.tex.orig Fri Oct 21 05:19:39 1994
++++ man/texinfo.tex
+@@ -1,5 +1,7 @@
+-%% TeX macros to handle texinfo files
++%% TeX macros to handle Texinfo files.
++%% Id: texinfo.tex,v 1.1.1.2 1997/09/24 19:26:42 gwr Exp
+
+-% 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, 96, 97 Free Software Foundation, Inc.
+
+ %This texinfo.tex file is free software; you can redistribute it and/or
+@@ -15,6 +17,6 @@
+ %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
+-%to the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139,
+-%USA.
++%to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
++%Boston, MA 02111-1307, USA.
+
+
+@@ -23,4 +25,14 @@
+ %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.
+ \def\deftexinfoversion$#1: #2 ${\def\texinfoversion{#2}}
+@@ -28,23 +40,25 @@
+ \message{Loading texinfo package [Version \texinfoversion]:}
+
+-% Print the version number if in a .fmt file.
+-\everyjob{\message{[Texinfo version \texinfoversion]}\message{}}
++% If in a .fmt file, print the version number
++% 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.
+
+-\let\ptextilde=\~
+-\let\ptexlbrace=\{
+-\let\ptexrbrace=\}
+-\let\ptexdots=\dots
+-\let\ptexdot=\.
+-\let\ptexstar=\*
+-\let\ptexend=\end
+-\let\ptexbullet=\bullet
+ \let\ptexb=\b
++\let\ptexbullet=\bullet
+ \let\ptexc=\c
++\let\ptexcomma=\,
++\let\ptexdot=\.
++\let\ptexdots=\dots
++\let\ptexend=\end
++\let\ptexequiv = \equiv
+ \let\ptexi=\i
++\let\ptexlbrace=\{
++\let\ptexrbrace=\}
++\let\ptexstar=\*
+ \let\ptext=\t
+-\let\ptexl=\l
+-\let\ptexL=\L
+
+ % Be sure we're in horizontal mode when doing a tie, since we make space
+@@ -54,7 +68,10 @@
+ % penalty on the vertical list instead of in the new paragraph.
+ {\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 @~.
++
+
+ \message{Basics,}
+@@ -87,8 +104,7 @@
+
+ % Margin to add to right of even pages, to left of odd pages.
+-\newdimen \bindingoffset \bindingoffset=0pt
+-\newdimen \normaloffset \normaloffset=\hoffset
++\newdimen \bindingoffset
++\newdimen \normaloffset
+ \newdimen\pagewidth \newdimen\pageheight
+-\pagewidth=\hsize \pageheight=\vsize
+
+ % Sometimes it is convenient to have everything in the transcript file
+@@ -103,13 +119,17 @@
+ }%
+
+-%---------------------Begin change-----------------------
++% For @cropmarks command.
++% Do @cropmarks to get crop marks.
++%
++\newif\ifcropmarks
++\let\cropmarks = \cropmarkstrue
+ %
+-%%%% For @cropmarks command.
+-% Dimensions to add cropmarks at corners Added by P. A. MacKay, 12 Nov. 1986
++% Dimensions to add cropmarks at corners.
++% Added by P. A. MacKay, 12 Nov. 1986
+ %
+ \newdimen\cornerlong \newdimen\cornerthick
+-\newdimen \topandbottommargin
+-\newdimen \outerhsize \newdimen \outervsize
+-\cornerlong=1pc\cornerthick=.3pt % These set size of cropmarks
++\newdimen\topandbottommargin
++\newdimen\outerhsize \newdimen\outervsize
++\cornerlong=1pc\cornerthick=.3pt % These set size of cropmarks
+ \outerhsize=7in
+ %\outervsize=9.5in
+@@ -117,59 +137,83 @@
+ \outervsize=9.25in
+ \topandbottommargin=.75in
+-%
+-%---------------------End change-----------------------
++
++% Main output routine.
++\chardef\PAGE = 255
++\output = {\onepageout{\pagecontents\PAGE}}
++
++\newbox\headlinebox
++\newbox\footlinebox
+
+ % \onepageout takes a vbox as an argument. Note that \pagecontents
+-% does insertions itself, but you have to call it yourself.
+-\chardef\PAGE=255 \output={\onepageout{\pagecontents\PAGE}}
+-\def\onepageout#1{\hoffset=\normaloffset
+-\ifodd\pageno \advance\hoffset by \bindingoffset
+-\else \advance\hoffset by -\bindingoffset\fi
+-{\escapechar=`\\\relax % makes sure backslash is used in output files.
+-\shipout\vbox{{\let\hsize=\pagewidth \makeheadline} \pagebody{#1}%
+-{\let\hsize=\pagewidth \makefootline}}}%
+-\advancepageno \ifnum\outputpenalty>-20000 \else\dosupereject\fi}
+-
+-%%%% For @cropmarks command %%%%
+-
+-% Here is a modification of the main output routine for Near East Publications
+-% This provides right-angle cropmarks at all four corners.
+-% The contents of the page are centerlined into the cropmarks,
+-% and any desired binding offset is added as an \hskip on either
+-% site of the centerlined box. (P. A. MacKay, 12 November, 1986)
+-%
+-\def\croppageout#1{\hoffset=0pt % make sure this doesn't mess things up
+-{\escapechar=`\\\relax % makes sure backslash is used in output files.
+- \shipout
+- \vbox to \outervsize{\hsize=\outerhsize
+- \vbox{\line{\ewtop\hfill\ewtop}}
+- \nointerlineskip
+- \line{\vbox{\moveleft\cornerthick\nstop}
+- \hfill
+- \vbox{\moveright\cornerthick\nstop}}
+- \vskip \topandbottommargin
+- \centerline{\ifodd\pageno\hskip\bindingoffset\fi
+- \vbox{
+- {\let\hsize=\pagewidth \makeheadline}
+- \pagebody{#1}
+- {\let\hsize=\pagewidth \makefootline}}
+- \ifodd\pageno\else\hskip\bindingoffset\fi}
+- \vskip \topandbottommargin plus1fill minus1fill
+- \boxmaxdepth\cornerthick
+- \line{\vbox{\moveleft\cornerthick\nsbot}
+- \hfill
+- \vbox{\moveright\cornerthick\nsbot}}
+- \nointerlineskip
+- \vbox{\line{\ewbot\hfill\ewbot}}
+- }}
++% does insertions, but you have to call it yourself.
++\def\onepageout#1{%
++ \ifcropmarks \hoffset=0pt \else \hoffset=\normaloffset \fi
++ %
++ \ifodd\pageno \advance\hoffset by \bindingoffset
++ \else \advance\hoffset by -\bindingoffset\fi
++ %
++ % Do this outside of the \shipout so @code etc. will be expanded in
++ % the headline as they should be, not taken literally (outputting ''code).
++ \setbox\headlinebox = \vbox{\let\hsize=\pagewidth \makeheadline}%
++ \setbox\footlinebox = \vbox{\let\hsize=\pagewidth \makefootline}%
++ %
++ {%
++ % Have to do this stuff outside the \shipout because we want it to
++ % take effect in \write's, yet the group defined by the \vbox ends
++ % before the \shipout runs.
++ %
++ \escapechar = `\\ % use backslash in output files.
++ \indexdummies % don't expand commands in the output.
++ \normalturnoffactive % \ in index entries must not stay \, e.g., if
++ % the page break happens to be in the middle of an example.
++ \shipout\vbox{%
++ \ifcropmarks \vbox to \outervsize\bgroup
++ \hsize = \outerhsize
++ \line{\ewtop\hfil\ewtop}%
++ \nointerlineskip
++ \line{%
++ \vbox{\moveleft\cornerthick\nstop}%
++ \hfill
++ \vbox{\moveright\cornerthick\nstop}%
++ }%
++ \vskip\topandbottommargin
++ \line\bgroup
++ \hfil % center the page within the outer (page) hsize.
++ \ifodd\pageno\hskip\bindingoffset\fi
++ \vbox\bgroup
++ \fi
++ %
++ \unvbox\headlinebox
++ \pagebody{#1}%
++ \unvbox\footlinebox
++ %
++ \ifcropmarks
++ \egroup % end of \vbox\bgroup
++ \hfil\egroup % end of (centering) \line\bgroup
++ \vskip\topandbottommargin plus1fill minus1fill
++ \boxmaxdepth = \cornerthick
++ \line{%
++ \vbox{\moveleft\cornerthick\nsbot}%
++ \hfill
++ \vbox{\moveright\cornerthick\nsbot}%
++ }%
++ \nointerlineskip
++ \line{\ewbot\hfil\ewbot}%
++ \egroup % \vbox from first cropmarks clause
++ \fi
++ }% end of \shipout\vbox
++ }% end of group with \turnoffactive
+ \advancepageno
+- \ifnum\outputpenalty>-20000 \else\dosupereject\fi}
+-%
+-% Do @cropmarks to get crop marks
+-\def\cropmarks{\let\onepageout=\croppageout }
++ \ifnum\outputpenalty>-20000 \else\dosupereject\fi
++}
++
++\newinsert\margin \dimen\margin=\maxdimen
+
+ \def\pagebody#1{\vbox to\pageheight{\boxmaxdepth=\maxdepth #1}}
+ {\catcode`\@ =11
+ \gdef\pagecontents#1{\ifvoid\topins\else\unvbox\topins\fi
++% marginal hacks, juha@viisa.uucp (Juha Takala)
++\ifvoid\margin\else % marginal info is present
++ \rlap{\kern\hsize\vbox to\z@{\kern1pt\box\margin \vss}}\fi
+ \dimen@=\dp#1 \unvbox#1
+ \ifvoid\footins\else\vskip\skip\footins\footnoterule \unvbox\footins\fi
+@@ -177,5 +221,4 @@
+ }
+
+-%
+ % Here are the rules for the cropmarks. Note that they are
+ % offset so that the space between them is truly \outerhsize or \outervsize
+@@ -345,9 +388,41 @@
+
+ % Used to generate quoted braces.
+-
+ \def\mylbrace {{\tt \char '173}}
+ \def\myrbrace {{\tt \char '175}}
+ \let\{=\mylbrace
+ \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.
+@@ -360,4 +435,13 @@
+ \def\.{.\spacefactor=3000 }
+
++% @enddots{} is an end-of-sentence ellipsis.
++\gdef\enddots{$\mathinner{\ldotp\ldotp\ldotp\ldotp}$\spacefactor=3000}
++
++% @! is an end-of-sentence bang.
++\gdef\!{!\spacefactor=3000 }
++
++% @? is an end-of-sentence query.
++\gdef\?{?\spacefactor=3000 }
++
+ % @w prevents a word break. Without the \leavevmode, @w at the
+ % beginning of a paragraph, when TeX is still in vertical mode, would
+@@ -507,15 +591,32 @@
+ \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}}
+
+ % @include file insert text of that file as input.
+-
+-\def\include{\parsearg\includezzz}
+-%Use \input\thisfile to avoid blank after \input, which may be an active
+-%char (in which case the blank would become the \input argument).
+-%The grouping keeps the value of \thisfile correct even when @include
+-%is nested.
+-\def\includezzz #1{\begingroup
+-\def\thisfile{#1}\input\thisfile
++% Allow normal characters that we make active in the argument (a file name).
++\def\include{\begingroup
++ \catcode`\\=12
++ \catcode`~=12
++ \catcode`^=12
++ \catcode`_=12
++ \catcode`|=12
++ \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}
+
+@@ -532,5 +633,5 @@
+
+ \def\sp{\parsearg\spxxx}
+-\def\spxxx #1{\par \vskip #1\baselineskip}
++\def\spxxx #1{\vskip #1\baselineskip}
+
+ % @comment ...line which is ignored...
+@@ -545,4 +646,7 @@
+ \let\c=\comment
+
++% @paragraphindent is defined for the Info formatting commands only.
++\let\paragraphindent=\comment
++
+ % Prevent errors for section commands.
+ % Used in @ignore and in failing conditionals.
+@@ -579,4 +683,5 @@
+ %
+ \def\ignoremorecommands{%
++ \let\defcodeindex = \relax
+ \let\defcv = \relax
+ \let\deffn = \relax
+@@ -602,4 +707,13 @@
+ \let\pxref = \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\lowersections = \relax
+@@ -610,5 +724,4 @@
+ \let\clear = \relax
+ \let\item = \relax
+- \let\message = \relax
+ }
+
+@@ -617,10 +730,22 @@
+ \def\ignore{\doignore{ignore}}
+
+-% Also ignore @ifinfo, @menu, and @direntry text.
++% Also ignore @ifinfo, @ifhtml, @html, @menu, and @direntry text.
+ %
+ \def\ifinfo{\doignore{ifinfo}}
++\def\ifhtml{\doignore{ifhtml}}
++\def\html{\doignore{html}}
+ \def\menu{\doignore{menu}}
+ \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'.
+ %
+@@ -654,9 +779,10 @@
+ \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{ (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{ script ``tex3patch'' from the Texinfo distribution}
+ \immediate\write16{ to use a workaround.}
+ \immediate\write16{}
+- \warnedobstrue
++ \global\warnedobstrue
+ \fi
+ }
+@@ -734,7 +860,10 @@
+ % 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
+-% 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
++ \catcode`\-=12 \catcode`\_=12 % Allow - and _ in VAR.
++ \parsearg\setxxx}
+ \def\setxxx#1{\setyyy#1 \endsetyyy}
+ \def\setyyy#1 #2\endsetyyy{%
+@@ -743,6 +872,10 @@
+ \else \setzzz{#1}#2\endsetzzz % Remove the trailing space \setxxx inserted.
+ \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.
+@@ -753,8 +886,14 @@
+ % @value{foo} gets the text saved in variable foo.
+ %
+-\def\value#1{\expandafter
+- \ifx\csname SET#1\endcsname\relax
+- {\{No value for ``#1''\}}
+- \else \csname SET#1\endcsname \fi}
++\def\value{\begingroup
++ \catcode`\-=12 \catcode`\_=12 % Allow - and _ in VAR.
++ \valuexxx}
++\def\valuexxx#1{%
++ \expandafter\ifx\csname SET#1\endcsname\relax
++ {\{No value for ``#1''\}}%
++ \else
++ \csname SET#1\endcsname
++ \fi
++\endgroup}
+
+ % @ifset VAR ... @end ifset reads the `...' iff VAR has been defined
+@@ -856,4 +995,5 @@
+ \global\let\lastnode=\relax}
+
++% @refill is a no-op.
+ \let\refill=\relax
+
+@@ -870,9 +1010,22 @@
+ }
+
++% @bye.
+ \outer\def\bye{\pagealignmacro\tracingstats=1\ptexend}
+
+-\def\inforef #1{\inforefzzz #1,,,,**}
+-\def\inforefzzz #1,#2,#3,#4**{\putwordSee{} \putwordInfo{} \putwordfile{} \file{\ignorespaces #3{}},
+- node \samp{\ignorespaces#1{}}}
++% \def\macro#1{\begingroup\ignoresections\catcode`\#=6\def\macrotemp{#1}\parsearg\macroxxx}
++% \def\macroxxx#1#2 \end macro{%
++% \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,}
+@@ -886,89 +1039,127 @@
+ \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
+ \let\mainmagstep=\magstephalf
+
++% Set the font macro #1 to the font named #2, adding on the
++% specified font prefix (normally `cm').
++% #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.
++% To specify the font prefix, you must define \fontprefix
++% before you read in texinfo.tex.
++\ifx\fontprefix\undefined
++\def\fontprefix{cm}
++\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
+ \let\mainmagstep=\magstep1
+-\font\textrm=cmr12
+-\font\texttt=cmtt12
++\setfont\textrm\rmshape{12}{1000}
++\setfont\texttt\ttshape{12}{1000}
+ \else
+-\font\textrm=cmr10 scaled \mainmagstep
+-\font\texttt=cmtt10 scaled \mainmagstep
++\setfont\textrm\rmshape{10}{\mainmagstep}
++\setfont\texttt\ttshape{10}{\mainmagstep}
+ \fi
+ % Instead of cmb10, you many want to use cmbx10.
+ % cmbx10 is a prettier font on its own, but cmb10
+ % looks better when embedded in a line with cmr10.
+-\font\textbf=cmb10 scaled \mainmagstep
+-\font\textit=cmti10 scaled \mainmagstep
+-\font\textsl=cmsl10 scaled \mainmagstep
+-\font\textsf=cmss10 scaled \mainmagstep
+-\font\textsc=cmcsc10 scaled \mainmagstep
++\setfont\textbf\bfshape{10}{\mainmagstep}
++\setfont\textit\itshape{10}{\mainmagstep}
++\setfont\textsl\slshape{10}{\mainmagstep}
++\setfont\textsf\sfshape{10}{\mainmagstep}
++\setfont\textsc\scshape{10}{\mainmagstep}
++\setfont\textttsl\ttslshape{10}{\mainmagstep}
+ \font\texti=cmmi10 scaled \mainmagstep
+ \font\textsy=cmsy10 scaled \mainmagstep
+
+ % A few fonts for @defun, etc.
+-\font\defbf=cmbx10 scaled \magstep1 %was 1314
+-\font\deftt=cmtt10 scaled \magstep1
++\setfont\defbf\bxshape{10}{\magstep1} %was 1314
++\setfont\deftt\ttshape{10}{\magstep1}
+ \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,
+ % because texinfo normally uses the slanted fonts for that.
+ % Do not make many font distinctions in general in the index, since they
+ % aren't very useful.
+-\font\ninett=cmtt9
+-\font\indrm=cmr9
+-\font\indit=cmsl9
++\setfont\ninett\ttshape{9}{1000}
++\setfont\indrm\rmshape{9}{1000}
++\setfont\indit\slshape{9}{1000}
+ \let\indsl=\indit
+ \let\indtt=\ninett
++\let\indttsl=\ninett
+ \let\indsf=\indrm
+ \let\indbf=\indrm
+-\let\indsc=\indrm
++\setfont\indsc\scshape{10}{900}
+ \font\indi=cmmi9
+ \font\indsy=cmsy9
+
+-% Fonts for headings
+-\font\chaprm=cmbx12 scaled \magstep2
+-\font\chapit=cmti12 scaled \magstep2
+-\font\chapsl=cmsl12 scaled \magstep2
+-\font\chaptt=cmtt12 scaled \magstep2
+-\font\chapsf=cmss12 scaled \magstep2
++% Chapter (and unnumbered) fonts (17.28pt).
++\setfont\chaprm\rmbshape{12}{\magstep2}
++\setfont\chapit\itbshape{10}{\magstep3}
++\setfont\chapsl\slbshape{10}{\magstep3}
++\setfont\chaptt\ttbshape{12}{\magstep2}
++\setfont\chapttsl\ttslshape{10}{\magstep3}
++\setfont\chapsf\sfbshape{12}{\magstep2}
+ \let\chapbf=\chaprm
+-\font\chapsc=cmcsc10 scaled\magstep3
++\setfont\chapsc\scbshape{10}{\magstep3}
+ \font\chapi=cmmi12 scaled \magstep2
+ \font\chapsy=cmsy10 scaled \magstep3
+
+-\font\secrm=cmbx12 scaled \magstep1
+-\font\secit=cmti12 scaled \magstep1
+-\font\secsl=cmsl12 scaled \magstep1
+-\font\sectt=cmtt12 scaled \magstep1
+-\font\secsf=cmss12 scaled \magstep1
+-\font\secbf=cmbx12 scaled \magstep1
+-\font\secsc=cmcsc10 scaled\magstep2
++% Section fonts (14.4pt).
++\setfont\secrm\rmbshape{12}{\magstep1}
++\setfont\secit\itbshape{10}{\magstep2}
++\setfont\secsl\slbshape{10}{\magstep2}
++\setfont\sectt\ttbshape{12}{\magstep1}
++\setfont\secttsl\ttslshape{10}{\magstep2}
++\setfont\secsf\sfbshape{12}{\magstep1}
++\let\secbf\secrm
++\setfont\secsc\scbshape{10}{\magstep2}
+ \font\seci=cmmi12 scaled \magstep1
+ \font\secsy=cmsy10 scaled \magstep2
+
+-% \font\ssecrm=cmbx10 scaled \magstep1 % This size an font looked bad.
+-% \font\ssecit=cmti10 scaled \magstep1 % The letters were too crowded.
+-% \font\ssecsl=cmsl10 scaled \magstep1
+-% \font\ssectt=cmtt10 scaled \magstep1
+-% \font\ssecsf=cmss10 scaled \magstep1
+-
+-%\font\ssecrm=cmb10 scaled 1315 % Note the use of cmb rather than cmbx.
+-%\font\ssecit=cmti10 scaled 1315 % Also, the size is a little larger than
+-%\font\ssecsl=cmsl10 scaled 1315 % being scaled magstep1.
+-%\font\ssectt=cmtt10 scaled 1315
+-%\font\ssecsf=cmss10 scaled 1315
++% \setfont\ssecrm\bxshape{10}{\magstep1} % This size an font looked bad.
++% \setfont\ssecit\itshape{10}{\magstep1} % The letters were too crowded.
++% \setfont\ssecsl\slshape{10}{\magstep1}
++% \setfont\ssectt\ttshape{10}{\magstep1}
++% \setfont\ssecsf\sfshape{10}{\magstep1}
++
++%\setfont\ssecrm\bfshape{10}{1315} % Note the use of cmb rather than cmbx.
++%\setfont\ssecit\itshape{10}{1315} % Also, the size is a little larger than
++%\setfont\ssecsl\slshape{10}{1315} % being scaled magstep1.
++%\setfont\ssectt\ttshape{10}{1315}
++%\setfont\ssecsf\sfshape{10}{1315}
+
+ %\let\ssecbf=\ssecrm
+
+-\font\ssecrm=cmbx12 scaled \magstephalf
+-\font\ssecit=cmti12 scaled \magstephalf
+-\font\ssecsl=cmsl12 scaled \magstephalf
+-\font\ssectt=cmtt12 scaled \magstephalf
+-\font\ssecsf=cmss12 scaled \magstephalf
+-\font\ssecbf=cmbx12 scaled \magstephalf
+-\font\ssecsc=cmcsc10 scaled \magstep1
++% Subsection fonts (13.15pt).
++\setfont\ssecrm\rmbshape{12}{\magstephalf}
++\setfont\ssecit\itbshape{10}{1315}
++\setfont\ssecsl\slbshape{10}{1315}
++\setfont\ssectt\ttbshape{12}{\magstephalf}
++\setfont\ssecttsl\ttslshape{10}{\magstep1}
++\setfont\ssecsf\sfbshape{12}{\magstephalf}
++\let\ssecbf\ssecrm
++\setfont\ssecsc\scbshape{10}{\magstep1}
+ \font\sseci=cmmi12 scaled \magstephalf
+ \font\ssecsy=cmsy10 scaled \magstep1
+@@ -977,5 +1168,5 @@
+
+ % Fonts for title page:
+-\font\titlerm = cmbx12 scaled \magstep3
++\setfont\titlerm\rmbshape{12}{\magstep3}
+ \let\authorrm = \secrm
+
+@@ -996,32 +1187,33 @@
+ % 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
+-% cases, not the current. Plain TeX does, for example,
+-% \def\bf{\fam=\bffam \tenbf} By redefining \tenbf, we obviate the need
+-% to redefine \bf itself.
++% cases, not the current font. Plain TeX does \def\bf{\fam=\bffam
++% \tenbf}, for example. By redefining \tenbf, we obviate the need to
++% redefine \bf itself.
+ \def\textfonts{%
+ \let\tenrm=\textrm \let\tenit=\textit \let\tensl=\textsl
+ \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}
+ \def\chapfonts{%
+ \let\tenrm=\chaprm \let\tenit=\chapit \let\tensl=\chapsl
+ \let\tenbf=\chapbf \let\tentt=\chaptt \let\smallcaps=\chapsc
+- \let\tensf=\chapsf \let\teni=\chapi \let\tensy=\chapsy
+- \resetmathfonts}
++ \let\tensf=\chapsf \let\teni=\chapi \let\tensy=\chapsy \let\tenttsl=\chapttsl
++ \resetmathfonts \setleading{19pt}}
+ \def\secfonts{%
+ \let\tenrm=\secrm \let\tenit=\secit \let\tensl=\secsl
+ \let\tenbf=\secbf \let\tentt=\sectt \let\smallcaps=\secsc
+- \let\tensf=\secsf \let\teni=\seci \let\tensy=\secsy
+- \resetmathfonts}
++ \let\tensf=\secsf \let\teni=\seci \let\tensy=\secsy \let\tenttsl=\secttsl
++ \resetmathfonts \setleading{16pt}}
+ \def\subsecfonts{%
+ \let\tenrm=\ssecrm \let\tenit=\ssecit \let\tensl=\ssecsl
+ \let\tenbf=\ssecbf \let\tentt=\ssectt \let\smallcaps=\ssecsc
+- \let\tensf=\ssecsf \let\teni=\sseci \let\tensy=\ssecsy
+- \resetmathfonts}
++ \let\tensf=\ssecsf \let\teni=\sseci \let\tensy=\ssecsy \let\tenttsl=\ssecttsl
++ \resetmathfonts \setleading{15pt}}
++\let\subsubsecfonts = \subsecfonts % Maybe make sssec fonts scaled magstephalf?
+ \def\indexfonts{%
+ \let\tenrm=\indrm \let\tenit=\indit \let\tensl=\indsl
+ \let\tenbf=\indbf \let\tentt=\indtt \let\smallcaps=\indsc
+- \let\tensf=\indsf \let\teni=\indi \let\tensy=\indsy
+- \resetmathfonts}
++ \let\tensf=\indsf \let\teni=\indi \let\tensy=\indsy \let\tenttsl=\indttsl
++ \resetmathfonts \setleading{12pt}}
+
+ % Set up the default fonts, so we can use them for creating boxes.
+@@ -1033,7 +1225,7 @@
+
+ % Fonts for short table of contents.
+-\font\shortcontrm=cmr12
+-\font\shortcontbf=cmbx12
+-\font\shortcontsl=cmsl12
++\setfont\shortcontrm\rmshape{12}{1000}
++\setfont\shortcontbf\bxshape{12}{1000}
++\setfont\shortcontsl\slshape{12}{1000}
+
+ %% Add scribe-like font environments, plus @l for inline lisp (usually sans
+@@ -1062,11 +1254,19 @@
+
+ \def\t#1{%
+- {\tt \nohyphenation \rawbackslash \frenchspacing #1}%
++ {\tt \rawbackslash \frenchspacing #1}%
+ \null
+ }
+-\let\ttfont = \t
+-%\def\samp #1{`{\tt \rawbackslash \frenchspacing #1}'\null}
++\let\ttfont=\t
+ \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}
+
+@@ -1097,5 +1297,5 @@
+
+ % 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.
+
+@@ -1103,9 +1303,10 @@
+ % both hyphenation at - and hyphenation within words.
+ % 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.
+ {
+ \catcode`\-=\active
+ \catcode`\_=\active
++\catcode`\|=\active
+ \global\def\code{\begingroup \catcode`\-=\active \let-\codedash \catcode`\_=\active \let_\codeunder \codex}
+ % The following is used by \doprintindex to insure that long function names
+@@ -1113,10 +1314,15 @@
+ % read from the file, as \entry parses the arguments long before \code is
+ % ever called. -- mycroft
+-\global\def\indexbreaks{\catcode`\-=\active \let-\realdash \catcode`\_=\active \let_\realunder}
++% _ is always active; and it shouldn't be \let = to an _ that is a
++% subscript character anyway. Then, @cindex @samp{_} (for example)
++% fails. --karl
++\global\def\indexbreaks{%
++ \catcode`\-=\active \let-\realdash
+ }
++}
++
+ \def\realdash{-}
+-\def\realunder{_}
+ \def\codedash{-\discretionary{}{}{}}
+-\def\codeunder{\normalunderscore\discretionary{}{}{}}
++\def\codeunder{\ifusingtt{\normalunderscore\discretionary{}{}{}}{\_}}
+ \def\codex #1{\tclose{#1}\endgroup}
+
+@@ -1125,10 +1331,23 @@
+ % @kbd is like @code, except that if the argument is just one @key command,
+ % then @kbd has no effect.
+-
++%
+ \def\xkey{\key}
+ \def\kbdfoo#1#2#3\par{\def\one{#1}\def\three{#3}\def\threex{??}%
+ \ifx\one\xkey\ifx\threex\three \key{#2}%
+-\else\tclose{\look}\fi
+-\else\tclose{\look}\fi}
++\else{\tclose{\ttsl\look}}\fi
++\else{\tclose{\ttsl\look}}\fi}
++
++% @url, @email. Quotes do not seem necessary.
++\let\url=\code % perhaps include a hypertex \special eventually
++% rms does not like the angle brackets --karl, 17may97.
++%\def\email#1{$\langle${\tt #1}$\rangle$}
++\let\email=\code
++
++% 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
+@@ -1140,10 +1359,17 @@
+ \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.
+-\def\sc#1{{\smallcaps#1}} % smallcaps font
+-\def\ii#1{{\it #1}} % italic font
++\def\sc#1{{\smallcaps#1}} % smallcaps font
++\def\ii#1{{\it #1}} % italic font
++
++% @pounds{} is a sterling sign.
++\def\pounds{{\it\$}}
++
+
+ \message{page headings,}
+@@ -1160,5 +1386,5 @@
+ \def\shorttitlepage{\parsearg\shorttitlepagezzz}
+ \def\shorttitlepagezzz #1{\begingroup\hbox{}\vskip 1.5in \chaprm \centerline{#1}%
+- \endgroup\page\hbox{}\page}
++ \endgroup\page\hbox{}\page}
+
+ \def\titlepage{\begingroup \parindent=0pt \textfonts
+@@ -1177,7 +1403,7 @@
+ \def\title{\parsearg\titlezzz}%
+ \def\titlezzz##1{\leftline{\titlefont{##1}}
+- % print a rule at the page bottom also.
+- \finishedtitlepagefalse
+- \vskip4pt \hrule height 4pt width \hsize \vskip4pt}%
++ % print a rule at the page bottom also.
++ \finishedtitlepagefalse
++ \vskip4pt \hrule height 4pt width \hsize \vskip4pt}%
+ % No rule at page bottom unless we print one at the top with @title.
+ \finishedtitlepagetrue
+@@ -1197,5 +1423,5 @@
+ \def\page{%
+ \iffinishedtitlepage\else
+- \finishtitlepage
++ \finishtitlepage
+ \fi
+ \oldpage
+@@ -1285,12 +1511,13 @@
+ }% unbind the catcode of @.
+
+-% @headings double turns headings on for double-sided printing.
+-% @headings single turns headings on for single-sided printing.
+-% @headings off turns them off.
+-% @headings on same as @headings double, retained for compatibility.
+-% @headings after turns on double-sided headings after this page.
+-% @headings doubleafter turns on double-sided headings after this page.
++% @headings double turns headings on for double-sided printing.
++% @headings single turns headings on for single-sided printing.
++% @headings off turns them off.
++% @headings on same as @headings double, retained for compatibility.
++% @headings after 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.
+-% 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}
+@@ -1306,5 +1533,4 @@
+ % edge of all pages.
+ \def\HEADINGSdouble{
+-%\pagealignmacro
+ \global\pageno=1
+ \global\evenfootline={\hfil}
+@@ -1312,9 +1538,11 @@
+ \global\evenheadline={\line{\folio\hfil\thistitle}}
+ \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,
+ % page number on top right.
+ \def\HEADINGSsingle{
+-%\pagealignmacro
+ \global\pageno=1
+ \global\evenfootline={\hfil}
+@@ -1322,4 +1550,5 @@
+ \global\evenheadline={\line{\thischapter\hfil\folio}}
+ \global\oddheadline={\line{\thischapter\hfil\folio}}
++\global\let\contentsalignmacro = \chappager
+ }
+ \def\HEADINGSon{\HEADINGSdouble}
+@@ -1332,4 +1561,5 @@
+ \global\evenheadline={\line{\folio\hfil\thistitle}}
+ \global\oddheadline={\line{\thischapter\hfil\folio}}
++\global\let\contentsalignmacro = \chapoddpage
+ }
+
+@@ -1340,4 +1570,5 @@
+ \global\evenheadline={\line{\thischapter\hfil\folio}}
+ \global\oddheadline={\line{\thischapter\hfil\folio}}
++\global\let\contentsalignmacro = \chappager
+ }
+
+@@ -1363,4 +1594,5 @@
+ \def\settitlezzz #1{\gdef\thistitle{#1}}
+
++
+ \message{tables,}
+
+@@ -1395,5 +1627,5 @@
+ \newif\ifitemxneedsnegativevskip
+
+-\def\itemxpar{\par\ifitemxneedsnegativevskip\vskip-\parskip\nobreak\fi}
++\def\itemxpar{\par\ifitemxneedsnegativevskip\nobreak\vskip-\parskip\nobreak\fi}
+
+ \def\internalBitem{\smallbreak \parsearg\itemzzz}
+@@ -1502,5 +1734,5 @@
+ \aboveenvbreak %
+ \begingroup %
+-\def\Edescription{\Etable}% Neccessary kludge.
++\def\Edescription{\Etable}% Necessary kludge.
+ \let\itemindex=#1%
+ \ifnum 0#3>0 \advance \leftskip by #3\mil \fi %
+@@ -1659,5 +1891,5 @@
+ \advance\itemno by 1
+ {\let\par=\endgraf \smallbreak}%
+-\ifhmode \errmessage{\in hmode at itemizeitem}\fi
++\ifhmode \errmessage{In hmode at itemizeitem}\fi
+ {\parskip=0in \hskip 0pt
+ \hbox to 0pt{\hss \itemcontents\hskip \itemmargin}%
+@@ -1666,8 +1898,8 @@
+
+ % @multitable macros
+-% Amy Hendrickson, 8/18/94
++% Amy Hendrickson, 8/18/94, 3/6/96
+ %
+-% @multitable ... @endmultitable will make as many columns as desired.
+-% Contents of each column will wrap at width given in preamble. Width
++% @multitable ... @end multitable will make as many columns as desired.
++% Contents of each column will wrap at width given in preamble. Width
+ % can be specified either with sample text given in a template line,
+ % or in percent of \hsize, the current width of text on page.
+@@ -1677,24 +1909,34 @@
+ % To make preamble:
+ %
+-% Either define widths of columns in terms of percent of \hsize:
+-% @multitable @percentofhsize .2 .3 .5
++% Either define widths of columns in terms of percent of \hsize:
++% @multitable @columnfractions .25 .3 .45
+ % @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
+ % columns as desired.
+
++
+ % Or use a template:
+ % @multitable {Column 1 template} {Column 2 template} {Column 3 template}
+ % @item ...
+ % 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
+ % with nothing between them for as many times as empty columns are needed,
+ % 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.
+
+@@ -1703,34 +1945,36 @@
+ % @multitable {Column 1 template} {Column 2 template} {Column 3 template}
+ % @item first col stuff @tab second col stuff @tab third col
+-% @item
+-% first col stuff
+-% @tab
+-% second col stuff
+-% @tab
+-% third col
+-% @item first col stuff @tab second col stuff
++% @item
++% first col stuff
++% @tab
++% second col stuff
++% @tab
++% third col
++% @item first col stuff @tab second col stuff
+ % @tab Many paragraphs of text may be used in any column.
+-%
++%
+ % They will wrap at the width determined by the template.
+ % @item@tab@tab This will be in third column.
+-% @endmultitable
++% @end multitable
+
+ % Default dimensions may be reset by user.
+-% @intableparskip will set vertical space between paragraphs in table.
+-% @intableparindent will set paragraph indent in table.
+-% @spacebetweencols will set horizontal space to be left between columns.
+-% @spacebetweenlines will set vertical space to be left between lines.
++% @multitableparskip is vertical space between paragraphs in table.
++% @multitableparindent is paragraph indent in table.
++% @multitablecolmargin is horizontal space to be left between columns.
++% @multitablelinespace is space to leave between table items, baseline
++% to baseline.
++% 0pt means it depends on current normal line spacing.
+
+ %%%%
+-% Dimensions
++% Dimensions
+
+-\newdimen\intableparskip
+-\newdimen\intableparindent
+-\newdimen\spacebetweencols
+-\newdimen\spacebetweenlines
+-\intableparskip=0pt
+-\intableparindent=6pt
+-\spacebetweencols=12pt
+-\spacebetweenlines=12pt
++\newskip\multitableparskip
++\newskip\multitableparindent
++\newdimen\multitablecolspace
++\newskip\multitablelinespace
++\multitableparskip=0pt
++\multitableparindent=6pt
++\multitablecolspace=12pt
++\multitablelinespace=0pt
+
+ %%%%
+@@ -1738,58 +1982,71 @@
+ \let\endsetuptable\relax
+ \def\xendsetuptable{\endsetuptable}
+-\let\percentofhsize\relax
+-\def\xpercentofhsize{\percentofhsize}
++\let\columnfractions\relax
++\def\xcolumnfractions{\columnfractions}
+ \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
+ \def\setuptable#1{\def\firstarg{#1}%
+ \ifx\firstarg\xendsetuptable\let\go\relax%
+ \else
+- \ifx\firstarg\xpercentofhsize\global\setpercenttrue%
++ \ifx\firstarg\xcolumnfractions\global\setpercenttrue%
+ \else
+ \ifsetpercent
+- \if#1.\else%
+- \global\advance\colcount by1 %
+- \expandafter\xdef\csname col\the\colcount\endcsname{.#1\hsize}%
+- \fi
++ \let\go\pickupwholefraction % In this case arg of setuptable
++ % is the decimal point before the
++ % number given in percent of hsize.
++ % We don't need this so we don't use it.
+ \else
+ \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}%
+ \fi%
+ \fi%
+- \let\go\setuptable%
++\ifx\go\pickupwholefraction\else\let\go\setuptable\fi%
+ \fi\go}
++
+ %%%%
+ % 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 ... @end multitable definitions:
++
++\def\multitable{\parsearg\dotable}
+
+-\def\multitable#1\item{\bgroup
++\def\dotable#1{\bgroup
+ \let\item\cr
+ \tolerance=9500
+ \hbadness=9500
+-\parskip=\intableparskip
+-\parindent=\intableparindent
++\setmultitablespacing
++\parskip=\multitableparskip
++\parindent=\multitableparindent
+ \overfullrule=0pt
+ \global\colcount=0\relax%
+ \def\Emultitable{\global\setpercentfalse\global\everycr{}\cr\egroup\egroup}%
+ % 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.
+-\global\colcount=0\relax%
++\global\colcount=0\relax%
%
-***************
-*** 1032,1040 ****
- \newcount\fontdepth \fontdepth=0
-
- % Fonts for short table of contents.
-! \font\shortcontrm=cmr12
-! \font\shortcontbf=cmbx12
-! \font\shortcontsl=cmsl12
-
- %% Add scribe-like font environments, plus @l for inline lisp (usually sans
- %% serif) and @ii for TeX italic
---- 1224,1232 ----
- \newcount\fontdepth \fontdepth=0
-
- % Fonts for short table of contents.
-! \setfont\shortcontrm\rmshape{12}{1000}
-! \setfont\shortcontbf\bxshape{12}{1000}
-! \setfont\shortcontsl\slshape{12}{1000}
-
- %% Add scribe-like font environments, plus @l for inline lisp (usually sans
- %% serif) and @ii for TeX italic
-***************
-*** 1061,1073 ****
- \def\restorehyphenation{\hyphenchar\font = `- }
-
- \def\t#1{%
-! {\tt \nohyphenation \rawbackslash \frenchspacing #1}%
- \null
- }
-! \let\ttfont = \t
-! %\def\samp #1{`{\tt \rawbackslash \frenchspacing #1}'\null}
- \def\samp #1{`\tclose{#1}'\null}
-! \def\key #1{{\tt \nohyphenation \uppercase{#1}}\null}
- \def\ctrl #1{{\tt \rawbackslash \hat}#1}
-
- \let\file=\samp
---- 1253,1273 ----
- \def\restorehyphenation{\hyphenchar\font = `- }
-
- \def\t#1{%
-! {\tt \rawbackslash \frenchspacing #1}%
- \null
- }
-! \let\ttfont=\t
- \def\samp #1{`\tclose{#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}
-
- \let\file=\samp
-***************
-*** 1096,1135 ****
- }
-
- % We *must* turn on hyphenation at `-' and `_' in \code.
-! % Otherwise, it is too hard to avoid overful hboxes
- % in the Emacs manual, the Library manual, etc.
-
- % Unfortunately, TeX uses one parameter (\hyphenchar) to control
- % both hyphenation at - and hyphenation within words.
- % We must therefore turn them both off (\tclose does that)
-! % and arrange explicitly to hyphenate an a dash.
- % -- rms.
- {
- \catcode`\-=\active
- \catcode`\_=\active
- \global\def\code{\begingroup \catcode`\-=\active \let-\codedash \catcode`\_=\active \let_\codeunder \codex}
- % The following is used by \doprintindex to insure that long function names
- % wrap around. It is necessary for - and _ to be active before the index is
- % read from the file, as \entry parses the arguments long before \code is
- % ever called. -- mycroft
-! \global\def\indexbreaks{\catcode`\-=\active \let-\realdash \catcode`\_=\active \let_\realunder}
- }
- \def\realdash{-}
-- \def\realunder{_}
- \def\codedash{-\discretionary{}{}{}}
-! \def\codeunder{\normalunderscore\discretionary{}{}{}}
- \def\codex #1{\tclose{#1}\endgroup}
-
- %\let\exp=\tclose %Was temporary
-
- % @kbd is like @code, except that if the argument is just one @key command,
- % then @kbd has no effect.
-!
- \def\xkey{\key}
- \def\kbdfoo#1#2#3\par{\def\one{#1}\def\three{#3}\def\threex{??}%
- \ifx\one\xkey\ifx\threex\three \key{#2}%
-! \else\tclose{\look}\fi
-! \else\tclose{\look}\fi}
-
- % 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
---- 1296,1354 ----
- }
-
- % We *must* turn on hyphenation at `-' and `_' in \code.
-! % Otherwise, it is too hard to avoid overfull hboxes
- % in the Emacs manual, the Library manual, etc.
-
- % Unfortunately, TeX uses one parameter (\hyphenchar) to control
- % both hyphenation at - and hyphenation within words.
- % We must therefore turn them both off (\tclose does that)
-! % and arrange explicitly to hyphenate at a dash.
- % -- rms.
- {
- \catcode`\-=\active
- \catcode`\_=\active
-+ \catcode`\|=\active
- \global\def\code{\begingroup \catcode`\-=\active \let-\codedash \catcode`\_=\active \let_\codeunder \codex}
- % The following is used by \doprintindex to insure that long function names
- % wrap around. It is necessary for - and _ to be active before the index is
- % read from the file, as \entry parses the arguments long before \code is
- % ever called. -- mycroft
-! % _ is always active; and it shouldn't be \let = to an _ that is a
-! % subscript character anyway. Then, @cindex @samp{_} (for example)
-! % fails. --karl
-! \global\def\indexbreaks{%
-! \catcode`\-=\active \let-\realdash
- }
-+ }
-+
- \def\realdash{-}
- \def\codedash{-\discretionary{}{}{}}
-! \def\codeunder{\ifusingtt{\normalunderscore\discretionary{}{}{}}{\_}}
- \def\codex #1{\tclose{#1}\endgroup}
-
- %\let\exp=\tclose %Was temporary
-
- % @kbd is like @code, except that if the argument is just one @key command,
- % then @kbd has no effect.
-! %
- \def\xkey{\key}
- \def\kbdfoo#1#2#3\par{\def\one{#1}\def\three{#3}\def\threex{??}%
- \ifx\one\xkey\ifx\threex\three \key{#2}%
-! \else{\tclose{\ttsl\look}}\fi
-! \else{\tclose{\ttsl\look}}\fi}
-!
-! % @url, @email. Quotes do not seem necessary.
-! \let\url=\code % perhaps include a hypertex \special eventually
-! % rms does not like the angle brackets --karl, 17may97.
-! %\def\email#1{$\langle${\tt #1}$\rangle$}
-! \let\email=\code
-!
-! % 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
- % argument is to make the input look right: @dmn{pt} instead of
-***************
-*** 1139,1150 ****
-
- \def\kbd#1{\def\look{#1}\expandafter\kbdfoo\look??\par}
-
-! \def\l#1{{\li #1}\null} %
-
-! \def\r#1{{\rm #1}} % roman font
- % Use of \lowercase was suggested.
-! \def\sc#1{{\smallcaps#1}} % smallcaps font
-! \def\ii#1{{\it #1}} % italic font
-
- \message{page headings,}
-
---- 1358,1376 ----
-
- \def\kbd#1{\def\look{#1}\expandafter\kbdfoo\look??\par}
-
-! % @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
- % Use of \lowercase was suggested.
-! \def\sc#1{{\smallcaps#1}} % smallcaps font
-! \def\ii#1{{\it #1}} % italic font
-!
-! % @pounds{} is a sterling sign.
-! \def\pounds{{\it\$}}
-!
-
- \message{page headings,}
-
-***************
-*** 1159,1165 ****
-
- \def\shorttitlepage{\parsearg\shorttitlepagezzz}
- \def\shorttitlepagezzz #1{\begingroup\hbox{}\vskip 1.5in \chaprm \centerline{#1}%
-! \endgroup\page\hbox{}\page}
-
- \def\titlepage{\begingroup \parindent=0pt \textfonts
- \let\subtitlerm=\tenrm
---- 1385,1391 ----
-
- \def\shorttitlepage{\parsearg\shorttitlepagezzz}
- \def\shorttitlepagezzz #1{\begingroup\hbox{}\vskip 1.5in \chaprm \centerline{#1}%
-! \endgroup\page\hbox{}\page}
-
- \def\titlepage{\begingroup \parindent=0pt \textfonts
- \let\subtitlerm=\tenrm
-***************
-*** 1176,1184 ****
- % Now you can print the title using @title.
- \def\title{\parsearg\titlezzz}%
- \def\titlezzz##1{\leftline{\titlefont{##1}}
-! % print a rule at the page bottom also.
-! \finishedtitlepagefalse
-! \vskip4pt \hrule height 4pt width \hsize \vskip4pt}%
- % No rule at page bottom unless we print one at the top with @title.
- \finishedtitlepagetrue
- %
---- 1402,1410 ----
- % Now you can print the title using @title.
- \def\title{\parsearg\titlezzz}%
- \def\titlezzz##1{\leftline{\titlefont{##1}}
-! % print a rule at the page bottom also.
-! \finishedtitlepagefalse
-! \vskip4pt \hrule height 4pt width \hsize \vskip4pt}%
- % No rule at page bottom unless we print one at the top with @title.
- \finishedtitlepagetrue
+ % This preamble sets up a generic column definition, which will
+ % be used as many times as user calls for columns.
+- % \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.
+ \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
+- % 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.
+- % 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.
+ % If user has set preamble in terms of percent of \hsize
+@@ -1803,18 +2060,56 @@
+ \else
+ % If user has <not> set preamble in terms of percent of \hsize
+- % we will advance \hsize by \spacebetweencols
+- \advance\hsize by \spacebetweencols
++ % we will advance \hsize by \multitablecolspace
++ \advance\hsize by \multitablecolspace
+ \fi
+- % In either case we will make \leftskip=\spacebetweencols:
+-\leftskip=\spacebetweencols
++ % In either case we will make \leftskip=\multitablecolspace:
++\leftskip=\multitablecolspace
+ \fi
+-\noindent##}\cr%
++ % Ignoring space at the beginning and end avoids an occasional spurious
++ % blank line, when TeX decides to break the line at the space before the
++ % box from the multistrut, so the strut ends up on a line by itself.
++ % For example:
++ % @multitable @columnfractions .11 .89
++ % @item @code{#}
++ % @tab Legal holiday which is valid in major parts of the whole country.
++ % Is automatically provided with highlighting sequences respectively marking
++ % characters.
++ \noindent\ignorespaces##\unskip\multistrut}\cr
+ % \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
+ % looks at the current \colcount to find the correct column width.
+-\global\everycr{\noalign{\nointerlineskip\vskip\spacebetweenlines
+-\filbreak%% keeps underfull box messages off when table breaks over pages.
+-\global\colcount=0\relax}}}
++\global\everycr{\noalign{%
++% \filbreak%% keeps underfull box messages off when table breaks over pages.
++% Maybe so, but it also creates really weird page breaks when the table
++% breaks over pages Wouldn't \vfil be better? Wait until the problem
++% manifests itself, so it can be fixed for real --karl.
++\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,}
+@@ -1830,5 +2125,5 @@
+ % \fooindex ...rest of line... puts an entry in the index foo.
+ % It also defines \fooindfile to be the number of the output channel for
+-% the file that accumulates this index. The file's extension is foo.
++% the file that accumulates this index. The file's extension is foo.
+ % The name of an index should be no more than 2 characters long
+ % for the sake of vms.
+@@ -1836,6 +2131,6 @@
+ \def\newindex #1{
+ \expandafter\newwrite \csname#1indfile\endcsname% Define number for output file
+-\openout \csname#1indfile\endcsname \jobname.#1 % Open the file
+-\expandafter\xdef\csname#1index\endcsname{% % Define \xxxindex
++\openout \csname#1indfile\endcsname \jobname.#1 % Open the file
++\expandafter\xdef\csname#1index\endcsname{% % Define \xxxindex
+ \noexpand\doindex {#1}}
+ }
+@@ -1849,6 +2144,6 @@
+ \def\newcodeindex #1{
+ \expandafter\newwrite \csname#1indfile\endcsname% Define number for output file
+-\openout \csname#1indfile\endcsname \jobname.#1 % Open the file
+-\expandafter\xdef\csname#1index\endcsname{% % Define \xxxindex
++\openout \csname#1indfile\endcsname \jobname.#1 % Open the file
++\expandafter\xdef\csname#1index\endcsname{% % Define \xxxindex
+ \noexpand\docodeindex {#1}}
+ }
+@@ -1861,5 +2156,5 @@
+ \expandafter\let\expandafter\synindexfoo\expandafter=\csname#2indfile\endcsname
+ \expandafter\let\csname#1indfile\endcsname=\synindexfoo
+-\expandafter\xdef\csname#1index\endcsname{% % Define \xxxindex
++\expandafter\xdef\csname#1index\endcsname{% % Define \xxxindex
+ \noexpand\doindex {#2}}%
+ }
+@@ -1870,5 +2165,5 @@
+ \expandafter\let\expandafter\synindexfoo\expandafter=\csname#2indfile\endcsname
+ \expandafter\let\csname#1indfile\endcsname=\synindexfoo
+-\expandafter\xdef\csname#1index\endcsname{% % Define \xxxindex
++\expandafter\xdef\csname#1index\endcsname{% % Define \xxxindex
+ \noexpand\docodeindex {#2}}%
+ }
+@@ -1918,8 +2213,13 @@
+ \def\ss{\realbackslash ss}%
+ % 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\w{\realbackslash w }%
+ \def\bf{\realbackslash bf }%
+-\def\rm{\realbackslash rm }%
++%\def\rm{\realbackslash rm }%
+ \def\sl{\realbackslash sl }%
+ \def\sf{\realbackslash sf}%
+@@ -1928,5 +2228,5 @@
+ \def\less{\realbackslash less}%
+ \def\hat{\realbackslash hat}%
+-\def\char{\realbackslash char}%
++%\def\char{\realbackslash char}%
+ \def\TeX{\realbackslash TeX}%
+ \def\dots{\realbackslash dots }%
+@@ -1934,9 +2234,12 @@
+ \def\tclose##1{\realbackslash tclose {##1}}%
+ \def\code##1{\realbackslash code {##1}}%
++\def\dotless##1{\realbackslash dotless {##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\i##1{\realbackslash i {##1}}%
+ \def\b##1{\realbackslash b {##1}}%
++\def\sc##1{\realbackslash sc {##1}}%
+ \def\cite##1{\realbackslash cite {##1}}%
+ \def\key##1{\realbackslash key {##1}}%
+@@ -1946,6 +2249,13 @@
+ \def\dfn##1{\realbackslash dfn {##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.
+ % This is used when outputting the strings to sort the index by.
+@@ -1956,4 +2266,5 @@
+ \def\indexnofonts{%
+ % Just ignore accents.
++\let\,=\indexdummyfont
+ \let\"=\indexdummyfont
+ \let\`=\indexdummyfont
+@@ -1968,4 +2279,5 @@
+ \let\v=\indexdummyfont
+ \let\H=\indexdummyfont
++\let\dotless=\indexdummyfont
+ % Take care of the plain tex special European modified letters.
+ \def\oe{oe}%
+@@ -2001,4 +2313,5 @@
+ \let\TeX=\indexdummytex
+ \let\dots=\indexdummydots
++\def\@{@}%
+ }
+
+@@ -2012,24 +2325,39 @@
+ \let\indexbackslash=0 %overridden during \printindex.
+
++\let\SETmarginindex=\relax %initialize!
++% workhorse for all \fooindexes
++% #1 is name of index, #2 is stuff to put there
+ \def\doind #1#2{%
+-{\count10=\lastpenalty %
+-{\indexdummies % Must do this here, since \bf, etc expand at this stage
+-\escapechar=`\\%
+-{\let\folio=0% Expand all macros now EXCEPT \folio
+-\def\rawbackslashxx{\indexbackslash}% \indexbackslash isn't defined now
+-% so it will be output as is; and it will print as backslash in the indx.
+-%
+-% Now process the index-string once, with all font commands turned off,
+-% to get the string to sort the index by.
+-{\indexnofonts
+-\xdef\temp1{#2}%
+-}%
+-% Now produce the complete index entry. We process the index-string again,
+-% this time with font commands expanded, to get what to print in the index.
+-\edef\temp{%
+-\write \csname#1indfile\endcsname{%
+-\realbackslash entry {\temp1}{\folio}{#2}}}%
+-\temp }%
+-}\penalty\count10}}
++ % Put the index entry in the margin if desired.
++ \ifx\SETmarginindex\relax\else
++ \insert\margin{\hbox{\vrule height8pt depth3pt width0pt #2}}%
++ \fi
++ {%
++ \count255=\lastpenalty
++ {%
++ \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
++ % so it will be output as is; and it will print as backslash.
++ %
++ % First process the index-string with all font commands turned off
++ % to get the string to sort by.
++ {\indexnofonts \xdef\indexsorttmp{#2}}%
++ %
++ % Now produce the complete index entry, with both the sort key and the
++ % original text, including any font commands.
++ \toks0 = {#2}%
++ \edef\temp{%
++ \write\csname#1indfile\endcsname{%
++ \realbackslash entry{\indexsorttmp}{\folio}{\the\toks0}}%
++ }%
++ \temp
++ }%
++ }%
++ \penalty\count255
++ }%
++}
+
+ \def\dosubind #1#2#3{%
+@@ -2085,32 +2413,14 @@
+ % Define the macros used in formatting output of the sorted index material.
+
+-% This is what you call to cause a particular index to get printed.
+-% Write
+-% @unnumbered Function Index
+-% @printindex fn
+-
++% @printindex causes a particular index (the ??s file) to get printed.
++% It does not print any chapter heading (usually an @unnumbered).
++%
+ \def\printindex{\parsearg\doprintindex}
+-
+-\def\doprintindex#1{%
+- \tex
+- \dobreak \chapheadingskip {10000}
+- \catcode`\%=\other\catcode`\&=\other\catcode`\#=\other
+- \catcode`\$=\other
+- \catcode`\~=\other
+- \indexbreaks
++\def\doprintindex#1{\begingroup
++ \dobreak \chapheadingskip{10000}%
+ %
+- % The following don't help, since the chars were translated
+- % when the raw index was written, and their fonts were discarded
+- % due to \indexnofonts.
+- %\catcode`\"=\active
+- %\catcode`\^=\active
+- %\catcode`\_=\active
+- %\catcode`\|=\active
+- %\catcode`\<=\active
+- %\catcode`\>=\active
+- % %
+- \def\indexbackslash{\rawbackslashxx}
+- \indexfonts\rm \tolerance=9500 \advance\baselineskip -1pt
+- \begindoublecolumns
++ \indexfonts \rm
++ \tolerance = 9500
++ \indexbreaks
+ %
+ % See if the index file exists and is nonempty.
+@@ -2122,5 +2432,5 @@
+ % there is some text.
+ (Index is nonexistent)
+- \else
++ \else
%
-***************
-*** 1196,1202 ****
- \let\oldpage = \page
- \def\page{%
- \iffinishedtitlepage\else
-! \finishtitlepage
- \fi
- \oldpage
- \let\page = \oldpage
---- 1422,1428 ----
- \let\oldpage = \page
- \def\page{%
- \iffinishedtitlepage\else
-! \finishtitlepage
- \fi
- \oldpage
- \let\page = \oldpage
-***************
-*** 1284,1297 ****
- %
- }% unbind the catcode of @.
-
-! % @headings double turns headings on for double-sided printing.
-! % @headings single turns headings on for single-sided printing.
-! % @headings off turns them off.
-! % @headings on same as @headings double, retained for compatibility.
-! % @headings after 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.
-! % By default, they are off.
-
- \def\headings #1 {\csname HEADINGS#1\endcsname}
-
---- 1510,1524 ----
- %
- }% unbind the catcode of @.
-
-! % @headings double turns headings on for double-sided printing.
-! % @headings single turns headings on for single-sided printing.
-! % @headings off turns them off.
-! % @headings on same as @headings double, retained for compatibility.
-! % @headings after 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.
-! % By default, they are off at the start of a document,
-! % and turned `on' after @end titlepage.
-
- \def\headings #1 {\csname HEADINGS#1\endcsname}
-
-***************
-*** 1305,1326 ****
- % title on inside top of left hand pages, and page numbers on outside top
- % edge of all pages.
- \def\HEADINGSdouble{
-- %\pagealignmacro
- \global\pageno=1
- \global\evenfootline={\hfil}
- \global\oddfootline={\hfil}
- \global\evenheadline={\line{\folio\hfil\thistitle}}
- \global\oddheadline={\line{\thischapter\hfil\folio}}
- }
- % For single-sided printing, chapter title goes across top left of page,
- % page number on top right.
- \def\HEADINGSsingle{
-- %\pagealignmacro
- \global\pageno=1
- \global\evenfootline={\hfil}
- \global\oddfootline={\hfil}
- \global\evenheadline={\line{\thischapter\hfil\folio}}
- \global\oddheadline={\line{\thischapter\hfil\folio}}
- }
- \def\HEADINGSon{\HEADINGSdouble}
-
---- 1532,1555 ----
- % title on inside top of left hand pages, and page numbers on outside top
- % edge of all pages.
- \def\HEADINGSdouble{
- \global\pageno=1
- \global\evenfootline={\hfil}
- \global\oddfootline={\hfil}
- \global\evenheadline={\line{\folio\hfil\thistitle}}
- \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,
- % page number on top right.
- \def\HEADINGSsingle{
- \global\pageno=1
- \global\evenfootline={\hfil}
- \global\oddfootline={\hfil}
- \global\evenheadline={\line{\thischapter\hfil\folio}}
- \global\oddheadline={\line{\thischapter\hfil\folio}}
-+ \global\let\contentsalignmacro = \chappager
- }
- \def\HEADINGSon{\HEADINGSdouble}
-
-***************
-*** 1331,1336 ****
---- 1560,1566 ----
- \global\oddfootline={\hfil}
- \global\evenheadline={\line{\folio\hfil\thistitle}}
- \global\oddheadline={\line{\thischapter\hfil\folio}}
-+ \global\let\contentsalignmacro = \chapoddpage
- }
-
- \def\HEADINGSsingleafter{\let\HEADINGShook=\HEADINGSsinglex}
-***************
-*** 1339,1344 ****
---- 1569,1575 ----
- \global\oddfootline={\hfil}
- \global\evenheadline={\line{\thischapter\hfil\folio}}
- \global\oddheadline={\line{\thischapter\hfil\folio}}
-+ \global\let\contentsalignmacro = \chappager
- }
-
- % Subroutines used in generating headings
-***************
-*** 1362,1367 ****
---- 1593,1599 ----
- \def\settitle{\parsearg\settitlezzz}
- \def\settitlezzz #1{\gdef\thistitle{#1}}
-
-+
- \message{tables,}
-
- % @tabs -- simple alignment
-***************
-*** 1394,1400 ****
-
- \newif\ifitemxneedsnegativevskip
-
-! \def\itemxpar{\par\ifitemxneedsnegativevskip\vskip-\parskip\nobreak\fi}
-
- \def\internalBitem{\smallbreak \parsearg\itemzzz}
- \def\internalBitemx{\itemxpar \parsearg\itemzzz}
---- 1626,1632 ----
-
- \newif\ifitemxneedsnegativevskip
-
-! \def\itemxpar{\par\ifitemxneedsnegativevskip\nobreak\vskip-\parskip\nobreak\fi}
-
- \def\internalBitem{\smallbreak \parsearg\itemzzz}
- \def\internalBitemx{\itemxpar \parsearg\itemzzz}
-***************
-*** 1501,1507 ****
- \def\tablez #1#2#3#4#5#6{%
- \aboveenvbreak %
- \begingroup %
-! \def\Edescription{\Etable}% Neccessary kludge.
- \let\itemindex=#1%
- \ifnum 0#3>0 \advance \leftskip by #3\mil \fi %
- \ifnum 0#4>0 \tableindent=#4\mil \fi %
---- 1733,1739 ----
- \def\tablez #1#2#3#4#5#6{%
- \aboveenvbreak %
- \begingroup %
-! \def\Edescription{\Etable}% Necessary kludge.
- \let\itemindex=#1%
- \ifnum 0#3>0 \advance \leftskip by #3\mil \fi %
- \ifnum 0#4>0 \tableindent=#4\mil \fi %
-***************
-*** 1658,1674 ****
- \def\itemizeitem{%
- \advance\itemno by 1
- {\let\par=\endgraf \smallbreak}%
-! \ifhmode \errmessage{\in hmode at itemizeitem}\fi
- {\parskip=0in \hskip 0pt
- \hbox to 0pt{\hss \itemcontents\hskip \itemmargin}%
- \vadjust{\penalty 1200}}%
- \flushcr}
-
- % @multitable macros
-! % Amy Hendrickson, 8/18/94
- %
-! % @multitable ... @endmultitable will make as many columns as desired.
-! % Contents of each column will wrap at width given in preamble. Width
- % can be specified either with sample text given in a template line,
- % or in percent of \hsize, the current width of text on page.
-
---- 1890,1906 ----
- \def\itemizeitem{%
- \advance\itemno by 1
- {\let\par=\endgraf \smallbreak}%
-! \ifhmode \errmessage{In hmode at itemizeitem}\fi
- {\parskip=0in \hskip 0pt
- \hbox to 0pt{\hss \itemcontents\hskip \itemmargin}%
- \vadjust{\penalty 1200}}%
- \flushcr}
-
- % @multitable macros
-! % Amy Hendrickson, 8/18/94, 3/6/96
- %
-! % @multitable ... @end multitable will make as many columns as desired.
-! % Contents of each column will wrap at width given in preamble. Width
- % can be specified either with sample text given in a template line,
- % or in percent of \hsize, the current width of text on page.
-
-***************
-*** 1676,1796 ****
-
- % To make preamble:
- %
-! % Either define widths of columns in terms of percent of \hsize:
-! % @multitable @percentofhsize .2 .3 .5
- % @item ...
- %
-! % Numbers following @percentofhsize are the percent of the total
- % current hsize to be used for each column. You may use as many
- % columns as desired.
-
- % Or use a template:
- % @multitable {Column 1 template} {Column 2 template} {Column 3 template}
- % @item ...
- % using the widest term desired in each column.
-
-!
-! % Each new table line starts with @item, each subsequent new column
- % 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,
- % ie, @tab@tab@tab will produce two empty columns.
-
-! % @item, @tab, @multicolumn or @endmulticolumn do not need to be on their
- % own lines, but it will not hurt if they are.
-
- % Sample multitable:
-
- % @multitable {Column 1 template} {Column 2 template} {Column 3 template}
- % @item first col stuff @tab second col stuff @tab third col
-! % @item
-! % first col stuff
-! % @tab
-! % second col stuff
-! % @tab
-! % third col
-! % @item first col stuff @tab second col stuff
- % @tab Many paragraphs of text may be used in any column.
-! %
- % They will wrap at the width determined by the template.
- % @item@tab@tab This will be in third column.
-! % @endmultitable
-
- % Default dimensions may be reset by user.
-! % @intableparskip will set vertical space between paragraphs in table.
-! % @intableparindent will set paragraph indent in table.
-! % @spacebetweencols will set horizontal space to be left between columns.
-! % @spacebetweenlines will set vertical space to be left between lines.
-
- %%%%
-! % Dimensions
-
-! \newdimen\intableparskip
-! \newdimen\intableparindent
-! \newdimen\spacebetweencols
-! \newdimen\spacebetweenlines
-! \intableparskip=0pt
-! \intableparindent=6pt
-! \spacebetweencols=12pt
-! \spacebetweenlines=12pt
-
- %%%%
- % Macros used to set up halign preamble:
- \let\endsetuptable\relax
- \def\xendsetuptable{\endsetuptable}
-! \let\percentofhsize\relax
-! \def\xpercentofhsize{\percentofhsize}
- \newif\ifsetpercent
-
- \newcount\colcount
- \def\setuptable#1{\def\firstarg{#1}%
- \ifx\firstarg\xendsetuptable\let\go\relax%
- \else
-! \ifx\firstarg\xpercentofhsize\global\setpercenttrue%
- \else
- \ifsetpercent
-! \if#1.\else%
-! \global\advance\colcount by1 %
-! \expandafter\xdef\csname col\the\colcount\endcsname{.#1\hsize}%
-! \fi
- \else
- \global\advance\colcount by1
-! \setbox0=\hbox{#1}%
- \expandafter\xdef\csname col\the\colcount\endcsname{\the\wd0}%
- \fi%
- \fi%
-! \let\go\setuptable%
- \fi\go}
- %%%%
- % multitable syntax
-! \def\tab{&}
-
- %%%%
-! % @multitable ... @endmultitable definitions:
-
-! \def\multitable#1\item{\bgroup
- \let\item\cr
- \tolerance=9500
- \hbadness=9500
-! \parskip=\intableparskip
-! \parindent=\intableparindent
- \overfullrule=0pt
- \global\colcount=0\relax%
- \def\Emultitable{\global\setpercentfalse\global\everycr{}\cr\egroup\egroup}%
- % To parse everything between @multitable and @item :
-! \def\one{#1}\expandafter\setuptable\one\endsetuptable
- % Need to reset this to 0 after \setuptable.
-! \global\colcount=0\relax%
+ % If the index file exists but is empty, then \openin leaves \ifeof
+@@ -2131,11 +2441,18 @@
+ (Index is empty)
+ \else
++ % Index files are almost Texinfo source, but we use \ as the escape
++ % character. It would be better to use @, but that's too big a change
++ % to make right now.
++ \def\indexbackslash{\rawbackslashxx}%
++ \catcode`\\ = 0
++ \catcode`\@ = 11
++ \escapechar = `\\
++ \begindoublecolumns
+ \input \jobname.#1s
++ \enddoublecolumns
+ \fi
+ \fi
+ \closein 1
+- \enddoublecolumns
+- \Etex
+-}
++\endgroup}
+
+ % These macros are used by the sorted index file itself.
+@@ -2191,5 +2508,5 @@
+ % Insert the text of the index entry. TeX will do line-breaking on it.
+ #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
+ % cursed by a Unix daemon.
+@@ -2228,20 +2545,35 @@
+ }}
+
+-%% Define two-column mode, which is used in indexes.
+-%% Adapted from the TeXbook, page 416.
+-\catcode `\@=11
++% Define two-column mode, which we use to typeset indexes.
++% Adapted from the TeXbook, page 416, which is to say,
++% the manmac.tex format used to print the TeXbook itself.
++\catcode`\@=11
+
+ \newbox\partialpage
+-
+ \newdimen\doublecolumnhsize
+
+-\def\begindoublecolumns{\begingroup
++\def\begindoublecolumns{\begingroup % ended by \enddoublecolumns
+ % Grab any single-column material above us.
+- \output = {\global\setbox\partialpage
+- =\vbox{\unvbox255\kern -\topskip \kern \baselineskip}}%
++ \output = {\global\setbox\partialpage = \vbox{%
++ %
++ % Here is a possibility not foreseen in manmac: if we accumulate a
++ % whole lot of material, we might end up calling this \output
++ % routine twice in a row (see the doublecol-lose test, which is
++ % essentially a couple of indexes with @setchapternewpage off). In
++ % that case, we must prevent the second \partialpage from
++ % simply overwriting the first, causing us to lose the page.
++ % This will preserve it until a real output routine can ship it
++ % out. Generally, \partialpage will be empty when this runs and
++ % this will be a no-op.
++ \unvbox\partialpage
++ %
++ % Unvbox the main output page.
++ \unvbox255
++ \kern-\topskip \kern\baselineskip
++ }}%
+ \eject
%
- % This preamble sets up a generic column definition, which will
- % be used as many times as user calls for columns.
-! % \vtop will set a single line and will also let text wrap and
- % continue for many paragraphs if desired.
- \halign\bgroup&\global\advance\colcount by 1\relax%
-! \vtop{\hsize=\expandafter\csname col\the\colcount\endcsname
- % In order to keep entries from bumping into each other
-! % we will add a \leftskip of \spacebetweencols to all columns after
- % the first one.
-! % If a template has been used, we will add \spacebetweencols
- % to the width of each template entry.
- % If user has set preamble in terms of percent of \hsize
- % we will use that dimension as the width of the column, and
---- 1908,2053 ----
-
- % To make preamble:
- %
-! % Either define widths of columns in terms of percent of \hsize:
-! % @multitable @columnfractions .25 .3 .45
- % @item ...
- %
-! % Numbers following @columnfractions are the percent of the total
- % current hsize to be used for each column. You may use as many
- % columns as desired.
-
-+
- % Or use a template:
- % @multitable {Column 1 template} {Column 2 template} {Column 3 template}
- % @item ...
- % 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
- % 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,
- % ie, @tab@tab@tab will produce two empty columns.
-
-! % @item, @tab, @multitable or @end multitable do not need to be on their
- % own lines, but it will not hurt if they are.
-
- % Sample multitable:
-
- % @multitable {Column 1 template} {Column 2 template} {Column 3 template}
- % @item first col stuff @tab second col stuff @tab third col
-! % @item
-! % first col stuff
-! % @tab
-! % second col stuff
-! % @tab
-! % third col
-! % @item first col stuff @tab second col stuff
- % @tab Many paragraphs of text may be used in any column.
-! %
- % They will wrap at the width determined by the template.
- % @item@tab@tab This will be in third column.
-! % @end multitable
-
- % Default dimensions may be reset by user.
-! % @multitableparskip is vertical space between paragraphs in table.
-! % @multitableparindent is paragraph indent in table.
-! % @multitablecolmargin is horizontal space to be left between columns.
-! % @multitablelinespace is space to leave between table items, baseline
-! % to baseline.
-! % 0pt means it depends on current normal line spacing.
-
- %%%%
-! % Dimensions
-
-! \newskip\multitableparskip
-! \newskip\multitableparindent
-! \newdimen\multitablecolspace
-! \newskip\multitablelinespace
-! \multitableparskip=0pt
-! \multitableparindent=6pt
-! \multitablecolspace=12pt
-! \multitablelinespace=0pt
-
- %%%%
- % Macros used to set up halign preamble:
- \let\endsetuptable\relax
- \def\xendsetuptable{\endsetuptable}
-! \let\columnfractions\relax
-! \def\xcolumnfractions{\columnfractions}
- \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
- \def\setuptable#1{\def\firstarg{#1}%
- \ifx\firstarg\xendsetuptable\let\go\relax%
- \else
-! \ifx\firstarg\xcolumnfractions\global\setpercenttrue%
- \else
- \ifsetpercent
-! \let\go\pickupwholefraction % In this case arg of setuptable
-! % is the decimal point before the
-! % number given in percent of hsize.
-! % We don't need this so we don't use it.
- \else
- \global\advance\colcount by1
-! \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}%
- \fi%
- \fi%
-! \ifx\go\pickupwholefraction\else\let\go\setuptable\fi%
- \fi\go}
-+
- %%%%
- % multitable syntax
-! \def\tab{&\hskip1sp\relax} % 2/2/96
-! % tiny skip here makes sure this column space is
-! % maintained, even if it is never used.
-!
-
- %%%%
-! % @multitable ... @end multitable definitions:
-!
-! \def\multitable{\parsearg\dotable}
-
-! \def\dotable#1{\bgroup
- \let\item\cr
- \tolerance=9500
- \hbadness=9500
-! \setmultitablespacing
-! \parskip=\multitableparskip
-! \parindent=\multitableparindent
- \overfullrule=0pt
- \global\colcount=0\relax%
- \def\Emultitable{\global\setpercentfalse\global\everycr{}\cr\egroup\egroup}%
- % To parse everything between @multitable and @item :
-! \setuptable#1 \endsetuptable
- % Need to reset this to 0 after \setuptable.
-! \global\colcount=0\relax%
+- % Now switch to the double-column output routine.
+- \output={\doublecolumnout}%
++ % Use the double-column output routine for subsequent pages.
++ \output = {\doublecolumnout}%
%
- % This preamble sets up a generic column definition, which will
- % be used as many times as user calls for columns.
-! % \vtop will set a single line and will also let text wrap and
- % continue for many paragraphs if desired.
- \halign\bgroup&\global\advance\colcount by 1\relax%
-! \multistrut\vtop{\hsize=\expandafter\csname col\the\colcount\endcsname
- % In order to keep entries from bumping into each other
-! % we will add a \leftskip of \multitablecolspace to all columns after
- % the first one.
-! % If a template has been used, we will add \multitablecolspace
- % to the width of each template entry.
- % If user has set preamble in terms of percent of \hsize
- % we will use that dimension as the width of the column, and
-***************
-*** 1802,1821 ****
- \ifsetpercent
- \else
- % If user has <not> set preamble in terms of percent of \hsize
-! % we will advance \hsize by \spacebetweencols
-! \advance\hsize by \spacebetweencols
- \fi
-! % In either case we will make \leftskip=\spacebetweencols:
-! \leftskip=\spacebetweencols
- \fi
-! \noindent##}\cr%
- % \everycr will reset column counter, \colcount, at the end of
-! % each line. Every column entry will cause \colcount to advance by one.
- % The table preamble
- % looks at the current \colcount to find the correct column width.
-! \global\everycr{\noalign{\nointerlineskip\vskip\spacebetweenlines
-! \filbreak%% keeps underfull box messages off when table breaks over pages.
-! \global\colcount=0\relax}}}
-
- \message{indexing,}
- % Index generation facilities
---- 2059,2116 ----
- \ifsetpercent
- \else
- % If user has <not> set preamble in terms of percent of \hsize
-! % we will advance \hsize by \multitablecolspace
-! \advance\hsize by \multitablecolspace
- \fi
-! % In either case we will make \leftskip=\multitablecolspace:
-! \leftskip=\multitablecolspace
- \fi
-! % Ignoring space at the beginning and end avoids an occasional spurious
-! % blank line, when TeX decides to break the line at the space before the
-! % box from the multistrut, so the strut ends up on a line by itself.
-! % For example:
-! % @multitable @columnfractions .11 .89
-! % @item @code{#}
-! % @tab Legal holiday which is valid in major parts of the whole country.
-! % Is automatically provided with highlighting sequences respectively marking
-! % characters.
-! \noindent\ignorespaces##\unskip\multistrut}\cr
- % \everycr will reset column counter, \colcount, at the end of
-! % each line. Every column entry will cause \colcount to advance by one.
- % The table preamble
- % looks at the current \colcount to find the correct column width.
-! \global\everycr{\noalign{%
-! % \filbreak%% keeps underfull box messages off when table breaks over pages.
-! % Maybe so, but it also creates really weird page breaks when the table
-! % breaks over pages Wouldn't \vfil be better? Wait until the problem
-! % manifests itself, so it can be fixed for real --karl.
-! \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,}
- % Index generation facilities
-***************
-*** 1829,1842 ****
- % It automatically defines \fooindex such that
- % \fooindex ...rest of line... puts an entry in the index foo.
- % It also defines \fooindfile to be the number of the output channel for
-! % the file that accumulates this index. The file's extension is foo.
- % The name of an index should be no more than 2 characters long
- % for the sake of vms.
-
- \def\newindex #1{
- \expandafter\newwrite \csname#1indfile\endcsname% Define number for output file
-! \openout \csname#1indfile\endcsname \jobname.#1 % Open the file
-! \expandafter\xdef\csname#1index\endcsname{% % Define \xxxindex
- \noexpand\doindex {#1}}
- }
-
---- 2124,2137 ----
- % It automatically defines \fooindex such that
- % \fooindex ...rest of line... puts an entry in the index foo.
- % It also defines \fooindfile to be the number of the output channel for
-! % the file that accumulates this index. The file's extension is foo.
- % The name of an index should be no more than 2 characters long
- % for the sake of vms.
-
- \def\newindex #1{
- \expandafter\newwrite \csname#1indfile\endcsname% Define number for output file
-! \openout \csname#1indfile\endcsname \jobname.#1 % Open the file
-! \expandafter\xdef\csname#1index\endcsname{% % Define \xxxindex
- \noexpand\doindex {#1}}
- }
-
-***************
-*** 1848,1855 ****
-
- \def\newcodeindex #1{
- \expandafter\newwrite \csname#1indfile\endcsname% Define number for output file
-! \openout \csname#1indfile\endcsname \jobname.#1 % Open the file
-! \expandafter\xdef\csname#1index\endcsname{% % Define \xxxindex
- \noexpand\docodeindex {#1}}
- }
-
---- 2143,2150 ----
-
- \def\newcodeindex #1{
- \expandafter\newwrite \csname#1indfile\endcsname% Define number for output file
-! \openout \csname#1indfile\endcsname \jobname.#1 % Open the file
-! \expandafter\xdef\csname#1index\endcsname{% % Define \xxxindex
- \noexpand\docodeindex {#1}}
- }
-
-***************
-*** 1860,1866 ****
- \def\synindex #1 #2 {%
- \expandafter\let\expandafter\synindexfoo\expandafter=\csname#2indfile\endcsname
- \expandafter\let\csname#1indfile\endcsname=\synindexfoo
-! \expandafter\xdef\csname#1index\endcsname{% % Define \xxxindex
- \noexpand\doindex {#2}}%
- }
-
---- 2155,2161 ----
- \def\synindex #1 #2 {%
- \expandafter\let\expandafter\synindexfoo\expandafter=\csname#2indfile\endcsname
- \expandafter\let\csname#1indfile\endcsname=\synindexfoo
-! \expandafter\xdef\csname#1index\endcsname{% % Define \xxxindex
- \noexpand\doindex {#2}}%
- }
-
-***************
-*** 1869,1875 ****
- \def\syncodeindex #1 #2 {%
- \expandafter\let\expandafter\synindexfoo\expandafter=\csname#2indfile\endcsname
- \expandafter\let\csname#1indfile\endcsname=\synindexfoo
-! \expandafter\xdef\csname#1index\endcsname{% % Define \xxxindex
- \noexpand\docodeindex {#2}}%
- }
-
---- 2164,2170 ----
- \def\syncodeindex #1 #2 {%
- \expandafter\let\expandafter\synindexfoo\expandafter=\csname#2indfile\endcsname
- \expandafter\let\csname#1indfile\endcsname=\synindexfoo
-! \expandafter\xdef\csname#1index\endcsname{% % Define \xxxindex
- \noexpand\docodeindex {#2}}%
- }
-
-***************
-*** 1917,1943 ****
- \def\L{\realbackslash L}%
- \def\ss{\realbackslash ss}%
- % Take care of texinfo commands likely to appear in an index entry.
- \def\_{{\realbackslash _}}%
- \def\w{\realbackslash w }%
- \def\bf{\realbackslash bf }%
-! \def\rm{\realbackslash rm }%
- \def\sl{\realbackslash sl }%
- \def\sf{\realbackslash sf}%
- \def\tt{\realbackslash tt}%
- \def\gtr{\realbackslash gtr}%
- \def\less{\realbackslash less}%
- \def\hat{\realbackslash hat}%
-! \def\char{\realbackslash char}%
- \def\TeX{\realbackslash TeX}%
- \def\dots{\realbackslash dots }%
- \def\copyright{\realbackslash copyright }%
- \def\tclose##1{\realbackslash tclose {##1}}%
- \def\code##1{\realbackslash code {##1}}%
- \def\samp##1{\realbackslash samp {##1}}%
-! \def\t##1{\realbackslash r {##1}}%
- \def\r##1{\realbackslash r {##1}}%
- \def\i##1{\realbackslash i {##1}}%
- \def\b##1{\realbackslash b {##1}}%
- \def\cite##1{\realbackslash cite {##1}}%
- \def\key##1{\realbackslash key {##1}}%
- \def\file##1{\realbackslash file {##1}}%
---- 2212,2246 ----
- \def\L{\realbackslash L}%
- \def\ss{\realbackslash ss}%
- % 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\w{\realbackslash w }%
- \def\bf{\realbackslash bf }%
-! %\def\rm{\realbackslash rm }%
- \def\sl{\realbackslash sl }%
- \def\sf{\realbackslash sf}%
- \def\tt{\realbackslash tt}%
- \def\gtr{\realbackslash gtr}%
- \def\less{\realbackslash less}%
- \def\hat{\realbackslash hat}%
-! %\def\char{\realbackslash char}%
- \def\TeX{\realbackslash TeX}%
- \def\dots{\realbackslash dots }%
- \def\copyright{\realbackslash copyright }%
- \def\tclose##1{\realbackslash tclose {##1}}%
- \def\code##1{\realbackslash code {##1}}%
-+ \def\dotless##1{\realbackslash dotless {##1}}%
- \def\samp##1{\realbackslash samp {##1}}%
-! \def\,##1{\realbackslash ,{##1}}%
-! \def\t##1{\realbackslash t {##1}}%
- \def\r##1{\realbackslash r {##1}}%
- \def\i##1{\realbackslash i {##1}}%
- \def\b##1{\realbackslash b {##1}}%
-+ \def\sc##1{\realbackslash sc {##1}}%
- \def\cite##1{\realbackslash cite {##1}}%
- \def\key##1{\realbackslash key {##1}}%
- \def\file##1{\realbackslash file {##1}}%
-***************
-*** 1945,1952 ****
---- 2248,2262 ----
- \def\kbd##1{\realbackslash kbd {##1}}%
- \def\dfn##1{\realbackslash dfn {##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.
- % This is used when outputting the strings to sort the index by.
- \def\indexdummyfont#1{#1}
-***************
-*** 1955,1960 ****
---- 2265,2271 ----
-
- \def\indexnofonts{%
- % Just ignore accents.
-+ \let\,=\indexdummyfont
- \let\"=\indexdummyfont
- \let\`=\indexdummyfont
- \let\'=\indexdummyfont
-***************
-*** 1967,1972 ****
---- 2278,2284 ----
- \let\u=\indexdummyfont
- \let\v=\indexdummyfont
- \let\H=\indexdummyfont
-+ \let\dotless=\indexdummyfont
- % Take care of the plain tex special European modified letters.
- \def\oe{oe}%
- \def\ae{ae}%
-***************
-*** 2000,2005 ****
---- 2312,2318 ----
- \let\var=\indexdummyfont
- \let\TeX=\indexdummytex
- \let\dots=\indexdummydots
-+ \def\@{@}%
- }
-
- % To define \realbackslash, we must make \ not be an escape.
-***************
-*** 2011,2036 ****
-
- \let\indexbackslash=0 %overridden during \printindex.
-
- \def\doind #1#2{%
-! {\count10=\lastpenalty %
-! {\indexdummies % Must do this here, since \bf, etc expand at this stage
-! \escapechar=`\\%
-! {\let\folio=0% Expand all macros now EXCEPT \folio
-! \def\rawbackslashxx{\indexbackslash}% \indexbackslash isn't defined now
-! % so it will be output as is; and it will print as backslash in the indx.
-! %
-! % Now process the index-string once, with all font commands turned off,
-! % to get the string to sort the index by.
-! {\indexnofonts
-! \xdef\temp1{#2}%
-! }%
-! % Now produce the complete index entry. We process the index-string again,
-! % this time with font commands expanded, to get what to print in the index.
-! \edef\temp{%
-! \write \csname#1indfile\endcsname{%
-! \realbackslash entry {\temp1}{\folio}{#2}}}%
-! \temp }%
-! }\penalty\count10}}
-
- \def\dosubind #1#2#3{%
- {\count10=\lastpenalty %
---- 2324,2364 ----
-
- \let\indexbackslash=0 %overridden during \printindex.
-
-+ \let\SETmarginindex=\relax %initialize!
-+ % workhorse for all \fooindexes
-+ % #1 is name of index, #2 is stuff to put there
- \def\doind #1#2{%
-! % Put the index entry in the margin if desired.
-! \ifx\SETmarginindex\relax\else
-! \insert\margin{\hbox{\vrule height8pt depth3pt width0pt #2}}%
-! \fi
-! {%
-! \count255=\lastpenalty
-! {%
-! \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
-! % so it will be output as is; and it will print as backslash.
-! %
-! % First process the index-string with all font commands turned off
-! % to get the string to sort by.
-! {\indexnofonts \xdef\indexsorttmp{#2}}%
-! %
-! % Now produce the complete index entry, with both the sort key and the
-! % original text, including any font commands.
-! \toks0 = {#2}%
-! \edef\temp{%
-! \write\csname#1indfile\endcsname{%
-! \realbackslash entry{\indexsorttmp}{\folio}{\the\toks0}}%
-! }%
-! \temp
-! }%
-! }%
-! \penalty\count255
-! }%
-! }
-
- \def\dosubind #1#2#3{%
- {\count10=\lastpenalty %
-***************
-*** 2084,2117 ****
-
- % Define the macros used in formatting output of the sorted index material.
-
-! % This is what you call to cause a particular index to get printed.
-! % Write
-! % @unnumbered Function Index
-! % @printindex fn
-!
- \def\printindex{\parsearg\doprintindex}
-!
-! \def\doprintindex#1{%
-! \tex
-! \dobreak \chapheadingskip {10000}
-! \catcode`\%=\other\catcode`\&=\other\catcode`\#=\other
-! \catcode`\$=\other
-! \catcode`\~=\other
-! \indexbreaks
- %
-! % The following don't help, since the chars were translated
-! % when the raw index was written, and their fonts were discarded
-! % due to \indexnofonts.
-! %\catcode`\"=\active
-! %\catcode`\^=\active
-! %\catcode`\_=\active
-! %\catcode`\|=\active
-! %\catcode`\<=\active
-! %\catcode`\>=\active
-! % %
-! \def\indexbackslash{\rawbackslashxx}
-! \indexfonts\rm \tolerance=9500 \advance\baselineskip -1pt
-! \begindoublecolumns
- %
- % See if the index file exists and is nonempty.
- \openin 1 \jobname.#1s
---- 2412,2427 ----
-
- % Define the macros used in formatting output of the sorted index material.
-
-! % @printindex causes a particular index (the ??s file) to get printed.
-! % It does not print any chapter heading (usually an @unnumbered).
-! %
- \def\printindex{\parsearg\doprintindex}
-! \def\doprintindex#1{\begingroup
-! \dobreak \chapheadingskip{10000}%
- %
-! \indexfonts \rm
-! \tolerance = 9500
-! \indexbreaks
- %
- % See if the index file exists and is nonempty.
- \openin 1 \jobname.#1s
-***************
-*** 2121,2127 ****
- % index. The easiest way to prevent this problem is to make sure
- % there is some text.
- (Index is nonexistent)
-! \else
- %
- % If the index file exists but is empty, then \openin leaves \ifeof
- % false. We have to make TeX try to read something from the file, so
---- 2431,2437 ----
- % index. The easiest way to prevent this problem is to make sure
- % there is some text.
- (Index is nonexistent)
-! \else
- %
- % If the index file exists but is empty, then \openin leaves \ifeof
- % false. We have to make TeX try to read something from the file, so
-***************
-*** 2130,2142 ****
- \ifeof 1
- (Index is empty)
- \else
- \input \jobname.#1s
- \fi
- \fi
- \closein 1
-! \enddoublecolumns
-! \Etex
-! }
-
- % These macros are used by the sorted index file itself.
- % Change them to control the appearance of the index.
---- 2440,2459 ----
- \ifeof 1
- (Index is empty)
- \else
-+ % Index files are almost Texinfo source, but we use \ as the escape
-+ % character. It would be better to use @, but that's too big a change
-+ % to make right now.
-+ \def\indexbackslash{\rawbackslashxx}%
-+ \catcode`\\ = 0
-+ \catcode`\@ = 11
-+ \escapechar = `\\
-+ \begindoublecolumns
- \input \jobname.#1s
-+ \enddoublecolumns
- \fi
- \fi
- \closein 1
-! \endgroup}
-
- % These macros are used by the sorted index file itself.
- % Change them to control the appearance of the index.
-***************
-*** 2190,2196 ****
- %
- % Insert the text of the index entry. TeX will do line-breaking on it.
- #1%
-! % The following is kluged to not output a line of dots in the index if
- % there are no page numbers. The next person who breaks this will be
- % cursed by a Unix daemon.
- \def\tempa{{\rm }}%
---- 2507,2513 ----
- %
- % Insert the text of the index entry. TeX will do line-breaking on it.
- #1%
-! % 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
- % cursed by a Unix daemon.
- \def\tempa{{\rm }}%
-***************
-*** 2227,2260 ****
- \noindent\hskip\secondaryindent\hbox{#1}\indexdotfill #2\par
- }}
-
-! %% Define two-column mode, which is used in indexes.
-! %% Adapted from the TeXbook, page 416.
-! \catcode `\@=11
-
- \newbox\partialpage
--
- \newdimen\doublecolumnhsize
-
-! \def\begindoublecolumns{\begingroup
- % Grab any single-column material above us.
-! \output = {\global\setbox\partialpage
-! =\vbox{\unvbox255\kern -\topskip \kern \baselineskip}}%
- \eject
- %
-! % Now switch to the double-column output routine.
-! \output={\doublecolumnout}%
- %
- % Change the page size parameters. We could do this once outside this
- % routine, in each of @smallbook, @afourpaper, and the default 8.5x11
- % format, but then we repeat the same computation. Repeating a couple
- % of assignments once per index is clearly meaningless for the
-! % execution time, so we may as well do it once.
- %
- % First we halve the line length, less a little for the gutter between
- % the columns. We compute the gutter based on the line length, so it
- % changes automatically with the paper format. The magic constant
-! % below is chosen so that the gutter has the same value (well, +- <
-! % 1pt) as it did when we hard-coded it.
- %
- % We put the result in a separate register, \doublecolumhsize, so we
- % can restore it in \pagesofar, after \hsize itself has (potentially)
---- 2544,2592 ----
- \noindent\hskip\secondaryindent\hbox{#1}\indexdotfill #2\par
- }}
-
-! % Define two-column mode, which we use to typeset indexes.
-! % Adapted from the TeXbook, page 416, which is to say,
-! % the manmac.tex format used to print the TeXbook itself.
-! \catcode`\@=11
-
- \newbox\partialpage
- \newdimen\doublecolumnhsize
-
-! \def\begindoublecolumns{\begingroup % ended by \enddoublecolumns
- % Grab any single-column material above us.
-! \output = {\global\setbox\partialpage = \vbox{%
-! %
-! % Here is a possibility not foreseen in manmac: if we accumulate a
-! % whole lot of material, we might end up calling this \output
-! % routine twice in a row (see the doublecol-lose test, which is
-! % essentially a couple of indexes with @setchapternewpage off). In
-! % that case, we must prevent the second \partialpage from
-! % simply overwriting the first, causing us to lose the page.
-! % This will preserve it until a real output routine can ship it
-! % out. Generally, \partialpage will be empty when this runs and
-! % this will be a no-op.
-! \unvbox\partialpage
-! %
-! % Unvbox the main output page.
-! \unvbox255
-! \kern-\topskip \kern\baselineskip
-! }}%
- \eject
- %
-! % Use the double-column output routine for subsequent pages.
-! \output = {\doublecolumnout}%
- %
- % Change the page size parameters. We could do this once outside this
- % routine, in each of @smallbook, @afourpaper, and the default 8.5x11
- % format, but then we repeat the same computation. Repeating a couple
- % of assignments once per index is clearly meaningless for the
-! % execution time, so we may as well do it in one place.
- %
- % First we halve the line length, less a little for the gutter between
- % the columns. We compute the gutter based on the line length, so it
- % changes automatically with the paper format. The magic constant
-! % below is chosen so that the gutter has the same value (well, +-<1pt)
-! % as it did when we hard-coded it.
- %
- % We put the result in a separate register, \doublecolumhsize, so we
- % can restore it in \pagesofar, after \hsize itself has (potentially)
-***************
-*** 2268,2374 ****
- % Double the \vsize as well. (We don't need a separate register here,
- % since nobody clobbers \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{%
-! \setbox5=\copy255
-! {\vbadness=10000 \doublecolumnsplit}
-! \ifvbox255
-! \setbox0=\vtop to\dimen@{\unvbox0}
-! \setbox2=\vtop to\dimen@{\unvbox2}
-! \onepageout\pagesofar \unvbox255 \penalty\outputpenalty
-! \else
-! \setbox0=\vbox{\unvbox5}
-! \ifvbox0
-! \dimen@=\ht0 \advance\dimen@ by\topskip \advance\dimen@ by-\baselineskip
-! \divide\dimen@ by2 \splittopskip=\topskip \splitmaxdepth=\maxdepth
-! {\vbadness=10000
-! \loop \global\setbox5=\copy0
-! \setbox1=\vsplit5 to\dimen@
-! \setbox3=\vsplit5 to\dimen@
-! \ifvbox5 \global\advance\dimen@ by1pt \repeat
-! \setbox0=\vbox to\dimen@{\unvbox1}
-! \setbox2=\vbox to\dimen@{\unvbox3}
-! \global\setbox\partialpage=\vbox{\pagesofar}
-! \doublecolumnpagegoal
-! }
-! \fi
-! \fi
- }
-
-- \catcode `\@=\other
- \message{sectioning,}
- % Define chapters, sections, etc.
-
-! \newcount \chapno
-! \newcount \secno \secno=0
-! \newcount \subsecno \subsecno=0
-! \newcount \subsubsecno \subsubsecno=0
-
- % This counter is funny since it counts through charcodes of letters A, B, ...
-! \newcount \appendixno \appendixno = `\@
- \def\appendixletter{\char\the\appendixno}
-
-! \newwrite \contentsfile
- % This is called from \setfilename.
-! \def\opencontents{\openout \contentsfile = \jobname.toc}
-
- % Each @chapter defines this as the name of the chapter.
- % page headings and footings can use it. @section does likewise
-
- \def\thischapter{} \def\thissection{}
-! \def\seccheck#1{\if \pageno<0 %
-! \errmessage{@#1 not allowed after generating table of contents}\fi
-! %
-! }
-
- \def\chapternofonts{%
-! \let\rawbackslash=\relax%
-! \let\frenchspacing=\relax%
-! \def\result{\realbackslash result}
-! \def\equiv{\realbackslash equiv}
-! \def\expansion{\realbackslash expansion}
-! \def\print{\realbackslash print}
-! \def\TeX{\realbackslash TeX}
-! \def\dots{\realbackslash dots}
-! \def\copyright{\realbackslash copyright}
-! \def\tt{\realbackslash tt}
-! \def\bf{\realbackslash bf }
-! \def\w{\realbackslash w}
-! \def\less{\realbackslash less}
-! \def\gtr{\realbackslash gtr}
-! \def\hat{\realbackslash hat}
-! \def\char{\realbackslash char}
-! \def\tclose##1{\realbackslash tclose {##1}}
-! \def\code##1{\realbackslash code {##1}}
-! \def\samp##1{\realbackslash samp {##1}}
-! \def\r##1{\realbackslash r {##1}}
-! \def\b##1{\realbackslash b {##1}}
-! \def\key##1{\realbackslash key {##1}}
-! \def\file##1{\realbackslash file {##1}}
-! \def\kbd##1{\realbackslash kbd {##1}}
-! % These are redefined because @smartitalic wouldn't work inside xdef.
-! \def\i##1{\realbackslash i {##1}}
-! \def\cite##1{\realbackslash cite {##1}}
-! \def\var##1{\realbackslash var {##1}}
-! \def\emph##1{\realbackslash emph {##1}}
-! \def\dfn##1{\realbackslash dfn {##1}}
- }
-
- \newcount\absseclevel % used to calculate proper heading level
---- 2600,2709 ----
- % Double the \vsize as well. (We don't need a separate register here,
- % since nobody clobbers \vsize.)
- \vsize = 2\vsize
- }
- \def\doublecolumnout{%
-! \splittopskip=\topskip \splitmaxdepth=\maxdepth
-! % Get the available space for the double columns -- the normal
-! % (undoubled) page height minus any material left over from the
-! % previous page.
-! \dimen@=\pageheight \advance\dimen@ by-\ht\partialpage
-! % box0 will be the left-hand column, box2 the right.
-! \setbox0=\vsplit255 to\dimen@ \setbox2=\vsplit255 to\dimen@
-! \onepageout\pagesofar
-! \unvbox255
-! \penalty\outputpenalty
-! }
-! \def\pagesofar{%
-! % Re-output the contents of the output page -- any previous material,
-! % followed by the two boxes we just split.
-! \unvbox\partialpage
-! \hsize = \doublecolumnhsize
-! \wd0=\hsize \wd2=\hsize \hbox to\pagewidth{\box0\hfil\box2}%
- }
-+ \def\enddoublecolumns{%
-+ \output = {\balancecolumns}\eject % split what we have
-+ \endgroup % started in \begindoublecolumns
-+ %
-+ % 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 at the end 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
-+
-
- \message{sectioning,}
- % Define chapters, sections, etc.
-
-! \newcount\chapno
-! \newcount\secno \secno=0
-! \newcount\subsecno \subsecno=0
-! \newcount\subsubsecno \subsubsecno=0
-
- % This counter is funny since it counts through charcodes of letters A, B, ...
-! \newcount\appendixno \appendixno = `\@
- \def\appendixletter{\char\the\appendixno}
-
-! \newwrite\contentsfile
- % This is called from \setfilename.
-! \def\opencontents{\openout\contentsfile = \jobname.toc }
-
- % Each @chapter defines this as the name of the chapter.
- % page headings and footings can use it. @section does likewise
-
- \def\thischapter{} \def\thissection{}
-! \def\seccheck#1{\ifnum \pageno<0
-! \errmessage{@#1 not allowed after generating table of contents}%
-! \fi}
-
- \def\chapternofonts{%
-! \let\rawbackslash=\relax
-! \let\frenchspacing=\relax
-! \def\result{\realbackslash result}%
-! \def\equiv{\realbackslash equiv}%
-! \def\expansion{\realbackslash expansion}%
-! \def\print{\realbackslash print}%
-! \def\TeX{\realbackslash TeX}%
-! \def\dots{\realbackslash dots}%
-! \def\copyright{\realbackslash copyright}%
-! \def\tt{\realbackslash tt}%
-! \def\bf{\realbackslash bf}%
-! \def\w{\realbackslash w}%
-! \def\less{\realbackslash less}%
-! \def\gtr{\realbackslash gtr}%
-! \def\hat{\realbackslash hat}%
-! \def\char{\realbackslash char}%
-! \def\tclose##1{\realbackslash tclose{##1}}%
-! \def\code##1{\realbackslash code{##1}}%
-! \def\samp##1{\realbackslash samp{##1}}%
-! \def\r##1{\realbackslash r{##1}}%
-! \def\b##1{\realbackslash b{##1}}%
-! \def\key##1{\realbackslash key{##1}}%
-! \def\file##1{\realbackslash file{##1}}%
-! \def\kbd##1{\realbackslash kbd{##1}}%
-! % These are redefined because @smartitalic wouldn't work inside xdef.
-! \def\i##1{\realbackslash i{##1}}%
-! \def\cite##1{\realbackslash cite{##1}}%
-! \def\var##1{\realbackslash var{##1}}%
-! \def\emph##1{\realbackslash emph{##1}}%
-! \def\dfn##1{\realbackslash dfn{##1}}%
- }
-
- \newcount\absseclevel % used to calculate proper heading level
-***************
-*** 2447,2453 ****
- \def\chapteryyy #1{\numhead0{#1}} % normally numhead0 calls chapterzzz
- \def\chapterzzz #1{\seccheck{chapter}%
- \secno=0 \subsecno=0 \subsubsecno=0
-! \global\advance \chapno by 1 \message{Chapter \the\chapno}%
- \chapmacro {#1}{\the\chapno}%
- \gdef\thissection{#1}%
- \gdef\thischaptername{#1}%
---- 2782,2788 ----
- \def\chapteryyy #1{\numhead0{#1}} % normally numhead0 calls chapterzzz
- \def\chapterzzz #1{\seccheck{chapter}%
- \secno=0 \subsecno=0 \subsubsecno=0
-! \global\advance \chapno by 1 \message{\putwordChapter \the\chapno}%
- \chapmacro {#1}{\the\chapno}%
- \gdef\thissection{#1}%
- \gdef\thischaptername{#1}%
-***************
-*** 2455,2461 ****
- % because we don't want its macros evaluated now.
- \xdef\thischapter{\putwordChapter{} \the\chapno: \noexpand\thischaptername}%
- {\chapternofonts%
-! \edef\temp{{\realbackslash chapentry {#1}{\the\chapno}{\noexpand\folio}}}%
- \escapechar=`\\%
- \write \contentsfile \temp %
- \donoderef %
---- 2790,2797 ----
- % because we don't want its macros evaluated now.
- \xdef\thischapter{\putwordChapter{} \the\chapno: \noexpand\thischaptername}%
- {\chapternofonts%
-! \toks0 = {#1}%
-! \edef\temp{{\realbackslash chapentry{\the\toks0}{\the\chapno}{\noexpand\folio}}}%
- \escapechar=`\\%
- \write \contentsfile \temp %
- \donoderef %
-***************
-*** 2474,2481 ****
- \gdef\thischaptername{#1}%
- \xdef\thischapter{\putwordAppendix{} \appendixletter: \noexpand\thischaptername}%
- {\chapternofonts%
-! \edef\temp{{\realbackslash chapentry
-! {#1}{\putwordAppendix{} \appendixletter}{\noexpand\folio}}}%
- \escapechar=`\\%
- \write \contentsfile \temp %
- \appendixnoderef %
---- 2810,2818 ----
- \gdef\thischaptername{#1}%
- \xdef\thischapter{\putwordAppendix{} \appendixletter: \noexpand\thischaptername}%
- {\chapternofonts%
-! \toks0 = {#1}%
-! \edef\temp{{\realbackslash chapentry{\the\toks0}%
-! {\putwordAppendix{} \appendixletter}{\noexpand\folio}}}%
- \escapechar=`\\%
- \write \contentsfile \temp %
- \appendixnoderef %
-***************
-*** 2484,2489 ****
---- 2821,2830 ----
- \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\unnumbered{\parsearg\unnumberedyyy}
- \def\unnumberedyyy #1{\unnmhead0{#1}} % normally unnmhead0 calls unnumberedzzz
-***************
-*** 2505,2511 ****
- \unnumbchapmacro {#1}%
- \gdef\thischapter{#1}\gdef\thissection{#1}%
- {\chapternofonts%
-! \edef\temp{{\realbackslash unnumbchapentry {#1}{\noexpand\folio}}}%
- \escapechar=`\\%
- \write \contentsfile \temp %
- \unnumbnoderef %
---- 2846,2853 ----
- \unnumbchapmacro {#1}%
- \gdef\thischapter{#1}\gdef\thissection{#1}%
- {\chapternofonts%
-! \toks0 = {#1}%
-! \edef\temp{{\realbackslash unnumbchapentry{\the\toks0}{\noexpand\folio}}}%
- \escapechar=`\\%
- \write \contentsfile \temp %
- \unnumbnoderef %
-***************
-*** 2520,2542 ****
- \subsecno=0 \subsubsecno=0 \global\advance \secno by 1 %
- \gdef\thissection{#1}\secheading {#1}{\the\chapno}{\the\secno}%
- {\chapternofonts%
- \edef\temp{{\realbackslash secentry %
-! {#1}{\the\chapno}{\the\secno}{\noexpand\folio}}}%
- \escapechar=`\\%
- \write \contentsfile \temp %
- \donoderef %
- \penalty 10000 %
- }}
-
-! \outer\def\appenixsection{\parsearg\appendixsecyyy}
- \outer\def\appendixsec{\parsearg\appendixsecyyy}
- \def\appendixsecyyy #1{\apphead1{#1}} % normally calls appendixsectionzzz
- \def\appendixsectionzzz #1{\seccheck{appendixsection}%
- \subsecno=0 \subsubsecno=0 \global\advance \secno by 1 %
- \gdef\thissection{#1}\secheading {#1}{\appendixletter}{\the\secno}%
- {\chapternofonts%
- \edef\temp{{\realbackslash secentry %
-! {#1}{\appendixletter}{\the\secno}{\noexpand\folio}}}%
- \escapechar=`\\%
- \write \contentsfile \temp %
- \appendixnoderef %
---- 2862,2886 ----
- \subsecno=0 \subsubsecno=0 \global\advance \secno by 1 %
- \gdef\thissection{#1}\secheading {#1}{\the\chapno}{\the\secno}%
- {\chapternofonts%
-+ \toks0 = {#1}%
- \edef\temp{{\realbackslash secentry %
-! {\the\toks0}{\the\chapno}{\the\secno}{\noexpand\folio}}}%
- \escapechar=`\\%
- \write \contentsfile \temp %
- \donoderef %
- \penalty 10000 %
- }}
-
-! \outer\def\appendixsection{\parsearg\appendixsecyyy}
- \outer\def\appendixsec{\parsearg\appendixsecyyy}
- \def\appendixsecyyy #1{\apphead1{#1}} % normally calls appendixsectionzzz
- \def\appendixsectionzzz #1{\seccheck{appendixsection}%
- \subsecno=0 \subsubsecno=0 \global\advance \secno by 1 %
- \gdef\thissection{#1}\secheading {#1}{\appendixletter}{\the\secno}%
- {\chapternofonts%
-+ \toks0 = {#1}%
- \edef\temp{{\realbackslash secentry %
-! {\the\toks0}{\appendixletter}{\the\secno}{\noexpand\folio}}}%
- \escapechar=`\\%
- \write \contentsfile \temp %
- \appendixnoderef %
-***************
-*** 2548,2554 ****
- \def\unnumberedseczzz #1{\seccheck{unnumberedsec}%
- \plainsecheading {#1}\gdef\thissection{#1}%
- {\chapternofonts%
-! \edef\temp{{\realbackslash unnumbsecentry{#1}{\noexpand\folio}}}%
- \escapechar=`\\%
- \write \contentsfile \temp %
- \unnumbnoderef %
---- 2892,2899 ----
- \def\unnumberedseczzz #1{\seccheck{unnumberedsec}%
- \plainsecheading {#1}\gdef\thissection{#1}%
- {\chapternofonts%
-! \toks0 = {#1}%
-! \edef\temp{{\realbackslash unnumbsecentry{\the\toks0}{\noexpand\folio}}}%
- \escapechar=`\\%
- \write \contentsfile \temp %
- \unnumbnoderef %
-***************
-*** 2561,2568 ****
- \gdef\thissection{#1}\subsubsecno=0 \global\advance \subsecno by 1 %
- \subsecheading {#1}{\the\chapno}{\the\secno}{\the\subsecno}%
- {\chapternofonts%
- \edef\temp{{\realbackslash subsecentry %
-! {#1}{\the\chapno}{\the\secno}{\the\subsecno}{\noexpand\folio}}}%
- \escapechar=`\\%
- \write \contentsfile \temp %
- \donoderef %
---- 2906,2914 ----
- \gdef\thissection{#1}\subsubsecno=0 \global\advance \subsecno by 1 %
- \subsecheading {#1}{\the\chapno}{\the\secno}{\the\subsecno}%
- {\chapternofonts%
-+ \toks0 = {#1}%
- \edef\temp{{\realbackslash subsecentry %
-! {\the\toks0}{\the\chapno}{\the\secno}{\the\subsecno}{\noexpand\folio}}}%
- \escapechar=`\\%
- \write \contentsfile \temp %
- \donoderef %
-***************
-*** 2575,2582 ****
- \gdef\thissection{#1}\subsubsecno=0 \global\advance \subsecno by 1 %
- \subsecheading {#1}{\appendixletter}{\the\secno}{\the\subsecno}%
- {\chapternofonts%
- \edef\temp{{\realbackslash subsecentry %
-! {#1}{\appendixletter}{\the\secno}{\the\subsecno}{\noexpand\folio}}}%
- \escapechar=`\\%
- \write \contentsfile \temp %
- \appendixnoderef %
---- 2921,2929 ----
- \gdef\thissection{#1}\subsubsecno=0 \global\advance \subsecno by 1 %
- \subsecheading {#1}{\appendixletter}{\the\secno}{\the\subsecno}%
- {\chapternofonts%
-+ \toks0 = {#1}%
- \edef\temp{{\realbackslash subsecentry %
-! {\the\toks0}{\appendixletter}{\the\secno}{\the\subsecno}{\noexpand\folio}}}%
- \escapechar=`\\%
- \write \contentsfile \temp %
- \appendixnoderef %
-***************
-*** 2586,2594 ****
- \outer\def\unnumberedsubsec{\parsearg\unnumberedsubsecyyy}
- \def\unnumberedsubsecyyy #1{\unnmhead2{#1}} %normally calls unnumberedsubseczzz
- \def\unnumberedsubseczzz #1{\seccheck{unnumberedsubsec}%
-! \plainsecheading {#1}\gdef\thissection{#1}%
- {\chapternofonts%
-! \edef\temp{{\realbackslash unnumbsubsecentry{#1}{\noexpand\folio}}}%
- \escapechar=`\\%
- \write \contentsfile \temp %
- \unnumbnoderef %
---- 2933,2942 ----
- \outer\def\unnumberedsubsec{\parsearg\unnumberedsubsecyyy}
- \def\unnumberedsubsecyyy #1{\unnmhead2{#1}} %normally calls unnumberedsubseczzz
- \def\unnumberedsubseczzz #1{\seccheck{unnumberedsubsec}%
-! \plainsubsecheading {#1}\gdef\thissection{#1}%
- {\chapternofonts%
-! \toks0 = {#1}%
-! \edef\temp{{\realbackslash unnumbsubsecentry{\the\toks0}{\noexpand\folio}}}%
- \escapechar=`\\%
- \write \contentsfile \temp %
- \unnumbnoderef %
-***************
-*** 2602,2609 ****
- \subsubsecheading {#1}
- {\the\chapno}{\the\secno}{\the\subsecno}{\the\subsubsecno}%
- {\chapternofonts%
-! \edef\temp{{\realbackslash subsubsecentry %
-! {#1}
- {\the\chapno}{\the\secno}{\the\subsecno}{\the\subsubsecno}
- {\noexpand\folio}}}%
- \escapechar=`\\%
---- 2950,2957 ----
- \subsubsecheading {#1}
- {\the\chapno}{\the\secno}{\the\subsecno}{\the\subsubsecno}%
- {\chapternofonts%
-! \toks0 = {#1}%
-! \edef\temp{{\realbackslash subsubsecentry{\the\toks0}
- {\the\chapno}{\the\secno}{\the\subsecno}{\the\subsubsecno}
- {\noexpand\folio}}}%
- \escapechar=`\\%
-***************
-*** 2619,2625 ****
- \subsubsecheading {#1}
- {\appendixletter}{\the\secno}{\the\subsecno}{\the\subsubsecno}%
- {\chapternofonts%
-! \edef\temp{{\realbackslash subsubsecentry{#1}%
- {\appendixletter}
- {\the\secno}{\the\subsecno}{\the\subsubsecno}{\noexpand\folio}}}%
- \escapechar=`\\%
---- 2967,2974 ----
- \subsubsecheading {#1}
- {\appendixletter}{\the\secno}{\the\subsecno}{\the\subsubsecno}%
- {\chapternofonts%
-! \toks0 = {#1}%
-! \edef\temp{{\realbackslash subsubsecentry{\the\toks0}%
- {\appendixletter}
- {\the\secno}{\the\subsecno}{\the\subsubsecno}{\noexpand\folio}}}%
- \escapechar=`\\%
-***************
-*** 2631,2639 ****
- \outer\def\unnumberedsubsubsec{\parsearg\unnumberedsubsubsecyyy}
- \def\unnumberedsubsubsecyyy #1{\unnmhead3{#1}} %normally unnumberedsubsubseczzz
- \def\unnumberedsubsubseczzz #1{\seccheck{unnumberedsubsubsec}%
-! \plainsecheading {#1}\gdef\thissection{#1}%
- {\chapternofonts%
-! \edef\temp{{\realbackslash unnumbsubsubsecentry{#1}{\noexpand\folio}}}%
- \escapechar=`\\%
- \write \contentsfile \temp %
- \unnumbnoderef %
---- 2980,2989 ----
- \outer\def\unnumberedsubsubsec{\parsearg\unnumberedsubsubsecyyy}
- \def\unnumberedsubsubsecyyy #1{\unnmhead3{#1}} %normally unnumberedsubsubseczzz
- \def\unnumberedsubsubseczzz #1{\seccheck{unnumberedsubsubsec}%
-! \plainsubsubsecheading {#1}\gdef\thissection{#1}%
- {\chapternofonts%
-! \toks0 = {#1}%
-! \edef\temp{{\realbackslash unnumbsubsubsecentry{\the\toks0}{\noexpand\folio}}}%
- \escapechar=`\\%
- \write \contentsfile \temp %
- \unnumbnoderef %
-***************
-*** 2669,2678 ****
-
- % NOTE on use of \vbox for chapter headings, section headings, and
- % such:
-! % 1) We use \vbox rather than the earlier \line to permit
-! % overlong headings to fold.
-! % 2) \hyphenpenalty is set to 10000 because hyphenation in a
-! % heading is obnoxious; this forbids it.
- % 3) Likewise, headings look best if no \parindent is used, and
- % if justification is not attempted. Hence \raggedright.
-
---- 3019,3028 ----
-
- % NOTE on use of \vbox for chapter headings, section headings, and
- % such:
-! % 1) We use \vbox rather than the earlier \line to permit
-! % overlong headings to fold.
-! % 2) \hyphenpenalty is set to 10000 because hyphenation in a
-! % heading is obnoxious; this forbids it.
- % 3) Likewise, headings look best if no \parindent is used, and
- % if justification is not attempted. Hence \raggedright.
-
-***************
-*** 2690,2700 ****
- \parindent=0pt\raggedright
- \rm #1\hfill}}\bigskip \par\penalty 200}
-
-! \def\heading{\parsearg\secheadingi}
-!
-! \def\subheading{\parsearg\subsecheadingi}
-!
-! \def\subsubheading{\parsearg\subsubsecheadingi}
-
- % These macros generate a chapter, section, etc. heading only
- % (including whitespace, linebreaking, etc. around it),
---- 3040,3049 ----
- \parindent=0pt\raggedright
- \rm #1\hfill}}\bigskip \par\penalty 200}
-
-! % @heading, @subheading, @subsubheading.
-! \def\heading{\parsearg\plainsecheading}
-! \def\subheading{\parsearg\plainsubsecheading}
-! \def\subsubheading{\parsearg\plainsubsubsecheading}
-
- % These macros generate a chapter, section, etc. heading only
- % (including whitespace, linebreaking, etc. around it),
-***************
-*** 2708,2714 ****
- %%% Define plain chapter starts, and page on/off switching for it
- % Parameter controlling skip before chapter headings (if needed)
-
-! \newskip \chapheadingskip \chapheadingskip = 30pt plus 8pt minus 4pt
-
- \def\chapbreak{\dobreak \chapheadingskip {-4000}}
- \def\chappager{\par\vfill\supereject}
---- 3057,3063 ----
- %%% Define plain chapter starts, and page on/off switching for it
- % Parameter controlling skip before chapter headings (if needed)
-
-! \newskip\chapheadingskip
-
- \def\chapbreak{\dobreak \chapheadingskip {-4000}}
- \def\chappager{\par\vfill\supereject}
-***************
-*** 2717,2731 ****
---- 3066,3083 ----
- \def\setchapternewpage #1 {\csname CHAPPAG#1\endcsname}
-
- \def\CHAPPAGoff{
-+ \global\let\contentsalignmacro = \chappager
- \global\let\pchapsepmacro=\chapbreak
- \global\let\pagealignmacro=\chappager}
-
- \def\CHAPPAGon{
-+ \global\let\contentsalignmacro = \chappager
- \global\let\pchapsepmacro=\chappager
- \global\let\pagealignmacro=\chappager
- \global\def\HEADINGSon{\HEADINGSsingle}}
-
- \def\CHAPPAGodd{
-+ \global\let\contentsalignmacro = \chapoddpage
- \global\let\pchapsepmacro=\chapoddpage
- \global\let\pagealignmacro=\chapoddpage
- \global\def\HEADINGSon{\HEADINGSdouble}}
-***************
-*** 2734,2758 ****
-
- \def\CHAPFplain{
- \global\let\chapmacro=\chfplain
-! \global\let\unnumbchapmacro=\unnchfplain}
-
-! \def\chfplain #1#2{%
- \pchapsepmacro
- {%
-! \chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000
-! \parindent=0pt\raggedright
-! \rm #2\enspace #1}%
- }%
-! \bigskip
-! \penalty5000
- }
-
-! \def\unnchfplain #1{%
-! \pchapsepmacro %
-! {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000
-! \parindent=0pt\raggedright
-! \rm #1\hfill}}\bigskip \par\penalty 10000 %
-! }
- \CHAPFplain % The default
-
- \def\unnchfopen #1{%
---- 3086,3124 ----
-
- \def\CHAPFplain{
- \global\let\chapmacro=\chfplain
-! \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{%
- \pchapsepmacro
- {%
-! \chapfonts \rm
-! \def\chapnum{#2}%
-! \setbox0 = \hbox{#2\ifx\chapnum\empty\else\enspace\fi}%
-! \vbox{\hyphenpenalty=10000 \tolerance=5000 \parindent=0pt \raggedright
-! \hangindent = \wd0 \centerparametersmaybe
-! \unhbox0 #1\par}%
- }%
-! \nobreak\bigskip % no page break after a chapter title
-! \nobreak
- }
-
-! % Plain opening for unnumbered.
-! \def\unnchfplain#1{\chfplain{#1}{}}
-!
-! % @centerchap -- centered and unnumbered.
-! \let\centerparametersmaybe = \relax
-! \def\centerchfplain#1{{%
-! \def\centerparametersmaybe{%
-! \advance\rightskip by 3\rightskip
-! \leftskip = \rightskip
-! \parfillskip = 0pt
-! }%
-! \chfplain{#1}{}%
-! }}
-!
- \CHAPFplain % The default
-
- \def\unnchfopen #1{%
-***************
-*** 2766,2839 ****
- \par\penalty 5000 %
- }
-
- \def\CHAPFopen{
- \global\let\chapmacro=\chfopen
-! \global\let\unnumbchapmacro=\unnchfopen}
-
-- % Parameter controlling skip before section headings.
--
-- \newskip \subsecheadingskip \subsecheadingskip = 17pt plus 8pt minus 4pt
-- \def\subsecheadingbreak{\dobreak \subsecheadingskip {-500}}
-
-! \newskip \secheadingskip \secheadingskip = 21pt plus 8pt minus 4pt
- \def\secheadingbreak{\dobreak \secheadingskip {-1000}}
-
-! % @paragraphindent is defined for the Info formatting commands only.
-! \let\paragraphindent=\comment
-
-! % Section fonts are the base font at magstep2, which produces
-! % a size a bit more than 14 points in the default situation.
-
-- \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
+ % Change the page size parameters. We could do this once outside this
+@@ -2249,11 +2581,11 @@
+ % format, but then we repeat the same computation. Repeating a couple
+ % of assignments once per index is clearly meaningless for the
+- % execution time, so we may as well do it once.
++ % execution time, so we may as well do it in one place.
+ %
+ % First we halve the line length, less a little for the gutter between
+ % the columns. We compute the gutter based on the line length, so it
+ % changes automatically with the paper format. The magic constant
+- % below is chosen so that the gutter has the same value (well, +- <
+- % 1pt) as it did when we hard-coded it.
++ % below is chosen so that the gutter has the same value (well, +-<1pt)
++ % as it did when we hard-coded it.
+ %
+ % We put the result in a separate register, \doublecolumhsize, so we
+@@ -2269,64 +2601,68 @@
+ % since nobody clobbers \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{%
+- \setbox5=\copy255
+- {\vbadness=10000 \doublecolumnsplit}
+- \ifvbox255
+- \setbox0=\vtop to\dimen@{\unvbox0}
+- \setbox2=\vtop to\dimen@{\unvbox2}
+- \onepageout\pagesofar \unvbox255 \penalty\outputpenalty
+- \else
+- \setbox0=\vbox{\unvbox5}
+- \ifvbox0
+- \dimen@=\ht0 \advance\dimen@ by\topskip \advance\dimen@ by-\baselineskip
+- \divide\dimen@ by2 \splittopskip=\topskip \splitmaxdepth=\maxdepth
+- {\vbadness=10000
+- \loop \global\setbox5=\copy0
+- \setbox1=\vsplit5 to\dimen@
+- \setbox3=\vsplit5 to\dimen@
+- \ifvbox5 \global\advance\dimen@ by1pt \repeat
+- \setbox0=\vbox to\dimen@{\unvbox1}
+- \setbox2=\vbox to\dimen@{\unvbox3}
+- \global\setbox\partialpage=\vbox{\pagesofar}
+- \doublecolumnpagegoal
+- }
+- \fi
+- \fi
++ \splittopskip=\topskip \splitmaxdepth=\maxdepth
++ % Get the available space for the double columns -- the normal
++ % (undoubled) page height minus any material left over from the
++ % previous page.
++ \dimen@=\pageheight \advance\dimen@ by-\ht\partialpage
++ % box0 will be the left-hand column, box2 the right.
++ \setbox0=\vsplit255 to\dimen@ \setbox2=\vsplit255 to\dimen@
++ \onepageout\pagesofar
++ \unvbox255
++ \penalty\outputpenalty
++}
++\def\pagesofar{%
++ % Re-output the contents of the output page -- any previous material,
++ % followed by the two boxes we just split.
++ \unvbox\partialpage
++ \hsize = \doublecolumnhsize
++ \wd0=\hsize \wd2=\hsize \hbox to\pagewidth{\box0\hfil\box2}%
+ }
++\def\enddoublecolumns{%
++ \output = {\balancecolumns}\eject % split what we have
++ \endgroup % started in \begindoublecolumns
++ %
++ % 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 at the end 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,}
+ % Define chapters, sections, etc.
+
+-\newcount \chapno
+-\newcount \secno \secno=0
+-\newcount \subsecno \subsecno=0
+-\newcount \subsubsecno \subsubsecno=0
++\newcount\chapno
++\newcount\secno \secno=0
++\newcount\subsecno \subsecno=0
++\newcount\subsubsecno \subsubsecno=0
+
+ % This counter is funny since it counts through charcodes of letters A, B, ...
+-\newcount \appendixno \appendixno = `\@
++\newcount\appendixno \appendixno = `\@
+ \def\appendixletter{\char\the\appendixno}
+
+-\newwrite \contentsfile
++\newwrite\contentsfile
+ % This is called from \setfilename.
+-\def\opencontents{\openout \contentsfile = \jobname.toc}
++\def\opencontents{\openout\contentsfile = \jobname.toc }
+
+ % Each @chapter defines this as the name of the chapter.
+@@ -2334,40 +2670,39 @@
+
+ \def\thischapter{} \def\thissection{}
+-\def\seccheck#1{\if \pageno<0 %
+-\errmessage{@#1 not allowed after generating table of contents}\fi
+-%
+-}
++\def\seccheck#1{\ifnum \pageno<0
++ \errmessage{@#1 not allowed after generating table of contents}%
++\fi}
+
+ \def\chapternofonts{%
+-\let\rawbackslash=\relax%
+-\let\frenchspacing=\relax%
+-\def\result{\realbackslash result}
+-\def\equiv{\realbackslash equiv}
+-\def\expansion{\realbackslash expansion}
+-\def\print{\realbackslash print}
+-\def\TeX{\realbackslash TeX}
+-\def\dots{\realbackslash dots}
+-\def\copyright{\realbackslash copyright}
+-\def\tt{\realbackslash tt}
+-\def\bf{\realbackslash bf }
+-\def\w{\realbackslash w}
+-\def\less{\realbackslash less}
+-\def\gtr{\realbackslash gtr}
+-\def\hat{\realbackslash hat}
+-\def\char{\realbackslash char}
+-\def\tclose##1{\realbackslash tclose {##1}}
+-\def\code##1{\realbackslash code {##1}}
+-\def\samp##1{\realbackslash samp {##1}}
+-\def\r##1{\realbackslash r {##1}}
+-\def\b##1{\realbackslash b {##1}}
+-\def\key##1{\realbackslash key {##1}}
+-\def\file##1{\realbackslash file {##1}}
+-\def\kbd##1{\realbackslash kbd {##1}}
+-% These are redefined because @smartitalic wouldn't work inside xdef.
+-\def\i##1{\realbackslash i {##1}}
+-\def\cite##1{\realbackslash cite {##1}}
+-\def\var##1{\realbackslash var {##1}}
+-\def\emph##1{\realbackslash emph {##1}}
+-\def\dfn##1{\realbackslash dfn {##1}}
++ \let\rawbackslash=\relax
++ \let\frenchspacing=\relax
++ \def\result{\realbackslash result}%
++ \def\equiv{\realbackslash equiv}%
++ \def\expansion{\realbackslash expansion}%
++ \def\print{\realbackslash print}%
++ \def\TeX{\realbackslash TeX}%
++ \def\dots{\realbackslash dots}%
++ \def\copyright{\realbackslash copyright}%
++ \def\tt{\realbackslash tt}%
++ \def\bf{\realbackslash bf}%
++ \def\w{\realbackslash w}%
++ \def\less{\realbackslash less}%
++ \def\gtr{\realbackslash gtr}%
++ \def\hat{\realbackslash hat}%
++ \def\char{\realbackslash char}%
++ \def\tclose##1{\realbackslash tclose{##1}}%
++ \def\code##1{\realbackslash code{##1}}%
++ \def\samp##1{\realbackslash samp{##1}}%
++ \def\r##1{\realbackslash r{##1}}%
++ \def\b##1{\realbackslash b{##1}}%
++ \def\key##1{\realbackslash key{##1}}%
++ \def\file##1{\realbackslash file{##1}}%
++ \def\kbd##1{\realbackslash kbd{##1}}%
++ % These are redefined because @smartitalic wouldn't work inside xdef.
++ \def\i##1{\realbackslash i{##1}}%
++ \def\cite##1{\realbackslash cite{##1}}%
++ \def\var##1{\realbackslash var{##1}}%
++ \def\emph##1{\realbackslash emph{##1}}%
++ \def\dfn##1{\realbackslash dfn{##1}}%
+ }
+
+@@ -2448,5 +2783,5 @@
+ \def\chapterzzz #1{\seccheck{chapter}%
+ \secno=0 \subsecno=0 \subsubsecno=0
+-\global\advance \chapno by 1 \message{Chapter \the\chapno}%
++\global\advance \chapno by 1 \message{\putwordChapter \the\chapno}%
+ \chapmacro {#1}{\the\chapno}%
+ \gdef\thissection{#1}%
+@@ -2456,5 +2791,6 @@
+ \xdef\thischapter{\putwordChapter{} \the\chapno: \noexpand\thischaptername}%
+ {\chapternofonts%
+-\edef\temp{{\realbackslash chapentry {#1}{\the\chapno}{\noexpand\folio}}}%
++\toks0 = {#1}%
++\edef\temp{{\realbackslash chapentry{\the\toks0}{\the\chapno}{\noexpand\folio}}}%
+ \escapechar=`\\%
+ \write \contentsfile \temp %
+@@ -2475,6 +2811,7 @@
+ \xdef\thischapter{\putwordAppendix{} \appendixletter: \noexpand\thischaptername}%
+ {\chapternofonts%
+-\edef\temp{{\realbackslash chapentry
+- {#1}{\putwordAppendix{} \appendixletter}{\noexpand\folio}}}%
++\toks0 = {#1}%
++\edef\temp{{\realbackslash chapentry{\the\toks0}%
++ {\putwordAppendix{} \appendixletter}{\noexpand\folio}}}%
+ \escapechar=`\\%
+ \write \contentsfile \temp %
+@@ -2485,4 +2822,8 @@
+ }}
+
++% @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\unnumbered{\parsearg\unnumberedyyy}
+@@ -2506,5 +2847,6 @@
+ \gdef\thischapter{#1}\gdef\thissection{#1}%
+ {\chapternofonts%
+-\edef\temp{{\realbackslash unnumbchapentry {#1}{\noexpand\folio}}}%
++\toks0 = {#1}%
++\edef\temp{{\realbackslash unnumbchapentry{\the\toks0}{\noexpand\folio}}}%
+ \escapechar=`\\%
+ \write \contentsfile \temp %
+@@ -2521,6 +2863,7 @@
+ \gdef\thissection{#1}\secheading {#1}{\the\chapno}{\the\secno}%
+ {\chapternofonts%
++\toks0 = {#1}%
+ \edef\temp{{\realbackslash secentry %
+-{#1}{\the\chapno}{\the\secno}{\noexpand\folio}}}%
++{\the\toks0}{\the\chapno}{\the\secno}{\noexpand\folio}}}%
+ \escapechar=`\\%
+ \write \contentsfile \temp %
+@@ -2529,5 +2872,5 @@
+ }}
+
+-\outer\def\appenixsection{\parsearg\appendixsecyyy}
++\outer\def\appendixsection{\parsearg\appendixsecyyy}
+ \outer\def\appendixsec{\parsearg\appendixsecyyy}
+ \def\appendixsecyyy #1{\apphead1{#1}} % normally calls appendixsectionzzz
+@@ -2536,6 +2879,7 @@
+ \gdef\thissection{#1}\secheading {#1}{\appendixletter}{\the\secno}%
+ {\chapternofonts%
++\toks0 = {#1}%
+ \edef\temp{{\realbackslash secentry %
+-{#1}{\appendixletter}{\the\secno}{\noexpand\folio}}}%
++{\the\toks0}{\appendixletter}{\the\secno}{\noexpand\folio}}}%
+ \escapechar=`\\%
+ \write \contentsfile \temp %
+@@ -2549,5 +2893,6 @@
+ \plainsecheading {#1}\gdef\thissection{#1}%
+ {\chapternofonts%
+-\edef\temp{{\realbackslash unnumbsecentry{#1}{\noexpand\folio}}}%
++\toks0 = {#1}%
++\edef\temp{{\realbackslash unnumbsecentry{\the\toks0}{\noexpand\folio}}}%
+ \escapechar=`\\%
+ \write \contentsfile \temp %
+@@ -2562,6 +2907,7 @@
+ \subsecheading {#1}{\the\chapno}{\the\secno}{\the\subsecno}%
+ {\chapternofonts%
++\toks0 = {#1}%
+ \edef\temp{{\realbackslash subsecentry %
+-{#1}{\the\chapno}{\the\secno}{\the\subsecno}{\noexpand\folio}}}%
++{\the\toks0}{\the\chapno}{\the\secno}{\the\subsecno}{\noexpand\folio}}}%
+ \escapechar=`\\%
+ \write \contentsfile \temp %
+@@ -2576,6 +2922,7 @@
+ \subsecheading {#1}{\appendixletter}{\the\secno}{\the\subsecno}%
+ {\chapternofonts%
++\toks0 = {#1}%
+ \edef\temp{{\realbackslash subsecentry %
+-{#1}{\appendixletter}{\the\secno}{\the\subsecno}{\noexpand\folio}}}%
++{\the\toks0}{\appendixletter}{\the\secno}{\the\subsecno}{\noexpand\folio}}}%
+ \escapechar=`\\%
+ \write \contentsfile \temp %
+@@ -2587,7 +2934,8 @@
+ \def\unnumberedsubsecyyy #1{\unnmhead2{#1}} %normally calls unnumberedsubseczzz
+ \def\unnumberedsubseczzz #1{\seccheck{unnumberedsubsec}%
+-\plainsecheading {#1}\gdef\thissection{#1}%
++\plainsubsecheading {#1}\gdef\thissection{#1}%
+ {\chapternofonts%
+-\edef\temp{{\realbackslash unnumbsubsecentry{#1}{\noexpand\folio}}}%
++\toks0 = {#1}%
++\edef\temp{{\realbackslash unnumbsubsecentry{\the\toks0}{\noexpand\folio}}}%
+ \escapechar=`\\%
+ \write \contentsfile \temp %
+@@ -2603,6 +2951,6 @@
+ {\the\chapno}{\the\secno}{\the\subsecno}{\the\subsubsecno}%
+ {\chapternofonts%
+-\edef\temp{{\realbackslash subsubsecentry %
+- {#1}
++\toks0 = {#1}%
++\edef\temp{{\realbackslash subsubsecentry{\the\toks0}
+ {\the\chapno}{\the\secno}{\the\subsecno}{\the\subsubsecno}
+ {\noexpand\folio}}}%
+@@ -2620,5 +2968,6 @@
+ {\appendixletter}{\the\secno}{\the\subsecno}{\the\subsubsecno}%
+ {\chapternofonts%
+-\edef\temp{{\realbackslash subsubsecentry{#1}%
++\toks0 = {#1}%
++\edef\temp{{\realbackslash subsubsecentry{\the\toks0}%
+ {\appendixletter}
+ {\the\secno}{\the\subsecno}{\the\subsubsecno}{\noexpand\folio}}}%
+@@ -2632,7 +2981,8 @@
+ \def\unnumberedsubsubsecyyy #1{\unnmhead3{#1}} %normally unnumberedsubsubseczzz
+ \def\unnumberedsubsubseczzz #1{\seccheck{unnumberedsubsubsec}%
+-\plainsecheading {#1}\gdef\thissection{#1}%
++\plainsubsubsecheading {#1}\gdef\thissection{#1}%
+ {\chapternofonts%
+-\edef\temp{{\realbackslash unnumbsubsubsecentry{#1}{\noexpand\folio}}}%
++\toks0 = {#1}%
++\edef\temp{{\realbackslash unnumbsubsubsecentry{\the\toks0}{\noexpand\folio}}}%
+ \escapechar=`\\%
+ \write \contentsfile \temp %
+@@ -2670,8 +3020,8 @@
+ % NOTE on use of \vbox for chapter headings, section headings, and
+ % such:
+-% 1) We use \vbox rather than the earlier \line to permit
+-% overlong headings to fold.
+-% 2) \hyphenpenalty is set to 10000 because hyphenation in a
+-% heading is obnoxious; this forbids it.
++% 1) We use \vbox rather than the earlier \line to permit
++% overlong headings to fold.
++% 2) \hyphenpenalty is set to 10000 because hyphenation in a
++% heading is obnoxious; this forbids it.
+ % 3) Likewise, headings look best if no \parindent is used, and
+ % if justification is not attempted. Hence \raggedright.
+@@ -2691,9 +3041,8 @@
+ \rm #1\hfill}}\bigskip \par\penalty 200}
+
+-\def\heading{\parsearg\secheadingi}
+-
+-\def\subheading{\parsearg\subsecheadingi}
+-
+-\def\subsubheading{\parsearg\subsubsecheadingi}
++% @heading, @subheading, @subsubheading.
++\def\heading{\parsearg\plainsecheading}
++\def\subheading{\parsearg\plainsubsecheading}
++\def\subsubheading{\parsearg\plainsubsubsecheading}
+
+ % These macros generate a chapter, section, etc. heading only
+@@ -2709,5 +3058,5 @@
+ % Parameter controlling skip before chapter headings (if needed)
+
+-\newskip \chapheadingskip \chapheadingskip = 30pt plus 8pt minus 4pt
++\newskip\chapheadingskip
+
+ \def\chapbreak{\dobreak \chapheadingskip {-4000}}
+@@ -2718,8 +3067,10 @@
+
+ \def\CHAPPAGoff{
++\global\let\contentsalignmacro = \chappager
+ \global\let\pchapsepmacro=\chapbreak
+ \global\let\pagealignmacro=\chappager}
+
+ \def\CHAPPAGon{
++\global\let\contentsalignmacro = \chappager
+ \global\let\pchapsepmacro=\chappager
+ \global\let\pagealignmacro=\chappager
+@@ -2727,4 +3078,5 @@
+
+ \def\CHAPPAGodd{
++\global\let\contentsalignmacro = \chapoddpage
+ \global\let\pchapsepmacro=\chapoddpage
+ \global\let\pagealignmacro=\chapoddpage
+@@ -2735,23 +3087,37 @@
+ \def\CHAPFplain{
+ \global\let\chapmacro=\chfplain
+-\global\let\unnumbchapmacro=\unnchfplain}
++\global\let\unnumbchapmacro=\unnchfplain
++\global\let\centerchapmacro=\centerchfplain}
+
+-\def\chfplain #1#2{%
++% Plain chapter opening.
++% #1 is the text, #2 the chapter number or empty if unnumbered.
++\def\chfplain#1#2{%
+ \pchapsepmacro
+ {%
+- \chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000
+- \parindent=0pt\raggedright
+- \rm #2\enspace #1}%
++ \chapfonts \rm
++ \def\chapnum{#2}%
++ \setbox0 = \hbox{#2\ifx\chapnum\empty\else\enspace\fi}%
++ \vbox{\hyphenpenalty=10000 \tolerance=5000 \parindent=0pt \raggedright
++ \hangindent = \wd0 \centerparametersmaybe
++ \unhbox0 #1\par}%
+ }%
+- \bigskip
+- \penalty5000
++ \nobreak\bigskip % no page break after a chapter title
++ \nobreak
+ }
+
+-\def\unnchfplain #1{%
+-\pchapsepmacro %
+-{\chapfonts \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,
-- % which produces a size of 12 points.
--
-- \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:
-- % Perhaps make sssec fonts scaled
-- % magstep half
-- \def\subsubsecheading #1#2#3#4#5{\subsubsecheadingi {#2.#3.#4.#5\enspace #1}}
-- \def\subsubsecheadingi #1{{\advance \subsecheadingskip by \parskip %
-- \subsecheadingbreak}%
-- {\subsubsecfonts \vbox{\hyphenpenalty=10000\tolerance=5000
-- \parindent=0pt\raggedright
-- \rm #1\hfill}}%
-- \ifdim \parskip<10pt \kern 10pt\kern -\parskip\fi \penalty 10000}
-
-
-- \message{toc printing,}
-
- % Finish up the main text and prepare to read what we've written
- % to \contentsfile.
-
- \newskip\contentsrightmargin \contentsrightmargin=1in
- \def\startcontents#1{%
-! \pagealignmacro
- \immediate\closeout \contentsfile
- \ifnum \pageno>0
-! \pageno = -1 % Request roman numbered pages.
- \fi
- % Don't need to put `Contents' or `Short Contents' in the headline.
- % It is abundantly clear what they are.
- \unnumbchapmacro{#1}\def\thischapter{}%
-! \begingroup % Set up to handle contents files properly.
- \catcode`\\=0 \catcode`\{=1 \catcode`\}=2 \catcode`\@=11
- \raggedbottom % Worry more about breakpoints than the bottom.
- \advance\hsize by -\contentsrightmargin % Don't use the full line length.
- }
---- 3132,3214 ----
- \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{
- \global\let\chapmacro=\chfopen
-! \global\let\unnumbchapmacro=\unnchfopen
-! \global\let\centerchapmacro=\centerchfopen}
-
-
-! % Section titles.
-! \newskip\secheadingskip
- \def\secheadingbreak{\dobreak \secheadingskip {-1000}}
-+ \def\secheading#1#2#3{\sectionheading{sec}{#2.#3}{#1}}
-+ \def\plainsecheading#1{\sectionheading{sec}{}{#1}}
-
-! % Subsection titles.
-! \newskip \subsecheadingskip
-! \def\subsecheadingbreak{\dobreak \subsecheadingskip {-500}}
-! \def\subsecheading#1#2#3#4{\sectionheading{subsec}{#2.#3.#4}{#1}}
-! \def\plainsubsecheading#1{\sectionheading{subsec}{}{#1}}
-
-! % Subsubsection titles.
-! \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}}
-
-
-+ % Print any size section title.
-+ %
-+ % #1 is the section type (sec/subsec/subsubsec), #2 is the section
-+ % number (maybe empty), #3 the text.
-+ \def\sectionheading#1#2#3{%
-+ {%
-+ \expandafter\advance\csname #1headingskip\endcsname by \parskip
-+ \csname #1headingbreak\endcsname
-+ }%
-+ {%
-+ % 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,}
- % Finish up the main text and prepare to read what we've written
- % to \contentsfile.
-
- \newskip\contentsrightmargin \contentsrightmargin=1in
- \def\startcontents#1{%
-! % 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
- \ifnum \pageno>0
-! \pageno = -1 % Request roman numbered pages.
- \fi
- % Don't need to put `Contents' or `Short Contents' in the headline.
- % It is abundantly clear what they are.
- \unnumbchapmacro{#1}\def\thischapter{}%
-! \begingroup % Set up to handle contents files properly.
- \catcode`\\=0 \catcode`\{=1 \catcode`\}=2 \catcode`\@=11
-+ \catcode`\^=7 % to see ^^e4 as \"a etc. juha@piuha.ydi.vtt.fi
- \raggedbottom % Worry more about breakpoints than the bottom.
- \advance\hsize by -\contentsrightmargin % Don't use the full line length.
- }
-***************
-*** 2857,2862 ****
---- 3232,3238 ----
- \secfonts
- \let\rm=\shortcontrm \let\bf=\shortcontbf \let\sl=\shortcontsl
- \rm
-+ \hyphenpenalty = 10000
- \advance\baselineskip by 1pt % Open it up a little.
- \def\secentry ##1##2##3##4{}
- \def\unnumbsecentry ##1##2{}
-***************
-*** 2900,2906 ****
- % 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.
- % (This space doesn't include the extra space that gets added after
-! % the label; that gets put in in \shortchapentry above.)
- \advance\dimen0 by 1.1em
- \hbox to \dimen0{#1\hfil}%
- }
---- 3276,3282 ----
- % 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.
- % (This space doesn't include the extra space that gets added after
-! % the label; that gets put in by \shortchapentry above.)
- \advance\dimen0 by 1.1em
- \hbox to \dimen0{#1\hfil}%
- }
-***************
-*** 2921,2942 ****
- \dosubsubsecentry{#2.#3.#4.#5\labelspace#1}{#6}}
- \def\unnumbsubsubsecentry#1#2{\dosubsubsecentry{#1}{#2}}
-
--
- % This parameter controls the indentation of the various levels.
- \newdimen\tocindent \tocindent = 3pc
-
- % Now for the actual typesetting. In all these, #1 is the text and #2 is the
- % page number.
- %
-! % If the toc has to be broken over pages, we would want to be at chapters
- % if at all possible; hence the \penalty.
- \def\dochapentry#1#2{%
-! \penalty-300 \vskip\baselineskip
- \begingroup
- \chapentryfonts
- \tocentry{#1}{\dopageno{#2}}%
- \endgroup
-! \nobreak\vskip .25\baselineskip
- }
-
- \def\dosecentry#1#2{\begingroup
---- 3297,3317 ----
- \dosubsubsecentry{#2.#3.#4.#5\labelspace#1}{#6}}
- \def\unnumbsubsubsecentry#1#2{\dosubsubsecentry{#1}{#2}}
-
- % This parameter controls the indentation of the various levels.
- \newdimen\tocindent \tocindent = 3pc
-
- % Now for the actual typesetting. In all these, #1 is the text and #2 is the
- % page number.
- %
-! % If the toc has to be broken over pages, we want it to be at chapters
- % if at all possible; hence the \penalty.
- \def\dochapentry#1#2{%
-! \penalty-300 \vskip1\baselineskip plus.33\baselineskip minus.25\baselineskip
- \begingroup
- \chapentryfonts
- \tocentry{#1}{\dopageno{#2}}%
- \endgroup
-! \nobreak\vskip .25\baselineskip plus.1\baselineskip
- }
-
- \def\dosecentry#1#2{\begingroup
-***************
-*** 2959,2967 ****
- % 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.)
- %
- \def\tocentry#1#2{\begingroup
-! \hyphenpenalty = 10000
-! \entry{#1}{#2}%
- \endgroup}
-
- % Space between chapter (or whatever) number and the title.
---- 3334,3343 ----
- % 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.)
- %
-+ % \turnoffactive is for the sake of @" used for umlauts.
- \def\tocentry#1#2{\begingroup
-! \vskip 0pt plus1pt % allow a little stretch for the sake of nice page breaks
-! \entry{\turnoffactive #1}{\turnoffactive #2}%
- \endgroup}
-
- % Space between chapter (or whatever) number and the title.
-***************
-*** 2985,2992 ****
- \newbox\pushcharbox \newbox\bullbox
- \newbox\equivbox \newbox\errorbox
-
-- \let\ptexequiv = \equiv
--
- %{\tentt
- %\global\setbox\dblarrowbox = \hbox to 1em{\hfil$\Rightarrow$\hfil}
- %\global\setbox\longdblarrowbox = \hbox to 1em{\hfil$\mapsto$\hfil}
---- 3361,3366 ----
-***************
-*** 2997,3008 ****
- % depth .1ex\hfil}
- %}
-
- \def\point{$\star$}
--
- \def\result{\leavevmode\raise.15ex\hbox to 1em{\hfil$\Rightarrow$\hfil}}
- \def\expansion{\leavevmode\raise.1ex\hbox to 1em{\hfil$\mapsto$\hfil}}
- \def\print{\leavevmode\lower.1ex\hbox to 1em{\hfil$\dashv$\hfil}}
--
- \def\equiv{\leavevmode\lower.1ex\hbox to 1em{\hfil$\ptexequiv$\hfil}}
-
- % Adapted from the TeXbook's \boxit.
---- 3371,3381 ----
- % depth .1ex\hfil}
- %}
-
-+ % @point{}, @result{}, @expansion{}, @print{}, @equiv{}.
- \def\point{$\star$}
- \def\result{\leavevmode\raise.15ex\hbox to 1em{\hfil$\Rightarrow$\hfil}}
- \def\expansion{\leavevmode\raise.1ex\hbox to 1em{\hfil$\mapsto$\hfil}}
- \def\print{\leavevmode\lower.1ex\hbox to 1em{\hfil$\dashv$\hfil}}
- \def\equiv{\leavevmode\lower.1ex\hbox to 1em{\hfil$\ptexequiv$\hfil}}
-
- % Adapted from the TeXbook's \boxit.
-***************
-*** 3034,3040 ****
- \catcode `\$=3 \catcode `\&=4 \catcode `\#=6
- \catcode `\^=7 \catcode `\_=8 \catcode `\~=13 \let~=\tie
- \catcode `\%=14
-! \catcode 43=12
- \catcode`\"=12
- \catcode`\==12
- \catcode`\|=12
---- 3407,3413 ----
- \catcode `\$=3 \catcode `\&=4 \catcode `\#=6
- \catcode `\^=7 \catcode `\_=8 \catcode `\~=13 \let~=\tie
- \catcode `\%=14
-! \catcode 43=12 % plus
- \catcode`\"=12
- \catcode`\==12
- \catcode`\|=12
-***************
-*** 3042,3057 ****
- \catcode`\>=12
- \escapechar=`\\
- %
-! \let\~=\ptextilde
- \let\{=\ptexlbrace
- \let\}=\ptexrbrace
- \let\.=\ptexdot
- \let\*=\ptexstar
- \let\dots=\ptexdots
- \def\@{@}%
- \let\bullet=\ptexbullet
-! \let\b=\ptexb \let\c=\ptexc \let\i=\ptexi \let\t=\ptext \let\l=\ptexl
-! \let\L=\ptexL
- %
- \let\Etex=\endgroup}
-
---- 3415,3431 ----
- \catcode`\>=12
- \escapechar=`\\
- %
-! \let\,=\ptexcomma
- \let\{=\ptexlbrace
- \let\}=\ptexrbrace
- \let\.=\ptexdot
- \let\*=\ptexstar
- \let\dots=\ptexdots
-+ \def\endldots{\mathinner{\ldots\ldots\ldots\ldots}}%
-+ \def\enddots{\relax\ifmmode\endldots\else$\mathsurround=0pt \endldots\,$\fi}%
- \def\@{@}%
- \let\bullet=\ptexbullet
-! \let\b=\ptexb \let\c=\ptexc \let\i=\ptexi \let\t=\ptext
- %
- \let\Etex=\endgroup}
-
-***************
-*** 3110,3159 ****
- \def\cbl{{\circle\char'012\hskip -6pt}}
- \def\cbr{{\hskip 6pt\circle\char'011}}
- \def\carttop{\hbox to \cartouter{\hskip\lskip
-! \ctl\leaders\hrule height\circthick\hfil\ctr
-! \hskip\rskip}}
- \def\cartbot{\hbox to \cartouter{\hskip\lskip
-! \cbl\leaders\hrule height\circthick\hfil\cbr
-! \hskip\rskip}}
- %
- \newskip\lskip\newskip\rskip
-
- \long\def\cartouche{%
- \begingroup
-! \lskip=\leftskip \rskip=\rightskip
-! \leftskip=0pt\rightskip=0pt %we want these *outside*.
-! \cartinner=\hsize \advance\cartinner by-\lskip
-! \advance\cartinner by-\rskip
-! \cartouter=\hsize
-! \advance\cartouter by 18pt % allow for 3pt kerns on either
-! % side, and for 6pt waste from
-! % each corner char
-! \normbskip=\baselineskip \normpskip=\parskip \normlskip=\lineskip
-! % Flag to tell @lisp, etc., not to narrow margin.
-! \let\nonarrowing=\comment
-! \vbox\bgroup
-! \baselineskip=0pt\parskip=0pt\lineskip=0pt
-! \carttop
-! \hbox\bgroup
-! \hskip\lskip
-! \vrule\kern3pt
-! \vbox\bgroup
-! \hsize=\cartinner
-! \kern3pt
-! \begingroup
-! \baselineskip=\normbskip
-! \lineskip=\normlskip
-! \parskip=\normpskip
-! \vskip -\parskip
- \def\Ecartouche{%
-! \endgroup
-! \kern3pt
-! \egroup
-! \kern3pt\vrule
-! \hskip\rskip
-! \egroup
-! \cartbot
-! \egroup
- \endgroup
- }}
-
---- 3484,3533 ----
- \def\cbl{{\circle\char'012\hskip -6pt}}
- \def\cbr{{\hskip 6pt\circle\char'011}}
- \def\carttop{\hbox to \cartouter{\hskip\lskip
-! \ctl\leaders\hrule height\circthick\hfil\ctr
-! \hskip\rskip}}
- \def\cartbot{\hbox to \cartouter{\hskip\lskip
-! \cbl\leaders\hrule height\circthick\hfil\cbr
-! \hskip\rskip}}
- %
- \newskip\lskip\newskip\rskip
-
- \long\def\cartouche{%
- \begingroup
-! \lskip=\leftskip \rskip=\rightskip
-! \leftskip=0pt\rightskip=0pt %we want these *outside*.
-! \cartinner=\hsize \advance\cartinner by-\lskip
-! \advance\cartinner by-\rskip
-! \cartouter=\hsize
-! \advance\cartouter by 18pt % allow for 3pt kerns on either
-! % side, and for 6pt waste from
-! % each corner char
-! \normbskip=\baselineskip \normpskip=\parskip \normlskip=\lineskip
-! % Flag to tell @lisp, etc., not to narrow margin.
-! \let\nonarrowing=\comment
-! \vbox\bgroup
-! \baselineskip=0pt\parskip=0pt\lineskip=0pt
-! \carttop
-! \hbox\bgroup
-! \hskip\lskip
-! \vrule\kern3pt
-! \vbox\bgroup
-! \hsize=\cartinner
-! \kern3pt
-! \begingroup
-! \baselineskip=\normbskip
-! \lineskip=\normlskip
-! \parskip=\normpskip
-! \vskip -\parskip
- \def\Ecartouche{%
-! \endgroup
-! \kern3pt
-! \egroup
-! \kern3pt\vrule
-! \hskip\rskip
-! \egroup
-! \cartbot
-! \egroup
- \endgroup
- }}
-
-***************
-*** 3216,3223 ****
- \let\Esmalllisp = \nonfillfinish
- \let\Esmallexample = \nonfillfinish
- %
-! % Smaller interline space and fonts for small examples.
-! \setleading{10pt}%
- \indexfonts \tt
- \rawbackslash % make \ output the \ character from the current font (tt)
- \gobble
---- 3590,3596 ----
- \let\Esmalllisp = \nonfillfinish
- \let\Esmallexample = \nonfillfinish
- %
-! % Smaller fonts for small examples.
- \indexfonts \tt
- \rawbackslash % make \ output the \ character from the current font (tt)
- \gobble
-***************
-*** 3306,3324 ****
-
- \gdef\functionparens{\boldbrax\let&=\amprm\parencount=0 }
- \gdef\boldbrax{\let(=\opnr\let)=\clnr\let[=\lbrb\let]=\rbrb}
-
- % Definitions of (, ) and & used in args for functions.
- % This is the definition of ( outside of all parentheses.
-! \gdef\oprm#1 {{\rm\char`\(}#1 \bf \let(=\opnested %
-! \global\advance\parencount by 1 }
- %
- % This is the definition of ( when already inside a level of parens.
- \gdef\opnested{\char`\(\global\advance\parencount by 1 }
- %
- \gdef\clrm{% Print a paren in roman if it is taking us back to depth of 0.
-! % also in that case restore the outer-level definition of (.
-! \ifnum \parencount=1 {\rm \char `\)}\sl \let(=\oprm \else \char `\) \fi
-! \global\advance \parencount by -1 }
- % If we encounter &foo, then turn on ()-hacking afterwards
- \gdef\amprm#1 {{\rm\&#1}\let(=\oprm \let)=\clrm\ }
- %
---- 3679,3701 ----
-
- \gdef\functionparens{\boldbrax\let&=\amprm\parencount=0 }
- \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.
- % This is the definition of ( outside of all parentheses.
-! \gdef\oprm#1 {{\rm\char`\(}#1 \bf \let(=\opnested
-! \global\advance\parencount by 1
-! }
- %
- % This is the definition of ( when already inside a level of parens.
- \gdef\opnested{\char`\(\global\advance\parencount by 1 }
- %
- \gdef\clrm{% Print a paren in roman if it is taking us back to depth of 0.
-! % also in that case restore the outer-level definition of (.
-! \ifnum \parencount=1 {\rm \char `\)}\sl \let(=\oprm \else \char `\) \fi
-! \global\advance \parencount by -1 }
- % If we encounter &foo, then turn on ()-hacking afterwards
- \gdef\amprm#1 {{\rm\&#1}\let(=\oprm \let)=\clrm\ }
- %
-***************
-*** 3326,3333 ****
- } % End of definition inside \activeparens
- %% These parens (in \boldbrax) actually are a little bolder than the
- %% contained text. This is especially needed for [ and ]
-! \def\opnr{{\sf\char`\(}} \def\clnr{{\sf\char`\)}} \def\ampnr{\&}
-! \def\lbrb{{\bf\char`\[}} \def\rbrb{{\bf\char`\]}}
-
- % First, defname, which formats the header line itself.
- % #1 should be the function name.
---- 3703,3713 ----
- } % End of definition inside \activeparens
- %% These parens (in \boldbrax) actually are a little bolder than the
- %% contained text. This is especially needed for [ and ]
-! \def\opnr{{\sf\char`\(}\global\advance\parencount by 1 }
-! \def\clnr{{\sf\char`\)}\global\advance\parencount by -1 }
-! \def\ampnr{\&}
-! \def\lbrb{{\bf\char`\[}}
-! \def\rbrb{{\bf\char`\]}}
-
- % First, defname, which formats the header line itself.
- % #1 should be the function name.
-***************
-*** 3420,3426 ****
-
- % This is used for \def{tp,vr}parsebody. It could probably be used for
- % some of the others, too, with some judicious conditionals.
-! %
- \def\parsebodycommon#1#2#3{%
- \begingroup\inENV %
- \medbreak %
---- 3800,3806 ----
-
- % This is used for \def{tp,vr}parsebody. It could probably be used for
- % some of the others, too, with some judicious conditionals.
-! %
- \def\parsebodycommon#1#2#3{%
- \begingroup\inENV %
- \medbreak %
-***************
-*** 3454,3470 ****
- }
-
- % Fine, but then we have to eventually remove the \empty *and* the
-! % braces (if any). That's what this does, putting the result in \tptemp.
-! %
-! \def\removeemptybraces\empty#1\relax{\def\tptemp{#1}}%
-
- % After \spacesplit has done its work, this is called -- #1 is the final
- % thing to call, #2 the type name (which starts with \empty), and #3
- % (which might be empty) the arguments.
-! %
- \def\parsetpheaderline#1#2#3{%
-! \removeemptybraces#2\relax
-! #1{\tptemp}{#3}%
- }%
-
- \def\defopvarparsebody #1#2#3#4#5 {\begingroup\inENV %
---- 3834,3849 ----
- }
-
- % Fine, but then we have to eventually remove the \empty *and* the
-! % braces (if any). That's what this does.
-! %
-! \def\removeemptybraces\empty#1\relax{#1}
-
- % After \spacesplit has done its work, this is called -- #1 is the final
- % thing to call, #2 the type name (which starts with \empty), and #3
- % (which might be empty) the arguments.
-! %
- \def\parsetpheaderline#1#2#3{%
-! #1{\removeemptybraces#2\relax}{#3}%
- }%
-
- \def\defopvarparsebody #1#2#3#4#5 {\begingroup\inENV %
-***************
-*** 3505,3511 ****
- \hyphenchar\tensl=0
- #1%
- \hyphenchar\tensl=45
-! \ifnum\parencount=0 \else \errmessage{unbalanced parens in @def arguments}\fi%
- \interlinepenalty=10000
- \advance\rightskip by 0pt plus 1fil
- \endgraf\penalty 10000\vskip -\parskip\penalty 10000%
---- 3884,3890 ----
- \hyphenchar\tensl=0
- #1%
- \hyphenchar\tensl=45
-! \ifnum\parencount=0 \else \errmessage{Unbalanced parentheses in @def}\fi%
- \interlinepenalty=10000
- \advance\rightskip by 0pt plus 1fil
- \endgraf\penalty 10000\vskip -\parskip\penalty 10000%
-***************
-*** 3514,3520 ****
- \def\deftypefunargs #1{%
- % Expand, preventing hyphenation at `-' chars.
- % Note that groups don't affect changes in \hyphenchar.
-! \functionparens
- \tclose{#1}% avoid \code because of side effects on active chars
- \interlinepenalty=10000
- \advance\rightskip by 0pt plus 1fil
---- 3893,3900 ----
- \def\deftypefunargs #1{%
- % Expand, preventing hyphenation at `-' chars.
- % Note that groups don't affect changes in \hyphenchar.
-! % Use \boldbraxnoamp, not \functionparens, so that & is not special.
-! \boldbraxnoamp
- \tclose{#1}% avoid \code because of side effects on active chars
- \interlinepenalty=10000
- \advance\rightskip by 0pt plus 1fil
-***************
-*** 3551,3557 ****
- % #1 is the data type, #2 the name, #3 the args.
- \def\deftypefunheaderx #1#2 #3\relax{%
- \doind {fn}{\code{#2}}% Make entry in function index
-! \begingroup\defname {\code{#1} #2}{Function}%
- \deftypefunargs {#3}\endgroup %
- \catcode 61=\other % Turn off change made in \defparsebody
- }
---- 3931,3937 ----
- % #1 is the data type, #2 the name, #3 the args.
- \def\deftypefunheaderx #1#2 #3\relax{%
- \doind {fn}{\code{#2}}% Make entry in function index
-! \begingroup\defname {\defheaderxcond#1\relax$$$#2}{Function}%
- \deftypefunargs {#3}\endgroup %
- \catcode 61=\other % Turn off change made in \defparsebody
- }
-***************
-*** 3560,3565 ****
---- 3940,3949 ----
-
- \def\deftypefn{\defmethparsebody\Edeftypefn\deftypefnx\deftypefnheader}
-
-+ % \defheaderxcond#1\relax$$$
-+ % puts #1 in @code, followed by a space, but does nothing if #1 is null.
-+ \def\defheaderxcond#1#2$$${\ifx#1\relax\else\code{#1#2} \fi}
-+
- % #1 is the classification. #2 is the data type. #3 is the name and args.
- \def\deftypefnheader #1#2#3{\deftypefnheaderx{#1}{#2}#3 \relax}
- % #1 is the classification, #2 the data type, #3 the name, #4 the args.
-***************
-*** 3568,3574 ****
- \begingroup
- \normalparens % notably, turn off `&' magic, which prevents
- % at least some C++ text from working
-! \defname {\code{#2} #3}{#1}%
- \deftypefunargs {#4}\endgroup %
- \catcode 61=\other % Turn off change made in \defparsebody
- }
---- 3952,3958 ----
- \begingroup
- \normalparens % notably, turn off `&' magic, which prevents
- % at least some C++ text from working
-! \defname {\defheaderxcond#2\relax$$$#3}{#1}%
- \deftypefunargs {#4}\endgroup %
- \catcode 61=\other % Turn off change made in \defparsebody
- }
-***************
-*** 3601,3606 ****
---- 3985,3991 ----
- \def\defmacx #1 {\errmessage{@defmacx in invalid context}}
- \def\defspecx #1 {\errmessage{@defspecx in invalid context}}
- \def\deftypefnx #1 {\errmessage{@deftypefnx in invalid context}}
-+ \def\deftypemethodx #1 {\errmessage{@deftypemethodx in invalid context}}
- \def\deftypeunx #1 {\errmessage{@deftypeunx in invalid context}}
-
- % @defmethod, and so on
-***************
-*** 3616,3621 ****
---- 4001,4016 ----
- \defunargs {#3}\endgroup %
- }
-
-+ % @deftypemethod foo-class return-type foo-method args
-+ %
-+ \def\deftypemethod{%
-+ \defmethparsebody\Edeftypemethod\deftypemethodx\deftypemethodheader}
-+ %
-+ % #1 is the class name, #2 the data type, #3 the method name, #4 the args.
-+ \def\deftypemethodheader#1#2#3#4{%
-+ \deftypefnheaderx{Method on #1}{#2}#3 #4\relax
-+ }
-+
- % @defmethod == @defop Method
-
- \def\defmethod{\defmethparsebody\Edefmethod\defmethodx\defmethodheader}
-***************
-*** 3693,3712 ****
-
- \def\deftypevar{\defvarparsebody\Edeftypevar\deftypevarx\deftypevarheader}
-
-! % #1 is the data type. #2 is the name.
- \def\deftypevarheader #1#2{%
-! \doind {vr}{\code{#2}}% Make entry in variables index
-! \begingroup\defname {\code{#1} #2}{Variable}%
- \interlinepenalty=10000
- \endgraf\penalty 10000\vskip -\parskip\penalty 10000
- \endgroup}
-
- % @deftypevr {Global Flag} int enable
-
- \def\deftypevr{\defvrparsebody\Edeftypevr\deftypevrx\deftypevrheader}
-
-! \def\deftypevrheader #1#2#3{\doind {vr}{\code{#3}}%
-! \begingroup\defname {\code{#2} #3}{#1}
- \interlinepenalty=10000
- \endgraf\penalty 10000\vskip -\parskip\penalty 10000
- \endgroup}
---- 4088,4109 ----
-
- \def\deftypevar{\defvarparsebody\Edeftypevar\deftypevarx\deftypevarheader}
-
-! % #1 is the data type. #2 is the name, perhaps followed by text that
-! % is actually part of the data type, which should not be put into the index.
- \def\deftypevarheader #1#2{%
-! \dovarind#2 \relax% Make entry in variables index
-! \begingroup\defname {\defheaderxcond#1\relax$$$#2}{Variable}%
- \interlinepenalty=10000
- \endgraf\penalty 10000\vskip -\parskip\penalty 10000
- \endgroup}
-+ \def\dovarind#1 #2\relax{\doind{vr}{\code{#1}}}
-
- % @deftypevr {Global Flag} int enable
-
- \def\deftypevr{\defvrparsebody\Edeftypevr\deftypevrx\deftypevrheader}
-
-! \def\deftypevrheader #1#2#3{\dovarind#3 \relax%
-! \begingroup\defname {\defheaderxcond#2\relax$$$#3}{#1}
- \interlinepenalty=10000
- \endgraf\penalty 10000\vskip -\parskip\penalty 10000
- \endgroup}
-***************
-*** 3737,3742 ****
---- 4134,4140 ----
-
- \def\deftpx #1 {\errmessage{@deftpx in invalid context}}
-
-+
- \message{cross reference,}
- % Define cross-reference macros
- \newwrite \auxfile
-***************
-*** 3744,3749 ****
---- 4142,4152 ----
- \newif\ifhavexrefs % True if xref values are 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.
-
- \def\setref#1{%
-***************
-*** 3777,3783 ****
- \setbox0=\hbox{\printednodename}%
- \ifdim \wd0 = 0pt
- % No printed node name was explicitly given.
-! \ifx\SETxref-automatic-section-title\relax %
- % Use the actual chapter/section title appear inside
- % the square brackets. Use the real section title if we have it.
- \ifdim \wd1>0pt%
---- 4180,4189 ----
- \setbox0=\hbox{\printednodename}%
- \ifdim \wd0 = 0pt
- % No printed node name was explicitly given.
-! \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
- % the square brackets. Use the real section title if we have it.
- \ifdim \wd1>0pt%
-***************
-*** 3786,3801 ****
- \else
- \ifhavexrefs
- % We know the real title if we have the xref values.
-! \def\printednodename{\refx{#1-title}}%
- \else
- % Otherwise just copy the Info node name.
- \def\printednodename{\ignorespaces #1}%
- \fi%
- \fi
-- \def\printednodename{#1-title}%
-- \else
-- % Use the node name inside the square brackets.
-- \def\printednodename{\ignorespaces #1}%
- \fi
- \fi
- %
---- 4192,4203 ----
- \else
- \ifhavexrefs
- % We know the real title if we have the xref values.
-! \def\printednodename{\refx{#1-title}{}}%
- \else
- % Otherwise just copy the Info node name.
- \def\printednodename{\ignorespaces #1}%
- \fi%
- \fi
- \fi
+- \rm #1\hfill}}\bigskip \par\penalty 10000 %
+-}
++% Plain opening for unnumbered.
++\def\unnchfplain#1{\chfplain{#1}{}}
++
++% @centerchap -- centered and unnumbered.
++\let\centerparametersmaybe = \relax
++\def\centerchfplain#1{{%
++ \def\centerparametersmaybe{%
++ \advance\rightskip by 3\rightskip
++ \leftskip = \rightskip
++ \parfillskip = 0pt
++ }%
++ \chfplain{#1}{}%
++}}
++
+ \CHAPFplain % The default
+
+@@ -2767,57 +3133,61 @@
+ }
+
++\def\centerchfopen #1{%
++\chapoddpage {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000
++ \parindent=0pt
++ \hfill {\rm #1}\hfill}}\bigskip \par\penalty 10000 %
++}
++
+ \def\CHAPFopen{
+ \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
+-\def\subsecheadingbreak{\dobreak \subsecheadingskip {-500}}
+
+-\newskip \secheadingskip \secheadingskip = 21pt plus 8pt minus 4pt
++% Section titles.
++\newskip\secheadingskip
+ \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.
+-\let\paragraphindent=\comment
++% Subsection titles.
++\newskip \subsecheadingskip
++\def\subsecheadingbreak{\dobreak \subsecheadingskip {-500}}
++\def\subsecheading#1#2#3#4{\sectionheading{subsec}{#2.#3.#4}{#1}}
++\def\plainsubsecheading#1{\sectionheading{subsec}{}{#1}}
+
+-% Section fonts are the base font at magstep2, which produces
+-% a size a bit more than 14 points in the default situation.
++% Subsubsection titles.
++\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\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,
+-% which produces a size of 12 points.
+-
+-\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:
+- % Perhaps make sssec fonts scaled
+- % magstep half
+-\def\subsubsecheading #1#2#3#4#5{\subsubsecheadingi {#2.#3.#4.#5\enspace #1}}
+-\def\subsubsecheadingi #1{{\advance \subsecheadingskip by \parskip %
+-\subsecheadingbreak}%
+-{\subsubsecfonts \vbox{\hyphenpenalty=10000\tolerance=5000
+- \parindent=0pt\raggedright
+- \rm #1\hfill}}%
+-\ifdim \parskip<10pt \kern 10pt\kern -\parskip\fi \penalty 10000}
+
++% Print any size section title.
++%
++% #1 is the section type (sec/subsec/subsubsec), #2 is the section
++% number (maybe empty), #3 the text.
++\def\sectionheading#1#2#3{%
++ {%
++ \expandafter\advance\csname #1headingskip\endcsname by \parskip
++ \csname #1headingbreak\endcsname
++ }%
++ {%
++ % 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
+ % to \contentsfile.
+@@ -2825,14 +3195,19 @@
+ \newskip\contentsrightmargin \contentsrightmargin=1in
+ \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
+ \ifnum \pageno>0
+- \pageno = -1 % Request roman numbered pages.
++ \pageno = -1 % Request roman numbered pages.
\fi
- %
-***************
-*** 3823,3829 ****
-
- % Use \turnoffactive so that punctuation chars such as underscore
- % work in node names.
-! \def\dosetq #1#2{{\let\folio=0 \turnoffactive%
- \edef\next{\write\auxfile{\internalsetq {#1}{#2}}}%
- \next}}
-
---- 4225,4231 ----
-
- % Use \turnoffactive so that punctuation chars such as underscore
- % work in node names.
-! \def\dosetq #1#2{{\let\folio=0 \turnoffactive
- \edef\next{\write\auxfile{\internalsetq {#1}{#2}}}%
- \next}}
-
-***************
-*** 3892,3974 ****
- #2% Output the suffix in any case.
- }
-
-- % Read the last existing aux file, if any. No error if none exists.
--
- % This is the macro invoked by entries in the aux file.
-! \def\xrdef #1#2{
-! {\catcode`\'=\other\expandafter \gdef \csname X#1\endcsname {#2}}}
-
-! \def\readauxfile{%
-! \begingroup
-! \catcode `\^^@=\other
-! \catcode `\=\other
-! \catcode `\=\other
-! \catcode `\^^C=\other
-! \catcode `\^^D=\other
-! \catcode `\^^E=\other
-! \catcode `\^^F=\other
-! \catcode `\^^G=\other
-! \catcode `\^^H=\other
-! \catcode `\ =\other
-! \catcode `\^^L=\other
-! \catcode `\=\other
-! \catcode `\=\other
-! \catcode `\=\other
-! \catcode `\=\other
-! \catcode `\=\other
-! \catcode `\=\other
-! \catcode `\=\other
-! \catcode `\=\other
-! \catcode `\=\other
-! \catcode `\=\other
-! \catcode `\=\other
-! \catcode `\=\other
-! \catcode 26=\other
-! \catcode `\^^[=\other
-! \catcode `\^^\=\other
-! \catcode `\^^]=\other
-! \catcode `\^^^=\other
-! \catcode `\^^_=\other
-! \catcode `\@=\other
-! \catcode `\^=\other
-! \catcode `\~=\other
-! \catcode `\[=\other
-! \catcode `\]=\other
-! \catcode`\"=\other
-! \catcode`\_=\other
-! \catcode`\|=\other
-! \catcode`\<=\other
-! \catcode`\>=\other
-! \catcode `\$=\other
-! \catcode `\#=\other
-! \catcode `\&=\other
-! % `\+ does not work, so use 43.
-! \catcode 43=\other
-! % Make the characters 128-255 be printing characters
-! {%
-! \count 1=128
-! \def\loop{%
-! \catcode\count 1=\other
-! \advance\count 1 by 1
-! \ifnum \count 1<256 \loop \fi
- }%
-! }%
-! % the aux file uses ' as the escape.
-! % Turn off \ as an escape so we do not lose on
-! % entries which were dumped with control sequences in their names.
-! % For example, 'xrdef {$\leq $-fun}{page ...} made by @defun ^^
-! % Reference to such entries still does not work the way one would wish,
-! % but at least they do not bomb out when the aux file is read in.
-! \catcode `\{=1 \catcode `\}=2
-! \catcode `\%=\other
-! \catcode `\'=0
-! \catcode `\\=\other
-! \openin 1 \jobname.aux
-! \ifeof 1 \else \closein 1 \input \jobname.aux \global\havexrefstrue
-! \global\warnedobstrue
-! \fi
-! % Open the new aux file. Tex will close it automatically at exit.
-! \openout \auxfile=\jobname.aux
- \endgroup}
-
-
---- 4294,4394 ----
- #2% Output the suffix in any case.
- }
-
- % This is the macro invoked by entries in the aux file.
-! \def\xrdef #1#2{{%
-! \catcode`\'=\other
-! \expandafter\gdef\csname X#1\endcsname{#2}%
-! }}
-
-! % Read the last existing aux file, if any. No error if none exists.
-! \def\readauxfile{\begingroup
-! \catcode`\^^@=\other
-! \catcode`\=\other
-! \catcode`\=\other
-! \catcode`\^^C=\other
-! \catcode`\^^D=\other
-! \catcode`\^^E=\other
-! \catcode`\^^F=\other
-! \catcode`\^^G=\other
-! \catcode`\^^H=\other
-! \catcode`\ =\other
-! \catcode`\^^L=\other
-! \catcode`\=\other
-! \catcode`\=\other
-! \catcode`\=\other
-! \catcode`\=\other
-! \catcode`\=\other
-! \catcode`\=\other
-! \catcode`\=\other
-! \catcode`\=\other
-! \catcode`\=\other
-! \catcode`\=\other
-! \catcode`\=\other
-! \catcode`\=\other
-! \catcode26=\other
-! \catcode`\^^[=\other
-! \catcode`\^^\=\other
-! \catcode`\^^]=\other
-! \catcode`\^^^=\other
-! \catcode`\^^_=\other
-! \catcode`\@=\other
-! \catcode`\^=\other
-! % It was suggested to define this as 7, which would allow ^^e4 etc.
-! % in xref tags, i.e., node names. But since ^^e4 notation isn't
-! % supported in the main text, it doesn't seem desirable. Furthermore,
-! % that is not enough: for node names that actually contain a ^
-! % character, we would end up writing a line like this: 'xrdef {'hat
-! % b-title}{'hat b} and \xrdef does a \csname...\endcsname on the first
-! % argument, and \hat is not an expandable control sequence. It could
-! % all be worked out, but why? Either we support ^^ or we don't.
-! %
-! % The other change necessary for this was to define \auxhat:
-! % \def\auxhat{\def^{'hat }}% extra space so ok if followed by letter
-! % and then to call \auxhat in \setq.
-! %
-! \catcode`\~=\other
-! \catcode`\[=\other
-! \catcode`\]=\other
-! \catcode`\"=\other
-! \catcode`\_=\other
-! \catcode`\|=\other
-! \catcode`\<=\other
-! \catcode`\>=\other
-! \catcode`\$=\other
-! \catcode`\#=\other
-! \catcode`\&=\other
-! % `\+ does not work, so use 43.
-! \catcode43=\other
-! % Make the characters 128-255 be printing characters
-! {%
-! \count 1=128
-! \def\loop{%
-! \catcode\count 1=\other
-! \advance\count 1 by 1
-! \ifnum \count 1<256 \loop \fi
-! }%
- }%
-! % The aux file uses ' as the escape (for now).
-! % Turn off \ as an escape so we do not lose on
-! % entries which were dumped with control sequences in their names.
-! % For example, 'xrdef {$\leq $-fun}{page ...} made by @defun ^^
-! % Reference to such entries still does not work the way one would wish,
-! % but at least they do not bomb out when the aux file is read in.
-! \catcode`\{=1
-! \catcode`\}=2
-! \catcode`\%=\other
-! \catcode`\'=0
-! \catcode`\\=\other
-! %
-! \openin 1 \jobname.aux
-! \ifeof 1 \else
-! \closein 1
-! \input \jobname.aux
-! \global\havexrefstrue
-! \global\warnedobstrue
-! \fi
-! % Open the new aux file. TeX will close it automatically at exit.
-! \openout\auxfile=\jobname.aux
- \endgroup}
-
-
-***************
-*** 3979,3985 ****
- % The trailing space in the following definition for supereject is
- % vital for proper filling; pages come out unaligned when you do a
- % pagealignmacro call if that space before the closing brace is
-! % removed.
- \def\supereject{\par\penalty -20000\footnoteno =0 }
-
- % @footnotestyle is meaningful for info output only..
---- 4399,4406 ----
- % The trailing space in the following definition for supereject is
- % vital for proper filling; pages come out unaligned when you do a
- % pagealignmacro call if that space before the closing brace is
-! % removed. (Generally, numeric constants should always be followed by a
-! % space to prevent strange expansion errors.)
- \def\supereject{\par\penalty -20000\footnoteno =0 }
-
- % @footnotestyle is meaningful for info output only..
-***************
-*** 4008,4014 ****
- % Don't bother with the trickery in plain.tex to not require the
- % footnote text as a parameter. Our footnotes don't need to be so general.
- %
-! \long\gdef\footnotezzz#1{\insert\footins{%
- % We want to typeset this text as a normal paragraph, even if the
- % footnote reference occurs in (for example) a display environment.
- % So reset some parameters.
---- 4429,4439 ----
- % Don't bother with the trickery in plain.tex to not require the
- % footnote text as a parameter. Our footnotes don't need to be so general.
- %
-! % Oh yes, they do; otherwise, @ifset and anything else that uses
-! % \parseargline fail inside footnotes because the tokens are fixed when
-! % the footnote is read. --karl, 16nov96.
-! %
-! \long\gdef\footnotezzz{\insert\footins\bgroup
- % We want to typeset this text as a normal paragraph, even if the
- % footnote reference occurs in (for example) a display environment.
- % So reset some parameters.
-***************
-*** 4030,4037 ****
- % expands into a box, it must come within the paragraph, lest it
- % provide a place where TeX can split the footnote.
- \footstrut
-! #1\strut}%
- }
-
- }%end \catcode `\@=11
-
---- 4455,4467 ----
- % expands into a box, it must come within the paragraph, lest it
- % provide a place where TeX can split the footnote.
- \footstrut
-! \futurelet\next\fo@t
- }
-+ \def\fo@t{\ifcat\bgroup\noexpand\next \let\next\f@@t
-+ \else\let\next\f@t\fi \next}
-+ \def\f@@t{\bgroup\aftergroup\@foot\let\next}
-+ \def\f@t#1{#1\@foot}
-+ \def\@foot{\strut\egroup}
-
- }%end \catcode `\@=11
-
-***************
-*** 4104,4116 ****
-
- % Set some numeric style parameters, for 8.5 x 11 format.
-
-! %\hsize = 6.5in
- \newdimen\defaultparindent \defaultparindent = 15pt
- \parindent = \defaultparindent
-! \parskip 18pt plus 1pt
-! \setleading{15pt}
- \advance\topskip by 1.2cm
-
- % Prevent underfull vbox error messages.
- \vbadness=10000
-
---- 4534,4551 ----
-
- % Set some numeric style parameters, for 8.5 x 11 format.
-
-! \hsize = 6in
-! \hoffset = .25in
- \newdimen\defaultparindent \defaultparindent = 15pt
- \parindent = \defaultparindent
-! \parskip 3pt plus 2pt minus 1pt
-! \setleading{13.2pt}
- \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.
- \vbadness=10000
-
-***************
-*** 4133,4162 ****
-
- % Use @smallbook to reset parameters for 7x9.5 format (or else 7x9.25)
- \def\smallbook{
-!
-! % These values for secheadingskip and subsecheadingskip are
-! % experiments. RJC 7 Aug 1992
-! \global\secheadingskip = 17pt plus 6pt minus 3pt
-! \global\subsecheadingskip = 14pt plus 6pt minus 3pt
-!
-! \global\lispnarrowing = 0.3in
-! \setleading{12pt}
-! \advance\topskip by -1cm
-! \global\parskip 3pt plus 1pt
-! \global\hsize = 5in
-! \global\vsize=7.5in
-! \global\tolerance=700
-! \global\hfuzz=1pt
-! \global\contentsrightmargin=0pt
-! \global\deftypemargin=0pt
-! \global\defbodyindent=.5cm
-!
-! \global\pagewidth=\hsize
-! \global\pageheight=\vsize
-!
-! \global\let\smalllisp=\smalllispx
-! \global\let\smallexample=\smalllispx
-! \global\def\Esmallexample{\Esmalllisp}
- }
-
- % Use @afourpaper to print on European A4 paper.
---- 4568,4595 ----
-
- % Use @smallbook to reset parameters for 7x9.5 format (or else 7x9.25)
- \def\smallbook{
-! \global\chapheadingskip = 15pt plus 4pt minus 2pt
-! \global\secheadingskip = 12pt plus 3pt minus 2pt
-! \global\subsecheadingskip = 9pt plus 2pt minus 2pt
-! %
-! \global\lispnarrowing = 0.3in
-! \setleading{12pt}
-! \advance\topskip by -1cm
-! \global\parskip 2pt plus 1pt
-! \global\hsize = 5in
-! \global\vsize=7.5in
-! \global\tolerance=700
-! \global\hfuzz=1pt
-! \global\contentsrightmargin=0pt
-! \global\deftypemargin=0pt
-! \global\defbodyindent=.5cm
-! %
-! \global\pagewidth=\hsize
-! \global\pageheight=\vsize
-! %
-! \global\let\smalllisp=\smalllispx
-! \global\let\smallexample=\smalllispx
-! \global\def\Esmallexample{\Esmalllisp}
- }
-
- % Use @afourpaper to print on European A4 paper.
-***************
-*** 4179,4190 ****
- \global\pageheight=\vsize
- }
-
- % Allow control of the text dimensions. Parameters in order: textheight;
-! % textwidth; \voffset; \hoffset (!); binding offset. All require a dimension;
- % header is additional; added length extends the bottom of the page.
-
-! \def\changepagesizes#1#2#3#4#5
-! {\global\vsize= #1
- \advance\vsize by \topskip
- \global\voffset= #3
- \global\hsize= #2
---- 4612,4630 ----
- \global\pageheight=\vsize
- }
-
-+ \bindingoffset=0pt
-+ \normaloffset=\hoffset
-+ \pagewidth=\hsize
-+ \pageheight=\vsize
-+
- % Allow control of the text dimensions. Parameters in order: textheight;
-! % textwidth; voffset; hoffset; binding offset; topskip.
-! % All require a dimension;
- % header is additional; added length extends the bottom of the page.
-
-! \def\changepagesizes#1#2#3#4#5#6{
-! \global\vsize= #1
-! \global\topskip= #6
- \advance\vsize by \topskip
- \global\voffset= #3
- \global\hsize= #2
-***************
-*** 4197,4205 ****
- \global\normaloffset= #4
- \global\bindingoffset= #5}
-
-! % This layout is compatible with Latex on A4 paper.
-!
-! \def\afourlatex{\changepagesizes{22cm}{15cm}{7mm}{4.6mm}{5mm}}
-
- % Define macros to output various characters with catcode for normal text.
- \catcode`\"=\other
---- 4637,4656 ----
- \global\normaloffset= #4
- \global\bindingoffset= #5}
-
-! % 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}
-! }
-!
-! % 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.
- \catcode`\"=\other
-***************
-*** 4247,4260 ****
- \catcode`\_=\active
- \def_{\ifusingtt\normalunderscore\_}
- % Subroutine for the previous macro.
-! \def\_{\lvvmode \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
- \def|{{\tt \char '174}}
---- 4698,4704 ----
- \catcode`\_=\active
- \def_{\ifusingtt\normalunderscore\_}
- % Subroutine for the previous macro.
-! \def\_{\leavevmode \kern.06em \vbox{\hrule width.3em height.1ex}}
-
- \catcode`\|=\active
- \def|{{\tt \char '174}}
-***************
-*** 4273,4278 ****
---- 4717,4731 ----
- {\catcode`\==\active
- \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
-
- % \rawbackslashxx output one backslash character in current font
-***************
-*** 4315,4320 ****
---- 4768,4777 ----
- @let>=@normalgreater
- @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.
- % That is what \eatinput is for; after that, the `\' should revert to printing
- % a backslash.
-***************
-*** 4325,4332 ****
- % 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
- % that, assuming it is called before the first `\' could plausibly occur.
- %
-! @gdef@fixbackslash{@ifx\@eatinput @let\ = @normalbackslash @fi}
-
- %% 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
---- 4782,4792 ----
- % 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
- % 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
-! @catcode`+=@active @catcode`@_=@active}
-
- %% 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
+ % Don't need to put `Contents' or `Short Contents' in the headline.
+ % It is abundantly clear what they are.
+ \unnumbchapmacro{#1}\def\thischapter{}%
+- \begingroup % Set up to handle contents files properly.
++ \begingroup % Set up to handle contents files properly.
+ \catcode`\\=0 \catcode`\{=1 \catcode`\}=2 \catcode`\@=11
++ \catcode`\^=7 % to see ^^e4 as \"a etc. juha@piuha.ydi.vtt.fi
+ \raggedbottom % Worry more about breakpoints than the bottom.
+ \advance\hsize by -\contentsrightmargin % Don't use the full line length.
+@@ -2858,4 +3233,5 @@
+ \let\rm=\shortcontrm \let\bf=\shortcontbf \let\sl=\shortcontsl
+ \rm
++ \hyphenpenalty = 10000
+ \advance\baselineskip by 1pt % Open it up a little.
+ \def\secentry ##1##2##3##4{}
+@@ -2901,5 +3277,5 @@
+ % widest letter (M) is 1em, at least in the Computer Modern fonts.
+ % (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
+ \hbox to \dimen0{#1\hfil}%
+@@ -2922,5 +3298,4 @@
+ \def\unnumbsubsubsecentry#1#2{\dosubsubsecentry{#1}{#2}}
+
+-
+ % This parameter controls the indentation of the various levels.
+ \newdimen\tocindent \tocindent = 3pc
+@@ -2929,13 +3304,13 @@
+ % 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.
+ \def\dochapentry#1#2{%
+- \penalty-300 \vskip\baselineskip
++ \penalty-300 \vskip1\baselineskip plus.33\baselineskip minus.25\baselineskip
+ \begingroup
+ \chapentryfonts
+ \tocentry{#1}{\dopageno{#2}}%
+ \endgroup
+- \nobreak\vskip .25\baselineskip
++ \nobreak\vskip .25\baselineskip plus.1\baselineskip
+ }
+
+@@ -2960,7 +3335,8 @@
+ % 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
+- \hyphenpenalty = 10000
+- \entry{#1}{#2}%
++ \vskip 0pt plus1pt % allow a little stretch for the sake of nice page breaks
++ \entry{\turnoffactive #1}{\turnoffactive #2}%
+ \endgroup}
+
+@@ -2986,6 +3362,4 @@
+ \newbox\equivbox \newbox\errorbox
+
+-\let\ptexequiv = \equiv
+-
+ %{\tentt
+ %\global\setbox\dblarrowbox = \hbox to 1em{\hfil$\Rightarrow$\hfil}
+@@ -2998,10 +3372,9 @@
+ %}
+
++% @point{}, @result{}, @expansion{}, @print{}, @equiv{}.
+ \def\point{$\star$}
+-
+ \def\result{\leavevmode\raise.15ex\hbox to 1em{\hfil$\Rightarrow$\hfil}}
+ \def\expansion{\leavevmode\raise.1ex\hbox to 1em{\hfil$\mapsto$\hfil}}
+ \def\print{\leavevmode\lower.1ex\hbox to 1em{\hfil$\dashv$\hfil}}
+-
+ \def\equiv{\leavevmode\lower.1ex\hbox to 1em{\hfil$\ptexequiv$\hfil}}
+
+@@ -3035,5 +3408,5 @@
+ \catcode `\^=7 \catcode `\_=8 \catcode `\~=13 \let~=\tie
+ \catcode `\%=14
+-\catcode 43=12
++\catcode 43=12 % plus
+ \catcode`\"=12
+ \catcode`\==12
+@@ -3043,5 +3416,5 @@
+ \escapechar=`\\
+ %
+-\let\~=\ptextilde
++\let\,=\ptexcomma
+ \let\{=\ptexlbrace
+ \let\}=\ptexrbrace
+@@ -3049,8 +3422,9 @@
+ \let\*=\ptexstar
+ \let\dots=\ptexdots
++\def\endldots{\mathinner{\ldots\ldots\ldots\ldots}}%
++\def\enddots{\relax\ifmmode\endldots\else$\mathsurround=0pt \endldots\,$\fi}%
+ \def\@{@}%
+ \let\bullet=\ptexbullet
+-\let\b=\ptexb \let\c=\ptexc \let\i=\ptexi \let\t=\ptext \let\l=\ptexl
+-\let\L=\ptexL
++\let\b=\ptexb \let\c=\ptexc \let\i=\ptexi \let\t=\ptext
+ %
+ \let\Etex=\endgroup}
+@@ -3111,9 +3485,9 @@
+ \def\cbr{{\hskip 6pt\circle\char'011}}
+ \def\carttop{\hbox to \cartouter{\hskip\lskip
+- \ctl\leaders\hrule height\circthick\hfil\ctr
+- \hskip\rskip}}
++ \ctl\leaders\hrule height\circthick\hfil\ctr
++ \hskip\rskip}}
+ \def\cartbot{\hbox to \cartouter{\hskip\lskip
+- \cbl\leaders\hrule height\circthick\hfil\cbr
+- \hskip\rskip}}
++ \cbl\leaders\hrule height\circthick\hfil\cbr
++ \hskip\rskip}}
+ %
+ \newskip\lskip\newskip\rskip
+@@ -3121,38 +3495,38 @@
+ \long\def\cartouche{%
+ \begingroup
+- \lskip=\leftskip \rskip=\rightskip
+- \leftskip=0pt\rightskip=0pt %we want these *outside*.
+- \cartinner=\hsize \advance\cartinner by-\lskip
+- \advance\cartinner by-\rskip
+- \cartouter=\hsize
+- \advance\cartouter by 18pt % allow for 3pt kerns on either
+-% side, and for 6pt waste from
+-% each corner char
+- \normbskip=\baselineskip \normpskip=\parskip \normlskip=\lineskip
+- % Flag to tell @lisp, etc., not to narrow margin.
+- \let\nonarrowing=\comment
+- \vbox\bgroup
+- \baselineskip=0pt\parskip=0pt\lineskip=0pt
+- \carttop
+- \hbox\bgroup
+- \hskip\lskip
+- \vrule\kern3pt
+- \vbox\bgroup
+- \hsize=\cartinner
+- \kern3pt
+- \begingroup
+- \baselineskip=\normbskip
+- \lineskip=\normlskip
+- \parskip=\normpskip
+- \vskip -\parskip
++ \lskip=\leftskip \rskip=\rightskip
++ \leftskip=0pt\rightskip=0pt %we want these *outside*.
++ \cartinner=\hsize \advance\cartinner by-\lskip
++ \advance\cartinner by-\rskip
++ \cartouter=\hsize
++ \advance\cartouter by 18pt % allow for 3pt kerns on either
++% side, and for 6pt waste from
++% each corner char
++ \normbskip=\baselineskip \normpskip=\parskip \normlskip=\lineskip
++ % Flag to tell @lisp, etc., not to narrow margin.
++ \let\nonarrowing=\comment
++ \vbox\bgroup
++ \baselineskip=0pt\parskip=0pt\lineskip=0pt
++ \carttop
++ \hbox\bgroup
++ \hskip\lskip
++ \vrule\kern3pt
++ \vbox\bgroup
++ \hsize=\cartinner
++ \kern3pt
++ \begingroup
++ \baselineskip=\normbskip
++ \lineskip=\normlskip
++ \parskip=\normpskip
++ \vskip -\parskip
+ \def\Ecartouche{%
+- \endgroup
+- \kern3pt
+- \egroup
+- \kern3pt\vrule
+- \hskip\rskip
+- \egroup
+- \cartbot
+- \egroup
++ \endgroup
++ \kern3pt
++ \egroup
++ \kern3pt\vrule
++ \hskip\rskip
++ \egroup
++ \cartbot
++ \egroup
+ \endgroup
+ }}
+@@ -3217,6 +3591,5 @@
+ \let\Esmallexample = \nonfillfinish
+ %
+- % Smaller interline space and fonts for small examples.
+- \setleading{10pt}%
++ % Smaller fonts for small examples.
+ \indexfonts \tt
+ \rawbackslash % make \ output the \ character from the current font (tt)
+@@ -3307,9 +3680,13 @@
+ \gdef\functionparens{\boldbrax\let&=\amprm\parencount=0 }
+ \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.
+ % This is the definition of ( outside of all parentheses.
+-\gdef\oprm#1 {{\rm\char`\(}#1 \bf \let(=\opnested %
+-\global\advance\parencount by 1 }
++\gdef\oprm#1 {{\rm\char`\(}#1 \bf \let(=\opnested
++ \global\advance\parencount by 1
++}
+ %
+ % This is the definition of ( when already inside a level of parens.
+@@ -3317,7 +3694,7 @@
+ %
+ \gdef\clrm{% Print a paren in roman if it is taking us back to depth of 0.
+-% also in that case restore the outer-level definition of (.
+-\ifnum \parencount=1 {\rm \char `\)}\sl \let(=\oprm \else \char `\) \fi
+-\global\advance \parencount by -1 }
++ % also in that case restore the outer-level definition of (.
++ \ifnum \parencount=1 {\rm \char `\)}\sl \let(=\oprm \else \char `\) \fi
++ \global\advance \parencount by -1 }
+ % If we encounter &foo, then turn on ()-hacking afterwards
+ \gdef\amprm#1 {{\rm\&#1}\let(=\oprm \let)=\clrm\ }
+@@ -3327,6 +3704,9 @@
+ %% These parens (in \boldbrax) actually are a little bolder than the
+ %% contained text. This is especially needed for [ and ]
+-\def\opnr{{\sf\char`\(}} \def\clnr{{\sf\char`\)}} \def\ampnr{\&}
+-\def\lbrb{{\bf\char`\[}} \def\rbrb{{\bf\char`\]}}
++\def\opnr{{\sf\char`\(}\global\advance\parencount by 1 }
++\def\clnr{{\sf\char`\)}\global\advance\parencount by -1 }
++\def\ampnr{\&}
++\def\lbrb{{\bf\char`\[}}
++\def\rbrb{{\bf\char`\]}}
+
+ % First, defname, which formats the header line itself.
+@@ -3421,5 +3801,5 @@
+ % This is used for \def{tp,vr}parsebody. It could probably be used for
+ % some of the others, too, with some judicious conditionals.
+-%
++%
+ \def\parsebodycommon#1#2#3{%
+ \begingroup\inENV %
+@@ -3455,15 +3835,14 @@
+
+ % Fine, but then we have to eventually remove the \empty *and* the
+-% braces (if any). That's what this does, putting the result in \tptemp.
+-%
+-\def\removeemptybraces\empty#1\relax{\def\tptemp{#1}}%
++% braces (if any). That's what this does.
++%
++\def\removeemptybraces\empty#1\relax{#1}
+
+ % After \spacesplit has done its work, this is called -- #1 is the final
+ % thing to call, #2 the type name (which starts with \empty), and #3
+ % (which might be empty) the arguments.
+-%
++%
+ \def\parsetpheaderline#1#2#3{%
+- \removeemptybraces#2\relax
+- #1{\tptemp}{#3}%
++ #1{\removeemptybraces#2\relax}{#3}%
+ }%
+
+@@ -3506,5 +3885,5 @@
+ #1%
+ \hyphenchar\tensl=45
+-\ifnum\parencount=0 \else \errmessage{unbalanced parens in @def arguments}\fi%
++\ifnum\parencount=0 \else \errmessage{Unbalanced parentheses in @def}\fi%
+ \interlinepenalty=10000
+ \advance\rightskip by 0pt plus 1fil
+@@ -3515,5 +3894,6 @@
+ % Expand, preventing hyphenation at `-' chars.
+ % 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
+ \interlinepenalty=10000
+@@ -3552,5 +3932,5 @@
+ \def\deftypefunheaderx #1#2 #3\relax{%
+ \doind {fn}{\code{#2}}% Make entry in function index
+-\begingroup\defname {\code{#1} #2}{Function}%
++\begingroup\defname {\defheaderxcond#1\relax$$$#2}{Function}%
+ \deftypefunargs {#3}\endgroup %
+ \catcode 61=\other % Turn off change made in \defparsebody
+@@ -3561,4 +3941,8 @@
+ \def\deftypefn{\defmethparsebody\Edeftypefn\deftypefnx\deftypefnheader}
+
++% \defheaderxcond#1\relax$$$
++% puts #1 in @code, followed by a space, but does nothing if #1 is null.
++\def\defheaderxcond#1#2$$${\ifx#1\relax\else\code{#1#2} \fi}
++
+ % #1 is the classification. #2 is the data type. #3 is the name and args.
+ \def\deftypefnheader #1#2#3{\deftypefnheaderx{#1}{#2}#3 \relax}
+@@ -3569,5 +3953,5 @@
+ \normalparens % notably, turn off `&' magic, which prevents
+ % at least some C++ text from working
+-\defname {\code{#2} #3}{#1}%
++\defname {\defheaderxcond#2\relax$$$#3}{#1}%
+ \deftypefunargs {#4}\endgroup %
+ \catcode 61=\other % Turn off change made in \defparsebody
+@@ -3602,4 +3986,5 @@
+ \def\defspecx #1 {\errmessage{@defspecx in invalid context}}
+ \def\deftypefnx #1 {\errmessage{@deftypefnx in invalid context}}
++\def\deftypemethodx #1 {\errmessage{@deftypemethodx in invalid context}}
+ \def\deftypeunx #1 {\errmessage{@deftypeunx in invalid context}}
+
+@@ -3617,4 +4002,14 @@
+ }
+
++% @deftypemethod foo-class return-type foo-method args
++%
++\def\deftypemethod{%
++ \defmethparsebody\Edeftypemethod\deftypemethodx\deftypemethodheader}
++%
++% #1 is the class name, #2 the data type, #3 the method name, #4 the args.
++\def\deftypemethodheader#1#2#3#4{%
++ \deftypefnheaderx{Method on #1}{#2}#3 #4\relax
++}
++
+ % @defmethod == @defop Method
+
+@@ -3694,11 +4089,13 @@
+ \def\deftypevar{\defvarparsebody\Edeftypevar\deftypevarx\deftypevarheader}
+
+-% #1 is the data type. #2 is the name.
++% #1 is the data type. #2 is the name, perhaps followed by text that
++% is actually part of the data type, which should not be put into the index.
+ \def\deftypevarheader #1#2{%
+-\doind {vr}{\code{#2}}% Make entry in variables index
+-\begingroup\defname {\code{#1} #2}{Variable}%
++\dovarind#2 \relax% Make entry in variables index
++\begingroup\defname {\defheaderxcond#1\relax$$$#2}{Variable}%
+ \interlinepenalty=10000
+ \endgraf\penalty 10000\vskip -\parskip\penalty 10000
+ \endgroup}
++\def\dovarind#1 #2\relax{\doind{vr}{\code{#1}}}
+
+ % @deftypevr {Global Flag} int enable
+@@ -3706,6 +4103,6 @@
+ \def\deftypevr{\defvrparsebody\Edeftypevr\deftypevrx\deftypevrheader}
+
+-\def\deftypevrheader #1#2#3{\doind {vr}{\code{#3}}%
+-\begingroup\defname {\code{#2} #3}{#1}
++\def\deftypevrheader #1#2#3{\dovarind#3 \relax%
++\begingroup\defname {\defheaderxcond#2\relax$$$#3}{#1}
+ \interlinepenalty=10000
+ \endgraf\penalty 10000\vskip -\parskip\penalty 10000
+@@ -3738,4 +4135,5 @@
+ \def\deftpx #1 {\errmessage{@deftpx in invalid context}}
+
++
+ \message{cross reference,}
+ % Define cross-reference macros
+@@ -3745,4 +4143,9 @@
+ \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.
+
+@@ -3778,5 +4181,8 @@
+ \ifdim \wd0 = 0pt
+ % 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
+ % the square brackets. Use the real section title if we have it.
+@@ -3787,5 +4193,5 @@
+ \ifhavexrefs
+ % We know the real title if we have the xref values.
+- \def\printednodename{\refx{#1-title}}%
++ \def\printednodename{\refx{#1-title}{}}%
+ \else
+ % Otherwise just copy the Info node name.
+@@ -3793,8 +4199,4 @@
+ \fi%
+ \fi
+- \def\printednodename{#1-title}%
+- \else
+- % Use the node name inside the square brackets.
+- \def\printednodename{\ignorespaces #1}%
+ \fi
+ \fi
+@@ -3824,5 +4226,5 @@
+ % Use \turnoffactive so that punctuation chars such as underscore
+ % work in node names.
+-\def\dosetq #1#2{{\let\folio=0 \turnoffactive%
++\def\dosetq #1#2{{\let\folio=0 \turnoffactive
+ \edef\next{\write\auxfile{\internalsetq {#1}{#2}}}%
+ \next}}
+@@ -3893,81 +4295,99 @@
+ }
+
+-% Read the last existing aux file, if any. No error if none exists.
+-
+ % This is the macro invoked by entries in the aux file.
+-\def\xrdef #1#2{
+-{\catcode`\'=\other\expandafter \gdef \csname X#1\endcsname {#2}}}
++\def\xrdef #1#2{{%
++ \catcode`\'=\other
++ \expandafter\gdef\csname X#1\endcsname{#2}%
++}}
+
+-\def\readauxfile{%
+-\begingroup
+-\catcode `\^^@=\other
+-\catcode `\=\other
+-\catcode `\=\other
+-\catcode `\^^C=\other
+-\catcode `\^^D=\other
+-\catcode `\^^E=\other
+-\catcode `\^^F=\other
+-\catcode `\^^G=\other
+-\catcode `\^^H=\other
+-\catcode `\ =\other
+-\catcode `\^^L=\other
+-\catcode `\=\other
+-\catcode `\=\other
+-\catcode `\=\other
+-\catcode `\=\other
+-\catcode `\=\other
+-\catcode `\=\other
+-\catcode `\=\other
+-\catcode `\=\other
+-\catcode `\=\other
+-\catcode `\=\other
+-\catcode `\=\other
+-\catcode `\=\other
+-\catcode 26=\other
+-\catcode `\^^[=\other
+-\catcode `\^^\=\other
+-\catcode `\^^]=\other
+-\catcode `\^^^=\other
+-\catcode `\^^_=\other
+-\catcode `\@=\other
+-\catcode `\^=\other
+-\catcode `\~=\other
+-\catcode `\[=\other
+-\catcode `\]=\other
+-\catcode`\"=\other
+-\catcode`\_=\other
+-\catcode`\|=\other
+-\catcode`\<=\other
+-\catcode`\>=\other
+-\catcode `\$=\other
+-\catcode `\#=\other
+-\catcode `\&=\other
+-% `\+ does not work, so use 43.
+-\catcode 43=\other
+-% Make the characters 128-255 be printing characters
+-{%
+- \count 1=128
+- \def\loop{%
+- \catcode\count 1=\other
+- \advance\count 1 by 1
+- \ifnum \count 1<256 \loop \fi
++% Read the last existing aux file, if any. No error if none exists.
++\def\readauxfile{\begingroup
++ \catcode`\^^@=\other
++ \catcode`\=\other
++ \catcode`\=\other
++ \catcode`\^^C=\other
++ \catcode`\^^D=\other
++ \catcode`\^^E=\other
++ \catcode`\^^F=\other
++ \catcode`\^^G=\other
++ \catcode`\^^H=\other
++ \catcode`\ =\other
++ \catcode`\^^L=\other
++ \catcode`\=\other
++ \catcode`\=\other
++ \catcode`\=\other
++ \catcode`\=\other
++ \catcode`\=\other
++ \catcode`\=\other
++ \catcode`\=\other
++ \catcode`\=\other
++ \catcode`\=\other
++ \catcode`\=\other
++ \catcode`\=\other
++ \catcode`\=\other
++ \catcode26=\other
++ \catcode`\^^[=\other
++ \catcode`\^^\=\other
++ \catcode`\^^]=\other
++ \catcode`\^^^=\other
++ \catcode`\^^_=\other
++ \catcode`\@=\other
++ \catcode`\^=\other
++ % It was suggested to define this as 7, which would allow ^^e4 etc.
++ % in xref tags, i.e., node names. But since ^^e4 notation isn't
++ % supported in the main text, it doesn't seem desirable. Furthermore,
++ % that is not enough: for node names that actually contain a ^
++ % character, we would end up writing a line like this: 'xrdef {'hat
++ % b-title}{'hat b} and \xrdef does a \csname...\endcsname on the first
++ % argument, and \hat is not an expandable control sequence. It could
++ % all be worked out, but why? Either we support ^^ or we don't.
++ %
++ % The other change necessary for this was to define \auxhat:
++ % \def\auxhat{\def^{'hat }}% extra space so ok if followed by letter
++ % and then to call \auxhat in \setq.
++ %
++ \catcode`\~=\other
++ \catcode`\[=\other
++ \catcode`\]=\other
++ \catcode`\"=\other
++ \catcode`\_=\other
++ \catcode`\|=\other
++ \catcode`\<=\other
++ \catcode`\>=\other
++ \catcode`\$=\other
++ \catcode`\#=\other
++ \catcode`\&=\other
++ % `\+ does not work, so use 43.
++ \catcode43=\other
++ % Make the characters 128-255 be printing characters
++ {%
++ \count 1=128
++ \def\loop{%
++ \catcode\count 1=\other
++ \advance\count 1 by 1
++ \ifnum \count 1<256 \loop \fi
++ }%
+ }%
+-}%
+-% the aux file uses ' as the escape.
+-% Turn off \ as an escape so we do not lose on
+-% entries which were dumped with control sequences in their names.
+-% For example, 'xrdef {$\leq $-fun}{page ...} made by @defun ^^
+-% Reference to such entries still does not work the way one would wish,
+-% but at least they do not bomb out when the aux file is read in.
+-\catcode `\{=1 \catcode `\}=2
+-\catcode `\%=\other
+-\catcode `\'=0
+-\catcode `\\=\other
+-\openin 1 \jobname.aux
+-\ifeof 1 \else \closein 1 \input \jobname.aux \global\havexrefstrue
+-\global\warnedobstrue
+-\fi
+-% Open the new aux file. Tex will close it automatically at exit.
+-\openout \auxfile=\jobname.aux
++ % The aux file uses ' as the escape (for now).
++ % Turn off \ as an escape so we do not lose on
++ % entries which were dumped with control sequences in their names.
++ % For example, 'xrdef {$\leq $-fun}{page ...} made by @defun ^^
++ % Reference to such entries still does not work the way one would wish,
++ % but at least they do not bomb out when the aux file is read in.
++ \catcode`\{=1
++ \catcode`\}=2
++ \catcode`\%=\other
++ \catcode`\'=0
++ \catcode`\\=\other
++ %
++ \openin 1 \jobname.aux
++ \ifeof 1 \else
++ \closein 1
++ \input \jobname.aux
++ \global\havexrefstrue
++ \global\warnedobstrue
++ \fi
++ % Open the new aux file. TeX will close it automatically at exit.
++ \openout\auxfile=\jobname.aux
+ \endgroup}
+
+@@ -3980,5 +4400,6 @@
+ % vital for proper filling; pages come out unaligned when you do a
+ % 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 }
+
+@@ -4009,5 +4430,9 @@
+ % footnote text as a parameter. Our footnotes don't need to be so general.
+ %
+-\long\gdef\footnotezzz#1{\insert\footins{%
++% Oh yes, they do; otherwise, @ifset and anything else that uses
++% \parseargline fail inside footnotes because the tokens are fixed when
++% the footnote is read. --karl, 16nov96.
++%
++\long\gdef\footnotezzz{\insert\footins\bgroup
+ % We want to typeset this text as a normal paragraph, even if the
+ % footnote reference occurs in (for example) a display environment.
+@@ -4031,6 +4456,11 @@
+ % provide a place where TeX can split the footnote.
+ \footstrut
+- #1\strut}%
++ \futurelet\next\fo@t
+ }
++\def\fo@t{\ifcat\bgroup\noexpand\next \let\next\f@@t
++ \else\let\next\f@t\fi \next}
++\def\f@@t{\bgroup\aftergroup\@foot\let\next}
++\def\f@t#1{#1\@foot}
++\def\@foot{\strut\egroup}
+
+ }%end \catcode `\@=11
+@@ -4105,11 +4535,16 @@
+ % Set some numeric style parameters, for 8.5 x 11 format.
+
+-%\hsize = 6.5in
++\hsize = 6in
++\hoffset = .25in
+ \newdimen\defaultparindent \defaultparindent = 15pt
+ \parindent = \defaultparindent
+-\parskip 18pt plus 1pt
+-\setleading{15pt}
++\parskip 3pt plus 2pt minus 1pt
++\setleading{13.2pt}
+ \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.
+ \vbadness=10000
+@@ -4134,28 +4569,26 @@
+ % Use @smallbook to reset parameters for 7x9.5 format (or else 7x9.25)
+ \def\smallbook{
+-
+-% These values for secheadingskip and subsecheadingskip are
+-% experiments. RJC 7 Aug 1992
+-\global\secheadingskip = 17pt plus 6pt minus 3pt
+-\global\subsecheadingskip = 14pt plus 6pt minus 3pt
+-
+-\global\lispnarrowing = 0.3in
+-\setleading{12pt}
+-\advance\topskip by -1cm
+-\global\parskip 3pt plus 1pt
+-\global\hsize = 5in
+-\global\vsize=7.5in
+-\global\tolerance=700
+-\global\hfuzz=1pt
+-\global\contentsrightmargin=0pt
+-\global\deftypemargin=0pt
+-\global\defbodyindent=.5cm
+-
+-\global\pagewidth=\hsize
+-\global\pageheight=\vsize
+-
+-\global\let\smalllisp=\smalllispx
+-\global\let\smallexample=\smalllispx
+-\global\def\Esmallexample{\Esmalllisp}
++ \global\chapheadingskip = 15pt plus 4pt minus 2pt
++ \global\secheadingskip = 12pt plus 3pt minus 2pt
++ \global\subsecheadingskip = 9pt plus 2pt minus 2pt
++ %
++ \global\lispnarrowing = 0.3in
++ \setleading{12pt}
++ \advance\topskip by -1cm
++ \global\parskip 2pt plus 1pt
++ \global\hsize = 5in
++ \global\vsize=7.5in
++ \global\tolerance=700
++ \global\hfuzz=1pt
++ \global\contentsrightmargin=0pt
++ \global\deftypemargin=0pt
++ \global\defbodyindent=.5cm
++ %
++ \global\pagewidth=\hsize
++ \global\pageheight=\vsize
++ %
++ \global\let\smalllisp=\smalllispx
++ \global\let\smallexample=\smalllispx
++ \global\def\Esmallexample{\Esmalllisp}
+ }
+
+@@ -4180,10 +4613,17 @@
+ }
+
++\bindingoffset=0pt
++\normaloffset=\hoffset
++\pagewidth=\hsize
++\pageheight=\vsize
++
+ % 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.
+
+-\def\changepagesizes#1#2#3#4#5
+-{\global\vsize= #1
++\def\changepagesizes#1#2#3#4#5#6{
++ \global\vsize= #1
++ \global\topskip= #6
+ \advance\vsize by \topskip
+ \global\voffset= #3
+@@ -4198,7 +4638,18 @@
+ \global\bindingoffset= #5}
+
+-% This layout is compatible with Latex on A4 paper.
+-
+-\def\afourlatex{\changepagesizes{22cm}{15cm}{7mm}{4.6mm}{5mm}}
++% 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}
++ }
++
++% 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.
+@@ -4248,12 +4699,5 @@
+ \def_{\ifusingtt\normalunderscore\_}
+ % Subroutine for the previous macro.
+-\def\_{\lvvmode \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{}}
++\def\_{\leavevmode \kern.06em \vbox{\hrule width.3em height.1ex}}
+
+ \catcode`\|=\active
+@@ -4274,4 +4718,13 @@
+ \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
+
+@@ -4316,4 +4769,8 @@
+ @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.
+ % That is what \eatinput is for; after that, the `\' should revert to printing
+@@ -4326,6 +4783,9 @@
+ % 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.
++% 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