emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Emacs-diffs] Changes to emacs/man/texinfo.tex


From: Pavel Janík
Subject: [Emacs-diffs] Changes to emacs/man/texinfo.tex
Date: Fri, 06 Sep 2002 06:03:59 -0400

Index: emacs/man/texinfo.tex
diff -c emacs/man/texinfo.tex:1.1 emacs/man/texinfo.tex:1.2
*** emacs/man/texinfo.tex:1.1   Mon May 14 05:53:34 2001
--- emacs/man/texinfo.tex       Fri Sep  6 06:03:59 2002
***************
*** 3,12 ****
  % Load plain if necessary, i.e., if running under initex.
  \expandafter\ifx\csname fmtname\endcsname\relax\input plain\fi
  %
! \def\texinfoversion{2001-03-28.08}
  %
  % Copyright (C) 1985, 86, 88, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99,
! %               2000, 01 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
--- 3,12 ----
  % Load plain if necessary, i.e., if running under initex.
  \expandafter\ifx\csname fmtname\endcsname\relax\input plain\fi
  %
! \def\texinfoversion{2002-06-04.06}
  %
  % Copyright (C) 1985, 86, 88, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99,
! %               2000, 01, 02 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
***************
*** 30,43 ****
  % Please try the latest version of texinfo.tex before submitting bug
  % reports; you can get the latest version from:
  %   ftp://ftp.gnu.org/gnu/texinfo.tex
! %   (and all GNU mirrors, see http://www.gnu.org/order/ftp.html)
! %   ftp://texinfo.org/tex/texinfo.tex
! %   ftp://us.ctan.org/macros/texinfo/texinfo.tex
! %   (and all CTAN mirrors, finger address@hidden for a list).
! %   /home/gd/gnu/doc/texinfo.tex on the GNU machines.
  % The texinfo.tex in any given Texinfo distribution could well be out
  % of date, so if that's what you're using, please check.
! % Texinfo has a small home page at http://texinfo.org/.
  %
  % Send bug reports to address@hidden  Please include including a
  % complete document in each bug report with which we can reproduce the
--- 30,46 ----
  % Please try the latest version of texinfo.tex before submitting bug
  % reports; you can get the latest version from:
  %   ftp://ftp.gnu.org/gnu/texinfo.tex
! %     (and all GNU mirrors, see http://www.gnu.org/order/ftp.html)
! %   ftp://texinfo.org/texinfo/texinfo.tex
! %   ftp://tug.org/tex/texinfo.tex
! %     (and all CTAN mirrors, see http://www.ctan.org),
! %   and /home/gd/gnu/doc/texinfo.tex on the GNU machines.
! % 
  % The texinfo.tex in any given Texinfo distribution could well be out
  % of date, so if that's what you're using, please check.
! % 
! % Texinfo has a small home page at http://texinfo.org/ and also
! % http://www.gnu.org/software/texinfo.
  %
  % Send bug reports to address@hidden  Please include including a
  % complete document in each bug report with which we can reproduce the
***************
*** 50,62 ****
  %   texindex foo.??
  %   tex foo.texi
  %   tex foo.texi
! %   dvips foo.dvi -o # or whatever, to process the dvi file; this makes 
foo.ps.
! % The extra runs of TeX get the cross-reference information correct.
  % Sometimes one run after texindex suffices, and sometimes you need more
  % than two; texi2dvi does it as many times as necessary.
  %
  % It is possible to adapt texinfo.tex for other languages.  You can get
! % the existing language-specific files from ftp://ftp.gnu.org/gnu/texinfo/.
  
  \message{Loading texinfo [version \texinfoversion]:}
  
--- 53,65 ----
  %   texindex foo.??
  %   tex foo.texi
  %   tex foo.texi
! %   dvips foo.dvi -o  # or whatever; this makes foo.ps.
! % The extra TeX runs get the cross-reference information correct.
  % Sometimes one run after texindex suffices, and sometimes you need more
  % than two; texi2dvi does it as many times as necessary.
  %
  % It is possible to adapt texinfo.tex for other languages.  You can get
! % the existing language-specific files from the full Texinfo distribution.
  
  \message{Loading texinfo [version \texinfoversion]:}
  
***************
*** 170,175 ****
--- 173,188 ----
  }%
  \fi
  
+ % add check for \lastpenalty to plain's definitions.  If the last thing
+ % we did was a \nobreak, we don't want to insert more space.
+ % 
+ \def\smallbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\smallskipamount
+   \removelastskip\penalty-50\smallskip\fi\fi}
+ \def\medbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\medskipamount
+   \removelastskip\penalty-100\medskip\fi\fi}
+ \def\bigbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\bigskipamount
+   \removelastskip\penalty-200\bigskip\fi\fi}
+ 
  % For @cropmarks command.
  % Do @cropmarks to get crop marks.
  %
***************
*** 431,437 ****
    % environments.  --karl, 6may93
    %{\advance \baselineskip by -\singlespaceskip
    %\kern \baselineskip}%
!   \setleading \singlespaceskip
  }
  
  %% Simple single-character @ commands
--- 444,450 ----
    % environments.  --karl, 6may93
    %{\advance \baselineskip by -\singlespaceskip
    %\kern \baselineskip}%
!   \setleading\singlespaceskip
  }
  
  %% Simple single-character @ commands
***************
*** 823,840 ****
  %
  \def\asis#1{#1}
  
! % @math means output in math mode.
! % We don't use $'s directly in the definition of \math because control
! % sequences like \math are expanded when the toc file is written.  Then,
! % we read the toc file back, the $'s will be normal characters (as they
! % should be, according to the definition of Texinfo).  So we must use a
! % control sequence to switch into and out of math mode.
  %
! % This isn't quite enough for @math to work properly in indices, but it
! % seems unlikely it will ever be needed there.
  %
! \let\implicitmath = $
! \def\math#1{\implicitmath #1\implicitmath}
  
  % @bullet and @minus need the same treatment as @math, just above.
  \def\bullet{\implicitmath\ptexbullet\implicitmath}
--- 836,878 ----
  %
  \def\asis#1{#1}
  
