/[emacs]/emacs/man/texinfo.tex
ViewVC logotype

Diff of /emacs/man/texinfo.tex

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.1 by gerd, Mon May 14 09:53:34 2001 UTC revision 1.1.16.1 by miles, Fri Apr 4 06:20:48 2003 UTC
# Line 3  Line 3 
3  % Load plain if necessary, i.e., if running under initex.  % Load plain if necessary, i.e., if running under initex.
4  \expandafter\ifx\csname fmtname\endcsname\relax\input plain\fi  \expandafter\ifx\csname fmtname\endcsname\relax\input plain\fi
5  %  %
6  \def\texinfoversion{2001-03-28.08}  \def\texinfoversion{2002-06-04.06}
7  %  %
8  % Copyright (C) 1985, 86, 88, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99,  % Copyright (C) 1985, 86, 88, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99,
9  %               2000, 01 Free Software Foundation, Inc.  %               2000, 01, 02 Free Software Foundation, Inc.
10  %  %
11  % This texinfo.tex file is free software; you can redistribute it and/or  % This texinfo.tex file is free software; you can redistribute it and/or
12  % modify it under the terms of the GNU General Public License as  % modify it under the terms of the GNU General Public License as
# Line 30  Line 30 
30  % Please try the latest version of texinfo.tex before submitting bug  % Please try the latest version of texinfo.tex before submitting bug
31  % reports; you can get the latest version from:  % reports; you can get the latest version from:
32  %   ftp://ftp.gnu.org/gnu/texinfo.tex  %   ftp://ftp.gnu.org/gnu/texinfo.tex
33  %   (and all GNU mirrors, see http://www.gnu.org/order/ftp.html)  %     (and all GNU mirrors, see http://www.gnu.org/order/ftp.html)
34  %   ftp://texinfo.org/tex/texinfo.tex  %   ftp://texinfo.org/texinfo/texinfo.tex
35  %   ftp://us.ctan.org/macros/texinfo/texinfo.tex  %   ftp://tug.org/tex/texinfo.tex
36  %   (and all CTAN mirrors, finger ctan@us.ctan.org for a list).  %     (and all CTAN mirrors, see http://www.ctan.org),
37  %   /home/gd/gnu/doc/texinfo.tex on the GNU machines.  %   and /home/gd/gnu/doc/texinfo.tex on the GNU machines.
38    %
39  % The texinfo.tex in any given Texinfo distribution could well be out  % The texinfo.tex in any given Texinfo distribution could well be out
40  % of date, so if that's what you're using, please check.  % of date, so if that's what you're using, please check.
41  % Texinfo has a small home page at http://texinfo.org/.  %
42    % Texinfo has a small home page at http://texinfo.org/ and also
43    % http://www.gnu.org/software/texinfo.
44  %  %
45  % Send bug reports to bug-texinfo@gnu.org.  Please include including a  % Send bug reports to bug-texinfo@gnu.org.  Please include including a
46  % complete document in each bug report with which we can reproduce the  % complete document in each bug report with which we can reproduce the
# Line 50  Line 53 
53  %   texindex foo.??  %   texindex foo.??
54  %   tex foo.texi  %   tex foo.texi
55  %   tex foo.texi  %   tex foo.texi
56  %   dvips foo.dvi -o # or whatever, to process the dvi file; this makes foo.ps.  %   dvips foo.dvi -o  # or whatever; this makes foo.ps.
57  % The extra runs of TeX get the cross-reference information correct.  % The extra TeX runs get the cross-reference information correct.
58  % Sometimes one run after texindex suffices, and sometimes you need more  % Sometimes one run after texindex suffices, and sometimes you need more
59  % than two; texi2dvi does it as many times as necessary.  % than two; texi2dvi does it as many times as necessary.
60  %  %
61  % It is possible to adapt texinfo.tex for other languages.  You can get  % It is possible to adapt texinfo.tex for other languages.  You can get
62  % the existing language-specific files from ftp://ftp.gnu.org/gnu/texinfo/.  % the existing language-specific files from the full Texinfo distribution.
63    
64  \message{Loading texinfo [version \texinfoversion]:}  \message{Loading texinfo [version \texinfoversion]:}
65    
# Line 170  Line 173 
173  }%  }%
174  \fi  \fi
175    
176    % add check for \lastpenalty to plain's definitions.  If the last thing
177    % we did was a \nobreak, we don't want to insert more space.
178    %
179    \def\smallbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\smallskipamount
180      \removelastskip\penalty-50\smallskip\fi\fi}
181    \def\medbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\medskipamount
182      \removelastskip\penalty-100\medskip\fi\fi}
183    \def\bigbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\bigskipamount
184      \removelastskip\penalty-200\bigskip\fi\fi}
185    
186  % For @cropmarks command.  % For @cropmarks command.
187  % Do @cropmarks to get crop marks.  % Do @cropmarks to get crop marks.
188  %  %
# Line 431  Line 444 
444    % environments.  --karl, 6may93    % environments.  --karl, 6may93
445    %{\advance \baselineskip by -\singlespaceskip    %{\advance \baselineskip by -\singlespaceskip
446    %\kern \baselineskip}%    %\kern \baselineskip}%
447    \setleading \singlespaceskip    \setleading\singlespaceskip
448  }  }
449    
450  %% Simple single-character @ commands  %% Simple single-character @ commands
# Line 717  where each line of input produces a line Line 730  where each line of input produces a line
730  % @inmargin{TEXT [, RIGHT-TEXT]}  % @inmargin{TEXT [, RIGHT-TEXT]}
731  % (if RIGHT-TEXT is given, use TEXT for left page, RIGHT-TEXT for right;  % (if RIGHT-TEXT is given, use TEXT for left page, RIGHT-TEXT for right;
732  % else use TEXT for both).  % else use TEXT for both).
733  %  %
734  \def\inmargin#1{\parseinmargin #1,,\finish}  \def\inmargin#1{\parseinmargin #1,,\finish}
735  \def\parseinmargin#1,#2,#3\finish{% not perfect, but better than nothing.  \def\parseinmargin#1,#2,#3\finish{% not perfect, but better than nothing.
736    \setbox0 = \hbox{\ignorespaces #2}%    \setbox0 = \hbox{\ignorespaces #2}%
737    \ifdim\wd0 > 0pt    \ifdim\wd0 > 0pt
738      \def\lefttext{#1}%  have both texts      \def\lefttext{#1}%  have both texts
739      \def\righttext{#2}%      \def\righttext{#2}%
# Line 784  where each line of input produces a line Line 797  where each line of input produces a line
797  % @paragraphindent NCHARS  % @paragraphindent NCHARS
798  % We'll use ems for NCHARS, close enough.  % We'll use ems for NCHARS, close enough.
799  % We cannot implement @paragraphindent asis, though.  % We cannot implement @paragraphindent asis, though.
800  %  %
801  \def\asisword{asis} % no translation, these are keywords  \def\asisword{asis} % no translation, these are keywords
802  \def\noneword{none}  \def\noneword{none}
803  %  %
# Line 823  where each line of input produces a line Line 836  where each line of input produces a line
836  %  %
837  \def\asis#1{#1}  \def\asis#1{#1}
838    
839  % @math means output in math mode.  % @math outputs its argument in math mode.
840  % We don't use $'s directly in the definition of \math because control  % We don't use $'s directly in the definition of \math because we need
841  % sequences like \math are expanded when the toc file is written.  Then,  % to set catcodes according to plain TeX first, to allow for subscripts,
842  % we read the toc file back, the $'s will be normal characters (as they  % superscripts, special math chars, etc.
843  % should be, according to the definition of Texinfo).  So we must use a  %
844  % control sequence to switch into and out of math mode.  % @math does not do math typesetting in section titles, index
845  %  % entries, and other such contexts where the catcodes are set before
846  % This isn't quite enough for @math to work properly in indices, but it  % @math gets a chance to work.  This could perhaps be fixed, but for now
847  % seems unlikely it will ever be needed there.  % at least we can have real math in the main text, where it's needed most.
848    %
849    \let\implicitmath = $%$ font-lock fix
850    %
851    % One complication: _ usually means subscripts, but it could also mean
852    % an actual _ character, as in @math{@var{some_variable} + 1}.  So make
853    % _ within @math be active (mathcode "8000), and distinguish by seeing
854    % if the current family is \slfam, which is what @var uses.
855    %
856    {\catcode95 = \active  % 95 = _
857    \gdef\mathunderscore{%
858      \catcode95=\active
859      \def_{\ifnum\fam=\slfam \_\else\sb\fi}%
860    }}
861  %  %
862  \let\implicitmath = $  % Another complication: we want \\ (and @\) to output a \ character.
863  \def\math#1{\implicitmath #1\implicitmath}  % FYI, plain.tex uses \\ as a temporary control sequence (why?), but
864    % this is not advertised and we don't care.  Texinfo does not
865    % otherwise define @\.
866    %
867    % The \mathchar is class=0=ordinary, family=7=ttfam, position=5C=\.
868    \def\mathbackslash{\ifnum\fam=\ttfam \mathchar"075C \else\backslash \fi}
869    %
870    \def\math{%
871      \tex
872      \mathcode`\_="8000 \mathunderscore
873      \let\\ = \mathbackslash
874      \implicitmath\finishmath}
875    \def\finishmath#1{#1\implicitmath\Etex}
876    
877  % @bullet and @minus need the same treatment as @math, just above.  % @bullet and @minus need the same treatment as @math, just above.
878  \def\bullet{\implicitmath\ptexbullet\implicitmath}  \def\bullet{\implicitmath\ptexbullet\implicitmath}
# Line 917  where each line of input produces a line Line 955  where each line of input produces a line
955    \def\dopdfimage#1#2#3{%    \def\dopdfimage#1#2#3{%
956      \def\imagewidth{#2}%      \def\imagewidth{#2}%
957      \def\imageheight{#3}%      \def\imageheight{#3}%
958        % without \immediate, pdftex seg faults when the same image is
959        % included twice.  (Version 3.14159-pre-1.0-unofficial-20010704.)
960      \ifnum\pdftexversion < 14      \ifnum\pdftexversion < 14
961        \pdfimage        \immediate\pdfimage
962      \else      \else
963        \pdfximage        \immediate\pdfximage
964      \fi      \fi
965        \ifx\empty\imagewidth\else width \imagewidth \fi        \ifx\empty\imagewidth\else width \imagewidth \fi
966        \ifx\empty\imageheight\else height \imageheight \fi        \ifx\empty\imageheight\else height \imageheight \fi
# Line 932  where each line of input produces a line Line 972  where each line of input produces a line
972      \ifnum\pdftexversion < 14 \else      \ifnum\pdftexversion < 14 \else
973        \pdfrefximage \pdflastximage        \pdfrefximage \pdflastximage
974      \fi}      \fi}
975    \def\pdfmkdest#1{\pdfdest name{#1} xyz}    \def\pdfmkdest#1{{\normalturnoffactive \pdfdest name{#1} xyz}}
976    \def\pdfmkpgn#1{#1@}    \def\pdfmkpgn#1{#1}
977    \let\linkcolor = \Blue  % was Cyan, but that seems light?    \let\linkcolor = \Blue  % was Cyan, but that seems light?
978    \def\endlink{\Black\pdfendlink}    \def\endlink{\Black\pdfendlink}
979    % Adding outlines to PDF; macros for calculating structure of outlines    % Adding outlines to PDF; macros for calculating structure of outlines
# Line 945  where each line of input produces a line Line 985  where each line of input produces a line
985      \expandafter\xdef\csname#1\endcsname{\the\tempnum}}      \expandafter\xdef\csname#1\endcsname{\the\tempnum}}
986    \def\pdfmakeoutlines{{%    \def\pdfmakeoutlines{{%
987      \openin 1 \jobname.toc      \openin 1 \jobname.toc
988      \ifeof 1\else\bgroup      \ifeof 1\else\begingroup
989        \closein 1        \closein 1
990        \indexnofonts        \indexnofonts
991        \def\tt{}        \def\tt{}
992        \let\_ = \normalunderscore        \let\_ = \normalunderscore
993        % Thanh's hack / proper braces in bookmarks          % Thanh's hack / proper braces in bookmarks
994        \edef\mylbrace{\iftrue \string{\else}\fi}\let\{=\mylbrace        \edef\mylbrace{\iftrue \string{\else}\fi}\let\{=\mylbrace
995        \edef\myrbrace{\iffalse{\else\string}\fi}\let\}=\myrbrace        \edef\myrbrace{\iffalse{\else\string}\fi}\let\}=\myrbrace
996        %        %
997        \def\chapentry ##1##2##3{}        \def\chapentry ##1##2##3{}
998          \let\appendixentry = \chapentry
999        \def\unnumbchapentry ##1##2{}        \def\unnumbchapentry ##1##2{}
1000        \def\secentry ##1##2##3##4{\advancenumber{chap##2}}        \def\secentry ##1##2##3##4{\advancenumber{chap##2}}
1001        \def\unnumbsecentry ##1##2{}        \def\unnumbsecentry ##1##2##3{\advancenumber{chap##2}}
1002        \def\subsecentry ##1##2##3##4##5{\advancenumber{sec##2.##3}}        \def\subsecentry ##1##2##3##4##5{\advancenumber{sec##2.##3}}
1003        \def\unnumbsubsecentry ##1##2{}        \def\unnumbsubsecentry ##1##2##3##4{\advancenumber{sec##2.##3}}
1004        \def\subsubsecentry ##1##2##3##4##5##6{\advancenumber{subsec##2.##3.##4}}        \def\subsubsecentry ##1##2##3##4##5##6{\advancenumber{subsec##2.##3.##4}}
1005        \def\unnumbsubsubsecentry ##1##2{}        \def\unnumbsubsubsecentry ##1##2##3##4##5{\advancenumber{subsec##2.##3.##4}}
1006        \input \jobname.toc        \input \jobname.toc
1007        \def\chapentry ##1##2##3{%        \def\chapentry ##1##2##3{%
1008          \pdfoutline goto name{\pdfmkpgn{##3}}count-\expnumber{chap##2}{##1}}          \pdfoutline goto name{\pdfmkpgn{##3}}count-\expnumber{chap##2}{##1}}
1009          \let\appendixentry = \chapentry
1010        \def\unnumbchapentry ##1##2{%        \def\unnumbchapentry ##1##2{%
1011          \pdfoutline goto name{\pdfmkpgn{##2}}{##1}}          \pdfoutline goto name{\pdfmkpgn{##2}}{##1}}
1012        \def\secentry ##1##2##3##4{%        \def\secentry ##1##2##3##4{%
1013          \pdfoutline goto name{\pdfmkpgn{##4}}count-\expnumber{sec##2.##3}{##1}}          \pdfoutline goto name{\pdfmkpgn{##4}}count-\expnumber{sec##2.##3}{##1}}
1014        \def\unnumbsecentry ##1##2{%        \def\unnumbsecentry ##1##2##3{%
1015          \pdfoutline goto name{\pdfmkpgn{##2}}{##1}}          \pdfoutline goto name{\pdfmkpgn{##3}}{##1}}
1016        \def\subsecentry ##1##2##3##4##5{%        \def\subsecentry ##1##2##3##4##5{%
1017          \pdfoutline goto name{\pdfmkpgn{##5}}count-\expnumber{subsec##2.##3.##4}{##1}}          \pdfoutline goto name{\pdfmkpgn{##5}}count-\expnumber{subsec##2.##3.##4}{##1}}
1018        \def\unnumbsubsecentry ##1##2{%        \def\unnumbsubsecentry ##1##2##3##4{%
1019          \pdfoutline goto name{\pdfmkpgn{##2}}{##1}}          \pdfoutline goto name{\pdfmkpgn{##4}}{##1}}
1020        \def\subsubsecentry ##1##2##3##4##5##6{%        \def\subsubsecentry ##1##2##3##4##5##6{%
1021          \pdfoutline goto name{\pdfmkpgn{##6}}{##1}}          \pdfoutline goto name{\pdfmkpgn{##6}}{##1}}
1022        \def\unnumbsubsubsecentry ##1##2{%        \def\unnumbsubsubsecentry ##1##2##3##4##5{%
1023          \pdfoutline goto name{\pdfmkpgn{##2}}{##1}}          \pdfoutline goto name{\pdfmkpgn{##5}}{##1}}
1024        \input \jobname.toc        \input \jobname.toc
1025      \egroup\fi      \endgroup\fi
1026    }}    }}
1027    \def\makelinks #1,{%    \def\makelinks #1,{%
1028      \def\params{#1}\def\E{END}%      \def\params{#1}\def\E{END}%
# Line 990  where each line of input produces a line Line 1032  where each line of input produces a line
1032        \let\nextmakelinks=\makelinks        \let\nextmakelinks=\makelinks
1033        \ifnum\lnkcount>0,\fi        \ifnum\lnkcount>0,\fi
1034        \picknum{#1}%        \picknum{#1}%
1035        \startlink attr{/Border [0 0 0]}        \startlink attr{/Border [0 0 0]}
1036          goto name{\pdfmkpgn{\the\pgn}}%          goto name{\pdfmkpgn{\the\pgn}}%
1037        \linkcolor #1%        \linkcolor #1%
1038        \advance\lnkcount by 1%        \advance\lnkcount by 1%
# Line 1030  where each line of input produces a line Line 1072  where each line of input produces a line
1072    \def\pdfurl#1{%    \def\pdfurl#1{%
1073      \begingroup      \begingroup
1074        \normalturnoffactive\def\@{@}%        \normalturnoffactive\def\@{@}%
1075          \let\value=\expandablevalue
1076        \leavevmode\Red        \leavevmode\Red
1077        \startlink attr{/Border [0 0 0]}%        \startlink attr{/Border [0 0 0]}%
1078          user{/Subtype /Link /A << /S /URI /URI (#1) >>}%          user{/Subtype /Link /A << /S /URI /URI (#1) >>}%
# Line 1044  where each line of input produces a line Line 1087  where each line of input produces a line
1087      \ifx\first0\adn0      \ifx\first0\adn0
1088      \else\ifx\first1\adn1 \else\ifx\first2\adn2 \else\ifx\first3\adn3      \else\ifx\first1\adn1 \else\ifx\first2\adn2 \else\ifx\first3\adn3
1089      \else\ifx\first4\adn4 \else\ifx\first5\adn5 \else\ifx\first6\adn6      \else\ifx\first4\adn4 \else\ifx\first5\adn5 \else\ifx\first6\adn6
1090      \else\ifx\first7\adn7 \else\ifx\first8\adn8 \else\ifx\first9\adn9      \else\ifx\first7\adn7 \else\ifx\first8\adn8 \else\ifx\first9\adn9
1091      \else      \else
1092        \ifnum0=\countA\else\makelink\fi        \ifnum0=\countA\else\makelink\fi
1093        \ifx\first.\let\next=\done\else        \ifx\first.\let\next=\done\else
# Line 1057  where each line of input produces a line Line 1100  where each line of input produces a line
1100    \def\makelink{\addtokens{\toksB}%    \def\makelink{\addtokens{\toksB}%
1101      {\noexpand\pdflink{\the\toksC}}\toksC={}\global\countA=0}      {\noexpand\pdflink{\the\toksC}}\toksC={}\global\countA=0}
1102    \def\pdflink#1{%    \def\pdflink#1{%
1103      \startlink attr{/Border [0 0 0]} goto name{\mkpgn{#1}}      \startlink attr{/Border [0 0 0]} goto name{\pdfmkpgn{#1}}
1104      \linkcolor #1\endlink}      \linkcolor #1\endlink}
   \def\mkpgn#1{#1@}  
1105    \def\done{\edef\st{\global\noexpand\toksA={\the\toksB}}\st}    \def\done{\edef\st{\global\noexpand\toksA={\the\toksB}}\st}
1106  \fi % \ifx\pdfoutput  \fi % \ifx\pdfoutput
1107    
# Line 1076  where each line of input produces a line Line 1118  where each line of input produces a line
1118  % We don't need math for this one.  % We don't need math for this one.
1119  \def\ttsl{\tenttsl}  \def\ttsl{\tenttsl}
1120    
1121  % Use Computer Modern fonts at \magstephalf (11pt).  % Default leading.
1122  \newcount\mainmagstep  \newdimen\textleading  \textleading = 13.2pt
1123  \mainmagstep=\magstephalf  
1124    % Set the baselineskip to #1, and the lineskip and strut size
1125    % correspondingly.  There is no deep meaning behind these magic numbers
1126    % used as factors; they just match (closely enough) what Knuth defined.
1127    %
1128    \def\lineskipfactor{.08333}
1129    \def\strutheightpercent{.70833}
1130    \def\strutdepthpercent {.29167}
1131    %
1132    \def\setleading#1{%
1133      \normalbaselineskip = #1\relax
1134      \normallineskip = \lineskipfactor\normalbaselineskip
1135      \normalbaselines
1136      \setbox\strutbox =\hbox{%
1137        \vrule width0pt height\strutheightpercent\baselineskip
1138                        depth \strutdepthpercent \baselineskip
1139      }%
1140    }
1141    
1142  % Set the font macro #1 to the font named #2, adding on the  % Set the font macro #1 to the font named #2, adding on the
1143  % specified font prefix (normally `cm').  % specified font prefix (normally `cm').
# Line 1108  where each line of input produces a line Line 1167  where each line of input produces a line
1167  \def\scshape{csc}  \def\scshape{csc}
1168  \def\scbshape{csc}  \def\scbshape{csc}
1169    
1170    \newcount\mainmagstep
1171  \ifx\bigger\relax  \ifx\bigger\relax
1172  \let\mainmagstep=\magstep1    % not really supported.
1173  \setfont\textrm\rmshape{12}{1000}    \let\mainmagstep=\magstep1
1174  \setfont\texttt\ttshape{12}{1000}    \setfont\textrm\rmshape{12}{1000}
1175      \setfont\texttt\ttshape{12}{1000}
1176  \else  \else
1177  \setfont\textrm\rmshape{10}{\mainmagstep}    \mainmagstep=\magstephalf
1178  \setfont\texttt\ttshape{10}{\mainmagstep}    \setfont\textrm\rmshape{10}{\mainmagstep}
1179      \setfont\texttt\ttshape{10}{\mainmagstep}
1180  \fi  \fi
1181  % Instead of cmb10, you many want to use cmbx10.  % Instead of cmb10, you many want to use cmbx10.
1182  % cmbx10 is a prettier font on its own, but cmb10  % cmbx10 is a prettier font on its own, but cmb10
# Line 1145  where each line of input produces a line Line 1207  where each line of input produces a line
1207  \font\smalli=cmmi9  \font\smalli=cmmi9
1208  \font\smallsy=cmsy9  \font\smallsy=cmsy9
1209    
1210    % Fonts for small examples (8pt).
1211    \setfont\smallerrm\rmshape{8}{1000}
1212    \setfont\smallertt\ttshape{8}{1000}
1213    \setfont\smallerbf\bfshape{10}{800}
1214    \setfont\smallerit\itshape{8}{1000}
1215    \setfont\smallersl\slshape{8}{1000}
1216    \setfont\smallersf\sfshape{8}{1000}
1217    \setfont\smallersc\scshape{10}{800}
1218    \setfont\smallerttsl\ttslshape{10}{800}
1219    \font\smalleri=cmmi8
1220    \font\smallersy=cmsy8
1221    
1222  % Fonts for title page:  % Fonts for title page:
1223  \setfont\titlerm\rmbshape{12}{\magstep3}  \setfont\titlerm\rmbshape{12}{\magstep3}
1224  \setfont\titleit\itbshape{10}{\magstep4}  \setfont\titleit\itbshape{10}{\magstep4}
# Line 1182  where each line of input produces a line Line 1256  where each line of input produces a line
1256  \font\seci=cmmi12 scaled \magstep1  \font\seci=cmmi12 scaled \magstep1
1257  \font\secsy=cmsy10 scaled \magstep2  \font\secsy=cmsy10 scaled \magstep2
1258    
 % \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  
   
1259  % Subsection fonts (13.15pt).  % Subsection fonts (13.15pt).
1260  \setfont\ssecrm\rmbshape{12}{\magstephalf}  \setfont\ssecrm\rmbshape{12}{\magstephalf}
1261  \setfont\ssecit\itbshape{10}{1315}  \setfont\ssecit\itbshape{10}{1315}
# Line 1212  where each line of input produces a line Line 1272  where each line of input produces a line
1272    
1273  % In order for the font changes to affect most math symbols and letters,  % In order for the font changes to affect most math symbols and letters,
1274  % we have to define the \textfont of the standard families.  Since  % we have to define the \textfont of the standard families.  Since
1275  % texinfo doesn't allow for producing subscripts and superscripts, we  % texinfo doesn't allow for producing subscripts and superscripts except
1276  % don't bother to reset \scriptfont and \scriptscriptfont (which would  % in the main text, we don't bother to reset \scriptfont and
1277  % also require loading a lot more fonts).  % \scriptscriptfont (which would also require loading a lot more fonts).
1278  %  %
1279  \def\resetmathfonts{%  \def\resetmathfonts{%
1280    \textfont0 = \tenrm \textfont1 = \teni \textfont2 = \tensy    \textfont0=\tenrm \textfont1=\teni \textfont2=\tensy
1281    \textfont\itfam = \tenit \textfont\slfam = \tensl \textfont\bffam = \tenbf    \textfont\itfam=\tenit \textfont\slfam=\tensl \textfont\bffam=\tenbf
1282    \textfont\ttfam = \tentt \textfont\sffam = \tensf    \textfont\ttfam=\tentt \textfont\sffam=\tensf
1283  }  }
1284    
   
1285  % The font-changing commands redefine the meanings of \tenSTYLE, instead  % The font-changing commands redefine the meanings of \tenSTYLE, instead
1286  % of just \STYLE.  We do this so that font changes will continue to work  % of just \STYLE.  We do this so that font changes will continue to work
1287  % in math mode, where it is the current \fam that is relevant in most  % in math mode, where it is the current \fam that is relevant in most
# Line 1233  where each line of input produces a line Line 1292  where each line of input produces a line
1292    \let\tenrm=\textrm \let\tenit=\textit \let\tensl=\textsl    \let\tenrm=\textrm \let\tenit=\textit \let\tensl=\textsl
1293    \let\tenbf=\textbf \let\tentt=\texttt \let\smallcaps=\textsc    \let\tenbf=\textbf \let\tentt=\texttt \let\smallcaps=\textsc
1294    \let\tensf=\textsf \let\teni=\texti \let\tensy=\textsy \let\tenttsl=\textttsl    \let\tensf=\textsf \let\teni=\texti \let\tensy=\textsy \let\tenttsl=\textttsl
1295    \resetmathfonts}    \resetmathfonts \setleading{\textleading}}
1296  \def\titlefonts{%  \def\titlefonts{%
1297    \let\tenrm=\titlerm \let\tenit=\titleit \let\tensl=\titlesl    \let\tenrm=\titlerm \let\tenit=\titleit \let\tensl=\titlesl
1298    \let\tenbf=\titlebf \let\tentt=\titlett \let\smallcaps=\titlesc    \let\tenbf=\titlebf \let\tentt=\titlett \let\smallcaps=\titlesc
# Line 1262  where each line of input produces a line Line 1321  where each line of input produces a line
1321    \let\tenbf=\smallbf \let\tentt=\smalltt \let\smallcaps=\smallsc    \let\tenbf=\smallbf \let\tentt=\smalltt \let\smallcaps=\smallsc
1322    \let\tensf=\smallsf \let\teni=\smalli \let\tensy=\smallsy    \let\tensf=\smallsf \let\teni=\smalli \let\tensy=\smallsy
1323    \let\tenttsl=\smallttsl    \let\tenttsl=\smallttsl
1324    \resetmathfonts \setleading{11pt}}    \resetmathfonts \setleading{10.5pt}}
1325    \def\smallerfonts{%
1326      \let\tenrm=\smallerrm \let\tenit=\smallerit \let\tensl=\smallersl
1327      \let\tenbf=\smallerbf \let\tentt=\smallertt \let\smallcaps=\smallersc
1328      \let\tensf=\smallersf \let\teni=\smalleri \let\tensy=\smallersy
1329      \let\tenttsl=\smallerttsl
1330      \resetmathfonts \setleading{9.5pt}}
1331    \let\smallexamplefonts = \smallerfonts
1332    
1333  % Set up the default fonts, so we can use them for creating boxes.  % Set up the default fonts, so we can use them for creating boxes.
1334  %  %
# Line 1376  where each line of input produces a line Line 1442  where each line of input produces a line
1442    
1443  \def\realdash{-}  \def\realdash{-}
1444  \def\codedash{-\discretionary{}{}{}}  \def\codedash{-\discretionary{}{}{}}
1445  \def\codeunder{\ifusingtt{\normalunderscore\discretionary{}{}{}}{\_}}  \def\codeunder{%
1446      % this is all so @math{@code{var_name}+1} can work.  In math mode, _
1447      % is "active" (mathcode"8000) and \normalunderscore (or \char95, etc.)
1448      % will therefore expand the active definition of _, which is us
1449      % (inside @code that is), therefore an endless loop.
1450      \ifusingtt{\ifmmode
1451                   \mathchar"075F % class 0=ordinary, family 7=ttfam, pos 0x5F=_.
1452                 \else\normalunderscore \fi
1453                 \discretionary{}{}{}}%
1454                {\_}%
1455    }
1456  \def\codex #1{\tclose{#1}\endgroup}  \def\codex #1{\tclose{#1}\endgroup}
1457    
 %\let\exp=\tclose  %Was temporary  
   
1458  % @kbd is like @code, except that if the argument is just one @key command,  % @kbd is like @code, except that if the argument is just one @key command,
1459  % then @kbd has no effect.  % then @kbd has no effect.
1460    
# Line 1447  where each line of input produces a line Line 1521  where each line of input produces a line
1521    
1522  % rms does not like angle brackets --karl, 17may97.  % rms does not like angle brackets --karl, 17may97.
1523  % So now @email is just like @uref, unless we are pdf.  % So now @email is just like @uref, unless we are pdf.
1524  %  %
1525  %\def\email#1{\angleleft{\tt #1}\angleright}  %\def\email#1{\angleleft{\tt #1}\angleright}
1526  \ifpdf  \ifpdf
1527    \def\email#1{\doemail#1,,\finish}    \def\email#1{\doemail#1,,\finish}
# Line 1565  where each line of input produces a line Line 1639  where each line of input produces a line
1639     \oldpage     \oldpage
1640     \endgroup     \endgroup
1641     %     %
1642       % Need this before the \...aftertitlepage checks so that if they are
1643       % in effect the toc pages will come out with page numbers.
1644       \HEADINGSon
1645       %
1646     % If they want short, they certainly want long too.     % If they want short, they certainly want long too.
1647     \ifsetshortcontentsaftertitlepage     \ifsetshortcontentsaftertitlepage
1648       \shortcontents       \shortcontents
# Line 1578  where each line of input produces a line Line 1656  where each line of input produces a line
1656       \global\let\contents = \relax       \global\let\contents = \relax
1657       \global\let\shortcontents = \relax       \global\let\shortcontents = \relax
1658     \fi     \fi
    %  
    \ifpdf \pdfmakepagedesttrue \fi  
    %  
    \HEADINGSon  
1659  }  }
1660    
1661  \def\finishtitlepage{%  \def\finishtitlepage{%
# Line 2339  width0pt\relax} \fi Line 2413  width0pt\relax} \fi
2413    \let\item = \relax    \let\item = \relax
2414  }  }
2415    
2416  % Ignore @ignore ... @end ignore.  % Ignore @ignore, @ifhtml, @ifinfo, @ifplaintext, @ifnottex, @html, @menu,
2417    % @direntry, and @documentdescription.
2418  %  %
2419  \def\ignore{\doignore{ignore}}  \def\ignore{\doignore{ignore}}
   
 % Ignore @ifinfo, @ifhtml, @ifnottex, @html, @menu, and @direntry text.  
 %  
 \def\ifinfo{\doignore{ifinfo}}  
