diff options
Diffstat (limited to 'editors')
-rw-r--r-- | editors/mule/files/patch-sum | 4 | ||||
-rw-r--r-- | editors/mule/patches/patch-bb | 7112 |
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\}\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\}\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\}\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 |