! % @math outputs its argument in math mode.
! % We don't use $'s directly in the definition of \math because we need
! % to set catcodes according to plain TeX first, to allow for subscripts,
! % superscripts, special math chars, etc.
! % 
! % @math does not do math typesetting in section titles, index
! % entries, and other such contexts where the catcodes are set before
! % @math gets a chance to work.  This could perhaps be fixed, but for now
! % at least we can have real math in the main text, where it's needed most.
! %
! \let\implicitmath = $%$ font-lock fix
! %
! % One complication: _ usually means subscripts, but it could also mean
! % an actual _ character, as in @address@hidden + 1}.  So make
! % _ within @math be active (mathcode "8000), and distinguish by seeing
! % if the current family is \slfam, which is what @var uses.
! % 
! {\catcode95 = \active  % 95 = _
! \gdef\mathunderscore{%
!   \catcode95=\active
!   \def_{\ifnum\fam=\slfam \_\else\sb\fi}%
! }}
  %
! % Another complication: we want \\ (and @\) to output a \ character.
! % FYI, plain.tex uses \\ as a temporary control sequence (why?), but
! % this is not advertised and we don't care.  Texinfo does not
! % otherwise define @\.
! % 
! % The \mathchar is class=0=ordinary, family=7=ttfam, position=5C=\.
! \def\mathbackslash{\ifnum\fam=\ttfam \mathchar"075C \else\backslash \fi}
  %
! \def\math{%
!   \tex
!   \mathcode`\_="8000 \mathunderscore
!   \let\\ = \mathbackslash
!   \implicitmath\finishmath}
! \def\finishmath#1{#1\implicitmath\Etex}
  
  % @bullet and @minus need the same treatment as @math, just above.
  \def\bullet{\implicitmath\ptexbullet\implicitmath}
***************
*** 917,926 ****
    \def\dopdfimage#1#2#3{%
      \def\imagewidth{#2}%
      \def\imageheight{#3}%
      \ifnum\pdftexversion < 14
!       \pdfimage
      \else
!       \pdfximage
      \fi
        \ifx\empty\imagewidth\else width \imagewidth \fi
        \ifx\empty\imageheight\else height \imageheight \fi
--- 955,966 ----
    \def\dopdfimage#1#2#3{%
      \def\imagewidth{#2}%
      \def\imageheight{#3}%
+     % without \immediate, pdftex seg faults when the same image is
+     % included twice.  (Version 3.14159-pre-1.0-unofficial-20010704.)
      \ifnum\pdftexversion < 14
!       \immediate\pdfimage
      \else
!       \immediate\pdfximage
      \fi
        \ifx\empty\imagewidth\else width \imagewidth \fi
        \ifx\empty\imageheight\else height \imageheight \fi
***************
*** 932,939 ****
      \ifnum\pdftexversion < 14 \else
        \pdfrefximage \pdflastximage
      \fi}
!   \def\pdfmkdest#1{\pdfdest name{#1} xyz}
!   address@hidden
    \let\linkcolor = \Blue  % was Cyan, but that seems light?
    \def\endlink{\Black\pdfendlink}
    % Adding outlines to PDF; macros for calculating structure of outlines
--- 972,979 ----
      \ifnum\pdftexversion < 14 \else
        \pdfrefximage \pdflastximage
      \fi}
!   \def\pdfmkdest#1{{\normalturnoffactive \pdfdest name{#1} xyz}}
!   \def\pdfmkpgn#1{#1}
    \let\linkcolor = \Blue  % was Cyan, but that seems light?
    \def\endlink{\Black\pdfendlink}
    % Adding outlines to PDF; macros for calculating structure of outlines
***************
*** 945,951 ****
      \expandafter\xdef\csname#1\endcsname{\the\tempnum}}
    \def\pdfmakeoutlines{{%
      \openin 1 \jobname.toc
!     \ifeof 1\else\bgroup
        \closein 1 
        \indexnofonts
        \def\tt{}
--- 985,991 ----
      \expandafter\xdef\csname#1\endcsname{\the\tempnum}}
    \def\pdfmakeoutlines{{%
      \openin 1 \jobname.toc
!     \ifeof 1\else\begingroup
        \closein 1 
        \indexnofonts
        \def\tt{}
***************
*** 955,986 ****
        \edef\myrbrace{\iffalse{\else\string}\fi}\let\}=\myrbrace
        %
        \def\chapentry ##1##2##3{}
        \def\unnumbchapentry ##1##2{}
        \def\secentry ##1##2##3##4{\advancenumber{chap##2}}
!       \def\unnumbsecentry ##1##2{}
        \def\subsecentry ##1##2##3##4##5{\advancenumber{sec##2.##3}}
!       \def\unnumbsubsecentry ##1##2{}
        \def\subsubsecentry 
##1##2##3##4##5##6{\advancenumber{subsec##2.##3.##4}}
!       \def\unnumbsubsubsecentry ##1##2{}
        \input \jobname.toc
        \def\chapentry ##1##2##3{%
          \pdfoutline goto name{\pdfmkpgn{##3}}count-\expnumber{chap##2}{##1}}
        \def\unnumbchapentry ##1##2{%
          \pdfoutline goto name{\pdfmkpgn{##2}}{##1}}
        \def\secentry ##1##2##3##4{%
          \pdfoutline goto 
name{\pdfmkpgn{##4}}count-\expnumber{sec##2.##3}{##1}}
!       \def\unnumbsecentry ##1##2{%
!         \pdfoutline goto name{\pdfmkpgn{##2}}{##1}}
        \def\subsecentry ##1##2##3##4##5{%
          \pdfoutline goto 
name{\pdfmkpgn{##5}}count-\expnumber{subsec##2.##3.##4}{##1}}
!       \def\unnumbsubsecentry ##1##2{%
!         \pdfoutline goto name{\pdfmkpgn{##2}}{##1}}
        \def\subsubsecentry ##1##2##3##4##5##6{%
          \pdfoutline goto name{\pdfmkpgn{##6}}{##1}}
!       \def\unnumbsubsubsecentry ##1##2{%
!         \pdfoutline goto name{\pdfmkpgn{##2}}{##1}}
        \input \jobname.toc
!     \egroup\fi
    }}
    \def\makelinks #1,{%
      \def\params{#1}\def\E{END}%
--- 995,1028 ----
        \edef\myrbrace{\iffalse{\else\string}\fi}\let\}=\myrbrace
        %
        \def\chapentry ##1##2##3{}
+       \let\appendixentry = \chapentry
        \def\unnumbchapentry ##1##2{}
        \def\secentry ##1##2##3##4{\advancenumber{chap##2}}
!       \def\unnumbsecentry ##1##2##3{\advancenumber{chap##2}}
        \def\subsecentry ##1##2##3##4##5{\advancenumber{sec##2.##3}}
!       \def\unnumbsubsecentry ##1##2##3##4{\advancenumber{sec##2.##3}}
        \def\subsubsecentry 
##1##2##3##4##5##6{\advancenumber{subsec##2.##3.##4}}
!       \def\unnumbsubsubsecentry 
##1##2##3##4##5{\advancenumber{subsec##2.##3.##4}}
        \input \jobname.toc
        \def\chapentry ##1##2##3{%
          \pdfoutline goto name{\pdfmkpgn{##3}}count-\expnumber{chap##2}{##1}}
+       \let\appendixentry = \chapentry
        \def\unnumbchapentry ##1##2{%
          \pdfoutline goto name{\pdfmkpgn{##2}}{##1}}
        \def\secentry ##1##2##3##4{%
          \pdfoutline goto 
name{\pdfmkpgn{##4}}count-\expnumber{sec##2.##3}{##1}}
!       \def\unnumbsecentry ##1##2##3{%
!         \pdfoutline goto name{\pdfmkpgn{##3}}{##1}}
        \def\subsecentry ##1##2##3##4##5{%
          \pdfoutline goto 
name{\pdfmkpgn{##5}}count-\expnumber{subsec##2.##3.##4}{##1}}
!       \def\unnumbsubsecentry ##1##2##3##4{%
!         \pdfoutline goto name{\pdfmkpgn{##4}}{##1}}
        \def\subsubsecentry ##1##2##3##4##5##6{%
          \pdfoutline goto name{\pdfmkpgn{##6}}{##1}}
!       \def\unnumbsubsubsecentry ##1##2##3##4##5{%
!         \pdfoutline goto name{\pdfmkpgn{##5}}{##1}}
        \input \jobname.toc
!     \endgroup\fi
    }}
    \def\makelinks #1,{%
      \def\params{#1}\def\E{END}%
***************
*** 1030,1035 ****
--- 1072,1078 ----
    \def\pdfurl#1{%
      \begingroup
        address@hidden@}%
+       \let\value=\expandablevalue
        \leavevmode\Red
        \startlink attr{/Border [0 0 0]}%
          user{/Subtype /Link /A << /S /URI /URI (#1) >>}%
***************
*** 1057,1065 ****
    \def\makelink{\addtokens{\toksB}%
      {\noexpand\pdflink{\the\toksC}}\toksC={}\global\countA=0}
    \def\pdflink#1{%
!     \startlink attr{/Border [0 0 0]} goto name{\mkpgn{#1}}
      \linkcolor #1\endlink}
-   address@hidden 
    \def\done{\edef\st{\global\noexpand\toksA={\the\toksB}}\st}
  \fi % \ifx\pdfoutput
  
--- 1100,1107 ----
    \def\makelink{\addtokens{\toksB}%
      {\noexpand\pdflink{\the\toksC}}\toksC={}\global\countA=0}
    \def\pdflink#1{%
!     \startlink attr{/Border [0 0 0]} goto name{\pdfmkpgn{#1}}
      \linkcolor #1\endlink}
    \def\done{\edef\st{\global\noexpand\toksA={\the\toksB}}\st}
  \fi % \ifx\pdfoutput
  
***************
*** 1076,1084 ****
  % We don't need math for this one.
  \def\ttsl{\tenttsl}
  
! % Use Computer Modern fonts at \magstephalf (11pt).
! \newcount\mainmagstep
! \mainmagstep=\magstephalf
  
  % Set the font macro #1 to the font named #2, adding on the
  % specified font prefix (normally `cm').
--- 1118,1143 ----
  % We don't need math for this one.
  \def\ttsl{\tenttsl}
  
! % Default leading.
! \newdimen\textleading  \textleading = 13.2pt
! 
! % Set the baselineskip to #1, and the lineskip and strut size
! % correspondingly.  There is no deep meaning behind these magic numbers
! % used as factors; they just match (closely enough) what Knuth defined.
! %
! \def\lineskipfactor{.08333}
! \def\strutheightpercent{.70833}
! \def\strutdepthpercent {.29167}
! %
! \def\setleading#1{%
!   \normalbaselineskip = #1\relax
!   \normallineskip = \lineskipfactor\normalbaselineskip
!   \normalbaselines
!   \setbox\strutbox =\hbox{%
!     \vrule width0pt height\strutheightpercent\baselineskip
!                     depth \strutdepthpercent \baselineskip
!   }%
! }
  
  % Set the font macro #1 to the font named #2, adding on the
  % specified font prefix (normally `cm').
***************
*** 1108,1120 ****
  \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
--- 1167,1182 ----
  \def\scshape{csc}
  \def\scbshape{csc}
  
+ \newcount\mainmagstep
  \ifx\bigger\relax
!   % not really supported.
!   \let\mainmagstep=\magstep1
!   \setfont\textrm\rmshape{12}{1000}
!   \setfont\texttt\ttshape{12}{1000}
  \else
!   \mainmagstep=\magstephalf
!   \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
***************
*** 1145,1150 ****
--- 1207,1224 ----
  \font\smalli=cmmi9
  \font\smallsy=cmsy9
  
+ % Fonts for small examples (8pt).
+ \setfont\smallerrm\rmshape{8}{1000}
+ \setfont\smallertt\ttshape{8}{1000}
+ \setfont\smallerbf\bfshape{10}{800}
+ \setfont\smallerit\itshape{8}{1000}
+ \setfont\smallersl\slshape{8}{1000}
+ \setfont\smallersf\sfshape{8}{1000}
+ \setfont\smallersc\scshape{10}{800}
+ \setfont\smallerttsl\ttslshape{10}{800}
+ \font\smalleri=cmmi8
+ \font\smallersy=cmsy8
+ 
  % Fonts for title page:
  \setfont\titlerm\rmbshape{12}{\magstep3}
  \setfont\titleit\itbshape{10}{\magstep4}
***************
*** 1182,1201 ****
  \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}
--- 1256,1261 ----
***************
*** 1212,1228 ****
  
  % In order for the font changes to affect most math symbols and letters,
  % we have to define the \textfont of the standard families.  Since
! % texinfo doesn't allow for producing subscripts and superscripts, we
! % don't bother to reset \scriptfont and \scriptscriptfont (which would
! % also require loading a lot more fonts).
  %
  \def\resetmathfonts{%
!   \textfont0 = \tenrm \textfont1 = \teni \textfont2 = \tensy
!   \textfont\itfam = \tenit \textfont\slfam = \tensl \textfont\bffam = \tenbf
!   \textfont\ttfam = \tentt \textfont\sffam = \tensf
  }
  
- 
  % 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
--- 1272,1287 ----
  
  % In order for the font changes to affect most math symbols and letters,
  % we have to define the \textfont of the standard families.  Since
! % texinfo doesn't allow for producing subscripts and superscripts except
! % in the main text, we don't bother to reset \scriptfont and
! % \scriptscriptfont (which would also require loading a lot more fonts).
  %
  \def\resetmathfonts{%
!   \textfont0=\tenrm \textfont1=\teni \textfont2=\tensy
!   \textfont\itfam=\tenit \textfont\slfam=\tensl \textfont\bffam=\tenbf
!   \textfont\ttfam=\tentt \textfont\sffam=\tensf
  }
  
  % 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
***************
*** 1233,1239 ****
    \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\titlefonts{%
    \let\tenrm=\titlerm \let\tenit=\titleit \let\tensl=\titlesl
    \let\tenbf=\titlebf \let\tentt=\titlett \let\smallcaps=\titlesc
--- 1292,1298 ----
    \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 \setleading{\textleading}}
  \def\titlefonts{%
    \let\tenrm=\titlerm \let\tenit=\titleit \let\tensl=\titlesl
    \let\tenbf=\titlebf \let\tentt=\titlett \let\smallcaps=\titlesc
***************
*** 1262,1268 ****
    \let\tenbf=\smallbf \let\tentt=\smalltt \let\smallcaps=\smallsc
    \let\tensf=\smallsf \let\teni=\smalli \let\tensy=\smallsy
    \let\tenttsl=\smallttsl
!   \resetmathfonts \setleading{11pt}}
  
  % Set up the default fonts, so we can use them for creating boxes.
  %
--- 1321,1334 ----
    \let\tenbf=\smallbf \let\tentt=\smalltt \let\smallcaps=\smallsc
    \let\tensf=\smallsf \let\teni=\smalli \let\tensy=\smallsy
    \let\tenttsl=\smallttsl
!   \resetmathfonts \setleading{10.5pt}}
! \def\smallerfonts{%
!   \let\tenrm=\smallerrm \let\tenit=\smallerit \let\tensl=\smallersl
!   \let\tenbf=\smallerbf \let\tentt=\smallertt \let\smallcaps=\smallersc
!   \let\tensf=\smallersf \let\teni=\smalleri \let\tensy=\smallersy
!   \let\tenttsl=\smallerttsl
!   \resetmathfonts \setleading{9.5pt}}
! \let\smallexamplefonts = \smallerfonts
  
  % Set up the default fonts, so we can use them for creating boxes.
  %
***************
*** 1376,1386 ****
  
  \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.
  
--- 1442,1460 ----
  
  \def\realdash{-}
  \def\codedash{-\discretionary{}{}{}}
! \def\codeunder{%
!   % this is all so @address@hidden can work.  In math mode, _
!   % is "active" (mathcode"8000) and \normalunderscore (or \char95, etc.)
!   % will therefore expand the active definition of _, which is us
!   % (inside @code that is), therefore an endless loop.
!   \ifusingtt{\ifmmode
!                \mathchar"075F % class 0=ordinary, family 7=ttfam, pos 0x5F=_.
!              \else\normalunderscore \fi
!              \discretionary{}{}{}}%
!             {\_}%
! }
  \def\codex #1{\tclose{#1}\endgroup}
  
  % @kbd is like @code, except that if the argument is just one @key command,
  % then @kbd has no effect.
  
***************
*** 1565,1570 ****
--- 1639,1648 ----
     \oldpage
     \endgroup
     %
+    % Need this before the \...aftertitlepage checks so that if they are
+    % in effect the toc pages will come out with page numbers.
+    \HEADINGSon
+    %
     % If they want short, they certainly want long too.
     \ifsetshortcontentsaftertitlepage
       \shortcontents
***************
*** 1578,1587 ****
       \global\let\contents = \relax
       \global\let\shortcontents = \relax
     \fi
-    %
-    \ifpdf \pdfmakepagedesttrue \fi
-    %
-    \HEADINGSon
  }
  
  \def\finishtitlepage{%
--- 1656,1661 ----
***************
*** 2339,2356 ****
    \let\item = \relax
  }
  
! % Ignore @ignore ... @end ignore.
  %
  \def\ignore{\doignore{ignore}}
- 
- % Ignore @ifinfo, @ifhtml, @ifnottex, @html, @menu, and @direntry text.
- %
- \def\ifinfo{\doignore{ifinfo}}
  \def\ifhtml{\doignore{ifhtml}}
  \def\ifnottex{\doignore{ifnottex}}
  \def\html{\doignore{html}}
  \def\menu{\doignore{menu}}
  \def\direntry{\doignore{direntry}}
  
  % @dircategory CATEGORY  -- specify a category of the dir file
  % which this file should belong to.  Ignore this in TeX.
--- 2413,2431 ----
    \let\item = \relax
  }
  
! % Ignore @ignore, @ifhtml, @ifinfo, @ifplaintext, @ifnottex, @html, @menu,
! % @direntry, and @documentdescription.
  %
  \def\ignore{\doignore{ignore}}
  \def\ifhtml{\doignore{ifhtml}}
+ \def\ifinfo{\doignore{ifinfo}}
+ \def\ifplaintext{\doignore{ifplaintext}}
  \def\ifnottex{\doignore{ifnottex}}
  \def\html{\doignore{html}}
  \def\menu{\doignore{menu}}
  \def\direntry{\doignore{direntry}}
+ \def\documentdescription{\doignore{documentdescription}}
+ \def\documentdescriptionword{documentdescription}
  
  % @dircategory CATEGORY  -- specify a category of the dir file
  % which this file should belong to.  Ignore this in TeX.
***************
*** 2377,2390 ****
    % We must not have @c interpreted as a control sequence.
    \catcode`\@ = 12
    %
!   % Make the letter c a comment character so that the rest of the line
!   % will be ignored. This way, the document can have (for example)
!   %   @c @end ifinfo
!   % and the @end ifinfo will be properly ignored.
!   % (We've just changed @ to catcode 12.)
!   \catcode`\c = 14
    %
!   % And now expand that command.
    \doignoretext
  }
  
--- 2452,2472 ----
    % We must not have @c interpreted as a control sequence.
    \catcode`\@ = 12
    %
!   \def\ignoreword{#1}%
!   \ifx\ignoreword\documentdescriptionword
!     % The c kludge breaks documentdescription, since
!     % `documentdescription' contains a `c'.  Means not everything will
!     % be ignored inside @documentdescription, but oh well...
!   \else
!     % Make the letter c a comment character so that the rest of the line
!     % will be ignored. This way, the document can have (for example)
!     %   @c @end ifinfo
!     % and the @end ifinfo will be properly ignored.
!     % (We've just changed @ to catcode 12.)
!     \catcode`\c = 14
!   \fi
    %
!   % And now expand the command defined above.
    \doignoretext
  }
  
***************
*** 2456,2465 ****
      \let\tenrm=\nullfont \let\tenit=\nullfont \let\tensl=\nullfont
      \let\tenbf=\nullfont \let\tentt=\nullfont \let\smallcaps=\nullfont
      \let\tensf=\nullfont
!     % Similarly for index fonts (mostly for their use in smallexample).
      \let\smallrm=\nullfont \let\smallit=\nullfont \let\smallsl=\nullfont
      \let\smallbf=\nullfont \let\smalltt=\nullfont \let\smallsc=\nullfont
      \let\smallsf=\nullfont
      %
      % Don't complain when characters are missing from the fonts.
      \tracinglostchars = 0
--- 2538,2551 ----
      \let\tenrm=\nullfont \let\tenit=\nullfont \let\tensl=\nullfont
      \let\tenbf=\nullfont \let\tentt=\nullfont \let\smallcaps=\nullfont
      \let\tensf=\nullfont
!     % Similarly for index fonts.
      \let\smallrm=\nullfont \let\smallit=\nullfont \let\smallsl=\nullfont
      \let\smallbf=\nullfont \let\smalltt=\nullfont \let\smallsc=\nullfont
      \let\smallsf=\nullfont
+     % Similarly for smallexample fonts.
+     \let\smallerrm=\nullfont \let\smallerit=\nullfont \let\smallersl=\nullfont
+     \let\smallerbf=\nullfont \let\smallertt=\nullfont \let\smallersc=\nullfont
+     \let\smallersf=\nullfont
      %
      % Don't complain when characters are missing from the fonts.
      \tracinglostchars = 0
***************
*** 2571,2589 ****
  \def\ifclearfail{\nestedignore{ifclear}}
  \defineunmatchedend{ifclear}
  
! % @iftex, @ifnothtml, @ifnotinfo always succeed; we read the text
! % following, through the first @end iftex (etc.).  Make address@hidden iftex'
! % (etc.) valid only after an @iftex.
  %
  \def\iftex{\conditionalsucceed{iftex}}
  \def\ifnothtml{\conditionalsucceed{ifnothtml}}
  \def\ifnotinfo{\conditionalsucceed{ifnotinfo}}
  \defineunmatchedend{iftex}
  \defineunmatchedend{ifnothtml}
  \defineunmatchedend{ifnotinfo}
  
! % We can't just want to start a group at @iftex (for example) and end it
! % at @end iftex, since then @set commands inside the conditional have no
  % effect (they'd get reverted at the end of the group).  So we must
  % define \Eiftex to redefine itself to be its previous value.  (We can't
  % just define it to fail again with an ``unmatched end'' error, since
--- 2657,2677 ----
  \def\ifclearfail{\nestedignore{ifclear}}
  \defineunmatchedend{ifclear}
  
! % @iftex, @ifnothtml, @ifnotinfo, @ifnotplaintext always succeed; we
! % read the text following, through the first @end iftex (etc.).  Make
! % address@hidden iftex' (etc.) valid only after an @iftex.
  %
  \def\iftex{\conditionalsucceed{iftex}}
  \def\ifnothtml{\conditionalsucceed{ifnothtml}}
  \def\ifnotinfo{\conditionalsucceed{ifnotinfo}}
+ \def\ifnotplaintext{\conditionalsucceed{ifnotplaintext}}
  \defineunmatchedend{iftex}
  \defineunmatchedend{ifnothtml}
  \defineunmatchedend{ifnotinfo}
+ \defineunmatchedend{ifnotplaintext}
  
! % We can't just want to start a group at @iftex (etc.) and end it at
! % @end iftex, since then @set commands inside the conditional have no
  % effect (they'd get reverted at the end of the group).  So we must
  % define \Eiftex to redefine itself to be its previous value.  (We can't
  % just define it to fail again with an ``unmatched end'' error, since
***************
*** 2696,2704 ****
--- 2784,2806 ----
  \def\docodeindex#1{\edef\indexname{#1}\parsearg\singlecodeindexer}
  \def\singlecodeindexer #1{\doind{\indexname}{\code{#1}}}
  
+ % 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\indexdummies{%
  \def\ { }%
+ address@hidden@}% change to @@ when we switch to @ as escape char in aux 
files.
+ % Need these in case \tex is in effect and \{ is a \delimiter again.
+ % But can't use \lbracecmd and \rbracecmd because texindex assumes
+ % braces and backslashes are used only as delimiters.  
+ \let\{ = \mylbrace
+ \let\} = \myrbrace
+ \def\_{{\realbackslash _}}%
+ \normalturnoffactive
+ %
  % Take care of the plain tex accent commands.
+ \def\,##1{\realbackslash ,{##1}}%
  \def\"{\realbackslash "}%
  \def\`{\realbackslash `}%
  \def\'{\realbackslash '}%
***************
*** 2711,2779 ****
  \def\u{\realbackslash u}%
  \def\v{\realbackslash v}%
  \def\H{\realbackslash H}%
  % Take care of the plain tex special European modified letters.
- \def\oe{\realbackslash oe}%
- \def\ae{\realbackslash ae}%
- \def\aa{\realbackslash aa}%
- \def\OE{\realbackslash OE}%
- \def\AE{\realbackslash AE}%
  \def\AA{\realbackslash AA}%
! \def\o{\realbackslash o}%
  \def\O{\realbackslash O}%
  \def\l{\realbackslash l}%
! \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.)
! address@hidden@}% will be @@ when we switch to @ as escape char.
! % Need these in case \tex is in effect and \{ is a \delimiter again.
! % But can't use \lbracecmd and \rbracecmd because texindex assumes
! % braces and backslashes are used only as delimiters.  
! \let\{ = \mylbrace
! \let\} = \myrbrace
! \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\TeX{\realbackslash TeX}%
! \def\dots{\realbackslash dots }%
! \def\result{\realbackslash result}%
! \def\equiv{\realbackslash equiv}%
! \def\expansion{\realbackslash expansion}%
! \def\print{\realbackslash print}%
! \def\error{\realbackslash error}%
! \def\point{\realbackslash point}%
! \def\copyright{\realbackslash copyright}%
! \def\tclose##1{\realbackslash tclose {##1}}%
  \def\code##1{\realbackslash code {##1}}%
- \def\uref##1{\realbackslash uref {##1}}%
- \def\url##1{\realbackslash url {##1}}%
- \def\env##1{\realbackslash env {##1}}%
  \def\command##1{\realbackslash command {##1}}%
  \def\option##1{\realbackslash option {##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}}%
  \def\var##1{\realbackslash var {##1}}%
! \def\kbd##1{\realbackslash kbd {##1}}%
! \def\dfn##1{\realbackslash dfn {##1}}%
! \def\emph##1{\realbackslash emph {##1}}%
! \def\acronym##1{\realbackslash acronym {##1}}%
  %
  % Handle some cases of @value -- where the variable name does not
  % contain - or _, and the value does not contain any
--- 2813,2878 ----
  \def\u{\realbackslash u}%
  \def\v{\realbackslash v}%
  \def\H{\realbackslash H}%
+ \def\dotless##1{\realbackslash dotless {##1}}%
  % Take care of the plain tex special European modified letters.
  \def\AA{\realbackslash AA}%
! \def\AE{\realbackslash AE}%
! \def\L{\realbackslash L}%
! \def\OE{\realbackslash OE}%
  \def\O{\realbackslash O}%
+ \def\aa{\realbackslash aa}%
+ \def\ae{\realbackslash ae}%
  \def\l{\realbackslash l}%
! \def\oe{\realbackslash oe}%
! \def\o{\realbackslash o}%
  \def\ss{\realbackslash ss}%
! %
! % Although these internals commands shouldn't show up, sometimes they do.
  \def\bf{\realbackslash bf }%
+ \def\gtr{\realbackslash gtr}%
+ \def\hat{\realbackslash hat}%
+ \def\less{\realbackslash less}%
  %\def\rm{\realbackslash rm }%
  \def\sf{\realbackslash sf}%
+ \def\sl{\realbackslash sl }%
+ \def\tclose##1{\realbackslash tclose {##1}}%
  \def\tt{\realbackslash tt}%
! %
! \def\b##1{\realbackslash b {##1}}%
! \def\i##1{\realbackslash i {##1}}%
! \def\sc##1{\realbackslash sc {##1}}%
! \def\t##1{\realbackslash t {##1}}%
! \def\r##1{\realbackslash r {##1}}%
! %
  \def\TeX{\realbackslash TeX}%
! \def\acronym##1{\realbackslash acronym {##1}}%
! \def\cite##1{\realbackslash cite {##1}}%
  \def\code##1{\realbackslash code {##1}}%
  \def\command##1{\realbackslash command {##1}}%
+ \def\dfn##1{\realbackslash dfn {##1}}%
+ \def\dots{\realbackslash dots }%
+ \def\emph##1{\realbackslash emph {##1}}%
+ \def\env##1{\realbackslash env {##1}}%
+ \def\file##1{\realbackslash file {##1}}%
+ \def\kbd##1{\realbackslash kbd {##1}}%
+ \def\key##1{\realbackslash key {##1}}%
+ \def\math##1{\realbackslash math {##1}}%
  \def\option##1{\realbackslash option {##1}}%
  \def\samp##1{\realbackslash samp {##1}}%
! \def\strong##1{\realbackslash strong {##1}}%
! \def\uref##1{\realbackslash uref {##1}}%
! \def\url##1{\realbackslash url {##1}}%
  \def\var##1{\realbackslash var {##1}}%
! \def\w{\realbackslash w }%
! %
! % These math commands don't seem likely to be used in index entries.
! \def\copyright{\realbackslash copyright}%
! \def\equiv{\realbackslash equiv}%
! \def\error{\realbackslash error}%
! \def\expansion{\realbackslash expansion}%
! \def\point{\realbackslash point}%
! \def\print{\realbackslash print}%
! \def\result{\realbackslash result}%
  %
  % Handle some cases of @value -- where the variable name does not
  % contain - or _, and the value does not contain any
***************
*** 2787,2793 ****
  
  % 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 address@hidden \ ).
  {\obeyspaces
   \gdef\unsepspaces{\obeyspaces\let =\space}}
  
--- 2886,2892 ----
  
  % 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 address@hidden \ ).
  {\obeyspaces
   \gdef\unsepspaces{\obeyspaces\let =\space}}
  
***************
*** 2798,2804 ****
  \def\indexdummydots{...}
  
  \def\indexnofonts{%
! % Just ignore accents.
  \let\,=\indexdummyfont
  \let\"=\indexdummyfont
  \let\`=\indexdummyfont
--- 2897,2906 ----
  \def\indexdummydots{...}
  
  \def\indexnofonts{%
! address@hidden@}%
! % how to handle braces?
! \def\_{\normalunderscore}%
! %
  \let\,=\indexdummyfont
  \let\"=\indexdummyfont
  \let\`=\indexdummyfont
***************
*** 2814,2858 ****
  \let\H=\indexdummyfont
  \let\dotless=\indexdummyfont
  % Take care of the plain tex special European modified letters.
- \def\oe{oe}%
- \def\ae{ae}%
- \def\aa{aa}%
- \def\OE{OE}%
- \def\AE{AE}%
  \def\AA{AA}%
! \def\o{o}%
  \def\O{O}%
  \def\l{l}%
! \def\L{L}%
  \def\ss{ss}%
! \let\w=\indexdummyfont
! \let\t=\indexdummyfont
! \let\r=\indexdummyfont
! \let\i=\indexdummyfont
  \let\b=\indexdummyfont
! \let\emph=\indexdummyfont
! \let\strong=\indexdummyfont
! \let\cite=\indexdummyfont
  \let\sc=\indexdummyfont
! %Don't no-op \tt, since it isn't a user-level command
! % and is used in the definitions of the active chars like <, >, |...
! %\let\tt=\indexdummyfont
! \let\tclose=\indexdummyfont
! \let\code=\indexdummyfont
! \let\url=\indexdummyfont
! \let\uref=\indexdummyfont
! \let\env=\indexdummyfont
  \let\acronym=\indexdummyfont
  \let\command=\indexdummyfont
! \let\option=\indexdummyfont
  \let\file=\indexdummyfont
- \let\samp=\indexdummyfont
  \let\kbd=\indexdummyfont
  \let\key=\indexdummyfont
  \let\var=\indexdummyfont
! \let\TeX=\indexdummytex
! \let\dots=\indexdummydots
! address@hidden@}%
  }
  
  % To define \realbackslash, we must make \ not be an escape.
--- 2916,2964 ----
  \let\H=\indexdummyfont
  \let\dotless=\indexdummyfont
  % Take care of the plain tex special European modified letters.
  \def\AA{AA}%
! \def\AE{AE}%
! \def\L{L}%
! \def\OE{OE}%
  \def\O{O}%
+ \def\aa{aa}%
+ \def\ae{ae}%
  \def\l{l}%
! \def\oe{oe}%
! \def\o{o}%
  \def\ss{ss}%
! %
! % Don't no-op \tt, since it isn't a user-level command
! % and is used in the definitions of the active chars like <, >, |, etc.
! % Likewise with the other plain tex font commands.
! %\let\tt=\indexdummyfont
! %
  \let\b=\indexdummyfont
! \let\i=\indexdummyfont
! \let\r=\indexdummyfont
  \let\sc=\indexdummyfont
! \let\t=\indexdummyfont
! %
! \let\TeX=\indexdummytex
  \let\acronym=\indexdummyfont
+ \let\cite=\indexdummyfont
+ \let\code=\indexdummyfont
  \let\command=\indexdummyfont
! \let\dfn=\indexdummyfont
! \let\dots=\indexdummydots
! \let\emph=\indexdummyfont
! \let\env=\indexdummyfont
  \let\file=\indexdummyfont
  \let\kbd=\indexdummyfont
  \let\key=\indexdummyfont
+ \let\math=\indexdummyfont
+ \let\option=\indexdummyfont
+ \let\samp=\indexdummyfont
+ \let\strong=\indexdummyfont
+ \let\uref=\indexdummyfont
+ \let\url=\indexdummyfont
  \let\var=\indexdummyfont
! \let\w=\indexdummyfont
  }
  
  % To define \realbackslash, we must make \ not be an escape.
***************
*** 3454,3461 ****
  \gdef\thischaptername{#1}%
  \xdef\thischapter{\putwordAppendix{} \appendixletter: 
\noexpand\thischaptername}%
  \toks0 = {#1}%
! \edef\temp{\noexpand\writetocentry{\realbackslash chapentry{\the\toks0}%
!                        {\putwordAppendix{} \appendixletter}}}%
  \temp
  \appendixnoderef
  \global\let\section = \appendixsec
--- 3560,3567 ----
  \gdef\thischaptername{#1}%
  \xdef\thischapter{\putwordAppendix{} \appendixletter: 
\noexpand\thischaptername}%
  \toks0 = {#1}%
! \edef\temp{\noexpand\writetocentry{\realbackslash appendixentry{\the\toks0}%
!                        {\appendixletter}}}%
  \temp
  \appendixnoderef
  \global\let\section = \appendixsec
***************
*** 3532,3538 ****
  \def\unnumberedseczzz #1{%
  \plainsecheading {#1}\gdef\thissection{#1}%
  \toks0 = {#1}%
! \edef\temp{\noexpand\writetocentry{\realbackslash 
unnumbsecentry{\the\toks0}}}%
  \temp
  \unnumbnoderef
  \nobreak
--- 3638,3645 ----
  \def\unnumberedseczzz #1{%
  \plainsecheading {#1}\gdef\thissection{#1}%
  \toks0 = {#1}%
! \edef\temp{\noexpand\writetocentry{\realbackslash unnumbsecentry%
!   {\the\toks0}{\the\chapno}}}%
  \temp
  \unnumbnoderef
  \nobreak
***************
*** 3571,3577 ****
  \plainsubsecheading {#1}\gdef\thissection{#1}%
  \toks0 = {#1}%
  \edef\temp{\noexpand\writetocentry{\realbackslash unnumbsubsecentry%
!                                     {\the\toks0}}}%
  \temp
  \unnumbnoderef
  \nobreak
--- 3678,3684 ----
  \plainsubsecheading {#1}\gdef\thissection{#1}%
  \toks0 = {#1}%
  \edef\temp{\noexpand\writetocentry{\realbackslash unnumbsubsecentry%
!   {\the\toks0}{\the\chapno}{\the\secno}}}%
  \temp
  \unnumbnoderef
  \nobreak
***************
*** 3612,3618 ****
  \plainsubsubsecheading {#1}\gdef\thissection{#1}%
  \toks0 = {#1}%
  \edef\temp{\noexpand\writetocentry{\realbackslash unnumbsubsubsecentry%
!                                     {\the\toks0}}}%
  \temp
  \unnumbnoderef
  \nobreak
--- 3719,3725 ----
  \plainsubsubsecheading {#1}\gdef\thissection{#1}%
  \toks0 = {#1}%
  \edef\temp{\noexpand\writetocentry{\realbackslash unnumbsubsubsecentry%
!   {\the\toks0}{\the\chapno}{\the\secno}{\the\subsecno}}}%
  \temp
  \unnumbnoderef
  \nobreak
***************
*** 3824,3830 ****
  % argument, which will end up as the last argument to the \...entry macro.
  %
  % We open the .toc file here instead of at @setfilename or any other
! % given time so that @contents can be put in the document anywhere.
  %
  \newif\iftocfileopened
  \def\writetocentry#1{%
--- 3931,3937 ----
  % argument, which will end up as the last argument to the \...entry macro.
  %
  % We open the .toc file here instead of at @setfilename or any other
! % fixed time so that @contents can be put in the document anywhere.
  %
  \newif\iftocfileopened
  \def\writetocentry#1{%
***************
*** 3833,3838 ****
--- 3940,3953 ----
      \global\tocfileopenedtrue
    \fi
    \iflinks \write\tocfile{#1{\folio}}\fi
+   %
+   % Tell \shipout to create a page destination if we're doing pdf, which
+   % will be the target of the links in the table of contents.  We can't
+   % just do it on every page because the title pages are numbered 1 and
+   % 2 (the page numbers aren't printed), and so are the first two pages
+   % of the document.  Thus, we'd have two destinations named `1', and
+   % two named `2'.
+   \ifpdf \pdfmakepagedesttrue \fi
  }
  
  \newskip\contentsrightmargin \contentsrightmargin=1in
***************
*** 3888,3893 ****
--- 4003,4009 ----
     \startcontents{\putwordShortTOC}%
        %
        \let\chapentry = \shortchapentry
+       \let\appendixentry = \shortappendixentry
        \let\unnumbchapentry = \shortunnumberedentry
        % We want a true roman here for the page numbers.
        \secfonts
***************
*** 3896,3906 ****
        \hyphenpenalty = 10000
        \advance\baselineskip by 1pt % Open it up a little.
        \def\secentry ##1##2##3##4{}
!       \def\unnumbsecentry ##1##2{}
        \def\subsecentry ##1##2##3##4##5{}
!       \def\unnumbsubsecentry ##1##2{}
        \def\subsubsecentry ##1##2##3##4##5##6{}
!       \def\unnumbsubsubsecentry ##1##2{}
        \openin 1 \jobname.toc
        \ifeof 1 \else
          \closein 1
--- 4012,4022 ----
        \hyphenpenalty = 10000
        \advance\baselineskip by 1pt % Open it up a little.
        \def\secentry ##1##2##3##4{}
!       \def\unnumbsecentry ##1##2##3{}
        \def\subsecentry ##1##2##3##4##5{}
!       \def\unnumbsubsecentry ##1##2##3##4{}
        \def\subsubsecentry ##1##2##3##4##5##6{}
!       \def\unnumbsubsubsecentry ##1##2##3##4##5{}
        \openin 1 \jobname.toc
        \ifeof 1 \else
          \closein 1
***************
*** 3923,3938 ****
  % The last argument is the page number.
  % The arguments in between are the chapter number, section number, ...
  
! % Chapter-level things, for both the long and short contents.
  \def\chapentry#1#2#3{\dochapentry{#2\labelspace#1}{#3}}
! 
! % See comments in \dochapentry re vbox and related settings
  \def\shortchapentry#1#2#3{%
    \tocentry{\shortchaplabel{#2}\labelspace 
#1}{\doshortpageno\bgroup#3\egroup}%
  }
  
  % Typeset the label for a chapter or appendix for the short contents.
! % The arg is, e.g. `Appendix A' for an appendix, or `3' for a chapter.
  % We could simplify the code here by writing out an \appendixentry
  % command in the toc file for appendices, instead of using \chapentry
  % for both, but it doesn't seem worth it.
--- 4039,4061 ----
  % The last argument is the page number.
  % The arguments in between are the chapter number, section number, ...
  
! % Chapters, in the main contents.
  \def\chapentry#1#2#3{\dochapentry{#2\labelspace#1}{#3}}
! %
! % Chapters, in the short toc.
! % See comments in \dochapentry re vbox and related settings.
  \def\shortchapentry#1#2#3{%
    \tocentry{\shortchaplabel{#2}\labelspace 
#1}{\doshortpageno\bgroup#3\egroup}%
  }
  
+ % Appendices, in the main contents.
+ \def\appendixentry#1#2#3{\dochapentry{\putwordAppendix{} #2\labelspace#1}{#3}}
+ %
+ % Appendices, in the short toc.
+ \let\shortappendixentry = \shortchapentry
+ 
  % Typeset the label for a chapter or appendix for the short contents.
! % The arg is, e.g., `Appendix A' for an appendix, or `3' for a chapter.
  % We could simplify the code here by writing out an \appendixentry
  % command in the toc file for appendices, instead of using \chapentry
  % for both, but it doesn't seem worth it.
***************
*** 3940,3977 ****
  \newdimen\shortappendixwidth
  %
  \def\shortchaplabel#1{%
!   % Compute width of word "Appendix", may change with language.
!   \setbox0 = \hbox{\shortcontrm \putwordAppendix}%
!   \shortappendixwidth = \wd0
!   %
!   % We typeset #1 in a box of constant width, regardless of the text of
!   % #1, so the chapter titles will come out aligned.
!   \setbox0 = \hbox{#1}%
!   \dimen0 = \ifdim\wd0 > \shortappendixwidth \shortappendixwidth \else 0pt \fi
!   %
!   % 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}%
  }
  
  \def\unnumbchapentry#1#2{\dochapentry{#1}{#2}}
  \def\shortunnumberedentry#1#2{\tocentry{#1}{\doshortpageno\bgroup#2\egroup}}
  
  % Sections.
  \def\secentry#1#2#3#4{\dosecentry{#2.#3\labelspace#1}{#4}}
! \def\unnumbsecentry#1#2{\dosecentry{#1}{#2}}
  
  % Subsections.
  \def\subsecentry#1#2#3#4#5{\dosubsecentry{#2.#3.#4\labelspace#1}{#5}}
! \def\unnumbsubsecentry#1#2{\dosubsecentry{#1}{#2}}
  
  % And subsubsections.
  \def\subsubsecentry#1#2#3#4#5#6{%
    \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
--- 4063,4093 ----
  \newdimen\shortappendixwidth
  %
  \def\shortchaplabel#1{%
!   % This space should be enough, since a single number is .5em, and the
    % widest letter (M) is 1em, at least in the Computer Modern fonts.
+   % But use \hss just in case.
    % (This space doesn't include the extra space that gets added after
    % the label; that gets put in by \shortchapentry above.)
!   \dimen0 = 1em
!   \hbox to \dimen0{#1\hss}%
  }
  
+ % Unnumbered chapters.
  \def\unnumbchapentry#1#2{\dochapentry{#1}{#2}}
  \def\shortunnumberedentry#1#2{\tocentry{#1}{\doshortpageno\bgroup#2\egroup}}
  
  % Sections.
  \def\secentry#1#2#3#4{\dosecentry{#2.#3\labelspace#1}{#4}}
! \def\unnumbsecentry#1#2#3{\dosecentry{#1}{#3}}
  
  % Subsections.
  \def\subsecentry#1#2#3#4#5{\dosubsecentry{#2.#3.#4\labelspace#1}{#5}}
! \def\unnumbsubsecentry#1#2#3#4{\dosubsecentry{#1}{#4}}
  
  % And subsubsections.
  \def\subsubsecentry#1#2#3#4#5#6{%
    \dosubsubsecentry{#2.#3.#4.#5\labelspace#1}{#6}}
! \def\unnumbsubsubsecentry#1#2#3#4#5{\dosubsubsecentry{#1}{#5}}
  
  % This parameter controls the indentation of the various levels.
  \newdimen\tocindent \tocindent = 3pc
***************
*** 4012,4018 ****
  \def\tocentry#1#2{\begingroup
    \vskip 0pt plus1pt % allow a little stretch for the sake of nice page breaks
    % Do not use \turnoffactive in these arguments.  Since the toc is
!   % typeset in cmr, so characters such as _ would come out wrong; we
    % have to do the usual translation tricks.
    \entry{#1}{#2}%
  \endgroup}
--- 4128,4134 ----
  \def\tocentry#1#2{\begingroup
    \vskip 0pt plus1pt % allow a little stretch for the sake of nice page breaks
    % Do not use \turnoffactive in these arguments.  Since the toc is
!   % typeset in cmr, characters such as _ would come out wrong; we
    % have to do the usual translation tricks.
    \entry{#1}{#2}%
  \endgroup}
***************
*** 4032,4067 ****
  \message{environments,}
  % @foo ... @end foo.
  
  % Since these characters are used in examples, it should be an even number of
  % \tt widths. Each \tt character is 1en, so two makes it 1em.
! % Furthermore, these definitions must come after we define our fonts.
! \newbox\dblarrowbox    \newbox\longdblarrowbox
! \newbox\pushcharbox    \newbox\bullbox
! \newbox\equivbox       \newbox\errorbox
! 
! %{\tentt
! %\global\setbox\dblarrowbox = \hbox to 1em{\hfil$\Rightarrow$\hfil}
! %\global\setbox\longdblarrowbox = \hbox to 1em{\hfil$\mapsto$\hfil}
! %\global\setbox\pushcharbox = \hbox to 1em{\hfil$\dashv$\hfil}
! %\global\setbox\equivbox = \hbox to 1em{\hfil$\ptexequiv$\hfil}
! % Adapted from the manmac format (p.420 of TeXbook)
! %\global\setbox\bullbox = \hbox to 1em{\kern.15em\vrule height .75ex width 
.85ex
! %                                      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.
  {\tentt \global\dimen0 = 3em}% Width of the box.
  \dimen2 = .55pt % Thickness of rules
  % The text. (`r' is open on the right, `e' somewhat less so on the left.)
  \setbox0 = \hbox{\kern-.75pt \tensf error\kern-1.5pt}
! 
  \global\setbox\errorbox=\hbox to \dimen0{\hfil
     \hsize = \dimen0 \advance\hsize by -5.8pt % Space to left+right.
     \advance\hsize by -2\dimen2 % Rules.
--- 4148,4174 ----
  \message{environments,}
  % @foo ... @end foo.
  
+ % @point{}, @result{}, @expansion{}, @print{}, @equiv{}.
+ % 
  % Since these characters are used in examples, it should be an even number of
  % \tt widths. Each \tt character is 1en, so two makes it 1em.
! %
  \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}}
  
+ % The @error{} command.
  % Adapted from the TeXbook's \boxit.
+ % 
+ \newbox\errorbox
+ %
  {\tentt \global\dimen0 = 3em}% Width of the box.
  \dimen2 = .55pt % Thickness of rules
  % The text. (`r' is open on the right, `e' somewhat less so on the left.)
  \setbox0 = \hbox{\kern-.75pt \tensf error\kern-1.5pt}
! %
  \global\setbox\errorbox=\hbox to \dimen0{\hfil
     \hsize = \dimen0 \advance\hsize by -5.8pt % Space to left+right.
     \advance\hsize by -2\dimen2 % Rules.
***************
*** 4072,4079 ****
           \kern3pt\vrule width\dimen2}% Space to right.
        \hrule height\dimen2}
      \hfil}
! 
! % The @error{} command.
  \def\error{\leavevmode\lower.7ex\copy\errorbox}
  
  % @tex ... @end tex    escapes into raw Tex temporarily.
--- 4179,4185 ----
           \kern3pt\vrule width\dimen2}% Space to right.
        \hrule height\dimen2}
      \hfil}
! %
  \def\error{\leavevmode\lower.7ex\copy\errorbox}
  
  % @tex ... @end tex    escapes into raw Tex temporarily.
***************
*** 4113,4121 ****
    address@hidden@}%
  \let\Etex=\endgroup}
  