2420  \def\ifhtml{\doignore{ifhtml}}  \def\ifhtml{\doignore{ifhtml}}
2421    \def\ifinfo{\doignore{ifinfo}}
2422    \def\ifplaintext{\doignore{ifplaintext}}
2423  \def\ifnottex{\doignore{ifnottex}}  \def\ifnottex{\doignore{ifnottex}}
2424  \def\html{\doignore{html}}  \def\html{\doignore{html}}
2425  \def\menu{\doignore{menu}}  \def\menu{\doignore{menu}}
2426  \def\direntry{\doignore{direntry}}  \def\direntry{\doignore{direntry}}
2427    \def\documentdescription{\doignore{documentdescription}}
2428    \def\documentdescriptionword{documentdescription}
2429    
2430  % @dircategory CATEGORY  -- specify a category of the dir file  % @dircategory CATEGORY  -- specify a category of the dir file
2431  % which this file should belong to.  Ignore this in TeX.  % which this file should belong to.  Ignore this in TeX.
# Line 2377  width0pt\relax} \fi Line 2452  width0pt\relax} \fi
2452    % We must not have @c interpreted as a control sequence.    % We must not have @c interpreted as a control sequence.
2453    \catcode`\@ = 12    \catcode`\@ = 12
2454    %    %
2455    % Make the letter c a comment character so that the rest of the line    \def\ignoreword{#1}%
2456    % will be ignored. This way, the document can have (for example)    \ifx\ignoreword\documentdescriptionword
2457    %   @c @end ifinfo      % The c kludge breaks documentdescription, since
2458    % and the @end ifinfo will be properly ignored.      % `documentdescription' contains a `c'.  Means not everything will
2459    % (We've just changed @ to catcode 12.)      % be ignored inside @documentdescription, but oh well...
2460    \catcode`\c = 14    \else
2461        % Make the letter c a comment character so that the rest of the line
2462        % will be ignored. This way, the document can have (for example)
2463        %   @c @end ifinfo
2464        % and the @end ifinfo will be properly ignored.
2465        % (We've just changed @ to catcode 12.)
2466        \catcode`\c = 14
2467      \fi
2468    %    %
2469    % And now expand that command.    % And now expand the command defined above.
2470    \doignoretext    \doignoretext
2471  }  }
2472    
# Line 2456  width0pt\relax} \fi Line 2538  width0pt\relax} \fi
2538      \let\tenrm=\nullfont \let\tenit=\nullfont \let\tensl=\nullfont      \let\tenrm=\nullfont \let\tenit=\nullfont \let\tensl=\nullfont
2539      \let\tenbf=\nullfont \let\tentt=\nullfont \let\smallcaps=\nullfont      \let\tenbf=\nullfont \let\tentt=\nullfont \let\smallcaps=\nullfont
2540      \let\tensf=\nullfont      \let\tensf=\nullfont
2541      % Similarly for index fonts (mostly for their use in smallexample).      % Similarly for index fonts.
2542      \let\smallrm=\nullfont \let\smallit=\nullfont \let\smallsl=\nullfont      \let\smallrm=\nullfont \let\smallit=\nullfont \let\smallsl=\nullfont
2543      \let\smallbf=\nullfont \let\smalltt=\nullfont \let\smallsc=\nullfont      \let\smallbf=\nullfont \let\smalltt=\nullfont \let\smallsc=\nullfont
2544      \let\smallsf=\nullfont      \let\smallsf=\nullfont
2545        % Similarly for smallexample fonts.
2546        \let\smallerrm=\nullfont \let\smallerit=\nullfont \let\smallersl=\nullfont
2547        \let\smallerbf=\nullfont \let\smallertt=\nullfont \let\smallersc=\nullfont
2548        \let\smallersf=\nullfont
2549      %      %
2550      % Don't complain when characters are missing from the fonts.      % Don't complain when characters are missing from the fonts.
2551      \tracinglostchars = 0      \tracinglostchars = 0
# Line 2571  width0pt\relax} \fi Line 2657  width0pt\relax} \fi
2657  \def\ifclearfail{\nestedignore{ifclear}}  \def\ifclearfail{\nestedignore{ifclear}}
2658  \defineunmatchedend{ifclear}  \defineunmatchedend{ifclear}
2659    
2660  % @iftex, @ifnothtml, @ifnotinfo always succeed; we read the text  % @iftex, @ifnothtml, @ifnotinfo, @ifnotplaintext always succeed; we
2661  % following, through the first @end iftex (etc.).  Make `@end iftex'  % read the text following, through the first @end iftex (etc.).  Make
2662  % (etc.) valid only after an @iftex.  % `@end iftex' (etc.) valid only after an @iftex.
2663  %  %
2664  \def\iftex{\conditionalsucceed{iftex}}  \def\iftex{\conditionalsucceed{iftex}}
2665  \def\ifnothtml{\conditionalsucceed{ifnothtml}}  \def\ifnothtml{\conditionalsucceed{ifnothtml}}
2666  \def\ifnotinfo{\conditionalsucceed{ifnotinfo}}  \def\ifnotinfo{\conditionalsucceed{ifnotinfo}}
2667    \def\ifnotplaintext{\conditionalsucceed{ifnotplaintext}}
2668  \defineunmatchedend{iftex}  \defineunmatchedend{iftex}
2669  \defineunmatchedend{ifnothtml}  \defineunmatchedend{ifnothtml}
2670  \defineunmatchedend{ifnotinfo}  \defineunmatchedend{ifnotinfo}
2671    \defineunmatchedend{ifnotplaintext}
2672    
2673  % We can't just want to start a group at @iftex (for example) and end it  % We can't just want to start a group at @iftex (etc.) and end it at
2674  % at @end iftex, since then @set commands inside the conditional have no  % @end iftex, since then @set commands inside the conditional have no
2675  % effect (they'd get reverted at the end of the group).  So we must  % effect (they'd get reverted at the end of the group).  So we must
2676  % define \Eiftex to redefine itself to be its previous value.  (We can't  % define \Eiftex to redefine itself to be its previous value.  (We can't
2677  % just define it to fail again with an ``unmatched end'' error, since  % just define it to fail again with an ``unmatched end'' error, since
# Line 2654  width0pt\relax} \fi Line 2742  width0pt\relax} \fi
2742    
2743  % @synindex foo bar    makes index foo feed into index bar.  % @synindex foo bar    makes index foo feed into index bar.
2744  % Do this instead of @defindex foo if you don't want it as a separate index.  % Do this instead of @defindex foo if you don't want it as a separate index.
2745  %  %
2746  % @syncodeindex foo bar   similar, but put all entries made for index foo  % @syncodeindex foo bar   similar, but put all entries made for index foo
2747  % inside @code.  % inside @code.
2748  %  %
2749  \def\synindex#1 #2 {\dosynindex\doindex{#1}{#2}}  \def\synindex#1 #2 {\dosynindex\doindex{#1}{#2}}
2750  \def\syncodeindex#1 #2 {\dosynindex\docodeindex{#1}{#2}}  \def\syncodeindex#1 #2 {\dosynindex\docodeindex{#1}{#2}}
2751    
# Line 2696  width0pt\relax} \fi Line 2784  width0pt\relax} \fi
2784  \def\docodeindex#1{\edef\indexname{#1}\parsearg\singlecodeindexer}  \def\docodeindex#1{\edef\indexname{#1}\parsearg\singlecodeindexer}
2785  \def\singlecodeindexer #1{\doind{\indexname}{\code{#1}}}  \def\singlecodeindexer #1{\doind{\indexname}{\code{#1}}}
2786    
2787    % Take care of texinfo commands likely to appear in an index entry.
2788    % (Must be a way to avoid doing expansion at all, and thus not have to
2789    % laboriously list every single command here.)
2790    %
2791  \def\indexdummies{%  \def\indexdummies{%
2792  \def\ { }%  \def\ { }%
2793    \def\@{@}% change to @@ when we switch to @ as escape char in aux files.
2794    % Need these in case \tex is in effect and \{ is a \delimiter again.
2795    % But can't use \lbracecmd and \rbracecmd because texindex assumes
2796    % braces and backslashes are used only as delimiters.
2797    \let\{ = \mylbrace
2798    \let\} = \myrbrace
2799    \def\_{{\realbackslash _}}%
2800    \normalturnoffactive
2801    %
2802  % Take care of the plain tex accent commands.  % Take care of the plain tex accent commands.
2803    \def\,##1{\realbackslash ,{##1}}%
2804  \def\"{\realbackslash "}%  \def\"{\realbackslash "}%
2805  \def\`{\realbackslash `}%  \def\`{\realbackslash `}%
2806  \def\'{\realbackslash '}%  \def\'{\realbackslash '}%
# Line 2711  width0pt\relax} \fi Line 2813  width0pt\relax} \fi
2813  \def\u{\realbackslash u}%  \def\u{\realbackslash u}%
2814  \def\v{\realbackslash v}%  \def\v{\realbackslash v}%
2815  \def\H{\realbackslash H}%  \def\H{\realbackslash H}%
2816    \def\dotless##1{\realbackslash dotless {##1}}%
2817  % Take care of the plain tex special European modified letters.  % 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}%  
2818  \def\AA{\realbackslash AA}%  \def\AA{\realbackslash AA}%
2819  \def\o{\realbackslash o}%  \def\AE{\realbackslash AE}%
2820    \def\L{\realbackslash L}%
2821    \def\OE{\realbackslash OE}%
2822  \def\O{\realbackslash O}%  \def\O{\realbackslash O}%
2823    \def\aa{\realbackslash aa}%
2824    \def\ae{\realbackslash ae}%
2825  \def\l{\realbackslash l}%  \def\l{\realbackslash l}%
2826  \def\L{\realbackslash L}%  \def\oe{\realbackslash oe}%
2827    \def\o{\realbackslash o}%
2828  \def\ss{\realbackslash ss}%  \def\ss{\realbackslash ss}%
2829  % Take care of texinfo commands likely to appear in an index entry.  %
2830  % (Must be a way to avoid doing expansion at all, and thus not have to  % Although these internals commands shouldn't show up, sometimes they do.
 % laboriously list every single command here.)  
 \def\@{@}% 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 }%  
