version 1.1, 1997/05/21 20:40:05
|
version 1.2, 1998/06/17 16:55:15
|
Line 1
|
Line 1
|
%% TeX macros to handle texinfo files |
% texinfo.tex -- TeX macros to handle Texinfo files. |
|
% $Id$ |
% Copyright (C) 1985, 86, 88, 90, 91, 92, 93, |
% |
% 94, 95, 1996 Free Software Foundation, Inc. |
% Copyright (C) 1985, 86, 88, 90, 91, 92, 93, 94, 95, 96, 97, 98 |
|
% Free Software Foundation, Inc. |
%This texinfo.tex file is free software; you can redistribute it and/or |
% |
%modify it under the terms of the GNU General Public License as |
% This texinfo.tex file is free software; you can redistribute it and/or |
%published by the Free Software Foundation; either version 2, or (at |
% modify it under the terms of the GNU General Public License as |
%your option) any later version. |
% published by the Free Software Foundation; either version 2, or (at |
|
% your option) any later version. |
%This texinfo.tex file is distributed in the hope that it will be |
% |
%useful, but WITHOUT ANY WARRANTY; without even the implied warranty |
% This texinfo.tex file is distributed in the hope that it will be |
%of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
% useful, but WITHOUT ANY WARRANTY; without even the implied warranty |
%General Public License for more details. |
% of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
|
% General Public License for more details. |
%You should have received a copy of the GNU General Public License |
% |
%along with this texinfo.tex file; see the file COPYING. If not, write |
% You should have received a copy of the GNU General Public License |
%to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, |
% along with this texinfo.tex file; see the file COPYING. If not, write |
%Boston, MA 02111-1307, USA. |
% to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, |
|
% Boston, MA 02111-1307, USA. |
|
% |
%In other words, you are welcome to use, share and improve this program. |
% In other words, you are welcome to use, share and improve this program. |
%You are forbidden to forbid anyone else to use, share and improve |
% You are forbidden to forbid anyone else to use, share and improve |
%what you give them. Help stamp out software-hoarding! |
% what you give them. Help stamp out software-hoarding! |
|
% |
|
% Please try the latest version of texinfo.tex before submitting bug |
% Send bug reports to bug-texinfo@prep.ai.mit.edu. |
% reports; you can get the latest version from: |
% Please include a *precise* test case in each bug report. |
% ftp://ftp.cs.umb.edu/pub/tex/texinfo.tex |
|
% /home/gd/gnu/doc/texinfo.tex on the GNU machines. |
|
% |
|
% Send bug reports to bug-texinfo@gnu.org. |
|
% Please include a precise test case in each bug report, |
|
% including a complete document with which we can reproduce the problem. |
|
% |
|
% Texinfo macros (with @macro) are *not* supported by texinfo.tex. You |
|
% have to run makeinfo -E to expand macros first; the texi2dvi script |
|
% does this. |
|
|
|
|
% Make it possible to create a .fmt file just by loading this file: |
% Make it possible to create a .fmt file just by loading this file: |
Line 53
|
Line 62
|
\let\ptexdot=\. |
\let\ptexdot=\. |
\let\ptexdots=\dots |
\let\ptexdots=\dots |
\let\ptexend=\end |
\let\ptexend=\end |
\let\ptexequiv = \equiv |
\let\ptexequiv=\equiv |
|
\let\ptexexclam=\! |
\let\ptexi=\i |
\let\ptexi=\i |
\let\ptexlbrace=\{ |
\let\ptexlbrace=\{ |
\let\ptexrbrace=\} |
\let\ptexrbrace=\} |
\let\ptexstar=\* |
\let\ptexstar=\* |
\let\ptext=\t |
\let\ptext=\t |
\let\ptextilde=\~ |
|
|
|
% Be sure we're in horizontal mode when doing a tie, since we make space |
% Be sure we're in horizontal mode when doing a tie, since we make space |
% equivalent to this in @example-like environments. Otherwise, a space |
% equivalent to this in @example-like environments. Otherwise, a space |
Line 72
|
Line 81
|
\global\let\tiepenalty = \@M |
\global\let\tiepenalty = \@M |
\gdef\tie{\leavevmode\penalty\tiepenalty\ } |
\gdef\tie{\leavevmode\penalty\tiepenalty\ } |
} |
} |
\let\~ = \tie % And make it available as @~. |
|
|
|
|
|
\message{Basics,} |
\message{Basics,} |
Line 102
|
Line 110
|
\hyphenation{ap-pen-dix} |
\hyphenation{ap-pen-dix} |
\hyphenation{mini-buf-fer mini-buf-fers} |
\hyphenation{mini-buf-fer mini-buf-fers} |
\hyphenation{eshell} |
\hyphenation{eshell} |
|
\hyphenation{white-space} |
|
|
% Margin to add to right of even pages, to left of odd pages. |
% Margin to add to right of even pages, to left of odd pages. |
\newdimen \bindingoffset |
\newdimen \bindingoffset |
\newdimen \normaloffset |
\newdimen \normaloffset |
\newdimen\pagewidth \newdimen\pageheight |
\newdimen\pagewidth \newdimen\pageheight |
|
|
% Sometimes it is convenient to have everything in the transcript file |
% Sometimes it is convenient to have everything in the transcript file |
Line 119
|
Line 128
|
\showboxbreadth\maxdimen\showboxdepth\maxdimen |
\showboxbreadth\maxdimen\showboxdepth\maxdimen |
}% |
}% |
|
|
%---------------------Begin change----------------------- |
% For @cropmarks command. |
|
% Do @cropmarks to get crop marks. |
|
% |
|
\newif\ifcropmarks |
|
\let\cropmarks = \cropmarkstrue |
% |
% |
%%%% For @cropmarks command. |
% Dimensions to add cropmarks at corners. |
% Dimensions to add cropmarks at corners Added by P. A. MacKay, 12 Nov. 1986 |
% Added by P. A. MacKay, 12 Nov. 1986 |
% |
% |
\newdimen\cornerlong \newdimen\cornerthick |
\newdimen\cornerlong \newdimen\cornerthick |
\newdimen \topandbottommargin |
\newdimen\topandbottommargin |
\newdimen \outerhsize \newdimen \outervsize |
\newdimen\outerhsize \newdimen\outervsize |
\cornerlong=1pc\cornerthick=.3pt % These set size of cropmarks |
\cornerlong=1pc\cornerthick=.3pt % These set size of cropmarks |
\outerhsize=7in |
\outerhsize=7in |
%\outervsize=9.5in |
%\outervsize=9.5in |
% Alternative @smallbook page size is 9.25in |
% Alternative @smallbook page size is 9.25in |
\outervsize=9.25in |
\outervsize=9.25in |
\topandbottommargin=.75in |
\topandbottommargin=.75in |
% |
|
%---------------------End change----------------------- |
% Main output routine. |
|
\chardef\PAGE = 255 |
|
\output = {\onepageout{\pagecontents\PAGE}} |
|
|
|
\newbox\headlinebox |
|
\newbox\footlinebox |
|
|
% \onepageout takes a vbox as an argument. Note that \pagecontents |
% \onepageout takes a vbox as an argument. Note that \pagecontents |
% does insertions, but you have to call it yourself. |
% does insertions, but you have to call it yourself. |
\chardef\PAGE=255 \output={\onepageout{\pagecontents\PAGE}} |
|
\def\onepageout#1{% |
\def\onepageout#1{% |
\hoffset=\normaloffset |
\ifcropmarks \hoffset=0pt \else \hoffset=\normaloffset \fi |
|
% |
\ifodd\pageno \advance\hoffset by \bindingoffset |
\ifodd\pageno \advance\hoffset by \bindingoffset |
\else \advance\hoffset by -\bindingoffset\fi |
\else \advance\hoffset by -\bindingoffset\fi |
|
% |
|
% Do this outside of the \shipout so @code etc. will be expanded in |
|
% the headline as they should be, not taken literally (outputting ''code). |
|
\setbox\headlinebox = \vbox{\let\hsize=\pagewidth \makeheadline}% |
|
\setbox\footlinebox = \vbox{\let\hsize=\pagewidth \makefootline}% |
|
% |
{% |
{% |
\escapechar = `\\ % use backslash in output files. |
% Have to do this stuff outside the \shipout because we want it to |
\indexdummies |
% take effect in \write's, yet the group defined by the \vbox ends |
|
% before the \shipout runs. |
|
% |
|
\escapechar = `\\ % use backslash in output files. |
|
\indexdummies % don't expand commands in the output. |
|
\normalturnoffactive % \ in index entries must not stay \, e.g., if |
|
% the page break happens to be in the middle of an example. |
\shipout\vbox{% |
\shipout\vbox{% |
{\let\hsize=\pagewidth \makeheadline}% |
\ifcropmarks \vbox to \outervsize\bgroup |
|
\hsize = \outerhsize |
|
\line{\ewtop\hfil\ewtop}% |
|
\nointerlineskip |
|
\line{% |
|
\vbox{\moveleft\cornerthick\nstop}% |
|
\hfill |
|
\vbox{\moveright\cornerthick\nstop}% |
|
}% |
|
\vskip\topandbottommargin |
|
\line\bgroup |
|
\hfil % center the page within the outer (page) hsize. |
|
\ifodd\pageno\hskip\bindingoffset\fi |
|
\vbox\bgroup |
|
\fi |
|
% |
|
\unvbox\headlinebox |
\pagebody{#1}% |
\pagebody{#1}% |
{\let\hsize=\pagewidth \makefootline}% |
\ifdim\ht\footlinebox > 0pt |
}% |
% Only leave this space if the footline is nonempty. |
}% |
% (We lessened \vsize for it in \oddfootingxxx.) |
|
% The \baselineskip=24pt in plain's \makefootline has no effect. |
|
\vskip 2\baselineskip |
|
\unvbox\footlinebox |
|
\fi |
|
% |
|
\ifcropmarks |
|
\egroup % end of \vbox\bgroup |
|
\hfil\egroup % end of (centering) \line\bgroup |
|
\vskip\topandbottommargin plus1fill minus1fill |
|
\boxmaxdepth = \cornerthick |
|
\line{% |
|
\vbox{\moveleft\cornerthick\nsbot}% |
|
\hfill |
|
\vbox{\moveright\cornerthick\nsbot}% |
|
}% |
|
\nointerlineskip |
|
\line{\ewbot\hfil\ewbot}% |
|
\egroup % \vbox from first cropmarks clause |
|
\fi |
|
}% end of \shipout\vbox |
|
}% end of group with \turnoffactive |
\advancepageno |
\advancepageno |
\ifnum\outputpenalty>-20000 \else\dosupereject\fi |
\ifnum\outputpenalty>-20000 \else\dosupereject\fi |
} |
} |
|
|
%%%% For @cropmarks command %%%% |
|
|
|
% Here is a modification of the main output routine for Near East Publications |
|
% This provides right-angle cropmarks at all four corners. |
|
% The contents of the page are centerlined into the cropmarks, |
|
% and any desired binding offset is added as an \hskip on either |
|
% site of the centerlined box. (P. A. MacKay, 12 November, 1986) |
|
% |
|
\def\croppageout#1{\hoffset=0pt % make sure this doesn't mess things up |
|
{\escapechar=`\\\relax % makes sure backslash is used in output files. |
|
\shipout |
|
\vbox to \outervsize{\hsize=\outerhsize |
|
\vbox{\line{\ewtop\hfill\ewtop}} |
|
\nointerlineskip |
|
\line{\vbox{\moveleft\cornerthick\nstop} |
|
\hfill |
|
\vbox{\moveright\cornerthick\nstop}} |
|
\vskip \topandbottommargin |
|
\centerline{\ifodd\pageno\hskip\bindingoffset\fi |
|
\vbox{ |
|
{\let\hsize=\pagewidth \makeheadline} |
|
\pagebody{#1} |
|
{\let\hsize=\pagewidth \makefootline}} |
|
\ifodd\pageno\else\hskip\bindingoffset\fi} |
|
\vskip \topandbottommargin plus1fill minus1fill |
|
\boxmaxdepth\cornerthick |
|
\line{\vbox{\moveleft\cornerthick\nsbot} |
|
\hfill |
|
\vbox{\moveright\cornerthick\nsbot}} |
|
\nointerlineskip |
|
\vbox{\line{\ewbot\hfill\ewbot}} |
|
}} |
|
\advancepageno |
|
\ifnum\outputpenalty>-20000 \else\dosupereject\fi} |
|
% |
|
% Do @cropmarks to get crop marks |
|
\def\cropmarks{\let\onepageout=\croppageout } |
|
|
|
\newinsert\margin \dimen\margin=\maxdimen |
\newinsert\margin \dimen\margin=\maxdimen |
|
|
\def\pagebody#1{\vbox to\pageheight{\boxmaxdepth=\maxdepth #1}} |
\def\pagebody#1{\vbox to\pageheight{\boxmaxdepth=\maxdepth #1}} |
Line 207
|
Line 236
|
\ifr@ggedbottom \kern-\dimen@ \vfil \fi} |
\ifr@ggedbottom \kern-\dimen@ \vfil \fi} |
} |
} |
|
|
% |
|
% Here are the rules for the cropmarks. Note that they are |
% Here are the rules for the cropmarks. Note that they are |
% offset so that the space between them is truly \outerhsize or \outervsize |
% offset so that the space between them is truly \outerhsize or \outervsize |
% (P. A. MacKay, 12 November, 1986) |
% (P. A. MacKay, 12 November, 1986) |
Line 422
|
Line 450
|
% @. is an end-of-sentence period. |
% @. is an end-of-sentence period. |
\def\.{.\spacefactor=3000 } |
\def\.{.\spacefactor=3000 } |
|
|
% @enddots{} is an end-of-sentence ellipsis. |
|
\gdef\enddots{$\mathinner{\ldotp\ldotp\ldotp\ldotp}$\spacefactor=3000} |
|
|
|
% @! is an end-of-sentence bang. |
% @! is an end-of-sentence bang. |
\gdef\!{!\spacefactor=3000 } |
\def\!{!\spacefactor=3000 } |
|
|
% @? is an end-of-sentence query. |
% @? is an end-of-sentence query. |
\gdef\?{?\spacefactor=3000 } |
\def\?{?\spacefactor=3000 } |
|
|
% @w prevents a word break. Without the \leavevmode, @w at the |
% @w prevents a word break. Without the \leavevmode, @w at the |
% beginning of a paragraph, when TeX is still in vertical mode, would |
% beginning of a paragraph, when TeX is still in vertical mode, would |
Line 554 where each line of input produces a line
|
Line 579 where each line of input produces a line
|
|
|
\let\br = \par |
\let\br = \par |
|
|
% @dots{} output some dots |
% @dots{} output an ellipsis using the current font. |
|
% We do .5em per period so that it has the same spacing in a typewriter |
|
% font as three actual period characters. |
|
% |
|
\def\dots{\hbox to 1.5em{% |
|
\hskip 0pt plus 0.25fil minus 0.25fil |
|
.\hss.\hss.% |
|
\hskip 0pt plus 0.5fil minus 0.5fil |
|
}} |
|
|
|
% @enddots{} is an end-of-sentence ellipsis. |
|
% |
|
\def\enddots{% |
|
\hbox to 2em{% |
|
\hskip 0pt plus 0.25fil minus 0.25fil |
|
.\hss.\hss.\hss.% |
|
\hskip 0pt plus 0.5fil minus 0.5fil |
|
}% |
|
\spacefactor=3000 |
|
} |
|
|
\def\dots{$\ldots$} |
|
|
|
% @page forces the start of a new page |
% @page forces the start of a new page |
|
|
Line 717 where each line of input produces a line
|
Line 760 where each line of input produces a line
|
% |
% |
\def\ignore{\doignore{ignore}} |
\def\ignore{\doignore{ignore}} |
|
|
% Also ignore @ifinfo, @ifhtml, @html, @menu, and @direntry text. |
% Ignore @ifinfo, @ifhtml, @ifnottex, @html, @menu, and @direntry text. |
% |
% |
\def\ifinfo{\doignore{ifinfo}} |
\def\ifinfo{\doignore{ifinfo}} |
\def\ifhtml{\doignore{ifhtml}} |
\def\ifhtml{\doignore{ifhtml}} |
|
\def\ifnottex{\doignore{ifnottex}} |
\def\html{\doignore{html}} |
\def\html{\doignore{html}} |
\def\menu{\doignore{menu}} |
\def\menu{\doignore{menu}} |
\def\direntry{\doignore{direntry}} |
\def\direntry{\doignore{direntry}} |
Line 747 where each line of input produces a line
|
Line 791 where each line of input produces a line
|
% Make sure that spaces turn into tokens that match what \doignoretext wants. |
% Make sure that spaces turn into tokens that match what \doignoretext wants. |
\catcode32 = 10 |
\catcode32 = 10 |
% |
% |
|
% Ignore braces, too, so mismatched braces don't cause trouble. |
|
\catcode`\{ = 9 |
|
\catcode`\} = 9 |
|
% |
% And now expand that command. |
% And now expand that command. |
\doignoretext |
\doignoretext |
} |
} |
Line 838 where each line of input produces a line
|
Line 886 where each line of input produces a line
|
\pretolerance = 10000 |
\pretolerance = 10000 |
% |
% |
% Do not execute instructions in @tex |
% Do not execute instructions in @tex |
\def\tex{\doignore{tex}} |
\def\tex{\doignore{tex}}% |
} |
} |
|
|
% @set VAR sets the variable VAR to an empty value. |
% @set VAR sets the variable VAR to an empty value. |
Line 850 where each line of input produces a line
|
Line 898 where each line of input produces a line
|
% didn't need it. Make sure the catcode of space is correct to avoid |
% didn't need it. Make sure the catcode of space is correct to avoid |
% losing inside @example, for instance. |
% losing inside @example, for instance. |
% |
% |
\def\set{\begingroup\catcode` =10 \parsearg\setxxx} |
\def\set{\begingroup\catcode` =10 |
|
\catcode`\-=12 \catcode`\_=12 % Allow - and _ in VAR. |
|
\parsearg\setxxx} |
\def\setxxx#1{\setyyy#1 \endsetyyy} |
\def\setxxx#1{\setyyy#1 \endsetyyy} |
\def\setyyy#1 #2\endsetyyy{% |
\def\setyyy#1 #2\endsetyyy{% |
\def\temp{#2}% |
\def\temp{#2}% |
Line 871 where each line of input produces a line
|
Line 921 where each line of input produces a line
|
|
|
% @value{foo} gets the text saved in variable foo. |
% @value{foo} gets the text saved in variable foo. |
% |
% |
\def\value#1{\expandafter |
\def\value{\begingroup |
\ifx\csname SET#1\endcsname\relax |
\catcode`\-=12 \catcode`\_=12 % Allow - and _ in VAR. |
{\{No value for ``#1''\}} |
\valuexxx} |
\else \csname SET#1\endcsname \fi} |
\def\valuexxx#1{% |
|
\expandafter\ifx\csname SET#1\endcsname\relax |
|
{\{No value for ``#1''\}}% |
|
\else |
|
\csname SET#1\endcsname |
|
\fi |
|
\endgroup} |
|
|
% @ifset VAR ... @end ifset reads the `...' iff VAR has been defined |
% @ifset VAR ... @end ifset reads the `...' iff VAR has been defined |
% with @set. |
% with @set. |
Line 906 where each line of input produces a line
|
Line 962 where each line of input produces a line
|
\def\ifclearfail{\nestedignore{ifclear}} |
\def\ifclearfail{\nestedignore{ifclear}} |
\defineunmatchedend{ifclear} |
\defineunmatchedend{ifclear} |
|
|
% @iftex always succeeds; we read the text following, through @end |
% @iftex, @ifnothtml, @ifnotinfo always succeed; we read the text |
% iftex). But `@end iftex' should be valid only after an @iftex. |
% following, through the first @end iftex (etc.). Make `@end iftex' |
|
% (etc.) valid only after an @iftex. |
% |
% |
\def\iftex{\conditionalsucceed{iftex}} |
\def\iftex{\conditionalsucceed{iftex}} |
|
\def\ifnothtml{\conditionalsucceed{ifnothtml}} |
|
\def\ifnotinfo{\conditionalsucceed{ifnotinfo}} |
\defineunmatchedend{iftex} |
\defineunmatchedend{iftex} |
|
\defineunmatchedend{ifnothtml} |
|
\defineunmatchedend{ifnotinfo} |
|
|
% 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 (for example) and end it |
% at @end iftex, since then @set commands inside the conditional have no |
% at @end iftex, since then @set commands inside the conditional have no |
Line 986 where each line of input produces a line
|
Line 1047 where each line of input produces a line
|
\openindices |
\openindices |
\fixbackslash % Turn off hack to swallow `\input texinfo'. |
\fixbackslash % Turn off hack to swallow `\input texinfo'. |
\global\let\setfilename=\comment % Ignore extra @setfilename cmds. |
\global\let\setfilename=\comment % Ignore extra @setfilename cmds. |
|
% |
|
% If texinfo.cnf is present on the system, read it. |
|
% Useful for site-wide @afourpaper, etc. |
|
% Just to be on the safe side, close the input stream before the \input. |
|
\openin 1 texinfo.cnf |
|
\ifeof1 \let\temp=\relax \else \def\temp{\input texinfo.cnf }\fi |
|
\closein1 |
|
\temp |
|
% |
\comment % Ignore the actual filename. |
\comment % Ignore the actual filename. |
} |
} |
|
|
Line 1021 where each line of input produces a line
|
Line 1091 where each line of input produces a line
|
% We don't need math for this one. |
% We don't need math for this one. |
\def\ttsl{\tenttsl} |
\def\ttsl{\tenttsl} |
|
|
%% Try out Computer Modern fonts at \magstephalf |
% Use Computer Modern fonts at \magstephalf (11pt). |
\let\mainmagstep=\magstephalf |
\newcount\mainmagstep |
|
\mainmagstep=\magstephalf |
|
|
% 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 |
% specified font prefix (normally `cm'). |
% specified font prefix (normally `cm'). |
Line 1094 where each line of input produces a line
|
Line 1165 where each line of input produces a line
|
\font\indi=cmmi9 |
\font\indi=cmmi9 |
\font\indsy=cmsy9 |
\font\indsy=cmsy9 |
|
|
|
% Fonts for title page: |
|
\setfont\titlerm\rmbshape{12}{\magstep3} |
|
\setfont\titleit\itbshape{10}{\magstep4} |
|
\setfont\titlesl\slbshape{10}{\magstep4} |
|
\setfont\titlett\ttbshape{12}{\magstep3} |
|
\setfont\titlettsl\ttslshape{10}{\magstep4} |
|
\setfont\titlesf\sfbshape{17}{\magstep1} |
|
\let\titlebf=\titlerm |
|
\setfont\titlesc\scbshape{10}{\magstep4} |
|
\font\titlei=cmmi12 scaled \magstep3 |
|
\font\titlesy=cmsy10 scaled \magstep4 |
|
\def\authorrm{\secrm} |
|
|
% Chapter (and unnumbered) fonts (17.28pt). |
% Chapter (and unnumbered) fonts (17.28pt). |
\setfont\chaprm\rmbshape{12}{\magstep2} |
\setfont\chaprm\rmbshape{12}{\magstep2} |
\setfont\chapit\itbshape{10}{\magstep3} |
\setfont\chapit\itbshape{10}{\magstep3} |
\setfont\chapsl\slbshape{10}{\magstep3} |
\setfont\chapsl\slbshape{10}{\magstep3} |
\setfont\chaptt\ttbshape{12}{\magstep2} |
\setfont\chaptt\ttbshape{12}{\magstep2} |
\setfont\chapttsl\ttslshape{10}{\magstep3} |
\setfont\chapttsl\ttslshape{10}{\magstep3} |
\setfont\chapsf\sfbshape{12}{\magstep2} |
\setfont\chapsf\sfbshape{17}{1000} |
\let\chapbf=\chaprm |
\let\chapbf=\chaprm |
\setfont\chapsc\scbshape{10}{\magstep3} |
\setfont\chapsc\scbshape{10}{\magstep3} |
\font\chapi=cmmi12 scaled \magstep2 |
\font\chapi=cmmi12 scaled \magstep2 |
Line 1137 where each line of input produces a line
|
Line 1221 where each line of input produces a line
|
\setfont\ssecit\itbshape{10}{1315} |
\setfont\ssecit\itbshape{10}{1315} |
\setfont\ssecsl\slbshape{10}{1315} |
\setfont\ssecsl\slbshape{10}{1315} |
\setfont\ssectt\ttbshape{12}{\magstephalf} |
\setfont\ssectt\ttbshape{12}{\magstephalf} |
\setfont\ssecttsl\ttslshape{10}{\magstep1} |
\setfont\ssecttsl\ttslshape{10}{1315} |
\setfont\ssecsf\sfbshape{12}{\magstephalf} |
\setfont\ssecsf\sfbshape{12}{\magstephalf} |
\let\ssecbf\ssecrm |
\let\ssecbf\ssecrm |
\setfont\ssecsc\scbshape{10}{\magstep1} |
\setfont\ssecsc\scbshape{10}{\magstep1} |
\font\sseci=cmmi12 scaled \magstephalf |
\font\sseci=cmmi12 scaled \magstephalf |
\font\ssecsy=cmsy10 scaled \magstep1 |
\font\ssecsy=cmsy10 scaled 1315 |
% The smallcaps and symbol fonts should actually be scaled \magstep1.5, |
% The smallcaps and symbol fonts should actually be scaled \magstep1.5, |
% but that is not a standard magnification. |
% but that is not a standard magnification. |
|
|
% Fonts for title page: |
|
\setfont\titlerm\rmbshape{12}{\magstep3} |
|
\let\authorrm = \secrm |
|
|
|
% In order for the font changes to affect most math symbols and letters, |
% In order for the font changes to affect most math symbols and letters, |
% we have to define the \textfont of the standard families. Since |
% we have to define the \textfont of the standard families. Since |
% texinfo doesn't allow for producing subscripts and superscripts, we |
% texinfo doesn't allow for producing subscripts and superscripts, we |
Line 1174 where each line of input produces a line
|
Line 1254 where each line of input produces a line
|
\let\tenbf=\textbf \let\tentt=\texttt \let\smallcaps=\textsc |
\let\tenbf=\textbf \let\tentt=\texttt \let\smallcaps=\textsc |
\let\tensf=\textsf \let\teni=\texti \let\tensy=\textsy \let\tenttsl=\textttsl |
\let\tensf=\textsf \let\teni=\texti \let\tensy=\textsy \let\tenttsl=\textttsl |
\resetmathfonts} |
\resetmathfonts} |
|
\def\titlefonts{% |
|
\let\tenrm=\titlerm \let\tenit=\titleit \let\tensl=\titlesl |
|
\let\tenbf=\titlebf \let\tentt=\titlett \let\smallcaps=\titlesc |
|
\let\tensf=\titlesf \let\teni=\titlei \let\tensy=\titlesy |
|
\let\tenttsl=\titlettsl |
|
\resetmathfonts \setleading{25pt}} |
|
\def\titlefont#1{{\titlefonts\rm #1}} |
\def\chapfonts{% |
\def\chapfonts{% |
\let\tenrm=\chaprm \let\tenit=\chapit \let\tensl=\chapsl |
\let\tenrm=\chaprm \let\tenit=\chapit \let\tensl=\chapsl |
\let\tenbf=\chapbf \let\tentt=\chaptt \let\smallcaps=\chapsc |
\let\tenbf=\chapbf \let\tentt=\chaptt \let\smallcaps=\chapsc |
Line 1200 where each line of input produces a line
|
Line 1287 where each line of input produces a line
|
% |
% |
\textfonts |
\textfonts |
|
|
|
% Define these so they can be easily changed for other fonts. |
|
\def\angleleft{$\langle$} |
|
\def\angleright{$\rangle$} |
|
|
% Count depth in font-changes, for error checks |
% Count depth in font-changes, for error checks |
\newcount\fontdepth \fontdepth=0 |
\newcount\fontdepth \fontdepth=0 |
|
|
Line 1237 where each line of input produces a line
|
Line 1328 where each line of input produces a line
|
\null |
\null |
} |
} |
\let\ttfont=\t |
\let\ttfont=\t |
\def\samp #1{`\tclose{#1}'\null} |
\def\samp#1{`\tclose{#1}'\null} |
\setfont\smallrm\rmshape{8}{1000} |
\setfont\smallrm\rmshape{8}{1000} |
\font\smallsy=cmsy9 |
\font\smallsy=cmsy9 |
\def\key#1{{\smallrm\textfont2=\smallsy \leavevmode\hbox{% |
\def\key#1{{\smallrm\textfont2=\smallsy \leavevmode\hbox{% |
\raise0.4pt\hbox{$\langle$}\kern-.08em\vtop{% |
\raise0.4pt\hbox{\angleleft}\kern-.08em\vtop{% |
\vbox{\hrule\kern-0.4pt |
\vbox{\hrule\kern-0.4pt |
\hbox{\raise0.4pt\hbox{\vphantom{$\langle$}}#1}}% |
\hbox{\raise0.4pt\hbox{\vphantom{\angleleft}}#1}}% |
\kern-0.4pt\hrule}% |
\kern-0.4pt\hrule}% |
\kern-.06em\raise0.4pt\hbox{$\rangle$}}}} |
\kern-.06em\raise0.4pt\hbox{\angleright}}}} |
% The old definition, with no lozenge: |
% The old definition, with no lozenge: |
%\def\key #1{{\ttsl \nohyphenation \uppercase{#1}}\null} |
%\def\key #1{{\ttsl \nohyphenation \uppercase{#1}}\null} |
\def\ctrl #1{{\tt \rawbackslash \hat}#1} |
\def\ctrl #1{{\tt \rawbackslash \hat}#1} |
|
|
\let\file=\samp |
\let\file=\samp |
\let\url=\samp % perhaps include a hypertex \special eventually |
|
\def\email#1{$\langle${\tt #1}$\rangle$} |
|
|
|
% @code is a modification of @t, |
% @code is a modification of @t, |
% which makes spaces the same size as normal in the surrounding text. |
% which makes spaces the same size as normal in the surrounding text. |
Line 1289 where each line of input produces a line
|
Line 1378 where each line of input produces a line
|
{ |
{ |
\catcode`\-=\active |
\catcode`\-=\active |
\catcode`\_=\active |
\catcode`\_=\active |
|
\catcode`\|=\active |
\global\def\code{\begingroup \catcode`\-=\active \let-\codedash \catcode`\_=\active \let_\codeunder \codex} |
\global\def\code{\begingroup \catcode`\-=\active \let-\codedash \catcode`\_=\active \let_\codeunder \codex} |
% The following is used by \doprintindex to insure that long function names |
% The following is used by \doprintindex to insure that long function names |
% wrap around. It is necessary for - and _ to be active before the index is |
% wrap around. It is necessary for - and _ to be active before the index is |
% read from the file, as \entry parses the arguments long before \code is |
% read from the file, as \entry parses the arguments long before \code is |
% ever called. -- mycroft |
% ever called. -- mycroft |
\global\def\indexbreaks{\catcode`\-=\active \let-\realdash \catcode`\_=\active \let_\realunder} |
% _ is always active; and it shouldn't be \let = to an _ that is a |
|
% subscript character anyway. Then, @cindex @samp{_} (for example) |
|
% fails. --karl |
|
\global\def\indexbreaks{% |
|
\catcode`\-=\active \let-\realdash |
|
} |
} |
} |
|
|
\def\realdash{-} |
\def\realdash{-} |
\def\realunder{_} |
|
\def\codedash{-\discretionary{}{}{}} |
\def\codedash{-\discretionary{}{}{}} |
\def\codeunder{\normalunderscore\discretionary{}{}{}} |
\def\codeunder{\ifusingtt{\normalunderscore\discretionary{}{}{}}{\_}} |
\def\codex #1{\tclose{#1}\endgroup} |
\def\codex #1{\tclose{#1}\endgroup} |
|
|
%\let\exp=\tclose %Was temporary |
%\let\exp=\tclose %Was temporary |
|
|
% @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, |
% then @kbd has no effect. |
% then @kbd has no effect. |
% |
|
|
% @kbdinputstyle -- arg is `distinct' (@kbd uses slanted tty font always), |
|
% `example' (@kbd uses ttsl only inside of @example and friends), |
|
% or `code' (@kbd uses normal tty font always). |
|
\def\kbdinputstyle{\parsearg\kbdinputstylexxx} |
|
\def\kbdinputstylexxx#1{% |
|
\def\arg{#1}% |
|
\ifx\arg\worddistinct |
|
\gdef\kbdexamplefont{\ttsl}\gdef\kbdfont{\ttsl}% |
|
\else\ifx\arg\wordexample |
|
\gdef\kbdexamplefont{\ttsl}\gdef\kbdfont{\tt}% |
|
\else\ifx\arg\wordcode |
|
\gdef\kbdexamplefont{\tt}\gdef\kbdfont{\tt}% |
|
\fi\fi\fi |
|
} |
|
\def\worddistinct{distinct} |
|
\def\wordexample{example} |
|
\def\wordcode{code} |
|
|
|
% Default is kbdinputdistinct. (Too much of a hassle to call the macro, |
|
% the catcodes are wrong for parsearg to work.) |
|
\gdef\kbdexamplefont{\ttsl}\gdef\kbdfont{\ttsl} |
|
|
\def\xkey{\key} |
\def\xkey{\key} |
\def\kbdfoo#1#2#3\par{\def\one{#1}\def\three{#3}\def\threex{??}% |
\def\kbdfoo#1#2#3\par{\def\one{#1}\def\three{#3}\def\threex{??}% |
\ifx\one\xkey\ifx\threex\three \key{#2}% |
\ifx\one\xkey\ifx\threex\three \key{#2}% |
\else{\tclose{\ttsl\look}}\fi |
\else{\tclose{\kbdfont\look}}\fi |
\else{\tclose{\ttsl\look}}\fi} |
\else{\tclose{\kbdfont\look}}\fi} |
|
|
|
% @url. Quotes do not seem necessary, so use \code. |
|
\let\url=\code |
|
|
|
% @uref (abbreviation for `urlref') takes an optional second argument |
|
% specifying the text to display. First (mandatory) arg is the url. |
|
% Perhaps eventually put in a hypertex \special here. |
|
% |
|
\def\uref#1{\urefxxx #1,,\finish} |
|
\def\urefxxx#1,#2,#3\finish{% |
|
\setbox0 = \hbox{\ignorespaces #2}% |
|
\ifdim\wd0 > 0pt |
|
\unhbox0\ (\code{#1})% |
|
\else |
|
\code{#1}% |
|
\fi |
|
} |
|
|
|
% rms does not like the angle brackets --karl, 17may97. |
|
% So now @email is just like @uref. |
|
%\def\email#1{\angleleft{\tt #1}\angleright} |
|
\let\email=\uref |
|
|
% Check if we are currently using a typewriter font. Since all the |
% Check if we are currently using a typewriter font. Since all the |
% Computer Modern typewriter fonts have zero interword stretch (and |
% Computer Modern typewriter fonts have zero interword stretch (and |
% shrink), and it is reasonable to expect all typewriter fonts to have |
% shrink), and it is reasonable to expect all typewriter fonts to have |
% this property, we can check that font parameter. |
% this property, we can check that font parameter. |
% |
% |
\def\ifmonospace{\ifdim\fontdimen3\font=0pt } |
\def\ifmonospace{\ifdim\fontdimen3\font=0pt } |
|
|
% Typeset a dimension, e.g., `in' or `pt'. The only reason for the |
% Typeset a dimension, e.g., `in' or `pt'. The only reason for the |
Line 1349 where each line of input produces a line
|
Line 1487 where each line of input produces a line
|
\newskip\titlepagebottomglue \titlepagebottomglue = 2pc |
\newskip\titlepagebottomglue \titlepagebottomglue = 2pc |
|
|
% First the title page. Must do @settitle before @titlepage. |
% First the title page. Must do @settitle before @titlepage. |
\def\titlefont#1{{\titlerm #1}} |
|
|
|
\newif\ifseenauthor |
\newif\ifseenauthor |
\newif\iffinishedtitlepage |
\newif\iffinishedtitlepage |
|
|
Line 1372 where each line of input produces a line
|
Line 1508 where each line of input produces a line
|
% |
% |
% Now you can print the title using @title. |
% Now you can print the title using @title. |
\def\title{\parsearg\titlezzz}% |
\def\title{\parsearg\titlezzz}% |
\def\titlezzz##1{\leftline{\titlefont{##1}} |
\def\titlezzz##1{\leftline{\titlefonts\rm ##1} |
% print a rule at the page bottom also. |
% print a rule at the page bottom also. |
\finishedtitlepagefalse |
\finishedtitlepagefalse |
\vskip4pt \hrule height 4pt width \hsize \vskip4pt}% |
\vskip4pt \hrule height 4pt width \hsize \vskip4pt}% |
Line 1461 where each line of input produces a line
|
Line 1597 where each line of input produces a line
|
\gdef\oddheadingyyy #1@|#2@|#3@|#4\finish{% |
\gdef\oddheadingyyy #1@|#2@|#3@|#4\finish{% |
\global\oddheadline={\rlap{\centerline{#2}}\line{#1\hfil#3}}} |
\global\oddheadline={\rlap{\centerline{#2}}\line{#1\hfil#3}}} |
|
|
\gdef\everyheadingxxx #1{\everyheadingyyy #1@|@|@|@|\finish} |
\gdef\everyheadingxxx#1{\oddheadingxxx{#1}\evenheadingxxx{#1}}% |
\gdef\everyheadingyyy #1@|#2@|#3@|#4\finish{% |
|
\global\evenheadline={\rlap{\centerline{#2}}\line{#1\hfil#3}} |
|
\global\oddheadline={\rlap{\centerline{#2}}\line{#1\hfil#3}}} |
|
|
|
\gdef\evenfootingxxx #1{\evenfootingyyy #1@|@|@|@|\finish} |
\gdef\evenfootingxxx #1{\evenfootingyyy #1@|@|@|@|\finish} |
\gdef\evenfootingyyy #1@|#2@|#3@|#4\finish{% |
\gdef\evenfootingyyy #1@|#2@|#3@|#4\finish{% |
Line 1472 where each line of input produces a line
|
Line 1605 where each line of input produces a line
|
|
|
\gdef\oddfootingxxx #1{\oddfootingyyy #1@|@|@|@|\finish} |
\gdef\oddfootingxxx #1{\oddfootingyyy #1@|@|@|@|\finish} |
\gdef\oddfootingyyy #1@|#2@|#3@|#4\finish{% |
\gdef\oddfootingyyy #1@|#2@|#3@|#4\finish{% |
\global\oddfootline={\rlap{\centerline{#2}}\line{#1\hfil#3}}} |
\global\oddfootline = {\rlap{\centerline{#2}}\line{#1\hfil#3}}% |
|
% |
|
% Leave some space for the footline. Hopefully ok to assume |
|
% @evenfooting will not be used by itself. |
|
\global\advance\pageheight by -\baselineskip |
|
\global\advance\vsize by -\baselineskip |
|
} |
|
|
\gdef\everyfootingxxx #1{\everyfootingyyy #1@|@|@|@|\finish} |
\gdef\everyfootingxxx#1{\oddfootingxxx{#1}\evenfootingxxx{#1}} |
\gdef\everyfootingyyy #1@|#2@|#3@|#4\finish{% |
|
\global\evenfootline={\rlap{\centerline{#2}}\line{#1\hfil#3}} |
|
\global\oddfootline={\rlap{\centerline{#2}}\line{#1\hfil#3}}} |
|
% |
% |
}% unbind the catcode of @. |
}% unbind the catcode of @. |
|
|
Line 1861 July\or August\or September\or October\o
|
Line 1997 July\or August\or September\or October\o
|
\def\itemizeitem{% |
\def\itemizeitem{% |
\advance\itemno by 1 |
\advance\itemno by 1 |
{\let\par=\endgraf \smallbreak}% |
{\let\par=\endgraf \smallbreak}% |
\ifhmode \errmessage{\in hmode at itemizeitem}\fi |
\ifhmode \errmessage{In hmode at itemizeitem}\fi |
{\parskip=0in \hskip 0pt |
{\parskip=0in \hskip 0pt |
\hbox to 0pt{\hss \itemcontents\hskip \itemmargin}% |
\hbox to 0pt{\hss \itemcontents\hskip \itemmargin}% |
\vadjust{\penalty 1200}}% |
\vadjust{\penalty 1200}}% |
Line 1879 July\or August\or September\or October\o
|
Line 2015 July\or August\or September\or October\o
|
|
|
% To make preamble: |
% To make preamble: |
% |
% |
% Either define widths of columns in terms of percent of \hsize: |
% Either define widths of columns in terms of percent of \hsize: |
% @multitable @columnfractions .25 .3 .45 |
% @multitable @columnfractions .25 .3 .45 |
% @item ... |
% @item ... |
% |
% |
Line 1897 July\or August\or September\or October\o
|
Line 2033 July\or August\or September\or October\o
|
% the preamble, break the line within one argument and it |
% the preamble, break the line within one argument and it |
% will parse correctly, i.e., |
% will parse correctly, i.e., |
% |
% |
% @multitable {Column 1 template} {Column 2 template} {Column 3 |
% @multitable {Column 1 template} {Column 2 template} {Column 3 |
% template} |
% template} |
% Not: |
% Not: |
% @multitable {Column 1 template} {Column 2 template} |
% @multitable {Column 1 template} {Column 2 template} |
% {Column 3 template} |
% {Column 3 template} |
|
|
% Each new table line starts with @item, each subsequent new column |
% Each new table line starts with @item, each subsequent new column |
% starts with @tab. Empty columns may be produced by supplying @tab's |
% starts with @tab. Empty columns may be produced by supplying @tab's |
% with nothing between them for as many times as empty columns are needed, |
% with nothing between them for as many times as empty columns are needed, |
% ie, @tab@tab@tab will produce two empty columns. |
% ie, @tab@tab@tab will produce two empty columns. |
Line 1915 July\or August\or September\or October\o
|
Line 2051 July\or August\or September\or October\o
|
|
|
% @multitable {Column 1 template} {Column 2 template} {Column 3 template} |
% @multitable {Column 1 template} {Column 2 template} {Column 3 template} |
% @item first col stuff @tab second col stuff @tab third col |
% @item first col stuff @tab second col stuff @tab third col |
% @item |
% @item |
% first col stuff |
% first col stuff |
% @tab |
% @tab |
% second col stuff |
% second col stuff |
% @tab |
% @tab |
% third col |
% third col |
% @item first col stuff @tab second col stuff |
% @item first col stuff @tab second col stuff |
% @tab Many paragraphs of text may be used in any column. |
% @tab Many paragraphs of text may be used in any column. |
% |
% |
% They will wrap at the width determined by the template. |
% They will wrap at the width determined by the template. |
% @item@tab@tab This will be in third column. |
% @item@tab@tab This will be in third column. |
% @end multitable |
% @end multitable |
Line 1935 July\or August\or September\or October\o
|
Line 2071 July\or August\or September\or October\o
|
% @multitablelinespace is space to leave between table items, baseline |
% @multitablelinespace is space to leave between table items, baseline |
% to baseline. |
% to baseline. |
% 0pt means it depends on current normal line spacing. |
% 0pt means it depends on current normal line spacing. |
|
% |
%%%% |
|
% Dimensions |
|
|
|
\newskip\multitableparskip |
\newskip\multitableparskip |
\newskip\multitableparindent |
\newskip\multitableparindent |
\newdimen\multitablecolspace |
\newdimen\multitablecolspace |
Line 1948 July\or August\or September\or October\o
|
Line 2081 July\or August\or September\or October\o
|
\multitablecolspace=12pt |
\multitablecolspace=12pt |
\multitablelinespace=0pt |
\multitablelinespace=0pt |
|
|
%%%% |
|
% Macros used to set up halign preamble: |
% Macros used to set up halign preamble: |
|
% |
\let\endsetuptable\relax |
\let\endsetuptable\relax |
\def\xendsetuptable{\endsetuptable} |
\def\xendsetuptable{\endsetuptable} |
\let\columnfractions\relax |
\let\columnfractions\relax |
\def\xcolumnfractions{\columnfractions} |
\def\xcolumnfractions{\columnfractions} |
\newif\ifsetpercent |
\newif\ifsetpercent |
|
|
%% 2/1/96, to allow fractions to be given with more than one digit. |
% 2/1/96, to allow fractions to be given with more than one digit. |
\def\pickupwholefraction#1 {\global\advance\colcount by1 % |
\def\pickupwholefraction#1 {\global\advance\colcount by1 % |
\expandafter\xdef\csname col\the\colcount\endcsname{.#1\hsize}% |
\expandafter\xdef\csname col\the\colcount\endcsname{.#1\hsize}% |
\setuptable} |
\setuptable} |
Line 1982 July\or August\or September\or October\o
|
Line 2115 July\or August\or September\or October\o
|
\ifx\go\pickupwholefraction\else\let\go\setuptable\fi% |
\ifx\go\pickupwholefraction\else\let\go\setuptable\fi% |
\fi\go} |
\fi\go} |
|
|
%%%% |
|
% multitable syntax |
% multitable syntax |
\def\tab{&\hskip1sp\relax} % 2/2/96 |
\def\tab{&\hskip1sp\relax} % 2/2/96 |
% tiny skip here makes sure this column space is |
% tiny skip here makes sure this column space is |
% maintained, even if it is never used. |
% maintained, even if it is never used. |
|
|
|
|
%%%% |
|
% @multitable ... @end multitable definitions: |
% @multitable ... @end multitable definitions: |
|
|
\def\multitable{\parsearg\dotable} |
\def\multitable{\parsearg\dotable} |
|
|
\def\dotable#1{\bgroup |
\def\dotable#1{\bgroup |
\let\item\cr |
\vskip\parskip |
\tolerance=9500 |
\let\item\crcr |
\hbadness=9500 |
\tolerance=9500 |
\setmultitablespacing |
\hbadness=9500 |
\parskip=\multitableparskip |
\setmultitablespacing |
\parindent=\multitableparindent |
\parskip=\multitableparskip |
\overfullrule=0pt |
\parindent=\multitableparindent |
\global\colcount=0\relax% |
\overfullrule=0pt |
\def\Emultitable{\global\setpercentfalse\global\everycr{}\cr\egroup\egroup}% |
\global\colcount=0 |
% To parse everything between @multitable and @item : |
\def\Emultitable{\global\setpercentfalse\cr\egroup\egroup}% |
\setuptable#1 \endsetuptable |
% |
% Need to reset this to 0 after \setuptable. |
% To parse everything between @multitable and @item: |
\global\colcount=0\relax% |
\setuptable#1 \endsetuptable |
% |
% |
% This preamble sets up a generic column definition, which will |
% \everycr will reset column counter, \colcount, at the end of |
% be used as many times as user calls for columns. |
% each line. Every column entry will cause \colcount to advance by one. |
% \vtop will set a single line and will also let text wrap and |
% The table preamble |
% continue for many paragraphs if desired. |
% looks at the current \colcount to find the correct column width. |
\halign\bgroup&\global\advance\colcount by 1\relax% |
\everycr{\noalign{% |
\multistrut\vtop{\hsize=\expandafter\csname col\the\colcount\endcsname |
% |
% In order to keep entries from bumping into each other |
% \filbreak%% keeps underfull box messages off when table breaks over pages. |
% we will add a \leftskip of \multitablecolspace to all columns after |
% Maybe so, but it also creates really weird page breaks when the table |
% the first one. |
% breaks over pages. Wouldn't \vfil be better? Wait until the problem |
% If a template has been used, we will add \multitablecolspace |
% manifests itself, so it can be fixed for real --karl. |
% to the width of each template entry. |
\global\colcount=0\relax}}% |
% If user has set preamble in terms of percent of \hsize |
% |
% we will use that dimension as the width of the column, and |
% This preamble sets up a generic column definition, which will |
% the \leftskip will keep entries from bumping into each other. |
% be used as many times as user calls for columns. |
% Table will start at left margin and final column will justify at |
% \vtop will set a single line and will also let text wrap and |
% right margin. |
% continue for many paragraphs if desired. |
\ifnum\colcount=1 |
\halign\bgroup&\global\advance\colcount by 1\relax |
\else |
\multistrut\vtop{\hsize=\expandafter\csname col\the\colcount\endcsname |
\ifsetpercent |
% |
|
% In order to keep entries from bumping into each other |
|
% we will add a \leftskip of \multitablecolspace to all columns after |
|
% the first one. |
|
% |
|
% If a template has been used, we will add \multitablecolspace |
|
% to the width of each template entry. |
|
% |
|
% If the user has set preamble in terms of percent of \hsize we will |
|
% use that dimension as the width of the column, and the \leftskip |
|
% will keep entries from bumping into each other. Table will start at |
|
% left margin and final column will justify at right margin. |
|
% |
|
% Make sure we don't inherit \rightskip from the outer environment. |
|
\rightskip=0pt |
|
\ifnum\colcount=1 |
|
% The first column will be indented with the surrounding text. |
|
\advance\hsize by\leftskip |
\else |
\else |
% If user has <not> set preamble in terms of percent of \hsize |
\ifsetpercent \else |
% we will advance \hsize by \multitablecolspace |
% If user has not set preamble in terms of percent of \hsize |
\advance\hsize by \multitablecolspace |
% we will advance \hsize by \multitablecolspace. |
|
\advance\hsize by \multitablecolspace |
|
\fi |
|
% In either case we will make \leftskip=\multitablecolspace: |
|
\leftskip=\multitablecolspace |
\fi |
\fi |
% In either case we will make \leftskip=\multitablecolspace: |
% Ignoring space at the beginning and end avoids an occasional spurious |
\leftskip=\multitablecolspace |
% blank line, when TeX decides to break the line at the space before the |
\fi |
% box from the multistrut, so the strut ends up on a line by itself. |
\noindent##\multistrut}\cr% |
% For example: |
% \everycr will reset column counter, \colcount, at the end of |
% @multitable @columnfractions .11 .89 |
% each line. Every column entry will cause \colcount to advance by one. |
% @item @code{#} |
% The table preamble |
% @tab Legal holiday which is valid in major parts of the whole country. |
% looks at the current \colcount to find the correct column width. |
% Is automatically provided with highlighting sequences respectively marking |
\global\everycr{\noalign{% |
% characters. |
\filbreak%% keeps underfull box messages off when table breaks over pages. |
\noindent\ignorespaces##\unskip\multistrut}\cr |
\global\colcount=0\relax}} |
|
} |
} |
|
|
\def\setmultitablespacing{% test to see if user has set \multitablelinespace. |
\def\setmultitablespacing{% test to see if user has set \multitablelinespace. |
Line 2054 July\or August\or September\or October\o
|
Line 2203 July\or August\or September\or October\o
|
%% to keep lines equally spaced |
%% to keep lines equally spaced |
\let\multistrut = \strut |
\let\multistrut = \strut |
%% Test to see if parskip is larger than space between lines of |
%% Test to see if parskip is larger than space between lines of |
%% table. If not, do nothing. |
%% table. If not, do nothing. |
%% If so, set to same dimension as multitablelinespace. |
%% If so, set to same dimension as multitablelinespace. |
\else |
\else |
\gdef\multistrut{\vrule height\multitablelinespace depth\dp0 |
\gdef\multistrut{\vrule height\multitablelinespace depth\dp0 |
Line 2189 width0pt\relax} \fi
|
Line 2338 width0pt\relax} \fi
|
%\def\char{\realbackslash char}% |
%\def\char{\realbackslash char}% |
\def\TeX{\realbackslash TeX}% |
\def\TeX{\realbackslash TeX}% |
\def\dots{\realbackslash dots }% |
\def\dots{\realbackslash dots }% |
\def\copyright{\realbackslash copyright }% |
\def\result{\realbackslash result}% |
|
\def\equiv{\realbackslash equiv}% |
|
\def\expansion{\realbackslash expansion}% |
|
\def\print{\realbackslash print}% |
|
\def\error{\realbackslash error}% |
|
\def\point{\realbackslash point}% |
|
\def\copyright{\realbackslash copyright}% |
\def\tclose##1{\realbackslash tclose {##1}}% |
\def\tclose##1{\realbackslash tclose {##1}}% |
\def\code##1{\realbackslash code {##1}}% |
\def\code##1{\realbackslash code {##1}}% |
\def\dotless##1{\realbackslash dotless {##1}}% |
\def\dotless##1{\realbackslash dotless {##1}}% |
Line 2199 width0pt\relax} \fi
|
Line 2354 width0pt\relax} \fi
|
\def\r##1{\realbackslash r {##1}}% |
\def\r##1{\realbackslash r {##1}}% |
\def\i##1{\realbackslash i {##1}}% |
\def\i##1{\realbackslash i {##1}}% |
\def\b##1{\realbackslash b {##1}}% |
\def\b##1{\realbackslash b {##1}}% |
|
\def\sc##1{\realbackslash sc {##1}}% |
\def\cite##1{\realbackslash cite {##1}}% |
\def\cite##1{\realbackslash cite {##1}}% |
\def\key##1{\realbackslash key {##1}}% |
\def\key##1{\realbackslash key {##1}}% |
\def\file##1{\realbackslash file {##1}}% |
\def\file##1{\realbackslash file {##1}}% |
Line 2206 width0pt\relax} \fi
|
Line 2362 width0pt\relax} \fi
|
\def\kbd##1{\realbackslash kbd {##1}}% |
\def\kbd##1{\realbackslash kbd {##1}}% |
\def\dfn##1{\realbackslash dfn {##1}}% |
\def\dfn##1{\realbackslash dfn {##1}}% |
\def\emph##1{\realbackslash emph {##1}}% |
\def\emph##1{\realbackslash emph {##1}}% |
|
\def\value##1{\realbackslash value {##1}}% |
\unsepspaces |
\unsepspaces |
} |
} |
|
|
Line 2296 width0pt\relax} \fi
|
Line 2453 width0pt\relax} \fi
|
\indexdummies % Must do this here, since \bf, etc expand at this stage |
\indexdummies % Must do this here, since \bf, etc expand at this stage |
\escapechar=`\\ |
\escapechar=`\\ |
{% |
{% |
\let\folio=0 % We will expand all macros now EXCEPT \folio. |
\let\folio=0% We will expand all macros now EXCEPT \folio. |
\def\rawbackslashxx{\indexbackslash}% \indexbackslash isn't defined now |
\def\rawbackslashxx{\indexbackslash}% \indexbackslash isn't defined now |
% so it will be output as is; and it will print as backslash. |
% so it will be output as is; and it will print as backslash. |
% |
% |
Line 2370 width0pt\relax} \fi
|
Line 2527 width0pt\relax} \fi
|
|
|
% Define the macros used in formatting output of the sorted index material. |
% Define the macros used in formatting output of the sorted index material. |
|
|
% This is what you call to cause a particular index to get printed. |
% @printindex causes a particular index (the ??s file) to get printed. |
% Write |
% It does not print any chapter heading (usually an @unnumbered). |
% @unnumbered Function Index |
% |
% @printindex fn |
|
|
|
\def\printindex{\parsearg\doprintindex} |
\def\printindex{\parsearg\doprintindex} |
|
|
\def\doprintindex#1{\begingroup |
\def\doprintindex#1{\begingroup |
\dobreak \chapheadingskip{10000}% |
\dobreak \chapheadingskip{10000}% |
% |
% |
\indexfonts \rm |
\indexfonts \rm |
\tolerance = 9500 |
\tolerance = 9500 |
\indexbreaks |
\indexbreaks |
\def\indexbackslash{\rawbackslashxx}% |
|
% Index files are almost Texinfo source, but we use \ as the escape |
|
% character. It would be better to use @, but that's too big a change |
|
% to make right now. |
|
\catcode`\\ = 0 |
|
\catcode`\@ = 11 |
|
\escapechar = `\\ |
|
\begindoublecolumns |
|
% |
% |
% See if the index file exists and is nonempty. |
% See if the index file exists and is nonempty. |
|
% Change catcode of @ here so that if the index file contains |
|
% \initial {@} |
|
% as its first line, TeX doesn't complain about mismatched braces |
|
% (because it thinks @} is a control sequence). |
|
\catcode`\@ = 11 |
\openin 1 \jobname.#1s |
\openin 1 \jobname.#1s |
\ifeof 1 |
\ifeof 1 |
% \enddoublecolumns gets confused if there is no text in the index, |
% \enddoublecolumns gets confused if there is no text in the index, |
Line 2409 width0pt\relax} \fi
|
Line 2560 width0pt\relax} \fi
|
\ifeof 1 |
\ifeof 1 |
(Index is empty) |
(Index is empty) |
\else |
\else |
|
% Index files are almost Texinfo source, but we use \ as the escape |
|
% character. It would be better to use @, but that's too big a change |
|
% to make right now. |
|
\def\indexbackslash{\rawbackslashxx}% |
|
\catcode`\\ = 0 |
|
\escapechar = `\\ |
|
\begindoublecolumns |
\input \jobname.#1s |
\input \jobname.#1s |
|
\enddoublecolumns |
\fi |
\fi |
\fi |
\fi |
\closein 1 |
\closein 1 |
\enddoublecolumns |
|
\endgroup} |
\endgroup} |
|
|
% These macros are used by the sorted index file itself. |
% These macros are used by the sorted index file itself. |
Line 2515 width0pt\relax} \fi
|
Line 2673 width0pt\relax} \fi
|
|
|
\def\begindoublecolumns{\begingroup % ended by \enddoublecolumns |
\def\begindoublecolumns{\begingroup % ended by \enddoublecolumns |
% Grab any single-column material above us. |
% Grab any single-column material above us. |
\output = {\global\setbox\partialpage |
\output = {\global\setbox\partialpage = \vbox{% |
=\vbox{\unvbox255\kern -\topskip \kern \baselineskip}}% |
% |
|
% Here is a possibility not foreseen in manmac: if we accumulate a |
|
% whole lot of material, we might end up calling this \output |
|
% routine twice in a row (see the doublecol-lose test, which is |
|
% essentially a couple of indexes with @setchapternewpage off). In |
|
% that case, we must prevent the second \partialpage from |
|
% simply overwriting the first, causing us to lose the page. |
|
% This will preserve it until a real output routine can ship it |
|
% out. Generally, \partialpage will be empty when this runs and |
|
% this will be a no-op. |
|
\unvbox\partialpage |
|
% |
|
% Unvbox the main output page. |
|
\unvbox255 |
|
\kern-\topskip \kern\baselineskip |
|
}}% |
\eject |
\eject |
% |
% |
% Now switch to the double-column output routine. |
% Use the double-column output routine for subsequent pages. |
\output={\doublecolumnout}% |
\output = {\doublecolumnout}% |
% |
% |
% Change the page size parameters. We could do this once outside this |
% Change the page size parameters. We could do this once outside this |
% routine, in each of @smallbook, @afourpaper, and the default 8.5x11 |
% routine, in each of @smallbook, @afourpaper, and the default 8.5x11 |
% format, but then we repeat the same computation. Repeating a couple |
% format, but then we repeat the same computation. Repeating a couple |
% of assignments once per index is clearly meaningless for the |
% of assignments once per index is clearly meaningless for the |
% execution time, so we may as well do it once. |
% execution time, so we may as well do it in one place. |
% |
% |
% First we halve the line length, less a little for the gutter between |
% First we halve the line length, less a little for the gutter between |
% the columns. We compute the gutter based on the line length, so it |
% the columns. We compute the gutter based on the line length, so it |
% changes automatically with the paper format. The magic constant |
% changes automatically with the paper format. The magic constant |
% below is chosen so that the gutter has the same value (well, +- < |
% below is chosen so that the gutter has the same value (well, +-<1pt) |
% 1pt) as it did when we hard-coded it. |
% as it did when we hard-coded it. |
% |
% |
% We put the result in a separate register, \doublecolumhsize, so we |
% We put the result in a separate register, \doublecolumhsize, so we |
% can restore it in \pagesofar, after \hsize itself has (potentially) |
% can restore it in \pagesofar, after \hsize itself has (potentially) |
Line 2553 width0pt\relax} \fi
|
Line 2726 width0pt\relax} \fi
|
% (undoubled) page height minus any material left over from the |
% (undoubled) page height minus any material left over from the |
% previous page. |
% previous page. |
\dimen@=\pageheight \advance\dimen@ by-\ht\partialpage |
\dimen@=\pageheight \advance\dimen@ by-\ht\partialpage |
% box0 will be the left-hand column, box1 the right. |
% box0 will be the left-hand column, box2 the right. |
\setbox0=\vsplit255 to\dimen@ \setbox2=\vsplit255 to\dimen@ |
\setbox0=\vsplit255 to\dimen@ \setbox2=\vsplit255 to\dimen@ |
\onepageout\pagesofar |
\onepageout\pagesofar |
\unvbox255 \penalty\outputpenalty |
\unvbox255 |
|
\penalty\outputpenalty |
} |
} |
\def\pagesofar{% |
\def\pagesofar{% |
% The contents of the output page -- any previous material, |
% Re-output the contents of the output page -- any previous material, |
% followed by the two boxes we just split. |
% followed by the two boxes we just split. |
\unvbox\partialpage |
\unvbox\partialpage |
\hsize = \doublecolumnhsize |
\hsize = \doublecolumnhsize |
\wd0=\hsize \wd2=\hsize \hbox to\pagewidth{\box0\hfil\box2}% |
\wd0=\hsize \wd2=\hsize \hbox to\pagewidth{\box0\hfil\box2}% |
} |
} |
\def\enddoublecolumns{% |
\def\enddoublecolumns{% |
\output={\balancecolumns}\eject % split what we have |
\output = {\balancecolumns}\eject % split what we have |
\endgroup |
\endgroup % started in \begindoublecolumns |
|
% |
% Back to normal single-column typesetting, but take account of the |
% Back to normal single-column typesetting, but take account of the |
% fact that we just accumulated some stuff on the output page. |
% fact that we just accumulated some stuff on the output page. |
\pagegoal=\vsize |
\pagegoal = \vsize |
} |
} |
\def\balancecolumns{% |
\def\balancecolumns{% |
% Called on the last page of the double column material. |
% Called at the end of the double column material. |
\setbox0=\vbox{\unvbox255}% |
\setbox0 = \vbox{\unvbox255}% |
\dimen@ = \ht0 |
\dimen@ = \ht0 |
\advance\dimen@ by \topskip |
\advance\dimen@ by \topskip |
\advance\dimen@ by-\baselineskip |
\advance\dimen@ by-\baselineskip |
\divide\dimen@ by 2 |
\divide\dimen@ by 2 |
\splittopskip = \topskip |
\splittopskip = \topskip |
% Loop until we get a decent breakpoint. |
% Loop until we get a decent breakpoint. |
{\vbadness=10000 \loop \global\setbox3=\copy0 |
{\vbadness=10000 \loop |
|
\global\setbox3=\copy0 |
\global\setbox1=\vsplit3 to\dimen@ |
\global\setbox1=\vsplit3 to\dimen@ |
\ifdim\ht3>\dimen@ \global\advance\dimen@ by1pt \repeat}% |
\ifdim\ht3>\dimen@ \global\advance\dimen@ by1pt |
|
\repeat}% |
\setbox0=\vbox to\dimen@{\unvbox1}% |
\setbox0=\vbox to\dimen@{\unvbox1}% |
\setbox2=\vbox to\dimen@{\unvbox3}% |
\setbox2=\vbox to\dimen@{\unvbox3}% |
\pagesofar |
\pagesofar |
} |
} |
\catcode `\@=\other |
\catcode`\@ = \other |
|
|
|
|
\message{sectioning,} |
\message{sectioning,} |
% Define chapters, sections, etc. |
% Define chapters, sections, etc. |
|
|
\newcount \chapno |
\newcount\chapno |
\newcount \secno \secno=0 |
\newcount\secno \secno=0 |
\newcount \subsecno \subsecno=0 |
\newcount\subsecno \subsecno=0 |
\newcount \subsubsecno \subsubsecno=0 |
\newcount\subsubsecno \subsubsecno=0 |
|
|
% This counter is funny since it counts through charcodes of letters A, B, ... |
% This counter is funny since it counts through charcodes of letters A, B, ... |
\newcount \appendixno \appendixno = `\@ |
\newcount\appendixno \appendixno = `\@ |
\def\appendixletter{\char\the\appendixno} |
\def\appendixletter{\char\the\appendixno} |
|
|
\newwrite \contentsfile |
\newwrite\contentsfile |
% This is called from \setfilename. |
% This is called from \setfilename. |
\def\opencontents{\openout \contentsfile = \jobname.toc} |
\def\opencontents{\openout\contentsfile = \jobname.toc } |
|
|
% Each @chapter defines this as the name of the chapter. |
% Each @chapter defines this as the name of the chapter. |
% page headings and footings can use it. @section does likewise |
% page headings and footings can use it. @section does likewise |
|
|
\def\thischapter{} \def\thissection{} |
\def\thischapter{} \def\thissection{} |
\def\seccheck#1{\if \pageno<0 % |
\def\seccheck#1{\ifnum \pageno<0 |
\errmessage{@#1 not allowed after generating table of contents}\fi |
\errmessage{@#1 not allowed after generating table of contents}% |
% |
\fi} |
} |
|
|
|
\def\chapternofonts{% |
\def\chapternofonts{% |
\let\rawbackslash=\relax% |
\let\rawbackslash=\relax |
\let\frenchspacing=\relax% |
\let\frenchspacing=\relax |
\def\result{\realbackslash result} |
\def\result{\realbackslash result}% |
\def\equiv{\realbackslash equiv} |
\def\equiv{\realbackslash equiv}% |
\def\expansion{\realbackslash expansion} |
\def\expansion{\realbackslash expansion}% |
\def\print{\realbackslash print} |
\def\print{\realbackslash print}% |
\def\TeX{\realbackslash TeX} |
\def\TeX{\realbackslash TeX}% |
\def\dots{\realbackslash dots} |
\def\dots{\realbackslash dots}% |
\def\copyright{\realbackslash copyright} |
\def\result{\realbackslash result}% |
\def\tt{\realbackslash tt} |
\def\equiv{\realbackslash equiv}% |
\def\bf{\realbackslash bf } |
\def\expansion{\realbackslash expansion}% |
\def\w{\realbackslash w} |
\def\print{\realbackslash print}% |
\def\less{\realbackslash less} |
\def\error{\realbackslash error}% |
\def\gtr{\realbackslash gtr} |
\def\point{\realbackslash point}% |
\def\hat{\realbackslash hat} |
\def\copyright{\realbackslash copyright}% |
\def\char{\realbackslash char} |
\def\tt{\realbackslash tt}% |
\def\tclose##1{\realbackslash tclose {##1}} |
\def\bf{\realbackslash bf}% |
\def\code##1{\realbackslash code {##1}} |
\def\w{\realbackslash w}% |
\def\samp##1{\realbackslash samp {##1}} |
\def\less{\realbackslash less}% |
\def\r##1{\realbackslash r {##1}} |
\def\gtr{\realbackslash gtr}% |
\def\b##1{\realbackslash b {##1}} |
\def\hat{\realbackslash hat}% |
\def\key##1{\realbackslash key {##1}} |
\def\char{\realbackslash char}% |
\def\file##1{\realbackslash file {##1}} |
\def\tclose##1{\realbackslash tclose{##1}}% |
\def\kbd##1{\realbackslash kbd {##1}} |
\def\code##1{\realbackslash code{##1}}% |
% These are redefined because @smartitalic wouldn't work inside xdef. |
\def\samp##1{\realbackslash samp{##1}}% |
\def\i##1{\realbackslash i {##1}} |
\def\r##1{\realbackslash r{##1}}% |
\def\cite##1{\realbackslash cite {##1}} |
\def\b##1{\realbackslash b{##1}}% |
\def\var##1{\realbackslash var {##1}} |
\def\key##1{\realbackslash key{##1}}% |
\def\emph##1{\realbackslash emph {##1}} |
\def\file##1{\realbackslash file{##1}}% |
\def\dfn##1{\realbackslash dfn {##1}} |
\def\kbd##1{\realbackslash kbd{##1}}% |
|
% These are redefined because @smartitalic wouldn't work inside xdef. |
|
\def\i##1{\realbackslash i{##1}}% |
|
\def\cite##1{\realbackslash cite{##1}}% |
|
\def\var##1{\realbackslash var{##1}}% |
|
\def\emph##1{\realbackslash emph{##1}}% |
|
\def\dfn##1{\realbackslash dfn{##1}}% |
} |
} |
|
|
\newcount\absseclevel % used to calculate proper heading level |
\newcount\absseclevel % used to calculate proper heading level |
Line 2733 width0pt\relax} \fi
|
Line 2915 width0pt\relax} \fi
|
% because we don't want its macros evaluated now. |
% because we don't want its macros evaluated now. |
\xdef\thischapter{\putwordChapter{} \the\chapno: \noexpand\thischaptername}% |
\xdef\thischapter{\putwordChapter{} \the\chapno: \noexpand\thischaptername}% |
{\chapternofonts% |
{\chapternofonts% |
\edef\temp{{\realbackslash chapentry {#1}{\the\chapno}{\noexpand\folio}}}% |
\toks0 = {#1}% |
|
\edef\temp{{\realbackslash chapentry{\the\toks0}{\the\chapno}{\noexpand\folio}}}% |
\escapechar=`\\% |
\escapechar=`\\% |
\write \contentsfile \temp % |
\write \contentsfile \temp % |
\donoderef % |
\donoderef % |
Line 2752 width0pt\relax} \fi
|
Line 2935 width0pt\relax} \fi
|
\gdef\thischaptername{#1}% |
\gdef\thischaptername{#1}% |
\xdef\thischapter{\putwordAppendix{} \appendixletter: \noexpand\thischaptername}% |
\xdef\thischapter{\putwordAppendix{} \appendixletter: \noexpand\thischaptername}% |
{\chapternofonts% |
{\chapternofonts% |
\edef\temp{{\realbackslash chapentry |
\toks0 = {#1}% |
{#1}{\putwordAppendix{} \appendixletter}{\noexpand\folio}}}% |
\edef\temp{{\realbackslash chapentry{\the\toks0}% |
|
{\putwordAppendix{} \appendixletter}{\noexpand\folio}}}% |
\escapechar=`\\% |
\escapechar=`\\% |
\write \contentsfile \temp % |
\write \contentsfile \temp % |
\appendixnoderef % |
\appendixnoderef % |
Line 2787 width0pt\relax} \fi
|
Line 2971 width0pt\relax} \fi
|
\unnumbchapmacro {#1}% |
\unnumbchapmacro {#1}% |
\gdef\thischapter{#1}\gdef\thissection{#1}% |
\gdef\thischapter{#1}\gdef\thissection{#1}% |
{\chapternofonts% |
{\chapternofonts% |
\edef\temp{{\realbackslash unnumbchapentry {#1}{\noexpand\folio}}}% |
\toks0 = {#1}% |
|
\edef\temp{{\realbackslash unnumbchapentry{\the\toks0}{\noexpand\folio}}}% |
\escapechar=`\\% |
\escapechar=`\\% |
\write \contentsfile \temp % |
\write \contentsfile \temp % |
\unnumbnoderef % |
\unnumbnoderef % |
Line 2802 width0pt\relax} \fi
|
Line 2987 width0pt\relax} \fi
|
\subsecno=0 \subsubsecno=0 \global\advance \secno by 1 % |
\subsecno=0 \subsubsecno=0 \global\advance \secno by 1 % |
\gdef\thissection{#1}\secheading {#1}{\the\chapno}{\the\secno}% |
\gdef\thissection{#1}\secheading {#1}{\the\chapno}{\the\secno}% |
{\chapternofonts% |
{\chapternofonts% |
|
\toks0 = {#1}% |
\edef\temp{{\realbackslash secentry % |
\edef\temp{{\realbackslash secentry % |
{#1}{\the\chapno}{\the\secno}{\noexpand\folio}}}% |
{\the\toks0}{\the\chapno}{\the\secno}{\noexpand\folio}}}% |
\escapechar=`\\% |
\escapechar=`\\% |
\write \contentsfile \temp % |
\write \contentsfile \temp % |
\donoderef % |
\donoderef % |
Line 2817 width0pt\relax} \fi
|
Line 3003 width0pt\relax} \fi
|
\subsecno=0 \subsubsecno=0 \global\advance \secno by 1 % |
\subsecno=0 \subsubsecno=0 \global\advance \secno by 1 % |
\gdef\thissection{#1}\secheading {#1}{\appendixletter}{\the\secno}% |
\gdef\thissection{#1}\secheading {#1}{\appendixletter}{\the\secno}% |
{\chapternofonts% |
{\chapternofonts% |
|
\toks0 = {#1}% |
\edef\temp{{\realbackslash secentry % |
\edef\temp{{\realbackslash secentry % |
{#1}{\appendixletter}{\the\secno}{\noexpand\folio}}}% |
{\the\toks0}{\appendixletter}{\the\secno}{\noexpand\folio}}}% |
\escapechar=`\\% |
\escapechar=`\\% |
\write \contentsfile \temp % |
\write \contentsfile \temp % |
\appendixnoderef % |
\appendixnoderef % |
Line 2830 width0pt\relax} \fi
|
Line 3017 width0pt\relax} \fi
|
\def\unnumberedseczzz #1{\seccheck{unnumberedsec}% |
\def\unnumberedseczzz #1{\seccheck{unnumberedsec}% |
\plainsecheading {#1}\gdef\thissection{#1}% |
\plainsecheading {#1}\gdef\thissection{#1}% |
{\chapternofonts% |
{\chapternofonts% |
\edef\temp{{\realbackslash unnumbsecentry{#1}{\noexpand\folio}}}% |
\toks0 = {#1}% |
|
\edef\temp{{\realbackslash unnumbsecentry{\the\toks0}{\noexpand\folio}}}% |
\escapechar=`\\% |
\escapechar=`\\% |
\write \contentsfile \temp % |
\write \contentsfile \temp % |
\unnumbnoderef % |
\unnumbnoderef % |
Line 2843 width0pt\relax} \fi
|
Line 3031 width0pt\relax} \fi
|
\gdef\thissection{#1}\subsubsecno=0 \global\advance \subsecno by 1 % |
\gdef\thissection{#1}\subsubsecno=0 \global\advance \subsecno by 1 % |
\subsecheading {#1}{\the\chapno}{\the\secno}{\the\subsecno}% |
\subsecheading {#1}{\the\chapno}{\the\secno}{\the\subsecno}% |
{\chapternofonts% |
{\chapternofonts% |
|
\toks0 = {#1}% |
\edef\temp{{\realbackslash subsecentry % |
\edef\temp{{\realbackslash subsecentry % |
{#1}{\the\chapno}{\the\secno}{\the\subsecno}{\noexpand\folio}}}% |
{\the\toks0}{\the\chapno}{\the\secno}{\the\subsecno}{\noexpand\folio}}}% |
\escapechar=`\\% |
\escapechar=`\\% |
\write \contentsfile \temp % |
\write \contentsfile \temp % |
\donoderef % |
\donoderef % |
Line 2857 width0pt\relax} \fi
|
Line 3046 width0pt\relax} \fi
|
\gdef\thissection{#1}\subsubsecno=0 \global\advance \subsecno by 1 % |
\gdef\thissection{#1}\subsubsecno=0 \global\advance \subsecno by 1 % |
\subsecheading {#1}{\appendixletter}{\the\secno}{\the\subsecno}% |
\subsecheading {#1}{\appendixletter}{\the\secno}{\the\subsecno}% |
{\chapternofonts% |
{\chapternofonts% |
|
\toks0 = {#1}% |
\edef\temp{{\realbackslash subsecentry % |
\edef\temp{{\realbackslash subsecentry % |
{#1}{\appendixletter}{\the\secno}{\the\subsecno}{\noexpand\folio}}}% |
{\the\toks0}{\appendixletter}{\the\secno}{\the\subsecno}{\noexpand\folio}}}% |
\escapechar=`\\% |
\escapechar=`\\% |
\write \contentsfile \temp % |
\write \contentsfile \temp % |
\appendixnoderef % |
\appendixnoderef % |
Line 2870 width0pt\relax} \fi
|
Line 3060 width0pt\relax} \fi
|
\def\unnumberedsubseczzz #1{\seccheck{unnumberedsubsec}% |
\def\unnumberedsubseczzz #1{\seccheck{unnumberedsubsec}% |
\plainsubsecheading {#1}\gdef\thissection{#1}% |
\plainsubsecheading {#1}\gdef\thissection{#1}% |
{\chapternofonts% |
{\chapternofonts% |
\edef\temp{{\realbackslash unnumbsubsecentry{#1}{\noexpand\folio}}}% |
\toks0 = {#1}% |
|
\edef\temp{{\realbackslash unnumbsubsecentry{\the\toks0}{\noexpand\folio}}}% |
\escapechar=`\\% |
\escapechar=`\\% |
\write \contentsfile \temp % |
\write \contentsfile \temp % |
\unnumbnoderef % |
\unnumbnoderef % |
Line 2884 width0pt\relax} \fi
|
Line 3075 width0pt\relax} \fi
|
\subsubsecheading {#1} |
\subsubsecheading {#1} |
{\the\chapno}{\the\secno}{\the\subsecno}{\the\subsubsecno}% |
{\the\chapno}{\the\secno}{\the\subsecno}{\the\subsubsecno}% |
{\chapternofonts% |
{\chapternofonts% |
\edef\temp{{\realbackslash subsubsecentry % |
\toks0 = {#1}% |
{#1} |
\edef\temp{{\realbackslash subsubsecentry{\the\toks0} |
{\the\chapno}{\the\secno}{\the\subsecno}{\the\subsubsecno} |
{\the\chapno}{\the\secno}{\the\subsecno}{\the\subsubsecno} |
{\noexpand\folio}}}% |
{\noexpand\folio}}}% |
\escapechar=`\\% |
\escapechar=`\\% |
Line 2901 width0pt\relax} \fi
|
Line 3092 width0pt\relax} \fi
|
\subsubsecheading {#1} |
\subsubsecheading {#1} |
{\appendixletter}{\the\secno}{\the\subsecno}{\the\subsubsecno}% |
{\appendixletter}{\the\secno}{\the\subsecno}{\the\subsubsecno}% |
{\chapternofonts% |
{\chapternofonts% |
\edef\temp{{\realbackslash subsubsecentry{#1}% |
\toks0 = {#1}% |
|
\edef\temp{{\realbackslash subsubsecentry{\the\toks0}% |
{\appendixletter} |
{\appendixletter} |
{\the\secno}{\the\subsecno}{\the\subsubsecno}{\noexpand\folio}}}% |
{\the\secno}{\the\subsecno}{\the\subsubsecno}{\noexpand\folio}}}% |
\escapechar=`\\% |
\escapechar=`\\% |
Line 2915 width0pt\relax} \fi
|
Line 3107 width0pt\relax} \fi
|
\def\unnumberedsubsubseczzz #1{\seccheck{unnumberedsubsubsec}% |
\def\unnumberedsubsubseczzz #1{\seccheck{unnumberedsubsubsec}% |
\plainsubsubsecheading {#1}\gdef\thissection{#1}% |
\plainsubsubsecheading {#1}\gdef\thissection{#1}% |
{\chapternofonts% |
{\chapternofonts% |
\edef\temp{{\realbackslash unnumbsubsubsecentry{#1}{\noexpand\folio}}}% |
\toks0 = {#1}% |
|
\edef\temp{{\realbackslash unnumbsubsubsecentry{\the\toks0}{\noexpand\folio}}}% |
\escapechar=`\\% |
\escapechar=`\\% |
\write \contentsfile \temp % |
\write \contentsfile \temp % |
\unnumbnoderef % |
\unnumbnoderef % |
Line 3096 width0pt\relax} \fi
|
Line 3289 width0pt\relax} \fi
|
|
|
|
|
% Print any size section title. |
% Print any size section title. |
% |
% |
% #1 is the section type (sec/subsec/subsubsec), #2 is the section |
% #1 is the section type (sec/subsec/subsubsec), #2 is the section |
% number (maybe empty), #3 the text. |
% number (maybe empty), #3 the text. |
\def\sectionheading#1#2#3{% |
\def\sectionheading#1#2#3{% |
Line 3140 width0pt\relax} \fi
|
Line 3333 width0pt\relax} \fi
|
\unnumbchapmacro{#1}\def\thischapter{}% |
\unnumbchapmacro{#1}\def\thischapter{}% |
\begingroup % Set up to handle contents files properly. |
\begingroup % Set up to handle contents files properly. |
\catcode`\\=0 \catcode`\{=1 \catcode`\}=2 \catcode`\@=11 |
\catcode`\\=0 \catcode`\{=1 \catcode`\}=2 \catcode`\@=11 |
\catcode`\^=7 % to see ^^e4 as \"a etc. juha@piuha.ydi.vtt.fi |
% We can't do this, because then an actual ^ in a section |
|
% title fails, e.g., @chapter ^ -- exponentiation. --karl, 9jul97. |
|
%\catcode`\^=7 % to see ^^e4 as \"a etc. juha@piuha.ydi.vtt.fi |
\raggedbottom % Worry more about breakpoints than the bottom. |
\raggedbottom % Worry more about breakpoints than the bottom. |
\advance\hsize by -\contentsrightmargin % Don't use the full line length. |
\advance\hsize by -\contentsrightmargin % Don't use the full line length. |
} |
} |
Line 3265 width0pt\relax} \fi
|
Line 3460 width0pt\relax} \fi
|
% the index entries, but we want to suppress hyphenation here. (We |
% the index entries, but we want to suppress hyphenation here. (We |
% can't do that in the \entry macro, since index entries might consist |
% can't do that in the \entry macro, since index entries might consist |
% of hyphenated-identifiers-that-do-not-fit-on-a-line-and-nothing-else.) |
% of hyphenated-identifiers-that-do-not-fit-on-a-line-and-nothing-else.) |
% |
|
% \turnoffactive is for the sake of @" used for umlauts. |
|
\def\tocentry#1#2{\begingroup |
\def\tocentry#1#2{\begingroup |
\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 |
\entry{\turnoffactive #1}{\turnoffactive #2}% |
% Do not use \turnoffactive in these arguments. Since the toc is |
|
% typeset in cmr, so characters such as _ would come out wrong; we |
|
% have to do the usual translation tricks. |
|
\entry{#1}{#2}% |
\endgroup} |
\endgroup} |
|
|
% Space between chapter (or whatever) number and the title. |
% Space between chapter (or whatever) number and the title. |
Line 3335 width0pt\relax} \fi
|
Line 3531 width0pt\relax} \fi
|
% But \@ or @@ will get a plain tex @ character. |
% But \@ or @@ will get a plain tex @ character. |
|
|
\def\tex{\begingroup |
\def\tex{\begingroup |
\catcode `\\=0 \catcode `\{=1 \catcode `\}=2 |
\catcode `\\=0 \catcode `\{=1 \catcode `\}=2 |
\catcode `\$=3 \catcode `\&=4 \catcode `\#=6 |
\catcode `\$=3 \catcode `\&=4 \catcode `\#=6 |
\catcode `\^=7 \catcode `\_=8 \catcode `\~=13 \let~=\tie |
\catcode `\^=7 \catcode `\_=8 \catcode `\~=13 \let~=\tie |
\catcode `\%=14 |
\catcode `\%=14 |
\catcode 43=12 % plus |
\catcode 43=12 % plus |
\catcode`\"=12 |
\catcode`\"=12 |
\catcode`\==12 |
\catcode`\==12 |
\catcode`\|=12 |
\catcode`\|=12 |
\catcode`\<=12 |
\catcode`\<=12 |
\catcode`\>=12 |
\catcode`\>=12 |
\escapechar=`\\ |
\escapechar=`\\ |
% |
% |
\let\,=\ptexcomma |
\let\b=\ptexb |
\let\~=\ptextilde |
\let\bullet=\ptexbullet |
\let\{=\ptexlbrace |
\let\c=\ptexc |
\let\}=\ptexrbrace |
\let\,=\ptexcomma |
\let\.=\ptexdot |
\let\.=\ptexdot |
\let\*=\ptexstar |
\let\dots=\ptexdots |
\let\dots=\ptexdots |
\let\equiv=\ptexequiv |
\def\endldots{\mathinner{\ldots\ldots\ldots\ldots}} |
\let\!=\ptexexclam |
\def\enddots{\relax\ifmmode\endldots\else$\mathsurround=0pt \endldots\,$\fi} |
\let\i=\ptexi |
\def\@{@}% |
\let\{=\ptexlbrace |
\let\bullet=\ptexbullet |
\let\}=\ptexrbrace |
\let\b=\ptexb \let\c=\ptexc \let\i=\ptexi \let\t=\ptext |
\let\*=\ptexstar |
% |
\let\t=\ptext |
|
% |
|
\def\endldots{\mathinner{\ldots\ldots\ldots\ldots}}% |
|
\def\enddots{\relax\ifmmode\endldots\else$\mathsurround=0pt \endldots\,$\fi}% |
|
\def\@{@}% |
\let\Etex=\endgroup} |
\let\Etex=\endgroup} |
|
|
% Define @lisp ... @endlisp. |
% Define @lisp ... @endlisp. |
Line 3496 width0pt\relax} \fi
|
Line 3696 width0pt\relax} \fi
|
% |
% |
\def\nonfillfinish{\afterenvbreak\endgroup}% |
\def\nonfillfinish{\afterenvbreak\endgroup}% |
|
|
% This macro is |
|
\def\lisp{\begingroup |
\def\lisp{\begingroup |
\nonfillstart |
\nonfillstart |
\let\Elisp = \nonfillfinish |
\let\Elisp = \nonfillfinish |
\tt |
\tt |
|
% Make @kbd do something special, if requested. |
|
\let\kbdfont\kbdexamplefont |
\rawbackslash % have \ input char produce \ char from current font |
\rawbackslash % have \ input char produce \ char from current font |
\gobble |
\gobble |
} |
} |
Line 3618 width0pt\relax} \fi
|
Line 3819 width0pt\relax} \fi
|
|
|
% Definitions of (, ) and & used in args for functions. |
% Definitions of (, ) and & used in args for functions. |
% This is the definition of ( outside of all parentheses. |
% This is the definition of ( outside of all parentheses. |
\gdef\oprm#1 {{\rm\char`\(}#1 \bf \let(=\opnested % |
\gdef\oprm#1 {{\rm\char`\(}#1 \bf \let(=\opnested |
\global\advance\parencount by 1 } |
\global\advance\parencount by 1 |
|
} |
% |
% |
% This is the definition of ( when already inside a level of parens. |
% This is the definition of ( when already inside a level of parens. |
\gdef\opnested{\char`\(\global\advance\parencount by 1 } |
\gdef\opnested{\char`\(\global\advance\parencount by 1 } |
% |
% |
\gdef\clrm{% Print a paren in roman if it is taking us back to depth of 0. |
\gdef\clrm{% Print a paren in roman if it is taking us back to depth of 0. |
% also in that case restore the outer-level definition of (. |
% also in that case restore the outer-level definition of (. |
\ifnum \parencount=1 {\rm \char `\)}\sl \let(=\oprm \else \char `\) \fi |
\ifnum \parencount=1 {\rm \char `\)}\sl \let(=\oprm \else \char `\) \fi |
\global\advance \parencount by -1 } |
\global\advance \parencount by -1 } |
% If we encounter &foo, then turn on ()-hacking afterwards |
% If we encounter &foo, then turn on ()-hacking afterwards |
\gdef\amprm#1 {{\rm\}\let(=\oprm \let)=\clrm\ } |
\gdef\amprm#1 {{\rm\}\let(=\oprm \let)=\clrm\ } |
% |
% |
Line 3635 width0pt\relax} \fi
|
Line 3837 width0pt\relax} \fi
|
} % End of definition inside \activeparens |
} % End of definition inside \activeparens |
%% These parens (in \boldbrax) actually are a little bolder than the |
%% These parens (in \boldbrax) actually are a little bolder than the |
%% contained text. This is especially needed for [ and ] |
%% contained text. This is especially needed for [ and ] |
\def\opnr{{\sf\char`\(}} \def\clnr{{\sf\char`\)}} \def\ampnr{\&} |
\def\opnr{{\sf\char`\(}\global\advance\parencount by 1 } |
\def\lbrb{{\bf\char`\[}} \def\rbrb{{\bf\char`\]}} |
\def\clnr{{\sf\char`\)}\global\advance\parencount by -1 } |
|
\def\ampnr{\&} |
|
\def\lbrb{{\bf\char`\[}} |
|
\def\rbrb{{\bf\char`\]}} |
|
|
% First, defname, which formats the header line itself. |
% First, defname, which formats the header line itself. |
% #1 should be the function name. |
% #1 should be the function name. |
Line 3729 width0pt\relax} \fi
|
Line 3934 width0pt\relax} \fi
|
|
|
% This is used for \def{tp,vr}parsebody. It could probably be used for |
% This is used for \def{tp,vr}parsebody. It could probably be used for |
% some of the others, too, with some judicious conditionals. |
% some of the others, too, with some judicious conditionals. |
% |
% |
\def\parsebodycommon#1#2#3{% |
\def\parsebodycommon#1#2#3{% |
\begingroup\inENV % |
\begingroup\inENV % |
\medbreak % |
\medbreak % |
Line 3763 width0pt\relax} \fi
|
Line 3968 width0pt\relax} \fi
|
} |
} |
|
|
% Fine, but then we have to eventually remove the \empty *and* the |
% Fine, but then we have to eventually remove the \empty *and* the |
% braces (if any). That's what this does, putting the result in \tptemp. |
% braces (if any). That's what this does. |
% |
% |
\def\removeemptybraces\empty#1\relax{\def\tptemp{#1}}% |
\def\removeemptybraces\empty#1\relax{#1} |
|
|
% After \spacesplit has done its work, this is called -- #1 is the final |
% After \spacesplit has done its work, this is called -- #1 is the final |
% thing to call, #2 the type name (which starts with \empty), and #3 |
% thing to call, #2 the type name (which starts with \empty), and #3 |
% (which might be empty) the arguments. |
% (which might be empty) the arguments. |
% |
% |
\def\parsetpheaderline#1#2#3{% |
\def\parsetpheaderline#1#2#3{% |
\removeemptybraces#2\relax |
#1{\removeemptybraces#2\relax}{#3}% |
#1{\tptemp}{#3}% |
|
}% |
}% |
|
|
\def\defopvarparsebody #1#2#3#4#5 {\begingroup\inENV % |
\def\defopvarparsebody #1#2#3#4#5 {\begingroup\inENV % |
Line 3814 width0pt\relax} \fi
|
Line 4018 width0pt\relax} \fi
|
\hyphenchar\tensl=0 |
\hyphenchar\tensl=0 |
#1% |
#1% |
\hyphenchar\tensl=45 |
\hyphenchar\tensl=45 |
\ifnum\parencount=0 \else \errmessage{unbalanced parens in @def arguments}\fi% |
\ifnum\parencount=0 \else \errmessage{Unbalanced parentheses in @def}\fi% |
\interlinepenalty=10000 |
\interlinepenalty=10000 |
\advance\rightskip by 0pt plus 1fil |
\advance\rightskip by 0pt plus 1fil |
\endgraf\penalty 10000\vskip -\parskip\penalty 10000% |
\endgraf\penalty 10000\vskip -\parskip\penalty 10000% |
Line 3915 width0pt\relax} \fi
|
Line 4119 width0pt\relax} \fi
|
\def\defmacx #1 {\errmessage{@defmacx in invalid context}} |
\def\defmacx #1 {\errmessage{@defmacx in invalid context}} |
\def\defspecx #1 {\errmessage{@defspecx in invalid context}} |
\def\defspecx #1 {\errmessage{@defspecx in invalid context}} |
\def\deftypefnx #1 {\errmessage{@deftypefnx in invalid context}} |
\def\deftypefnx #1 {\errmessage{@deftypefnx in invalid context}} |
|
\def\deftypemethodx #1 {\errmessage{@deftypemethodx in invalid context}} |
\def\deftypeunx #1 {\errmessage{@deftypeunx in invalid context}} |
\def\deftypeunx #1 {\errmessage{@deftypeunx in invalid context}} |
|
|
% @defmethod, and so on |
% @defmethod, and so on |
Line 3930 width0pt\relax} \fi
|
Line 4135 width0pt\relax} \fi
|
\defunargs {#3}\endgroup % |
\defunargs {#3}\endgroup % |
} |
} |
|
|
|
% @deftypemethod foo-class return-type foo-method args |
|
% |
|
\def\deftypemethod{% |
|
\defmethparsebody\Edeftypemethod\deftypemethodx\deftypemethodheader} |
|
% |
|
% #1 is the class name, #2 the data type, #3 the method name, #4 the args. |
|
\def\deftypemethodheader#1#2#3#4{% |
|
\deftypefnheaderx{Method on #1}{#2}#3 #4\relax |
|
} |
|
|
% @defmethod == @defop Method |
% @defmethod == @defop Method |
|
|
\def\defmethod{\defmethparsebody\Edefmethod\defmethodx\defmethodheader} |
\def\defmethod{\defmethparsebody\Edefmethod\defmethodx\defmethodheader} |
Line 4007 width0pt\relax} \fi
|
Line 4222 width0pt\relax} \fi
|
|
|
\def\deftypevar{\defvarparsebody\Edeftypevar\deftypevarx\deftypevarheader} |
\def\deftypevar{\defvarparsebody\Edeftypevar\deftypevarx\deftypevarheader} |
|
|
% #1 is the data type. #2 is the name. |
% #1 is the data type. #2 is the name, perhaps followed by text that |
|
% is actually part of the data type, which should not be put into the index. |
\def\deftypevarheader #1#2{% |
\def\deftypevarheader #1#2{% |
\doind {vr}{\code{#2}}% Make entry in variables index |
\dovarind#2 \relax% Make entry in variables index |
\begingroup\defname {\defheaderxcond#1\relax$$$#2}{Variable}% |
\begingroup\defname {\defheaderxcond#1\relax$$$#2}{Variable}% |
\interlinepenalty=10000 |
\interlinepenalty=10000 |
\endgraf\penalty 10000\vskip -\parskip\penalty 10000 |
\endgraf\penalty 10000\vskip -\parskip\penalty 10000 |
\endgroup} |
\endgroup} |
|
\def\dovarind#1 #2\relax{\doind{vr}{\code{#1}}} |
|
|
% @deftypevr {Global Flag} int enable |
% @deftypevr {Global Flag} int enable |
|
|
\def\deftypevr{\defvrparsebody\Edeftypevr\deftypevrx\deftypevrheader} |
\def\deftypevr{\defvrparsebody\Edeftypevr\deftypevrx\deftypevrheader} |
|
|
\def\deftypevrheader #1#2#3{\doind {vr}{\code{#3}}% |
\def\deftypevrheader #1#2#3{\dovarind#3 \relax% |
\begingroup\defname {\defheaderxcond#2\relax$$$#3}{#1} |
\begingroup\defname {\defheaderxcond#2\relax$$$#3}{#1} |
\interlinepenalty=10000 |
\interlinepenalty=10000 |
\endgraf\penalty 10000\vskip -\parskip\penalty 10000 |
\endgraf\penalty 10000\vskip -\parskip\penalty 10000 |
Line 4142 width0pt\relax} \fi
|
Line 4359 width0pt\relax} \fi
|
|
|
% Use \turnoffactive so that punctuation chars such as underscore |
% Use \turnoffactive so that punctuation chars such as underscore |
% work in node names. |
% work in node names. |
\def\dosetq #1#2{{\let\folio=0 \turnoffactive \auxhat% |
\def\dosetq #1#2{{\let\folio=0 \turnoffactive |
\edef\next{\write\auxfile{\internalsetq {#1}{#2}}}% |
\edef\next{\write\auxfile{\internalsetq {#1}{#2}}}% |
\next}} |
\next}} |
|
|
Line 4195 width0pt\relax} \fi
|
Line 4412 width0pt\relax} \fi
|
\def\refx#1#2{% |
\def\refx#1#2{% |
\expandafter\ifx\csname X#1\endcsname\relax |
\expandafter\ifx\csname X#1\endcsname\relax |
% If not defined, say something at least. |
% If not defined, say something at least. |
$\langle$un\-de\-fined$\rangle$% |
\angleleft un\-de\-fined\angleright |
\ifhavexrefs |
\ifhavexrefs |
\message{\linenumber Undefined cross reference `#1'.}% |
\message{\linenumber Undefined cross reference `#1'.}% |
\else |
\else |
Line 4211 width0pt\relax} \fi
|
Line 4428 width0pt\relax} \fi
|
#2% Output the suffix in any case. |
#2% Output the suffix in any case. |
} |
} |
|
|
% Read the last existing aux file, if any. No error if none exists. |
|
|
|
% This is the macro invoked by entries in the aux file. |
% This is the macro invoked by entries in the aux file. |
\def\xrdef #1#2{ |
% |
{\catcode`\'=\other\expandafter \gdef \csname X#1\endcsname {#2}}} |
\def\xrdef#1{\begingroup |
|
% Reenable \ as an escape while reading the second argument. |
|
\catcode`\\ = 0 |
|
\afterassignment\endgroup |
|
\expandafter\gdef\csname X#1\endcsname |
|
} |
|
|
\def\readauxfile{% |
% Read the last existing aux file, if any. No error if none exists. |
\begingroup |
\def\readauxfile{\begingroup |
\catcode `\^^@=\other |
\catcode`\^^@=\other |
\catcode `\&=\other |
\catcode`\^^A=\other |
\catcode `\=\other |
\catcode`\^^B=\other |
\catcode `\^^C=\other |
\catcode`\^^C=\other |
\catcode `\^^D=\other |
\catcode`\^^D=\other |
\catcode `\^^E=\other |
\catcode`\^^E=\other |
\catcode `\^^F=\other |
\catcode`\^^F=\other |
\catcode `\^^G=\other |
\catcode`\^^G=\other |
\catcode `\^^H=\other |
\catcode`\^^H=\other |
\catcode `\=\other |
\catcode`\^^K=\other |
\catcode `\^^L=\other |
\catcode`\^^L=\other |
\catcode `\=\other |
\catcode`\^^N=\other |
\catcode `\=\other |
\catcode`\^^P=\other |
\catcode `\=\other |
\catcode`\^^Q=\other |
\catcode `\=\other |
\catcode`\^^R=\other |
\catcode `\=\other |
\catcode`\^^S=\other |
\catcode `\=\other |
\catcode`\^^T=\other |
\catcode `\=\other |
\catcode`\^^U=\other |
\catcode `\=\other |
\catcode`\^^V=\other |
\catcode `\=\other |
\catcode`\^^W=\other |
\catcode `\=\other |
\catcode`\^^X=\other |
\catcode `\=\other |
\catcode`\^^Z=\other |
\catcode `\=\other |
\catcode`\^^[=\other |
\catcode 26=\other |
\catcode`\^^\=\other |
\catcode `\^^[=\other |
\catcode`\^^]=\other |
\catcode `\^^\=\other |
\catcode`\^^^=\other |
\catcode `\^^]=\other |
\catcode`\^^_=\other |
\catcode `\^^^=\other |
\catcode`\@=\other |
\catcode `\^^_=\other |
\catcode`\^=\other |
\catcode `\@=\other |
% It was suggested to define this as 7, which would allow ^^e4 etc. |
\catcode `\^=\other |
% in xref tags, i.e., node names. But since ^^e4 notation isn't |
\catcode `\~=\other |
% supported in the main text, it doesn't seem desirable. Furthermore, |
\catcode `\[=\other |
% that is not enough: for node names that actually contain a ^ |
\catcode `\]=\other |
% character, we would end up writing a line like this: 'xrdef {'hat |
\catcode`\"=\other |
% b-title}{'hat b} and \xrdef does a \csname...\endcsname on the first |
\catcode`\_=\other |
% argument, and \hat is not an expandable control sequence. It could |
\catcode`\|=\other |
% all be worked out, but why? Either we support ^^ or we don't. |
\catcode`\<=\other |
% |
\catcode`\>=\other |
% The other change necessary for this was to define \auxhat: |
\catcode `\$=\other |
% \def\auxhat{\def^{'hat }}% extra space so ok if followed by letter |
\catcode `\#=\other |
% and then to call \auxhat in \setq. |
\catcode `\&=\other |
% |
% `\+ does not work, so use 43. |
\catcode`\~=\other |
\catcode 43=\other |
\catcode`\[=\other |
% Make the characters 128-255 be printing characters |
\catcode`\]=\other |
{% |
\catcode`\"=\other |
\count 1=128 |
\catcode`\_=\other |
\def\loop{% |
\catcode`\|=\other |
\catcode\count 1=\other |
\catcode`\<=\other |
\advance\count 1 by 1 |
\catcode`\>=\other |
\ifnum \count 1<256 \loop \fi |
\catcode`\$=\other |
|
\catcode`\#=\other |
|
\catcode`\&=\other |
|
% `\+ does not work, so use 43. |
|
\catcode43=\other |
|
% Make the characters 128-255 be printing characters |
|
{% |
|
\count 1=128 |
|
\def\loop{% |
|
\catcode\count 1=\other |
|
\advance\count 1 by 1 |
|
\ifnum \count 1<256 \loop \fi |
|
}% |
}% |
}% |
}% |
% The aux file uses ' as the escape (for now). |
% the aux file uses ' as the escape. |
% Turn off \ as an escape so we do not lose on |
% Turn off \ as an escape so we do not lose on |
% entries which were dumped with control sequences in their names. |
% entries which were dumped with control sequences in their names. |
% For example, 'xrdef {$\leq $-fun}{page ...} made by @defun ^^ |
% For example, 'xrdef {$\leq $-fun}{page ...} made by @defun ^^ |
% Reference to such entries still does not work the way one would wish, |
% Reference to such entries still does not work the way one would wish, |
% but at least they do not bomb out when the aux file is read in. |
% but at least they do not bomb out when the aux file is read in. |
\catcode`\{=1 |
\catcode `\{=1 \catcode `\}=2 |
\catcode`\}=2 |
\catcode `\%=\other |
\catcode`\%=\other |
\catcode `\'=0 |
\catcode`\'=0 |
\catcode`\^=7 % to make ^^e4 etc usable in xref tags |
\catcode`\\=\other |
\catcode `\\=\other |
% |
\openin 1 \jobname.aux |
\openin 1 \jobname.aux |
\ifeof 1 \else \closein 1 \input \jobname.aux \global\havexrefstrue |
\ifeof 1 \else |
\global\warnedobstrue |
\closein 1 |
\fi |
\input \jobname.aux |
% Open the new aux file. Tex will close it automatically at exit. |
\global\havexrefstrue |
\openout \auxfile=\jobname.aux |
\global\warnedobstrue |
|
\fi |
|
% Open the new aux file. TeX will close it automatically at exit. |
|
\openout\auxfile=\jobname.aux |
\endgroup} |
\endgroup} |
|
|
|
|
Line 4303 width0pt\relax} \fi
|
Line 4538 width0pt\relax} \fi
|
% space to prevent strange expansion errors.) |
% space to prevent strange expansion errors.) |
\def\supereject{\par\penalty -20000\footnoteno =0 } |
\def\supereject{\par\penalty -20000\footnoteno =0 } |
|
|
% @footnotestyle is meaningful for info output only.. |
% @footnotestyle is meaningful for info output only. |
\let\footnotestyle=\comment |
\let\footnotestyle=\comment |
|
|
\let\ptexfootnote=\footnote |
\let\ptexfootnote=\footnote |
Line 4329 width0pt\relax} \fi
|
Line 4564 width0pt\relax} \fi
|
% Don't bother with the trickery in plain.tex to not require the |
% Don't bother with the trickery in plain.tex to not require the |
% footnote text as a parameter. Our footnotes don't need to be so general. |
% footnote text as a parameter. Our footnotes don't need to be so general. |
% |
% |
\long\gdef\footnotezzz#1{\insert\footins{% |
% Oh yes, they do; otherwise, @ifset and anything else that uses |
|
% \parseargline fail inside footnotes because the tokens are fixed when |
|
% the footnote is read. --karl, 16nov96. |
|
% |
|
\long\gdef\footnotezzz{\insert\footins\bgroup |
% We want to typeset this text as a normal paragraph, even if the |
% We want to typeset this text as a normal paragraph, even if the |
% footnote reference occurs in (for example) a display environment. |
% footnote reference occurs in (for example) a display environment. |
% So reset some parameters. |
% So reset some parameters. |
Line 4351 width0pt\relax} \fi
|
Line 4590 width0pt\relax} \fi
|
% expands into a box, it must come within the paragraph, lest it |
% expands into a box, it must come within the paragraph, lest it |
% provide a place where TeX can split the footnote. |
% provide a place where TeX can split the footnote. |
\footstrut |
\footstrut |
#1\strut}% |
\futurelet\next\fo@t |
} |
} |
|
\def\fo@t{\ifcat\bgroup\noexpand\next \let\next\f@@t |
|
\else\let\next\f@t\fi \next} |
|
\def\f@@t{\bgroup\aftergroup\@foot\let\next} |
|
\def\f@t#1{#1\@foot} |
|
\def\@foot{\strut\egroup} |
|
|
}%end \catcode `\@=11 |
}%end \catcode `\@=11 |
|
|
Line 4409 width0pt\relax} \fi
|
Line 4653 width0pt\relax} \fi
|
% |
% |
\def\finalout{\overfullrule=0pt} |
\def\finalout{\overfullrule=0pt} |
|
|
|
% @image. We use the macros from epsf.tex to support this. |
|
% If epsf.tex is not installed and @image is used, we complain. |
|
% |
|
% Check for and read epsf.tex up front. If we read it only at @image |
|
% time, we might be inside a group, and then its definitions would get |
|
% undone and the next image would fail. |
|
\openin 1 = epsf.tex |
|
\ifeof 1 \else |
|
\closein 1 |
|
\def\epsfannounce{\toks0 = }% do not bother showing banner |
|
\input epsf.tex |
|
\fi |
|
% |
|
\newif\ifwarnednoepsf |
|
\newhelp\noepsfhelp{epsf.tex must be installed for images to |
|
work. It is also included in the Texinfo distribution, or you can get |
|
it from ftp://ftp.tug.org/tex/epsf.tex.} |
|
% |
|
% Only complain once about lack of epsf.tex. |
|
\def\image#1{% |
|
\ifx\epsfbox\undefined |
|
\ifwarnednoepsf \else |
|
\errhelp = \noepsfhelp |
|
\errmessage{epsf.tex not found, images will be ignored}% |
|
\global\warnednoepsftrue |
|
\fi |
|
\else |
|
\imagexxx #1,,,\finish |
|
\fi |
|
} |
|
% |
|
% Arguments to @image: |
|
% #1 is (mandatory) image filename; we tack on .eps extension. |
|
% #2 is (optional) width, #3 is (optional) height. |
|
% #4 is just the usual extra ignored arg for parsing this stuff. |
|
\def\imagexxx#1,#2,#3,#4\finish{% |
|
% \epsfbox itself resets \epsf?size at each figure. |
|
\setbox0 = \hbox{\ignorespaces #2}\ifdim\wd0 > 0pt \epsfxsize=#2\relax \fi |
|
\setbox0 = \hbox{\ignorespaces #3}\ifdim\wd0 > 0pt \epsfysize=#3\relax \fi |
|
\epsfbox{#1.eps}% |
|
} |
|
|
% End of control word definitions. |
% End of control word definitions. |
|
|
|
|
\message{and turning on texinfo input format.} |
\message{and turning on texinfo input format.} |
|
|
\def\openindices{% |
\def\openindices{% |
Line 4584 width0pt\relax} \fi
|
Line 4870 width0pt\relax} \fi
|
\def~{{\tt \char '176}} |
\def~{{\tt \char '176}} |
\chardef\hat=`\^ |
\chardef\hat=`\^ |
\catcode`\^=\active |
\catcode`\^=\active |
\def\auxhat{\def^{'hat}} |
|
\def^{{\tt \hat}} |
\def^{{\tt \hat}} |
|
|
\catcode`\_=\active |
\catcode`\_=\active |