! % Define @lisp ... @endlisp.
  % @lisp does a \begingroup so it can rebind things,
! % including the definition of @endlisp (which normally is erroneous).
  
  % Amount to narrow the margins by for @lisp.
  \newskip\lispnarrowing \lispnarrowing=0.4in
--- 4219,4227 ----
    address@hidden@}%
  \let\Etex=\endgroup}
  
! % Define @lisp ... @end lisp.
  % @lisp does a \begingroup so it can rebind things,
! % including the definition of @end lisp (which normally is erroneous).
  
  % Amount to narrow the margins by for @lisp.
  \newskip\lispnarrowing \lispnarrowing=0.4in
***************
*** 4146,4154 ****
  % is reset to zero; thus the \afterenvbreak inserts no space -- but the
  % start of the next paragraph will insert \parskip
  %
! \def\aboveenvbreak{{\advance\envskipamount by \parskip
! \endgraf \ifdim\lastskip<\envskipamount
! \removelastskip \penalty-50 \vskip\envskipamount \fi}}
  
  \let\afterenvbreak = \aboveenvbreak
  
--- 4252,4268 ----
  % is reset to zero; thus the \afterenvbreak inserts no space -- but the
  % start of the next paragraph will insert \parskip
  %
! \def\aboveenvbreak{{%
!   \ifnum\lastpenalty < 10000
!     \advance\envskipamount by \parskip
!     \endgraf
!     \ifdim\lastskip<\envskipamount
!       \removelastskip
!       \penalty-50
!       \vskip\envskipamount
!     \fi
!   \fi
! }}
  
  \let\afterenvbreak = \aboveenvbreak
  