2831  \def\bf{\realbackslash bf }%  \def\bf{\realbackslash bf }%
2832    \def\gtr{\realbackslash gtr}%
2833    \def\hat{\realbackslash hat}%
2834    \def\less{\realbackslash less}%
2835  %\def\rm{\realbackslash rm }%  %\def\rm{\realbackslash rm }%
 \def\sl{\realbackslash sl }%  
2836  \def\sf{\realbackslash sf}%  \def\sf{\realbackslash sf}%
2837    \def\sl{\realbackslash sl }%
2838    \def\tclose##1{\realbackslash tclose {##1}}%
2839  \def\tt{\realbackslash tt}%  \def\tt{\realbackslash tt}%
2840  \def\gtr{\realbackslash gtr}%  %
2841  \def\less{\realbackslash less}%  \def\b##1{\realbackslash b {##1}}%
2842  \def\hat{\realbackslash hat}%  \def\i##1{\realbackslash i {##1}}%
2843    \def\sc##1{\realbackslash sc {##1}}%
2844    \def\t##1{\realbackslash t {##1}}%
2845    \def\r##1{\realbackslash r {##1}}%
2846    %
2847  \def\TeX{\realbackslash TeX}%  \def\TeX{\realbackslash TeX}%
2848  \def\dots{\realbackslash dots }%  \def\acronym##1{\realbackslash acronym {##1}}%
2849  \def\result{\realbackslash result}%  \def\cite##1{\realbackslash cite {##1}}%
 \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}}%  
