diff options
author | tron <tron> | 2002-01-03 21:57:13 +0000 |
---|---|---|
committer | tron <tron> | 2002-01-03 21:57:13 +0000 |
commit | 337b91288765a90036f35264cec366af326bc001 (patch) | |
tree | 091bef4f4fd0481b064faf128ecb87e751b67dd8 /lang | |
parent | a74eb26021c9542ff284610ccaae1949ec9f8311 (diff) | |
download | pkgsrc-337b91288765a90036f35264cec366af326bc001.tar.gz |
Remove unnecessary patch which caused patch problems due to an include
RCS Id.
Diffstat (limited to 'lang')
-rw-r--r-- | lang/gcc/distinfo | 3 | ||||
-rw-r--r-- | lang/gcc/patches/patch-cn | 5090 |
2 files changed, 1 insertions, 5092 deletions
diff --git a/lang/gcc/distinfo b/lang/gcc/distinfo index 03c464bf4ab..978b641211f 100644 --- a/lang/gcc/distinfo +++ b/lang/gcc/distinfo @@ -1,4 +1,4 @@ -$NetBSD: distinfo,v 1.6 2002/01/03 20:40:39 tron Exp $ +$NetBSD: distinfo,v 1.7 2002/01/03 21:57:13 tron Exp $ SHA1 (gcc-2.95.3.tar.gz) = 535d27038d161c0e7c2662702e11a48aa97ef622 Size (gcc-2.95.3.tar.gz) = 12911721 bytes @@ -67,4 +67,3 @@ SHA1 (patch-cj) = c8e7d14703d6546e5989801a6fdffaee5932165d SHA1 (patch-ck) = eeada159352f6a957ba8bc10f1e6d074f56aa300 SHA1 (patch-cl) = 1ebf7761e708ca5327c7b7e0426c1544640712ac SHA1 (patch-cm) = 66b86c09726bed590ba80ce4d8d01a5ad71724c8 -SHA1 (patch-cn) = a93bc564137f96d7dff1974a164b44896d675bed diff --git a/lang/gcc/patches/patch-cn b/lang/gcc/patches/patch-cn deleted file mode 100644 index 1a4be8b8ed3..00000000000 --- a/lang/gcc/patches/patch-cn +++ /dev/null @@ -1,5090 +0,0 @@ -$NetBSD: patch-cn,v 1.1 2002/01/03 20:40:51 tron Exp $ - ---- ../gcc-2.95.3/texinfo/texinfo.tex.orig Tue Mar 24 19:05:24 1998 -+++ ../gcc-2.95.3/texinfo/texinfo.tex Thu Jan 3 20:37:56 2002 -@@ -1,52 +1,72 @@ --%% TeX macros to handle Texinfo files. --%% $Id: patch-cn,v 1.1 2002/01/03 20:40:51 tron Exp $ -- --% Copyright (C) 1985, 86, 88, 90, 91, 92, 93, --% 94, 95, 96, 97 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 --%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 --%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 --%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. --%You are forbidden to forbid anyone else to use, share and improve --%what you give them. Help stamp out software-hoarding! -- -- --% Send bug reports to bug-texinfo@prep.ai.mit.edu. --% Please include a *precise* test case in each bug report. -- -- --% Make it possible to create a .fmt file just by loading this file: --% if the underlying format is not loaded, start by loading it now. --% Added by gildea November 1993. -+% texinfo.tex -- TeX macros to handle Texinfo files. -+% -+% Load plain if necessary, i.e., if running under initex. - \expandafter\ifx\csname fmtname\endcsname\relax\input plain\fi -+% -+\def\texinfoversion{2000-05-28.15} -+% -+% Copyright (C) 1985, 86, 88, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99 -+% 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 -+% 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 -+% 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 -+% 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. -+% You are forbidden to forbid anyone else to use, share and improve -+% what you give them. Help stamp out software-hoarding! -+% -+% Please try the latest version of texinfo.tex before submitting bug -+% reports; you can get the latest version from: -+% ftp://ftp.gnu.org/gnu/texinfo.tex -+% (and all GNU mirrors, see http://www.gnu.org/order/ftp.html) -+% ftp://texinfo.org/tex/texinfo.tex -+% ftp://us.ctan.org/macros/texinfo/texinfo.tex -+% (and all CTAN mirrors, finger ctan@us.ctan.org for a list). -+% /home/gd/gnu/doc/texinfo.tex on the GNU machines. -+% The texinfo.tex in any given Texinfo distribution could well be out -+% of date, so if that's what you're using, please check. -+% Texinfo has a small home page at http://texinfo.org/. -+% -+% Send bug reports to bug-texinfo@gnu.org. Please include including a -+% complete document in each bug report with which we can reproduce the -+% problem. Patches are, of course, greatly appreciated. -+% -+% To process a Texinfo manual with TeX, it's most reliable to use the -+% texi2dvi shell script that comes with the distribution. For a simple -+% manual foo.texi, however, you can get away with this: -+% tex foo.texi -+% texindex foo.?? -+% tex foo.texi -+% tex foo.texi -+% dvips foo.dvi -o # or whatever, to process the dvi file; this makes foo.ps. -+% The extra runs of TeX get the cross-reference information correct. -+% Sometimes one run after texindex suffices, and sometimes you need more -+% than two; texi2dvi does it as many times as necessary. -+% -+% It is possible to adapt texinfo.tex for other languages. You can get -+% the existing language-specific files from ftp://ftp.gnu.org/gnu/texinfo/. - --% This automatically updates the version number based on RCS. --\def\deftexinfoversion$#1: #2 ${\def\texinfoversion{#2}} --\deftexinfoversion$Revision: 1.1 $ --\message{Loading texinfo package [Version \texinfoversion]:} -+\message{Loading texinfo [version \texinfoversion]:} - - % If in a .fmt file, print the version number - % and turn on active characters that we couldn't do earlier because - % they might have appeared in the input file name. --\everyjob{\message{[Texinfo version \texinfoversion]}\message{} -+\everyjob{\message{[Texinfo version \texinfoversion]}% - \catcode`+=\active \catcode`\_=\active} - - % Save some parts of plain tex whose names we will redefine. -- - \let\ptexb=\b - \let\ptexbullet=\bullet - \let\ptexc=\c -@@ -54,25 +74,17 @@ - \let\ptexdot=\. - \let\ptexdots=\dots - \let\ptexend=\end --\let\ptexequiv = \equiv -+\let\ptexequiv=\equiv -+\let\ptexexclam=\! - \let\ptexi=\i - \let\ptexlbrace=\{ - \let\ptexrbrace=\} - \let\ptexstar=\* - \let\ptext=\t - --% 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 --% at the beginning of a line will start with \penalty -- and --% since \penalty is valid in vertical mode, we'd end up putting the --% penalty on the vertical list instead of in the new paragraph. --{\catcode`@ = 11 -- % Avoid using \@M directly, because that causes trouble -- % if the definition is written into an index file. -- \global\let\tiepenalty = \@M -- \gdef\tie{\leavevmode\penalty\tiepenalty\ } --} -- -+% We never want plain's outer \+ definition in Texinfo. -+% For @tex, we can use \tabalign. -+\let\+ = \relax - - \message{Basics,} - \chardef\other=12 -@@ -81,18 +93,47 @@ - % starts a new line in the output. - \newlinechar = `^^J - --% Set up fixed words for English. --\ifx\putwordChapter\undefined{\gdef\putwordChapter{Chapter}}\fi% --\def\putwordInfo{Info}% --\ifx\putwordSee\undefined{\gdef\putwordSee{See}}\fi% --\ifx\putwordsee\undefined{\gdef\putwordsee{see}}\fi% --\ifx\putwordfile\undefined{\gdef\putwordfile{file}}\fi% --\ifx\putwordpage\undefined{\gdef\putwordpage{page}}\fi% --\ifx\putwordsection\undefined{\gdef\putwordsection{section}}\fi% --\ifx\putwordSection\undefined{\gdef\putwordSection{Section}}\fi% --\ifx\putwordTableofContents\undefined{\gdef\putwordTableofContents{Table of Contents}}\fi% --\ifx\putwordShortContents\undefined{\gdef\putwordShortContents{Short Contents}}\fi% --\ifx\putwordAppendix\undefined{\gdef\putwordAppendix{Appendix}}\fi% -+% Set up fixed words for English if not already set. -+\ifx\putwordAppendix\undefined \gdef\putwordAppendix{Appendix}\fi -+\ifx\putwordChapter\undefined \gdef\putwordChapter{Chapter}\fi -+\ifx\putwordfile\undefined \gdef\putwordfile{file}\fi -+\ifx\putwordin\undefined \gdef\putwordin{in}\fi -+\ifx\putwordIndexIsEmpty\undefined \gdef\putwordIndexIsEmpty{(Index is empty)}\fi -+\ifx\putwordIndexNonexistent\undefined \gdef\putwordIndexNonexistent{(Index is nonexistent)}\fi -+\ifx\putwordInfo\undefined \gdef\putwordInfo{Info}\fi -+\ifx\putwordInstanceVariableof\undefined \gdef\putwordInstanceVariableof{Instance Variable of}\fi -+\ifx\putwordMethodon\undefined \gdef\putwordMethodon{Method on}\fi -+\ifx\putwordNoTitle\undefined \gdef\putwordNoTitle{No Title}\fi -+\ifx\putwordof\undefined \gdef\putwordof{of}\fi -+\ifx\putwordon\undefined \gdef\putwordon{on}\fi -+\ifx\putwordpage\undefined \gdef\putwordpage{page}\fi -+\ifx\putwordsection\undefined \gdef\putwordsection{section}\fi -+\ifx\putwordSection\undefined \gdef\putwordSection{Section}\fi -+\ifx\putwordsee\undefined \gdef\putwordsee{see}\fi -+\ifx\putwordSee\undefined \gdef\putwordSee{See}\fi -+\ifx\putwordShortTOC\undefined \gdef\putwordShortTOC{Short Contents}\fi -+\ifx\putwordTOC\undefined \gdef\putwordTOC{Table of Contents}\fi -+% -+\ifx\putwordMJan\undefined \gdef\putwordMJan{January}\fi -+\ifx\putwordMFeb\undefined \gdef\putwordMFeb{February}\fi -+\ifx\putwordMMar\undefined \gdef\putwordMMar{March}\fi -+\ifx\putwordMApr\undefined \gdef\putwordMApr{April}\fi -+\ifx\putwordMMay\undefined \gdef\putwordMMay{May}\fi -+\ifx\putwordMJun\undefined \gdef\putwordMJun{June}\fi -+\ifx\putwordMJul\undefined \gdef\putwordMJul{July}\fi -+\ifx\putwordMAug\undefined \gdef\putwordMAug{August}\fi -+\ifx\putwordMSep\undefined \gdef\putwordMSep{September}\fi -+\ifx\putwordMOct\undefined \gdef\putwordMOct{October}\fi -+\ifx\putwordMNov\undefined \gdef\putwordMNov{November}\fi -+\ifx\putwordMDec\undefined \gdef\putwordMDec{December}\fi -+% -+\ifx\putwordDefmac\undefined \gdef\putwordDefmac{Macro}\fi -+\ifx\putwordDefspec\undefined \gdef\putwordDefspec{Special Form}\fi -+\ifx\putwordDefvar\undefined \gdef\putwordDefvar{Variable}\fi -+\ifx\putwordDefopt\undefined \gdef\putwordDefopt{User Option}\fi -+\ifx\putwordDeftypevar\undefined\gdef\putwordDeftypevar{Variable}\fi -+\ifx\putwordDeffunc\undefined \gdef\putwordDeffunc{Function}\fi -+\ifx\putwordDeftypefun\undefined\gdef\putwordDeftypefun{Function}\fi - - % Ignore a token. - % -@@ -113,30 +154,35 @@ - % since that produces some useless output on the terminal. - % - \def\gloggingall{\begingroup \globaldefs = 1 \loggingall \endgroup}% -+\ifx\eTeXversion\undefined - \def\loggingall{\tracingcommands2 \tracingstats2 - \tracingpages1 \tracingoutput1 \tracinglostchars1 - \tracingmacros2 \tracingparagraphs1 \tracingrestores1 - \showboxbreadth\maxdimen\showboxdepth\maxdimen - }% -+\else -+\def\loggingall{\tracingcommands3 \tracingstats2 -+ \tracingpages1 \tracingoutput1 \tracinglostchars1 -+ \tracingmacros2 \tracingparagraphs1 \tracingrestores1 -+ \tracingscantokens1 \tracingassigns1 \tracingifs1 -+ \tracinggroups1 \tracingnesting2 -+ \showboxbreadth\maxdimen\showboxdepth\maxdimen -+}% -+\fi - - % For @cropmarks command. - % Do @cropmarks to get crop marks. --% -+% - \newif\ifcropmarks - \let\cropmarks = \cropmarkstrue - % - % Dimensions to add cropmarks at corners. - % Added by P. A. MacKay, 12 Nov. 1986 - % --\newdimen\cornerlong \newdimen\cornerthick --\newdimen\topandbottommargin --\newdimen\outerhsize \newdimen\outervsize --\cornerlong=1pc\cornerthick=.3pt % These set size of cropmarks --\outerhsize=7in --%\outervsize=9.5in --% Alternative @smallbook page size is 9.25in --\outervsize=9.25in --\topandbottommargin=.75in -+\newdimen\outerhsize \newdimen\outervsize % set by the paper size routines -+\newdimen\cornerlong \cornerlong=1pc -+\newdimen\cornerthick \cornerthick=.3pt -+\newdimen\topandbottommargin \topandbottommargin=.75in - - % Main output routine. - \chardef\PAGE = 255 -@@ -168,15 +214,21 @@ - \normalturnoffactive % \ in index entries must not stay \, e.g., if - % the page break happens to be in the middle of an example. - \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 - \hsize = \outerhsize -- \line{\ewtop\hfil\ewtop}% -- \nointerlineskip -- \line{% -- \vbox{\moveleft\cornerthick\nstop}% -- \hfill -- \vbox{\moveright\cornerthick\nstop}% -- }% -+ \vskip-\topandbottommargin -+ \vtop to0pt{% -+ \line{\ewtop\hfil\ewtop}% -+ \nointerlineskip -+ \line{% -+ \vbox{\moveleft\cornerthick\nstop}% -+ \hfill -+ \vbox{\moveright\cornerthick\nstop}% -+ }% -+ \vss}% - \vskip\topandbottommargin - \line\bgroup - \hfil % center the page within the outer (page) hsize. -@@ -199,13 +251,15 @@ - \hfil\egroup % end of (centering) \line\bgroup - \vskip\topandbottommargin plus1fill minus1fill - \boxmaxdepth = \cornerthick -- \line{% -- \vbox{\moveleft\cornerthick\nsbot}% -- \hfill -- \vbox{\moveright\cornerthick\nsbot}% -+ \vbox to0pt{\vss -+ \line{% -+ \vbox{\moveleft\cornerthick\nsbot}% -+ \hfill -+ \vbox{\moveright\cornerthick\nsbot}% -+ }% -+ \nointerlineskip -+ \line{\ewbot\hfil\ewbot}% - }% -- \nointerlineskip -- \line{\ewbot\hfil\ewbot}% - \egroup % \vbox from first cropmarks clause - \fi - }% end of \shipout\vbox -@@ -321,11 +375,11 @@ - %% Call \inENV within environments (after a \begingroup) - \newif\ifENV \ENVfalse \def\inENV{\ifENV\relax\else\ENVtrue\fi} - \def\ENVcheck{% --\ifENV\errmessage{Still within an environment. Type Return to continue.} -+\ifENV\errmessage{Still within an environment; press RETURN to continue} - \endgroup\fi} % This is not perfect, but it should reduce lossage - - % @begin foo is the same as @foo, for now. --\newhelp\EMsimple{Type <Return> to continue.} -+\newhelp\EMsimple{Press RETURN to continue.} - - \outer\def\begin{\parsearg\beginxxx} - -@@ -384,7 +438,7 @@ - - % @@ prints an @ - % Kludge this until the fonts are right (grr). --\def\@{{\tt \char '100}} -+\def\@{{\tt\char64}} - - % This is turned off because it was never documented - % and you can use @w{...} around a quote to suppress ligatures. -@@ -394,8 +448,8 @@ - %\def\'{{'}} - - % Used to generate quoted braces. --\def\mylbrace {{\tt \char '173}} --\def\myrbrace {{\tt \char '175}} -+\def\mylbrace {{\tt\char123}} -+\def\myrbrace {{\tt\char125}} - \let\{=\mylbrace - \let\}=\myrbrace - \begingroup -@@ -432,6 +486,18 @@ - \fi\fi - } - -+% 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 -+% at the beginning of a line will start with \penalty -- and -+% since \penalty is valid in vertical mode, we'd end up putting the -+% penalty on the vertical list instead of in the new paragraph. -+{\catcode`@ = 11 -+ % Avoid using \@M directly, because that causes trouble -+ % if the definition is written into an index file. -+ \global\let\tiepenalty = \@M -+ \gdef\tie{\leavevmode\penalty\tiepenalty\ } -+} -+ - % @: forces normal size whitespace following. - \def\:{\spacefactor=1000 } - -@@ -441,14 +507,11 @@ - % @. is an end-of-sentence period. - \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. --\gdef\!{!\spacefactor=3000 } -+\def\!{!\spacefactor=3000 } - - % @? is an end-of-sentence query. --\gdef\?{?\spacefactor=3000 } -+\def\?{?\spacefactor=3000 } - - % @w prevents a word break. Without the \leavevmode, @w at the - % beginning of a paragraph, when TeX is still in vertical mode, would -@@ -532,53 +595,81 @@ - %% This method tries to make TeX break the page naturally - %% if the depth of the box does not fit. - %{\baselineskip=0pt% --%\vtop to #1\mil{\vfil}\kern -#1\mil\penalty 10000 -+%\vtop to #1\mil{\vfil}\kern -#1\mil\nobreak - %\prevdepth=-1000pt - %}} - - \def\needx#1{% -- % Go into vertical mode, so we don't make a big box in the middle of a -+ % Ensure vertical mode, so we don't make a big box in the middle of a - % paragraph. - \par - % -- % Don't add any leading before our big empty box, but allow a page -- % break, since the best break might be right here. -- \allowbreak -- \nointerlineskip -- \vtop to #1\mil{\vfil}% -- % -- % TeX does not even consider page breaks if a penalty added to the -- % main vertical list is 10000 or more. But in order to see if the -- % empty box we just added fits on the page, we must make it consider -- % page breaks. On the other hand, we don't want to actually break the -- % page after the empty box. So we use a penalty of 9999. -- % -- % There is an extremely small chance that TeX will actually break the -- % page at this \penalty, if there are no other feasible breakpoints in -- % sight. (If the user is using lots of big @group commands, which -- % almost-but-not-quite fill up a page, TeX will have a hard time doing -- % good page breaking, for example.) However, I could not construct an -- % example where a page broke at this \penalty; if it happens in a real -- % document, then we can reconsider our strategy. -- \penalty9999 -- % -- % Back up by the size of the box, whether we did a page break or not. -- \kern -#1\mil -- % -- % Do not allow a page break right after this kern. -- \nobreak -+ % If the @need value is less than one line space, it's useless. -+ \dimen0 = #1\mil -+ \dimen2 = \ht\strutbox -+ \advance\dimen2 by \dp\strutbox -+ \ifdim\dimen0 > \dimen2 -+ % -+ % Do a \strut just to make the height of this box be normal, so the -+ % normal leading is inserted relative to the preceding line. -+ % And a page break here is fine. -+ \vtop to #1\mil{\strut\vfil}% -+ % -+ % TeX does not even consider page breaks if a penalty added to the -+ % main vertical list is 10000 or more. But in order to see if the -+ % empty box we just added fits on the page, we must make it consider -+ % page breaks. On the other hand, we don't want to actually break the -+ % page after the empty box. So we use a penalty of 9999. -+ % -+ % There is an extremely small chance that TeX will actually break the -+ % page at this \penalty, if there are no other feasible breakpoints in -+ % sight. (If the user is using lots of big @group commands, which -+ % almost-but-not-quite fill up a page, TeX will have a hard time doing -+ % good page breaking, for example.) However, I could not construct an -+ % example where a page broke at this \penalty; if it happens in a real -+ % document, then we can reconsider our strategy. -+ \penalty9999 -+ % -+ % Back up by the size of the box, whether we did a page break or not. -+ \kern -#1\mil -+ % -+ % Do not allow a page break right after this kern. -+ \nobreak -+ \fi - } - - % @br forces paragraph break - - \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{% -+ \leavevmode -+ \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{% -+ \leavevmode -+ \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 -- -+% - \def\page{\par\vfill\supereject} - - % @exdent text.... -@@ -645,420 +736,296 @@ - % @c is the same as @comment - % @ignore ... @end ignore is another way to write a comment - --\def\comment{\catcode 64=\other \catcode 123=\other \catcode 125=\other% --\parsearg \commentxxx} -- --\def\commentxxx #1{\catcode 64=0 \catcode 123=1 \catcode 125=2 } -+\def\comment{\begingroup \catcode`\^^M=\other% -+\catcode`\@=\other \catcode`\{=\other \catcode`\}=\other% -+\commentxxx} -+{\catcode`\^^M=\other \gdef\commentxxx#1^^M{\endgroup}} - - \let\c=\comment - --% @paragraphindent is defined for the Info formatting commands only. --\let\paragraphindent=\comment -- --% Prevent errors for section commands. --% Used in @ignore and in failing conditionals. --\def\ignoresections{% --\let\chapter=\relax --\let\unnumbered=\relax --\let\top=\relax --\let\unnumberedsec=\relax --\let\unnumberedsection=\relax --\let\unnumberedsubsec=\relax --\let\unnumberedsubsection=\relax --\let\unnumberedsubsubsec=\relax --\let\unnumberedsubsubsection=\relax --\let\section=\relax --\let\subsec=\relax --\let\subsubsec=\relax --\let\subsection=\relax --\let\subsubsection=\relax --\let\appendix=\relax --\let\appendixsec=\relax --\let\appendixsection=\relax --\let\appendixsubsec=\relax --\let\appendixsubsection=\relax --\let\appendixsubsubsec=\relax --\let\appendixsubsubsection=\relax --\let\contents=\relax --\let\smallbook=\relax --\let\titlepage=\relax -+% @paragraphindent NCHARS -+% We'll use ems for NCHARS, close enough. -+% We cannot implement @paragraphindent asis, though. -+% -+\def\asisword{asis} % no translation, these are keywords -+\def\noneword{none} -+% -+\def\paragraphindent{\parsearg\doparagraphindent} -+\def\doparagraphindent#1{% -+ \def\temp{#1}% -+ \ifx\temp\asisword -+ \else -+ \ifx\temp\noneword -+ \defaultparindent = 0pt -+ \else -+ \defaultparindent = #1em -+ \fi -+ \fi -+ \parindent = \defaultparindent - } - --% Used in nested conditionals, where we have to parse the Texinfo source --% and so want to turn off most commands, in case they are used --% incorrectly. --% --\def\ignoremorecommands{% -- \let\defcodeindex = \relax -- \let\defcv = \relax -- \let\deffn = \relax -- \let\deffnx = \relax -- \let\defindex = \relax -- \let\defivar = \relax -- \let\defmac = \relax -- \let\defmethod = \relax -- \let\defop = \relax -- \let\defopt = \relax -- \let\defspec = \relax -- \let\deftp = \relax -- \let\deftypefn = \relax -- \let\deftypefun = \relax -- \let\deftypevar = \relax -- \let\deftypevr = \relax -- \let\defun = \relax -- \let\defvar = \relax -- \let\defvr = \relax -- \let\ref = \relax -- \let\xref = \relax -- \let\printindex = \relax -- \let\pxref = \relax -- \let\settitle = \relax -- \let\setchapternewpage = \relax -- \let\setchapterstyle = \relax -- \let\everyheading = \relax -- \let\evenheading = \relax -- \let\oddheading = \relax -- \let\everyfooting = \relax -- \let\evenfooting = \relax -- \let\oddfooting = \relax -- \let\headings = \relax -- \let\include = \relax -- \let\lowersections = \relax -- \let\down = \relax -- \let\raisesections = \relax -- \let\up = \relax -- \let\set = \relax -- \let\clear = \relax -- \let\item = \relax -+% @exampleindent NCHARS -+% We'll use ems for NCHARS like @paragraphindent. -+% It seems @exampleindent asis isn't necessary, but -+% I preserve it to make it similar to @paragraphindent. -+\def\exampleindent{\parsearg\doexampleindent} -+\def\doexampleindent#1{% -+ \def\temp{#1}% -+ \ifx\temp\asisword -+ \else -+ \ifx\temp\noneword -+ \lispnarrowing = 0pt -+ \else -+ \lispnarrowing = #1em -+ \fi -+ \fi - } - --% Ignore @ignore ... @end ignore. -+% @asis just yields its argument. Used with @table, for example. - % --\def\ignore{\doignore{ignore}} -+\def\asis#1{#1} - --% Ignore @ifinfo, @ifhtml, @ifnottex, @html, @menu, and @direntry text. -+% @math means output in math mode. -+% We don't use $'s directly in the definition of \math because control -+% sequences like \math are expanded when the toc file is written. Then, -+% we read the toc file back, the $'s will be normal characters (as they -+% should be, according to the definition of Texinfo). So we must use a -+% control sequence to switch into and out of math mode. - % --\def\ifinfo{\doignore{ifinfo}} --\def\ifhtml{\doignore{ifhtml}} --\def\ifnottex{\doignore{ifnottex}} --\def\html{\doignore{html}} --\def\menu{\doignore{menu}} --\def\direntry{\doignore{direntry}} -- --% Also ignore @macro ... @end macro. The user must run texi2dvi, --% which runs makeinfo to do macro expansion. Ignore @unmacro, too. --\def\macro{\doignore{macro}} --\let\unmacro = \comment -+% This isn't quite enough for @math to work properly in indices, but it -+% seems unlikely it will ever be needed there. -+% -+\let\implicitmath = $ -+\def\math#1{\implicitmath #1\implicitmath} - -+% @bullet and @minus need the same treatment as @math, just above. -+\def\bullet{\implicitmath\ptexbullet\implicitmath} -+\def\minus{\implicitmath-\implicitmath} - --% @dircategory CATEGORY -- specify a category of the dir file --% which this file should belong to. Ignore this in TeX. --\let\dircategory = \comment -+% @refill is a no-op. -+\let\refill=\relax - --% Ignore text until a line `@end #1'. -+% If working on a large document in chapters, it is convenient to -+% be able to disable indexing, cross-referencing, and contents, for test runs. -+% This is done with @novalidate (before @setfilename). - % --\def\doignore#1{\begingroup -- % Don't complain about control sequences we have declared \outer. -- \ignoresections -- % -- % Define a command to swallow text until we reach `@end #1'. -- \long\def\doignoretext##1\end #1{\enddoignore}% -- % -- % Make sure that spaces turn into tokens that match what \doignoretext wants. -- \catcode32 = 10 -- % -- % Ignore braces, too, so mismatched braces don't cause trouble. -- \catcode`\{ = 9 -- \catcode`\} = 9 -- % -- % And now expand that command. -- \doignoretext -+\newif\iflinks \linkstrue % by default we want the aux files. -+\let\novalidate = \linksfalse -+ -+% @setfilename is done at the beginning of every texinfo file. -+% So open here the files we need to have open while reading the input. -+% This makes it possible to make a .fmt file for texinfo. -+\def\setfilename{% -+ \iflinks -+ \readauxfile -+ \fi % \openindices needs to do some work in any case. -+ \openindices -+ \fixbackslash % Turn off hack to swallow `\input texinfo'. -+ \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. - } - --% What we do to finish off ignored text. -+% Called from \setfilename. - % --\def\enddoignore{\endgroup\ignorespaces}% -+\def\openindices{% -+ \newindex{cp}% -+ \newcodeindex{fn}% -+ \newcodeindex{vr}% -+ \newcodeindex{tp}% -+ \newcodeindex{ky}% -+ \newcodeindex{pg}% -+} - --\newif\ifwarnedobs\warnedobsfalse --\def\obstexwarn{% -- \ifwarnedobs\relax\else -- % We need to warn folks that they may have trouble with TeX 3.0. -- % This uses \immediate\write16 rather than \message to get newlines. -- \immediate\write16{} -- \immediate\write16{***WARNING*** for users of Unix TeX 3.0!} -- \immediate\write16{This manual trips a bug in TeX version 3.0 (tex hangs).} -- \immediate\write16{If you are running another version of TeX, relax.} -- \immediate\write16{If you are running Unix TeX 3.0, kill this TeX process.} -- \immediate\write16{ Then upgrade your TeX installation if you can.} -- \immediate\write16{ (See ftp://ftp.gnu.ai.mit.edu/pub/gnu/TeX.README.)} -- \immediate\write16{If you are stuck with version 3.0, run the} -- \immediate\write16{ script ``tex3patch'' from the Texinfo distribution} -- \immediate\write16{ to use a workaround.} -- \immediate\write16{} -- \global\warnedobstrue -+% @bye. -+\outer\def\bye{\pagealignmacro\tracingstats=1\ptexend} -+ -+ -+\message{pdf,} -+% adobe `portable' document format -+\newcount\tempnum -+\newcount\lnkcount -+\newtoks\filename -+\newcount\filenamelength -+\newcount\pgn -+\newtoks\toksA -+\newtoks\toksB -+\newtoks\toksC -+\newtoks\toksD -+\newbox\boxA -+\newcount\countA -+\newif\ifpdf -+\newif\ifpdfmakepagedest -+ -+\ifx\pdfoutput\undefined -+ \pdffalse -+ \let\pdfmkdest = \gobble -+ \let\pdfurl = \gobble -+ \let\endlink = \relax -+ \let\linkcolor = \relax -+ \let\pdfmakeoutlines = \relax -+\else -+ \pdftrue -+ \pdfoutput = 1 -+ \input pdfcolor -+ \def\dopdfimage#1#2#3{% -+ \def\imagewidth{#2}% -+ \def\imageheight{#3}% -+ \ifnum\pdftexversion < 14 -+ \pdfimage -+ \else -+ \pdfximage - \fi --} -- --% **In TeX 3.0, setting text in \nullfont hangs tex. For a --% workaround (which requires the file ``dummy.tfm'' to be installed), --% uncomment the following line: --%%%%%\font\nullfont=dummy\let\obstexwarn=\relax -- --% Ignore text, except that we keep track of conditional commands for --% purposes of nesting, up to an `@end #1' command. --% --\def\nestedignore#1{% -- \obstexwarn -- % We must actually expand the ignored text to look for the @end -- % command, so that nested ignore constructs work. Thus, we put the -- % text into a \vbox and then do nothing with the result. To minimize -- % the change of memory overflow, we follow the approach outlined on -- % page 401 of the TeXbook: make the current font be a dummy font. -- % -- \setbox0 = \vbox\bgroup -- % Don't complain about control sequences we have declared \outer. -- \ignoresections -- % -- % Define `@end #1' to end the box, which will in turn undefine the -- % @end command again. -- \expandafter\def\csname E#1\endcsname{\egroup\ignorespaces}% -- % -- % We are going to be parsing Texinfo commands. Most cause no -- % trouble when they are used incorrectly, but some commands do -- % complicated argument parsing or otherwise get confused, so we -- % undefine them. -- % -- % We can't do anything about stray @-signs, unfortunately; -- % they'll produce `undefined control sequence' errors. -- \ignoremorecommands -- % -- % Set the current font to be \nullfont, a TeX primitive, and define -- % all the font commands to also use \nullfont. We don't use -- % dummy.tfm, as suggested in the TeXbook, because not all sites -- % might have that installed. Therefore, math mode will still -- % produce output, but that should be an extremely small amount of -- % stuff compared to the main input. -- % -- \nullfont -- \let\tenrm = \nullfont \let\tenit = \nullfont \let\tensl = \nullfont -- \let\tenbf = \nullfont \let\tentt = \nullfont \let\smallcaps = \nullfont -- \let\tensf = \nullfont -- % Similarly for index fonts (mostly for their use in -- % smallexample) -- \let\indrm = \nullfont \let\indit = \nullfont \let\indsl = \nullfont -- \let\indbf = \nullfont \let\indtt = \nullfont \let\indsc = \nullfont -- \let\indsf = \nullfont -- % -- % Don't complain when characters are missing from the fonts. -- \tracinglostchars = 0 -- % -- % Don't bother to do space factor calculations. -- \frenchspacing -- % -- % Don't report underfull hboxes. -- \hbadness = 10000 -- % -- % Do minimal line-breaking. -- \pretolerance = 10000 -- % -- % Do not execute instructions in @tex -- \def\tex{\doignore{tex}}% --} -- --% @set VAR sets the variable VAR to an empty value. --% @set VAR REST-OF-LINE sets VAR to the value REST-OF-LINE. --% --% Since we want to separate VAR from REST-OF-LINE (which might be --% empty), we can't just use \parsearg; we have to insert a space of our --% own to delimit the rest of the line, and then take it out again if we --% didn't need it. Make sure the catcode of space is correct to avoid --% losing inside @example, for instance. --% --\def\set{\begingroup\catcode` =10 -- \catcode`\-=12 \catcode`\_=12 % Allow - and _ in VAR. -- \parsearg\setxxx} --\def\setxxx#1{\setyyy#1 \endsetyyy} --\def\setyyy#1 #2\endsetyyy{% -- \def\temp{#2}% -- \ifx\temp\empty \global\expandafter\let\csname SET#1\endcsname = \empty -- \else \setzzz{#1}#2\endsetzzz % Remove the trailing space \setxxx inserted. -- \fi -- \endgroup --} --% Can't use \xdef to pre-expand #2 and save some time, since \temp or --% \next or other control sequences that we've defined might get us into --% an infinite loop. Consider `@set foo @cite{bar}'. --\def\setzzz#1#2 \endsetzzz{\expandafter\gdef\csname SET#1\endcsname{#2}} -- --% @clear VAR clears (i.e., unsets) the variable VAR. --% --\def\clear{\parsearg\clearxxx} --\def\clearxxx#1{\global\expandafter\let\csname SET#1\endcsname=\relax} -- --% @value{foo} gets the text saved in variable foo. --% --\def\value{\begingroup -- \catcode`\-=12 \catcode`\_=12 % Allow - and _ in VAR. -- \valuexxx} --\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 --% with @set. --% --\def\ifset{\parsearg\ifsetxxx} --\def\ifsetxxx #1{% -- \expandafter\ifx\csname SET#1\endcsname\relax -- \expandafter\ifsetfail -- \else -- \expandafter\ifsetsucceed -- \fi --} --\def\ifsetsucceed{\conditionalsucceed{ifset}} --\def\ifsetfail{\nestedignore{ifset}} --\defineunmatchedend{ifset} -- --% @ifclear VAR ... @end ifclear reads the `...' iff VAR has never been --% defined with @set, or has been undefined with @clear. --% --\def\ifclear{\parsearg\ifclearxxx} --\def\ifclearxxx #1{% -- \expandafter\ifx\csname SET#1\endcsname\relax -- \expandafter\ifclearsucceed -- \else -- \expandafter\ifclearfail -- \fi --} --\def\ifclearsucceed{\conditionalsucceed{ifclear}} --\def\ifclearfail{\nestedignore{ifclear}} --\defineunmatchedend{ifclear} -- --% @iftex, @ifnothtml, @ifnotinfo always succeed; we read the text --% following, through the first @end iftex (etc.). Make `@end iftex' --% (etc.) valid only after an @iftex. --% --\def\iftex{\conditionalsucceed{iftex}} --\def\ifnothtml{\conditionalsucceed{ifnothtml}} --\def\ifnotinfo{\conditionalsucceed{ifnotinfo}} --\defineunmatchedend{iftex} --\defineunmatchedend{ifnothtml} --\defineunmatchedend{ifnotinfo} -- --% We can't just want to start a group at @iftex (for example) and end it --% at @end iftex, since then @set commands inside the conditional have no --% effect (they'd get reverted at the end of the group). So we must --% define \Eiftex to redefine itself to be its previous value. (We can't --% just define it to fail again with an ``unmatched end'' error, since --% the @ifset might be nested.) --% --\def\conditionalsucceed#1{% -- \edef\temp{% -- % Remember the current value of \E#1. -- \let\nece{prevE#1} = \nece{E#1}% -- % -- % At the `@end #1', redefine \E#1 to be its previous value. -- \def\nece{E#1}{\let\nece{E#1} = \nece{prevE#1}}% -- }% -- \temp --} -- --% We need to expand lots of \csname's, but we don't want to expand the --% control sequences after we've constructed them. --% --\def\nece#1{\expandafter\noexpand\csname#1\endcsname} -- --% @asis just yields its argument. Used with @table, for example. --% --\def\asis#1{#1} -- --% @math means output in math mode. --% We don't use $'s directly in the definition of \math because control --% sequences like \math are expanded when the toc file is written. Then, --% we read the toc file back, the $'s will be normal characters (as they --% should be, according to the definition of Texinfo). So we must use a --% control sequence to switch into and out of math mode. --% --% This isn't quite enough for @math to work properly in indices, but it --% seems unlikely it will ever be needed there. --% --\let\implicitmath = $ --\def\math#1{\implicitmath #1\implicitmath} -- --% @bullet and @minus need the same treatment as @math, just above. --\def\bullet{\implicitmath\ptexbullet\implicitmath} --\def\minus{\implicitmath-\implicitmath} -- --\def\node{\ENVcheck\parsearg\nodezzz} --\def\nodezzz#1{\nodexxx [#1,]} --\def\nodexxx[#1,#2]{\gdef\lastnode{#1}} --\let\nwnode=\node --\let\lastnode=\relax -- --\def\donoderef{\ifx\lastnode\relax\else --\expandafter\expandafter\expandafter\setref{\lastnode}\fi --\global\let\lastnode=\relax} -- --\def\unnumbnoderef{\ifx\lastnode\relax\else --\expandafter\expandafter\expandafter\unnumbsetref{\lastnode}\fi --\global\let\lastnode=\relax} -- --\def\appendixnoderef{\ifx\lastnode\relax\else --\expandafter\expandafter\expandafter\appendixsetref{\lastnode}\fi --\global\let\lastnode=\relax} -- --% @refill is a no-op. --\let\refill=\relax -- --% @setfilename is done at the beginning of every texinfo file. --% So open here the files we need to have open while reading the input. --% This makes it possible to make a .fmt file for texinfo. --\def\setfilename{% -- \readauxfile -- \opencontents -- \openindices -- \fixbackslash % Turn off hack to swallow `\input texinfo'. -- \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. --} -- --% @bye. --\outer\def\bye{\pagealignmacro\tracingstats=1\ptexend} -- --% \def\macro#1{\begingroup\ignoresections\catcode`\#=6\def\macrotemp{#1}\parsearg\macroxxx} --% \def\macroxxx#1#2 \end macro{% --% \expandafter\gdef\macrotemp#1{#2}% --% \endgroup} -- --%\def\linemacro#1{\begingroup\ignoresections\catcode`\#=6\def\macrotemp{#1}\parsearg\linemacroxxx} --%\def\linemacroxxx#1#2 \end linemacro{% --%\let\parsearg=\relax --%\edef\macrotempx{\csname M\butfirst\expandafter\string\macrotemp\endcsname}% --%\expandafter\xdef\macrotemp{\parsearg\macrotempx}% --%\expandafter\gdef\macrotempx#1{#2}% --%\endgroup} -- --%\def\butfirst#1{} -+ \ifx\empty\imagewidth\else width \imagewidth \fi -+ \ifx\empty\imageheight\else height \imageheight \fi -+ {#1.pdf}% -+ \ifnum\pdftexversion < 14 \else -+ \pdfrefximage \pdflastximage -+ \fi} -+ \def\pdfmkdest#1{\pdfdest name{#1@} xyz} -+ \def\pdfmkpgn#1{#1@} -+ \let\linkcolor = \Blue % was Cyan, but that seems light? -+ \def\endlink{\Black\pdfendlink} -+ % Adding outlines to PDF; macros for calculating structure of outlines -+ % come from Petr Olsak -+ \def\expnumber#1{\expandafter\ifx\csname#1\endcsname\relax 0% -+ \else \csname#1\endcsname \fi} -+ \def\advancenumber#1{\tempnum=\expnumber{#1}\relax -+ \advance\tempnum by1 -+ \expandafter\xdef\csname#1\endcsname{\the\tempnum}} -+ \def\pdfmakeoutlines{{% -+ \openin 1 \jobname.toc -+ \ifeof 1\else\bgroup -+ \closein 1 -+ \indexnofonts -+ \def\tt{} -+ \let\_ = \normalunderscore -+ % Thanh's hack / proper braces in bookmarks -+ \edef\mylbrace{\iftrue \string{\else}\fi}\let\{=\mylbrace -+ \edef\myrbrace{\iffalse{\else\string}\fi}\let\}=\myrbrace -+ % -+ \def\chapentry ##1##2##3{} -+ \def\unnumbchapentry ##1##2{} -+ \def\secentry ##1##2##3##4{\advancenumber{chap##2}} -+ \def\unnumbsecentry ##1##2{} -+ \def\subsecentry ##1##2##3##4##5{\advancenumber{sec##2.##3}} -+ \def\unnumbsubsecentry ##1##2{} -+ \def\subsubsecentry ##1##2##3##4##5##6{\advancenumber{subsec##2.##3.##4}} -+ \def\unnumbsubsubsecentry ##1##2{} -+ \input \jobname.toc -+ \def\chapentry ##1##2##3{% -+ \pdfoutline goto name{\pdfmkpgn{##3}}count-\expnumber{chap##2}{##1}} -+ \def\unnumbchapentry ##1##2{% -+ \pdfoutline goto name{\pdfmkpgn{##2}}{##1}} -+ \def\secentry ##1##2##3##4{% -+ \pdfoutline goto name{\pdfmkpgn{##4}}count-\expnumber{sec##2.##3}{##1}} -+ \def\unnumbsecentry ##1##2{% -+ \pdfoutline goto name{\pdfmkpgn{##2}}{##1}} -+ \def\subsecentry ##1##2##3##4##5{% -+ \pdfoutline goto name{\pdfmkpgn{##5}}count-\expnumber{subsec##2.##3.##4}{##1}} -+ \def\unnumbsubsecentry ##1##2{% -+ \pdfoutline goto name{\pdfmkpgn{##2}}{##1}} -+ \def\subsubsecentry ##1##2##3##4##5##6{% -+ \pdfoutline goto name{\pdfmkpgn{##6}}{##1}} -+ \def\unnumbsubsubsecentry ##1##2{% -+ \pdfoutline goto name{\pdfmkpgn{##2}}{##1}} -+ \input \jobname.toc -+ \egroup\fi -+ }} -+ \def\makelinks #1,{% -+ \def\params{#1}\def\E{END}% -+ \ifx\params\E -+ \let\nextmakelinks=\relax -+ \else -+ \let\nextmakelinks=\makelinks -+ \ifnum\lnkcount>0,\fi -+ \picknum{#1}% -+ \startlink attr{/Border [0 0 0]} -+ goto name{\pdfmkpgn{\the\pgn}}% -+ \linkcolor #1% -+ \advance\lnkcount by 1% -+ \endlink -+ \fi -+ \nextmakelinks -+ } -+ \def\picknum#1{\expandafter\pn#1} -+ \def\pn#1{% -+ \def\p{#1}% -+ \ifx\p\lbrace -+ \let\nextpn=\ppn -+ \else -+ \let\nextpn=\ppnn -+ \def\first{#1} -+ \fi -+ \nextpn -+ } -+ \def\ppn#1{\pgn=#1\gobble} -+ \def\ppnn{\pgn=\first} -+ \def\pdfmklnk#1{\lnkcount=0\makelinks #1,END,} -+ \def\addtokens#1#2{\edef\addtoks{\noexpand#1={\the#1#2}}\addtoks} -+ \def\skipspaces#1{\def\PP{#1}\def\D{|}% -+ \ifx\PP\D\let\nextsp\relax -+ \else\let\nextsp\skipspaces -+ \ifx\p\space\else\addtokens{\filename}{\PP}% -+ \advance\filenamelength by 1 -+ \fi -+ \fi -+ \nextsp} -+ \def\getfilename#1{\filenamelength=0\expandafter\skipspaces#1|\relax} -+ \ifnum\pdftexversion < 14 -+ \let \startlink \pdfannotlink -+ \else -+ \let \startlink \pdfstartlink -+ \fi -+ \def\pdfurl#1{% -+ \begingroup -+ \normalturnoffactive\def\@{@}% -+ \leavevmode\Red -+ \startlink attr{/Border [0 0 0]}% -+ user{/Subtype /Link /A << /S /URI /URI (#1) >>}% -+ % #1 -+ \endgroup} -+ \def\pdfgettoks#1.{\setbox\boxA=\hbox{\toksA={#1.}\toksB={}\maketoks}} -+ \def\addtokens#1#2{\edef\addtoks{\noexpand#1={\the#1#2}}\addtoks} -+ \def\adn#1{\addtokens{\toksC}{#1}\global\countA=1\let\next=\maketoks} -+ \def\poptoks#1#2|ENDTOKS|{\let\first=#1\toksD={#1}\toksA={#2}} -+ \def\maketoks{% -+ \expandafter\poptoks\the\toksA|ENDTOKS| -+ \ifx\first0\adn0 -+ \else\ifx\first1\adn1 \else\ifx\first2\adn2 \else\ifx\first3\adn3 -+ \else\ifx\first4\adn4 \else\ifx\first5\adn5 \else\ifx\first6\adn6 -+ \else\ifx\first7\adn7 \else\ifx\first8\adn8 \else\ifx\first9\adn9 -+ \else -+ \ifnum0=\countA\else\makelink\fi -+ \ifx\first.\let\next=\done\else -+ \let\next=\maketoks -+ \addtokens{\toksB}{\the\toksD} -+ \ifx\first,\addtokens{\toksB}{\space}\fi -+ \fi -+ \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi -+ \next} -+ \def\makelink{\addtokens{\toksB}% -+ {\noexpand\pdflink{\the\toksC}}\toksC={}\global\countA=0} -+ \def\pdflink#1{% -+ \startlink attr{/Border [0 0 0]} goto name{\mkpgn{#1}} -+ \linkcolor #1\endlink} -+ \def\mkpgn#1{#1@} -+ \def\done{\edef\st{\global\noexpand\toksA={\the\toksB}}\st} -+\fi % \ifx\pdfoutput - - - \message{fonts,} -- - % Font-change commands. - --% Texinfo supports the sans serif font style, which plain TeX does not. -+% Texinfo sort of supports the sans serif font style, which plain TeX does not. - % So we set up a \sf analogous to plain's \rm, etc. - \newfam\sffam - \def\sf{\fam=\sffam \tensf} -@@ -1124,22 +1091,17 @@ - \setfont\deftt\ttshape{10}{\magstep1} - \def\df{\let\tentt=\deftt \let\tenbf = \defbf \bf} - --% Fonts for indices and small examples (9pt). --% We actually use the slanted font rather than the italic, --% because texinfo normally uses the slanted fonts for that. --% Do not make many font distinctions in general in the index, since they --% aren't very useful. --\setfont\ninett\ttshape{9}{1000} --\setfont\indrm\rmshape{9}{1000} --\setfont\indit\slshape{9}{1000} --\let\indsl=\indit --\let\indtt=\ninett --\let\indttsl=\ninett --\let\indsf=\indrm --\let\indbf=\indrm --\setfont\indsc\scshape{10}{900} --\font\indi=cmmi9 --\font\indsy=cmsy9 -+% Fonts for indices, footnotes, small examples (9pt). -+\setfont\smallrm\rmshape{9}{1000} -+\setfont\smalltt\ttshape{9}{1000} -+\setfont\smallbf\bfshape{10}{900} -+\setfont\smallit\itshape{9}{1000} -+\setfont\smallsl\slshape{9}{1000} -+\setfont\smallsf\sfshape{9}{1000} -+\setfont\smallsc\scshape{10}{900} -+\setfont\smallttsl\ttslshape{10}{900} -+\font\smalli=cmmi9 -+\font\smallsy=cmsy9 - - % Fonts for title page: - \setfont\titlerm\rmbshape{12}{\magstep3} -@@ -1236,7 +1198,7 @@ - \let\tensf=\titlesf \let\teni=\titlei \let\tensy=\titlesy - \let\tenttsl=\titlettsl - \resetmathfonts \setleading{25pt}} --\def\titlefont#1{{\titlefonts #1}} -+\def\titlefont#1{{\titlefonts\rm #1}} - \def\chapfonts{% - \let\tenrm=\chaprm \let\tenit=\chapit \let\tensl=\chapsl - \let\tenbf=\chapbf \let\tentt=\chaptt \let\smallcaps=\chapsc -@@ -1253,16 +1215,21 @@ - \let\tensf=\ssecsf \let\teni=\sseci \let\tensy=\ssecsy \let\tenttsl=\ssecttsl - \resetmathfonts \setleading{15pt}} - \let\subsubsecfonts = \subsecfonts % Maybe make sssec fonts scaled magstephalf? --\def\indexfonts{% -- \let\tenrm=\indrm \let\tenit=\indit \let\tensl=\indsl -- \let\tenbf=\indbf \let\tentt=\indtt \let\smallcaps=\indsc -- \let\tensf=\indsf \let\teni=\indi \let\tensy=\indsy \let\tenttsl=\indttsl -- \resetmathfonts \setleading{12pt}} -+\def\smallfonts{% -+ \let\tenrm=\smallrm \let\tenit=\smallit \let\tensl=\smallsl -+ \let\tenbf=\smallbf \let\tentt=\smalltt \let\smallcaps=\smallsc -+ \let\tensf=\smallsf \let\teni=\smalli \let\tensy=\smallsy -+ \let\tenttsl=\smallttsl -+ \resetmathfonts \setleading{11pt}} - - % Set up the default fonts, so we can use them for creating boxes. - % - \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 - \newcount\fontdepth \fontdepth=0 - -@@ -1277,13 +1244,14 @@ - % \smartitalic{ARG} outputs arg in italics, followed by an italic correction - % unless the following character is such as not to need one. - \def\smartitalicx{\ifx\next,\else\ifx\next-\else\ifx\next.\else\/\fi\fi\fi} --\def\smartitalic#1{{\sl #1}\futurelet\next\smartitalicx} -+\def\smartslanted#1{{\sl #1}\futurelet\next\smartitalicx} -+\def\smartitalic#1{{\it #1}\futurelet\next\smartitalicx} - - \let\i=\smartitalic --\let\var=\smartitalic --\let\dfn=\smartitalic -+\let\var=\smartslanted -+\let\dfn=\smartslanted - \let\emph=\smartitalic --\let\cite=\smartitalic -+\let\cite=\smartslanted - - \def\b#1{{\bf #1}} - \let\strong=\b -@@ -1300,20 +1268,22 @@ - \null - } - \let\ttfont=\t --\def\samp #1{`\tclose{#1}'\null} --\setfont\smallrm\rmshape{8}{1000} --\font\smallsy=cmsy9 --\def\key#1{{\smallrm\textfont2=\smallsy \leavevmode\hbox{% -- \raise0.4pt\hbox{$\langle$}\kern-.08em\vtop{% -+\def\samp#1{`\tclose{#1}'\null} -+\setfont\keyrm\rmshape{8}{1000} -+\font\keysy=cmsy9 -+\def\key#1{{\keyrm\textfont2=\keysy \leavevmode\hbox{% -+ \raise0.4pt\hbox{\angleleft}\kern-.08em\vtop{% - \vbox{\hrule\kern-0.4pt -- \hbox{\raise0.4pt\hbox{\vphantom{$\langle$}}#1}}% -+ \hbox{\raise0.4pt\hbox{\vphantom{\angleleft}}#1}}% - \kern-0.4pt\hrule}% -- \kern-.06em\raise0.4pt\hbox{$\rangle$}}}} -+ \kern-.06em\raise0.4pt\hbox{\angleright}}}} - % The old definition, with no lozenge: - %\def\key #1{{\ttsl \nohyphenation \uppercase{#1}}\null} - \def\ctrl #1{{\tt \rawbackslash \hat}#1} - -+% @file, @option are the same as @samp. - \let\file=\samp -+\let\option=\samp - - % @code is a modification of @t, - % which makes spaces the same size as normal in the surrounding text. -@@ -1348,20 +1318,18 @@ - % and arrange explicitly to hyphenate at a dash. - % -- rms. - { --\catcode`\-=\active --\catcode`\_=\active --\catcode`\|=\active --\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 --% 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 --% ever called. -- mycroft --% _ 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 --} -+ \catcode`\-=\active -+ \catcode`\_=\active -+ % -+ \global\def\code{\begingroup -+ \catcode`\-=\active \let-\codedash -+ \catcode`\_=\active \let_\codeunder -+ \codex -+ } -+ % -+ % If we end up with any active - characters when handling the index, -+ % just treat them as a normal -. -+ \global\def\indexbreaks{\catcode`\-=\active \let-\realdash} - } - - \def\realdash{-} -@@ -1402,27 +1370,55 @@ - \else{\tclose{\kbdfont\look}}\fi - \else{\tclose{\kbdfont\look}}\fi} - --% @url. Quotes do not seem necessary, so use \code. -+% For @url, @env, @command quotes seem unnecessary, so use \code. - \let\url=\code -+\let\env=\code -+\let\command=\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}% -+% @uref (abbreviation for `urlref') takes an optional (comma-separated) -+% second argument specifying the text to display and an optional third -+% arg as text to display instead of (rather than in addition to) the url -+% itself. First (mandatory) arg is the url. Perhaps eventually put in -+% a hypertex \special here. -+% -+\def\uref#1{\douref #1,,,\finish} -+\def\douref#1,#2,#3,#4\finish{\begingroup -+ \unsepspaces -+ \pdfurl{#1}% -+ \setbox0 = \hbox{\ignorespaces #3}% - \ifdim\wd0 > 0pt -- \unhbox0\ (\code{#1})% -+ \unhbox0 % third arg given, show only that - \else -- \code{#1}% -+ \setbox0 = \hbox{\ignorespaces #2}% -+ \ifdim\wd0 > 0pt -+ \ifpdf -+ \unhbox0 % PDF: 2nd arg given, show only it -+ \else -+ \unhbox0\ (\code{#1})% DVI: 2nd arg given, show both it and url -+ \fi -+ \else -+ \code{#1}% only url given, so show it -+ \fi - \fi --} -+ \endlink -+\endgroup} - --% rms does not like the angle brackets --karl, 17may97. --% So now @email is just like @uref. --%\def\email#1{$\langle${\tt #1}$\rangle$} --\let\email=\uref -+% rms does not like angle brackets --karl, 17may97. -+% So now @email is just like @uref, unless we are pdf. -+% -+%\def\email#1{\angleleft{\tt #1}\angleright} -+\ifpdf -+ \def\email#1{\doemail#1,,\finish} -+ \def\doemail#1,#2,#3\finish{\begingroup -+ \unsepspaces -+ \pdfurl{mailto:#1}% -+ \setbox0 = \hbox{\ignorespaces #2}% -+ \ifdim\wd0>0pt\unhbox0\else\code{#1}\fi -+ \endlink -+ \endgroup} -+\else -+ \let\email=\uref -+\fi - - % Check if we are currently using a typewriter font. Since all the - % Computer Modern typewriter fonts have zero interword stretch (and -@@ -1432,8 +1428,7 @@ - \def\ifmonospace{\ifdim\fontdimen3\font=0pt } - - % Typeset a dimension, e.g., `in' or `pt'. The only reason for the --% argument is to make the input look right: @dmn{pt} instead of --% @dmn{}pt. -+% argument is to make the input look right: @dmn{pt} instead of @dmn{}pt. - % - \def\dmn#1{\thinspace #1} - -@@ -1444,11 +1439,14 @@ - % Polish suppressed-l. --karl, 22sep96. - %\def\l#1{{\li #1}\null} - -+% Explicit font changes: @r, @sc, undocumented @ii. - \def\r#1{{\rm #1}} % roman font --% Use of \lowercase was suggested. - \def\sc#1{{\smallcaps#1}} % smallcaps font - \def\ii#1{{\it #1}} % italic font - -+% @acronym downcases the argument and prints in smallcaps. -+\def\acronym#1{{\smallcaps \lowercase{#1}}} -+ - % @pounds{} is a sterling sign. - \def\pounds{{\it\$}} - -@@ -1462,15 +1460,20 @@ - \newif\ifseenauthor - \newif\iffinishedtitlepage - -+% Do an implicit @contents or @shortcontents after @end titlepage if the -+% user says @setcontentsaftertitlepage or @setshortcontentsaftertitlepage. -+% -+\newif\ifsetcontentsaftertitlepage -+ \let\setcontentsaftertitlepage = \setcontentsaftertitlepagetrue -+\newif\ifsetshortcontentsaftertitlepage -+ \let\setshortcontentsaftertitlepage = \setshortcontentsaftertitlepagetrue -+ - \def\shorttitlepage{\parsearg\shorttitlepagezzz} - \def\shorttitlepagezzz #1{\begingroup\hbox{}\vskip 1.5in \chaprm \centerline{#1}% - \endgroup\page\hbox{}\page} - - \def\titlepage{\begingroup \parindent=0pt \textfonts - \let\subtitlerm=\tenrm --% I deinstalled the following change because \cmr12 is undefined. --% This change was not in the ChangeLog anyway. --rms. --% \let\subtitlerm=\cmr12 - \def\subtitlefont{\subtitlerm \normalbaselineskip = 13pt \normalbaselines}% - % - \def\authorfont{\authorrm \normalbaselineskip = 16pt \normalbaselines}% -@@ -1519,6 +1522,23 @@ - % after the title page, which we certainly don't want. - \oldpage - \endgroup -+ % -+ % If they want short, they certainly want long too. -+ \ifsetshortcontentsaftertitlepage -+ \shortcontents -+ \contents -+ \global\let\shortcontents = \relax -+ \global\let\contents = \relax -+ \fi -+ % -+ \ifsetcontentsaftertitlepage -+ \contents -+ \global\let\contents = \relax -+ \global\let\shortcontents = \relax -+ \fi -+ % -+ \ifpdf \pdfmakepagedesttrue \fi -+ % - \HEADINGSon - } - -@@ -1532,10 +1552,10 @@ - - \let\thispage=\folio - --\newtoks \evenheadline % Token sequence for heading line of even pages --\newtoks \oddheadline % Token sequence for heading line of odd pages --\newtoks \evenfootline % Token sequence for footing line of even pages --\newtoks \oddfootline % Token sequence for footing line of odd pages -+\newtoks\evenheadline % headline on even pages -+\newtoks\oddheadline % headline on odd pages -+\newtoks\evenfootline % footline on even pages -+\newtoks\oddfootline % footline on odd pages - - % Now make Tex use those variables - \headline={{\textfonts\rm \ifodd\pageno \the\oddheadline -@@ -1652,40 +1672,28 @@ - } - - % Subroutines used in generating headings --% Produces Day Month Year style of output. --\def\today{\number\day\space --\ifcase\month\or --January\or February\or March\or April\or May\or June\or --July\or August\or September\or October\or November\or December\fi --\space\number\year} -- --% Use this if you want the Month Day, Year style of output. --%\def\today{\ifcase\month\or --%January\or February\or March\or April\or May\or June\or --%July\or August\or September\or October\or November\or December\fi --%\space\number\day, \number\year} -- --% @settitle line... specifies the title of the document, for headings --% It generates no output of its own -+% 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{% -+ \number\day\space -+ \ifcase\month -+ \or\putwordMJan\or\putwordMFeb\or\putwordMMar\or\putwordMApr -+ \or\putwordMMay\or\putwordMJun\or\putwordMJul\or\putwordMAug -+ \or\putwordMSep\or\putwordMOct\or\putwordMNov\or\putwordMDec -+ \fi -+ \space\number\year} -+\fi - --\def\thistitle{No Title} -+% @settitle line... specifies the title of the document, for headings. -+% It generates no output of its own. -+\def\thistitle{\putwordNoTitle} - \def\settitle{\parsearg\settitlezzz} - \def\settitlezzz #1{\gdef\thistitle{#1}} - - - \message{tables,} -- --% @tabs -- simple alignment -- --% These don't work. For one thing, \+ is defined as outer. --% So these macros cannot even be defined. -- --%\def\tabs{\parsearg\tabszzz} --%\def\tabszzz #1{\settabs\+#1\cr} --%\def\tabline{\parsearg\tablinezzz} --%\def\tablinezzz #1{\+#1\cr} --%\def\&{&} -- - % Tables -- @table, @ftable, @vtable, @item(x), @kitem(x), @xitem(x). - - % default indentation of table text -@@ -1729,11 +1737,6 @@ - \itemindex{#1}% - \nobreak % This prevents a break before @itemx. - % -- % Be sure we are not still in the middle of a paragraph. -- %{\parskip = 0in -- %\par -- %}% -- % - % If the item text does not fit in the space we have, put it on a line - % by itself, and do not allow a page break either before or after that - % line. We do not start a paragraph here because then if the next -@@ -1762,13 +1765,17 @@ - \itemxneedsnegativevskipfalse - \else - % The item text fits into the space. Start a paragraph, so that the -- % following text (if any) will end up on the same line. Since that -- % text will be indented by \tableindent, we make the item text be in -- % a zero-width box. -+ % following text (if any) will end up on the same line. - \noindent -- \rlap{\hskip -\tableindent\box0}\ignorespaces% -- \endgroup% -- \itemxneedsnegativevskiptrue% -+ % Do this with kerns and \unhbox so that if there is a footnote in -+ % the item text, it can migrate to the main vertical list and -+ % eventually be printed. -+ \nobreak\kern-\tableindent -+ \dimen0 = \itemmax \advance\dimen0 by \itemmargin \advance\dimen0 by -\wd0 -+ \unhbox0 -+ \nobreak\kern\dimen0 -+ \endgroup -+ \itemxneedsnegativevskiptrue - \fi - } - -@@ -1779,9 +1786,10 @@ - \def\xitem{\errmessage{@xitem while not in a table}} - \def\xitemx{\errmessage{@xitemx while not in a table}} - --%% Contains a kludge to get @end[description] to work -+% Contains a kludge to get @end[description] to work. - \def\description{\tablez{\dontindex}{1}{}{}{}{}} - -+% @table, @ftable, @vtable. - \def\table{\begingroup\inENV\obeylines\obeyspaces\tablex} - {\obeylines\obeyspaces% - \gdef\tablex #1^^M{% -@@ -1841,7 +1849,7 @@ - \def\itemize{\parsearg\itemizezzz} - - \def\itemizezzz #1{% -- \begingroup % ended by the @end itemsize -+ \begingroup % ended by the @end itemize - \itemizey {#1}{\Eitemize} - } - -@@ -2043,10 +2051,7 @@ - % @multitablelinespace is space to leave between table items, baseline - % to baseline. - % 0pt means it depends on current normal line spacing. -- --%%%% --% Dimensions -- -+% - \newskip\multitableparskip - \newskip\multitableparindent - \newdimen\multitablecolspace -@@ -2056,129 +2061,150 @@ - \multitablecolspace=12pt - \multitablelinespace=0pt - --%%%% - % Macros used to set up halign preamble: -+% - \let\endsetuptable\relax - \def\xendsetuptable{\endsetuptable} - \let\columnfractions\relax - \def\xcolumnfractions{\columnfractions} - \newif\ifsetpercent - --%% 2/1/96, to allow fractions to be given with more than one digit. --\def\pickupwholefraction#1 {\global\advance\colcount by1 % --\expandafter\xdef\csname col\the\colcount\endcsname{.#1\hsize}% --\setuptable} -+% #1 is the part of the @columnfraction before the decimal point, which -+% is presumably either 0 or the empty string (but we don't check, we -+% just throw it away). #2 is the decimal part, which we use as the -+% percent of \hsize for this column. -+\def\pickupwholefraction#1.#2 {% -+ \global\advance\colcount by 1 -+ \expandafter\xdef\csname col\the\colcount\endcsname{.#2\hsize}% -+ \setuptable -+} - - \newcount\colcount --\def\setuptable#1{\def\firstarg{#1}% --\ifx\firstarg\xendsetuptable\let\go\relax% --\else -- \ifx\firstarg\xcolumnfractions\global\setpercenttrue% -+\def\setuptable#1{% -+ \def\firstarg{#1}% -+ \ifx\firstarg\xendsetuptable -+ \let\go = \relax - \else -- \ifsetpercent -- \let\go\pickupwholefraction % In this case arg of setuptable -- % is the decimal point before the -- % number given in percent of hsize. -- % We don't need this so we don't use it. -+ \ifx\firstarg\xcolumnfractions -+ \global\setpercenttrue -+ \else -+ \ifsetpercent -+ \let\go\pickupwholefraction -+ \else -+ \global\advance\colcount by 1 -+ \setbox0=\hbox{#1\unskip }% Add a normal word space as a separator; -+ % typically that is always in the input, anyway. -+ \expandafter\xdef\csname col\the\colcount\endcsname{\the\wd0}% -+ \fi -+ \fi -+ \ifx\go\pickupwholefraction -+ % Put the argument back for the \pickupwholefraction call, so -+ % we'll always have a period there to be parsed. -+ \def\go{\pickupwholefraction#1}% - \else -- \global\advance\colcount by1 -- \setbox0=\hbox{#1 }% Add a normal word space as a separator; -- % typically that is always in the input, anyway. -- \expandafter\xdef\csname col\the\colcount\endcsname{\the\wd0}% -+ \let\go = \setuptable - \fi% -- \fi% --\ifx\go\pickupwholefraction\else\let\go\setuptable\fi% --\fi\go} -- --%%%% --% multitable syntax --\def\tab{&\hskip1sp\relax} % 2/2/96 -- % tiny skip here makes sure this column space is -- % maintained, even if it is never used. -+ \fi -+ \go -+} - -+% This used to have \hskip1sp. But then the space in a template line is -+% not enough. That is bad. So let's go back to just & until we -+% encounter the problem it was intended to solve again. -+% --karl, nathan@acm.org, 20apr99. -+\def\tab{&} - --%%%% - % @multitable ... @end multitable definitions: -- -+% - \def\multitable{\parsearg\dotable} -- - \def\dotable#1{\bgroup --\let\item\cr --\tolerance=9500 --\hbadness=9500 --\setmultitablespacing --\parskip=\multitableparskip --\parindent=\multitableparindent --\overfullrule=0pt --\global\colcount=0\relax% --\def\Emultitable{\global\setpercentfalse\global\everycr{}\cr\egroup\egroup}% -- % To parse everything between @multitable and @item : --\setuptable#1 \endsetuptable -- % Need to reset this to 0 after \setuptable. --\global\colcount=0\relax% -- % -- % This preamble sets up a generic column definition, which will -- % be used as many times as user calls for columns. -- % \vtop will set a single line and will also let text wrap and -- % continue for many paragraphs if desired. --\halign\bgroup&\global\advance\colcount by 1\relax% --\multistrut\vtop{\hsize=\expandafter\csname col\the\colcount\endcsname -- % 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 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. --\ifnum\colcount=1 --\else -- \ifsetpercent -+ \vskip\parskip -+ \let\item\crcr -+ \tolerance=9500 -+ \hbadness=9500 -+ \setmultitablespacing -+ \parskip=\multitableparskip -+ \parindent=\multitableparindent -+ \overfullrule=0pt -+ \global\colcount=0 -+ \def\Emultitable{\global\setpercentfalse\cr\egroup\egroup}% -+ % -+ % To parse everything between @multitable and @item: -+ \setuptable#1 \endsetuptable -+ % -+ % \everycr will reset column counter, \colcount, at the end of -+ % each line. Every column entry will cause \colcount to advance by one. -+ % The table preamble -+ % looks at the current \colcount to find the correct column width. -+ \everycr{\noalign{% -+ % -+ % \filbreak%% keeps underfull box messages off when table breaks over pages. -+ % Maybe so, but it also creates really weird page breaks when the table -+ % breaks over pages. Wouldn't \vfil be better? Wait until the problem -+ % manifests itself, so it can be fixed for real --karl. -+ \global\colcount=0\relax}}% -+ % -+ % This preamble sets up a generic column definition, which will -+ % be used as many times as user calls for columns. -+ % \vtop will set a single line and will also let text wrap and -+ % continue for many paragraphs if desired. -+ \halign\bgroup&\global\advance\colcount by 1\relax -+ \multistrut\vtop{\hsize=\expandafter\csname col\the\colcount\endcsname -+ % -+ % 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 -- % If user has <not> set preamble in terms of percent of \hsize -- % we will advance \hsize by \multitablecolspace -- \advance\hsize by \multitablecolspace -+ \ifsetpercent \else -+ % If user has not set preamble in terms of percent of \hsize -+ % we will advance \hsize by \multitablecolspace. -+ \advance\hsize by \multitablecolspace -+ \fi -+ % In either case we will make \leftskip=\multitablecolspace: -+ \leftskip=\multitablecolspace - \fi -- % In either case we will make \leftskip=\multitablecolspace: --\leftskip=\multitablecolspace --\fi -- % Ignoring space at the beginning and end avoids an occasional spurious -- % blank line, when TeX decides to break the line at the space before the -- % box from the multistrut, so the strut ends up on a line by itself. -- % For example: -- % @multitable @columnfractions .11 .89 -- % @item @code{#} -- % @tab Legal holiday which is valid in major parts of the whole country. -- % Is automatically provided with highlighting sequences respectively marking -- % characters. -- \noindent\ignorespaces##\unskip\multistrut}\cr -- % \everycr will reset column counter, \colcount, at the end of -- % each line. Every column entry will cause \colcount to advance by one. -- % The table preamble -- % looks at the current \colcount to find the correct column width. --\global\everycr{\noalign{% --% \filbreak%% keeps underfull box messages off when table breaks over pages. --% Maybe so, but it also creates really weird page breaks when the table --% breaks over pages Wouldn't \vfil be better? Wait until the problem --% manifests itself, so it can be fixed for real --karl. --\global\colcount=0\relax}} -+ % Ignoring space at the beginning and end avoids an occasional spurious -+ % blank line, when TeX decides to break the line at the space before the -+ % box from the multistrut, so the strut ends up on a line by itself. -+ % For example: -+ % @multitable @columnfractions .11 .89 -+ % @item @code{#} -+ % @tab Legal holiday which is valid in major parts of the whole country. -+ % Is automatically provided with highlighting sequences respectively marking -+ % characters. -+ \noindent\ignorespaces##\unskip\multistrut}\cr - } - - \def\setmultitablespacing{% test to see if user has set \multitablelinespace. - % If so, do nothing. If not, give it an appropriate dimension based on - % current baselineskip. - \ifdim\multitablelinespace=0pt -+\setbox0=\vbox{X}\global\multitablelinespace=\the\baselineskip -+\global\advance\multitablelinespace by-\ht0 - %% strut to put in table in case some entry doesn't have descenders, - %% to keep lines equally spaced - \let\multistrut = \strut --%% Test to see if parskip is larger than space between lines of --%% table. If not, do nothing. --%% If so, set to same dimension as multitablelinespace. - \else -+%% FIXME: what is \box0 supposed to be? - \gdef\multistrut{\vrule height\multitablelinespace depth\dp0 - width0pt\relax} \fi -+%% Test to see if parskip is larger than space between lines of -+%% table. If not, do nothing. -+%% If so, set to same dimension as multitablelinespace. - \ifdim\multitableparskip>\multitablelinespace - \global\multitableparskip=\multitablelinespace - \global\advance\multitableparskip-7pt %% to keep parskip somewhat smaller -@@ -2191,6 +2217,356 @@ - \fi} - - -+\message{conditionals,} -+% Prevent errors for section commands. -+% Used in @ignore and in failing conditionals. -+\def\ignoresections{% -+ \let\chapter=\relax -+ \let\unnumbered=\relax -+ \let\top=\relax -+ \let\unnumberedsec=\relax -+ \let\unnumberedsection=\relax -+ \let\unnumberedsubsec=\relax -+ \let\unnumberedsubsection=\relax -+ \let\unnumberedsubsubsec=\relax -+ \let\unnumberedsubsubsection=\relax -+ \let\section=\relax -+ \let\subsec=\relax -+ \let\subsubsec=\relax -+ \let\subsection=\relax -+ \let\subsubsection=\relax -+ \let\appendix=\relax -+ \let\appendixsec=\relax -+ \let\appendixsection=\relax -+ \let\appendixsubsec=\relax -+ \let\appendixsubsection=\relax -+ \let\appendixsubsubsec=\relax -+ \let\appendixsubsubsection=\relax -+ \let\contents=\relax -+ \let\smallbook=\relax -+ \let\titlepage=\relax -+} -+ -+% Used in nested conditionals, where we have to parse the Texinfo source -+% and so want to turn off most commands, in case they are used -+% incorrectly. -+% -+\def\ignoremorecommands{% -+ \let\defcodeindex = \relax -+ \let\defcv = \relax -+ \let\deffn = \relax -+ \let\deffnx = \relax -+ \let\defindex = \relax -+ \let\defivar = \relax -+ \let\defmac = \relax -+ \let\defmethod = \relax -+ \let\defop = \relax -+ \let\defopt = \relax -+ \let\defspec = \relax -+ \let\deftp = \relax -+ \let\deftypefn = \relax -+ \let\deftypefun = \relax -+ \let\deftypeivar = \relax -+ \let\deftypeop = \relax -+ \let\deftypevar = \relax -+ \let\deftypevr = \relax -+ \let\defun = \relax -+ \let\defvar = \relax -+ \let\defvr = \relax -+ \let\ref = \relax -+ \let\xref = \relax -+ \let\printindex = \relax -+ \let\pxref = \relax -+ \let\settitle = \relax -+ \let\setchapternewpage = \relax -+ \let\setchapterstyle = \relax -+ \let\everyheading = \relax -+ \let\evenheading = \relax -+ \let\oddheading = \relax -+ \let\everyfooting = \relax -+ \let\evenfooting = \relax -+ \let\oddfooting = \relax -+ \let\headings = \relax -+ \let\include = \relax -+ \let\lowersections = \relax -+ \let\down = \relax -+ \let\raisesections = \relax -+ \let\up = \relax -+ \let\set = \relax -+ \let\clear = \relax -+ \let\item = \relax -+} -+ -+% Ignore @ignore ... @end ignore. -+% -+\def\ignore{\doignore{ignore}} -+ -+% Ignore @ifinfo, @ifhtml, @ifnottex, @html, @menu, and @direntry text. -+% -+\def\ifinfo{\doignore{ifinfo}} -+\def\ifhtml{\doignore{ifhtml}} -+\def\ifnottex{\doignore{ifnottex}} -+\def\html{\doignore{html}} -+\def\menu{\doignore{menu}} -+\def\direntry{\doignore{direntry}} -+ -+% @dircategory CATEGORY -- specify a category of the dir file -+% which this file should belong to. Ignore this in TeX. -+\let\dircategory = \comment -+ -+% Ignore text until a line `@end #1'. -+% -+\def\doignore#1{\begingroup -+ % Don't complain about control sequences we have declared \outer. -+ \ignoresections -+ % -+ % Define a command to swallow text until we reach `@end #1'. -+ % This @ is a catcode 12 token (that is the normal catcode of @ in -+ % this texinfo.tex file). We change the catcode of @ below to match. -+ \long\def\doignoretext##1@end #1{\enddoignore}% -+ % -+ % Make sure that spaces turn into tokens that match what \doignoretext wants. -+ \catcode32 = 10 -+ % -+ % Ignore braces, too, so mismatched braces don't cause trouble. -+ \catcode`\{ = 9 -+ \catcode`\} = 9 -+ % -+ % We must not have @c interpreted as a control sequence. -+ \catcode`\@ = 12 -+ % -+ % Make the letter c a comment character so that the rest of the line -+ % will be ignored. This way, the document can have (for example) -+ % @c @end ifinfo -+ % and the @end ifinfo will be properly ignored. -+ % (We've just changed @ to catcode 12.) -+ \catcode`\c = 14 -+ % -+ % And now expand that command. -+ \doignoretext -+} -+ -+% What we do to finish off ignored text. -+% -+\def\enddoignore{\endgroup\ignorespaces}% -+ -+\newif\ifwarnedobs\warnedobsfalse -+\def\obstexwarn{% -+ \ifwarnedobs\relax\else -+ % We need to warn folks that they may have trouble with TeX 3.0. -+ % This uses \immediate\write16 rather than \message to get newlines. -+ \immediate\write16{} -+ \immediate\write16{WARNING: for users of Unix TeX 3.0!} -+ \immediate\write16{This manual trips a bug in TeX version 3.0 (tex hangs).} -+ \immediate\write16{If you are running another version of TeX, relax.} -+ \immediate\write16{If you are running Unix TeX 3.0, kill this TeX process.} -+ \immediate\write16{ Then upgrade your TeX installation if you can.} -+ \immediate\write16{ (See ftp://ftp.gnu.org/pub/gnu/TeX.README.)} -+ \immediate\write16{If you are stuck with version 3.0, run the} -+ \immediate\write16{ script ``tex3patch'' from the Texinfo distribution} -+ \immediate\write16{ to use a workaround.} -+ \immediate\write16{} -+ \global\warnedobstrue -+ \fi -+} -+ -+% **In TeX 3.0, setting text in \nullfont hangs tex. For a -+% workaround (which requires the file ``dummy.tfm'' to be installed), -+% uncomment the following line: -+%%%%%\font\nullfont=dummy\let\obstexwarn=\relax -+ -+% Ignore text, except that we keep track of conditional commands for -+% purposes of nesting, up to an `@end #1' command. -+% -+\def\nestedignore#1{% -+ \obstexwarn -+ % We must actually expand the ignored text to look for the @end -+ % command, so that nested ignore constructs work. Thus, we put the -+ % text into a \vbox and then do nothing with the result. To minimize -+ % the change of memory overflow, we follow the approach outlined on -+ % page 401 of the TeXbook: make the current font be a dummy font. -+ % -+ \setbox0 = \vbox\bgroup -+ % Don't complain about control sequences we have declared \outer. -+ \ignoresections -+ % -+ % Define `@end #1' to end the box, which will in turn undefine the -+ % @end command again. -+ \expandafter\def\csname E#1\endcsname{\egroup\ignorespaces}% -+ % -+ % We are going to be parsing Texinfo commands. Most cause no -+ % trouble when they are used incorrectly, but some commands do -+ % complicated argument parsing or otherwise get confused, so we -+ % undefine them. -+ % -+ % We can't do anything about stray @-signs, unfortunately; -+ % they'll produce `undefined control sequence' errors. -+ \ignoremorecommands -+ % -+ % Set the current font to be \nullfont, a TeX primitive, and define -+ % all the font commands to also use \nullfont. We don't use -+ % dummy.tfm, as suggested in the TeXbook, because not all sites -+ % might have that installed. Therefore, math mode will still -+ % produce output, but that should be an extremely small amount of -+ % stuff compared to the main input. -+ % -+ \nullfont -+ \let\tenrm=\nullfont \let\tenit=\nullfont \let\tensl=\nullfont -+ \let\tenbf=\nullfont \let\tentt=\nullfont \let\smallcaps=\nullfont -+ \let\tensf=\nullfont -+ % Similarly for index fonts (mostly for their use in smallexample). -+ \let\smallrm=\nullfont \let\smallit=\nullfont \let\smallsl=\nullfont -+ \let\smallbf=\nullfont \let\smalltt=\nullfont \let\smallsc=\nullfont -+ \let\smallsf=\nullfont -+ % -+ % Don't complain when characters are missing from the fonts. -+ \tracinglostchars = 0 -+ % -+ % Don't bother to do space factor calculations. -+ \frenchspacing -+ % -+ % Don't report underfull hboxes. -+ \hbadness = 10000 -+ % -+ % Do minimal line-breaking. -+ \pretolerance = 10000 -+ % -+ % Do not execute instructions in @tex -+ \def\tex{\doignore{tex}}% -+ % Do not execute macro definitions. -+ % `c' is a comment character, so the word `macro' will get cut off. -+ \def\macro{\doignore{ma}}% -+} -+ -+% @set VAR sets the variable VAR to an empty value. -+% @set VAR REST-OF-LINE sets VAR to the value REST-OF-LINE. -+% -+% Since we want to separate VAR from REST-OF-LINE (which might be -+% empty), we can't just use \parsearg; we have to insert a space of our -+% own to delimit the rest of the line, and then take it out again if we -+% didn't need it. Make sure the catcode of space is correct to avoid -+% losing inside @example, for instance. -+% -+\def\set{\begingroup\catcode` =10 -+ \catcode`\-=12 \catcode`\_=12 % Allow - and _ in VAR. -+ \parsearg\setxxx} -+\def\setxxx#1{\setyyy#1 \endsetyyy} -+\def\setyyy#1 #2\endsetyyy{% -+ \def\temp{#2}% -+ \ifx\temp\empty \global\expandafter\let\csname SET#1\endcsname = \empty -+ \else \setzzz{#1}#2\endsetzzz % Remove the trailing space \setxxx inserted. -+ \fi -+ \endgroup -+} -+% Can't use \xdef to pre-expand #2 and save some time, since \temp or -+% \next or other control sequences that we've defined might get us into -+% an infinite loop. Consider `@set foo @cite{bar}'. -+\def\setzzz#1#2 \endsetzzz{\expandafter\gdef\csname SET#1\endcsname{#2}} -+ -+% @clear VAR clears (i.e., unsets) the variable VAR. -+% -+\def\clear{\parsearg\clearxxx} -+\def\clearxxx#1{\global\expandafter\let\csname SET#1\endcsname=\relax} -+ -+% @value{foo} gets the text saved in variable foo. -+{ -+ \catcode`\_ = \active -+ % -+ % We might end up with active _ or - characters in the argument if -+ % we're called from @code, as @code{@value{foo-bar_}}. So \let any -+ % such active characters to their normal equivalents. -+ \gdef\value{\begingroup -+ \catcode`\-=12 \catcode`\_=12 -+ \indexbreaks \let_\normalunderscore -+ \valuexxx} -+} -+\def\valuexxx#1{\expandablevalue{#1}\endgroup} -+ -+% We have this subroutine so that we can handle at least some @value's -+% properly in indexes (we \let\value to this in \indexdummies). Ones -+% whose names contain - or _ still won't work, but we can't do anything -+% about that. The command has to be fully expandable, since the result -+% winds up in the index file. This means that if the variable's value -+% contains other Texinfo commands, it's almost certain it will fail -+% (although perhaps we could fix that with sufficient work to do a -+% one-level expansion on the result, instead of complete). -+% -+\def\expandablevalue#1{% -+ \expandafter\ifx\csname SET#1\endcsname\relax -+ {[No value for ``#1'']}% -+ \else -+ \csname SET#1\endcsname -+ \fi -+} -+ -+% @ifset VAR ... @end ifset reads the `...' iff VAR has been defined -+% with @set. -+% -+\def\ifset{\parsearg\ifsetxxx} -+\def\ifsetxxx #1{% -+ \expandafter\ifx\csname SET#1\endcsname\relax -+ \expandafter\ifsetfail -+ \else -+ \expandafter\ifsetsucceed -+ \fi -+} -+\def\ifsetsucceed{\conditionalsucceed{ifset}} -+\def\ifsetfail{\nestedignore{ifset}} -+\defineunmatchedend{ifset} -+ -+% @ifclear VAR ... @end ifclear reads the `...' iff VAR has never been -+% defined with @set, or has been undefined with @clear. -+% -+\def\ifclear{\parsearg\ifclearxxx} -+\def\ifclearxxx #1{% -+ \expandafter\ifx\csname SET#1\endcsname\relax -+ \expandafter\ifclearsucceed -+ \else -+ \expandafter\ifclearfail -+ \fi -+} -+\def\ifclearsucceed{\conditionalsucceed{ifclear}} -+\def\ifclearfail{\nestedignore{ifclear}} -+\defineunmatchedend{ifclear} -+ -+% @iftex, @ifnothtml, @ifnotinfo always succeed; we read the text -+% following, through the first @end iftex (etc.). Make `@end iftex' -+% (etc.) valid only after an @iftex. -+% -+\def\iftex{\conditionalsucceed{iftex}} -+\def\ifnothtml{\conditionalsucceed{ifnothtml}} -+\def\ifnotinfo{\conditionalsucceed{ifnotinfo}} -+\defineunmatchedend{iftex} -+\defineunmatchedend{ifnothtml} -+\defineunmatchedend{ifnotinfo} -+ -+% We can't just want to start a group at @iftex (for example) and end it -+% at @end iftex, since then @set commands inside the conditional have no -+% effect (they'd get reverted at the end of the group). So we must -+% define \Eiftex to redefine itself to be its previous value. (We can't -+% just define it to fail again with an ``unmatched end'' error, since -+% the @ifset might be nested.) -+% -+\def\conditionalsucceed#1{% -+ \edef\temp{% -+ % Remember the current value of \E#1. -+ \let\nece{prevE#1} = \nece{E#1}% -+ % -+ % At the `@end #1', redefine \E#1 to be its previous value. -+ \def\nece{E#1}{\let\nece{E#1} = \nece{prevE#1}}% -+ }% -+ \temp -+} -+ -+% We need to expand lots of \csname's, but we don't want to expand the -+% control sequences after we've constructed them. -+% -+\def\nece#1{\expandafter\noexpand\csname#1\endcsname} -+ -+% @defininfoenclose. -+\let\definfoenclose=\comment -+ -+ - \message{indexing,} - % Index generation facilities - -@@ -2206,12 +2582,14 @@ - % the file that accumulates this index. The file's extension is foo. - % The name of an index should be no more than 2 characters long - % for the sake of vms. -- --\def\newindex #1{ --\expandafter\newwrite \csname#1indfile\endcsname% Define number for output file --\openout \csname#1indfile\endcsname \jobname.#1 % Open the file --\expandafter\xdef\csname#1index\endcsname{% % Define \xxxindex --\noexpand\doindex {#1}} -+% -+\def\newindex#1{% -+ \iflinks -+ \expandafter\newwrite \csname#1indfile\endcsname -+ \openout \csname#1indfile\endcsname \jobname.#1 % Open the file -+ \fi -+ \expandafter\xdef\csname#1index\endcsname{% % Define @#1index -+ \noexpand\doindex{#1}} - } - - % @defindex foo == \newindex{foo} -@@ -2220,31 +2598,37 @@ - - % Define @defcodeindex, like @defindex except put all entries in @code. - --\def\newcodeindex #1{ --\expandafter\newwrite \csname#1indfile\endcsname% Define number for output file --\openout \csname#1indfile\endcsname \jobname.#1 % Open the file --\expandafter\xdef\csname#1index\endcsname{% % Define \xxxindex --\noexpand\docodeindex {#1}} -+\def\newcodeindex#1{% -+ \iflinks -+ \expandafter\newwrite \csname#1indfile\endcsname -+ \openout \csname#1indfile\endcsname \jobname.#1 -+ \fi -+ \expandafter\xdef\csname#1index\endcsname{% -+ \noexpand\docodeindex{#1}} - } - - \def\defcodeindex{\parsearg\newcodeindex} - - % @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. --\def\synindex #1 #2 {% --\expandafter\let\expandafter\synindexfoo\expandafter=\csname#2indfile\endcsname --\expandafter\let\csname#1indfile\endcsname=\synindexfoo --\expandafter\xdef\csname#1index\endcsname{% % Define \xxxindex --\noexpand\doindex {#2}}% -+% 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 - % inside @code. --\def\syncodeindex #1 #2 {% --\expandafter\let\expandafter\synindexfoo\expandafter=\csname#2indfile\endcsname --\expandafter\let\csname#1indfile\endcsname=\synindexfoo --\expandafter\xdef\csname#1index\endcsname{% % Define \xxxindex --\noexpand\docodeindex {#2}}% -+\def\syncodeindex#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\docodeindex{#2}}% - } - - % Define \doindex, the driver for all \fooindex macros. -@@ -2265,6 +2649,7 @@ - \def\singlecodeindexer #1{\doind{\indexname}{\code{#1}}} - - \def\indexdummies{% -+\def\ { }% - % Take care of the plain tex accent commands. - \def\"{\realbackslash "}% - \def\`{\realbackslash `}% -@@ -2294,8 +2679,11 @@ - % (Must be a way to avoid doing expansion at all, and thus not have to - % laboriously list every single command here.) - \def\@{@}% will be @@ when we switch to @ as escape char. --%\let\{ = \lbracecmd --%\let\} = \rbracecmd -+% 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 }% -@@ -2306,7 +2694,6 @@ - \def\gtr{\realbackslash gtr}% - \def\less{\realbackslash less}% - \def\hat{\realbackslash hat}% --%\def\char{\realbackslash char}% - \def\TeX{\realbackslash TeX}% - \def\dots{\realbackslash dots }% - \def\result{\realbackslash result}% -@@ -2318,6 +2705,11 @@ - \def\copyright{\realbackslash copyright}% - \def\tclose##1{\realbackslash tclose {##1}}% - \def\code##1{\realbackslash code {##1}}% -+\def\uref##1{\realbackslash uref {##1}}% -+\def\url##1{\realbackslash url {##1}}% -+\def\env##1{\realbackslash env {##1}}% -+\def\command##1{\realbackslash command {##1}}% -+\def\option##1{\realbackslash option {##1}}% - \def\dotless##1{\realbackslash dotless {##1}}% - \def\samp##1{\realbackslash samp {##1}}% - \def\,##1{\realbackslash ,{##1}}% -@@ -2333,8 +2725,16 @@ - \def\kbd##1{\realbackslash kbd {##1}}% - \def\dfn##1{\realbackslash dfn {##1}}% - \def\emph##1{\realbackslash emph {##1}}% --\def\value##1{\realbackslash value {##1}}% -+\def\acronym##1{\realbackslash acronym {##1}}% -+% -+% Handle some cases of @value -- where the variable name does not -+% contain - or _, and the value does not contain any -+% (non-fully-expandable) commands. -+\let\value = \expandablevalue -+% - \unsepspaces -+% Turn off macro expansion -+\turnoffmacros - } - - % If an index command is used in an @example environment, any spaces -@@ -2391,6 +2791,12 @@ - %\let\tt=\indexdummyfont - \let\tclose=\indexdummyfont - \let\code=\indexdummyfont -+\let\url=\indexdummyfont -+\let\uref=\indexdummyfont -+\let\env=\indexdummyfont -+\let\acronym=\indexdummyfont -+\let\command=\indexdummyfont -+\let\option=\indexdummyfont - \let\file=\indexdummyfont - \let\samp=\indexdummyfont - \let\kbd=\indexdummyfont -@@ -2406,14 +2812,24 @@ - % so we do not become unable to do a definition. - - {\catcode`\@=0 \catcode`\\=\other --@gdef@realbackslash{\}} -+ @gdef@realbackslash{\}} - - \let\indexbackslash=0 %overridden during \printindex. -+\let\SETmarginindex=\relax % put index entries in margin (undocumented)? -+ -+% For \ifx comparisons. -+\def\emptymacro{\empty} - --\let\SETmarginindex=\relax %initialize! --% workhorse for all \fooindexes --% #1 is name of index, #2 is stuff to put there --\def\doind #1#2{% -+% Most index entries go through here, but \dosubind is the general case. -+% -+\def\doind#1#2{\dosubind{#1}{#2}\empty} -+ -+% Workhorse for all \fooindexes. -+% #1 is name of index, #2 is stuff to put there, #3 is subentry -- -+% \empty if called from \doind, as we usually are. The main exception -+% is with defuns, which call us directly. -+% -+\def\dosubind#1#2#3{% - % Put the index entry in the margin if desired. - \ifx\SETmarginindex\relax\else - \insert\margin{\hbox{\vrule height8pt depth3pt width0pt #2}}% -@@ -2424,48 +2840,75 @@ - \indexdummies % Must do this here, since \bf, etc expand at this stage - \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 - % so it will be output as is; and it will print as backslash. - % -- % First process the index-string with all font commands turned off -- % to get the string to sort by. -- {\indexnofonts \xdef\indexsorttmp{#2}}% -+ \def\thirdarg{#3}% - % -- % Now produce the complete index entry, with both the sort key and the -- % original text, including any font commands. -+ % If third arg is present, precede it with space in sort key. -+ \ifx\thirdarg\emptymacro -+ \let\subentry = \empty -+ \else -+ \def\subentry{ #3}% -+ \fi -+ % -+ % First process the index entry with all font commands turned -+ % off to get the string to sort by. -+ {\indexnofonts \xdef\indexsorttmp{#2\subentry}}% -+ % -+ % Now the real index entry with the fonts. - \toks0 = {#2}% -+ % -+ % If third (subentry) arg is present, add it to the index -+ % string. And include a space. -+ \ifx\thirdarg\emptymacro \else -+ \toks0 = \expandafter{\the\toks0 \space #3}% -+ \fi -+ % -+ % Set up the complete index entry, with both the sort key -+ % and the original text, including any font commands. We write -+ % three arguments to \entry to the .?? file, texindex reduces to -+ % two when writing the .??s sorted result. - \edef\temp{% - \write\csname#1indfile\endcsname{% - \realbackslash entry{\indexsorttmp}{\folio}{\the\toks0}}% - }% -- \temp -+ % -+ % If a skip is the last thing on the list now, preserve it -+ % by backing up by \lastskip, doing the \write, then inserting -+ % the skip again. Otherwise, the whatsit generated by the -+ % \write will make \lastskip zero. The result is that sequences -+ % like this: -+ % @end defun -+ % @tindex whatever -+ % @defun ... -+ % will have extra space inserted, because the \medbreak in the -+ % start of the @defun won't see the skip inserted by the @end of -+ % the previous defun. -+ % -+ % But don't do any of this if we're not in vertical mode. We -+ % don't want to do a \vskip and prematurely end a paragraph. -+ % -+ % Avoid page breaks due to these extra skips, too. -+ % -+ \iflinks -+ \ifvmode -+ \skip0 = \lastskip -+ \ifdim\lastskip = 0pt \else \nobreak\vskip-\lastskip \fi -+ \fi -+ % -+ \temp % do the write -+ % -+ % -+ \ifvmode \ifdim\skip0 = 0pt \else \nobreak\vskip\skip0 \fi \fi -+ \fi - }% - }% - \penalty\count255 - }% - } - --\def\dosubind #1#2#3{% --{\count10=\lastpenalty % --{\indexdummies % Must do this here, since \bf, etc expand at this stage --\escapechar=`\\% --{\let\folio=0% --\def\rawbackslashxx{\indexbackslash}% --% --% Now process the index-string once, with all font commands turned off, --% to get the string to sort the index by. --{\indexnofonts --\xdef\temp1{#2 #3}% --}% --% Now produce the complete index entry. We process the index-string again, --% this time with font commands expanded, to get what to print in the index. --\edef\temp{% --\write \csname#1indfile\endcsname{% --\realbackslash entry {\temp1}{\folio}{#2}{#3}}}% --\temp }% --}\penalty\count10}} -- - % The index entry written in the file actually looks like - % \entry {sortstring}{page}{topic} - % or -@@ -2505,18 +2948,23 @@ - \def\doprintindex#1{\begingroup - \dobreak \chapheadingskip{10000}% - % -- \indexfonts \rm -+ \smallfonts \rm - \tolerance = 9500 - \indexbreaks - % - % 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 - \ifeof 1 - % \enddoublecolumns gets confused if there is no text in the index, - % and it loses the chapter title and the aux file entries for the - % index. The easiest way to prevent this problem is to make sure - % there is some text. -- (Index is nonexistent) -+ \putwordIndexNonexistent - \else - % - % If the index file exists but is empty, then \openin leaves \ifeof -@@ -2524,14 +2972,13 @@ - % it can discover if there is anything in it. - \read 1 to \temp - \ifeof 1 -- (Index is empty) -+ \putwordIndexIsEmpty - \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 -- \catcode`\@ = 11 - \escapechar = `\\ - \begindoublecolumns - \input \jobname.#1s -@@ -2544,21 +2991,35 @@ - % These macros are used by the sorted index file itself. - % Change them to control the appearance of the index. - --% Same as \bigskipamount except no shrink. --% \balancecolumns gets confused if there is any shrink. --\newskip\initialskipamount \initialskipamount 12pt plus4pt -- --\def\initial #1{% --{\let\tentt=\sectt \let\tt=\sectt \let\sf=\sectt --\ifdim\lastskip<\initialskipamount --\removelastskip \penalty-200 \vskip \initialskipamount\fi --\line{\secbf#1\hfill}\kern 2pt\penalty10000}} -+\def\initial#1{{% -+ % Some minor font changes for the special characters. -+ \let\tentt=\sectt \let\tt=\sectt \let\sf=\sectt -+ % -+ % Remove any glue we may have, we'll be inserting our own. -+ \removelastskip -+ % -+ % We like breaks before the index initials, so insert a bonus. -+ \penalty -300 -+ % -+ % Typeset the initial. Making this add up to a whole number of -+ % baselineskips increases the chance of the dots lining up from column -+ % to column. It still won't often be perfect, because of the stretch -+ % we need before each entry, but it's better. -+ % -+ % No shrink because it confuses \balancecolumns. -+ \vskip 1.67\baselineskip plus .5\baselineskip -+ \leftline{\secbf #1}% -+ \vskip .33\baselineskip plus .1\baselineskip -+ % -+ % Do our best not to break after the initial. -+ \nobreak -+}} - - % This typesets a paragraph consisting of #1, dot leaders, and then #2 - % flush to the right margin. It is used for index and table of contents - % entries. The paragraph is indented by \leftskip. - % --\def\entry #1#2{\begingroup -+\def\entry#1#2{\begingroup - % - % Start a new paragraph if necessary, so our assignments below can't - % affect previous text. -@@ -2581,12 +3042,15 @@ - % - % \hangafter is reset to 1 (which is the value we want) at the start - % of each paragraph, so we need not do anything with that. -- \hangindent=2em -+ \hangindent = 2em - % - % When the entry text needs to be broken, just fill out the first line - % with blank space. - \rightskip = 0pt plus1fil - % -+ % A bit of stretch before each entry for the benefit of balancing columns. -+ \vskip 0pt plus1pt -+ % - % Start a ``paragraph'' for the index entry so the line breaking - % parameters we've set above will have an effect. - \noindent -@@ -2611,7 +3075,11 @@ - % The `\ ' here is removed by the implicit \unskip that TeX does as - % part of (the primitive) \par. Without it, a spurious underfull - % \hbox ensues. -- \ #2% The page number ends the paragraph. -+ \ifpdf -+ \pdfgettoks#2.\ \the\toksA % The page number ends the paragraph. -+ \else -+ \ #2% The page number ends the paragraph. -+ \fi - \fi% - \par - \endgroup} -@@ -2640,24 +3108,26 @@ - - \def\begindoublecolumns{\begingroup % ended by \enddoublecolumns - % Grab any single-column material above us. -- \output = {\global\setbox\partialpage = \vbox{% -- % -+ \output = {% -+ % - % 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 -+ % that case we just ship out what is in \partialpage with the normal -+ % output routine. Generally, \partialpage will be empty when this -+ % runs and this will be a no-op. See the indexspread.tex test case. -+ \ifvoid\partialpage \else -+ \onepageout{\pagecontents\partialpage}% -+ \fi - % -- % Unvbox the main output page. -- \unvbox255 -- \kern-\topskip \kern\baselineskip -- }}% -- \eject -+ \global\setbox\partialpage = \vbox{% -+ % Unvbox the main output page. -+ \unvbox\PAGE -+ \kern-\topskip \kern\baselineskip -+ }% -+ }% -+ \eject % run that output routine to set \partialpage - % - % Use the double-column output routine for subsequent pages. - \output = {\doublecolumnout}% -@@ -2685,14 +3155,21 @@ - % - % Double the \vsize as well. (We don't need a separate register here, - % since nobody clobbers \vsize.) -+ \advance\vsize by -\ht\partialpage - \vsize = 2\vsize - } -+ -+% The double-column output routine for all double-column pages except -+% the last. -+% - \def\doublecolumnout{% - \splittopskip=\topskip \splitmaxdepth=\maxdepth - % Get the available space for the double columns -- the normal - % (undoubled) page height minus any material left over from the - % previous page. -- \dimen@=\pageheight \advance\dimen@ by-\ht\partialpage -+ \dimen@ = \vsize -+ \divide\dimen@ by 2 -+ % - % box0 will be the left-hand column, box2 the right. - \setbox0=\vsplit255 to\dimen@ \setbox2=\vsplit255 to\dimen@ - \onepageout\pagesofar -@@ -2701,42 +3178,67 @@ - } - \def\pagesofar{% - % 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, in box0 and box2. - \unvbox\partialpage -+ % - \hsize = \doublecolumnhsize -- \wd0=\hsize \wd2=\hsize \hbox to\pagewidth{\box0\hfil\box2}% -+ \wd0=\hsize \wd2=\hsize -+ \hbox to\pagewidth{\box0\hfil\box2}% - } - \def\enddoublecolumns{% -- \output = {\balancecolumns}\eject % split what we have -+ \output = {% -+ % Split the last of the double-column material. Leave it on the -+ % current page, no automatic page break. -+ \balancecolumns -+ % -+ % If we end up splitting too much material for the current page, -+ % though, there will be another page break right after this \output -+ % invocation ends. Having called \balancecolumns once, we do not -+ % want to call it again. Therefore, reset \output to its normal -+ % definition right away. (We hope \balancecolumns will never be -+ % called on to balance too much material, but if it is, this makes -+ % the output somewhat more palatable.) -+ \global\output = {\onepageout{\pagecontents\PAGE}}% -+ }% -+ \eject - \endgroup % started in \begindoublecolumns - % -- % Back to normal single-column typesetting, but take account of the -- % fact that we just accumulated some stuff on the output page. -+ % \pagegoal was set to the doubled \vsize above, since we restarted -+ % the current page. We're now back to normal single-column -+ % typesetting, so reset \pagegoal to the normal \vsize (after the -+ % \endgroup where \vsize got restored). - \pagegoal = \vsize - } - \def\balancecolumns{% - % Called at the end of the double column material. -- \setbox0 = \vbox{\unvbox255}% -+ \setbox0 = \vbox{\unvbox255}% like \box255 but more efficient, see p.120. - \dimen@ = \ht0 - \advance\dimen@ by \topskip - \advance\dimen@ by-\baselineskip -- \divide\dimen@ by 2 -+ \divide\dimen@ by 2 % target to split to -+ %debug\message{final 2-column material height=\the\ht0, target=\the\dimen@.}% - \splittopskip = \topskip - % Loop until we get a decent breakpoint. -- {\vbadness=10000 \loop -- \global\setbox3=\copy0 -- \global\setbox1=\vsplit3 to\dimen@ -- \ifdim\ht3>\dimen@ \global\advance\dimen@ by1pt -- \repeat}% -+ {% -+ \vbadness = 10000 -+ \loop -+ \global\setbox3 = \copy0 -+ \global\setbox1 = \vsplit3 to \dimen@ -+ \ifdim\ht3>\dimen@ -+ \global\advance\dimen@ by 1pt -+ \repeat -+ }% -+ %debug\message{split to \the\dimen@, column heights: \the\ht1, \the\ht3.}% - \setbox0=\vbox to\dimen@{\unvbox1}% - \setbox2=\vbox to\dimen@{\unvbox3}% -+ % - \pagesofar - } - \catcode`\@ = \other - - - \message{sectioning,} --% Define chapters, sections, etc. -+% Chapters, sections, etc. - - \newcount\chapno - \newcount\secno \secno=0 -@@ -2745,58 +3247,48 @@ - - % This counter is funny since it counts through charcodes of letters A, B, ... - \newcount\appendixno \appendixno = `\@ --\def\appendixletter{\char\the\appendixno} -- --\newwrite\contentsfile --% This is called from \setfilename. --\def\opencontents{\openout\contentsfile = \jobname.toc } -+% \def\appendixletter{\char\the\appendixno} -+% We do the following for the sake of pdftex, which needs the actual -+% letter in the expansion, not just typeset. -+\def\appendixletter{% -+ \ifnum\appendixno=`A A% -+ \else\ifnum\appendixno=`B B% -+ \else\ifnum\appendixno=`C C% -+ \else\ifnum\appendixno=`D D% -+ \else\ifnum\appendixno=`E E% -+ \else\ifnum\appendixno=`F F% -+ \else\ifnum\appendixno=`G G% -+ \else\ifnum\appendixno=`H H% -+ \else\ifnum\appendixno=`I I% -+ \else\ifnum\appendixno=`J J% -+ \else\ifnum\appendixno=`K K% -+ \else\ifnum\appendixno=`L L% -+ \else\ifnum\appendixno=`M M% -+ \else\ifnum\appendixno=`N N% -+ \else\ifnum\appendixno=`O O% -+ \else\ifnum\appendixno=`P P% -+ \else\ifnum\appendixno=`Q Q% -+ \else\ifnum\appendixno=`R R% -+ \else\ifnum\appendixno=`S S% -+ \else\ifnum\appendixno=`T T% -+ \else\ifnum\appendixno=`U U% -+ \else\ifnum\appendixno=`V V% -+ \else\ifnum\appendixno=`W W% -+ \else\ifnum\appendixno=`X X% -+ \else\ifnum\appendixno=`Y Y% -+ \else\ifnum\appendixno=`Z Z% -+ % The \the is necessary, despite appearances, because \appendixletter is -+ % expanded while writing the .toc file. \char\appendixno is not -+ % expandable, thus it is written literally, thus all appendixes come out -+ % with the same letter (or @) in the toc without it. -+ \else\char\the\appendixno -+ \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi -+ \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi} - - % Each @chapter defines this as the name of the chapter. --% page headings and footings can use it. @section does likewise -- --\def\thischapter{} \def\thissection{} --\def\seccheck#1{\ifnum \pageno<0 -- \errmessage{@#1 not allowed after generating table of contents}% --\fi} -- --\def\chapternofonts{% -- \let\rawbackslash=\relax -- \let\frenchspacing=\relax -- \def\result{\realbackslash result}% -- \def\equiv{\realbackslash equiv}% -- \def\expansion{\realbackslash expansion}% -- \def\print{\realbackslash print}% -- \def\TeX{\realbackslash TeX}% -- \def\dots{\realbackslash dots}% -- \def\result{\realbackslash result}% -- \def\equiv{\realbackslash equiv}% -- \def\expansion{\realbackslash expansion}% -- \def\print{\realbackslash print}% -- \def\error{\realbackslash error}% -- \def\point{\realbackslash point}% -- \def\copyright{\realbackslash copyright}% -- \def\tt{\realbackslash tt}% -- \def\bf{\realbackslash bf}% -- \def\w{\realbackslash w}% -- \def\less{\realbackslash less}% -- \def\gtr{\realbackslash gtr}% -- \def\hat{\realbackslash hat}% -- \def\char{\realbackslash char}% -- \def\tclose##1{\realbackslash tclose{##1}}% -- \def\code##1{\realbackslash code{##1}}% -- \def\samp##1{\realbackslash samp{##1}}% -- \def\r##1{\realbackslash r{##1}}% -- \def\b##1{\realbackslash b{##1}}% -- \def\key##1{\realbackslash key{##1}}% -- \def\file##1{\realbackslash file{##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}}% --} -+% page headings and footings can use it. @section does likewise. -+\def\thischapter{} -+\def\thissection{} - - \newcount\absseclevel % used to calculate proper heading level - \newcount\secbase\secbase=0 % @raise/lowersections modify this count -@@ -2868,59 +3360,59 @@ - \fi - } - -- -+% @chapter, @appendix, @unnumbered. - \def\thischaptername{No Chapter Title} - \outer\def\chapter{\parsearg\chapteryyy} - \def\chapteryyy #1{\numhead0{#1}} % normally numhead0 calls chapterzzz --\def\chapterzzz #1{\seccheck{chapter}% -+\def\chapterzzz #1{% - \secno=0 \subsecno=0 \subsubsecno=0 --\global\advance \chapno by 1 \message{\putwordChapter \the\chapno}% -+\global\advance \chapno by 1 \message{\putwordChapter\space \the\chapno}% - \chapmacro {#1}{\the\chapno}% - \gdef\thissection{#1}% - \gdef\thischaptername{#1}% - % We don't substitute the actual chapter name into \thischapter - % because we don't want its macros evaluated now. - \xdef\thischapter{\putwordChapter{} \the\chapno: \noexpand\thischaptername}% --{\chapternofonts% - \toks0 = {#1}% --\edef\temp{{\realbackslash chapentry{\the\toks0}{\the\chapno}{\noexpand\folio}}}% --\escapechar=`\\% --\write \contentsfile \temp % --\donoderef % -+\edef\temp{\noexpand\writetocentry{\realbackslash chapentry{\the\toks0}% -+ {\the\chapno}}}% -+\temp -+\donoderef - \global\let\section = \numberedsec - \global\let\subsection = \numberedsubsec - \global\let\subsubsection = \numberedsubsubsec --}} -+} - - \outer\def\appendix{\parsearg\appendixyyy} - \def\appendixyyy #1{\apphead0{#1}} % normally apphead0 calls appendixzzz --\def\appendixzzz #1{\seccheck{appendix}% -+\def\appendixzzz #1{% - \secno=0 \subsecno=0 \subsubsecno=0 --\global\advance \appendixno by 1 \message{Appendix \appendixletter}% -+\global\advance \appendixno by 1 -+\message{\putwordAppendix\space \appendixletter}% - \chapmacro {#1}{\putwordAppendix{} \appendixletter}% - \gdef\thissection{#1}% - \gdef\thischaptername{#1}% - \xdef\thischapter{\putwordAppendix{} \appendixletter: \noexpand\thischaptername}% --{\chapternofonts% - \toks0 = {#1}% --\edef\temp{{\realbackslash chapentry{\the\toks0}% -- {\putwordAppendix{} \appendixletter}{\noexpand\folio}}}% --\escapechar=`\\% --\write \contentsfile \temp % --\appendixnoderef % -+\edef\temp{\noexpand\writetocentry{\realbackslash chapentry{\the\toks0}% -+ {\putwordAppendix{} \appendixletter}}}% -+\temp -+\appendixnoderef - \global\let\section = \appendixsec - \global\let\subsection = \appendixsubsec - \global\let\subsubsection = \appendixsubsubsec --}} -+} - - % @centerchap is like @unnumbered, but the heading is centered. - \outer\def\centerchap{\parsearg\centerchapyyy} - \def\centerchapyyy #1{{\let\unnumbchapmacro=\centerchapmacro \unnumberedyyy{#1}}} - -+% @top is like @unnumbered. - \outer\def\top{\parsearg\unnumberedyyy} -+ - \outer\def\unnumbered{\parsearg\unnumberedyyy} - \def\unnumberedyyy #1{\unnmhead0{#1}} % normally unnmhead0 calls unnumberedzzz --\def\unnumberedzzz #1{\seccheck{unnumbered}% -+\def\unnumberedzzz #1{% - \secno=0 \subsecno=0 \subsubsecno=0 - % - % This used to be simply \message{#1}, but TeX fully expands the -@@ -2932,155 +3424,139 @@ - % Anyway, we don't want the fully-expanded definition of @cite to appear - % as a result of the \message, we just want `@cite' itself. We use - % \the<toks register> to achieve this: TeX expands \the<toks> only once, --% simply yielding the contents of the <toks register>. -+% simply yielding the contents of <toks register>. (We also do this for -+% the toc entries.) - \toks0 = {#1}\message{(\the\toks0)}% - % - \unnumbchapmacro {#1}% - \gdef\thischapter{#1}\gdef\thissection{#1}% --{\chapternofonts% - \toks0 = {#1}% --\edef\temp{{\realbackslash unnumbchapentry{\the\toks0}{\noexpand\folio}}}% --\escapechar=`\\% --\write \contentsfile \temp % --\unnumbnoderef % -+\edef\temp{\noexpand\writetocentry{\realbackslash unnumbchapentry{\the\toks0}}}% -+\temp -+\unnumbnoderef - \global\let\section = \unnumberedsec - \global\let\subsection = \unnumberedsubsec - \global\let\subsubsection = \unnumberedsubsubsec --}} -+} - -+% Sections. - \outer\def\numberedsec{\parsearg\secyyy} - \def\secyyy #1{\numhead1{#1}} % normally calls seczzz --\def\seczzz #1{\seccheck{section}% -+\def\seczzz #1{% - \subsecno=0 \subsubsecno=0 \global\advance \secno by 1 % - \gdef\thissection{#1}\secheading {#1}{\the\chapno}{\the\secno}% --{\chapternofonts% - \toks0 = {#1}% --\edef\temp{{\realbackslash secentry % --{\the\toks0}{\the\chapno}{\the\secno}{\noexpand\folio}}}% --\escapechar=`\\% --\write \contentsfile \temp % --\donoderef % --\penalty 10000 % --}} -+\edef\temp{\noexpand\writetocentry{\realbackslash secentry{\the\toks0}% -+ {\the\chapno}{\the\secno}}}% -+\temp -+\donoderef -+\nobreak -+} - - \outer\def\appendixsection{\parsearg\appendixsecyyy} - \outer\def\appendixsec{\parsearg\appendixsecyyy} - \def\appendixsecyyy #1{\apphead1{#1}} % normally calls appendixsectionzzz --\def\appendixsectionzzz #1{\seccheck{appendixsection}% -+\def\appendixsectionzzz #1{% - \subsecno=0 \subsubsecno=0 \global\advance \secno by 1 % - \gdef\thissection{#1}\secheading {#1}{\appendixletter}{\the\secno}% --{\chapternofonts% - \toks0 = {#1}% --\edef\temp{{\realbackslash secentry % --{\the\toks0}{\appendixletter}{\the\secno}{\noexpand\folio}}}% --\escapechar=`\\% --\write \contentsfile \temp % --\appendixnoderef % --\penalty 10000 % --}} -+\edef\temp{\noexpand\writetocentry{\realbackslash secentry{\the\toks0}% -+ {\appendixletter}{\the\secno}}}% -+\temp -+\appendixnoderef -+\nobreak -+} - - \outer\def\unnumberedsec{\parsearg\unnumberedsecyyy} - \def\unnumberedsecyyy #1{\unnmhead1{#1}} % normally calls unnumberedseczzz --\def\unnumberedseczzz #1{\seccheck{unnumberedsec}% -+\def\unnumberedseczzz #1{% - \plainsecheading {#1}\gdef\thissection{#1}% --{\chapternofonts% - \toks0 = {#1}% --\edef\temp{{\realbackslash unnumbsecentry{\the\toks0}{\noexpand\folio}}}% --\escapechar=`\\% --\write \contentsfile \temp % --\unnumbnoderef % --\penalty 10000 % --}} -+\edef\temp{\noexpand\writetocentry{\realbackslash unnumbsecentry{\the\toks0}}}% -+\temp -+\unnumbnoderef -+\nobreak -+} - -+% Subsections. - \outer\def\numberedsubsec{\parsearg\numberedsubsecyyy} - \def\numberedsubsecyyy #1{\numhead2{#1}} % normally calls numberedsubseczzz --\def\numberedsubseczzz #1{\seccheck{subsection}% -+\def\numberedsubseczzz #1{% - \gdef\thissection{#1}\subsubsecno=0 \global\advance \subsecno by 1 % - \subsecheading {#1}{\the\chapno}{\the\secno}{\the\subsecno}% --{\chapternofonts% - \toks0 = {#1}% --\edef\temp{{\realbackslash subsecentry % --{\the\toks0}{\the\chapno}{\the\secno}{\the\subsecno}{\noexpand\folio}}}% --\escapechar=`\\% --\write \contentsfile \temp % --\donoderef % --\penalty 10000 % --}} -+\edef\temp{\noexpand\writetocentry{\realbackslash subsecentry{\the\toks0}% -+ {\the\chapno}{\the\secno}{\the\subsecno}}}% -+\temp -+\donoderef -+\nobreak -+} - - \outer\def\appendixsubsec{\parsearg\appendixsubsecyyy} - \def\appendixsubsecyyy #1{\apphead2{#1}} % normally calls appendixsubseczzz --\def\appendixsubseczzz #1{\seccheck{appendixsubsec}% -+\def\appendixsubseczzz #1{% - \gdef\thissection{#1}\subsubsecno=0 \global\advance \subsecno by 1 % - \subsecheading {#1}{\appendixletter}{\the\secno}{\the\subsecno}% --{\chapternofonts% - \toks0 = {#1}% --\edef\temp{{\realbackslash subsecentry % --{\the\toks0}{\appendixletter}{\the\secno}{\the\subsecno}{\noexpand\folio}}}% --\escapechar=`\\% --\write \contentsfile \temp % --\appendixnoderef % --\penalty 10000 % --}} -+\edef\temp{\noexpand\writetocentry{\realbackslash subsecentry{\the\toks0}% -+ {\appendixletter}{\the\secno}{\the\subsecno}}}% -+\temp -+\appendixnoderef -+\nobreak -+} - - \outer\def\unnumberedsubsec{\parsearg\unnumberedsubsecyyy} - \def\unnumberedsubsecyyy #1{\unnmhead2{#1}} %normally calls unnumberedsubseczzz --\def\unnumberedsubseczzz #1{\seccheck{unnumberedsubsec}% -+\def\unnumberedsubseczzz #1{% - \plainsubsecheading {#1}\gdef\thissection{#1}% --{\chapternofonts% - \toks0 = {#1}% --\edef\temp{{\realbackslash unnumbsubsecentry{\the\toks0}{\noexpand\folio}}}% --\escapechar=`\\% --\write \contentsfile \temp % --\unnumbnoderef % --\penalty 10000 % --}} -+\edef\temp{\noexpand\writetocentry{\realbackslash unnumbsubsecentry% -+ {\the\toks0}}}% -+\temp -+\unnumbnoderef -+\nobreak -+} - -+% Subsubsections. - \outer\def\numberedsubsubsec{\parsearg\numberedsubsubsecyyy} - \def\numberedsubsubsecyyy #1{\numhead3{#1}} % normally numberedsubsubseczzz --\def\numberedsubsubseczzz #1{\seccheck{subsubsection}% -+\def\numberedsubsubseczzz #1{% - \gdef\thissection{#1}\global\advance \subsubsecno by 1 % - \subsubsecheading {#1} - {\the\chapno}{\the\secno}{\the\subsecno}{\the\subsubsecno}% --{\chapternofonts% - \toks0 = {#1}% --\edef\temp{{\realbackslash subsubsecentry{\the\toks0} -- {\the\chapno}{\the\secno}{\the\subsecno}{\the\subsubsecno} -- {\noexpand\folio}}}% --\escapechar=`\\% --\write \contentsfile \temp % --\donoderef % --\penalty 10000 % --}} -+\edef\temp{\noexpand\writetocentry{\realbackslash subsubsecentry{\the\toks0}% -+ {\the\chapno}{\the\secno}{\the\subsecno}{\the\subsubsecno}}}% -+\temp -+\donoderef -+\nobreak -+} - - \outer\def\appendixsubsubsec{\parsearg\appendixsubsubsecyyy} - \def\appendixsubsubsecyyy #1{\apphead3{#1}} % normally appendixsubsubseczzz --\def\appendixsubsubseczzz #1{\seccheck{appendixsubsubsec}% -+\def\appendixsubsubseczzz #1{% - \gdef\thissection{#1}\global\advance \subsubsecno by 1 % - \subsubsecheading {#1} - {\appendixletter}{\the\secno}{\the\subsecno}{\the\subsubsecno}% --{\chapternofonts% - \toks0 = {#1}% --\edef\temp{{\realbackslash subsubsecentry{\the\toks0}% -- {\appendixletter} -- {\the\secno}{\the\subsecno}{\the\subsubsecno}{\noexpand\folio}}}% --\escapechar=`\\% --\write \contentsfile \temp % --\appendixnoderef % --\penalty 10000 % --}} -+\edef\temp{\noexpand\writetocentry{\realbackslash subsubsecentry{\the\toks0}% -+ {\appendixletter}{\the\secno}{\the\subsecno}{\the\subsubsecno}}}% -+\temp -+\appendixnoderef -+\nobreak -+} - - \outer\def\unnumberedsubsubsec{\parsearg\unnumberedsubsubsecyyy} - \def\unnumberedsubsubsecyyy #1{\unnmhead3{#1}} %normally unnumberedsubsubseczzz --\def\unnumberedsubsubseczzz #1{\seccheck{unnumberedsubsubsec}% -+\def\unnumberedsubsubseczzz #1{% - \plainsubsubsecheading {#1}\gdef\thissection{#1}% --{\chapternofonts% - \toks0 = {#1}% --\edef\temp{{\realbackslash unnumbsubsubsecentry{\the\toks0}{\noexpand\folio}}}% --\escapechar=`\\% --\write \contentsfile \temp % --\unnumbnoderef % --\penalty 10000 % --}} -+\edef\temp{\noexpand\writetocentry{\realbackslash unnumbsubsubsecentry% -+ {\the\toks0}}}% -+\temp -+\unnumbnoderef -+\nobreak -+} - - % These are variants which are not "outer", so they can appear in @ifinfo. - % Actually, they should now be obsolete; ordinary section commands should work. -@@ -3109,8 +3585,7 @@ - - % Define @majorheading, @heading and @subheading - --% NOTE on use of \vbox for chapter headings, section headings, and --% such: -+% NOTE on use of \vbox for chapter headings, section headings, and such: - % 1) We use \vbox rather than the earlier \line to permit - % overlong headings to fold. - % 2) \hyphenpenalty is set to 10000 because hyphenation in a -@@ -3157,12 +3632,12 @@ - - \def\setchapternewpage #1 {\csname CHAPPAG#1\endcsname} - --\def\CHAPPAGoff{ -+\def\CHAPPAGoff{% - \global\let\contentsalignmacro = \chappager - \global\let\pchapsepmacro=\chapbreak - \global\let\pagealignmacro=\chappager} - --\def\CHAPPAGon{ -+\def\CHAPPAGon{% - \global\let\contentsalignmacro = \chappager - \global\let\pchapsepmacro=\chappager - \global\let\pagealignmacro=\chappager -@@ -3216,7 +3691,7 @@ - \def\unnchfopen #1{% - \chapoddpage {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000 - \parindent=0pt\raggedright -- \rm #1\hfill}}\bigskip \par\penalty 10000 % -+ \rm #1\hfill}}\bigskip \par\nobreak - } - - \def\chfopen #1#2{\chapoddpage {\chapfonts -@@ -3227,7 +3702,7 @@ - \def\centerchfopen #1{% - \chapoddpage {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000 - \parindent=0pt -- \hfill {\rm #1}\hfill}}\bigskip \par\penalty 10000 % -+ \hfill {\rm #1}\hfill}}\bigskip \par\nobreak - } - - \def\CHAPFopen{ -@@ -3280,24 +3755,45 @@ - } - - --\message{toc printing,} --% Finish up the main text and prepare to read what we've written --% to \contentsfile. -+\message{toc,} -+% Table of contents. -+\newwrite\tocfile -+ -+% Write an entry to the toc file, opening it if necessary. -+% Called from @chapter, etc. We supply {\folio} at the end of the -+% argument, which will end up as the last argument to the \...entry macro. -+% -+% We open the .toc file here instead of at @setfilename or any other -+% given time so that @contents can be put in the document anywhere. -+% -+\newif\iftocfileopened -+\def\writetocentry#1{% -+ \iftocfileopened\else -+ \immediate\openout\tocfile = \jobname.toc -+ \global\tocfileopenedtrue -+ \fi -+ \iflinks \write\tocfile{#1{\folio}}\fi -+} - - \newskip\contentsrightmargin \contentsrightmargin=1in -+\newcount\savepageno -+\newcount\lastnegativepageno \lastnegativepageno = -1 -+ -+% Finish up the main text and prepare to read what we've written -+% to \tocfile. -+% - \def\startcontents#1{% - % If @setchapternewpage on, and @headings double, the contents should - % start on an odd page, unlike chapters. Thus, we maintain - % \contentsalignmacro in parallel with \pagealignmacro. - % From: Torbjorn Granlund <tege@matematik.su.se> - \contentsalignmacro -- \immediate\closeout \contentsfile -- \ifnum \pageno>0 -- \pageno = -1 % Request roman numbered pages. -- \fi -+ \immediate\closeout\tocfile -+ % - % Don't need to put `Contents' or `Short Contents' in the headline. - % It is abundantly clear what they are. - \unnumbchapmacro{#1}\def\thischapter{}% -+ \savepageno = \pageno - \begingroup % Set up to handle contents files properly. - \catcode`\\=0 \catcode`\{=1 \catcode`\}=2 \catcode`\@=11 - % We can't do this, because then an actual ^ in a section -@@ -3305,20 +3801,31 @@ - %\catcode`\^=7 % to see ^^e4 as \"a etc. juha@piuha.ydi.vtt.fi - \raggedbottom % Worry more about breakpoints than the bottom. - \advance\hsize by -\contentsrightmargin % Don't use the full line length. -+ % -+ % Roman numerals for page numbers. -+ \ifnum \pageno>0 \pageno = \lastnegativepageno \fi - } - - - % Normal (long) toc. --\outer\def\contents{% -- \startcontents{\putwordTableofContents}% -- \input \jobname.toc -+\def\contents{% -+ \startcontents{\putwordTOC}% -+ \openin 1 \jobname.toc -+ \ifeof 1 \else -+ \closein 1 -+ \input \jobname.toc -+ \fi -+ \vfill \eject -+ \contentsalignmacro % in case @setchapternewpage odd is in effect -+ \pdfmakeoutlines - \endgroup -- \vfill \eject -+ \lastnegativepageno = \pageno -+ \pageno = \savepageno - } - - % And just the chapters. --\outer\def\summarycontents{% -- \startcontents{\putwordShortContents}% -+\def\summarycontents{% -+ \startcontents{\putwordShortTOC}% - % - \let\chapentry = \shortchapentry - \let\unnumbchapentry = \shortunnumberedentry -@@ -3334,12 +3841,23 @@ - \def\unnumbsubsecentry ##1##2{} - \def\subsubsecentry ##1##2##3##4##5##6{} - \def\unnumbsubsubsecentry ##1##2{} -- \input \jobname.toc -+ \openin 1 \jobname.toc -+ \ifeof 1 \else -+ \closein 1 -+ \input \jobname.toc -+ \fi -+ \vfill \eject -+ \contentsalignmacro % in case @setchapternewpage odd is in effect - \endgroup -- \vfill \eject -+ \lastnegativepageno = \pageno -+ \pageno = \savepageno - } - \let\shortcontents = \summarycontents - -+\ifpdf -+ \pdfcatalog{/PageMode /UseOutlines}% -+\fi -+ - % These macros generate individual entries in the table of contents. - % The first argument is the chapter or section name. - % The last argument is the page number. -@@ -3350,7 +3868,7 @@ - - % See comments in \dochapentry re vbox and related settings - \def\shortchapentry#1#2#3{% -- \tocentry{\shortchaplabel{#2}\labelspace #1}{\doshortpageno{#3}}% -+ \tocentry{\shortchaplabel{#2}\labelspace #1}{\doshortpageno\bgroup#3\egroup}% - } - - % Typeset the label for a chapter or appendix for the short contents. -@@ -3358,10 +3876,14 @@ - % We could simplify the code here by writing out an \appendixentry - % command in the toc file for appendices, instead of using \chapentry - % for both, but it doesn't seem worth it. --\setbox0 = \hbox{\shortcontrm \putwordAppendix } --\newdimen\shortappendixwidth \shortappendixwidth = \wd0 -- -+% -+\newdimen\shortappendixwidth -+% - \def\shortchaplabel#1{% -+ % Compute width of word "Appendix", may change with language. -+ \setbox0 = \hbox{\shortcontrm \putwordAppendix}% -+ \shortappendixwidth = \wd0 -+ % - % We typeset #1 in a box of constant width, regardless of the text of - % #1, so the chapter titles will come out aligned. - \setbox0 = \hbox{#1}% -@@ -3376,7 +3898,7 @@ - } - - \def\unnumbchapentry#1#2{\dochapentry{#1}{#2}} --\def\shortunnumberedentry#1#2{\tocentry{#1}{\doshortpageno{#2}}} -+\def\shortunnumberedentry#1#2{\tocentry{#1}{\doshortpageno\bgroup#2\egroup}} - - % Sections. - \def\secentry#1#2#3#4{\dosecentry{#2.#3\labelspace#1}{#4}} -@@ -3403,35 +3925,36 @@ - \penalty-300 \vskip1\baselineskip plus.33\baselineskip minus.25\baselineskip - \begingroup - \chapentryfonts -- \tocentry{#1}{\dopageno{#2}}% -+ \tocentry{#1}{\dopageno\bgroup#2\egroup}% - \endgroup - \nobreak\vskip .25\baselineskip plus.1\baselineskip - } - - \def\dosecentry#1#2{\begingroup - \secentryfonts \leftskip=\tocindent -- \tocentry{#1}{\dopageno{#2}}% -+ \tocentry{#1}{\dopageno\bgroup#2\egroup}% - \endgroup} - - \def\dosubsecentry#1#2{\begingroup - \subsecentryfonts \leftskip=2\tocindent -- \tocentry{#1}{\dopageno{#2}}% -+ \tocentry{#1}{\dopageno\bgroup#2\egroup}% - \endgroup} - - \def\dosubsubsecentry#1#2{\begingroup - \subsubsecentryfonts \leftskip=3\tocindent -- \tocentry{#1}{\dopageno{#2}}% -+ \tocentry{#1}{\dopageno\bgroup#2\egroup}% - \endgroup} - - % Final typesetting of a toc entry; we use the same \entry macro as for - % the index entries, but we want to suppress hyphenation here. (We - % 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.) --% --% \turnoffactive is for the sake of @" used for umlauts. - \def\tocentry#1#2{\begingroup - \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} - - % Space between chapter (or whatever) number and the title. -@@ -3447,6 +3970,7 @@ - - - \message{environments,} -+% @foo ... @end foo. - - % Since these characters are used in examples, it should be an even number of - % \tt widths. Each \tt character is 1en, so two makes it 1em. -@@ -3497,30 +4021,36 @@ - % But \@ or @@ will get a plain tex @ character. - - \def\tex{\begingroup --\catcode `\\=0 \catcode `\{=1 \catcode `\}=2 --\catcode `\$=3 \catcode `\&=4 \catcode `\#=6 --\catcode `\^=7 \catcode `\_=8 \catcode `\~=13 \let~=\tie --\catcode `\%=14 --\catcode 43=12 % plus --\catcode`\"=12 --\catcode`\==12 --\catcode`\|=12 --\catcode`\<=12 --\catcode`\>=12 --\escapechar=`\\ --% --\let\,=\ptexcomma --\let\{=\ptexlbrace --\let\}=\ptexrbrace --\let\.=\ptexdot --\let\*=\ptexstar --\let\dots=\ptexdots --\def\endldots{\mathinner{\ldots\ldots\ldots\ldots}}% --\def\enddots{\relax\ifmmode\endldots\else$\mathsurround=0pt \endldots\,$\fi}% --\def\@{@}% --\let\bullet=\ptexbullet --\let\b=\ptexb \let\c=\ptexc \let\i=\ptexi \let\t=\ptext --% -+ \catcode `\\=0 \catcode `\{=1 \catcode `\}=2 -+ \catcode `\$=3 \catcode `\&=4 \catcode `\#=6 -+ \catcode `\^=7 \catcode `\_=8 \catcode `\~=13 \let~=\tie -+ \catcode `\%=14 -+ \catcode 43=12 % plus -+ \catcode`\"=12 -+ \catcode`\==12 -+ \catcode`\|=12 -+ \catcode`\<=12 -+ \catcode`\>=12 -+ \escapechar=`\\ -+ % -+ \let\b=\ptexb -+ \let\bullet=\ptexbullet -+ \let\c=\ptexc -+ \let\,=\ptexcomma -+ \let\.=\ptexdot -+ \let\dots=\ptexdots -+ \let\equiv=\ptexequiv -+ \let\!=\ptexexclam -+ \let\i=\ptexi -+ \let\{=\ptexlbrace -+ \let\+=\tabalign -+ \let\}=\ptexrbrace -+ \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} - - % Define @lisp ... @endlisp. -@@ -3565,8 +4095,8 @@ - % \nonarrowing is a flag. If "set", @lisp etc don't narrow margins. - \let\nonarrowing=\relax - --%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% --% \cartouche: draw rectangle w/rounded corners around argument -+% @cartouche ... @end cartouche: draw rectangle w/rounded corners around -+% environment contents. - \font\circle=lcircle10 - \newdimen\circthick - \newdimen\cartouter\newdimen\cartinner -@@ -3593,9 +4123,9 @@ - \cartinner=\hsize \advance\cartinner by-\lskip - \advance\cartinner by-\rskip - \cartouter=\hsize -- \advance\cartouter by 18pt % allow for 3pt kerns on either -+ \advance\cartouter by 18.4pt % allow for 3pt kerns on either - % side, and for 6pt waste from --% each corner char -+% each corner char, and rule thickness - \normbskip=\baselineskip \normpskip=\parskip \normlskip=\lineskip - % Flag to tell @lisp, etc., not to narrow margin. - \let\nonarrowing=\comment -@@ -3649,49 +4179,52 @@ - \fi - } - --% To ending an @example-like environment, we first end the paragraph --% (via \afterenvbreak's vertical glue), and then the group. That way we --% keep the zero \parskip that the environments set -- \parskip glue --% will be inserted at the beginning of the next paragraph in the --% document, after the environment. -+% Define the \E... control sequence only if we are inside the particular -+% environment, so the error checking in \end will work. - % --\def\nonfillfinish{\afterenvbreak\endgroup}% -+% To end an @example-like environment, we first end the paragraph (via -+% \afterenvbreak's vertical glue), and then the group. That way we keep -+% the zero \parskip that the environments set -- \parskip glue will be -+% inserted at the beginning of the next paragraph in the document, after -+% the environment. -+% -+\def\nonfillfinish{\afterenvbreak\endgroup} - -+% @lisp: indented, narrowed, typewriter font. - \def\lisp{\begingroup - \nonfillstart - \let\Elisp = \nonfillfinish - \tt -- % Make @kbd do something special, if requested. -- \let\kbdfont\kbdexamplefont -- \rawbackslash % have \ input char produce \ char from current font -- \gobble -+ \let\kbdfont = \kbdexamplefont % Allow @kbd to do something special. -+ \gobble % eat return - } - --% Define the \E... control sequence only if we are inside the --% environment, so the error checking in \end will work. --% --% We must call \lisp last in the definition, since it reads the --% return following the @example (or whatever) command. --% -+% @example: Same as @lisp. - \def\example{\begingroup \def\Eexample{\nonfillfinish\endgroup}\lisp} --\def\smallexample{\begingroup \def\Esmallexample{\nonfillfinish\endgroup}\lisp} --\def\smalllisp{\begingroup \def\Esmalllisp{\nonfillfinish\endgroup}\lisp} - --% @smallexample and @smalllisp. This is not used unless the @smallbook --% command is given. Originally contributed by Pavel@xerox. --% -+% @small... is usually equivalent to the non-small (@smallbook -+% redefines). We must call \example (or whatever) last in the -+% definition, since it reads the return following the @example (or -+% whatever) command. -+% -+% This actually allows (for example) @end display inside an -+% @smalldisplay. Too bad, but makeinfo will catch the error anyway. -+% -+\def\smalldisplay{\begingroup\def\Esmalldisplay{\nonfillfinish\endgroup}\display} -+\def\smallexample{\begingroup\def\Esmallexample{\nonfillfinish\endgroup}\lisp} -+\def\smallformat{\begingroup\def\Esmallformat{\nonfillfinish\endgroup}\format} -+\def\smalllisp{\begingroup\def\Esmalllisp{\nonfillfinish\endgroup}\lisp} -+ -+% Real @smallexample and @smalllisp (when @smallbook): use smaller fonts. -+% Originally contributed by Pavel@xerox. - \def\smalllispx{\begingroup -- \nonfillstart -- \let\Esmalllisp = \nonfillfinish -- \let\Esmallexample = \nonfillfinish -- % -- % Smaller fonts for small examples. -- \indexfonts \tt -- \rawbackslash % make \ output the \ character from the current font (tt) -- \gobble -+ \def\Esmalllisp{\nonfillfinish\endgroup}% -+ \def\Esmallexample{\nonfillfinish\endgroup}% -+ \smallfonts -+ \lisp - } - --% This is @display; same as @lisp except use roman font. -+% @display: same as @lisp except keep current font. - % - \def\display{\begingroup - \nonfillstart -@@ -3699,7 +4232,15 @@ - \gobble - } - --% This is @format; same as @display except don't narrow margins. -+% @smalldisplay (when @smallbook): @display plus smaller fonts. -+% -+\def\smalldisplayx{\begingroup -+ \def\Esmalldisplay{\nonfillfinish\endgroup}% -+ \smallfonts \rm -+ \display -+} -+ -+% @format: same as @display except don't narrow margins. - % - \def\format{\begingroup - \let\nonarrowing = t -@@ -3708,20 +4249,27 @@ - \gobble - } - --% @flushleft (same as @format) and @flushright. -+% @smallformat (when @smallbook): @format plus smaller fonts. - % --\def\flushleft{\begingroup -- \let\nonarrowing = t -- \nonfillstart -- \let\Eflushleft = \nonfillfinish -- \gobble -+\def\smallformatx{\begingroup -+ \def\Esmallformat{\nonfillfinish\endgroup}% -+ \smallfonts \rm -+ \format - } -+ -+% @flushleft (same as @format). -+% -+\def\flushleft{\begingroup \def\Eflushleft{\nonfillfinish\endgroup}\format} -+ -+% @flushright. -+% - \def\flushright{\begingroup - \let\nonarrowing = t - \nonfillstart - \let\Eflushright = \nonfillfinish - \advance\leftskip by 0pt plus 1fill -- \gobble} -+ \gobble -+} - - % @quotation does normal linebreaking (hence we can't use \nonfillstart) - % and narrows the margins. -@@ -3744,9 +4292,11 @@ - \fi - } - -+ - \message{defuns,} --% Define formatter for defuns --% First, allow user to change definition object font (\df) internally -+% @defun etc. -+ -+% Allow user to change definition object font (\df) internally - \def\setdeffont #1 {\csname DEF#1\endcsname} - - \newskip\defbodyindent \defbodyindent=.4in -@@ -3800,10 +4350,16 @@ - %% contained text. This is especially needed for [ and ] - \def\opnr{{\sf\char`\(}\global\advance\parencount by 1 } - \def\clnr{{\sf\char`\)}\global\advance\parencount by -1 } --\def\ampnr{\&} -+\let\ampnr = \& - \def\lbrb{{\bf\char`\[}} - \def\rbrb{{\bf\char`\]}} - -+% Active &'s sneak into the index arguments, so make sure it's defined. -+{ -+ \catcode`& = 13 -+ \global\let& = \ampnr -+} -+ - % First, defname, which formats the header line itself. - % #1 should be the function name. - % #2 should be the type of definition, such as "Function". -@@ -3813,20 +4369,18 @@ - % outside the @def... - \dimen2=\leftskip - \advance\dimen2 by -\defbodyindent --\dimen3=\rightskip --\advance\dimen3 by -\defbodyindent --\noindent % -+\noindent - \setbox0=\hbox{\hskip \deflastargmargin{\rm #2}\hskip \deftypemargin}% - \dimen0=\hsize \advance \dimen0 by -\wd0 % compute size for first line - \dimen1=\hsize \advance \dimen1 by -\defargsindent %size for continuations --\parshape 2 0in \dimen0 \defargsindent \dimen1 % -+\parshape 2 0in \dimen0 \defargsindent \dimen1 - % Now output arg 2 ("Function" or some such) - % ending at \deftypemargin from the right margin, - % but stuck inside a box of width 0 so it does not interfere with linebreaking - {% Adjust \hsize to exclude the ambient margins, - % so that \rightline will obey them. --\advance \hsize by -\dimen2 \advance \hsize by -\dimen3 --\rlap{\rightline{{\rm #2}\hskip \deftypemargin}}}% -+\advance \hsize by -\dimen2 -+\rlap{\rightline{{\rm #2}\hskip -1.25pc }}}% - % Make all lines underfull and no complaints: - \tolerance=10000 \hbadness=10000 - \advance\leftskip by -\defbodyindent -@@ -3847,23 +4401,62 @@ - \def#1{\endgraf\endgroup\medbreak}% - \def#2{\begingroup\obeylines\activeparens\spacesplit#3}% - \parindent=0in --\advance\leftskip by \defbodyindent \advance \rightskip by \defbodyindent -+\advance\leftskip by \defbodyindent - \exdentamount=\defbodyindent - \begingroup % - \catcode 61=\active % 61 is `=' - \obeylines\activeparens\spacesplit#3} - --\def\defmethparsebody #1#2#3#4 {\begingroup\inENV % -+% #1 is the \E... control sequence to end the definition (which we define). -+% #2 is the \...x control sequence for consecutive fns (which we define). -+% #3 is the control sequence to call to resume processing. -+% #4, delimited by the space, is the class name. -+% -+\def\defmethparsebody#1#2#3#4 {\begingroup\inENV % - \medbreak % - % Define the end token that this defining construct specifies - % so that it will exit this group. - \def#1{\endgraf\endgroup\medbreak}% - \def#2##1 {\begingroup\obeylines\activeparens\spacesplit{#3{##1}}}% - \parindent=0in --\advance\leftskip by \defbodyindent \advance \rightskip by \defbodyindent -+\advance\leftskip by \defbodyindent - \exdentamount=\defbodyindent - \begingroup\obeylines\activeparens\spacesplit{#3{#4}}} - -+% Used for @deftypemethod and @deftypeivar. -+% #1 is the \E... control sequence to end the definition (which we define). -+% #2 is the \...x control sequence for consecutive fns (which we define). -+% #3 is the control sequence to call to resume processing. -+% #4, delimited by a space, is the class name. -+% #5 is the method's return type. -+% -+\def\deftypemethparsebody#1#2#3#4 #5 {\begingroup\inENV -+ \medbreak -+ \def#1{\endgraf\endgroup\medbreak}% -+ \def#2##1 ##2 {\begingroup\obeylines\activeparens\spacesplit{#3{##1}{##2}}}% -+ \parindent=0in -+ \advance\leftskip by \defbodyindent -+ \exdentamount=\defbodyindent -+ \begingroup\obeylines\activeparens\spacesplit{#3{#4}{#5}}} -+ -+% Used for @deftypeop. The change from \deftypemethparsebody is an -+% extra argument at the beginning which is the `category', instead of it -+% being the hardwired string `Method' or `Instance Variable'. We have -+% to account for this both in the \...x definition and in parsing the -+% input at hand. Thus also need a control sequence (passed as #5) for -+% the \E... definition to assign the category name to. -+% -+\def\deftypeopparsebody#1#2#3#4#5 #6 {\begingroup\inENV -+ \medbreak -+ \def#1{\endgraf\endgroup\medbreak}% -+ \def#2##1 ##2 ##3 {% -+ \def#4{##1}% -+ \begingroup\obeylines\activeparens\spacesplit{#3{##2}{##3}}}% -+ \parindent=0in -+ \advance\leftskip by \defbodyindent -+ \exdentamount=\defbodyindent -+ \begingroup\obeylines\activeparens\spacesplit{#3{#5}{#6}}} -+ - \def\defopparsebody #1#2#3#4#5 {\begingroup\inENV % - \medbreak % - % Define the end token that this defining construct specifies -@@ -3872,7 +4465,7 @@ - \def#2##1 ##2 {\def#4{##1}% - \begingroup\obeylines\activeparens\spacesplit{#3{##2}}}% - \parindent=0in --\advance\leftskip by \defbodyindent \advance \rightskip by \defbodyindent -+\advance\leftskip by \defbodyindent - \exdentamount=\defbodyindent - \begingroup\obeylines\activeparens\spacesplit{#3{#5}}} - -@@ -3887,7 +4480,7 @@ - \def#1{\endgraf\endgroup\medbreak}% - \def#2{\begingroup\obeylines\spacesplit#3}% - \parindent=0in --\advance\leftskip by \defbodyindent \advance \rightskip by \defbodyindent -+\advance\leftskip by \defbodyindent - \exdentamount=\defbodyindent - \begingroup % - \catcode 61=\active % -@@ -3904,7 +4497,7 @@ - \def#1{\endgraf\endgroup\medbreak}% - \def#2##1 {\begingroup\obeylines\spacesplit{#3{##1}}}% - \parindent=0in -- \advance\leftskip by \defbodyindent \advance \rightskip by \defbodyindent -+ \advance\leftskip by \defbodyindent - \exdentamount=\defbodyindent - \begingroup\obeylines - } -@@ -3949,7 +4542,7 @@ - \def#2##1 ##2 {\def#4{##1}% - \begingroup\obeylines\spacesplit{#3{##2}}}% - \parindent=0in --\advance\leftskip by \defbodyindent \advance \rightskip by \defbodyindent -+\advance\leftskip by \defbodyindent - \exdentamount=\defbodyindent - \begingroup\obeylines\spacesplit{#3{#5}}} - -@@ -3973,16 +4566,17 @@ - % First, define the processing that is wanted for arguments of \defun - % Use this to expand the args and terminate the paragraph they make up - --\def\defunargs #1{\functionparens \sl -+\def\defunargs#1{\functionparens \sl - % Expand, preventing hyphenation at `-' chars. - % Note that groups don't affect changes in \hyphenchar. --\hyphenchar\tensl=0 -+% Set the font temporarily and use \font in case \setfont made \tensl a macro. -+{\tensl\hyphenchar\font=0}% - #1% --\hyphenchar\tensl=45 -+{\tensl\hyphenchar\font=45}% - \ifnum\parencount=0 \else \errmessage{Unbalanced parentheses in @def}\fi% - \interlinepenalty=10000 - \advance\rightskip by 0pt plus 1fil --\endgraf\penalty 10000\vskip -\parskip\penalty 10000% -+\endgraf\nobreak\vskip -\parskip\nobreak - } - - \def\deftypefunargs #1{% -@@ -3993,7 +4587,7 @@ - \tclose{#1}% avoid \code because of side effects on active chars - \interlinepenalty=10000 - \advance\rightskip by 0pt plus 1fil --\endgraf\penalty 10000\vskip -\parskip\penalty 10000% -+\endgraf\nobreak\vskip -\parskip\nobreak - } - - % Do complete processing of one @defun or @defunx line already parsed. -@@ -4012,7 +4606,7 @@ - \def\defun{\defparsebody\Edefun\defunx\defunheader} - - \def\defunheader #1#2{\doind {fn}{\code{#1}}% Make entry in function index --\begingroup\defname {#1}{Function}% -+\begingroup\defname {#1}{\putwordDeffunc}% - \defunargs {#2}\endgroup % - \catcode 61=\other % Turn off change made in \defparsebody - } -@@ -4026,7 +4620,7 @@ - % #1 is the data type, #2 the name, #3 the args. - \def\deftypefunheaderx #1#2 #3\relax{% - \doind {fn}{\code{#2}}% Make entry in function index --\begingroup\defname {\defheaderxcond#1\relax$$$#2}{Function}% -+\begingroup\defname {\defheaderxcond#1\relax$$$#2}{\putwordDeftypefun}% - \deftypefunargs {#3}\endgroup % - \catcode 61=\other % Turn off change made in \defparsebody - } -@@ -4057,7 +4651,7 @@ - \def\defmac{\defparsebody\Edefmac\defmacx\defmacheader} - - \def\defmacheader #1#2{\doind {fn}{\code{#1}}% Make entry in function index --\begingroup\defname {#1}{Macro}% -+\begingroup\defname {#1}{\putwordDefmac}% - \defunargs {#2}\endgroup % - \catcode 61=\other % Turn off change made in \defparsebody - } -@@ -4067,53 +4661,78 @@ - \def\defspec{\defparsebody\Edefspec\defspecx\defspecheader} - - \def\defspecheader #1#2{\doind {fn}{\code{#1}}% Make entry in function index --\begingroup\defname {#1}{Special Form}% -+\begingroup\defname {#1}{\putwordDefspec}% - \defunargs {#2}\endgroup % - \catcode 61=\other % Turn off change made in \defparsebody - } - --% This definition is run if you use @defunx --% anywhere other than immediately after a @defun or @defunx. -- --\def\deffnx #1 {\errmessage{@deffnx in invalid context}} --\def\defunx #1 {\errmessage{@defunx in invalid context}} --\def\defmacx #1 {\errmessage{@defmacx in invalid context}} --\def\defspecx #1 {\errmessage{@defspecx 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}} -- --% @defmethod, and so on -- --% @defop {Funny Method} foo-class frobnicate argument -- -+% @defop CATEGORY CLASS OPERATION ARG... -+% - \def\defop #1 {\def\defoptype{#1}% - \defopparsebody\Edefop\defopx\defopheader\defoptype} -- --\def\defopheader #1#2#3{% --\dosubind {fn}{\code{#2}}{on #1}% Make entry in function index --\begingroup\defname {#2}{\defoptype{} on #1}% -+% -+\def\defopheader#1#2#3{% -+\dosubind {fn}{\code{#2}}{\putwordon\ #1}% Make entry in function index -+\begingroup\defname {#2}{\defoptype\ \putwordon\ #1}% - \defunargs {#3}\endgroup % - } - --% @deftypemethod foo-class return-type foo-method args -+% @deftypeop CATEGORY CLASS TYPE OPERATION ARG... -+% -+\def\deftypeop #1 {\def\deftypeopcategory{#1}% -+ \deftypeopparsebody\Edeftypeop\deftypeopx\deftypeopheader -+ \deftypeopcategory} -+% -+% #1 is the class name, #2 the data type, #3 the operation name, #4 the args. -+\def\deftypeopheader#1#2#3#4{% -+ \dosubind{fn}{\code{#3}}{\putwordon\ \code{#1}}% entry in function index -+ \begingroup -+ \defname{\defheaderxcond#2\relax$$$#3} -+ {\deftypeopcategory\ \putwordon\ \code{#1}}% -+ \deftypefunargs{#4}% -+ \endgroup -+} -+ -+% @deftypemethod CLASS TYPE METHOD ARG... - % - \def\deftypemethod{% -- \defmethparsebody\Edeftypemethod\deftypemethodx\deftypemethodheader} -+ \deftypemethparsebody\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 -+ \dosubind{fn}{\code{#3}}{\putwordon\ \code{#1}}% entry in function index -+ \begingroup -+ \defname{\defheaderxcond#2\relax$$$#3}{\putwordMethodon\ \code{#1}}% -+ \deftypefunargs{#4}% -+ \endgroup - } - --% @defmethod == @defop Method -+% @deftypeivar CLASS TYPE VARNAME -+% -+\def\deftypeivar{% -+ \deftypemethparsebody\Edeftypeivar\deftypeivarx\deftypeivarheader} -+% -+% #1 is the class name, #2 the data type, #3 the variable name. -+\def\deftypeivarheader#1#2#3{% -+ \dosubind{vr}{\code{#3}}{\putwordof\ \code{#1}}% entry in variable index -+ \begingroup -+ \defname{\defheaderxcond#2\relax$$$#3} -+ {\putwordInstanceVariableof\ \code{#1}}% -+ \defvarargs{#3}% -+ \endgroup -+} - -+% @defmethod == @defop Method -+% - \def\defmethod{\defmethparsebody\Edefmethod\defmethodx\defmethodheader} -- --\def\defmethodheader #1#2#3{% --\dosubind {fn}{\code{#2}}{on #1}% entry in function index --\begingroup\defname {#2}{Method on #1}% --\defunargs {#3}\endgroup % -+% -+% #1 is the class name, #2 the method name, #3 the args. -+\def\defmethodheader#1#2#3{% -+ \dosubind{fn}{\code{#2}}{\putwordon\ \code{#1}}% entry in function index -+ \begingroup -+ \defname{#2}{\putwordMethodon\ \code{#1}}% -+ \defunargs{#3}% -+ \endgroup - } - - % @defcv {Class Option} foo-class foo-flag -@@ -4122,37 +4741,30 @@ - \defopvarparsebody\Edefcv\defcvx\defcvarheader\defcvtype} - - \def\defcvarheader #1#2#3{% --\dosubind {vr}{\code{#2}}{of #1}% Make entry in var index --\begingroup\defname {#2}{\defcvtype{} of #1}% -+\dosubind {vr}{\code{#2}}{\putwordof\ #1}% Make entry in var index -+\begingroup\defname {#2}{\defcvtype\ \putwordof\ #1}% - \defvarargs {#3}\endgroup % - } - --% @defivar == @defcv {Instance Variable} -- -+% @defivar CLASS VARNAME == @defcv {Instance Variable} CLASS VARNAME -+% - \def\defivar{\defvrparsebody\Edefivar\defivarx\defivarheader} -- --\def\defivarheader #1#2#3{% --\dosubind {vr}{\code{#2}}{of #1}% Make entry in var index --\begingroup\defname {#2}{Instance Variable of #1}% --\defvarargs {#3}\endgroup % -+% -+\def\defivarheader#1#2#3{% -+ \dosubind {vr}{\code{#2}}{\putwordof\ #1}% entry in var index -+ \begingroup -+ \defname{#2}{\putwordInstanceVariableof\ #1}% -+ \defvarargs{#3}% -+ \endgroup - } - --% These definitions are run if you use @defmethodx, etc., --% anywhere other than immediately after a @defmethod, etc. -- --\def\defopx #1 {\errmessage{@defopx in invalid context}} --\def\defmethodx #1 {\errmessage{@defmethodx in invalid context}} --\def\defcvx #1 {\errmessage{@defcvx in invalid context}} --\def\defivarx #1 {\errmessage{@defivarx in invalid context}} -- --% Now @defvar -- -+% @defvar - % First, define the processing that is wanted for arguments of @defvar. - % This is actually simple: just print them in roman. - % This must expand the args and terminate the paragraph they make up - \def\defvarargs #1{\normalparens #1% - \interlinepenalty=10000 --\endgraf\penalty 10000\vskip -\parskip\penalty 10000} -+\endgraf\nobreak\vskip -\parskip\nobreak} - - % @defvr Counter foo-count - -@@ -4166,7 +4778,7 @@ - \def\defvar{\defvarparsebody\Edefvar\defvarx\defvarheader} - - \def\defvarheader #1#2{\doind {vr}{\code{#1}}% Make entry in var index --\begingroup\defname {#1}{Variable}% -+\begingroup\defname {#1}{\putwordDefvar}% - \defvarargs {#2}\endgroup % - } - -@@ -4175,7 +4787,7 @@ - \def\defopt{\defvarparsebody\Edefopt\defoptx\defoptheader} - - \def\defoptheader #1#2{\doind {vr}{\code{#1}}% Make entry in var index --\begingroup\defname {#1}{User Option}% -+\begingroup\defname {#1}{\putwordDefopt}% - \defvarargs {#2}\endgroup % - } - -@@ -4187,9 +4799,9 @@ - % is actually part of the data type, which should not be put into the index. - \def\deftypevarheader #1#2{% - \dovarind#2 \relax% Make entry in variables index --\begingroup\defname {\defheaderxcond#1\relax$$$#2}{Variable}% -+\begingroup\defname {\defheaderxcond#1\relax$$$#2}{\putwordDeftypevar}% - \interlinepenalty=10000 --\endgraf\penalty 10000\vskip -\parskip\penalty 10000 -+\endgraf\nobreak\vskip -\parskip\nobreak - \endgroup} - \def\dovarind#1 #2\relax{\doind{vr}{\code{#1}}} - -@@ -4200,18 +4812,9 @@ - \def\deftypevrheader #1#2#3{\dovarind#3 \relax% - \begingroup\defname {\defheaderxcond#2\relax$$$#3}{#1} - \interlinepenalty=10000 --\endgraf\penalty 10000\vskip -\parskip\penalty 10000 -+\endgraf\nobreak\vskip -\parskip\nobreak - \endgroup} - --% This definition is run if you use @defvarx --% anywhere other than immediately after a @defvar or @defvarx. -- --\def\defvrx #1 {\errmessage{@defvrx in invalid context}} --\def\defvarx #1 {\errmessage{@defvarx in invalid context}} --\def\defoptx #1 {\errmessage{@defoptx in invalid context}} --\def\deftypevarx #1 {\errmessage{@deftypevarx in invalid context}} --\def\deftypevrx #1 {\errmessage{@deftypevrx in invalid context}} -- - % Now define @deftp - % Args are printed in bold, a slight difference from @defvar. - -@@ -4224,51 +4827,394 @@ - \def\deftpheader #1#2#3{\doind {tp}{\code{#2}}% - \begingroup\defname {#2}{#1}\deftpargs{#3}\endgroup} - --% This definition is run if you use @deftpx, etc --% anywhere other than immediately after a @deftp, etc. -+% These definitions are used if you use @defunx (etc.) -+% anywhere other than immediately after a @defun or @defunx. -+% -+\def\defcvx#1 {\errmessage{@defcvx in invalid context}} -+\def\deffnx#1 {\errmessage{@deffnx in invalid context}} -+\def\defivarx#1 {\errmessage{@defivarx in invalid context}} -+\def\defmacx#1 {\errmessage{@defmacx in invalid context}} -+\def\defmethodx#1 {\errmessage{@defmethodx in invalid context}} -+\def\defoptx #1 {\errmessage{@defoptx in invalid context}} -+\def\defopx#1 {\errmessage{@defopx in invalid context}} -+\def\defspecx#1 {\errmessage{@defspecx in invalid context}} -+\def\deftpx#1 {\errmessage{@deftpx in invalid context}} -+\def\deftypefnx#1 {\errmessage{@deftypefnx in invalid context}} -+\def\deftypefunx#1 {\errmessage{@deftypefunx in invalid context}} -+\def\deftypeivarx#1 {\errmessage{@deftypeivarx in invalid context}} -+\def\deftypemethodx#1 {\errmessage{@deftypemethodx in invalid context}} -+\def\deftypeopx#1 {\errmessage{@deftypeopx in invalid context}} -+\def\deftypevarx#1 {\errmessage{@deftypevarx in invalid context}} -+\def\deftypevrx#1 {\errmessage{@deftypevrx in invalid context}} -+\def\defunx#1 {\errmessage{@defunx in invalid context}} -+\def\defvarx#1 {\errmessage{@defvarx in invalid context}} -+\def\defvrx#1 {\errmessage{@defvrx in invalid context}} -+ -+ -+\message{macros,} -+% @macro. -+ -+% To do this right we need a feature of e-TeX, \scantokens, -+% which we arrange to emulate with a temporary file in ordinary TeX. -+\ifx\eTeXversion\undefined -+ \newwrite\macscribble -+ \def\scanmacro#1{% -+ \begingroup \newlinechar`\^^M -+ % Undo catcode changes of \startcontents and \doprintindex -+ \catcode`\@=0 \catcode`\\=12 \escapechar=`\@ -+ % Append \endinput to make sure that TeX does not see the ending newline. -+ \toks0={#1\endinput}% -+ \immediate\openout\macscribble=\jobname.tmp -+ \immediate\write\macscribble{\the\toks0}% -+ \immediate\closeout\macscribble -+ \let\xeatspaces\eatspaces -+ \input \jobname.tmp -+ \endgroup -+} -+\else -+\def\scanmacro#1{% -+\begingroup \newlinechar`\^^M -+% Undo catcode changes of \startcontents and \doprintindex -+\catcode`\@=0 \catcode`\\=12 \escapechar=`\@ -+\let\xeatspaces\eatspaces\scantokens{#1\endinput}\endgroup} -+\fi -+ -+\newcount\paramno % Count of parameters -+\newtoks\macname % Macro name -+\newif\ifrecursive % Is it recursive? -+\def\macrolist{} % List of all defined macros in the form -+ % \do\macro1\do\macro2... -+ -+% Utility routines. -+% Thisdoes \let #1 = #2, except with \csnames. -+\def\cslet#1#2{% -+\expandafter\expandafter -+\expandafter\let -+\expandafter\expandafter -+\csname#1\endcsname -+\csname#2\endcsname} -+ -+% Trim leading and trailing spaces off a string. -+% Concepts from aro-bend problem 15 (see CTAN). -+{\catcode`\@=11 -+\gdef\eatspaces #1{\expandafter\trim@\expandafter{#1 }} -+\gdef\trim@ #1{\trim@@ @#1 @ #1 @ @@} -+\gdef\trim@@ #1@ #2@ #3@@{\trim@@@\empty #2 @} -+\def\unbrace#1{#1} -+\unbrace{\gdef\trim@@@ #1 } #2@{#1} -+} -+ -+% Trim a single trailing ^^M off a string. -+{\catcode`\^^M=12\catcode`\Q=3% -+\gdef\eatcr #1{\eatcra #1Q^^MQ}% -+\gdef\eatcra#1^^MQ{\eatcrb#1Q}% -+\gdef\eatcrb#1Q#2Q{#1}% -+} -+ -+% Macro bodies are absorbed as an argument in a context where -+% all characters are catcode 10, 11 or 12, except \ which is active -+% (as in normal texinfo). It is necessary to change the definition of \. -+ -+% It's necessary to have hard CRs when the macro is executed. This is -+% done by making ^^M (\endlinechar) catcode 12 when reading the macro -+% body, and then making it the \newlinechar in \scanmacro. -+ -+\def\macrobodyctxt{% -+ \catcode`\~=12 -+ \catcode`\^=12 -+ \catcode`\_=12 -+ \catcode`\|=12 -+ \catcode`\<=12 -+ \catcode`\>=12 -+ \catcode`\+=12 -+ \catcode`\{=12 -+ \catcode`\}=12 -+ \catcode`\@=12 -+ \catcode`\^^M=12 -+ \usembodybackslash} -+ -+\def\macroargctxt{% -+ \catcode`\~=12 -+ \catcode`\^=12 -+ \catcode`\_=12 -+ \catcode`\|=12 -+ \catcode`\<=12 -+ \catcode`\>=12 -+ \catcode`\+=12 -+ \catcode`\@=12 -+ \catcode`\\=12} -+ -+% \mbodybackslash is the definition of \ in @macro bodies. -+% It maps \foo\ => \csname macarg.foo\endcsname => #N -+% where N is the macro parameter number. -+% We define \csname macarg.\endcsname to be \realbackslash, so -+% \\ in macro replacement text gets you a backslash. -+ -+{\catcode`@=0 @catcode`@\=@active -+ @gdef@usembodybackslash{@let\=@mbodybackslash} -+ @gdef@mbodybackslash#1\{@csname macarg.#1@endcsname} -+} -+\expandafter\def\csname macarg.\endcsname{\realbackslash} -+ -+\def\macro{\recursivefalse\parsearg\macroxxx} -+\def\rmacro{\recursivetrue\parsearg\macroxxx} -+ -+\def\macroxxx#1{% -+ \getargs{#1}% now \macname is the macname and \argl the arglist -+ \ifx\argl\empty % no arguments -+ \paramno=0% -+ \else -+ \expandafter\parsemargdef \argl;% -+ \fi -+ \if1\csname ismacro.\the\macname\endcsname -+ \message{Warning: redefining \the\macname}% -+ \else -+ \expandafter\ifx\csname \the\macname\endcsname \relax -+ \else \errmessage{The name \the\macname\space is reserved}\fi -+ \global\cslet{macsave.\the\macname}{\the\macname}% -+ \global\expandafter\let\csname ismacro.\the\macname\endcsname=1% -+ % Add the macroname to \macrolist -+ \toks0 = \expandafter{\macrolist\do}% -+ \xdef\macrolist{\the\toks0 -+ \expandafter\noexpand\csname\the\macname\endcsname}% -+ \fi -+ \begingroup \macrobodyctxt -+ \ifrecursive \expandafter\parsermacbody -+ \else \expandafter\parsemacbody -+ \fi} -+ -+\def\unmacro{\parsearg\unmacroxxx} -+\def\unmacroxxx#1{% -+ \if1\csname ismacro.#1\endcsname -+ \global\cslet{#1}{macsave.#1}% -+ \global\expandafter\let \csname ismacro.#1\endcsname=0% -+ % Remove the macro name from \macrolist -+ \begingroup -+ \edef\tempa{\expandafter\noexpand\csname#1\endcsname}% -+ \def\do##1{% -+ \def\tempb{##1}% -+ \ifx\tempa\tempb -+ % remove this -+ \else -+ \toks0 = \expandafter{\newmacrolist\do}% -+ \edef\newmacrolist{\the\toks0\expandafter\noexpand\tempa}% -+ \fi}% -+ \def\newmacrolist{}% -+ % Execute macro list to define \newmacrolist -+ \macrolist -+ \global\let\macrolist\newmacrolist -+ \endgroup -+ \else -+ \errmessage{Macro #1 not defined}% -+ \fi -+} -+ -+% This makes use of the obscure feature that if the last token of a -+% <parameter list> is #, then the preceding argument is delimited by -+% an opening brace, and that opening brace is not consumed. -+\def\getargs#1{\getargsxxx#1{}} -+\def\getargsxxx#1#{\getmacname #1 \relax\getmacargs} -+\def\getmacname #1 #2\relax{\macname={#1}} -+\def\getmacargs#1{\def\argl{#1}} -+ -+% Parse the optional {params} list. Set up \paramno and \paramlist -+% so \defmacro knows what to do. Define \macarg.blah for each blah -+% in the params list, to be ##N where N is the position in that list. -+% That gets used by \mbodybackslash (above). -+ -+% We need to get `macro parameter char #' into several definitions. -+% The technique used is stolen from LaTeX: let \hash be something -+% unexpandable, insert that wherever you need a #, and then redefine -+% it to # just before using the token list produced. -+% -+% The same technique is used to protect \eatspaces till just before -+% the macro is used. -+ -+\def\parsemargdef#1;{\paramno=0\def\paramlist{}% -+ \let\hash\relax\let\xeatspaces\relax\parsemargdefxxx#1,;,} -+\def\parsemargdefxxx#1,{% -+ \if#1;\let\next=\relax -+ \else \let\next=\parsemargdefxxx -+ \advance\paramno by 1% -+ \expandafter\edef\csname macarg.\eatspaces{#1}\endcsname -+ {\xeatspaces{\hash\the\paramno}}% -+ \edef\paramlist{\paramlist\hash\the\paramno,}% -+ \fi\next} -+ -+% These two commands read recursive and nonrecursive macro bodies. -+% (They're different since rec and nonrec macros end differently.) -+ -+\long\def\parsemacbody#1@end macro% -+{\xdef\temp{\eatcr{#1}}\endgroup\defmacro}% -+\long\def\parsermacbody#1@end rmacro% -+{\xdef\temp{\eatcr{#1}}\endgroup\defmacro}% -+ -+% This defines the macro itself. There are six cases: recursive and -+% nonrecursive macros of zero, one, and many arguments. -+% Much magic with \expandafter here. -+% \xdef is used so that macro definitions will survive the file -+% they're defined in; @include reads the file inside a group. -+\def\defmacro{% -+ \let\hash=##% convert placeholders to macro parameter chars -+ \ifrecursive -+ \ifcase\paramno -+ % 0 -+ \expandafter\xdef\csname\the\macname\endcsname{% -+ \noexpand\scanmacro{\temp}}% -+ \or % 1 -+ \expandafter\xdef\csname\the\macname\endcsname{% -+ \bgroup\noexpand\macroargctxt -+ \noexpand\braceorline -+ \expandafter\noexpand\csname\the\macname xxx\endcsname}% -+ \expandafter\xdef\csname\the\macname xxx\endcsname##1{% -+ \egroup\noexpand\scanmacro{\temp}}% -+ \else % many -+ \expandafter\xdef\csname\the\macname\endcsname{% -+ \bgroup\noexpand\macroargctxt -+ \noexpand\csname\the\macname xx\endcsname}% -+ \expandafter\xdef\csname\the\macname xx\endcsname##1{% -+ \expandafter\noexpand\csname\the\macname xxx\endcsname ##1,}% -+ \expandafter\expandafter -+ \expandafter\xdef -+ \expandafter\expandafter -+ \csname\the\macname xxx\endcsname -+ \paramlist{\egroup\noexpand\scanmacro{\temp}}% -+ \fi -+ \else -+ \ifcase\paramno -+ % 0 -+ \expandafter\xdef\csname\the\macname\endcsname{% -+ \noexpand\norecurse{\the\macname}% -+ \noexpand\scanmacro{\temp}\egroup}% -+ \or % 1 -+ \expandafter\xdef\csname\the\macname\endcsname{% -+ \bgroup\noexpand\macroargctxt -+ \noexpand\braceorline -+ \expandafter\noexpand\csname\the\macname xxx\endcsname}% -+ \expandafter\xdef\csname\the\macname xxx\endcsname##1{% -+ \egroup -+ \noexpand\norecurse{\the\macname}% -+ \noexpand\scanmacro{\temp}\egroup}% -+ \else % many -+ \expandafter\xdef\csname\the\macname\endcsname{% -+ \bgroup\noexpand\macroargctxt -+ \expandafter\noexpand\csname\the\macname xx\endcsname}% -+ \expandafter\xdef\csname\the\macname xx\endcsname##1{% -+ \expandafter\noexpand\csname\the\macname xxx\endcsname ##1,}% -+ \expandafter\expandafter -+ \expandafter\xdef -+ \expandafter\expandafter -+ \csname\the\macname xxx\endcsname -+ \paramlist{% -+ \egroup -+ \noexpand\norecurse{\the\macname}% -+ \noexpand\scanmacro{\temp}\egroup}% -+ \fi -+ \fi} -+ -+\def\norecurse#1{\bgroup\cslet{#1}{macsave.#1}} -+ -+% \braceorline decides whether the next nonwhitespace character is a -+% {. If so it reads up to the closing }, if not, it reads the whole -+% line. Whatever was read is then fed to the next control sequence -+% as an argument (by \parsebrace or \parsearg) -+\def\braceorline#1{\let\next=#1\futurelet\nchar\braceorlinexxx} -+\def\braceorlinexxx{% -+ \ifx\nchar\bgroup\else -+ \expandafter\parsearg -+ \fi \next} -+ -+% We mant to disable all macros during \shipout so that they are not -+% expanded by \write. -+\def\turnoffmacros{\begingroup \def\do##1{\let\noexpand##1=\relax}% -+ \edef\next{\macrolist}\expandafter\endgroup\next} -+ -+ -+% @alias. -+% We need some trickery to remove the optional spaces around the equal -+% sign. Just make them active and then expand them all to nothing. -+\def\alias{\begingroup\obeyspaces\parsearg\aliasxxx} -+\def\aliasxxx #1{\aliasyyy#1\relax} -+\def\aliasyyy #1=#2\relax{\ignoreactivespaces -+\edef\next{\global\let\expandafter\noexpand\csname#1\endcsname=% -+ \expandafter\noexpand\csname#2\endcsname}% -+\expandafter\endgroup\next} - --\def\deftpx #1 {\errmessage{@deftpx in invalid context}} - -+\message{cross references,} -+% @xref etc. - --\message{cross reference,} --% Define cross-reference macros --\newwrite \auxfile -+\newwrite\auxfile - --\newif\ifhavexrefs % True if xref values are known. -+\newif\ifhavexrefs % True if xref values are known. - \newif\ifwarnedxrefs % True if we warned once that they aren't known. - --% @inforef is simple. -+% @inforef is relatively simple. - \def\inforef #1{\inforefzzz #1,,,,**} - \def\inforefzzz #1,#2,#3,#4**{\putwordSee{} \putwordInfo{} \putwordfile{} \file{\ignorespaces #3{}}, - node \samp{\ignorespaces#1{}}} - --% \setref{foo} defines a cross-reference point named foo. -+% @node's job is to define \lastnode. -+\def\node{\ENVcheck\parsearg\nodezzz} -+\def\nodezzz#1{\nodexxx [#1,]} -+\def\nodexxx[#1,#2]{\gdef\lastnode{#1}} -+\let\nwnode=\node -+\let\lastnode=\relax -+ -+% The sectioning commands (@chapter, etc.) call these. -+\def\donoderef{% -+ \ifx\lastnode\relax\else -+ \expandafter\expandafter\expandafter\setref{\lastnode}% -+ {Ysectionnumberandtype}% -+ \global\let\lastnode=\relax -+ \fi -+} -+\def\unnumbnoderef{% -+ \ifx\lastnode\relax\else -+ \expandafter\expandafter\expandafter\setref{\lastnode}{Ynothing}% -+ \global\let\lastnode=\relax -+ \fi -+} -+\def\appendixnoderef{% -+ \ifx\lastnode\relax\else -+ \expandafter\expandafter\expandafter\setref{\lastnode}% -+ {Yappendixletterandtype}% -+ \global\let\lastnode=\relax -+ \fi -+} -+ -+ -+% @anchor{NAME} -- define xref target at arbitrary point. -+% -+\newcount\savesfregister -+\gdef\savesf{\relax \ifhmode \savesfregister=\spacefactor \fi} -+\gdef\restoresf{\relax \ifhmode \spacefactor=\savesfregister \fi} -+\gdef\anchor#1{\savesf \setref{#1}{Ynothing}\restoresf \ignorespaces} -+ -+% \setref{NAME}{SNT} defines a cross-reference point NAME, namely -+% NAME-title, NAME-pg, and NAME-SNT. Called from \foonoderef. We have -+% to set \indexdummies so commands such as @code in a section title -+% aren't expanded. It would be nicer not to expand the titles in the -+% first place, but there's so many layers that that is hard to do. -+% -+\def\setref#1#2{{% -+ \indexdummies -+ \pdfmkdest{#1}% -+ \dosetq{#1-title}{Ytitle}% -+ \dosetq{#1-pg}{Ypagenumber}% -+ \dosetq{#1-snt}{#2}% -+}} - --\def\setref#1{% --\dosetq{#1-title}{Ytitle}% --\dosetq{#1-pg}{Ypagenumber}% --\dosetq{#1-snt}{Ysectionnumberandtype}} -- --\def\unnumbsetref#1{% --\dosetq{#1-title}{Ytitle}% --\dosetq{#1-pg}{Ypagenumber}% --\dosetq{#1-snt}{Ynothing}} -- --\def\appendixsetref#1{% --\dosetq{#1-title}{Ytitle}% --\dosetq{#1-pg}{Ypagenumber}% --\dosetq{#1-snt}{Yappendixletterandtype}} -- --% \xref, \pxref, and \ref generate cross-references to specified points. --% For \xrefX, #1 is the node name, #2 the name of the Info --% cross-reference, #3 the printed node name, #4 the name of the Info --% file, #5 the name of the printed manual. All but the node name can be --% omitted. -+% @xref, @pxref, and @ref generate cross-references. For \xrefX, #1 is -+% the node name, #2 the name of the Info cross-reference, #3 the printed -+% node name, #4 the name of the Info file, #5 the name of the printed -+% manual. All but the node name can be omitted. - % - \def\pxref#1{\putwordsee{} \xrefX[#1,,,,,,,]} - \def\xref#1{\putwordSee{} \xrefX[#1,,,,,,,]} - \def\ref#1{\xrefX[#1,,,,,,,]} - \def\xrefX[#1,#2,#3,#4,#5,#6]{\begingroup -+ \unsepspaces - \def\printedmanual{\ignorespaces #5}% - \def\printednodename{\ignorespaces #3}% - \setbox1=\hbox{\printedmanual}% -@@ -4281,7 +5227,7 @@ - \else - % Use the actual chapter/section title appear inside - % the square brackets. Use the real section title if we have it. -- \ifdim \wd1>0pt% -+ \ifdim \wd1 > 0pt - % It is in another manual, so we don't have it. - \def\printednodename{\ignorespaces #1}% - \else -@@ -4302,27 +5248,54 @@ - % are best written with fairly long node names, containing hyphens, this - % is a loss. Therefore, we give the text of the node name again, so it - % is as if TeX is seeing it for the first time. -+ \ifpdf -+ \leavevmode -+ \getfilename{#4}% -+ \ifnum\filenamelength>0 -+ \startlink attr{/Border [0 0 0]}% -+ goto file{\the\filename.pdf} name{#1@}% -+ \else -+ \startlink attr{/Border [0 0 0]}% -+ goto name{#1@}% -+ \fi -+ \linkcolor -+ \fi -+ % - \ifdim \wd1 > 0pt -- \putwordsection{} ``\printednodename'' in \cite{\printedmanual}% -+ \putwordsection{} ``\printednodename'' \putwordin{} \cite{\printedmanual}% - \else - % _ (for example) has to be the character _ for the purposes of the - % control sequence corresponding to the node, but it has to expand - % into the usual \leavevmode...\vrule stuff for purposes of - % printing. So we \turnoffactive for the \refx-snt, back on for the - % printing, back off for the \refx-pg. -- {\turnoffactive \refx{#1-snt}{}}% -- \space [\printednodename],\space -+ {\normalturnoffactive -+ % Only output a following space if the -snt ref is nonempty; for -+ % @unnumbered and @anchor, it won't be. -+ \setbox2 = \hbox{\ignorespaces \refx{#1-snt}{}}% -+ \ifdim \wd2 > 0pt \refx{#1-snt}\space\fi -+ }% -+ % [mynode], -+ [\printednodename],\space -+ % page 3 - \turnoffactive \putwordpage\tie\refx{#1-pg}{}% - \fi -+ \endlink - \endgroup} - - % \dosetq is the interface for calls from other macros - --% Use \turnoffactive so that punctuation chars such as underscore --% work in node names. --\def\dosetq #1#2{{\let\folio=0 \turnoffactive --\edef\next{\write\auxfile{\internalsetq {#1}{#2}}}% --\next}} -+% Use \normalturnoffactive so that punctuation chars such as underscore -+% and backslash work in node names. (\turnoffactive doesn't do \.) -+\def\dosetq#1#2{% -+ {\let\folio=0% -+ \normalturnoffactive -+ \edef\next{\write\auxfile{\internalsetq{#1}{#2}}}% -+ \iflinks -+ \next -+ \fi -+ }% -+} - - % \internalsetq {foo}{page} expands into - % CHARACTERS 'xrdef {foo}{...expansion of \Ypage...} -@@ -4373,13 +5346,15 @@ - \def\refx#1#2{% - \expandafter\ifx\csname X#1\endcsname\relax - % If not defined, say something at least. -- $\langle$un\-de\-fined$\rangle$% -- \ifhavexrefs -- \message{\linenumber Undefined cross reference `#1'.}% -- \else -- \ifwarnedxrefs\else -- \global\warnedxrefstrue -- \message{Cross reference values unknown; you must run TeX again.}% -+ \angleleft un\-de\-fined\angleright -+ \iflinks -+ \ifhavexrefs -+ \message{\linenumber Undefined cross reference `#1'.}% -+ \else -+ \ifwarnedxrefs\else -+ \global\warnedxrefstrue -+ \message{Cross reference values unknown; you must run TeX again.}% -+ \fi - \fi - \fi - \else -@@ -4390,10 +5365,13 @@ - } - - % 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 -+} - - % Read the last existing aux file, if any. No error if none exists. - \def\readauxfile{\begingroup -@@ -4450,8 +5428,7 @@ - \catcode`\$=\other - \catcode`\#=\other - \catcode`\&=\other -- % `\+ does not work, so use 43. -- \catcode43=\other -+ \catcode`+=\other % avoid \+ for paranoia even though we've turned it off - % Make the characters 128-255 be printing characters - {% - \count 1=128 -@@ -4540,6 +5517,8 @@ - \xspaceskip\z@skip - \parindent\defaultparindent - % -+ \smallfonts \rm -+ % - % Hang the footnote text off the number. - \hang - \textindent{\thisfootno}% -@@ -4554,7 +5533,7 @@ - \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} -+\def\@foot{\strut\par\egroup} - - }%end \catcode `\@=11 - -@@ -4613,23 +5592,25 @@ - - % @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 = xepsf.tex -+\openin 1 = epsf.tex - \ifeof 1 \else - \closein 1 -- \def\epsfannounce{\toks0 = }% do not bother showing banner -+ % Do not bother showing banner with post-v2.7 epsf.tex (available in -+ % doc/epsf.tex until it shows up on ctan). -+ \def\epsfannounce{\toks0 = }% - \input epsf.tex - \fi - % -+% We will only complain once about lack of epsf.tex. - \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.} -+ it from ftp://tug.org/tex/epsf.tex.} - % --% Only complain once about lack of epsf.tex. - \def\image#1{% - \ifx\epsfbox\undefined - \ifwarnednoepsf \else -@@ -4647,42 +5628,79 @@ - % #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}% -+ \ifpdf -+ \centerline{\dopdfimage{#1}{#2}{#3}}% -+ \else -+ % \epsfbox itself resets \epsf?size at each figure. -+ \setbox0 = \hbox{\ignorespaces #2}\ifdim\wd0 > 0pt \epsfxsize=#2\relax \fi -+ \setbox0 = \hbox{\ignorespaces #3}\ifdim\wd0 > 0pt \epsfysize=#3\relax \fi -+ \begingroup -+ \catcode`\^^M = 5 % in case we're inside an example -+ % 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 - } - --% End of control word definitions. - -+\message{localization,} -+% and i18n. - --\message{and turning on texinfo input format.} -- --\def\openindices{% -- \newindex{cp}% -- \newcodeindex{fn}% -- \newcodeindex{vr}% -- \newcodeindex{tp}% -- \newcodeindex{ky}% -- \newcodeindex{pg}% -+% @documentlanguage is usually given very early, just after -+% @setfilename. If done too late, it may not override everything -+% properly. Single argument is the language abbreviation. -+% It would be nice if we could set up a hyphenation file here. -+% -+\def\documentlanguage{\parsearg\dodocumentlanguage} -+\def\dodocumentlanguage#1{% -+ \tex % read txi-??.tex file in plain TeX. -+ % Read the file if it exists. -+ \openin 1 txi-#1.tex -+ \ifeof1 -+ \errhelp = \nolanghelp -+ \errmessage{Cannot read language file txi-#1.tex}% -+ \let\temp = \relax -+ \else -+ \def\temp{\input txi-#1.tex }% -+ \fi -+ \temp -+ \endgroup - } -+\newhelp\nolanghelp{The given language definition file cannot be found or -+is empty. Maybe you need to install it? In the current directory -+should work if nowhere else does.} -+ - --% Set some numeric style parameters, for 8.5 x 11 format. -+% @documentencoding should change something in TeX eventually, most -+% likely, but for now just recognize it. -+\let\documentencoding = \comment - --\hsize = 6in --\hoffset = .25in -+ -+% Page size parameters. -+% - \newdimen\defaultparindent \defaultparindent = 15pt --\parindent = \defaultparindent --\parskip 3pt plus 2pt minus 1pt --\setleading{13.2pt} --\advance\topskip by 1.2cm - - \chapheadingskip = 15pt plus 4pt minus 2pt - \secheadingskip = 12pt plus 3pt minus 2pt - \subsecheadingskip = 9pt plus 2pt minus 2pt - - % Prevent underfull vbox error messages. --\vbadness=10000 -+\vbadness = 10000 -+ -+% Don't be so finicky about underfull hboxes, either. -+\hbadness = 2000 - - % Following George Bush, just get rid of widows and orphans. - \widowpenalty=10000 -@@ -4691,101 +5709,125 @@ - % Use TeX 3.0's \emergencystretch to help line breaking, but if we're - % using an old version of TeX, don't do anything. We want the amount of - % stretch added to depend on the line length, hence the dependence on --% \hsize. This makes it come to about 9pt for the 8.5x11 format. -+% \hsize. We call this whenever the paper size is set. - % --\ifx\emergencystretch\thisisundefined -- % Allow us to assign to \emergencystretch anyway. -- \def\emergencystretch{\dimen0}% --\else -- \emergencystretch = \hsize -- \divide\emergencystretch by 45 --\fi -- --% Use @smallbook to reset parameters for 7x9.5 format (or else 7x9.25) --\def\smallbook{ -- \global\chapheadingskip = 15pt plus 4pt minus 2pt -- \global\secheadingskip = 12pt plus 3pt minus 2pt -- \global\subsecheadingskip = 9pt plus 2pt minus 2pt -- % -- \global\lispnarrowing = 0.3in -- \setleading{12pt} -- \advance\topskip by -1cm -- \global\parskip 2pt plus 1pt -- \global\hsize = 5in -- \global\vsize=7.5in -- \global\tolerance=700 -- \global\hfuzz=1pt -- \global\contentsrightmargin=0pt -- \global\deftypemargin=0pt -- \global\defbodyindent=.5cm -- % -- \global\pagewidth=\hsize -- \global\pageheight=\vsize -- % -- \global\let\smalllisp=\smalllispx -- \global\let\smallexample=\smalllispx -- \global\def\Esmallexample{\Esmalllisp} -+\def\setemergencystretch{% -+ \ifx\emergencystretch\thisisundefined -+ % Allow us to assign to \emergencystretch anyway. -+ \def\emergencystretch{\dimen0}% -+ \else -+ \emergencystretch = .15\hsize -+ \fi - } - -+% Parameters in order: 1) textheight; 2) textwidth; 3) voffset; -+% 4) hoffset; 5) binding offset; 6) topskip. Then whoever calls us can -+% set \parskip and call \setleading for \baselineskip. -+% -+\def\internalpagesizes#1#2#3#4#5#6{% -+ \voffset = #3\relax -+ \topskip = #6\relax -+ \splittopskip = \topskip -+ % -+ \vsize = #1\relax -+ \advance\vsize by \topskip -+ \outervsize = \vsize -+ \advance\outervsize by 2\topandbottommargin -+ \pageheight = \vsize -+ % -+ \hsize = #2\relax -+ \outerhsize = \hsize -+ \advance\outerhsize by 0.5in -+ \pagewidth = \hsize -+ % -+ \normaloffset = #4\relax -+ \bindingoffset = #5\relax -+ % -+ \parindent = \defaultparindent -+ \setemergencystretch -+} -+ -+% @letterpaper (the default). -+\def\letterpaper{{\globaldefs = 1 -+ \parskip = 3pt plus 2pt minus 1pt -+ \setleading{13.2pt}% -+ % -+ % If page is nothing but text, make it come out even. -+ \internalpagesizes{46\baselineskip}{6in}{\voffset}{.25in}{\bindingoffset}{36pt}% -+}} -+ -+% Use @smallbook to reset parameters for 7x9.5 (or so) format. -+\def\smallbook{{\globaldefs = 1 -+ \parskip = 2pt plus 1pt -+ \setleading{12pt}% -+ % -+ \internalpagesizes{7.5in}{5.in}{\voffset}{.25in}{\bindingoffset}{16pt}% -+ % -+ \lispnarrowing = 0.3in -+ \tolerance = 700 -+ \hfuzz = 1pt -+ \contentsrightmargin = 0pt -+ \deftypemargin = 0pt -+ \defbodyindent = .5cm -+ % -+ \let\smalldisplay = \smalldisplayx -+ \let\smallexample = \smalllispx -+ \let\smallformat = \smallformatx -+ \let\smalllisp = \smalllispx -+}} -+ - % Use @afourpaper to print on European A4 paper. --\def\afourpaper{ --\global\tolerance=700 --\global\hfuzz=1pt --\setleading{12pt} --\global\parskip 15pt plus 1pt -- --\global\vsize= 53\baselineskip --\advance\vsize by \topskip --%\global\hsize= 5.85in % A4 wide 10pt --\global\hsize= 6.5in --\global\outerhsize=\hsize --\global\advance\outerhsize by 0.5in --\global\outervsize=\vsize --\global\advance\outervsize by 0.6in -- --\global\pagewidth=\hsize --\global\pageheight=\vsize --} -- --\bindingoffset=0pt --\normaloffset=\hoffset --\pagewidth=\hsize --\pageheight=\vsize -- --% Allow control of the text dimensions. Parameters in order: textheight; --% textwidth; voffset; hoffset; binding offset; topskip. --% All require a dimension; --% header is additional; added length extends the bottom of the page. -- --\def\changepagesizes#1#2#3#4#5#6{ -- \global\vsize= #1 -- \global\topskip= #6 -- \advance\vsize by \topskip -- \global\voffset= #3 -- \global\hsize= #2 -- \global\outerhsize=\hsize -- \global\advance\outerhsize by 0.5in -- \global\outervsize=\vsize -- \global\advance\outervsize by 0.6in -- \global\pagewidth=\hsize -- \global\pageheight=\vsize -- \global\normaloffset= #4 -- \global\bindingoffset= #5} -+\def\afourpaper{{\globaldefs = 1 -+ \setleading{12pt}% -+ \parskip = 3pt plus 2pt minus 1pt -+ % -+ \internalpagesizes{53\baselineskip}{160mm}{\voffset}{4mm}{\bindingoffset}{44pt}% -+ % -+ \tolerance = 700 -+ \hfuzz = 1pt -+}} - - % A specific text layout, 24x15cm overall, intended for A4 paper. Top margin - % 29mm, hence bottom margin 28mm, nominal side margin 3cm. --\def\afourlatex -- {\global\tolerance=700 -- \global\hfuzz=1pt -- \setleading{12pt} -- \global\parskip 15pt plus 1pt -- \advance\baselineskip by 1.6pt -- \changepagesizes{237mm}{150mm}{3.6mm}{3.6mm}{3mm}{7mm} -- } -+\def\afourlatex{{\globaldefs = 1 -+ \setleading{13.6pt}% -+ % -+ \afourpaper -+ \internalpagesizes{237mm}{150mm}{3.6mm}{3.6mm}{3mm}{7mm}% -+ % -+ \globaldefs = 0 -+}} - - % Use @afourwide to print on European A4 paper in wide format. --\def\afourwide{\afourpaper --\changepagesizes{9.5in}{6.5in}{\hoffset}{\normaloffset}{\bindingoffset}{7mm}} -+\def\afourwide{% -+ \afourpaper -+ \internalpagesizes{6.5in}{9.5in}{\hoffset}{\normaloffset}{\bindingoffset}{7mm}% -+ % -+ \globaldefs = 0 -+} -+ -+% @pagesizes TEXTHEIGHT[,TEXTWIDTH] -+% Perhaps we should allow setting the margins, \topskip, \parskip, -+% and/or leading, also. Or perhaps we should compute them somehow. -+% -+\def\pagesizes{\parsearg\pagesizesxxx} -+\def\pagesizesxxx#1{\pagesizesyyy #1,,\finish} -+\def\pagesizesyyy#1,#2,#3\finish{{% -+ \setbox0 = \hbox{\ignorespaces #2}\ifdim\wd0 > 0pt \hsize=#2\relax \fi -+ \globaldefs = 1 -+ % -+ \parskip = 3pt plus 2pt minus 1pt -+ \setleading{13.2pt}% -+ % -+ \internalpagesizes{#1}{\hsize}{\voffset}{\normaloffset}{\bindingoffset}{44pt}% -+}} -+ -+% Set default to letter. -+% -+\letterpaper -+ -+ -+\message{and turning on texinfo input format.} - - % Define macros to output various characters with catcode for normal text. - \catcode`\"=\other -@@ -4796,6 +5838,7 @@ - \catcode`\<=\other - \catcode`\>=\other - \catcode`\+=\other -+\catcode`\$=\other - \def\normaldoublequote{"} - \def\normaltilde{~} - \def\normalcaret{^} -@@ -4804,6 +5847,7 @@ - \def\normalless{<} - \def\normalgreater{>} - \def\normalplus{+} -+\def\normaldollar{$} - - % This macro is used to make a character print one way in ttfont - % where it can probably just be output, and another way in other fonts, -@@ -4814,7 +5858,13 @@ - % interword stretch (and shrink), and it is reasonable to expect all - % typewriter fonts to have this, we can check that font parameter. - % --\def\ifusingtt#1#2{\ifdim \fontdimen3\the\font=0pt #1\else #2\fi} -+\def\ifusingtt#1#2{\ifdim \fontdimen3\font=0pt #1\else #2\fi} -+ -+% Same as above, but check for italic font. Actually this also catches -+% non-italic slanted fonts since it is impossible to distinguish them from -+% italic fonts. But since this is only used by $ and it uses \sl anyway -+% this is not a problem. -+\def\ifusingit#1#2{\ifdim \fontdimen1\font>0pt #1\else #2\fi} - - % Turn off all special characters except @ - % (and those which the user can use as if they were ordinary). -@@ -4822,10 +5872,10 @@ - % use math or other variants that look better in normal text. - - \catcode`\"=\active --\def\activedoublequote{{\tt \char '042}} -+\def\activedoublequote{{\tt\char34}} - \let"=\activedoublequote - \catcode`\~=\active --\def~{{\tt \char '176}} -+\def~{{\tt\char126}} - \chardef\hat=`\^ - \catcode`\^=\active - \def^{{\tt \hat}} -@@ -4836,7 +5886,7 @@ - \def\_{\leavevmode \kern.06em \vbox{\hrule width.3em height.1ex}} - - \catcode`\|=\active --\def|{{\tt \char '174}} -+\def|{{\tt\char124}} - \chardef \less=`\< - \catcode`\<=\active - \def<{{\tt \less}} -@@ -4845,6 +5895,8 @@ - \def>{{\tt \gtr}} - \catcode`\+=\active - \def+{{\tt \char 43}} -+\catcode`\$=\active -+\def${\ifusingit{{\sl\$}}\normaldollar} - %\catcode 27=\active - %\def^^[{$\diamondsuit$} - -@@ -4875,9 +5927,6 @@ - % \normalbackslash outputs one backslash in fixed width font. - \def\normalbackslash{{\tt\rawbackslashxx}} - --% Say @foo, not \foo, in error messages. --\escapechar=`\@ -- - % \catcode 17=0 % Define control-q - \catcode`\\=\active - -@@ -4891,7 +5940,8 @@ - @let|=@normalverticalbar - @let<=@normalless - @let>=@normalgreater --@let+=@normalplus} -+@let+=@normalplus -+@let$=@normaldollar} - - @def@normalturnoffactive{@let"=@normaldoublequote - @let\=@normalbackslash -@@ -4901,7 +5951,8 @@ - @let|=@normalverticalbar - @let<=@normalless - @let>=@normalgreater --@let+=@normalplus} -+@let+=@normalplus -+@let$=@normaldollar} - - % Make _ and + \other characters, temporarily. - % This is canceled by @fixbackslash. -@@ -4920,16 +5971,29 @@ - % Also back turn on active characters that might appear in the input - % file name, in case not using a pre-dumped format. - % --@gdef@fixbackslash{@ifx\@eatinput @let\ = @normalbackslash @fi -- @catcode`+=@active @catcode`@_=@active} -+@gdef@fixbackslash{% -+ @ifx\@eatinput @let\ = @normalbackslash @fi -+ @catcode`+=@active -+ @catcode`@_=@active -+} -+ -+% Say @foo, not \foo, in error messages. -+@escapechar = `@@ - --%% These look ok in all fonts, so just make them not special. The @rm below --%% makes sure that the current font starts out as the newly loaded cmr10 --@catcode`@$=@other @catcode`@%=@other @catcode`@&=@other @catcode`@#=@other -+% These look ok in all fonts, so just make them not special. -+@catcode`@& = @other -+@catcode`@# = @other -+@catcode`@% = @other - -+@c Set initial fonts. - @textfonts - @rm - -+ - @c Local variables: -+@c eval: (add-hook 'write-file-hooks 'time-stamp) - @c page-delimiter: "^\\\\message" -+@c time-stamp-start: "def\\\\texinfoversion{" -+@c time-stamp-format: "%:y-%02m-%02d.%02H" -+@c time-stamp-end: "}" - @c End: |