***************
*** 4280,4286 ****
  \def\smalllispx{\begingroup
    \def\Esmalllisp{\nonfillfinish\endgroup}%
    \def\Esmallexample{\nonfillfinish\endgroup}%
!   \smallfonts
    \lisp
  }
  
--- 4394,4400 ----
  \def\smalllispx{\begingroup
    \def\Esmalllisp{\nonfillfinish\endgroup}%
    \def\Esmallexample{\nonfillfinish\endgroup}%
!   \smallexamplefonts
    \lisp
  }
  
***************
*** 4291,4302 ****
    \let\Edisplay = \nonfillfinish
    \gobble
  }
! 
  % @smalldisplay (when @smallbook): @display plus smaller fonts.
  %
  \def\smalldisplayx{\begingroup
    \def\Esmalldisplay{\nonfillfinish\endgroup}%
!   \smallfonts \rm
    \display
  }
  
--- 4405,4416 ----
    \let\Edisplay = \nonfillfinish
    \gobble
  }
! %
  % @smalldisplay (when @smallbook): @display plus smaller fonts.
  %
  \def\smalldisplayx{\begingroup
    \def\Esmalldisplay{\nonfillfinish\endgroup}%
!   \smallexamplefonts \rm
    \display
  }
  
***************
*** 4308,4319 ****
    \let\Eformat = \nonfillfinish
    \gobble
  }