2850  \def\code##1{\realbackslash code {##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}}%  
2851  \def\command##1{\realbackslash command {##1}}%  \def\command##1{\realbackslash command {##1}}%
2852    \def\dfn##1{\realbackslash dfn {##1}}%
2853    \def\dots{\realbackslash dots }%
2854    \def\emph##1{\realbackslash emph {##1}}%
2855    \def\env##1{\realbackslash env {##1}}%
2856    \def\file##1{\realbackslash file {##1}}%
2857    \def\kbd##1{\realbackslash kbd {##1}}%
2858    \def\key##1{\realbackslash key {##1}}%
2859    \def\math##1{\realbackslash math {##1}}%
2860  \def\option##1{\realbackslash option {##1}}%  \def\option##1{\realbackslash option {##1}}%
 \def\dotless##1{\realbackslash dotless {##1}}%  
2861  \def\samp##1{\realbackslash samp {##1}}%  \def\samp##1{\realbackslash samp {##1}}%
2862  \def\,##1{\realbackslash ,{##1}}%  \def\strong##1{\realbackslash strong {##1}}%
2863  \def\t##1{\realbackslash t {##1}}%  \def\uref##1{\realbackslash uref {##1}}%
2864  \def\r##1{\realbackslash r {##1}}%  \def\url##1{\realbackslash url {##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}}%  
2865  \def\var##1{\realbackslash var {##1}}%  \def\var##1{\realbackslash var {##1}}%
2866  \def\kbd##1{\realbackslash kbd {##1}}%  \def\w{\realbackslash w }%
2867  \def\dfn##1{\realbackslash dfn {##1}}%  %
2868  \def\emph##1{\realbackslash emph {##1}}%  % These math commands don't seem likely to be used in index entries.
2869  \def\acronym##1{\realbackslash acronym {##1}}%  \def\copyright{\realbackslash copyright}%
2870    \def\equiv{\realbackslash equiv}%
2871    \def\error{\realbackslash error}%
2872    \def\expansion{\realbackslash expansion}%
2873    \def\point{\realbackslash point}%
2874    \def\print{\realbackslash print}%
2875    \def\result{\realbackslash result}%
2876  %  %
2877  % Handle some cases of @value -- where the variable name does not  % Handle some cases of @value -- where the variable name does not
2878  % contain - or _, and the value does not contain any  % contain - or _, and the value does not contain any
# Line 2787  width0pt\relax} \fi Line 2886  width0pt\relax} \fi
2886    
2887  % If an index command is used in an @example environment, any spaces  % If an index command is used in an @example environment, any spaces
2888  % therein should become regular spaces in the raw index file, not the  % therein should become regular spaces in the raw index file, not the
2889  % expansion of \tie (\\leavevmode \penalty \@M \ ).  % expansion of \tie (\leavevmode \penalty \@M \ ).
2890  {\obeyspaces  {\obeyspaces
2891   \gdef\unsepspaces{\obeyspaces\let =\space}}   \gdef\unsepspaces{\obeyspaces\let =\space}}
2892    
# Line 2798  width0pt\relax} \fi Line 2897  width0pt\relax} \fi
2897  \def\indexdummydots{...}  \def\indexdummydots{...}
2898    
2899  \def\indexnofonts{%  \def\indexnofonts{%
2900  % Just ignore accents.  \def\@{@}%
2901    % how to handle braces?
2902    \def\_{\normalunderscore}%
2903    %
2904  \let\,=\indexdummyfont  \let\,=\indexdummyfont
2905  \let\"=\indexdummyfont  \let\"=\indexdummyfont
2906  \let\`=\indexdummyfont  \let\`=\indexdummyfont
# Line 2814  width0pt\relax} \fi Line 2916  width0pt\relax} \fi
2916  \let\H=\indexdummyfont  \let\H=\indexdummyfont
2917  \let\dotless=\indexdummyfont  \let\dotless=\indexdummyfont
2918  % Take care of the plain tex special European modified letters.  % 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}%  
2919  \def\AA{AA}%  \def\AA{AA}%
2920  \def\o{o}%  \def\AE{AE}%
2921    \def\L{L}%
2922    \def\OE{OE}%
2923  \def\O{O}%  \def\O{O}%
2924    \def\aa{aa}%
2925    \def\ae{ae}%
2926  \def\l{l}%  \def\l{l}%
2927  \def\L{L}%  \def\oe{oe}%
2928    \def\o{o}%
2929  \def\ss{ss}%  \def\ss{ss}%
2930  \let\w=\indexdummyfont  %
2931  \let\t=\indexdummyfont  % Don't no-op \tt, since it isn't a user-level command
2932  \let\r=\indexdummyfont  % and is used in the definitions of the active chars like <, >, |, etc.
2933  \let\i=\indexdummyfont  % Likewise with the other plain tex font commands.
2934    %\let\tt=\indexdummyfont
2935    %
2936  \let\b=\indexdummyfont  \let\b=\indexdummyfont
2937  \let\emph=\indexdummyfont  \let\i=\indexdummyfont
2938  \let\strong=\indexdummyfont  \let\r=\indexdummyfont
 \let\cite=\indexdummyfont  
2939  \let\sc=\indexdummyfont  \let\sc=\indexdummyfont
2940  %Don't no-op \tt, since it isn't a user-level command  \let\t=\indexdummyfont
2941  % and is used in the definitions of the active chars like <, >, |...  %
2942  %\let\tt=\indexdummyfont  \let\TeX=\indexdummytex
 \let\tclose=\indexdummyfont  
 \let\code=\indexdummyfont  
 \let\url=\indexdummyfont  
 \let\uref=\indexdummyfont  
 \let\env=\indexdummyfont  
2943  \let\acronym=\indexdummyfont  \let\acronym=\indexdummyfont
2944    \let\cite=\indexdummyfont
2945    \let\code=\indexdummyfont
2946  \let\command=\indexdummyfont  \let\command=\indexdummyfont
2947  \let\option=\indexdummyfont  \let\dfn=\indexdummyfont
2948    \let\dots=\indexdummydots
2949    \let\emph=\indexdummyfont
2950    \let\env=\indexdummyfont
2951  \let\file=\indexdummyfont  \let\file=\indexdummyfont
 \let\samp=\indexdummyfont  
2952  \let\kbd=\indexdummyfont  \let\kbd=\indexdummyfont
2953  \let\key=\indexdummyfont  \let\key=\indexdummyfont
2954    \let\math=\indexdummyfont
2955    \let\option=\indexdummyfont
2956    \let\samp=\indexdummyfont
2957    \let\strong=\indexdummyfont
2958    \let\uref=\indexdummyfont
2959    \let\url=\indexdummyfont
2960  \let\var=\indexdummyfont  \let\var=\indexdummyfont
2961  \let\TeX=\indexdummytex  \let\w=\indexdummyfont
 \let\dots=\indexdummydots  
 \def\@{@}%  
2962  }  }
2963    
2964  % To define \realbackslash, we must make \ not be an escape.  % To define \realbackslash, we must make \ not be an escape.
# Line 3242  width0pt\relax} \fi Line 3348  width0pt\relax} \fi
3348    \wd0=\hsize \wd2=\hsize    \wd0=\hsize \wd2=\hsize
3349    \hbox to\pagewidth{\box0\hfil\box2}%    \hbox to\pagewidth{\box0\hfil\box2}%
3350  }  }
3351  %  %
3352  % All done with double columns.  % All done with double columns.
3353  \def\enddoublecolumns{%  \def\enddoublecolumns{%
3354    \output = {%    \output = {%
# Line 3454  width0pt\relax} \fi Line 3560  width0pt\relax} \fi
3560  \gdef\thischaptername{#1}%  \gdef\thischaptername{#1}%
3561  \xdef\thischapter{\putwordAppendix{} \appendixletter: \noexpand\thischaptername}%  \xdef\thischapter{\putwordAppendix{} \appendixletter: \noexpand\thischaptername}%
3562  \toks0 = {#1}%  \toks0 = {#1}%
3563  \edef\temp{\noexpand\writetocentry{\realbackslash chapentry{\the\toks0}%  \edef\temp{\noexpand\writetocentry{\realbackslash appendixentry{\the\toks0}%
3564                         {\putwordAppendix{} \appendixletter}}}%                         {\appendixletter}}}%
3565  \temp  \temp
3566  \appendixnoderef  \appendixnoderef
3567  \global\let\section = \appendixsec  \global\let\section = \appendixsec
# Line 3532  width0pt\relax} \fi Line 3638  width0pt\relax} \fi
3638  \def\unnumberedseczzz #1{%  \def\unnumberedseczzz #1{%
3639  \plainsecheading {#1}\gdef\thissection{#1}%  \plainsecheading {#1}\gdef\thissection{#1}%
3640  \toks0 = {#1}%  \toks0 = {#1}%
3641  \edef\temp{\noexpand\writetocentry{\realbackslash unnumbsecentry{\the\toks0}}}%  \edef\temp{\noexpand\writetocentry{\realbackslash unnumbsecentry%
3642      {\the\toks0}{\the\chapno}}}%
3643  \temp  \temp
3644  \unnumbnoderef  \unnumbnoderef
3645  \nobreak  \nobreak
# Line 3571  width0pt\relax} \fi Line 3678  width0pt\relax} \fi
3678  \plainsubsecheading {#1}\gdef\thissection{#1}%  \plainsubsecheading {#1}\gdef\thissection{#1}%
3679  \toks0 = {#1}%  \toks0 = {#1}%
3680  \edef\temp{\noexpand\writetocentry{\realbackslash unnumbsubsecentry%  \edef\temp{\noexpand\writetocentry{\realbackslash unnumbsubsecentry%
3681                                      {\the\toks0}}}%    {\the\toks0}{\the\chapno}{\the\secno}}}%
3682  \temp  \temp
3683  \unnumbnoderef  \unnumbnoderef
3684  \nobreak  \nobreak
# Line 3612  width0pt\relax} \fi Line 3719  width0pt\relax} \fi
3719  \plainsubsubsecheading {#1}\gdef\thissection{#1}%  \plainsubsubsecheading {#1}\gdef\thissection{#1}%
3720  \toks0 = {#1}%  \toks0 = {#1}%
3721  \edef\temp{\noexpand\writetocentry{\realbackslash unnumbsubsubsecentry%  \edef\temp{\noexpand\writetocentry{\realbackslash unnumbsubsubsecentry%
3722                                      {\the\toks0}}}%    {\the\toks0}{\the\chapno}{\the\secno}{\the\subsecno}}}%
3723  \temp  \temp
3724  \unnumbnoderef  \unnumbnoderef
3725  \nobreak  \nobreak
# Line 3824  width0pt\relax} \fi Line 3931  width0pt\relax} \fi
3931  % argument, which will end up as the last argument to the \...entry macro.  % argument, which will end up as the last argument to the \...entry macro.
3932  %  %
3933  % We open the .toc file here instead of at @setfilename or any other  % We open the .toc file here instead of at @setfilename or any other
3934  % given time so that @contents can be put in the document anywhere.  % fixed time so that @contents can be put in the document anywhere.
3935  %  %
3936  \newif\iftocfileopened  \newif\iftocfileopened
3937  \def\writetocentry#1{%  \def\writetocentry#1{%
# Line 3833  width0pt\relax} \fi Line 3940  width0pt\relax} \fi
3940      \global\tocfileopenedtrue      \global\tocfileopenedtrue
3941    \fi    \fi
3942    \iflinks \write\tocfile{#1{\folio}}\fi    \iflinks \write\tocfile{#1{\folio}}\fi
3943      %
3944      % Tell \shipout to create a page destination if we're doing pdf, which
3945      % will be the target of the links in the table of contents.  We can't
3946      % just do it on every page because the title pages are numbered 1 and
3947      % 2 (the page numbers aren't printed), and so are the first two pages
3948      % of the document.  Thus, we'd have two destinations named `1', and
3949      % two named `2'.
3950      \ifpdf \pdfmakepagedesttrue \fi
3951  }  }
3952    
3953  \newskip\contentsrightmargin \contentsrightmargin=1in  \newskip\contentsrightmargin \contentsrightmargin=1in
# Line 3888  width0pt\relax} \fi Line 4003  width0pt\relax} \fi
4003     \startcontents{\putwordShortTOC}%     \startcontents{\putwordShortTOC}%
4004        %        %
4005        \let\chapentry = \shortchapentry        \let\chapentry = \shortchapentry
4006          \let\appendixentry = \shortappendixentry
4007        \let\unnumbchapentry = \shortunnumberedentry        \let\unnumbchapentry = \shortunnumberedentry
4008        % We want a true roman here for the page numbers.        % We want a true roman here for the page numbers.
4009        \secfonts        \secfonts
# Line 3896  width0pt\relax} \fi Line 4012  width0pt\relax} \fi
4012        \hyphenpenalty = 10000        \hyphenpenalty = 10000
4013        \advance\baselineskip by 1pt % Open it up a little.        \advance\baselineskip by 1pt % Open it up a little.
4014        \def\secentry ##1##2##3##4{}        \def\secentry ##1##2##3##4{}
4015        \def\unnumbsecentry ##1##2{}        \def\unnumbsecentry ##1##2##3{}
4016        \def\subsecentry ##1##2##3##4##5{}        \def\subsecentry ##1##2##3##4##5{}
4017        \def\unnumbsubsecentry ##1##2{}        \def\unnumbsubsecentry ##1##2##3##4{}
4018        \def\subsubsecentry ##1##2##3##4##5##6{}        \def\subsubsecentry ##1##2##3##4##5##6{}
4019        \def\unnumbsubsubsecentry ##1##2{}        \def\unnumbsubsubsecentry ##1##2##3##4##5{}
4020        \openin 1 \jobname.toc        \openin 1 \jobname.toc
4021        \ifeof 1 \else        \ifeof 1 \else
4022          \closein 1          \closein 1
# Line 3923  width0pt\relax} \fi Line 4039  width0pt\relax} \fi
4039  % The last argument is the page number.  % The last argument is the page number.
4040  % The arguments in between are the chapter number, section number, ...  % The arguments in between are the chapter number, section number, ...
4041    
4042  % Chapter-level things, for both the long and short contents.  % Chapters, in the main contents.
4043  \def\chapentry#1#2#3{\dochapentry{#2\labelspace#1}{#3}}  \def\chapentry#1#2#3{\dochapentry{#2\labelspace#1}{#3}}
4044    %
4045  % See comments in \dochapentry re vbox and related settings  % Chapters, in the short toc.
4046    % See comments in \dochapentry re vbox and related settings.
4047  \def\shortchapentry#1#2#3{%  \def\shortchapentry#1#2#3{%
4048    \tocentry{\shortchaplabel{#2}\labelspace #1}{\doshortpageno\bgroup#3\egroup}%    \tocentry{\shortchaplabel{#2}\labelspace #1}{\doshortpageno\bgroup#3\egroup}%
4049  }  }
4050    
4051    % Appendices, in the main contents.
4052    \def\appendixentry#1#2#3{\dochapentry{\putwordAppendix{} #2\labelspace#1}{#3}}
4053    %
4054    % Appendices, in the short toc.
4055    \let\shortappendixentry = \shortchapentry
4056    
4057  % Typeset the label for a chapter or appendix for the short contents.  % Typeset the label for a chapter or appendix for the short contents.
4058  % The arg is, e.g. `Appendix A' for an appendix, or `3' for a chapter.  % The arg is, e.g., `Appendix A' for an appendix, or `3' for a chapter.
4059  % We could simplify the code here by writing out an \appendixentry  % We could simplify the code here by writing out an \appendixentry
4060  % command in the toc file for appendices, instead of using \chapentry  % command in the toc file for appendices, instead of using \chapentry
4061  % for both, but it doesn't seem worth it.  % for both, but it doesn't seem worth it.
# Line 3940  width0pt\relax} \fi Line 4063  width0pt\relax} \fi
4063  \newdimen\shortappendixwidth  \newdimen\shortappendixwidth
4064  %  %
4065  \def\shortchaplabel#1{%  \def\shortchaplabel#1{%
4066    % Compute width of word "Appendix", may change with language.    % This space should be enough, since a single number is .5em, and the
   \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  
4067    % widest letter (M) is 1em, at least in the Computer Modern fonts.    % widest letter (M) is 1em, at least in the Computer Modern fonts.
4068      % But use \hss just in case.
4069    % (This space doesn't include the extra space that gets added after    % (This space doesn't include the extra space that gets added after
4070    % the label; that gets put in by \shortchapentry above.)    % the label; that gets put in by \shortchapentry above.)
4071    \advance\dimen0 by 1.1em    \dimen0 = 1em
4072    \hbox to \dimen0{#1\hfil}%    \hbox to \dimen0{#1\hss}%
4073  }  }
4074    
4075    % Unnumbered chapters.
4076  \def\unnumbchapentry#1#2{\dochapentry{#1}{#2}}  \def\unnumbchapentry#1#2{\dochapentry{#1}{#2}}
4077  \def\shortunnumberedentry#1#2{\tocentry{#1}{\doshortpageno\bgroup#2\egroup}}  \def\shortunnumberedentry#1#2{\tocentry{#1}{\doshortpageno\bgroup#2\egroup}}
4078    
4079  % Sections.  % Sections.
4080  \def\secentry#1#2#3#4{\dosecentry{#2.#3\labelspace#1}{#4}}  \def\secentry#1#2#3#4{\dosecentry{#2.#3\labelspace#1}{#4}}
4081  \def\unnumbsecentry#1#2{\dosecentry{#1}{#2}}  \def\unnumbsecentry#1#2#3{\dosecentry{#1}{#3}}
4082    
4083  % Subsections.  % Subsections.
4084  \def\subsecentry#1#2#3#4#5{\dosubsecentry{#2.#3.#4\labelspace#1}{#5}}  \def\subsecentry#1#2#3#4#5{\dosubsecentry{#2.#3.#4\labelspace#1}{#5}}
4085  \def\unnumbsubsecentry#1#2{\dosubsecentry{#1}{#2}}  \def\unnumbsubsecentry#1#2#3#4{\dosubsecentry{#1}{#4}}
4086    
4087  % And subsubsections.  % And subsubsections.
4088  \def\subsubsecentry#1#2#3#4#5#6{%  \def\subsubsecentry#1#2#3#4#5#6{%
4089    \dosubsubsecentry{#2.#3.#4.#5\labelspace#1}{#6}}    \dosubsubsecentry{#2.#3.#4.#5\labelspace#1}{#6}}
4090  \def\unnumbsubsubsecentry#1#2{\dosubsubsecentry{#1}{#2}}  \def\unnumbsubsubsecentry#1#2#3#4#5{\dosubsubsecentry{#1}{#5}}
4091    
4092  % This parameter controls the indentation of the various levels.  % This parameter controls the indentation of the various levels.
4093  \newdimen\tocindent \tocindent = 3pc  \newdimen\tocindent \tocindent = 3pc
# Line 4012  width0pt\relax} \fi Line 4128  width0pt\relax} \fi
4128  \def\tocentry#1#2{\begingroup  \def\tocentry#1#2{\begingroup
4129    \vskip 0pt plus1pt % allow a little stretch for the sake of nice page breaks    \vskip 0pt plus1pt % allow a little stretch for the sake of nice page breaks
4130    % Do not use \turnoffactive in these arguments.  Since the toc is    % Do not use \turnoffactive in these arguments.  Since the toc is
4131    % typeset in cmr, so characters such as _ would come out wrong; we    % typeset in cmr, characters such as _ would come out wrong; we
4132    % have to do the usual translation tricks.    % have to do the usual translation tricks.
4133    \entry{#1}{#2}%    \entry{#1}{#2}%
4134  \endgroup}  \endgroup}
# Line 4032  width0pt\relax} \fi Line 4148  width0pt\relax} \fi
4148  \message{environments,}  \message{environments,}
4149  % @foo ... @end foo.  % @foo ... @end foo.
4150    
4151    % @point{}, @result{}, @expansion{}, @print{}, @equiv{}.
4152    %
4153  % Since these characters are used in examples, it should be an even number of  % Since these characters are used in examples, it should be an even number of
4154  % \tt widths. Each \tt character is 1en, so two makes it 1em.  % \tt widths. Each \tt character is 1en, so two makes it 1em.
4155  % 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{}.  
4156  \def\point{$\star$}  \def\point{$\star$}
4157  \def\result{\leavevmode\raise.15ex\hbox to 1em{\hfil$\Rightarrow$\hfil}}  \def\result{\leavevmode\raise.15ex\hbox to 1em{\hfil$\Rightarrow$\hfil}}
4158  \def\expansion{\leavevmode\raise.1ex\hbox to 1em{\hfil$\mapsto$\hfil}}  \def\expansion{\leavevmode\raise.1ex\hbox to 1em{\hfil$\mapsto$\hfil}}
4159  \def\print{\leavevmode\lower.1ex\hbox to 1em{\hfil$\dashv$\hfil}}  \def\print{\leavevmode\lower.1ex\hbox to 1em{\hfil$\dashv$\hfil}}
4160  \def\equiv{\leavevmode\lower.1ex\hbox to 1em{\hfil$\ptexequiv$\hfil}}  \def\equiv{\leavevmode\lower.1ex\hbox to 1em{\hfil$\ptexequiv$\hfil}}
4161    
4162    % The @error{} command.
4163  % Adapted from the TeXbook's \boxit.  % Adapted from the TeXbook's \boxit.
4164    %
4165    \newbox\errorbox
4166    %
4167  {\tentt \global\dimen0 = 3em}% Width of the box.  {\tentt \global\dimen0 = 3em}% Width of the box.
4168  \dimen2 = .55pt % Thickness of rules  \dimen2 = .55pt % Thickness of rules
4169  % The text. (`r' is open on the right, `e' somewhat less so on the left.)  % The text. (`r' is open on the right, `e' somewhat less so on the left.)
4170  \setbox0 = \hbox{\kern-.75pt \tensf error\kern-1.5pt}  \setbox0 = \hbox{\kern-.75pt \tensf error\kern-1.5pt}
4171    %
4172  \global\setbox\errorbox=\hbox to \dimen0{\hfil  \global\setbox\errorbox=\hbox to \dimen0{\hfil
4173     \hsize = \dimen0 \advance\hsize by -5.8pt % Space to left+right.     \hsize = \dimen0 \advance\hsize by -5.8pt % Space to left+right.
4174     \advance\hsize by -2\dimen2 % Rules.     \advance\hsize by -2\dimen2 % Rules.
# Line 4072  width0pt\relax} \fi Line 4179  width0pt\relax} \fi
4179           \kern3pt\vrule width\dimen2}% Space to right.           \kern3pt\vrule width\dimen2}% Space to right.
4180        \hrule height\dimen2}        \hrule height\dimen2}
4181      \hfil}      \hfil}
4182    %
 % The @error{} command.  
4183  \def\error{\leavevmode\lower.7ex\copy\errorbox}  \def\error{\leavevmode\lower.7ex\copy\errorbox}
4184    
4185  % @tex ... @end tex    escapes into raw Tex temporarily.  % @tex ... @end tex    escapes into raw Tex temporarily.
# Line 4113  width0pt\relax} \fi Line 4219  width0pt\relax} \fi
4219    \def\@{@}%    \def\@{@}%
4220  \let\Etex=\endgroup}  \let\Etex=\endgroup}
4221    
4222  % Define @lisp ... @endlisp.  % Define @lisp ... @end lisp.
4223  % @lisp does a \begingroup so it can rebind things,  % @lisp does a \begingroup so it can rebind things,
4224  % including the definition of @endlisp (which normally is erroneous).  % including the definition of @end lisp (which normally is erroneous).
4225    
4226  % Amount to narrow the margins by for @lisp.  % Amount to narrow the margins by for @lisp.
4227  \newskip\lispnarrowing \lispnarrowing=0.4in  \newskip\lispnarrowing \lispnarrowing=0.4in
# Line 4146  width0pt\relax} \fi Line 4252  width0pt\relax} \fi
4252  % is reset to zero; thus the \afterenvbreak inserts no space -- but the  % is reset to zero; thus the \afterenvbreak inserts no space -- but the
4253  % start of the next paragraph will insert \parskip  % start of the next paragraph will insert \parskip
4254  %  %
4255  \def\aboveenvbreak{{\advance\envskipamount by \parskip  \def\aboveenvbreak{{%
4256  \endgraf \ifdim\lastskip<\envskipamount    \ifnum\lastpenalty < 10000
4257  \removelastskip \penalty-50 \vskip\envskipamount \fi}}      \advance\envskipamount by \parskip
4258        \endgraf
4259        \ifdim\lastskip<\envskipamount
4260          \removelastskip
4261          \penalty-50
4262          \vskip\envskipamount
4263        \fi
4264      \fi
4265    }}
4266    
4267  \let\afterenvbreak = \aboveenvbreak  \let\afterenvbreak = \aboveenvbreak
4268    
# Line 4280  width0pt\relax} \fi Line 4394  width0pt\relax} \fi
4394  \def\smalllispx{\begingroup  \def\smalllispx{\begingroup
4395    \def\Esmalllisp{\nonfillfinish\endgroup}%    \def\Esmalllisp{\nonfillfinish\endgroup}%
4396    \def\Esmallexample{\nonfillfinish\endgroup}%    \def\Esmallexample{\nonfillfinish\endgroup}%
4397    \smallfonts    \smallexamplefonts
4398    \lisp    \lisp
4399  }  }
4400    
# Line 4291  width0pt\relax} \fi Line 4405  width0pt\relax} \fi
4405    \let\Edisplay = \nonfillfinish    \let\Edisplay = \nonfillfinish
4406    \gobble    \gobble
4407  }  }
4408    %
4409  % @smalldisplay (when @smallbook): @display plus smaller fonts.  % @smalldisplay (when @smallbook): @display plus smaller fonts.
4410  %  %
4411  \def\smalldisplayx{\begingroup  \def\smalldisplayx{\begingroup
4412    \def\Esmalldisplay{\nonfillfinish\endgroup}%    \def\Esmalldisplay{\nonfillfinish\endgroup}%
4413    \smallfonts \rm    \smallexamplefonts \rm
4414    \display    \display
4415  }  }
4416    
# Line 4308  width0pt\relax} \fi Line 4422  width0pt\relax} \fi
4422    \let\Eformat = \nonfillfinish    \let\Eformat = \nonfillfinish
4423    \gobble    \gobble
4424  }  }
4425    %
4426  % @smallformat (when @smallbook): @format plus smaller fonts.  % @smallformat (when @smallbook): @format plus smaller fonts.
4427  %  %
4428  \def\smallformatx{\begingroup  \def\smallformatx{\begingroup
4429    \def\Esmallformat{\nonfillfinish\endgroup}%    \def\Esmallformat{\nonfillfinish\endgroup}%
4430    \smallfonts \rm    \smallexamplefonts \rm
4431    \format    \format
4432  }  }
4433    
# Line 4355  width0pt\relax} \fi Line 4469  width0pt\relax} \fi
4469    
4470    
4471  % LaTeX-like @verbatim...@end verbatim and @verb{<char>...<char>}  % LaTeX-like @verbatim...@end verbatim and @verb{<char>...<char>}
4472  % If we want to allow any <char> as delimiter,  % If we want to allow any <char> as delimiter,
4473  % we need the curly braces so that makeinfo sees the @verb command, eg:  % we need the curly braces so that makeinfo sees the @verb command, eg:
4474  % `@verbx...x' would look like the '@verbx' command.  --janneke@gnu.org  % `@verbx...x' would look like the '@verbx' command.  --janneke@gnu.org
4475  %  %
# Line 4429  width0pt\relax} \fi Line 4543  width0pt\relax} \fi
4543    \everypar{\starttabbox}%    \everypar{\starttabbox}%
4544  }  }
4545    
4546  % Do the @verb magic: verbatim text is quoted by unique  % Do the @verb magic: verbatim text is quoted by unique
4547  % delimiter characters.  Before first delimiter expect a  % delimiter characters.  Before first delimiter expect a
4548  % right brace, after last delimiter expect closing brace:  % right brace, after last delimiter expect closing brace:
4549  %  %
4550  %    \def\doverb'{'<char>#1<char>'}'{#1}  %    \def\doverb'{'<char>#1<char>'}'{#1}
# Line 4449  width0pt\relax} \fi Line 4563  width0pt\relax} \fi
4563  %  %
4564  %     \def\doverbatim#1@end verbatim{#1}  %     \def\doverbatim#1@end verbatim{#1}
4565  %  %
4566  % For Texinfo it's a lot easier than for LaTeX,  % For Texinfo it's a lot easier than for LaTeX,
4567  % because texinfo's \verbatim doesn't stop at '\end{verbatim}':  % because texinfo's \verbatim doesn't stop at '\end{verbatim}':
4568  % we need not redefine '\', '{' and '}'  % we need not redefine '\', '{' and '}'
4569  %  %
# Line 4505  width0pt\relax} \fi Line 4619  width0pt\relax} \fi
4619    \endgroup\nonfillfinish\endgroup    \endgroup\nonfillfinish\endgroup
4620  }  }
4621    
4622    % @copying ... @end copying.
4623    % Save the text away for @insertcopying later.
4624    %
4625    \newbox\copyingbox
4626    %
4627    \def\copying{\begingroup
4628      \parindent = 0pt  % looks wrong on title page
4629      \def\Ecopying{\egroup\endgroup}%
4630      \global\setbox\copyingbox = \vbox\bgroup
4631    }
4632    
4633    % @insertcopying.
4634    %
4635    \def\insertcopying{\unvcopy\copyingbox}
4636    
4637    
4638  \message{defuns,}  \message{defuns,}
4639  % @defun etc.  % @defun etc.
# Line 4601  width0pt\relax} \fi Line 4730  width0pt\relax} \fi
4730  {\df #1}\enskip        % Generate function name  {\df #1}\enskip        % Generate function name
4731  }  }
4732    
4733  % Actually process the body of a definition  % Common pieces to start any @def...
 % #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}  
   
