version 1.3, 2000/05/15 14:04:12
|
version 1.4, 2002/08/14 09:00:22
|
Line 3
|
Line 3
|
% Load plain if necessary, i.e., if running under initex. |
% Load plain if necessary, i.e., if running under initex. |
\expandafter\ifx\csname fmtname\endcsname\relax\input plain\fi |
\expandafter\ifx\csname fmtname\endcsname\relax\input plain\fi |
% |
% |
\def\texinfoversion{1999-09-25.10} |
\def\texinfoversion{2002-03-26.08} |
% |
% |
% 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, |
% Free Software Foundation, Inc. |
% 2000, 01, 02 Free Software Foundation, Inc. |
% |
% |
% 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 |
% modify it under the terms of the GNU General Public License as |
% modify it under the terms of the GNU General Public License as |
Line 30
|
Line 30
|
% Please try the latest version of texinfo.tex before submitting bug |
% Please try the latest version of texinfo.tex before submitting bug |
% reports; you can get the latest version from: |
% reports; you can get the latest version from: |
% ftp://ftp.gnu.org/gnu/texinfo.tex |
% ftp://ftp.gnu.org/gnu/texinfo.tex |
% (and all GNU mirrors, see http://www.gnu.org/order/ftp.html) |
% (and all GNU mirrors, see http://www.gnu.org/order/ftp.html) |
% ftp://texinfo.org/tex/texinfo.tex |
% ftp://texinfo.org/texinfo/texinfo.tex |
% ftp://us.ctan.org/macros/texinfo/texinfo.tex |
% ftp://tug.org/tex/texinfo.tex |
% (and all CTAN mirrors, finger ctan@us.ctan.org for a list). |
% (and all CTAN mirrors, see http://www.ctan.org), |
% /home/gd/gnu/doc/texinfo.tex on the GNU machines. |
% and /home/gd/gnu/doc/texinfo.tex on the GNU machines. |
|
% |
% The texinfo.tex in any given Texinfo distribution could well be out |
% The texinfo.tex in any given Texinfo distribution could well be out |
% of date, so if that's what you're using, please check. |
% of date, so if that's what you're using, please check. |
% Texinfo has a small home page at http://texinfo.org/. |
% |
|
% Texinfo has a small home page at http://texinfo.org/ and also |
|
% http://www.gnu.org/software/texinfo. |
% |
% |
% Send bug reports to bug-texinfo@gnu.org. Please include including a |
% Send bug reports to bug-texinfo@gnu.org. Please include including a |
% complete document in each bug report with which we can reproduce the |
% complete document in each bug report with which we can reproduce the |
Line 50
|
Line 53
|
% texindex foo.?? |
% texindex foo.?? |
% tex foo.texi |
% tex foo.texi |
% tex foo.texi |
% tex foo.texi |
% 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. |
% The extra runs of TeX get the cross-reference information correct. |
% The extra TeX runs get the cross-reference information correct. |
% Sometimes one run after texindex suffices, and sometimes you need more |
% Sometimes one run after texindex suffices, and sometimes you need more |
% than two; texi2dvi does it as many times as necessary. |
% than two; texi2dvi does it as many times as necessary. |
% |
% |
% 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 |
% the existing language-specific files from ftp://ftp.gnu.org/gnu/texinfo/. |
% the existing language-specific files from the full Texinfo distribution. |
|
|
\message{Loading texinfo [version \texinfoversion]:} |
\message{Loading texinfo [version \texinfoversion]:} |
|
|
Line 170
|
Line 173
|
}% |
}% |
\fi |
\fi |
|
|
|
% add check for \lastpenalty to plain's definitions. If the last thing |
|
% we did was a \nobreak, we don't want to insert more space. |
|
% |
|
\def\smallbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\smallskipamount |
|
\removelastskip\penalty-50\smallskip\fi\fi} |
|
\def\medbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\medskipamount |
|
\removelastskip\penalty-100\medskip\fi\fi} |
|
\def\bigbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\bigskipamount |
|
\removelastskip\penalty-200\bigskip\fi\fi} |
|
|
% For @cropmarks command. |
% For @cropmarks command. |
% Do @cropmarks to get crop marks. |
% Do @cropmarks to get crop marks. |
% |
% |
Line 214
|
Line 227
|
\normalturnoffactive % \ in index entries must not stay \, e.g., if |
\normalturnoffactive % \ in index entries must not stay \, e.g., if |
% the page break happens to be in the middle of an example. |
% the page break happens to be in the middle of an example. |
\shipout\vbox{% |
\shipout\vbox{% |
|
% Do this early so pdf references go to the beginning of the page. |
|
\ifpdfmakepagedest \pdfmkdest{\the\pageno} \fi |
|
% |
\ifcropmarks \vbox to \outervsize\bgroup |
\ifcropmarks \vbox to \outervsize\bgroup |
\hsize = \outerhsize |
\hsize = \outerhsize |
\vskip-\topandbottommargin |
\vskip-\topandbottommargin |
Line 243
|
Line 259
|
\unvbox\footlinebox |
\unvbox\footlinebox |
\fi |
\fi |
% |
% |
\ifpdfmakepagedest \pdfmkdest{\the\pageno} \fi |
|
% |
|
\ifcropmarks |
\ifcropmarks |
\egroup % end of \vbox\bgroup |
\egroup % end of \vbox\bgroup |
\hfil\egroup % end of (centering) \line\bgroup |
\hfil\egroup % end of (centering) \line\bgroup |
Line 430
|
Line 444
|
% environments. --karl, 6may93 |
% environments. --karl, 6may93 |
%{\advance \baselineskip by -\singlespaceskip |
%{\advance \baselineskip by -\singlespaceskip |
%\kern \baselineskip}% |
%\kern \baselineskip}% |
\setleading \singlespaceskip |
\setleading\singlespaceskip |
} |
} |
|
|
%% Simple single-character @ commands |
%% Simple single-character @ commands |
Line 687 where each line of input produces a line
|
Line 701 where each line of input produces a line
|
\def\nofillexdentyyy #1{{\advance \leftskip by -\exdentamount |
\def\nofillexdentyyy #1{{\advance \leftskip by -\exdentamount |
\leftline{\hskip\leftskip{\rm#1}}}} |
\leftline{\hskip\leftskip{\rm#1}}}} |
|
|
% @inmargin{TEXT} puts TEXT in the margin next to the current paragraph. |
% @inmargin{WHICH}{TEXT} puts TEXT in the WHICH margin next to the current |
|
% paragraph. For more general purposes, use the \margin insertion |
\def\inmargin#1{% |
% class. WHICH is `l' or `r'. |
\strut\vadjust{\nobreak\kern-\strutdepth |
% |
\vtop to \strutdepth{\baselineskip\strutdepth\vss |
|
\llap{\rightskip=\inmarginspacing \vbox{\noindent #1}}\null}}} |
|
\newskip\inmarginspacing \inmarginspacing=1cm |
\newskip\inmarginspacing \inmarginspacing=1cm |
\def\strutdepth{\dp\strutbox} |
\def\strutdepth{\dp\strutbox} |
|
% |
%\hbox{{\rm#1}}\hfil\break}} |
\def\doinmargin#1#2{\strut\vadjust{% |
|
\nobreak |
|
\kern-\strutdepth |
|
\vtop to \strutdepth{% |
|
\baselineskip=\strutdepth |
|
\vss |
|
% if you have multiple lines of stuff to put here, you'll need to |
|
% make the vbox yourself of the appropriate size. |
|
\ifx#1l% |
|
\llap{\ignorespaces #2\hskip\inmarginspacing}% |
|
\else |
|
\rlap{\hskip\hsize \hskip\inmarginspacing \ignorespaces #2}% |
|
\fi |
|
\null |
|
}% |
|
}} |
|
\def\inleftmargin{\doinmargin l} |
|
\def\inrightmargin{\doinmargin r} |
|
% |
|
% @inmargin{TEXT [, RIGHT-TEXT]} |
|
% (if RIGHT-TEXT is given, use TEXT for left page, RIGHT-TEXT for right; |
|
% else use TEXT for both). |
|
% |
|
\def\inmargin#1{\parseinmargin #1,,\finish} |
|
\def\parseinmargin#1,#2,#3\finish{% not perfect, but better than nothing. |
|
\setbox0 = \hbox{\ignorespaces #2}% |
|
\ifdim\wd0 > 0pt |
|
\def\lefttext{#1}% have both texts |
|
\def\righttext{#2}% |
|
\else |
|
\def\lefttext{#1}% have only one text |
|
\def\righttext{#1}% |
|
\fi |
|
% |
|
\ifodd\pageno |
|
\def\temp{\inrightmargin\righttext}% odd page -> outside is right margin |
|
\else |
|
\def\temp{\inleftmargin\lefttext}% |
|
\fi |
|
\temp |
|
} |
|
|
% @include file insert text of that file as input. |
% @include file insert text of that file as input. |
% Allow normal characters that we make active in the argument (a file name). |
% Allow normal characters that we make active in the argument (a file name). |
Line 784 where each line of input produces a line
|
Line 836 where each line of input produces a line
|
% |
% |
\def\asis#1{#1} |
\def\asis#1{#1} |
|
|
% @math means output in math mode. |
% @math outputs its argument in math mode. |
% 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 |
% sequences like \math are expanded when the toc file is written. Then, |
% to set catcodes according to plain TeX first, to allow for subscripts, |
% we read the toc file back, the $'s will be normal characters (as they |
% superscripts, special math chars, etc. |
% should be, according to the definition of Texinfo). So we must use a |
% |
% control sequence to switch into and out of math mode. |
% @math does not do math typesetting in section titles, index |
|
% entries, and other such contexts where the catcodes are set before |
|
% @math gets a chance to work. This could perhaps be fixed, but for now |
|
% at least we can have real math in the main text, where it's needed most. |
|
% |
|
\let\implicitmath = $%$ font-lock fix |
|
% |
|
% One complication: _ usually means subscripts, but it could also mean |
|
% an actual _ character, as in @math{@var{some_variable} + 1}. So make |
|
% _ within @math be active (mathcode "8000), and distinguish by seeing |
|
% if the current family is \slfam, which is what @var uses. |
|
% |
|
{\catcode95 = \active % 95 = _ |
|
\gdef\mathunderscore{% |
|
\catcode95=\active |
|
\def_{\ifnum\fam=\slfam \_\else\sb\fi}% |
|
}} |
% |
% |
% This isn't quite enough for @math to work properly in indices, but it |
% Another complication: we want \\ (and @\) to output a \ character. |
% seems unlikely it will ever be needed there. |
% FYI, plain.tex uses \\ as a temporary control sequence (why?), but |
|
% this is not advertised and we don't care. Texinfo does not |
|
% otherwise define @\. |
|
% |
|
% The \mathchar is class=0=ordinary, family=7=ttfam, position=5C=\. |
|
\def\mathbackslash{\ifnum\fam=\ttfam \mathchar"075C \else\backslash \fi} |
% |
% |
\let\implicitmath = $ |
\def\math{% |
\def\math#1{\implicitmath #1\implicitmath} |
\tex |
|
\mathcode`\_="8000 \mathunderscore |
|
\let\\ = \mathbackslash |
|
\implicitmath\finishmath} |
|
\def\finishmath#1{#1\implicitmath\Etex} |
|
|
% @bullet and @minus need the same treatment as @math, just above. |
% @bullet and @minus need the same treatment as @math, just above. |
\def\bullet{\implicitmath\ptexbullet\implicitmath} |
\def\bullet{\implicitmath\ptexbullet\implicitmath} |
Line 878 where each line of input produces a line
|
Line 955 where each line of input produces a line
|
\def\dopdfimage#1#2#3{% |
\def\dopdfimage#1#2#3{% |
\def\imagewidth{#2}% |
\def\imagewidth{#2}% |
\def\imageheight{#3}% |
\def\imageheight{#3}% |
|
% without \immediate, pdftex seg faults when the same image is |
|
% included twice. (Version 3.14159-pre-1.0-unofficial-20010704.) |
\ifnum\pdftexversion < 14 |
\ifnum\pdftexversion < 14 |
\pdfimage |
\immediate\pdfimage |
\else |
\else |
\pdfximage |
\immediate\pdfximage |
\fi |
\fi |
\ifx\empty\imagewidth\else width \imagewidth \fi |
\ifx\empty\imagewidth\else width \imagewidth \fi |
\ifx\empty\imageheight\else height \imageheight \fi |
\ifx\empty\imageheight\else height \imageheight \fi |
{#1.pdf}% |
\ifnum\pdftexversion<13 |
|
#1.pdf% |
|
\else |
|
{#1.pdf}% |
|
\fi |
\ifnum\pdftexversion < 14 \else |
\ifnum\pdftexversion < 14 \else |
\pdfrefximage \pdflastximage |
\pdfrefximage \pdflastximage |
\fi} |
\fi} |
\def\pdfmkdest#1{\pdfdest name{#1@} xyz} |
\def\pdfmkdest#1{{\normalturnoffactive \pdfdest name{#1} xyz}} |
\def\pdfmkpgn#1{#1@} |
\def\pdfmkpgn#1{#1} |
\let\linkcolor = \Cyan |
\let\linkcolor = \Blue % was Cyan, but that seems light? |
\def\endlink{\Black\pdfendlink} |
\def\endlink{\Black\pdfendlink} |
% Adding outlines to PDF; macros for calculating structure of outlines |
% Adding outlines to PDF; macros for calculating structure of outlines |
% come from Petr Olsak |
% come from Petr Olsak |
Line 902 where each line of input produces a line
|
Line 985 where each line of input produces a line
|
\expandafter\xdef\csname#1\endcsname{\the\tempnum}} |
\expandafter\xdef\csname#1\endcsname{\the\tempnum}} |
\def\pdfmakeoutlines{{% |
\def\pdfmakeoutlines{{% |
\openin 1 \jobname.toc |
\openin 1 \jobname.toc |
\ifeof 1\else\bgroup |
\ifeof 1\else\begingroup |
\closein 1 |
\closein 1 |
\indexnofonts |
\indexnofonts |
\def\tt{} |
\def\tt{} |
% thanh's hack / proper braces in bookmarks |
\let\_ = \normalunderscore |
|
% Thanh's hack / proper braces in bookmarks |
\edef\mylbrace{\iftrue \string{\else}\fi}\let\{=\mylbrace |
\edef\mylbrace{\iftrue \string{\else}\fi}\let\{=\mylbrace |
\edef\myrbrace{\iffalse{\else\string}\fi}\let\}=\myrbrace |
\edef\myrbrace{\iffalse{\else\string}\fi}\let\}=\myrbrace |
% |
% |
\def\chapentry ##1##2##3{} |
\def\chapentry ##1##2##3{} |
|
\let\appendixentry = \chapentry |
\def\unnumbchapentry ##1##2{} |
\def\unnumbchapentry ##1##2{} |
\def\secentry ##1##2##3##4{\advancenumber{chap##2}} |
\def\secentry ##1##2##3##4{\advancenumber{chap##2}} |
\def\unnumbsecentry ##1##2{} |
\def\unnumbsecentry ##1##2##3{\advancenumber{chap##2}} |
\def\subsecentry ##1##2##3##4##5{\advancenumber{sec##2.##3}} |
\def\subsecentry ##1##2##3##4##5{\advancenumber{sec##2.##3}} |
\def\unnumbsubsecentry ##1##2{} |
\def\unnumbsubsecentry ##1##2##3##4{\advancenumber{sec##2.##3}} |
\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}} |
\def\unnumbsubsubsecentry ##1##2{} |
\def\unnumbsubsubsecentry ##1##2##3##4##5{\advancenumber{subsec##2.##3.##4}} |
\input \jobname.toc |
\input \jobname.toc |
\def\chapentry ##1##2##3{% |
\def\chapentry ##1##2##3{% |
\pdfoutline goto name{\pdfmkpgn{##3}}count-\expnumber{chap##2}{##1}} |
\pdfoutline goto name{\pdfmkpgn{##3}}count-\expnumber{chap##2}{##1}} |
|
\let\appendixentry = \chapentry |
\def\unnumbchapentry ##1##2{% |
\def\unnumbchapentry ##1##2{% |
\pdfoutline goto name{\pdfmkpgn{##2}}{##1}} |
\pdfoutline goto name{\pdfmkpgn{##2}}{##1}} |
\def\secentry ##1##2##3##4{% |
\def\secentry ##1##2##3##4{% |
\pdfoutline goto name{\pdfmkpgn{##4}}count-\expnumber{sec##2.##3}{##1}} |
\pdfoutline goto name{\pdfmkpgn{##4}}count-\expnumber{sec##2.##3}{##1}} |
\def\unnumbsecentry ##1##2{% |
\def\unnumbsecentry ##1##2##3{% |
\pdfoutline goto name{\pdfmkpgn{##2}}{##1}} |
\pdfoutline goto name{\pdfmkpgn{##3}}{##1}} |
\def\subsecentry ##1##2##3##4##5{% |
\def\subsecentry ##1##2##3##4##5{% |
\pdfoutline goto name{\pdfmkpgn{##5}}count-\expnumber{subsec##2.##3.##4}{##1}} |
\pdfoutline goto name{\pdfmkpgn{##5}}count-\expnumber{subsec##2.##3.##4}{##1}} |
\def\unnumbsubsecentry ##1##2{% |
\def\unnumbsubsecentry ##1##2##3##4{% |
\pdfoutline goto name{\pdfmkpgn{##2}}{##1}} |
\pdfoutline goto name{\pdfmkpgn{##4}}{##1}} |
\def\subsubsecentry ##1##2##3##4##5##6{% |
\def\subsubsecentry ##1##2##3##4##5##6{% |
\pdfoutline goto name{\pdfmkpgn{##6}}{##1}} |
\pdfoutline goto name{\pdfmkpgn{##6}}{##1}} |
\def\unnumbsubsubsecentry ##1##2{% |
\def\unnumbsubsubsecentry ##1##2##3##4##5{% |
\pdfoutline goto name{\pdfmkpgn{##2}}{##1}} |
\pdfoutline goto name{\pdfmkpgn{##5}}{##1}} |
\input \jobname.toc |
\input \jobname.toc |
\egroup\fi |
\endgroup\fi |
}} |
}} |
\def\makelinks #1,{% |
\def\makelinks #1,{% |
\def\params{#1}\def\E{END}% |
\def\params{#1}\def\E{END}% |
Line 986 where each line of input produces a line
|
Line 1072 where each line of input produces a line
|
\def\pdfurl#1{% |
\def\pdfurl#1{% |
\begingroup |
\begingroup |
\normalturnoffactive\def\@{@}% |
\normalturnoffactive\def\@{@}% |
|
\let\value=\expandablevalue |
\leavevmode\Red |
\leavevmode\Red |
\startlink attr{/Border [0 0 0]}% |
\startlink attr{/Border [0 0 0]}% |
user{/Subtype /Link /A << /S /URI /URI (#1) >>}% |
user{/Subtype /Link /A << /S /URI /URI (#1) >>}% |
Line 1013 where each line of input produces a line
|
Line 1100 where each line of input produces a line
|
\def\makelink{\addtokens{\toksB}% |
\def\makelink{\addtokens{\toksB}% |
{\noexpand\pdflink{\the\toksC}}\toksC={}\global\countA=0} |
{\noexpand\pdflink{\the\toksC}}\toksC={}\global\countA=0} |
\def\pdflink#1{% |
\def\pdflink#1{% |
\startlink attr{/Border [0 0 0]} goto name{\mkpgn{#1}} |
\startlink attr{/Border [0 0 0]} goto name{\pdfmkpgn{#1}} |
\linkcolor #1\endlink} |
\linkcolor #1\endlink} |
\def\mkpgn#1{#1@} |
|
\def\done{\edef\st{\global\noexpand\toksA={\the\toksB}}\st} |
\def\done{\edef\st{\global\noexpand\toksA={\the\toksB}}\st} |
\fi % \ifx\pdfoutput |
\fi % \ifx\pdfoutput |
|
|
Line 1032 where each line of input produces a line
|
Line 1118 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} |
|
|
% Use Computer Modern fonts at \magstephalf (11pt). |
% Default leading. |
\newcount\mainmagstep |
\newdimen\textleading \textleading = 13.2pt |
\mainmagstep=\magstephalf |
|
|
% Set the baselineskip to #1, and the lineskip and strut size |
|
% correspondingly. There is no deep meaning behind these magic numbers |
|
% used as factors; they just match (closely enough) what Knuth defined. |
|
% |
|
\def\lineskipfactor{.08333} |
|
\def\strutheightpercent{.70833} |
|
\def\strutdepthpercent {.29167} |
|
% |
|
\def\setleading#1{% |
|
\normalbaselineskip = #1\relax |
|
\normallineskip = \lineskipfactor\normalbaselineskip |
|
\normalbaselines |
|
\setbox\strutbox =\hbox{% |
|
\vrule width0pt height\strutheightpercent\baselineskip |
|
depth \strutdepthpercent \baselineskip |
|
}% |
|
} |
|
|
% Set the font macro #1 to the font named #2, adding on the |
% Set the font macro #1 to the font named #2, adding on the |
% specified font prefix (normally `cm'). |
% specified font prefix (normally `cm'). |
Line 1064 where each line of input produces a line
|
Line 1167 where each line of input produces a line
|
\def\scshape{csc} |
\def\scshape{csc} |
\def\scbshape{csc} |
\def\scbshape{csc} |
|
|
|
\newcount\mainmagstep |
\ifx\bigger\relax |
\ifx\bigger\relax |
\let\mainmagstep=\magstep1 |
% not really supported. |
\setfont\textrm\rmshape{12}{1000} |
\let\mainmagstep=\magstep1 |
\setfont\texttt\ttshape{12}{1000} |
\setfont\textrm\rmshape{12}{1000} |
|
\setfont\texttt\ttshape{12}{1000} |
\else |
\else |
\setfont\textrm\rmshape{10}{\mainmagstep} |
\mainmagstep=\magstephalf |
\setfont\texttt\ttshape{10}{\mainmagstep} |
\setfont\textrm\rmshape{10}{\mainmagstep} |
|
\setfont\texttt\ttshape{10}{\mainmagstep} |
\fi |
\fi |
% Instead of cmb10, you many want to use cmbx10. |
% Instead of cmb10, you many want to use cmbx10. |
% cmbx10 is a prettier font on its own, but cmb10 |
% cmbx10 is a prettier font on its own, but cmb10 |
Line 1101 where each line of input produces a line
|
Line 1207 where each line of input produces a line
|
\font\smalli=cmmi9 |
\font\smalli=cmmi9 |
\font\smallsy=cmsy9 |
\font\smallsy=cmsy9 |
|
|
|
% Fonts for small examples (8pt). |
|
\setfont\smallerrm\rmshape{8}{1000} |
|
\setfont\smallertt\ttshape{8}{1000} |
|
\setfont\smallerbf\bfshape{10}{800} |
|
\setfont\smallerit\itshape{8}{1000} |
|
\setfont\smallersl\slshape{8}{1000} |
|
\setfont\smallersf\sfshape{8}{1000} |
|
\setfont\smallersc\scshape{10}{800} |
|
\setfont\smallerttsl\ttslshape{10}{800} |
|
\font\smalleri=cmmi8 |
|
\font\smallersy=cmsy8 |
|
|
% Fonts for title page: |
% Fonts for title page: |
\setfont\titlerm\rmbshape{12}{\magstep3} |
\setfont\titlerm\rmbshape{12}{\magstep3} |
\setfont\titleit\itbshape{10}{\magstep4} |
\setfont\titleit\itbshape{10}{\magstep4} |
Line 1138 where each line of input produces a line
|
Line 1256 where each line of input produces a line
|
\font\seci=cmmi12 scaled \magstep1 |
\font\seci=cmmi12 scaled \magstep1 |
\font\secsy=cmsy10 scaled \magstep2 |
\font\secsy=cmsy10 scaled \magstep2 |
|
|
% \setfont\ssecrm\bxshape{10}{\magstep1} % This size an font looked bad. |
|
% \setfont\ssecit\itshape{10}{\magstep1} % The letters were too crowded. |
|
% \setfont\ssecsl\slshape{10}{\magstep1} |
|
% \setfont\ssectt\ttshape{10}{\magstep1} |
|
% \setfont\ssecsf\sfshape{10}{\magstep1} |
|
|
|
%\setfont\ssecrm\bfshape{10}{1315} % Note the use of cmb rather than cmbx. |
|
%\setfont\ssecit\itshape{10}{1315} % Also, the size is a little larger than |
|
%\setfont\ssecsl\slshape{10}{1315} % being scaled magstep1. |
|
%\setfont\ssectt\ttshape{10}{1315} |
|
%\setfont\ssecsf\sfshape{10}{1315} |
|
|
|
%\let\ssecbf=\ssecrm |
|
|
|
% Subsection fonts (13.15pt). |
% Subsection fonts (13.15pt). |
\setfont\ssecrm\rmbshape{12}{\magstephalf} |
\setfont\ssecrm\rmbshape{12}{\magstephalf} |
\setfont\ssecit\itbshape{10}{1315} |
\setfont\ssecit\itbshape{10}{1315} |
Line 1168 where each line of input produces a line
|
Line 1272 where each line of input produces a line
|
|
|
% 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 except |
% don't bother to reset \scriptfont and \scriptscriptfont (which would |
% in the main text, we don't bother to reset \scriptfont and |
% also require loading a lot more fonts). |
% \scriptscriptfont (which would also require loading a lot more fonts). |
% |
% |
\def\resetmathfonts{% |
\def\resetmathfonts{% |
\textfont0 = \tenrm \textfont1 = \teni \textfont2 = \tensy |
\textfont0=\tenrm \textfont1=\teni \textfont2=\tensy |
\textfont\itfam = \tenit \textfont\slfam = \tensl \textfont\bffam = \tenbf |
\textfont\itfam=\tenit \textfont\slfam=\tensl \textfont\bffam=\tenbf |
\textfont\ttfam = \tentt \textfont\sffam = \tensf |
\textfont\ttfam=\tentt \textfont\sffam=\tensf |
} |
} |
|
|
|
|
% The font-changing commands redefine the meanings of \tenSTYLE, instead |
% The font-changing commands redefine the meanings of \tenSTYLE, instead |
% 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 |
% in math mode, where it is the current \fam that is relevant in most |
% in math mode, where it is the current \fam that is relevant in most |
Line 1189 where each line of input produces a line
|
Line 1292 where each line of input produces a line
|
\let\tenrm=\textrm \let\tenit=\textit \let\tensl=\textsl |
\let\tenrm=\textrm \let\tenit=\textit \let\tensl=\textsl |
\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 \setleading{\textleading}} |
\def\titlefonts{% |
\def\titlefonts{% |
\let\tenrm=\titlerm \let\tenit=\titleit \let\tensl=\titlesl |
\let\tenrm=\titlerm \let\tenit=\titleit \let\tensl=\titlesl |
\let\tenbf=\titlebf \let\tentt=\titlett \let\smallcaps=\titlesc |
\let\tenbf=\titlebf \let\tentt=\titlett \let\smallcaps=\titlesc |
Line 1218 where each line of input produces a line
|
Line 1321 where each line of input produces a line
|
\let\tenbf=\smallbf \let\tentt=\smalltt \let\smallcaps=\smallsc |
\let\tenbf=\smallbf \let\tentt=\smalltt \let\smallcaps=\smallsc |
\let\tensf=\smallsf \let\teni=\smalli \let\tensy=\smallsy |
\let\tensf=\smallsf \let\teni=\smalli \let\tensy=\smallsy |
\let\tenttsl=\smallttsl |
\let\tenttsl=\smallttsl |
\resetmathfonts \setleading{11pt}} |
\resetmathfonts \setleading{10.5pt}} |
|
\def\smallerfonts{% |
|
\let\tenrm=\smallerrm \let\tenit=\smallerit \let\tensl=\smallersl |
|
\let\tenbf=\smallerbf \let\tentt=\smallertt \let\smallcaps=\smallersc |
|
\let\tensf=\smallersf \let\teni=\smalleri \let\tensy=\smallersy |
|
\let\tenttsl=\smallerttsl |
|
\resetmathfonts \setleading{9.5pt}} |
|
\let\smallexamplefonts = \smallerfonts |
|
|
% Set up the default fonts, so we can use them for creating boxes. |
% Set up the default fonts, so we can use them for creating boxes. |
% |
% |
Line 1332 where each line of input produces a line
|
Line 1442 where each line of input produces a line
|
|
|
\def\realdash{-} |
\def\realdash{-} |
\def\codedash{-\discretionary{}{}{}} |
\def\codedash{-\discretionary{}{}{}} |
\def\codeunder{\ifusingtt{\normalunderscore\discretionary{}{}{}}{\_}} |
\def\codeunder{% |
|
% this is all so @math{@code{var_name}+1} can work. In math mode, _ |
|
% is "active" (mathcode"8000) and \normalunderscore (or \char95, etc.) |
|
% will therefore expand the active definition of _, which is us |
|
% (inside @code that is), therefore an endless loop. |
|
\ifusingtt{\ifmmode |
|
\mathchar"075F % class 0=ordinary, family 7=ttfam, pos 0x5F=_. |
|
\else\normalunderscore \fi |
|
\discretionary{}{}{}}% |
|
{\_}% |
|
} |
\def\codex #1{\tclose{#1}\endgroup} |
\def\codex #1{\tclose{#1}\endgroup} |
|
|
%\let\exp=\tclose %Was temporary |
|
|
|
% @kbd is like @code, except that if the argument is just one @key command, |
% @kbd is like @code, except that if the argument is just one @key command, |
% then @kbd has no effect. |
% then @kbd has no effect. |
|
|
Line 1521 where each line of input produces a line
|
Line 1639 where each line of input produces a line
|
\oldpage |
\oldpage |
\endgroup |
\endgroup |
% |
% |
|
% Need this before the \...aftertitlepage checks so that if they are |
|
% in effect the toc pages will come out with page numbers. |
|
\HEADINGSon |
|
% |
% If they want short, they certainly want long too. |
% If they want short, they certainly want long too. |
\ifsetshortcontentsaftertitlepage |
\ifsetshortcontentsaftertitlepage |
\shortcontents |
\shortcontents |
Line 1534 where each line of input produces a line
|
Line 1656 where each line of input produces a line
|
\global\let\contents = \relax |
\global\let\contents = \relax |
\global\let\shortcontents = \relax |
\global\let\shortcontents = \relax |
\fi |
\fi |
% |
|
\ifpdf \pdfmakepagedesttrue \fi |
|
% |
|
\HEADINGSon |
|
} |
} |
|
|
\def\finishtitlepage{% |
\def\finishtitlepage{% |
Line 1670 where each line of input produces a line
|
Line 1788 where each line of input produces a line
|
} |
} |
|
|
% Subroutines used in generating headings |
% Subroutines used in generating headings |
% Produces Day Month Year style of output. |
% This produces Day Month Year style of output. |
|
% Only define if not already defined, in case a txi-??.tex file has set |
|
% up a different format (e.g., txi-cs.tex does this). |
|
\ifx\today\undefined |
\def\today{% |
\def\today{% |
\number\day\space |
\number\day\space |
\ifcase\month |
\ifcase\month |
Line 1679 where each line of input produces a line
|
Line 1800 where each line of input produces a line
|
\or\putwordMSep\or\putwordMOct\or\putwordMNov\or\putwordMDec |
\or\putwordMSep\or\putwordMOct\or\putwordMNov\or\putwordMDec |
\fi |
\fi |
\space\number\year} |
\space\number\year} |
|
\fi |
|
|
% @settitle line... specifies the title of the document, for headings. |
% @settitle line... specifies the title of the document, for headings. |
% It generates no output of its own. |
% It generates no output of its own. |
Line 2291 width0pt\relax} \fi
|
Line 2413 width0pt\relax} \fi
|
\let\item = \relax |
\let\item = \relax |
} |
} |
|
|
% Ignore @ignore ... @end ignore. |
% Ignore @ignore, @ifhtml, @ifinfo, @ifplaintext, @ifnottex, @html, @menu, |
|
% @direntry, and @documentdescription. |
% |
% |
\def\ignore{\doignore{ignore}} |
\def\ignore{\doignore{ignore}} |
|
|
% Ignore @ifinfo, @ifhtml, @ifnottex, @html, @menu, and @direntry text. |
|
% |
|
\def\ifinfo{\doignore{ifinfo}} |
|
\def\ifhtml{\doignore{ifhtml}} |
\def\ifhtml{\doignore{ifhtml}} |
|
\def\ifinfo{\doignore{ifinfo}} |
|
\def\ifplaintext{\doignore{ifplaintext}} |
\def\ifnottex{\doignore{ifnottex}} |
\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}} |
|
\def\documentdescription{\doignore{documentdescription}} |
|
\def\documentdescriptionword{documentdescription} |
|
|
% @dircategory CATEGORY -- specify a category of the dir file |
% @dircategory CATEGORY -- specify a category of the dir file |
% which this file should belong to. Ignore this in TeX. |
% which this file should belong to. Ignore this in TeX. |
Line 2329 width0pt\relax} \fi
|
Line 2452 width0pt\relax} \fi
|
% We must not have @c interpreted as a control sequence. |
% We must not have @c interpreted as a control sequence. |
\catcode`\@ = 12 |
\catcode`\@ = 12 |
% |
% |
% Make the letter c a comment character so that the rest of the line |
\def\ignoreword{#1}% |
% will be ignored. This way, the document can have (for example) |
\ifx\ignoreword\documentdescriptionword |
% @c @end ifinfo |
% The c kludge breaks documentdescription, since |
% and the @end ifinfo will be properly ignored. |
% `documentdescription' contains a `c'. Means not everything will |
% (We've just changed @ to catcode 12.) |
% be ignored inside @documentdescription, but oh well... |
\catcode`\c = 14 |
\else |
|
% Make the letter c a comment character so that the rest of the line |
|
% will be ignored. This way, the document can have (for example) |
|
% @c @end ifinfo |
|
% and the @end ifinfo will be properly ignored. |
|
% (We've just changed @ to catcode 12.) |
|
\catcode`\c = 14 |
|
\fi |
% |
% |
% And now expand that command. |
% And now expand the command defined above. |
\doignoretext |
\doignoretext |
} |
} |
|
|
Line 2408 width0pt\relax} \fi
|
Line 2538 width0pt\relax} \fi
|
\let\tenrm=\nullfont \let\tenit=\nullfont \let\tensl=\nullfont |
\let\tenrm=\nullfont \let\tenit=\nullfont \let\tensl=\nullfont |
\let\tenbf=\nullfont \let\tentt=\nullfont \let\smallcaps=\nullfont |
\let\tenbf=\nullfont \let\tentt=\nullfont \let\smallcaps=\nullfont |
\let\tensf=\nullfont |
\let\tensf=\nullfont |
% Similarly for index fonts (mostly for their use in smallexample). |
% Similarly for index fonts. |
\let\smallrm=\nullfont \let\smallit=\nullfont \let\smallsl=\nullfont |
\let\smallrm=\nullfont \let\smallit=\nullfont \let\smallsl=\nullfont |
\let\smallbf=\nullfont \let\smalltt=\nullfont \let\smallsc=\nullfont |
\let\smallbf=\nullfont \let\smalltt=\nullfont \let\smallsc=\nullfont |
\let\smallsf=\nullfont |
\let\smallsf=\nullfont |
|
% Similarly for smallexample fonts. |
|
\let\smallerrm=\nullfont \let\smallerit=\nullfont \let\smallersl=\nullfont |
|
\let\smallerbf=\nullfont \let\smallertt=\nullfont \let\smallersc=\nullfont |
|
\let\smallersf=\nullfont |
% |
% |
% Don't complain when characters are missing from the fonts. |
% Don't complain when characters are missing from the fonts. |
\tracinglostchars = 0 |
\tracinglostchars = 0 |
Line 2523 width0pt\relax} \fi
|
Line 2657 width0pt\relax} \fi
|
\def\ifclearfail{\nestedignore{ifclear}} |
\def\ifclearfail{\nestedignore{ifclear}} |
\defineunmatchedend{ifclear} |
\defineunmatchedend{ifclear} |
|
|
% @iftex, @ifnothtml, @ifnotinfo always succeed; we read the text |
% @iftex, @ifnothtml, @ifnotinfo, @ifnotplaintext always succeed; we |
% following, through the first @end iftex (etc.). Make `@end iftex' |
% read the text following, through the first @end iftex (etc.). Make |
% (etc.) valid only after an @iftex. |
% `@end iftex' (etc.) valid only after an @iftex. |
% |
% |
\def\iftex{\conditionalsucceed{iftex}} |
\def\iftex{\conditionalsucceed{iftex}} |
\def\ifnothtml{\conditionalsucceed{ifnothtml}} |
\def\ifnothtml{\conditionalsucceed{ifnothtml}} |
\def\ifnotinfo{\conditionalsucceed{ifnotinfo}} |
\def\ifnotinfo{\conditionalsucceed{ifnotinfo}} |
|
\def\ifnotplaintext{\conditionalsucceed{ifnotplaintext}} |
\defineunmatchedend{iftex} |
\defineunmatchedend{iftex} |
\defineunmatchedend{ifnothtml} |
\defineunmatchedend{ifnothtml} |
\defineunmatchedend{ifnotinfo} |
\defineunmatchedend{ifnotinfo} |
|
\defineunmatchedend{ifnotplaintext} |
|
|
% 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 |
% at @end iftex, since then @set commands inside the conditional have no |
% @end iftex, since then @set commands inside the conditional have no |
% effect (they'd get reverted at the end of the group). So we must |
% effect (they'd get reverted at the end of the group). So we must |
% define \Eiftex to redefine itself to be its previous value. (We can't |
% define \Eiftex to redefine itself to be its previous value. (We can't |
% just define it to fail again with an ``unmatched end'' error, since |
% just define it to fail again with an ``unmatched end'' error, since |
Line 2587 width0pt\relax} \fi
|
Line 2723 width0pt\relax} \fi
|
} |
} |
|
|
% @defindex foo == \newindex{foo} |
% @defindex foo == \newindex{foo} |
|
% |
\def\defindex{\parsearg\newindex} |
\def\defindex{\parsearg\newindex} |
|
|
% Define @defcodeindex, like @defindex except put all entries in @code. |
% Define @defcodeindex, like @defindex except put all entries in @code. |
|
% |
|
\def\defcodeindex{\parsearg\newcodeindex} |
|
% |
\def\newcodeindex#1{% |
\def\newcodeindex#1{% |
\iflinks |
\iflinks |
\expandafter\newwrite \csname#1indfile\endcsname |
\expandafter\newwrite \csname#1indfile\endcsname |
\openout \csname#1indfile\endcsname \jobname.#1 |
\openout \csname#1indfile\endcsname \jobname.#1 |
\fi |
\fi |
\expandafter\xdef\csname#1index\endcsname{% |
\expandafter\xdef\csname#1index\endcsname{% |
\noexpand\docodeindex{#1}} |
\noexpand\docodeindex{#1}}% |
} |
} |
|
|
\def\defcodeindex{\parsearg\newcodeindex} |
|
|
|
% @synindex foo bar makes index foo feed into index bar. |
% @synindex foo bar makes index foo feed into index bar. |
% 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. |
% The \closeout helps reduce unnecessary open files; the limit on the |
% |
% Acorn RISC OS is a mere 16 files. |
|
\def\synindex#1 #2 {% |
|
\expandafter\let\expandafter\synindexfoo\expandafter=\csname#2indfile\endcsname |
|
\expandafter\closeout\csname#1indfile\endcsname |
|
\expandafter\let\csname#1indfile\endcsname=\synindexfoo |
|
\expandafter\xdef\csname#1index\endcsname{% define \xxxindex |
|
\noexpand\doindex{#2}}% |
|
} |
|
|
|
% @syncodeindex foo bar similar, but put all entries made for index foo |
% @syncodeindex foo bar similar, but put all entries made for index foo |
% inside @code. |
% inside @code. |
\def\syncodeindex#1 #2 {% |
% |
\expandafter\let\expandafter\synindexfoo\expandafter=\csname#2indfile\endcsname |
\def\synindex#1 #2 {\dosynindex\doindex{#1}{#2}} |
\expandafter\closeout\csname#1indfile\endcsname |
\def\syncodeindex#1 #2 {\dosynindex\docodeindex{#1}{#2}} |
\expandafter\let\csname#1indfile\endcsname=\synindexfoo |
|
\expandafter\xdef\csname#1index\endcsname{% define \xxxindex |
% #1 is \doindex or \docodeindex, #2 the index getting redefined (foo), |
\noexpand\docodeindex{#2}}% |
% #3 the target index (bar). |
|
\def\dosynindex#1#2#3{% |
|
% Only do \closeout if we haven't already done it, else we'll end up |
|
% closing the target index. |
|
\expandafter \ifx\csname donesynindex#2\endcsname \undefined |
|
% The \closeout helps reduce unnecessary open files; the limit on the |
|
% Acorn RISC OS is a mere 16 files. |
|
\expandafter\closeout\csname#2indfile\endcsname |
|
\expandafter\let\csname\donesynindex#2\endcsname = 1 |
|
\fi |
|
% redefine \fooindfile: |
|
\expandafter\let\expandafter\temp\expandafter=\csname#3indfile\endcsname |
|
\expandafter\let\csname#2indfile\endcsname=\temp |
|
% redefine \fooindex: |
|
\expandafter\xdef\csname#2index\endcsname{\noexpand#1{#3}}% |
} |
} |
|
|
% Define \doindex, the driver for all \fooindex macros. |
% Define \doindex, the driver for all \fooindex macros. |
Line 2642 width0pt\relax} \fi
|
Line 2784 width0pt\relax} \fi
|
\def\docodeindex#1{\edef\indexname{#1}\parsearg\singlecodeindexer} |
\def\docodeindex#1{\edef\indexname{#1}\parsearg\singlecodeindexer} |
\def\singlecodeindexer #1{\doind{\indexname}{\code{#1}}} |
\def\singlecodeindexer #1{\doind{\indexname}{\code{#1}}} |
|
|
|
% Take care of texinfo commands likely to appear in an index entry. |
|
% (Must be a way to avoid doing expansion at all, and thus not have to |
|
% laboriously list every single command here.) |
|
% |
\def\indexdummies{% |
\def\indexdummies{% |
\def\ { }% |
\def\ { }% |
|
\def\@{@}% change to @@ when we switch to @ as escape char in aux files. |
|
% Need these in case \tex is in effect and \{ is a \delimiter again. |
|
% But can't use \lbracecmd and \rbracecmd because texindex assumes |
|
% braces and backslashes are used only as delimiters. |
|
\let\{ = \mylbrace |
|
\let\} = \myrbrace |
|
\def\_{{\realbackslash _}}% |
|
\normalturnoffactive |
|
% |
% Take care of the plain tex accent commands. |
% Take care of the plain tex accent commands. |
|
\def\,##1{\realbackslash ,{##1}}% |
\def\"{\realbackslash "}% |
\def\"{\realbackslash "}% |
\def\`{\realbackslash `}% |
\def\`{\realbackslash `}% |
\def\'{\realbackslash '}% |
\def\'{\realbackslash '}% |
Line 2657 width0pt\relax} \fi
|
Line 2813 width0pt\relax} \fi
|
\def\u{\realbackslash u}% |
\def\u{\realbackslash u}% |
\def\v{\realbackslash v}% |
\def\v{\realbackslash v}% |
\def\H{\realbackslash H}% |
\def\H{\realbackslash H}% |
|
\def\dotless##1{\realbackslash dotless {##1}}% |
% 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}% |
|
\def\AA{\realbackslash AA}% |
\def\AA{\realbackslash AA}% |
\def\o{\realbackslash o}% |
\def\AE{\realbackslash AE}% |
|
\def\L{\realbackslash L}% |
|
\def\OE{\realbackslash OE}% |
\def\O{\realbackslash O}% |
\def\O{\realbackslash O}% |
|
\def\aa{\realbackslash aa}% |
|
\def\ae{\realbackslash ae}% |
\def\l{\realbackslash l}% |
\def\l{\realbackslash l}% |
\def\L{\realbackslash L}% |
\def\oe{\realbackslash oe}% |
|
\def\o{\realbackslash o}% |
\def\ss{\realbackslash ss}% |
\def\ss{\realbackslash ss}% |
% Take care of texinfo commands likely to appear in an index entry. |
% |
% (Must be a way to avoid doing expansion at all, and thus not have to |
% 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 }% |
|
\def\bf{\realbackslash bf }% |
\def\bf{\realbackslash bf }% |
|
\def\gtr{\realbackslash gtr}% |
|
\def\hat{\realbackslash hat}% |
|
\def\less{\realbackslash less}% |
%\def\rm{\realbackslash rm }% |
%\def\rm{\realbackslash rm }% |
\def\sl{\realbackslash sl }% |
|
\def\sf{\realbackslash sf}% |
\def\sf{\realbackslash sf}% |
|
\def\sl{\realbackslash sl }% |
|
\def\tclose##1{\realbackslash tclose {##1}}% |
\def\tt{\realbackslash tt}% |
\def\tt{\realbackslash tt}% |
\def\gtr{\realbackslash gtr}% |
% |
\def\less{\realbackslash less}% |
\def\b##1{\realbackslash b {##1}}% |
\def\hat{\realbackslash hat}% |
\def\i##1{\realbackslash i {##1}}% |
|
\def\sc##1{\realbackslash sc {##1}}% |
|
\def\t##1{\realbackslash t {##1}}% |
|
\def\r##1{\realbackslash r {##1}}% |
|
% |
\def\TeX{\realbackslash TeX}% |
\def\TeX{\realbackslash TeX}% |
\def\dots{\realbackslash dots }% |
\def\acronym##1{\realbackslash acronym {##1}}% |
\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}}% |
|
\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}}% |
|
\def\command##1{\realbackslash command {##1}}% |
\def\command##1{\realbackslash command {##1}}% |
|
\def\dfn##1{\realbackslash dfn {##1}}% |
|
\def\dots{\realbackslash dots }% |
|
\def\emph##1{\realbackslash emph {##1}}% |
|
\def\env##1{\realbackslash env {##1}}% |
|
\def\file##1{\realbackslash file {##1}}% |
|
\def\kbd##1{\realbackslash kbd {##1}}% |
|
\def\key##1{\realbackslash key {##1}}% |
|
\def\math##1{\realbackslash math {##1}}% |
\def\option##1{\realbackslash option {##1}}% |
\def\option##1{\realbackslash option {##1}}% |
\def\dotless##1{\realbackslash dotless {##1}}% |
|
\def\samp##1{\realbackslash samp {##1}}% |
\def\samp##1{\realbackslash samp {##1}}% |
\def\,##1{\realbackslash ,{##1}}% |
\def\strong##1{\realbackslash strong {##1}}% |
\def\t##1{\realbackslash t {##1}}% |
\def\uref##1{\realbackslash uref {##1}}% |
\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}}% |
|
\def\var##1{\realbackslash var {##1}}% |
\def\var##1{\realbackslash var {##1}}% |
\def\kbd##1{\realbackslash kbd {##1}}% |
\def\w{\realbackslash w }% |
\def\dfn##1{\realbackslash dfn {##1}}% |
% |
\def\emph##1{\realbackslash emph {##1}}% |
% These math commands don't seem likely to be used in index entries. |
\def\acronym##1{\realbackslash acronym {##1}}% |
\def\copyright{\realbackslash copyright}% |
|
\def\equiv{\realbackslash equiv}% |
|
\def\error{\realbackslash error}% |
|
\def\expansion{\realbackslash expansion}% |
|
\def\point{\realbackslash point}% |
|
\def\print{\realbackslash print}% |
|
\def\result{\realbackslash result}% |
% |
% |
% Handle some cases of @value -- where the variable name does not |
% Handle some cases of @value -- where the variable name does not |
% contain - or _, and the value does not contain any |
% contain - or _, and the value does not contain any |
Line 2733 width0pt\relax} \fi
|
Line 2886 width0pt\relax} \fi
|
|
|
% If an index command is used in an @example environment, any spaces |
% If an index command is used in an @example environment, any spaces |
% therein should become regular spaces in the raw index file, not the |
% therein should become regular spaces in the raw index file, not the |
% expansion of \tie (\\leavevmode \penalty \@M \ ). |
% expansion of \tie (\leavevmode \penalty \@M \ ). |
{\obeyspaces |
{\obeyspaces |
\gdef\unsepspaces{\obeyspaces\let =\space}} |
\gdef\unsepspaces{\obeyspaces\let =\space}} |
|
|
Line 2744 width0pt\relax} \fi
|
Line 2897 width0pt\relax} \fi
|
\def\indexdummydots{...} |
\def\indexdummydots{...} |
|
|
\def\indexnofonts{% |
\def\indexnofonts{% |
% Just ignore accents. |
\def\@{@}% |
|
% how to handle braces? |
|
\def\_{\normalunderscore}% |
|
% |
\let\,=\indexdummyfont |
\let\,=\indexdummyfont |
\let\"=\indexdummyfont |
\let\"=\indexdummyfont |
\let\`=\indexdummyfont |
\let\`=\indexdummyfont |
Line 2760 width0pt\relax} \fi
|
Line 2916 width0pt\relax} \fi
|
\let\H=\indexdummyfont |
\let\H=\indexdummyfont |
\let\dotless=\indexdummyfont |
\let\dotless=\indexdummyfont |
% 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}% |
|
\def\AA{AA}% |
\def\AA{AA}% |
\def\o{o}% |
\def\AE{AE}% |
|
\def\L{L}% |
|
\def\OE{OE}% |
\def\O{O}% |
\def\O{O}% |
|
\def\aa{aa}% |
|
\def\ae{ae}% |
\def\l{l}% |
\def\l{l}% |
\def\L{L}% |
\def\oe{oe}% |
|
\def\o{o}% |
\def\ss{ss}% |
\def\ss{ss}% |
\let\w=\indexdummyfont |
% |
\let\t=\indexdummyfont |
% Don't no-op \tt, since it isn't a user-level command |
\let\r=\indexdummyfont |
% and is used in the definitions of the active chars like <, >, |, etc. |
\let\i=\indexdummyfont |
% Likewise with the other plain tex font commands. |
|
%\let\tt=\indexdummyfont |
|
% |
\let\b=\indexdummyfont |
\let\b=\indexdummyfont |
\let\emph=\indexdummyfont |
\let\i=\indexdummyfont |
\let\strong=\indexdummyfont |
\let\r=\indexdummyfont |
\let\cite=\indexdummyfont |
|
\let\sc=\indexdummyfont |
\let\sc=\indexdummyfont |
%Don't no-op \tt, since it isn't a user-level command |
\let\t=\indexdummyfont |
% and is used in the definitions of the active chars like <, >, |... |
% |
%\let\tt=\indexdummyfont |
\let\TeX=\indexdummytex |
\let\tclose=\indexdummyfont |
|
\let\code=\indexdummyfont |
|
\let\url=\indexdummyfont |
|
\let\uref=\indexdummyfont |
|
\let\env=\indexdummyfont |
|
\let\acronym=\indexdummyfont |
\let\acronym=\indexdummyfont |
|
\let\cite=\indexdummyfont |
|
\let\code=\indexdummyfont |
\let\command=\indexdummyfont |
\let\command=\indexdummyfont |
\let\option=\indexdummyfont |
\let\dfn=\indexdummyfont |
|
\let\dots=\indexdummydots |
|
\let\emph=\indexdummyfont |
|
\let\env=\indexdummyfont |
\let\file=\indexdummyfont |
\let\file=\indexdummyfont |
\let\samp=\indexdummyfont |
|
\let\kbd=\indexdummyfont |
\let\kbd=\indexdummyfont |
\let\key=\indexdummyfont |
\let\key=\indexdummyfont |
|
\let\math=\indexdummyfont |
|
\let\option=\indexdummyfont |
|
\let\samp=\indexdummyfont |
|
\let\strong=\indexdummyfont |
|
\let\uref=\indexdummyfont |
|
\let\url=\indexdummyfont |
\let\var=\indexdummyfont |
\let\var=\indexdummyfont |
\let\TeX=\indexdummytex |
\let\w=\indexdummyfont |
\let\dots=\indexdummydots |
|
\def\@{@}% |
|
} |
} |
|
|
% To define \realbackslash, we must make \ not be an escape. |
% To define \realbackslash, we must make \ not be an escape. |
Line 2854 width0pt\relax} \fi
|
Line 3014 width0pt\relax} \fi
|
% Now the real index entry with the fonts. |
% Now the real index entry with the fonts. |
\toks0 = {#2}% |
\toks0 = {#2}% |
% |
% |
% If third (subentry) arg is present, add it to the index |
% If the third (subentry) arg is present, add it to the index |
% string. And include a space. |
% line to write. |
\ifx\thirdarg\emptymacro \else |
\ifx\thirdarg\emptymacro \else |
\toks0 = \expandafter{\the\toks0 \space #3}% |
\toks0 = \expandafter{\the\toks0{#3}}% |
\fi |
\fi |
% |
% |
% Set up the complete index entry, with both the sort key |
% Set up the complete index entry, with both the sort key and |
% and the original text, including any font commands. We write |
% the original text, including any font commands. We write |
% three arguments to \entry to the .?? file, texindex reduces to |
% three arguments to \entry to the .?? file (four in the |
% two when writing the .??s sorted result. |
% subentry case), texindex reduces to two when writing the .??s |
|
% sorted result. |
\edef\temp{% |
\edef\temp{% |
\write\csname#1indfile\endcsname{% |
\write\csname#1indfile\endcsname{% |
\realbackslash entry{\indexsorttmp}{\folio}{\the\toks0}}% |
\realbackslash entry{\indexsorttmp}{\folio}{\the\toks0}}% |
Line 3085 width0pt\relax} \fi
|
Line 3246 width0pt\relax} \fi
|
\def\primary #1{\line{#1\hfil}} |
\def\primary #1{\line{#1\hfil}} |
|
|
\newskip\secondaryindent \secondaryindent=0.5cm |
\newskip\secondaryindent \secondaryindent=0.5cm |
|
\def\secondary#1#2{{% |
\def\secondary #1#2{ |
\parfillskip=0in |
{\parfillskip=0in \parskip=0in |
\parskip=0in |
\hangindent =1in \hangafter=1 |
\hangindent=1in |
\noindent\hskip\secondaryindent\hbox{#1}\indexdotfill #2\par |
\hangafter=1 |
|
\noindent\hskip\secondaryindent\hbox{#1}\indexdotfill |
|
\ifpdf |
|
\pdfgettoks#2.\ \the\toksA % The page number ends the paragraph. |
|
\else |
|
#2 |
|
\fi |
|
\par |
}} |
}} |
|
|
% Define two-column mode, which we use to typeset indexes. |
% Define two-column mode, which we use to typeset indexes. |
Line 3149 width0pt\relax} \fi
|
Line 3317 width0pt\relax} \fi
|
% |
% |
% Double the \vsize as well. (We don't need a separate register here, |
% Double the \vsize as well. (We don't need a separate register here, |
% since nobody clobbers \vsize.) |
% since nobody clobbers \vsize.) |
\advance\vsize by -\ht\partialpage |
|
\vsize = 2\vsize |
\vsize = 2\vsize |
} |
} |
|
|
Line 3163 width0pt\relax} \fi
|
Line 3330 width0pt\relax} \fi
|
% previous page. |
% previous page. |
\dimen@ = \vsize |
\dimen@ = \vsize |
\divide\dimen@ by 2 |
\divide\dimen@ by 2 |
|
\advance\dimen@ by -\ht\partialpage |
% |
% |
% box0 will be the left-hand column, box2 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@ |
Line 3170 width0pt\relax} \fi
|
Line 3338 width0pt\relax} \fi
|
\unvbox255 |
\unvbox255 |
\penalty\outputpenalty |
\penalty\outputpenalty |
} |
} |
|
% |
|
% Re-output the contents of the output page -- any previous material, |
|
% followed by the two boxes we just split, in box0 and box2. |
\def\pagesofar{% |
\def\pagesofar{% |
% Re-output the contents of the output page -- any previous material, |
|
% followed by the two boxes we just split, in box0 and box2. |
|
\unvbox\partialpage |
\unvbox\partialpage |
% |
% |
\hsize = \doublecolumnhsize |
\hsize = \doublecolumnhsize |
\wd0=\hsize \wd2=\hsize |
\wd0=\hsize \wd2=\hsize |
\hbox to\pagewidth{\box0\hfil\box2}% |
\hbox to\pagewidth{\box0\hfil\box2}% |
} |
} |
|
% |
|
% All done with double columns. |
\def\enddoublecolumns{% |
\def\enddoublecolumns{% |
\output = {% |
\output = {% |
% Split the last of the double-column material. Leave it on the |
% Split the last of the double-column material. Leave it on the |
Line 3203 width0pt\relax} \fi
|
Line 3374 width0pt\relax} \fi
|
% \endgroup where \vsize got restored). |
% \endgroup where \vsize got restored). |
\pagegoal = \vsize |
\pagegoal = \vsize |
} |
} |
|
% |
|
% Called at the end of the double column material. |
\def\balancecolumns{% |
\def\balancecolumns{% |
% Called at the end of the double column material. |
|
\setbox0 = \vbox{\unvbox255}% like \box255 but more efficient, see p.120. |
\setbox0 = \vbox{\unvbox255}% like \box255 but more efficient, see p.120. |
\dimen@ = \ht0 |
\dimen@ = \ht0 |
\advance\dimen@ by \topskip |
\advance\dimen@ by \topskip |
Line 3388 width0pt\relax} \fi
|
Line 3560 width0pt\relax} \fi
|
\gdef\thischaptername{#1}% |
\gdef\thischaptername{#1}% |
\xdef\thischapter{\putwordAppendix{} \appendixletter: \noexpand\thischaptername}% |
\xdef\thischapter{\putwordAppendix{} \appendixletter: \noexpand\thischaptername}% |
\toks0 = {#1}% |
\toks0 = {#1}% |
\edef\temp{\noexpand\writetocentry{\realbackslash chapentry{\the\toks0}% |
\edef\temp{\noexpand\writetocentry{\realbackslash appendixentry{\the\toks0}% |
{\putwordAppendix{} \appendixletter}}}% |
{\appendixletter}}}% |
\temp |
\temp |
\appendixnoderef |
\appendixnoderef |
\global\let\section = \appendixsec |
\global\let\section = \appendixsec |
Line 3466 width0pt\relax} \fi
|
Line 3638 width0pt\relax} \fi
|
\def\unnumberedseczzz #1{% |
\def\unnumberedseczzz #1{% |
\plainsecheading {#1}\gdef\thissection{#1}% |
\plainsecheading {#1}\gdef\thissection{#1}% |
\toks0 = {#1}% |
\toks0 = {#1}% |
\edef\temp{\noexpand\writetocentry{\realbackslash unnumbsecentry{\the\toks0}}}% |
\edef\temp{\noexpand\writetocentry{\realbackslash unnumbsecentry% |
|
{\the\toks0}{\the\chapno}}}% |
\temp |
\temp |
\unnumbnoderef |
\unnumbnoderef |
\nobreak |
\nobreak |
Line 3505 width0pt\relax} \fi
|
Line 3678 width0pt\relax} \fi
|
\plainsubsecheading {#1}\gdef\thissection{#1}% |
\plainsubsecheading {#1}\gdef\thissection{#1}% |
\toks0 = {#1}% |
\toks0 = {#1}% |
\edef\temp{\noexpand\writetocentry{\realbackslash unnumbsubsecentry% |
\edef\temp{\noexpand\writetocentry{\realbackslash unnumbsubsecentry% |
{\the\toks0}}}% |
{\the\toks0}{\the\chapno}{\the\secno}}}% |
\temp |
\temp |
\unnumbnoderef |
\unnumbnoderef |
\nobreak |
\nobreak |
Line 3546 width0pt\relax} \fi
|
Line 3719 width0pt\relax} \fi
|
\plainsubsubsecheading {#1}\gdef\thissection{#1}% |
\plainsubsubsecheading {#1}\gdef\thissection{#1}% |
\toks0 = {#1}% |
\toks0 = {#1}% |
\edef\temp{\noexpand\writetocentry{\realbackslash unnumbsubsubsecentry% |
\edef\temp{\noexpand\writetocentry{\realbackslash unnumbsubsubsecentry% |
{\the\toks0}}}% |
{\the\toks0}{\the\chapno}{\the\secno}{\the\subsecno}}}% |
\temp |
\temp |
\unnumbnoderef |
\unnumbnoderef |
\nobreak |
\nobreak |
Line 3758 width0pt\relax} \fi
|
Line 3931 width0pt\relax} \fi
|
% 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. |
% |
% |
% 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 |
% given time so that @contents can be put in the document anywhere. |
% fixed time so that @contents can be put in the document anywhere. |
% |
% |
\newif\iftocfileopened |
\newif\iftocfileopened |
\def\writetocentry#1{% |
\def\writetocentry#1{% |
Line 3767 width0pt\relax} \fi
|
Line 3940 width0pt\relax} \fi
|
\global\tocfileopenedtrue |
\global\tocfileopenedtrue |
\fi |
\fi |
\iflinks \write\tocfile{#1{\folio}}\fi |
\iflinks \write\tocfile{#1{\folio}}\fi |
|
% |
|
% Tell \shipout to create a page destination if we're doing pdf, which |
|
% will be the target of the links in the table of contents. We can't |
|
% just do it on every page because the title pages are numbered 1 and |
|
% 2 (the page numbers aren't printed), and so are the first two pages |
|
% of the document. Thus, we'd have two destinations named `1', and |
|
% two named `2'. |
|
\ifpdf \pdfmakepagedesttrue \fi |
} |
} |
|
|
\newskip\contentsrightmargin \contentsrightmargin=1in |
\newskip\contentsrightmargin \contentsrightmargin=1in |
Line 3822 width0pt\relax} \fi
|
Line 4003 width0pt\relax} \fi
|
\startcontents{\putwordShortTOC}% |
\startcontents{\putwordShortTOC}% |
% |
% |
\let\chapentry = \shortchapentry |
\let\chapentry = \shortchapentry |
|
\let\appendixentry = \shortappendixentry |
\let\unnumbchapentry = \shortunnumberedentry |
\let\unnumbchapentry = \shortunnumberedentry |
% We want a true roman here for the page numbers. |
% We want a true roman here for the page numbers. |
\secfonts |
\secfonts |
Line 3830 width0pt\relax} \fi
|
Line 4012 width0pt\relax} \fi
|
\hyphenpenalty = 10000 |
\hyphenpenalty = 10000 |
\advance\baselineskip by 1pt % Open it up a little. |
\advance\baselineskip by 1pt % Open it up a little. |
\def\secentry ##1##2##3##4{} |
\def\secentry ##1##2##3##4{} |
\def\unnumbsecentry ##1##2{} |
\def\unnumbsecentry ##1##2##3{} |
\def\subsecentry ##1##2##3##4##5{} |
\def\subsecentry ##1##2##3##4##5{} |
\def\unnumbsubsecentry ##1##2{} |
\def\unnumbsubsecentry ##1##2##3##4{} |
\def\subsubsecentry ##1##2##3##4##5##6{} |
\def\subsubsecentry ##1##2##3##4##5##6{} |
\def\unnumbsubsubsecentry ##1##2{} |
\def\unnumbsubsubsecentry ##1##2##3##4##5{} |
\openin 1 \jobname.toc |
\openin 1 \jobname.toc |
\ifeof 1 \else |
\ifeof 1 \else |
\closein 1 |
\closein 1 |
Line 3857 width0pt\relax} \fi
|
Line 4039 width0pt\relax} \fi
|
% The last argument is the page number. |
% The last argument is the page number. |
% The arguments in between are the chapter number, section number, ... |
% The arguments in between are the chapter number, section number, ... |
|
|
% Chapter-level things, for both the long and short contents. |
% Chapters, in the main contents. |
\def\chapentry#1#2#3{\dochapentry{#2\labelspace#1}{#3}} |
\def\chapentry#1#2#3{\dochapentry{#2\labelspace#1}{#3}} |
|
% |
% See comments in \dochapentry re vbox and related settings |
% Chapters, in the short toc. |
|
% See comments in \dochapentry re vbox and related settings. |
\def\shortchapentry#1#2#3{% |
\def\shortchapentry#1#2#3{% |
\tocentry{\shortchaplabel{#2}\labelspace #1}{\doshortpageno\bgroup#3\egroup}% |
\tocentry{\shortchaplabel{#2}\labelspace #1}{\doshortpageno\bgroup#3\egroup}% |
} |
} |
|
|
|
% Appendices, in the main contents. |
|
\def\appendixentry#1#2#3{\dochapentry{\putwordAppendix{} #2\labelspace#1}{#3}} |
|
% |
|
% Appendices, in the short toc. |
|
\let\shortappendixentry = \shortchapentry |
|
|
% Typeset the label for a chapter or appendix for the short contents. |
% Typeset the label for a chapter or appendix for the short contents. |
% The arg is, e.g. `Appendix A' for an appendix, or `3' for a chapter. |
% The arg is, e.g., `Appendix A' for an appendix, or `3' for a chapter. |
% We could simplify the code here by writing out an \appendixentry |
% We could simplify the code here by writing out an \appendixentry |
% command in the toc file for appendices, instead of using \chapentry |
% command in the toc file for appendices, instead of using \chapentry |
% for both, but it doesn't seem worth it. |
% for both, but it doesn't seem worth it. |
Line 3874 width0pt\relax} \fi
|
Line 4063 width0pt\relax} \fi
|
\newdimen\shortappendixwidth |
\newdimen\shortappendixwidth |
% |
% |
\def\shortchaplabel#1{% |
\def\shortchaplabel#1{% |
% 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 |
|
% widest letter (M) is 1em, at least in the Computer Modern fonts. |
% widest letter (M) is 1em, at least in the Computer Modern fonts. |
|
% But use \hss just in case. |
% (This space doesn't include the extra space that gets added after |
% (This space doesn't include the extra space that gets added after |
% the label; that gets put in by \shortchapentry above.) |
% the label; that gets put in by \shortchapentry above.) |
\advance\dimen0 by 1.1em |
\dimen0 = 1em |
\hbox to \dimen0{#1\hfil}% |
\hbox to \dimen0{#1\hss}% |
} |
} |
|
|
|
% Unnumbered chapters. |
\def\unnumbchapentry#1#2{\dochapentry{#1}{#2}} |
\def\unnumbchapentry#1#2{\dochapentry{#1}{#2}} |
\def\shortunnumberedentry#1#2{\tocentry{#1}{\doshortpageno\bgroup#2\egroup}} |
\def\shortunnumberedentry#1#2{\tocentry{#1}{\doshortpageno\bgroup#2\egroup}} |
|
|
% Sections. |
% Sections. |
\def\secentry#1#2#3#4{\dosecentry{#2.#3\labelspace#1}{#4}} |
\def\secentry#1#2#3#4{\dosecentry{#2.#3\labelspace#1}{#4}} |
\def\unnumbsecentry#1#2{\dosecentry{#1}{#2}} |
\def\unnumbsecentry#1#2#3{\dosecentry{#1}{#3}} |
|
|
% Subsections. |
% Subsections. |
\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}} |
\def\unnumbsubsecentry#1#2{\dosubsecentry{#1}{#2}} |
\def\unnumbsubsecentry#1#2#3#4{\dosubsecentry{#1}{#4}} |
|
|
% And subsubsections. |
% And subsubsections. |
\def\subsubsecentry#1#2#3#4#5#6{% |
\def\subsubsecentry#1#2#3#4#5#6{% |
\dosubsubsecentry{#2.#3.#4.#5\labelspace#1}{#6}} |
\dosubsubsecentry{#2.#3.#4.#5\labelspace#1}{#6}} |
\def\unnumbsubsubsecentry#1#2{\dosubsubsecentry{#1}{#2}} |
\def\unnumbsubsubsecentry#1#2#3#4#5{\dosubsubsecentry{#1}{#5}} |
|
|
% This parameter controls the indentation of the various levels. |
% This parameter controls the indentation of the various levels. |
\newdimen\tocindent \tocindent = 3pc |
\newdimen\tocindent \tocindent = 3pc |
Line 3946 width0pt\relax} \fi
|
Line 4128 width0pt\relax} \fi
|
\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 |
% Do not use \turnoffactive in these arguments. Since the toc is |
% Do not use \turnoffactive in these arguments. Since the toc is |
% typeset in cmr, so characters such as _ would come out wrong; we |
% typeset in cmr, characters such as _ would come out wrong; we |
% have to do the usual translation tricks. |
% have to do the usual translation tricks. |
\entry{#1}{#2}% |
\entry{#1}{#2}% |
\endgroup} |
\endgroup} |
Line 3966 width0pt\relax} \fi
|
Line 4148 width0pt\relax} \fi
|
\message{environments,} |
\message{environments,} |
% @foo ... @end foo. |
% @foo ... @end foo. |
|
|
|
% @point{}, @result{}, @expansion{}, @print{}, @equiv{}. |
|
% |
% 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 |
% \tt widths. Each \tt character is 1en, so two makes it 1em. |
% \tt widths. Each \tt character is 1en, so two makes it 1em. |
% Furthermore, these definitions must come after we define our fonts. |
% |
\newbox\dblarrowbox \newbox\longdblarrowbox |
|
\newbox\pushcharbox \newbox\bullbox |
|
\newbox\equivbox \newbox\errorbox |
|
|
|
%{\tentt |
|
%\global\setbox\dblarrowbox = \hbox to 1em{\hfil$\Rightarrow$\hfil} |
|
%\global\setbox\longdblarrowbox = \hbox to 1em{\hfil$\mapsto$\hfil} |
|
%\global\setbox\pushcharbox = \hbox to 1em{\hfil$\dashv$\hfil} |
|
%\global\setbox\equivbox = \hbox to 1em{\hfil$\ptexequiv$\hfil} |
|
% Adapted from the manmac format (p.420 of TeXbook) |
|
%\global\setbox\bullbox = \hbox to 1em{\kern.15em\vrule height .75ex width .85ex |
|
% depth .1ex\hfil} |
|
%} |
|
|
|
% @point{}, @result{}, @expansion{}, @print{}, @equiv{}. |
|
\def\point{$\star$} |
\def\point{$\star$} |
\def\result{\leavevmode\raise.15ex\hbox to 1em{\hfil$\Rightarrow$\hfil}} |
\def\result{\leavevmode\raise.15ex\hbox to 1em{\hfil$\Rightarrow$\hfil}} |
\def\expansion{\leavevmode\raise.1ex\hbox to 1em{\hfil$\mapsto$\hfil}} |
\def\expansion{\leavevmode\raise.1ex\hbox to 1em{\hfil$\mapsto$\hfil}} |
\def\print{\leavevmode\lower.1ex\hbox to 1em{\hfil$\dashv$\hfil}} |
\def\print{\leavevmode\lower.1ex\hbox to 1em{\hfil$\dashv$\hfil}} |
\def\equiv{\leavevmode\lower.1ex\hbox to 1em{\hfil$\ptexequiv$\hfil}} |
\def\equiv{\leavevmode\lower.1ex\hbox to 1em{\hfil$\ptexequiv$\hfil}} |
|
|
|
% The @error{} command. |
% Adapted from the TeXbook's \boxit. |
% Adapted from the TeXbook's \boxit. |
|
% |
|
\newbox\errorbox |
|
% |
{\tentt \global\dimen0 = 3em}% Width of the box. |
{\tentt \global\dimen0 = 3em}% Width of the box. |
\dimen2 = .55pt % Thickness of rules |
\dimen2 = .55pt % Thickness of rules |
% 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.) |
\setbox0 = \hbox{\kern-.75pt \tensf error\kern-1.5pt} |
\setbox0 = \hbox{\kern-.75pt \tensf error\kern-1.5pt} |
|
% |
\global\setbox\errorbox=\hbox to \dimen0{\hfil |
\global\setbox\errorbox=\hbox to \dimen0{\hfil |
\hsize = \dimen0 \advance\hsize by -5.8pt % Space to left+right. |
\hsize = \dimen0 \advance\hsize by -5.8pt % Space to left+right. |
\advance\hsize by -2\dimen2 % Rules. |
\advance\hsize by -2\dimen2 % Rules. |
Line 4006 width0pt\relax} \fi
|
Line 4179 width0pt\relax} \fi
|
\kern3pt\vrule width\dimen2}% Space to right. |
\kern3pt\vrule width\dimen2}% Space to right. |
\hrule height\dimen2} |
\hrule height\dimen2} |
\hfil} |
\hfil} |
|
% |
% The @error{} command. |
|
\def\error{\leavevmode\lower.7ex\copy\errorbox} |
\def\error{\leavevmode\lower.7ex\copy\errorbox} |
|
|
% @tex ... @end tex escapes into raw Tex temporarily. |
% @tex ... @end tex escapes into raw Tex temporarily. |
Line 4047 width0pt\relax} \fi
|
Line 4219 width0pt\relax} \fi
|
\def\@{@}% |
\def\@{@}% |
\let\Etex=\endgroup} |
\let\Etex=\endgroup} |
|
|
% Define @lisp ... @endlisp. |
% Define @lisp ... @end lisp. |
% @lisp does a \begingroup so it can rebind things, |
% @lisp does a \begingroup so it can rebind things, |
% including the definition of @endlisp (which normally is erroneous). |
% including the definition of @end lisp (which normally is erroneous). |
|
|
% Amount to narrow the margins by for @lisp. |
% Amount to narrow the margins by for @lisp. |
\newskip\lispnarrowing \lispnarrowing=0.4in |
\newskip\lispnarrowing \lispnarrowing=0.4in |
Line 4080 width0pt\relax} \fi
|
Line 4252 width0pt\relax} \fi
|
% is reset to zero; thus the \afterenvbreak inserts no space -- but the |
% is reset to zero; thus the \afterenvbreak inserts no space -- but the |
% start of the next paragraph will insert \parskip |
% start of the next paragraph will insert \parskip |
% |
% |
\def\aboveenvbreak{{\advance\envskipamount by \parskip |
\def\aboveenvbreak{{% |
\endgraf \ifdim\lastskip<\envskipamount |
\ifnum\lastpenalty < 10000 |
\removelastskip \penalty-50 \vskip\envskipamount \fi}} |
\advance\envskipamount by \parskip |
|
\endgraf |
|
\ifdim\lastskip<\envskipamount |
|
\removelastskip |
|
\penalty-50 |
|
\vskip\envskipamount |
|
\fi |
|
\fi |
|
}} |
|
|
\let\afterenvbreak = \aboveenvbreak |
\let\afterenvbreak = \aboveenvbreak |
|
|
Line 4214 width0pt\relax} \fi
|
Line 4394 width0pt\relax} \fi
|
\def\smalllispx{\begingroup |
\def\smalllispx{\begingroup |
\def\Esmalllisp{\nonfillfinish\endgroup}% |
\def\Esmalllisp{\nonfillfinish\endgroup}% |
\def\Esmallexample{\nonfillfinish\endgroup}% |
\def\Esmallexample{\nonfillfinish\endgroup}% |
\smallfonts |
\smallexamplefonts |
\lisp |
\lisp |
} |
} |
|
|
Line 4225 width0pt\relax} \fi
|
Line 4405 width0pt\relax} \fi
|
\let\Edisplay = \nonfillfinish |
\let\Edisplay = \nonfillfinish |
\gobble |
\gobble |
} |
} |
|
% |
% @smalldisplay (when @smallbook): @display plus smaller fonts. |
% @smalldisplay (when @smallbook): @display plus smaller fonts. |
% |
% |
\def\smalldisplayx{\begingroup |
\def\smalldisplayx{\begingroup |
\def\Esmalldisplay{\nonfillfinish\endgroup}% |
\def\Esmalldisplay{\nonfillfinish\endgroup}% |
\smallfonts \rm |
\smallexamplefonts \rm |
\display |
\display |
} |
} |
|
|
Line 4242 width0pt\relax} \fi
|
Line 4422 width0pt\relax} \fi
|
\let\Eformat = \nonfillfinish |
\let\Eformat = \nonfillfinish |
\gobble |
\gobble |
} |
} |
|
% |
% @smallformat (when @smallbook): @format plus smaller fonts. |
% @smallformat (when @smallbook): @format plus smaller fonts. |
% |
% |
\def\smallformatx{\begingroup |
\def\smallformatx{\begingroup |
\def\Esmallformat{\nonfillfinish\endgroup}% |
\def\Esmallformat{\nonfillfinish\endgroup}% |
\smallfonts \rm |
\smallexamplefonts \rm |
\format |
\format |
} |
} |
|
|
Line 4265 width0pt\relax} \fi
|
Line 4445 width0pt\relax} \fi
|
\gobble |
\gobble |
} |
} |
|
|
|
|
% @quotation does normal linebreaking (hence we can't use \nonfillstart) |
% @quotation does normal linebreaking (hence we can't use \nonfillstart) |
% and narrows the margins. |
% and narrows the margins. |
% |
% |
Line 4287 width0pt\relax} \fi
|
Line 4468 width0pt\relax} \fi
|
} |
} |
|
|
|
|
|
% LaTeX-like @verbatim...@end verbatim and @verb{<char>...<char>} |
|
% If we want to allow any <char> as delimiter, |
|
% we need the curly braces so that makeinfo sees the @verb command, eg: |
|
% `@verbx...x' would look like the '@verbx' command. --janneke@gnu.org |
|
% |
|
% [Knuth]: Donald Ervin Knuth, 1996. The TeXbook. |
|
% |
|
% [Knuth] p. 344; only we need to do '@' too |
|
\def\dospecials{% |
|
\do\ \do\\\do\@\do\{\do\}\do\$\do\&% |
|
\do\#\do\^\do\^^K\do\_\do\^^A\do\%\do\~} |
|
% |
|
% [Knuth] p. 380 |
|
\def\uncatcodespecials{% |
|
\def\do##1{\catcode`##1=12}\dospecials} |
|
% |
|
% [Knuth] pp. 380,381,391 |
|
% Disable Spanish ligatures ?` and !` of \tt font |
|
\begingroup |
|
\catcode`\`=\active\gdef`{\relax\lq} |
|
\endgroup |
|
% |
|
% Setup for the @verb command. |
|
% |
|
% Eight spaces for a tab |
|
\begingroup |
|
\catcode`\^^I=\active |
|
\gdef\tabeightspaces{\catcode`\^^I=\active\def^^I{\ \ \ \ \ \ \ \ }} |
|
\endgroup |
|
% |
|
\def\setupverb{% |
|
\tt % easiest (and conventionally used) font for verbatim |
|
\def\par{\leavevmode\endgraf}% |
|
\catcode`\`=\active |
|
\tabeightspaces |
|
% Respect line breaks, |
|
% print special symbols as themselves, and |
|
% make each space count |
|
% must do in this order: |
|
\obeylines \uncatcodespecials \sepspaces |
|
} |
|
|
|
% Setup for the @verbatim environment |
|
% |
|
% Real tab expansion |
|
\newdimen\tabw \setbox0=\hbox{\tt\space} \tabw=8\wd0 % tab amount |
|
% |
|
\def\starttabbox{\setbox0=\hbox\bgroup} |
|
\begingroup |
|
\catcode`\^^I=\active |
|
\gdef\tabexpand{% |
|
\catcode`\^^I=\active |
|
\def^^I{\leavevmode\egroup |
|
\dimen0=\wd0 % the width so far, or since the previous tab |
|
\divide\dimen0 by\tabw |
|
\multiply\dimen0 by\tabw % compute previous multiple of \tabw |
|
\advance\dimen0 by\tabw % advance to next multiple of \tabw |
|
\wd0=\dimen0 \box0 \starttabbox |
|
}% |
|
} |
|
\endgroup |
|
\def\setupverbatim{% |
|
% Easiest (and conventionally used) font for verbatim |
|
\tt |
|
\def\par{\leavevmode\egroup\box0\endgraf}% |
|
\catcode`\`=\active |
|
\tabexpand |
|
% Respect line breaks, |
|
% print special symbols as themselves, and |
|
% make each space count |
|
% must do in this order: |
|
\obeylines \uncatcodespecials \sepspaces |
|
\everypar{\starttabbox}% |
|
} |
|
|
|
% Do the @verb magic: verbatim text is quoted by unique |
|
% delimiter characters. Before first delimiter expect a |
|
% right brace, after last delimiter expect closing brace: |
|
% |
|
% \def\doverb'{'<char>#1<char>'}'{#1} |
|
% |
|
% [Knuth] p. 382; only eat outer {} |
|
\begingroup |
|
\catcode`[=1\catcode`]=2\catcode`\{=12\catcode`\}=12 |
|
\gdef\doverb{#1[\def\next##1#1}[##1\endgroup]\next] |
|
\endgroup |
|
% |
|
\def\verb{\begingroup\setupverb\doverb} |
|
% |
|
% |
|
% Do the @verbatim magic: define the macro \doverbatim so that |
|
% the (first) argument ends when '@end verbatim' is reached, ie: |
|
% |
|
% \def\doverbatim#1@end verbatim{#1} |
|
% |
|
% For Texinfo it's a lot easier than for LaTeX, |
|
% because texinfo's \verbatim doesn't stop at '\end{verbatim}': |
|
% we need not redefine '\', '{' and '}' |
|
% |
|
% Inspired by LaTeX's verbatim command set [latex.ltx] |
|
%% Include LaTeX hack for completeness -- never know |
|
%% \begingroup |
|
%% \catcode`|=0 \catcode`[=1 |
|
%% \catcode`]=2\catcode`\{=12\catcode`\}=12\catcode`\ =\active |
|
%% \catcode`\\=12|gdef|doverbatim#1@end verbatim[ |
|
%% #1|endgroup|def|Everbatim[]|end[verbatim]] |
|
%% |endgroup |
|
\begingroup |
|
\catcode`\ =\active |
|
\gdef\doverbatim#1@end verbatim{#1\end{verbatim}} |
|
\endgroup |
|
% |
|
\def\verbatim{% |
|
\def\Everbatim{\nonfillfinish\endgroup}% |
|
\begingroup |
|
\nonfillstart |
|
\advance\leftskip by -\defbodyindent |
|
\begingroup\setupverbatim\doverbatim |
|
} |
|
|
|
% @verbatiminclude FILE - insert text of file in verbatim environment. |
|
% |
|
% Allow normal characters that we make active in the argument (a file name). |
|
\def\verbatiminclude{% |
|
\begingroup |
|
\catcode`\\=12 |
|
\catcode`~=12 |
|
\catcode`^=12 |
|
\catcode`_=12 |
|
\catcode`|=12 |
|
\catcode`<=12 |
|
\catcode`>=12 |
|
\catcode`+=12 |
|
\parsearg\doverbatiminclude |
|
} |
|
\def\setupverbatiminclude{% |
|
\begingroup |
|
\nonfillstart |
|
\advance\leftskip by -\defbodyindent |
|
\begingroup\setupverbatim |
|
} |
|
% |
|
\def\doverbatiminclude#1{% |
|
% Restore active chars for included file. |
|
\endgroup |
|
\begingroup |
|
\def\thisfile{#1}% |
|
\expandafter\expandafter\setupverbatiminclude\input\thisfile |
|
\endgroup\nonfillfinish\endgroup |
|
} |
|
|
|
% @copying ... @end copying. |
|
% Save the text away for @insertcopying later. |
|
% |
|
\newbox\copyingbox |
|
% |
|
\def\copying{\begingroup |
|
\parindent = 0pt % looks wrong on title page |
|
\def\Ecopying{\egroup\endgroup}% |
|
\global\setbox\copyingbox = \vbox\bgroup |
|
} |
|
|
|
% @insertcopying. |
|
% |
|
\def\insertcopying{\unvcopy\copyingbox} |
|
|
|
|
\message{defuns,} |
\message{defuns,} |
% @defun etc. |
% @defun etc. |
|
|
Line 4614 width0pt\relax} \fi
|
Line 4962 width0pt\relax} \fi
|
% #1 is the data type, #2 the name, #3 the args. |
% #1 is the data type, #2 the name, #3 the args. |
\def\deftypefunheaderx #1#2 #3\relax{% |
\def\deftypefunheaderx #1#2 #3\relax{% |
\doind {fn}{\code{#2}}% Make entry in function index |
\doind {fn}{\code{#2}}% Make entry in function index |
\begingroup\defname {\defheaderxcond#1\relax$$$#2}{\putwordDeftypefun}% |
\begingroup\defname {\defheaderxcond#1\relax$.$#2}{\putwordDeftypefun}% |
\deftypefunargs {#3}\endgroup % |
\deftypefunargs {#3}\endgroup % |
\catcode 61=\other % Turn off change made in \defparsebody |
\catcode 61=\other % Turn off change made in \defparsebody |
} |
} |
Line 4623 width0pt\relax} \fi
|
Line 4971 width0pt\relax} \fi
|
|
|
\def\deftypefn{\defmethparsebody\Edeftypefn\deftypefnx\deftypefnheader} |
\def\deftypefn{\defmethparsebody\Edeftypefn\deftypefnx\deftypefnheader} |
|
|
% \defheaderxcond#1\relax$$$ |
% \defheaderxcond#1\relax$.$ |
% 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. |
\def\defheaderxcond#1#2$$${\ifx#1\relax\else\code{#1#2} \fi} |
\def\defheaderxcond#1#2$.${\ifx#1\relax\else\code{#1#2} \fi} |
|
|
% #1 is the classification. #2 is the data type. #3 is the name and args. |
% #1 is the classification. #2 is the data type. #3 is the name and args. |
\def\deftypefnheader #1#2#3{\deftypefnheaderx{#1}{#2}#3 \relax} |
\def\deftypefnheader #1#2#3{\deftypefnheaderx{#1}{#2}#3 \relax} |
Line 4635 width0pt\relax} \fi
|
Line 4983 width0pt\relax} \fi
|
\begingroup |
\begingroup |
\normalparens % notably, turn off `&' magic, which prevents |
\normalparens % notably, turn off `&' magic, which prevents |
% at least some C++ text from working |
% at least some C++ text from working |
\defname {\defheaderxcond#2\relax$$$#3}{#1}% |
\defname {\defheaderxcond#2\relax$.$#3}{#1}% |
\deftypefunargs {#4}\endgroup % |
\deftypefunargs {#4}\endgroup % |
\catcode 61=\other % Turn off change made in \defparsebody |
\catcode 61=\other % Turn off change made in \defparsebody |
} |
} |
Line 4681 width0pt\relax} \fi
|
Line 5029 width0pt\relax} \fi
|
\def\deftypeopheader#1#2#3#4{% |
\def\deftypeopheader#1#2#3#4{% |
\dosubind{fn}{\code{#3}}{\putwordon\ \code{#1}}% entry in function index |
\dosubind{fn}{\code{#3}}{\putwordon\ \code{#1}}% entry in function index |
\begingroup |
\begingroup |
\defname{\defheaderxcond#2\relax$$$#3} |
\defname{\defheaderxcond#2\relax$.$#3} |
{\deftypeopcategory\ \putwordon\ \code{#1}}% |
{\deftypeopcategory\ \putwordon\ \code{#1}}% |
\deftypefunargs{#4}% |
\deftypefunargs{#4}% |
\endgroup |
\endgroup |
Line 4696 width0pt\relax} \fi
|
Line 5044 width0pt\relax} \fi
|
\def\deftypemethodheader#1#2#3#4{% |
\def\deftypemethodheader#1#2#3#4{% |
\dosubind{fn}{\code{#3}}{\putwordon\ \code{#1}}% entry in function index |
\dosubind{fn}{\code{#3}}{\putwordon\ \code{#1}}% entry in function index |
\begingroup |
\begingroup |
\defname{\defheaderxcond#2\relax$$$#3}{\putwordMethodon\ \code{#1}}% |
\defname{\defheaderxcond#2\relax$.$#3}{\putwordMethodon\ \code{#1}}% |
\deftypefunargs{#4}% |
\deftypefunargs{#4}% |
\endgroup |
\endgroup |
} |
} |
Line 4710 width0pt\relax} \fi
|
Line 5058 width0pt\relax} \fi
|
\def\deftypeivarheader#1#2#3{% |
\def\deftypeivarheader#1#2#3{% |
\dosubind{vr}{\code{#3}}{\putwordof\ \code{#1}}% entry in variable index |
\dosubind{vr}{\code{#3}}{\putwordof\ \code{#1}}% entry in variable index |
\begingroup |
\begingroup |
\defname{#3}{\putwordInstanceVariableof\ \code{#1}}% |
\defname{\defheaderxcond#2\relax$.$#3} |
|
{\putwordInstanceVariableof\ \code{#1}}% |
\defvarargs{#3}% |
\defvarargs{#3}% |
\endgroup |
\endgroup |
} |
} |
Line 4792 width0pt\relax} \fi
|
Line 5141 width0pt\relax} \fi
|
% 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. |
\def\deftypevarheader #1#2{% |
\def\deftypevarheader #1#2{% |
\dovarind#2 \relax% Make entry in variables index |
\dovarind#2 \relax% Make entry in variables index |
\begingroup\defname {\defheaderxcond#1\relax$$$#2}{\putwordDeftypevar}% |
\begingroup\defname {\defheaderxcond#1\relax$.$#2}{\putwordDeftypevar}% |
\interlinepenalty=10000 |
\interlinepenalty=10000 |
\endgraf\nobreak\vskip -\parskip\nobreak |
\endgraf\nobreak\vskip -\parskip\nobreak |
\endgroup} |
\endgroup} |
Line 4803 width0pt\relax} \fi
|
Line 5152 width0pt\relax} \fi
|
\def\deftypevr{\defvrparsebody\Edeftypevr\deftypevrx\deftypevrheader} |
\def\deftypevr{\defvrparsebody\Edeftypevr\deftypevrx\deftypevrheader} |
|
|
\def\deftypevrheader #1#2#3{\dovarind#3 \relax% |
\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\nobreak\vskip -\parskip\nobreak |
\endgraf\nobreak\vskip -\parskip\nobreak |
\endgroup} |
\endgroup} |
Line 4963 width0pt\relax} \fi
|
Line 5312 width0pt\relax} \fi
|
\message{Warning: redefining \the\macname}% |
\message{Warning: redefining \the\macname}% |
\else |
\else |
\expandafter\ifx\csname \the\macname\endcsname \relax |
\expandafter\ifx\csname \the\macname\endcsname \relax |
\else \errmessage{The name \the\macname\space is reserved}\fi |
\else \errmessage{Macro name \the\macname\space already defined}\fi |
\global\cslet{macsave.\the\macname}{\the\macname}% |
\global\cslet{macsave.\the\macname}{\the\macname}% |
\global\expandafter\let\csname ismacro.\the\macname\endcsname=1% |
\global\expandafter\let\csname ismacro.\the\macname\endcsname=1% |
% Add the macroname to \macrolist |
% Add the macroname to \macrolist |
Line 5244 width0pt\relax} \fi
|
Line 5593 width0pt\relax} \fi
|
\ifpdf |
\ifpdf |
\leavevmode |
\leavevmode |
\getfilename{#4}% |
\getfilename{#4}% |
\ifnum\filenamelength>0 |
{\normalturnoffactive |
\startlink attr{/Border [0 0 0]}% |
\ifnum\filenamelength>0 |
goto file{\the\filename.pdf} name{#1@}% |
\startlink attr{/Border [0 0 0]}% |
\else |
goto file{\the\filename.pdf} name{#1}% |
\startlink attr{/Border [0 0 0]}% |
\else |
goto name{#1@}% |
\startlink attr{/Border [0 0 0]}% |
\fi |
goto name{#1}% |
|
\fi |
|
}% |
\linkcolor |
\linkcolor |
\fi |
\fi |
% |
% |
Line 5512 width0pt\relax} \fi
|
Line 5863 width0pt\relax} \fi
|
% |
% |
\smallfonts \rm |
\smallfonts \rm |
% |
% |
% Hang the footnote text off the number. |
% Because we use hanging indentation in footnotes, a @noindent appears |
\hang |
% to exdent this text, so make it be a no-op. makeinfo does not use |
|
% hanging indentation so @noindent can still be needed within footnote |
|
% text after an @example or the like (not that this is good style). |
|
\let\noindent = \relax |
|
% |
|
% Hang the footnote text off the number. Use \everypar in case the |
|
% footnote extends for more than one paragraph. |
|
\everypar = {\hang}% |
\textindent{\thisfootno}% |
\textindent{\thisfootno}% |
% |
% |
% Don't crash into the line above the footnote text. Since this |
% Don't crash into the line above the footnote text. Since this |
Line 5530 width0pt\relax} \fi
|
Line 5888 width0pt\relax} \fi
|
|
|
}%end \catcode `\@=11 |
}%end \catcode `\@=11 |
|
|
% Set the baselineskip to #1, and the lineskip and strut size |
|
% correspondingly. There is no deep meaning behind these magic numbers |
|
% used as factors; they just match (closely enough) what Knuth defined. |
|
% |
|
\def\lineskipfactor{.08333} |
|
\def\strutheightpercent{.70833} |
|
\def\strutdepthpercent {.29167} |
|
% |
|
\def\setleading#1{% |
|
\normalbaselineskip = #1\relax |
|
\normallineskip = \lineskipfactor\normalbaselineskip |
|
\normalbaselines |
|
\setbox\strutbox =\hbox{% |
|
\vrule width0pt height\strutheightpercent\baselineskip |
|
depth \strutdepthpercent \baselineskip |
|
}% |
|
} |
|
|
|
% @| inserts a changebar to the left of the current line. It should |
% @| inserts a changebar to the left of the current line. It should |
% surround any changed text. This approach does *not* work if the |
% surround any changed text. This approach does *not* work if the |
% change spans more than two lines of output. To handle that, we would |
% change spans more than two lines of output. To handle that, we would |
Line 5612 width0pt\relax} \fi
|
Line 5952 width0pt\relax} \fi
|
\global\warnednoepsftrue |
\global\warnednoepsftrue |
\fi |
\fi |
\else |
\else |
\imagexxx #1,,,\finish |
\imagexxx #1,,,,,\finish |
\fi |
\fi |
} |
} |
% |
% |
% Arguments to @image: |
% Arguments to @image: |
% #1 is (mandatory) image filename; we tack on .eps extension. |
% #1 is (mandatory) image filename; we tack on .eps extension. |
% #2 is (optional) width, #3 is (optional) height. |
% #2 is (optional) width, #3 is (optional) height. |
% #4 is just the usual extra ignored arg for parsing this stuff. |
% #4 is (ignored optional) html alt text. |
\def\imagexxx#1,#2,#3,#4\finish{% |
% #5 is (ignored optional) extension. |
|
% #6 is just the usual extra ignored arg for parsing this stuff. |
|
\newif\ifimagevmode |
|
\def\imagexxx#1,#2,#3,#4,#5,#6\finish{\begingroup |
|
\catcode`\^^M = 5 % in case we're inside an example |
|
\normalturnoffactive % allow _ et al. in names |
|
% If the image is by itself, center it. |
|
\ifvmode |
|
\imagevmodetrue |
|
\nobreak\bigskip |
|
% Usually we'll have text after the image which will insert |
|
% \parskip glue, so insert it here too to equalize the space |
|
% above and below. |
|
\nobreak\vskip\parskip |
|
\nobreak |
|
\line\bgroup\hss |
|
\fi |
|
% |
|
% Output the image. |
\ifpdf |
\ifpdf |
\centerline{\dopdfimage{#1}{#2}{#3}}% |
\dopdfimage{#1}{#2}{#3}% |
\else |
\else |
% \epsfbox itself resets \epsf?size at each figure. |
% \epsfbox itself resets \epsf?size at each figure. |
\setbox0 = \hbox{\ignorespaces #2}\ifdim\wd0 > 0pt \epsfxsize=#2\relax \fi |
\setbox0 = \hbox{\ignorespaces #2}\ifdim\wd0 > 0pt \epsfxsize=#2\relax \fi |
\setbox0 = \hbox{\ignorespaces #3}\ifdim\wd0 > 0pt \epsfysize=#3\relax \fi |
\setbox0 = \hbox{\ignorespaces #3}\ifdim\wd0 > 0pt \epsfysize=#3\relax \fi |
\begingroup |
\epsfbox{#1.eps}% |
\catcode`\^^M = 5 % in case we're inside an example |
|
% If the image is by itself, center it. |
|
\ifvmode |
|
\nobreak\bigskip |
|
% Usually we'll have text after the image which will insert |
|
% \parskip glue, so insert it here too to equalize the space |
|
% above and below. |
|
\nobreak\vskip\parskip |
|
\nobreak |
|
\centerline{\epsfbox{#1.eps}}% |
|
\bigbreak |
|
\else |
|
% In the middle of a paragraph, no extra space. |
|
\epsfbox{#1.eps}% |
|
\fi |
|
\endgroup |
|
\fi |
\fi |
} |
% |
|
\ifimagevmode \hss \egroup \bigbreak \fi % space after the image |
|
\endgroup} |
|
|
|
|
\message{localization,} |
\message{localization,} |
Line 5714 should work if nowhere else does.}
|
Line 6058 should work if nowhere else does.}
|
} |
} |
|
|
% Parameters in order: 1) textheight; 2) textwidth; 3) voffset; |
% Parameters in order: 1) textheight; 2) textwidth; 3) voffset; |
% 4) hoffset; 5) binding offset; 6) topskip. Then whoever calls us can |
% 4) hoffset; 5) binding offset; 6) topskip. We also call |
% set \parskip and call \setleading for \baselineskip. |
% \setleading{\textleading}, so the caller should define \textleading. |
|
% The caller should also set \parskip. |
% |
% |
\def\internalpagesizes#1#2#3#4#5#6{% |
\def\internalpagesizes#1#2#3#4#5#6{% |
\voffset = #3\relax |
\voffset = #3\relax |
Line 5736 should work if nowhere else does.}
|
Line 6081 should work if nowhere else does.}
|
\normaloffset = #4\relax |
\normaloffset = #4\relax |
\bindingoffset = #5\relax |
\bindingoffset = #5\relax |
% |
% |
|
\setleading{\textleading} |
|
% |
\parindent = \defaultparindent |
\parindent = \defaultparindent |
\setemergencystretch |
\setemergencystretch |
} |
} |
|
|
|
% Use `small' versions. |
|
% |
|
\def\smallenvironments{% |
|
\let\smalldisplay = \smalldisplayx |
|
\let\smallexample = \smalllispx |
|
\let\smallformat = \smallformatx |
|
\let\smalllisp = \smalllispx |
|
} |
|
|
% @letterpaper (the default). |
% @letterpaper (the default). |
\def\letterpaper{{\globaldefs = 1 |
\def\letterpaper{{\globaldefs = 1 |
\parskip = 3pt plus 2pt minus 1pt |
\parskip = 3pt plus 2pt minus 1pt |
\setleading{13.2pt}% |
\textleading = 13.2pt |
% |
% |
% If page is nothing but text, make it come out even. |
% If page is nothing but text, make it come out even. |
\internalpagesizes{46\baselineskip}{6in}{\voffset}{.25in}{\bindingoffset}{36pt}% |
\internalpagesizes{46\baselineskip}{6in}{\voffset}{.25in}{\bindingoffset}{36pt}% |
Line 5752 should work if nowhere else does.}
|
Line 6108 should work if nowhere else does.}
|
% Use @smallbook to reset parameters for 7x9.5 (or so) format. |
% Use @smallbook to reset parameters for 7x9.5 (or so) format. |
\def\smallbook{{\globaldefs = 1 |
\def\smallbook{{\globaldefs = 1 |
\parskip = 2pt plus 1pt |
\parskip = 2pt plus 1pt |
\setleading{12pt}% |
\textleading = 12pt |
% |
% |
\internalpagesizes{7.5in}{5.in}{\voffset}{.25in}{\bindingoffset}{16pt}% |
\internalpagesizes{7.5in}{5.in}{\voffset}{.25in}{\bindingoffset}{16pt}% |
% |
% |
Line 5762 should work if nowhere else does.}
|
Line 6118 should work if nowhere else does.}
|
\contentsrightmargin = 0pt |
\contentsrightmargin = 0pt |
\deftypemargin = 0pt |
\deftypemargin = 0pt |
\defbodyindent = .5cm |
\defbodyindent = .5cm |
% |
\smallenvironments |
\let\smalldisplay = \smalldisplayx |
|
\let\smallexample = \smalllispx |
|
\let\smallformat = \smallformatx |
|
\let\smalllisp = \smalllispx |
|
}} |
}} |
|
|
% Use @afourpaper to print on European A4 paper. |
% Use @afourpaper to print on European A4 paper. |
\def\afourpaper{{\globaldefs = 1 |
\def\afourpaper{{\globaldefs = 1 |
\setleading{12pt}% |
|
\parskip = 3pt plus 2pt minus 1pt |
\parskip = 3pt plus 2pt minus 1pt |
|
\textleading = 12pt |
% |
% |
\internalpagesizes{53\baselineskip}{160mm}{\voffset}{4mm}{\bindingoffset}{44pt}% |
\internalpagesizes{53\baselineskip}{160mm}{\voffset}{4mm}{\bindingoffset}{44pt}% |
% |
% |
Line 5780 should work if nowhere else does.}
|
Line 6132 should work if nowhere else does.}
|
\hfuzz = 1pt |
\hfuzz = 1pt |
}} |
}} |
|
|
|
% Use @afivepaper to print on European A5 paper. |
|
% From romildo@urano.iceb.ufop.br, 2 July 2000. |
|
% He also recommends making @example and @lisp be small. |
|
\def\afivepaper{{\globaldefs = 1 |
|
\parskip = 2pt plus 1pt minus 0.1pt |
|
\textleading = 12.5pt |
|
% |
|
\internalpagesizes{166mm}{120mm}{\voffset}{-8mm}{\bindingoffset}{8pt}% |
|
% |
|
\lispnarrowing = 0.2in |
|
\tolerance = 800 |
|
\hfuzz = 1.2pt |
|
\contentsrightmargin = 0mm |
|
\deftypemargin = 0pt |
|
\defbodyindent = 2mm |
|
\tableindent = 12mm |
|
% |
|
\smallenvironments |
|
}} |
|
|
% A specific text layout, 24x15cm overall, intended for A4 paper. Top margin |
% A specific text layout, 24x15cm overall, intended for A4 paper. Top margin |
% 29mm, hence bottom margin 28mm, nominal side margin 3cm. |
% 29mm, hence bottom margin 28mm, nominal side margin 3cm. |
\def\afourlatex{{\globaldefs = 1 |
\def\afourlatex{{\globaldefs = 1 |
\setleading{13.6pt}% |
\textleading = 13.6pt |
% |
% |
\afourpaper |
\afourpaper |
\internalpagesizes{237mm}{150mm}{3.6mm}{3.6mm}{3mm}{7mm}% |
\internalpagesizes{237mm}{150mm}{3.6mm}{3.6mm}{3mm}{7mm}% |
% |
% |
|
% Must explicitly reset to 0 because we call \afourpaper, apparently, |
|
% although this does not entirely make sense. |
\globaldefs = 0 |
\globaldefs = 0 |
}} |
}} |
|
|
% Use @afourwide to print on European A4 paper in wide format. |
% Use @afourwide to print on European A4 paper in wide format. |
\def\afourwide{% |
\def\afourwide{% |
\afourpaper |
\afourpaper |
\internalpagesizes{9.5in}{6.5in}{\hoffset}{\normaloffset}{\bindingoffset}{7mm}% |
\internalpagesizes{6.5in}{9.5in}{\hoffset}{\normaloffset}{\bindingoffset}{7mm}% |
% |
|
\globaldefs = 0 |
|
} |
} |
|
|
% @pagesizes TEXTHEIGHT[,TEXTWIDTH] |
% @pagesizes TEXTHEIGHT[,TEXTWIDTH] |
Line 5810 should work if nowhere else does.}
|
Line 6182 should work if nowhere else does.}
|
\globaldefs = 1 |
\globaldefs = 1 |
% |
% |
\parskip = 3pt plus 2pt minus 1pt |
\parskip = 3pt plus 2pt minus 1pt |
\setleading{13.2pt}% |
\setleading{\textleading}% |
% |
% |
\internalpagesizes{#1}{\hsize}{\voffset}{\normaloffset}{\bindingoffset}{44pt}% |
\internalpagesizes{#1}{\hsize}{\voffset}{\normaloffset}{\bindingoffset}{44pt}% |
}} |
}} |
Line 5840 should work if nowhere else does.}
|
Line 6212 should work if nowhere else does.}
|
\def\normalless{<} |
\def\normalless{<} |
\def\normalgreater{>} |
\def\normalgreater{>} |
\def\normalplus{+} |
\def\normalplus{+} |
\def\normaldollar{$} |
\def\normaldollar{$}%$ font-lock fix |
|
|
% 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 |
% where it can probably just be output, and another way in other fonts, |
% where it can probably just be output, and another way in other fonts, |
Line 5889 should work if nowhere else does.}
|
Line 6261 should work if nowhere else does.}
|
\catcode`\+=\active |
\catcode`\+=\active |
\def+{{\tt \char 43}} |
\def+{{\tt \char 43}} |
\catcode`\$=\active |
\catcode`\$=\active |
\def${\ifusingit{{\sl\$}}\normaldollar} |
\def${\ifusingit{{\sl\$}}\normaldollar}%$ font-lock fix |
%\catcode 27=\active |
%\catcode 27=\active |
%\def^^[{$\diamondsuit$} |
%\def^^[{$\diamondsuit$} |
|
|
Line 5934 should work if nowhere else does.}
|
Line 6306 should work if nowhere else does.}
|
@let<=@normalless |
@let<=@normalless |
@let>=@normalgreater |
@let>=@normalgreater |
@let+=@normalplus |
@let+=@normalplus |
@let$=@normaldollar} |
@let$=@normaldollar}%$ font-lock fix |
|
|
@def@normalturnoffactive{@let"=@normaldoublequote |
@def@normalturnoffactive{@let"=@normaldoublequote |
@let\=@normalbackslash |
@let\=@normalbackslash |
Line 5945 should work if nowhere else does.}
|
Line 6317 should work if nowhere else does.}
|
@let<=@normalless |
@let<=@normalless |
@let>=@normalgreater |
@let>=@normalgreater |
@let+=@normalplus |
@let+=@normalplus |
@let$=@normaldollar} |
@let$=@normaldollar}%$ font-lock fix |
|
|
% Make _ and + \other characters, temporarily. |
% Make _ and + \other characters, temporarily. |
% This is canceled by @fixbackslash. |
% This is canceled by @fixbackslash. |