! 
  % @smallformat (when @smallbook): @format plus smaller fonts.
  %
  \def\smallformatx{\begingroup
    \def\Esmallformat{\nonfillfinish\endgroup}%
!   \smallfonts \rm
    \format
  }
  
--- 4422,4433 ----
    \let\Eformat = \nonfillfinish
    \gobble
  }
! %
  % @smallformat (when @smallbook): @format plus smaller fonts.
  %
  \def\smallformatx{\begingroup
    \def\Esmallformat{\nonfillfinish\endgroup}%
!   \smallexamplefonts \rm
    \format
  }
  
***************
*** 4505,4510 ****
--- 4619,4639 ----
    \endgroup\nonfillfinish\endgroup
  }
  
+ % @copying ... @end copying.
+ % Save the text away for @insertcopying later.
+ % 
+ \newbox\copyingbox
+ %
+ \def\copying{\begingroup
+   \parindent = 0pt  % looks wrong on title page
+   \def\Ecopying{\egroup\endgroup}%
+   \global\setbox\copyingbox = \vbox\bgroup
+ }
+ 
+ % @insertcopying.
+ % 
+ \def\insertcopying{\unvcopy\copyingbox}
+ 
  
  \message{defuns,}
  % @defun etc.
***************
*** 4601,4656 ****
  {\df #1}\enskip        % Generate function name
  }
  