4734  % #1 is the \E... control sequence to end the definition (which we define).  % #1 is the \E... control sequence to end the definition (which we define).
4735  % #2 is the \...x control sequence for consecutive fns (which we define).  % #2 is the \...x control sequence (which our caller defines).
4736  % #3 is the control sequence to call to resume processing.  % #3 is the control sequence to process the header, such as \defunheader.
4737    %
4738    \def\parsebodycommon#1#2#3{%
4739      \begingroup\inENV
4740      % If there are two @def commands in a row, we'll have a \nobreak,
4741      % which is there to keep the function description together with its
4742      % header.  But if there's nothing but headers, we want to allow a
4743      % break after all.
4744      \ifnum\lastpenalty = 10000 \penalty0 \fi
4745      \medbreak
4746      %
4747      % Define the \E... end token that this defining construct specifies
4748      % so that it will exit this group.
4749      \def#1{\endgraf\endgroup\medbreak}%
4750      %
4751      \parindent=0in
4752      \advance\leftskip by \defbodyindent
4753      \exdentamount=\defbodyindent
4754    }
4755    
4756    % Process body of @defun, @deffn, @defmac, etc.
4757    %
4758    \def\defparsebody#1#2#3{%
4759      \parsebodycommon{#1}{#2}{#3}%
4760      \def#2{\begingroup\obeylines\activeparens\spacesplit#3}%
4761      \catcode61=\active % 61 is `='
4762      \begingroup\obeylines\activeparens
4763      \spacesplit#3%
4764    }
4765    
4766    % #1, #2, #3 are the common arguments (see \defparsebody).
4767  % #4, delimited by the space, is the class name.  % #4, delimited by the space, is the class name.
4768  %  %
4769  \def\defmethparsebody#1#2#3#4 {\begingroup\inENV %  \def\defmethparsebody#1#2#3#4 {%
4770  \medbreak %    \parsebodycommon{#1}{#2}{#3}%
4771  % Define the end token that this defining construct specifies    \def#2##1 {\begingroup\obeylines\activeparens\spacesplit{#3{##1}}}%
4772  % so that it will exit this group.    \begingroup\obeylines\activeparens
4773  \def#1{\endgraf\endgroup\medbreak}%    \spacesplit{#3{#4}}%
4774  \def#2##1 {\begingroup\obeylines\activeparens\spacesplit{#3{##1}}}%  }
 \parindent=0in  
 \advance\leftskip by \defbodyindent  
 \exdentamount=\defbodyindent  
 \begingroup\obeylines\activeparens\spacesplit{#3{#4}}}  
4775    
4776  % Used for @deftypemethod and @deftypeivar.  % Used for @deftypemethod and @deftypeivar.
4777  % #1 is the \E... control sequence to end the definition (which we define).  % #1, #2, #3 are the common arguments (see \defparsebody).
 % #2 is the \...x control sequence for consecutive fns (which we define).  
 % #3 is the control sequence to call to resume processing.  
4778  % #4, delimited by a space, is the class name.  % #4, delimited by a space, is the class name.
4779  % #5 is the method's return type.  % #5 is the method's return type.
4780  %  %
4781  \def\deftypemethparsebody#1#2#3#4 #5 {\begingroup\inENV  \def\deftypemethparsebody#1#2#3#4 #5 {%
4782    \medbreak    \parsebodycommon{#1}{#2}{#3}%
   \def#1{\endgraf\endgroup\medbreak}%  
4783    \def#2##1 ##2 {\begingroup\obeylines\activeparens\spacesplit{#3{##1}{##2}}}%    \def#2##1 ##2 {\begingroup\obeylines\activeparens\spacesplit{#3{##1}{##2}}}%
4784    \parindent=0in    \begingroup\obeylines\activeparens
4785    \advance\leftskip by \defbodyindent    \spacesplit{#3{#4}{#5}}%
4786    \exdentamount=\defbodyindent  }
   \begingroup\obeylines\activeparens\spacesplit{#3{#4}{#5}}}  
4787    
4788  % Used for @deftypeop.  The change from \deftypemethparsebody is an  % Used for @deftypeop.  The change from \deftypemethparsebody is an
4789  % extra argument at the beginning which is the `category', instead of it  % extra argument at the beginning which is the `category', instead of it
# Line 4658  width0pt\relax} \fi Line 4791  width0pt\relax} \fi
4791  % to account for this both in the \...x definition and in parsing the  % to account for this both in the \...x definition and in parsing the
4792  % input at hand.  Thus also need a control sequence (passed as #5) for  % input at hand.  Thus also need a control sequence (passed as #5) for
4793  % the \E... definition to assign the category name to.  % the \E... definition to assign the category name to.
4794  %  %
4795  \def\deftypeopparsebody#1#2#3#4#5 #6 {\begingroup\inENV  \def\deftypeopparsebody#1#2#3#4#5 #6 {%
4796    \medbreak    \parsebodycommon{#1}{#2}{#3}%
   \def#1{\endgraf\endgroup\medbreak}%  
4797    \def#2##1 ##2 ##3 {%    \def#2##1 ##2 ##3 {%
4798      \def#4{##1}%      \def#4{##1}%
4799      \begingroup\obeylines\activeparens\spacesplit{#3{##2}{##3}}}%      \begingroup\obeylines\activeparens\spacesplit{#3{##2}{##3}}}%
4800    \parindent=0in    \begingroup\obeylines\activeparens
4801    \advance\leftskip by \defbodyindent    \spacesplit{#3{#5}{#6}}%
4802    \exdentamount=\defbodyindent  }
   \begingroup\obeylines\activeparens\spacesplit{#3{#5}{#6}}}  
4803    
4804  \def\defopparsebody #1#2#3#4#5 {\begingroup\inENV %  % For @defop.
4805  \medbreak %  \def\defopparsebody #1#2#3#4#5 {%
4806  % Define the end token that this defining construct specifies    \parsebodycommon{#1}{#2}{#3}%
4807  % so that it will exit this group.    \def#2##1 ##2 {\def#4{##1}%
4808  \def#1{\endgraf\endgroup\medbreak}%      \begingroup\obeylines\activeparens\spacesplit{#3{##2}}}%
4809  \def#2##1 ##2 {\def#4{##1}%    \begingroup\obeylines\activeparens
4810  \begingroup\obeylines\activeparens\spacesplit{#3{##2}}}%    \spacesplit{#3{#5}}%
4811  \parindent=0in  }
 \advance\leftskip by \defbodyindent  
 \exdentamount=\defbodyindent  
 \begingroup\obeylines\activeparens\spacesplit{#3{#5}}}  
4812    
4813  % These parsing functions are similar to the preceding ones  % These parsing functions are similar to the preceding ones
4814  % except that they do not make parens into active characters.  % except that they do not make parens into active characters.
4815  % These are used for "variables" since they have no arguments.  % 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.  
4816  %  %
4817  \def\parsebodycommon#1#2#3{%  \def\defvarparsebody #1#2#3{%
4818    \begingroup\inENV %    \parsebodycommon{#1}{#2}{#3}%
4819    \medbreak %    \def#2{\begingroup\obeylines\spacesplit#3}%
4820    % Define the end token that this defining construct specifies    \catcode61=\active %
   % 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  
4821    \begingroup\obeylines    \begingroup\obeylines
4822      \spacesplit#3%
4823    }
4824    
4825    % @defopvar.
4826    \def\defopvarparsebody #1#2#3#4#5 {%
4827      \parsebodycommon{#1}{#2}{#3}%
4828      \def#2##1 ##2 {\def#4{##1}%
4829        \begingroup\obeylines\spacesplit{#3{##2}}}%
4830      \begingroup\obeylines
4831      \spacesplit{#3{#5}}%
4832  }  }
4833    
4834  \def\defvrparsebody#1#2#3#4 {%  \def\defvrparsebody#1#2#3#4 {%
4835    \parsebodycommon{#1}{#2}{#3}%    \parsebodycommon{#1}{#2}{#3}%
4836      \def#2##1 {\begingroup\obeylines\spacesplit{#3{##1}}}%
4837      \begingroup\obeylines
4838    \spacesplit{#3{#4}}%    \spacesplit{#3{#4}}%
4839  }  }
4840    
# Line 4731  width0pt\relax} \fi Line 4849  width0pt\relax} \fi
4849  %  %
4850  \def\deftpparsebody #1#2#3#4 {%  \def\deftpparsebody #1#2#3#4 {%
4851    \parsebodycommon{#1}{#2}{#3}%    \parsebodycommon{#1}{#2}{#3}%
4852      \def#2##1 {\begingroup\obeylines\spacesplit{#3{##1}}}%
4853      \begingroup\obeylines
4854    \spacesplit{\parsetpheaderline{#3{#4}}}\empty    \spacesplit{\parsetpheaderline{#3{#4}}}\empty
4855  }  }
4856    
# Line 4747  width0pt\relax} \fi Line 4867  width0pt\relax} \fi
4867    #1{\removeemptybraces#2\relax}{#3}%    #1{\removeemptybraces#2\relax}{#3}%
4868  }%  }%
4869    
 \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}}}  
   
4870  % Split up #2 at the first space token.  % Split up #2 at the first space token.
4871  % call #1 with two arguments:  % call #1 with two arguments:
4872  %  the first is all of #2 before the space token,  %  the first is all of #2 before the space token,
4873  %  the second is all of #2 after that space token.  %  the second is all of #2 after that space token.
4874  % If #2 contains no space token, all of it is passed as the first arg  % If #2 contains no space token, all of it is passed as the first arg
4875  % and the second is passed as empty.  % and the second is passed as empty.
4876    %
4877  {\obeylines  {\obeylines
4878  \gdef\spacesplit#1#2^^M{\endgroup\spacesplitfoo{#1}#2 \relax\spacesplitfoo}%  \gdef\spacesplit#1#2^^M{\endgroup\spacesplitfoo{#1}#2 \relax\spacesplitfoo}%
4879  \long\gdef\spacesplitfoo#1#2 #3#4\spacesplitfoo{%  \long\gdef\spacesplitfoo#1#2 #3#4\spacesplitfoo{%
4880  \ifx\relax #3%  \ifx\relax #3%
4881  #1{#2}{}\else #1{#2}{#3#4}\fi}}  #1{#2}{}\else #1{#2}{#3#4}\fi}}
4882    
 % So much for the things common to all kinds of definitions.  
   
4883  % Define @defun.  % Define @defun.
4884    
4885  % First, define the processing that is wanted for arguments of \defun  % First, define the processing that is wanted for arguments of \defun
# Line 4833  width0pt\relax} \fi Line 4939  width0pt\relax} \fi
4939  % #1 is the data type, #2 the name, #3 the args.  % #1 is the data type, #2 the name, #3 the args.
4940  \def\deftypefunheaderx #1#2 #3\relax{%  \def\deftypefunheaderx #1#2 #3\relax{%
4941  \doind {fn}{\code{#2}}% Make entry in function index  \doind {fn}{\code{#2}}% Make entry in function index
4942  \begingroup\defname {\defheaderxcond#1\relax$$$#2}{\putwordDeftypefun}%  \begingroup\defname {\defheaderxcond#1\relax$.$#2}{\putwordDeftypefun}%
4943  \deftypefunargs {#3}\endgroup %  \deftypefunargs {#3}\endgroup %
4944  \catcode 61=\other % Turn off change made in \defparsebody  \catcode 61=\other % Turn off change made in \defparsebody
4945  }  }
# Line 4842  width0pt\relax} \fi Line 4948  width0pt\relax} \fi
4948    
4949  \def\deftypefn{\defmethparsebody\Edeftypefn\deftypefnx\deftypefnheader}  \def\deftypefn{\defmethparsebody\Edeftypefn\deftypefnx\deftypefnheader}
4950    
4951  % \defheaderxcond#1\relax$$$  % \defheaderxcond#1\relax$.$
4952  % puts #1 in @code, followed by a space, but does nothing if #1 is null.  % puts #1 in @code, followed by a space, but does nothing if #1 is null.
4953  \def\defheaderxcond#1#2$$${\ifx#1\relax\else\code{#1#2} \fi}  \def\defheaderxcond#1#2$.${\ifx#1\relax\else\code{#1#2} \fi}
4954    
4955  % #1 is the classification.  #2 is the data type.  #3 is the name and args.  % #1 is the classification.  #2 is the data type.  #3 is the name and args.
4956  \def\deftypefnheader #1#2#3{\deftypefnheaderx{#1}{#2}#3 \relax}  \def\deftypefnheader #1#2#3{\deftypefnheaderx{#1}{#2}#3 \relax}
# Line 4854  width0pt\relax} \fi Line 4960  width0pt\relax} \fi
4960  \begingroup  \begingroup
4961  \normalparens % notably, turn off `&' magic, which prevents  \normalparens % notably, turn off `&' magic, which prevents
4962  %               at least some C++ text from working  %               at least some C++ text from working
4963  \defname {\defheaderxcond#2\relax$$$#3}{#1}%  \defname {\defheaderxcond#2\relax$.$#3}{#1}%
4964  \deftypefunargs {#4}\endgroup %  \deftypefunargs {#4}\endgroup %
4965  \catcode 61=\other % Turn off change made in \defparsebody  \catcode 61=\other % Turn off change made in \defparsebody
4966  }  }
# Line 4900  width0pt\relax} \fi Line 5006  width0pt\relax} \fi
5006  \def\deftypeopheader#1#2#3#4{%  \def\deftypeopheader#1#2#3#4{%
5007    \dosubind{fn}{\code{#3}}{\putwordon\ \code{#1}}% entry in function index    \dosubind{fn}{\code{#3}}{\putwordon\ \code{#1}}% entry in function index
5008    \begingroup    \begingroup
5009      \defname{\defheaderxcond#2\relax$$$#3}      \defname{\defheaderxcond#2\relax$.$#3}
5010              {\deftypeopcategory\ \putwordon\ \code{#1}}%              {\deftypeopcategory\ \putwordon\ \code{#1}}%
5011      \deftypefunargs{#4}%      \deftypefunargs{#4}%
5012    \endgroup    \endgroup
# Line 4915  width0pt\relax} \fi Line 5021  width0pt\relax} \fi
5021  \def\deftypemethodheader#1#2#3#4{%  \def\deftypemethodheader#1#2#3#4{%
5022    \dosubind{fn}{\code{#3}}{\putwordon\ \code{#1}}% entry in function index    \dosubind{fn}{\code{#3}}{\putwordon\ \code{#1}}% entry in function index
5023    \begingroup    \begingroup
5024      \defname{\defheaderxcond#2\relax$$$#3}{\putwordMethodon\ \code{#1}}%      \defname{\defheaderxcond#2\relax$.$#3}{\putwordMethodon\ \code{#1}}%
5025      \deftypefunargs{#4}%      \deftypefunargs{#4}%
5026    \endgroup    \endgroup
5027  }  }
# Line 4929  width0pt\relax} \fi Line 5035  width0pt\relax} \fi
5035  \def\deftypeivarheader#1#2#3{%  \def\deftypeivarheader#1#2#3{%
5036    \dosubind{vr}{\code{#3}}{\putwordof\ \code{#1}}% entry in variable index    \dosubind{vr}{\code{#3}}{\putwordof\ \code{#1}}% entry in variable index
5037    \begingroup    \begingroup
5038      \defname{\defheaderxcond#2\relax$$$#3}      \defname{\defheaderxcond#2\relax$.$#3}
5039              {\putwordInstanceVariableof\ \code{#1}}%              {\putwordInstanceVariableof\ \code{#1}}%
5040      \defvarargs{#3}%      \defvarargs{#3}%
5041    \endgroup    \endgroup
# Line 5012  width0pt\relax} \fi Line 5118  width0pt\relax} \fi
5118  % is actually part of the data type, which should not be put into the index.  % is actually part of the data type, which should not be put into the index.
5119  \def\deftypevarheader #1#2{%  \def\deftypevarheader #1#2{%
5120  \dovarind#2 \relax% Make entry in variables index  \dovarind#2 \relax% Make entry in variables index
5121  \begingroup\defname {\defheaderxcond#1\relax$$$#2}{\putwordDeftypevar}%  \begingroup\defname {\defheaderxcond#1\relax$.$#2}{\putwordDeftypevar}%
5122  \interlinepenalty=10000  \interlinepenalty=10000
5123  \endgraf\nobreak\vskip -\parskip\nobreak  \endgraf\nobreak\vskip -\parskip\nobreak
5124  \endgroup}  \endgroup}
# Line 5023  width0pt\relax} \fi Line 5129  width0pt\relax} \fi
5129  \def\deftypevr{\defvrparsebody\Edeftypevr\deftypevrx\deftypevrheader}  \def\deftypevr{\defvrparsebody\Edeftypevr\deftypevrx\deftypevrheader}
5130    
5131  \def\deftypevrheader #1#2#3{\dovarind#3 \relax%  \def\deftypevrheader #1#2#3{\dovarind#3 \relax%
5132  \begingroup\defname {\defheaderxcond#2\relax$$$#3}{#1}  \begingroup\defname {\defheaderxcond#2\relax$.$#3}{#1}
5133  \interlinepenalty=10000  \interlinepenalty=10000
5134  \endgraf\nobreak\vskip -\parskip\nobreak  \endgraf\nobreak\vskip -\parskip\nobreak
5135  \endgroup}  \endgroup}
# Line 5042  width0pt\relax} \fi Line 5148  width0pt\relax} \fi
5148    
5149  % These definitions are used if you use @defunx (etc.)  % These definitions are used if you use @defunx (etc.)
5150  % anywhere other than immediately after a @defun or @defunx.  % anywhere other than immediately after a @defun or @defunx.
5151  %  %
5152  \def\defcvx#1 {\errmessage{@defcvx in invalid context}}  \def\defcvx#1 {\errmessage{@defcvx in invalid context}}
5153  \def\deffnx#1 {\errmessage{@deffnx in invalid context}}  \def\deffnx#1 {\errmessage{@deffnx in invalid context}}
5154  \def\defivarx#1 {\errmessage{@defivarx in invalid context}}  \def\defivarx#1 {\errmessage{@defivarx in invalid context}}
# Line 5183  width0pt\relax} \fi Line 5289  width0pt\relax} \fi
5289       \message{Warning: redefining \the\macname}%       \message{Warning: redefining \the\macname}%
5290    \else    \else
5291       \expandafter\ifx\csname \the\macname\endcsname \relax       \expandafter\ifx\csname \the\macname\endcsname \relax
5292       \else \errmessage{The name \the\macname\space is reserved}\fi       \else \errmessage{Macro name \the\macname\space already defined}\fi
5293       \global\cslet{macsave.\the\macname}{\the\macname}%       \global\cslet{macsave.\the\macname}{\the\macname}%
5294       \global\expandafter\let\csname ismacro.\the\macname\endcsname=1%       \global\expandafter\let\csname ismacro.\the\macname\endcsname=1%
5295       % Add the macroname to \macrolist       % Add the macroname to \macrolist
# Line 5464  width0pt\relax} \fi Line 5570  width0pt\relax} \fi
5570    \ifpdf    \ifpdf
5571      \leavevmode      \leavevmode
5572      \getfilename{#4}%      \getfilename{#4}%
5573      \ifnum\filenamelength>0      {\normalturnoffactive
5574        \startlink attr{/Border [0 0 0]}%       \ifnum\filenamelength>0
5575          goto file{\the\filename.pdf} name{#1@}%         \startlink attr{/Border [0 0 0]}%
5576      \else           goto file{\the\filename.pdf} name{#1}%
5577        \startlink attr{/Border [0 0 0]}%       \else
5578          goto name{#1@}%         \startlink attr{/Border [0 0 0]}%
5579      \fi           goto name{#1}%
5580         \fi
5581        }%
5582      \linkcolor      \linkcolor
5583    \fi    \fi
5584    %    %
# Line 5732  width0pt\relax} \fi Line 5840  width0pt\relax} \fi
5840    %    %
5841    \smallfonts \rm    \smallfonts \rm
5842    %    %
5843    % Hang the footnote text off the number.    % Because we use hanging indentation in footnotes, a @noindent appears
5844    \hang    % to exdent this text, so make it be a no-op.  makeinfo does not use
5845      % hanging indentation so @noindent can still be needed within footnote
5846      % text after an @example or the like (not that this is good style).
5847      \let\noindent = \relax
5848      %
5849      % Hang the footnote text off the number.  Use \everypar in case the
5850      % footnote extends for more than one paragraph.
5851      \everypar = {\hang}%
5852    \textindent{\thisfootno}%    \textindent{\thisfootno}%
5853    %    %
5854    % Don't crash into the line above the footnote text.  Since this    % Don't crash into the line above the footnote text.  Since this
# Line 5750  width0pt\relax} \fi Line 5865  width0pt\relax} \fi
5865    
5866  }%end \catcode `\@=11  }%end \catcode `\@=11
5867    
 % 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  
   }%  
 }  
   
5868  % @| inserts a changebar to the left of the current line.  It should  % @| inserts a changebar to the left of the current line.  It should
5869  % surround any changed text.  This approach does *not* work if the  % surround any changed text.  This approach does *not* work if the
5870  % change spans more than two lines of output.  To handle that, we would  % change spans more than two lines of output.  To handle that, we would
# Line 5832  width0pt\relax} \fi Line 5929  width0pt\relax} \fi
5929        \global\warnednoepsftrue        \global\warnednoepsftrue
5930      \fi      \fi
5931    \else    \else
5932      \imagexxx #1,,,\finish      \imagexxx #1,,,,,\finish
5933    \fi    \fi
5934  }  }
5935  %  %
5936  % Arguments to @image:  % Arguments to @image:
5937  % #1 is (mandatory) image filename; we tack on .eps extension.  % #1 is (mandatory) image filename; we tack on .eps extension.
5938  % #2 is (optional) width, #3 is (optional) height.  % #2 is (optional) width, #3 is (optional) height.
5939  % #4 is just the usual extra ignored arg for parsing this stuff.  % #4 is (ignored optional) html alt text.
5940  \def\imagexxx#1,#2,#3,#4\finish{%  % #5 is (ignored optional) extension.
5941    % #6 is just the usual extra ignored arg for parsing this stuff.
5942    \newif\ifimagevmode
5943    \def\imagexxx#1,#2,#3,#4,#5,#6\finish{\begingroup
5944      \catcode`\^^M = 5     % in case we're inside an example
5945      \normalturnoffactive  % allow _ et al. in names
5946      % If the image is by itself, center it.
5947      \ifvmode
5948        \imagevmodetrue
5949        \nobreak\bigskip
5950        % Usually we'll have text after the image which will insert
5951        % \parskip glue, so insert it here too to equalize the space
5952        % above and below.
5953        \nobreak\vskip\parskip
5954        \nobreak
5955        \line\bgroup\hss
5956      \fi
5957      %
5958      % Output the image.
5959    \ifpdf    \ifpdf
5960      \centerline{\dopdfimage{#1}{#2}{#3}}%      \dopdfimage{#1}{#2}{#3}%
5961    \else    \else
5962      % \epsfbox itself resets \epsf?size at each figure.      % \epsfbox itself resets \epsf?size at each figure.
5963      \setbox0 = \hbox{\ignorespaces #2}\ifdim\wd0 > 0pt \epsfxsize=#2\relax \fi      \setbox0 = \hbox{\ignorespaces #2}\ifdim\wd0 > 0pt \epsfxsize=#2\relax \fi
5964      \setbox0 = \hbox{\ignorespaces #3}\ifdim\wd0 > 0pt \epsfysize=#3\relax \fi      \setbox0 = \hbox{\ignorespaces #3}\ifdim\wd0 > 0pt \epsfysize=#3\relax \fi
5965      \begingroup      \epsfbox{#1.eps}%
       \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  
5966    \fi    \fi
5967  }    %
5968      \ifimagevmode \hss \egroup \bigbreak \fi  % space after the image
5969    \endgroup}
5970    
5971    
5972  \message{localization,}  \message{localization,}
# Line 5935  should work if nowhere else does.} Line 6035  should work if nowhere else does.}
6035  }  }
6036    
6037  % Parameters in order: 1) textheight; 2) textwidth; 3) voffset;  % Parameters in order: 1) textheight; 2) textwidth; 3) voffset;
6038  % 4) hoffset; 5) binding offset; 6) topskip.  Then whoever calls us can  % 4) hoffset; 5) binding offset; 6) topskip.  We also call
6039  % set \parskip and call \setleading for \baselineskip.  % \setleading{\textleading}, so the caller should define \textleading.
6040    % The caller should also set \parskip.
6041  %  %
6042  \def\internalpagesizes#1#2#3#4#5#6{%  \def\internalpagesizes#1#2#3#4#5#6{%
6043    \voffset = #3\relax    \voffset = #3\relax
# Line 5957  should work if nowhere else does.} Line 6058  should work if nowhere else does.}
6058    \normaloffset = #4\relax    \normaloffset = #4\relax
6059    \bindingoffset = #5\relax    \bindingoffset = #5\relax
6060    %    %
6061      \setleading{\textleading}
6062      %
6063    \parindent = \defaultparindent    \parindent = \defaultparindent
6064    \setemergencystretch    \setemergencystretch
6065  }  }
6066    
6067  % Use `small' versions.  % Use `small' versions.
6068  %  %
6069  \def\smallenvironments{%  \def\smallenvironments{%
6070    \let\smalldisplay = \smalldisplayx    \let\smalldisplay = \smalldisplayx
6071    \let\smallexample = \smalllispx    \let\smallexample = \smalllispx
# Line 5973  should work if nowhere else does.} Line 6076  should work if nowhere else does.}
6076  % @letterpaper (the default).  % @letterpaper (the default).
6077  \def\letterpaper{{\globaldefs = 1  \def\letterpaper{{\globaldefs = 1
6078    \parskip = 3pt plus 2pt minus 1pt    \parskip = 3pt plus 2pt minus 1pt
6079    \setleading{13.2pt}%    \textleading = 13.2pt
6080    %    %
6081    % If page is nothing but text, make it come out even.    % If page is nothing but text, make it come out even.
6082    \internalpagesizes{46\baselineskip}{6in}{\voffset}{.25in}{\bindingoffset}{36pt}%    \internalpagesizes{46\baselineskip}{6in}{\voffset}{.25in}{\bindingoffset}{36pt}%
# Line 5982  should work if nowhere else does.} Line 6085  should work if nowhere else does.}
6085  % Use @smallbook to reset parameters for 7x9.5 (or so) format.  % Use @smallbook to reset parameters for 7x9.5 (or so) format.
6086  \def\smallbook{{\globaldefs = 1  \def\smallbook{{\globaldefs = 1
6087    \parskip = 2pt plus 1pt    \parskip = 2pt plus 1pt
6088    \setleading{12pt}%    \textleading = 12pt
6089    %    %
6090    \internalpagesizes{7.5in}{5.in}{\voffset}{.25in}{\bindingoffset}{16pt}%    \internalpagesizes{7.5in}{5.in}{\voffset}{.25in}{\bindingoffset}{16pt}%
6091    %    %
# Line 5997  should work if nowhere else does.} Line 6100  should work if nowhere else does.}
6100    
6101  % Use @afourpaper to print on European A4 paper.  % Use @afourpaper to print on European A4 paper.
6102  \def\afourpaper{{\globaldefs = 1  \def\afourpaper{{\globaldefs = 1
   \setleading{12pt}%  
6103    \parskip = 3pt plus 2pt minus 1pt    \parskip = 3pt plus 2pt minus 1pt
6104      \textleading = 12pt
6105    %    %
6106    \internalpagesizes{53\baselineskip}{160mm}{\voffset}{4mm}{\bindingoffset}{44pt}%    \internalpagesizes{53\baselineskip}{160mm}{\voffset}{4mm}{\bindingoffset}{44pt}%
6107    %    %
# Line 6010  should work if nowhere else does.} Line 6113  should work if nowhere else does.}
6113  % From romildo@urano.iceb.ufop.br, 2 July 2000.  % From romildo@urano.iceb.ufop.br, 2 July 2000.
6114  % He also recommends making @example and @lisp be small.  % He also recommends making @example and @lisp be small.
6115  \def\afivepaper{{\globaldefs = 1  \def\afivepaper{{\globaldefs = 1
   \setleading{12.5pt}%  
6116    \parskip = 2pt plus 1pt minus 0.1pt    \parskip = 2pt plus 1pt minus 0.1pt
6117      \textleading = 12.5pt
6118    %    %
6119    \internalpagesizes{166mm}{120mm}{\voffset}{-8mm}{\bindingoffset}{8pt}%    \internalpagesizes{166mm}{120mm}{\voffset}{-8mm}{\bindingoffset}{8pt}%
6120    %    %
# Line 6029  should work if nowhere else does.} Line 6132  should work if nowhere else does.}
6132  % A specific text layout, 24x15cm overall, intended for A4 paper.  Top margin  % A specific text layout, 24x15cm overall, intended for A4 paper.  Top margin
6133  % 29mm, hence bottom margin 28mm, nominal side margin 3cm.  % 29mm, hence bottom margin 28mm, nominal side margin 3cm.
6134  \def\afourlatex{{\globaldefs = 1  \def\afourlatex{{\globaldefs = 1
6135    \setleading{13.6pt}%    \textleading = 13.6pt
6136    %    %
6137    \afourpaper    \afourpaper
6138    \internalpagesizes{237mm}{150mm}{3.6mm}{3.6mm}{3mm}{7mm}%    \internalpagesizes{237mm}{150mm}{3.6mm}{3.6mm}{3mm}{7mm}%
6139    %    %
6140      % Must explicitly reset to 0 because we call \afourpaper, apparently,
6141      % although this does not entirely make sense.
6142    \globaldefs = 0    \globaldefs = 0
6143  }}  }}
6144    
# Line 6041  should work if nowhere else does.} Line 6146  should work if nowhere else does.}
6146  \def\afourwide{%  \def\afourwide{%
6147    \afourpaper    \afourpaper
6148    \internalpagesizes{6.5in}{9.5in}{\hoffset}{\normaloffset}{\bindingoffset}{7mm}%    \internalpagesizes{6.5in}{9.5in}{\hoffset}{\normaloffset}{\bindingoffset}{7mm}%
   %  
   \globaldefs = 0  
6149  }  }
6150    
6151  % @pagesizes TEXTHEIGHT[,TEXTWIDTH]  % @pagesizes TEXTHEIGHT[,TEXTWIDTH]
# Line 6056  should work if nowhere else does.} Line 6159  should work if nowhere else does.}
6159    \globaldefs = 1    \globaldefs = 1
6160    %    %
6161    \parskip = 3pt plus 2pt minus 1pt    \parskip = 3pt plus 2pt minus 1pt
6162    \setleading{13.2pt}%    \setleading{\textleading}%
6163    %    %
6164    \internalpagesizes{#1}{\hsize}{\voffset}{\normaloffset}{\bindingoffset}{44pt}%    \internalpagesizes{#1}{\hsize}{\voffset}{\normaloffset}{\bindingoffset}{44pt}%
6165  }}  }}
# Line 6086  should work if nowhere else does.} Line 6189  should work if nowhere else does.}
6189  \def\normalless{<}  \def\normalless{<}
6190  \def\normalgreater{>}  \def\normalgreater{>}
6191  \def\normalplus{+}  \def\normalplus{+}
6192  \def\normaldollar{$}  \def\normaldollar{$}%$ font-lock fix
6193    
6194  % This macro is used to make a character print one way in ttfont  % This macro is used to make a character print one way in ttfont
6195  % where it can probably just be output, and another way in other fonts,  % where it can probably just be output, and another way in other fonts,
# Line 6135  should work if nowhere else does.} Line 6238  should work if nowhere else does.}
6238  \catcode`\+=\active  \catcode`\+=\active
6239  \def+{{\tt \char 43}}  \def+{{\tt \char 43}}
6240  \catcode`\$=\active  \catcode`\$=\active
6241  \def${\ifusingit{{\sl\$}}\normaldollar}  \def${\ifusingit{{\sl\$}}\normaldollar}%$ font-lock fix
6242  %\catcode 27=\active  %\catcode 27=\active
6243  %\def^^[{$\diamondsuit$}  %\def^^[{$\diamondsuit$}
6244    
# Line 6180  should work if nowhere else does.} Line 6283  should work if nowhere else does.}
6283  @let<=@normalless  @let<=@normalless
6284  @let>=@normalgreater  @let>=@normalgreater
6285  @let+=@normalplus  @let+=@normalplus
6286  @let$=@normaldollar}  @let$=@normaldollar}%$ font-lock fix
6287    
6288  @def@normalturnoffactive{@let"=@normaldoublequote  @def@normalturnoffactive{@let"=@normaldoublequote
6289  @let\=@normalbackslash  @let\=@normalbackslash
# Line 6191  should work if nowhere else does.} Line 6294  should work if nowhere else does.}
6294  @let<=@normalless  @let<=@normalless
6295  @let>=@normalgreater  @let>=@normalgreater
6296  @let+=@normalplus  @let+=@normalplus
6297  @let$=@normaldollar}  @let$=@normaldollar}%$ font-lock fix
6298    
6299  % Make _ and + \other characters, temporarily.  % Make _ and + \other characters, temporarily.
6300  % This is canceled by @fixbackslash.  % This is canceled by @fixbackslash.
# Line 6219  should work if nowhere else does.} Line 6322  should work if nowhere else does.}
6322  % Say @foo, not \foo, in error messages.  % Say @foo, not \foo, in error messages.
6323  @escapechar = `@@  @escapechar = `@@
6324    
6325  % These look ok in all fonts, so just make them not special.    % These look ok in all fonts, so just make them not special.
6326  @catcode`@& = @other  @catcode`@& = @other
6327  @catcode`@# = @other  @catcode`@# = @other
6328  @catcode`@% = @other  @catcode`@% = @other

Legend:
Removed from v.1.1  
changed lines
  Added in v.1.1.16.1

savannah-hackers-public@gnu.org
ViewVC Help
Powered by ViewVC 1.1.26