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 |
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 |
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 |
|
|
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 |
% |
% |
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 |
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}% |
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 |
% |
% |
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} |
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 |
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 |
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}% |
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% |
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) >>}% |
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 |
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 |
|
|
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'). |
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 |
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} |
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} |
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 |
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 |
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 |
% |
% |
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 |
|
|
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} |
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 |
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{% |
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. |
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 |
|
|
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 |
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 |
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 |
|
|
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 '}% |
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 |
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 |
|
|
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 |
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. |
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 = {% |
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 |
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 |
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 |
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 |
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{% |
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 |
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 |
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 |
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. |
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 |
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} |
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. |
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. |
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 |
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 |
|
|
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 |
|
|
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 |
|
|
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 |
|
|
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 |
% |
% |
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} |
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 |
% |
% |
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. |
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 |
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 |
|
|
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 |
|
|
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 |
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 |
} |
} |
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} |
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 |
} |
} |
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 |
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 |
} |
} |
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 |
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} |
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} |
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}} |
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 |
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 |
% |
% |
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 |
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 |
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,} |
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 |
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 |
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}% |
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 |
% |
% |
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 |
% |
% |
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 |
% |
% |
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 |
|
|
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] |
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 |
}} |
}} |
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, |
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 |
|
|
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 |
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. |
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 |