! % Actually process the body of a definition
! % #1 should be the terminating control sequence, such as \Edefun.
! % #2 should be the "another name" control sequence, such as \defunx.
! % #3 should be the control sequence that actually processes the header,
! %    such as \defunheader.
! 
! \def\defparsebody #1#2#3{\begingroup\inENV% Environment for definitionbody
! \medbreak %
! % Define the end token that this defining construct specifies
! % so that it will exit this group.
! \def#1{\endgraf\endgroup\medbreak}%
! \def#2{\begingroup\obeylines\activeparens\spacesplit#3}%
! \parindent=0in
! \advance\leftskip by \defbodyindent
! \exdentamount=\defbodyindent
! \begingroup %
! \catcode 61=\active % 61 is `='
! \obeylines\activeparens\spacesplit#3}
! 
  % #1 is the \E... control sequence to end the definition (which we define).
! % #2 is the \...x control sequence for consecutive fns (which we define).
! % #3 is the control sequence to call to resume processing.
  % #4, delimited by the space, is the class name.
  %
! \def\defmethparsebody#1#2#3#4 {\begingroup\inENV %
! \medbreak %
! % Define the end token that this defining construct specifies
! % so that it will exit this group.
! \def#1{\endgraf\endgroup\medbreak}%
! \def#2##1 {\begingroup\obeylines\activeparens\spacesplit{#3{##1}}}%
! \parindent=0in
! \advance\leftskip by \defbodyindent
! \exdentamount=\defbodyindent
! \begingroup\obeylines\activeparens\spacesplit{#3{#4}}}
  
  % Used for @deftypemethod and @deftypeivar.
! % #1 is the \E... control sequence to end the definition (which we define).
! % #2 is the \...x control sequence for consecutive fns (which we define).
! % #3 is the control sequence to call to resume processing.
  % #4, delimited by a space, is the class name.
  % #5 is the method's return type.
  %
! \def\deftypemethparsebody#1#2#3#4 #5 {\begingroup\inENV
!   \medbreak
!   \def#1{\endgraf\endgroup\medbreak}%
    \def#2##1 ##2 {\begingroup\obeylines\activeparens\spacesplit{#3{##1}{##2}}}%
!   \parindent=0in
!   \advance\leftskip by \defbodyindent
!   \exdentamount=\defbodyindent
!   \begingroup\obeylines\activeparens\spacesplit{#3{#4}{#5}}}
  
  % Used for @deftypeop.  The change from \deftypemethparsebody is an
  % extra argument at the beginning which is the `category', instead of it
--- 4730,4789 ----
  {\df #1}\enskip        % Generate function name
  }
  
! % Common pieces to start any @def...
  % #1 is the \E... control sequence to end the definition (which we define).
! % #2 is the \...x control sequence (which our caller defines).
! % #3 is the control sequence to process the header, such as \defunheader.
! % 
! \def\parsebodycommon#1#2#3{%
!   \begingroup\inENV
!   % If there are two @def commands in a row, we'll have a \nobreak,
!   % which is there to keep the function description together with its
!   % header.  But if there's nothing but headers, we want to allow a
!   % break after all.
!   \ifnum\lastpenalty = 10000 \penalty0 \fi
!   \medbreak
!   %
!   % Define the \E... end token that this defining construct specifies
!   % so that it will exit this group.
!   \def#1{\endgraf\endgroup\medbreak}%
!   %
!   \parindent=0in
!   \advance\leftskip by \defbodyindent
!   \exdentamount=\defbodyindent
! }
! 
! % Process body of @defun, @deffn, @defmac, etc.
! %
! \def\defparsebody#1#2#3{%
!   \parsebodycommon{#1}{#2}{#3}%
!   \def#2{\begingroup\obeylines\activeparens\spacesplit#3}%
!   \catcode61=\active % 61 is `='
!   \begingroup\obeylines\activeparens
!   \spacesplit#3%
! }
! 
! % #1, #2, #3 are the common arguments (see \defparsebody).
  % #4, delimited by the space, is the class name.
  %
! \def\defmethparsebody#1#2#3#4 {%
!   \parsebodycommon{#1}{#2}{#3}%
!   \def#2##1 {\begingroup\obeylines\activeparens\spacesplit{#3{##1}}}%
!   \begingroup\obeylines\activeparens
!   \spacesplit{#3{#4}}%
! }
  
  % Used for @deftypemethod and @deftypeivar.
! % #1, #2, #3 are the common arguments (see \defparsebody).
  % #4, delimited by a space, is the class name.
  % #5 is the method's return type.
  %
! \def\deftypemethparsebody#1#2#3#4 #5 {%
!   \parsebodycommon{#1}{#2}{#3}%
    \def#2##1 ##2 {\begingroup\obeylines\activeparens\spacesplit{#3{##1}{##2}}}%
!   \begingroup\obeylines\activeparens
!   \spacesplit{#3{#4}{#5}}%
! }
  
  % Used for @deftypeop.  The change from \deftypemethparsebody is an
  % extra argument at the beginning which is the `category', instead of it
***************
*** 4659,4722 ****
  % input at hand.  Thus also need a control sequence (passed as #5) for
  % the \E... definition to assign the category name to.
  % 
! \def\deftypeopparsebody#1#2#3#4#5 #6 {\begingroup\inENV
!   \medbreak
!   \def#1{\endgraf\endgroup\medbreak}%
    \def#2##1 ##2 ##3 {%
      \def#4{##1}%
      \begingroup\obeylines\activeparens\spacesplit{#3{##2}{##3}}}%
!   \parindent=0in
!   \advance\leftskip by \defbodyindent
!   \exdentamount=\defbodyindent
!   \begingroup\obeylines\activeparens\spacesplit{#3{#5}{#6}}}
  
! \def\defopparsebody #1#2#3#4#5 {\begingroup\inENV %
! \medbreak %
! % Define the end token that this defining construct specifies
! % so that it will exit this group.
! \def#1{\endgraf\endgroup\medbreak}%
! \def#2##1 ##2 {\def#4{##1}%
! \begingroup\obeylines\activeparens\spacesplit{#3{##2}}}%
! \parindent=0in
! \advance\leftskip by \defbodyindent
! \exdentamount=\defbodyindent
! \begingroup\obeylines\activeparens\spacesplit{#3{#5}}}
  
  % These parsing functions are similar to the preceding ones
  % except that they do not make parens into active characters.
  % These are used for "variables" since they have no arguments.
- 
- \def\defvarparsebody #1#2#3{\begingroup\inENV% Environment for definitionbody
- \medbreak %
- % Define the end token that this defining construct specifies
- % so that it will exit this group.
- \def#1{\endgraf\endgroup\medbreak}%
- \def#2{\begingroup\obeylines\spacesplit#3}%
- \parindent=0in
- \advance\leftskip by \defbodyindent
- \exdentamount=\defbodyindent
- \begingroup %
- \catcode 61=\active %
- \obeylines\spacesplit#3}
- 
- % 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 %
!   % Define the end token that this defining construct specifies
!   % so that it will exit this group.
!   \def#1{\endgraf\endgroup\medbreak}%
!   \def#2##1 {\begingroup\obeylines\spacesplit{#3{##1}}}%
!   \parindent=0in
!   \advance\leftskip by \defbodyindent
!   \exdentamount=\defbodyindent
    \begingroup\obeylines
  }
  
  \def\defvrparsebody#1#2#3#4 {%
    \parsebodycommon{#1}{#2}{#3}%
    \spacesplit{#3{#4}}%
  }
  
--- 4792,4840 ----
  % input at hand.  Thus also need a control sequence (passed as #5) for
  % the \E... definition to assign the category name to.
  % 
! \def\deftypeopparsebody#1#2#3#4#5 #6 {%
!   \parsebodycommon{#1}{#2}{#3}%
    \def#2##1 ##2 ##3 {%
      \def#4{##1}%
      \begingroup\obeylines\activeparens\spacesplit{#3{##2}{##3}}}%
!   \begingroup\obeylines\activeparens
!   \spacesplit{#3{#5}{#6}}%
! }
  
! % For @defop.
! \def\defopparsebody #1#2#3#4#5 {%
!   \parsebodycommon{#1}{#2}{#3}%
!   \def#2##1 ##2 {\def#4{##1}%
!     \begingroup\obeylines\activeparens\spacesplit{#3{##2}}}%
!   \begingroup\obeylines\activeparens
!   \spacesplit{#3{#5}}%
! }
  
  % These parsing functions are similar to the preceding ones
  % except that they do not make parens into active characters.
  % These are used for "variables" since they have no arguments.
  %
! \def\defvarparsebody #1#2#3{%
!   \parsebodycommon{#1}{#2}{#3}%
!   \def#2{\begingroup\obeylines\spacesplit#3}%
!   \catcode61=\active %
!   \begingroup\obeylines
!   \spacesplit#3%
! }
! 
! % @defopvar.
! \def\defopvarparsebody #1#2#3#4#5 {%
!   \parsebodycommon{#1}{#2}{#3}%
!   \def#2##1 ##2 {\def#4{##1}%
!     \begingroup\obeylines\spacesplit{#3{##2}}}%
    \begingroup\obeylines
+   \spacesplit{#3{#5}}%
  }
  
  \def\defvrparsebody#1#2#3#4 {%
    \parsebodycommon{#1}{#2}{#3}%
+   \def#2##1 {\begingroup\obeylines\spacesplit{#3{##1}}}%
+   \begingroup\obeylines
    \spacesplit{#3{#4}}%
  }
  
***************
*** 4731,4736 ****
--- 4849,4856 ----
  %
  \def\deftpparsebody #1#2#3#4 {%
    \parsebodycommon{#1}{#2}{#3}%
+   \def#2##1 {\begingroup\obeylines\spacesplit{#3{##1}}}%
+   \begingroup\obeylines
    \spacesplit{\parsetpheaderline{#3{#4}}}\empty
  }
  
***************
*** 4747,4779 ****
    #1{\removeemptybraces#2\relax}{#3}%
  }%
  
- \def\defopvarparsebody #1#2#3#4#5 {\begingroup\inENV %
- \medbreak %
- % Define the end token that this defining construct specifies
- % so that it will exit this group.
- \def#1{\endgraf\endgroup\medbreak}%
- \def#2##1 ##2 {\def#4{##1}%
- \begingroup\obeylines\spacesplit{#3{##2}}}%
- \parindent=0in
- \advance\leftskip by \defbodyindent
- \exdentamount=\defbodyindent
- \begingroup\obeylines\spacesplit{#3{#5}}}
- 
  % Split up #2 at the first space token.
  % call #1 with two arguments:
  %  the first is all of #2 before the space token,
  %  the second is all of #2 after that space token.
  % If #2 contains no space token, all of it is passed as the first arg
  % and the second is passed as empty.
! 
  {\obeylines
  \gdef\spacesplit#1#2^^M{\endgroup\spacesplitfoo{#1}#2 \relax\spacesplitfoo}%
  \long\gdef\spacesplitfoo#1#2 #3#4\spacesplitfoo{%
  \ifx\relax #3%
  #1{#2}{}\else #1{#2}{#3#4}\fi}}
  
- % So much for the things common to all kinds of definitions.
- 
  % Define @defun.
  
  % First, define the processing that is wanted for arguments of \defun
--- 4867,4885 ----
    #1{\removeemptybraces#2\relax}{#3}%
  }%
  
  % Split up #2 at the first space token.
  % call #1 with two arguments:
  %  the first is all of #2 before the space token,
  %  the second is all of #2 after that space token.
  % If #2 contains no space token, all of it is passed as the first arg
  % and the second is passed as empty.
! %
  {\obeylines
  \gdef\spacesplit#1#2^^M{\endgroup\spacesplitfoo{#1}#2 \relax\spacesplitfoo}%
  \long\gdef\spacesplitfoo#1#2 #3#4\spacesplitfoo{%
  \ifx\relax #3%
  #1{#2}{}\else #1{#2}{#3#4}\fi}}
  
  % Define @defun.
  
  % First, define the processing that is wanted for arguments of \defun
***************
*** 4833,4839 ****
  % #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}{\putwordDeftypefun}%
  \deftypefunargs {#3}\endgroup %
  \catcode 61=\other % Turn off change made in \defparsebody
  }
--- 4939,4945 ----
  % #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}{\putwordDeftypefun}%
  \deftypefunargs {#3}\endgroup %
  \catcode 61=\other % Turn off change made in \defparsebody
  }
***************
*** 4842,4850 ****
  
  \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}
--- 4948,4956 ----
  
  \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}
***************
*** 4854,4860 ****
  \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
  }
--- 4960,4966 ----
  \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
  }
***************
*** 4900,4906 ****
  \def\deftypeopheader#1#2#3#4{%
    \dosubind{fn}{\code{#3}}{\putwordon\ \code{#1}}% entry in function index
    \begingroup
!     \defname{\defheaderxcond#2\relax$$$#3}
              {\deftypeopcategory\ \putwordon\ \code{#1}}%
      \deftypefunargs{#4}%
    \endgroup
--- 5006,5012 ----
  \def\deftypeopheader#1#2#3#4{%
    \dosubind{fn}{\code{#3}}{\putwordon\ \code{#1}}% entry in function index
    \begingroup
!     \defname{\defheaderxcond#2\relax$.$#3}
              {\deftypeopcategory\ \putwordon\ \code{#1}}%
      \deftypefunargs{#4}%
    \endgroup
***************
*** 4915,4921 ****
  \def\deftypemethodheader#1#2#3#4{%
    \dosubind{fn}{\code{#3}}{\putwordon\ \code{#1}}% entry in function index
    \begingroup
!     \defname{\defheaderxcond#2\relax$$$#3}{\putwordMethodon\ \code{#1}}%
      \deftypefunargs{#4}%
    \endgroup
  }
--- 5021,5027 ----
  \def\deftypemethodheader#1#2#3#4{%
    \dosubind{fn}{\code{#3}}{\putwordon\ \code{#1}}% entry in function index
    \begingroup
!     \defname{\defheaderxcond#2\relax$.$#3}{\putwordMethodon\ \code{#1}}%
      \deftypefunargs{#4}%
    \endgroup
  }
***************
*** 4929,4935 ****
  \def\deftypeivarheader#1#2#3{%
    \dosubind{vr}{\code{#3}}{\putwordof\ \code{#1}}% entry in variable index
    \begingroup
!     \defname{\defheaderxcond#2\relax$$$#3}
              {\putwordInstanceVariableof\ \code{#1}}%
      \defvarargs{#3}%
    \endgroup
--- 5035,5041 ----
  \def\deftypeivarheader#1#2#3{%
    \dosubind{vr}{\code{#3}}{\putwordof\ \code{#1}}% entry in variable index
    \begingroup
!     \defname{\defheaderxcond#2\relax$.$#3}
              {\putwordInstanceVariableof\ \code{#1}}%
      \defvarargs{#3}%
    \endgroup
***************
*** 5012,5018 ****
  % 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}{\putwordDeftypevar}%
  \interlinepenalty=10000
  \endgraf\nobreak\vskip -\parskip\nobreak
  \endgroup}
--- 5118,5124 ----
  % 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}{\putwordDeftypevar}%
  \interlinepenalty=10000
  \endgraf\nobreak\vskip -\parskip\nobreak
  \endgroup}
***************
*** 5023,5029 ****
  \def\deftypevr{\defvrparsebody\Edeftypevr\deftypevrx\deftypevrheader}
  
  \def\deftypevrheader #1#2#3{\dovarind#3 \relax%
! \begingroup\defname {\defheaderxcond#2\relax$$$#3}{#1}
  \interlinepenalty=10000
  \endgraf\nobreak\vskip -\parskip\nobreak
  \endgroup}
--- 5129,5135 ----
  \def\deftypevr{\defvrparsebody\Edeftypevr\deftypevrx\deftypevrheader}
  
  \def\deftypevrheader #1#2#3{\dovarind#3 \relax%
! \begingroup\defname {\defheaderxcond#2\relax$.$#3}{#1}
  \interlinepenalty=10000
  \endgraf\nobreak\vskip -\parskip\nobreak
  \endgroup}
***************
*** 5183,5189 ****
       \message{Warning: redefining \the\macname}%
    \else
       \expandafter\ifx\csname \the\macname\endcsname \relax
!      \else \errmessage{The name \the\macname\space is reserved}\fi
       \global\cslet{macsave.\the\macname}{\the\macname}%
       \global\expandafter\let\csname ismacro.\the\macname\endcsname=1%
       % Add the macroname to \macrolist
--- 5289,5295 ----
       \message{Warning: redefining \the\macname}%
    \else
       \expandafter\ifx\csname \the\macname\endcsname \relax
!      \else \errmessage{Macro name \the\macname\space already defined}\fi
       \global\cslet{macsave.\the\macname}{\the\macname}%
       \global\expandafter\let\csname ismacro.\the\macname\endcsname=1%
       % Add the macroname to \macrolist
***************
*** 5464,5476 ****
    \ifpdf
      \leavevmode
      \getfilename{#4}%
!     \ifnum\filenamelength>0
!       \startlink attr{/Border [0 0 0]}%
!         goto file{\the\filename.pdf} address@hidden
!     \else
!       \startlink attr{/Border [0 0 0]}%
!         goto address@hidden
!     \fi
      \linkcolor
    \fi
    %
--- 5570,5584 ----
    \ifpdf
      \leavevmode
      \getfilename{#4}%
!     {\normalturnoffactive
!      \ifnum\filenamelength>0
!        \startlink attr{/Border [0 0 0]}%
!          goto file{\the\filename.pdf} name{#1}%
!      \else
!        \startlink attr{/Border [0 0 0]}%
!          goto name{#1}%
!      \fi
!     }%
      \linkcolor
    \fi
    %
***************
*** 5732,5739 ****
    %
    \smallfonts \rm
    %
!   % Hang the footnote text off the number.
!   \hang
    \textindent{\thisfootno}%
    %
    % Don't crash into the line above the footnote text.  Since this
--- 5840,5854 ----
    %
    \smallfonts \rm
    %
!   % Because we use hanging indentation in footnotes, a @noindent appears
!   % to exdent this text, so make it be a no-op.  makeinfo does not use
!   % hanging indentation so @noindent can still be needed within footnote
!   % text after an @example or the like (not that this is good style).
!   \let\noindent = \relax
!   %
!   % Hang the footnote text off the number.  Use \everypar in case the
!   % footnote extends for more than one paragraph.
!   \everypar = {\hang}%
    \textindent{\thisfootno}%
    %
    % Don't crash into the line above the footnote text.  Since this
***************
*** 5750,5773 ****
  
  }%end \catcode address@hidden
  
- % Set the baselineskip to #1, and the lineskip and strut size
- % correspondingly.  There is no deep meaning behind these magic numbers
- % used as factors; they just match (closely enough) what Knuth defined.
- %
- \def\lineskipfactor{.08333}
- \def\strutheightpercent{.70833}
- \def\strutdepthpercent {.29167}
- %
- \def\setleading#1{%
-   \normalbaselineskip = #1\relax
-   \normallineskip = \lineskipfactor\normalbaselineskip
-   \normalbaselines
-   \setbox\strutbox =\hbox{%
-     \vrule width0pt height\strutheightpercent\baselineskip
-                     depth \strutdepthpercent \baselineskip
-   }%
- }
- 
  % @| inserts a changebar to the left of the current line.  It should
  % surround any changed text.  This approach does *not* work if the
  % change spans more than two lines of output.  To handle that, we would
--- 5865,5870 ----
***************
*** 5832,5872 ****
        \global\warnednoepsftrue
      \fi
    \else
!     \imagexxx #1,,,\finish
    \fi
  }
  %
  % Arguments to @image:
  % #1 is (mandatory) image filename; we tack on .eps extension.
  % #2 is (optional) width, #3 is (optional) height.
! % #4 is just the usual extra ignored arg for parsing this stuff.
! \def\imagexxx#1,#2,#3,#4\finish{%
    \ifpdf
!     \centerline{\dopdfimage{#1}{#2}{#3}}%
    \else
      % \epsfbox itself resets \epsf?size at each figure.
      \setbox0 = \hbox{\ignorespaces #2}\ifdim\wd0 > 0pt \epsfxsize=#2\relax \fi
      \setbox0 = \hbox{\ignorespaces #3}\ifdim\wd0 > 0pt \epsfysize=#3\relax \fi
!     \begingroup
!       \catcode`\^^M = 5     % in case we're inside an example
!       \normalturnoffactive  % allow _ et al. in names
!       % If the image is by itself, center it.
!       \ifvmode
!         \nobreak\bigskip
!         % Usually we'll have text after the image which will insert
!         % \parskip glue, so insert it here too to equalize the space
!         % above and below. 
!         \nobreak\vskip\parskip
!         \nobreak
!         \centerline{\epsfbox{#1.eps}}%
!         \bigbreak
!       \else
!         % In the middle of a paragraph, no extra space.
!         \epsfbox{#1.eps}%
!       \fi
!     \endgroup
    \fi
! }
  
  
  \message{localization,}
--- 5929,5972 ----
        \global\warnednoepsftrue
      \fi
    \else
!     \imagexxx #1,,,,,\finish
    \fi
  }
  %
  % Arguments to @image:
  % #1 is (mandatory) image filename; we tack on .eps extension.
  % #2 is (optional) width, #3 is (optional) height.
! % #4 is (ignored optional) html alt text.
! % #5 is (ignored optional) extension.
! % #6 is just the usual extra ignored arg for parsing this stuff.
! \newif\ifimagevmode
! \def\imagexxx#1,#2,#3,#4,#5,#6\finish{\begingroup
!   \catcode`\^^M = 5     % in case we're inside an example
!   \normalturnoffactive  % allow _ et al. in names
!   % If the image is by itself, center it.
!   \ifvmode
!     \imagevmodetrue
!     \nobreak\bigskip
!     % Usually we'll have text after the image which will insert
!     % \parskip glue, so insert it here too to equalize the space
!     % above and below. 
!     \nobreak\vskip\parskip
!     \nobreak
!     \line\bgroup\hss
!   \fi
!   %
!   % Output the image.
    \ifpdf
!     \dopdfimage{#1}{#2}{#3}%
    \else
      % \epsfbox itself resets \epsf?size at each figure.
      \setbox0 = \hbox{\ignorespaces #2}\ifdim\wd0 > 0pt \epsfxsize=#2\relax \fi
      \setbox0 = \hbox{\ignorespaces #3}\ifdim\wd0 > 0pt \epsfysize=#3\relax \fi
!     \epsfbox{#1.eps}%
    \fi
!   %
!   \ifimagevmode \hss \egroup \bigbreak \fi  % space after the image
! \endgroup}
  
  
  \message{localization,}
***************
*** 5935,5942 ****
  }
  
  % Parameters in order: 1) textheight; 2) textwidth; 3) voffset;
! % 4) hoffset; 5) binding offset; 6) topskip.  Then whoever calls us can
! % set \parskip and call \setleading for \baselineskip.
  %
  \def\internalpagesizes#1#2#3#4#5#6{%
    \voffset = #3\relax
--- 6035,6043 ----
  }
  
  % Parameters in order: 1) textheight; 2) textwidth; 3) voffset;
! % 4) hoffset; 5) binding offset; 6) topskip.  We also call
! % \setleading{\textleading}, so the caller should define \textleading.
! % The caller should also set \parskip.
  %
  \def\internalpagesizes#1#2#3#4#5#6{%
    \voffset = #3\relax
***************
*** 5957,5962 ****
--- 6058,6065 ----
    \normaloffset = #4\relax
    \bindingoffset = #5\relax
    %
+   \setleading{\textleading}
+   %
    \parindent = \defaultparindent
    \setemergencystretch
  }
***************
*** 5973,5979 ****
  % @letterpaper (the default).
  \def\letterpaper{{\globaldefs = 1
    \parskip = 3pt plus 2pt minus 1pt
!   \setleading{13.2pt}%
    %
    % If page is nothing but text, make it come out even.
    
\internalpagesizes{46\baselineskip}{6in}{\voffset}{.25in}{\bindingoffset}{36pt}%
--- 6076,6082 ----
  % @letterpaper (the default).
  \def\letterpaper{{\globaldefs = 1
    \parskip = 3pt plus 2pt minus 1pt
!   \textleading = 13.2pt
    %
    % If page is nothing but text, make it come out even.
    
\internalpagesizes{46\baselineskip}{6in}{\voffset}{.25in}{\bindingoffset}{36pt}%
***************
*** 5982,5988 ****
  % Use @smallbook to reset parameters for 7x9.5 (or so) format.
  \def\smallbook{{\globaldefs = 1
    \parskip = 2pt plus 1pt
!   \setleading{12pt}%
    %
    \internalpagesizes{7.5in}{5.in}{\voffset}{.25in}{\bindingoffset}{16pt}%
    %
--- 6085,6091 ----
  % Use @smallbook to reset parameters for 7x9.5 (or so) format.
  \def\smallbook{{\globaldefs = 1
    \parskip = 2pt plus 1pt
!   \textleading = 12pt
    %
    \internalpagesizes{7.5in}{5.in}{\voffset}{.25in}{\bindingoffset}{16pt}%
    %
***************
*** 5997,6004 ****
  
  % Use @afourpaper to print on European A4 paper.
  \def\afourpaper{{\globaldefs = 1
-   \setleading{12pt}%
    \parskip = 3pt plus 2pt minus 1pt
    %
    
\internalpagesizes{53\baselineskip}{160mm}{\voffset}{4mm}{\bindingoffset}{44pt}%
    %
--- 6100,6107 ----
  
  % Use @afourpaper to print on European A4 paper.
  \def\afourpaper{{\globaldefs = 1
    \parskip = 3pt plus 2pt minus 1pt
+   \textleading = 12pt
    %
    
\internalpagesizes{53\baselineskip}{160mm}{\voffset}{4mm}{\bindingoffset}{44pt}%
    %
***************
*** 6010,6017 ****
  % From address@hidden, 2 July 2000.
  % He also recommends making @example and @lisp be small.
  \def\afivepaper{{\globaldefs = 1
-   \setleading{12.5pt}%
    \parskip = 2pt plus 1pt minus 0.1pt
    %
    \internalpagesizes{166mm}{120mm}{\voffset}{-8mm}{\bindingoffset}{8pt}%
    %
--- 6113,6120 ----
  % From address@hidden, 2 July 2000.
  % He also recommends making @example and @lisp be small.
  \def\afivepaper{{\globaldefs = 1
    \parskip = 2pt plus 1pt minus 0.1pt
+   \textleading = 12.5pt
    %
    \internalpagesizes{166mm}{120mm}{\voffset}{-8mm}{\bindingoffset}{8pt}%
    %
***************
*** 6029,6039 ****
  % A specific text layout, 24x15cm overall, intended for A4 paper.  Top margin
  % 29mm, hence bottom margin 28mm, nominal side margin 3cm.
  \def\afourlatex{{\globaldefs = 1
!   \setleading{13.6pt}%
    %
    \afourpaper
    \internalpagesizes{237mm}{150mm}{3.6mm}{3.6mm}{3mm}{7mm}%
    %
    \globaldefs = 0
  }}
  
--- 6132,6144 ----
  % A specific text layout, 24x15cm overall, intended for A4 paper.  Top margin
  % 29mm, hence bottom margin 28mm, nominal side margin 3cm.
  \def\afourlatex{{\globaldefs = 1
!   \textleading = 13.6pt
    %
    \afourpaper
    \internalpagesizes{237mm}{150mm}{3.6mm}{3.6mm}{3mm}{7mm}%
    %
+   % Must explicitly reset to 0 because we call \afourpaper, apparently,
+   % although this does not entirely make sense.
    \globaldefs = 0
  }}
  
***************
*** 6041,6048 ****
  \def\afourwide{%
    \afourpaper
    
\internalpagesizes{6.5in}{9.5in}{\hoffset}{\normaloffset}{\bindingoffset}{7mm}%
-   %
-   \globaldefs = 0
  }
  
  % @pagesizes TEXTHEIGHT[,TEXTWIDTH]
--- 6146,6151 ----
***************
*** 6056,6062 ****
    \globaldefs = 1
    %
    \parskip = 3pt plus 2pt minus 1pt
!   \setleading{13.2pt}%
    %
    
\internalpagesizes{#1}{\hsize}{\voffset}{\normaloffset}{\bindingoffset}{44pt}%
  }}
--- 6159,6165 ----
    \globaldefs = 1
    %
    \parskip = 3pt plus 2pt minus 1pt
!   \setleading{\textleading}%
    %
    
\internalpagesizes{#1}{\hsize}{\voffset}{\normaloffset}{\bindingoffset}{44pt}%
  }}
***************
*** 6086,6092 ****
  \def\normalless{<}
  \def\normalgreater{>}
  \def\normalplus{+}
! \def\normaldollar{$}
  
  % This macro is used to make a character print one way in ttfont
  % where it can probably just be output, and another way in other fonts,
--- 6189,6195 ----
  \def\normalless{<}
  \def\normalgreater{>}
  \def\normalplus{+}
! \def\normaldollar{$}%$ font-lock fix
  
  % This macro is used to make a character print one way in ttfont
  % where it can probably just be output, and another way in other fonts,
***************
*** 6135,6141 ****
  \catcode`\+=\active
  \def+{{\tt \char 43}}
  \catcode`\$=\active
! \def${\ifusingit{{\sl\$}}\normaldollar}
  %\catcode 27=\active
  %\def^^[{$\diamondsuit$}
  
--- 6238,6244 ----
  \catcode`\+=\active
  \def+{{\tt \char 43}}
  \catcode`\$=\active
! \def${\ifusingit{{\sl\$}}\normaldollar}%$ font-lock fix
  %\catcode 27=\active
  %\def^^[{$\diamondsuit$}
  
***************
*** 6180,6186 ****
  @let<address@hidden
  @let>address@hidden
  @address@hidden
! @address@hidden
  
  @address@hidden@let"address@hidden
  @address@hidden
--- 6283,6289 ----
  @let<address@hidden
  @let>address@hidden
  @address@hidden
! @address@hidden font-lock fix
  
  @address@hidden@let"address@hidden
  @address@hidden
***************
*** 6191,6197 ****
  @let<address@hidden
  @let>address@hidden
  @address@hidden
! @address@hidden
  
  % Make _ and + \other characters, temporarily.
  % This is canceled by @fixbackslash.
--- 6294,6300 ----
  @let<address@hidden
  @let>address@hidden
  @address@hidden
! @address@hidden font-lock fix
  
  % Make _ and + \other characters, temporarily.
  % This is canceled by @fixbackslash.




reply via email to

[Prev in Thread] Current Thread [Next in Thread]