diff options
Diffstat (limited to 'aux-build/texinfo.tex')
| -rw-r--r-- | aux-build/texinfo.tex | 3583 | 
1 files changed, 2894 insertions, 689 deletions
| diff --git a/aux-build/texinfo.tex b/aux-build/texinfo.tex index c93912a..9140826 100644 --- a/aux-build/texinfo.tex +++ b/aux-build/texinfo.tex @@ -1,18 +1,18 @@  % 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{2004-11-25.16} +\def\texinfoversion{2009-08-14.15}  % -% Copyright (C) 1985, 1986, 1988, 1990, 1991, 1992, 1993, 1994, 1995, -% 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004 Free Software -% Foundation, Inc. +% Copyright 1985, 1986, 1988, 1990, 1991, 1992, 1993, 1994, 1995, +% 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, +% 2007, 2008, 2009 Free Software Foundation, Inc.  % -% This texinfo.tex file is free software; you can redistribute it and/or +% This texinfo.tex file is free software: you can redistribute it and/or  % modify it under the terms of the GNU General Public License as -% published by the Free Software Foundation; either version 2, or (at -% your option) any later version. +% published by the Free Software Foundation, either version 3 of the +% License, 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 @@ -20,9 +20,7 @@  % 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. +% along with this program.  If not, see <http://www.gnu.org/licenses/>.  %  % As a special exception, when this file is read by TeX when processing  % a Texinfo source document, you may use the result without @@ -67,7 +65,7 @@  \everyjob{\message{[Texinfo version \texinfoversion]}%    \catcode`+=\active \catcode`\_=\active} -\message{Basics,} +  \chardef\other=12  % We never want plain's \outer definition of \+ in Texinfo. @@ -99,6 +97,10 @@  \let\ptexslash=\/  \let\ptexstar=\*  \let\ptext=\t +\let\ptextop=\top +{\catcode`\'=\active +\global\let\ptexquoteright'}% Math-mode def from plain.tex. +\let\ptexraggedright=\raggedright  % If this character appears in an error message or help string, it  % starts a new line in the output. @@ -153,20 +155,22 @@  \ifx\putwordDefopt\undefined    \gdef\putwordDefopt{User Option}\fi  \ifx\putwordDeffunc\undefined   \gdef\putwordDeffunc{Function}\fi -% In some macros, we cannot use the `\? notation---the left quote is -% in some cases the escape char. +% Since the category of space is not known, we have to be careful. +\chardef\spacecat = 10 +\def\spaceisspace{\catcode`\ =\spacecat} + +% sometimes characters are active, so we need control sequences.  \chardef\colonChar = `\:  \chardef\commaChar = `\, +\chardef\dashChar  = `\-  \chardef\dotChar   = `\.  \chardef\exclamChar= `\! +\chardef\lquoteChar= `\`  \chardef\questChar = `\? +\chardef\rquoteChar= `\'  \chardef\semiChar  = `\;  \chardef\underChar = `\_ -\chardef\spaceChar = `\ % -\chardef\spacecat = 10 -\def\spaceisspace{\catcode\spaceChar=\spacecat} -  % Ignore a token.  %  \def\gobble#1{} @@ -277,6 +281,50 @@  \newdimen\cornerthick \cornerthick=.3pt  \newdimen\topandbottommargin \topandbottommargin=.75in +% Output a mark which sets \thischapter, \thissection and \thiscolor. +% We dump everything together because we only have one kind of mark. +% This works because we only use \botmark / \topmark, not \firstmark. +% +% A mark contains a subexpression of the \ifcase ... \fi construct. +% \get*marks macros below extract the needed part using \ifcase. +% +% Another complication is to let the user choose whether \thischapter +% (\thissection) refers to the chapter (section) in effect at the top +% of a page, or that at the bottom of a page.  The solution is +% described on page 260 of The TeXbook.  It involves outputting two +% marks for the sectioning macros, one before the section break, and +% one after.  I won't pretend I can describe this better than DEK... +\def\domark{% +  \toks0=\expandafter{\lastchapterdefs}% +  \toks2=\expandafter{\lastsectiondefs}% +  \toks4=\expandafter{\prevchapterdefs}% +  \toks6=\expandafter{\prevsectiondefs}% +  \toks8=\expandafter{\lastcolordefs}% +  \mark{% +                   \the\toks0 \the\toks2 +      \noexpand\or \the\toks4 \the\toks6 +    \noexpand\else \the\toks8 +  }% +} +% \topmark doesn't work for the very first chapter (after the title +% page or the contents), so we use \firstmark there -- this gets us +% the mark with the chapter defs, unless the user sneaks in, e.g., +% @setcolor (or @url, or @link, etc.) between @contents and the very +% first @chapter. +\def\gettopheadingmarks{% +  \ifcase0\topmark\fi +  \ifx\thischapter\empty \ifcase0\firstmark\fi \fi +} +\def\getbottomheadingmarks{\ifcase1\botmark\fi} +\def\getcolormarks{\ifcase2\topmark\fi} + +% Avoid "undefined control sequence" errors. +\def\lastchapterdefs{} +\def\lastsectiondefs{} +\def\prevchapterdefs{} +\def\prevsectiondefs{} +\def\lastcolordefs{} +  % Main output routine.  \chardef\PAGE = 255  \output = {\onepageout{\pagecontents\PAGE}} @@ -294,7 +342,9 @@    %    % Do this outside of the \shipout so @code etc. will be expanded in    % the headline as they should be, not taken literally (outputting ''code). +  \ifodd\pageno \getoddheadingmarks \else \getevenheadingmarks \fi    \setbox\headlinebox = \vbox{\let\hsize=\pagewidth \makeheadline}% +  \ifodd\pageno \getoddfootingmarks \else \getevenfootingmarks \fi    \setbox\footlinebox = \vbox{\let\hsize=\pagewidth \makefootline}%    %    {% @@ -302,10 +352,14 @@      % take effect in \write's, yet the group defined by the \vbox ends      % before the \shipout runs.      % -    \escapechar = `\\     % use backslash in output files.      \indexdummies         % don't expand commands in the output.      \normalturnoffactive  % \ in index entries must not stay \, e.g., if -                   % the page break happens to be in the middle of an example. +               % the page break happens to be in the middle of an example. +               % We don't want .vr (or whatever) entries like this: +               % \entry{{\tt \indexbackslash }acronym}{32}{\code {\acronym}} +               % "\acronym" won't work when it's read back in; +               % it needs to be +               % {\code {{\tt \backslashcurfont }acronym}      \shipout\vbox{%        % Do this early so pdf references go to the beginning of the page.        \ifpdfmakepagedest \pdfdest name{\the\pageno} xyz\fi @@ -333,9 +387,9 @@        \pagebody{#1}%        \ifdim\ht\footlinebox > 0pt          % Only leave this space if the footline is nonempty. -        % (We lessened \vsize for it in \oddfootingxxx.) +        % (We lessened \vsize for it in \oddfootingyyy.)          % The \baselineskip=24pt in plain's \makefootline has no effect. -        \vskip 2\baselineskip +        \vskip 24pt          \unvbox\footlinebox        \fi        % @@ -356,7 +410,7 @@        \egroup % \vbox from first cropmarks clause        \fi      }% end of \shipout\vbox -  }% end of group with \normalturnoffactive +  }% end of group with \indexdummies    \advancepageno    \ifnum\outputpenalty>-20000 \else\dosupereject\fi  } @@ -369,7 +423,7 @@  % marginal hacks, juha@viisa.uucp (Juha Takala)  \ifvoid\margin\else % marginal info is present    \rlap{\kern\hsize\vbox to\z@{\kern1pt\box\margin \vss}}\fi -\dimen@=\dp#1 \unvbox#1 +\dimen@=\dp#1\relax \unvbox#1\relax  \ifvoid\footins\else\vskip\skip\footins\footnoterule \unvbox\footins\fi  \ifr@ggedbottom \kern-\dimen@ \vfil \fi}  } @@ -391,7 +445,7 @@  %  \def\parsearg{\parseargusing{}}  \def\parseargusing#1#2{% -  \def\next{#2}% +  \def\argtorun{#2}%    \begingroup      \obeylines      \spaceisspace @@ -410,7 +464,7 @@  \def\argremovecomment#1\comment#2\ArgTerm{\argremovec #1\c\ArgTerm}  \def\argremovec#1\c#2\ArgTerm{\argcheckspaces#1\^^M\ArgTerm} -% Each occurence of `\^^M' or `<space>\^^M' is replaced by a single space. +% Each occurrence of `\^^M' or `<space>\^^M' is replaced by a single space.  %  % \argremovec might leave us with trailing space, e.g.,  %    @end itemize  @c foo @@ -422,8 +476,7 @@  \def\argcheckspacesY#1\^^M#2\^^M#3\ArgTerm{%    \def\temp{#3}%    \ifx\temp\empty -    % We cannot use \next here, as it holds the macro to run; -    % thus we reuse \temp. +    % Do not use \next, perhaps the caller of \parsearg uses it; reuse \temp:      \let\temp\finishparsearg    \else      \let\temp\argcheckspaces @@ -435,14 +488,14 @@  % If a _delimited_ argument is enclosed in braces, they get stripped; so  % to get _exactly_ the rest of the line, we had to prevent such situation.  % We prepended an \empty token at the very beginning and we expand it now, -% just before passing the control to \next. -% (Similarily, we have to think about #3 of \argcheckspacesY above: it is +% just before passing the control to \argtorun. +% (Similarly, we have to think about #3 of \argcheckspacesY above: it is  % either the null string, or it ends with \^^M---thus there is no danger  % that a pair of braces would be stripped.  %  % But first, we have to remove the trailing space token.  % -\def\finishparsearg#1 \ArgTerm{\expandafter\next\expandafter{#1}} +\def\finishparsearg#1 \ArgTerm{\expandafter\argtorun\expandafter{#1}}  % \parseargdef\foo{...}  %	is roughly equivalent to @@ -493,12 +546,12 @@  % used to check whether the current environment is the one expected.  %  % Non-false conditionals (@iftex, @ifset) don't fit into this, so they -% are not treated as enviroments; they don't open a group.  (The +% are not treated as environments; they don't open a group.  (The  % implementation of @end takes care not to call \endgroup in this  % special case.) -% At runtime, environments start with this: +% At run-time, environments start with this:  \def\startenvironment#1{\begingroup\def\thisenv{#1}}  % initialize  \let\thisenv\empty @@ -516,7 +569,7 @@    \fi  } -% Evironment mismatch, #1 expected: +% Environment mismatch, #1 expected:  \def\badenverr{%    \errhelp = \EMsimple    \errmessage{This command can appear only \inenvironment\temp, @@ -566,7 +619,7 @@  \let\}=\myrbrace  \begingroup    % Definitions to produce \{ and \} commands for indices, -  % and @{ and @} for the aux file. +  % and @{ and @} for the aux/toc files.    \catcode`\{ = \other \catcode`\} = \other    \catcode`\[ = 1 \catcode`\] = 2    \catcode`\! = 0 \catcode`\\ = \other @@ -600,8 +653,8 @@  \def\jmacro{j}  \def\dotless#1{%    \def\temp{#1}% -  \ifx\temp\imacro \ptexi -  \else\ifx\temp\jmacro \j +  \ifx\temp\imacro \ifmmode\imath \else\ptexi \fi +  \else\ifx\temp\jmacro \ifmmode\jmath \else\j \fi    \else \errmessage{@dotless can be used only with i or j}%    \fi\fi  } @@ -647,13 +700,28 @@  \let\/=\allowbreak  % @. is an end-of-sentence period. -\def\.{.\spacefactor=3000 } +\def\.{.\spacefactor=\endofsentencespacefactor\space}  % @! is an end-of-sentence bang. -\def\!{!\spacefactor=3000 } +\def\!{!\spacefactor=\endofsentencespacefactor\space}  % @? is an end-of-sentence query. -\def\?{?\spacefactor=3000 } +\def\?{?\spacefactor=\endofsentencespacefactor\space} + +% @frenchspacing on|off  says whether to put extra space after punctuation. +% +\def\onword{on} +\def\offword{off} +% +\parseargdef\frenchspacing{% +  \def\temp{#1}% +  \ifx\temp\onword \plainfrenchspacing +  \else\ifx\temp\offword \plainnonfrenchspacing +  \else +    \errhelp = \EMsimple +    \errmessage{Unknown @frenchspacing option `\temp', must be on/off}% +  \fi\fi +}  % @w prevents a word break.  Without the \leavevmode, @w at the  % beginning of a paragraph, when TeX is still in vertical mode, would @@ -852,15 +920,20 @@ where each line of input produces a line of output.}    \temp  } -% @include file    insert text of that file as input. +% @include FILE -- \input text of FILE.  %  \def\include{\parseargusing\filenamecatcodes\includezzz}  \def\includezzz#1{%    \pushthisfilestack    \def\thisfile{#1}%    {% -    \makevalueexpandable -    \def\temp{\input #1 }% +    \makevalueexpandable  % we want to expand any @value in FILE. +    \turnoffactive        % and allow special characters in the expansion +    \indexnofonts         % Allow `@@' and other weird things in file names. +    \edef\temp{\noexpand\input #1 }% +    % +    % This trickery is to read FILE outside of a group, in case it makes +    % definitions, etc.      \expandafter    }\temp    \popthisfilestack @@ -875,6 +948,8 @@ where each line of input produces a line of output.}    \catcode`>=\other    \catcode`+=\other    \catcode`-=\other +  \catcode`\`=\other +  \catcode`\'=\other  }  \def\pushthisfilestack{% @@ -1031,9 +1106,9 @@ where each line of input produces a line of output.}  % _ active, and distinguish by seeing if the current family is \slfam,  % which is what @var uses.  { -  \catcode\underChar = \active +  \catcode`\_ = \active    \gdef\mathunderscore{% -    \catcode\underChar=\active +    \catcode`\_=\active      \def_{\ifnum\fam=\slfam \_\else\sb\fi}%    }  } @@ -1050,6 +1125,16 @@ where each line of input produces a line of output.}    \mathunderscore    \let\\ = \mathbackslash    \mathactive +  % make the texinfo accent commands work in math mode +  \let\"=\ddot +  \let\'=\acute +  \let\==\bar +  \let\^=\hat +  \let\`=\grave +  \let\u=\breve +  \let\v=\check +  \let\~=\tilde +  \let\dotaccent=\dot    $\finishmath  }  \def\finishmath#1{#1$\endgroup}  % Close the group opened by \tex. @@ -1063,28 +1148,41 @@ where each line of input produces a line of output.}    \catcode`< = \active    \catcode`> = \active    \catcode`+ = \active +  \catcode`' = \active    \gdef\mathactive{%      \let^ = \ptexhat      \let< = \ptexless      \let> = \ptexgtr      \let+ = \ptexplus +    \let' = \ptexquoteright    }  } -% @bullet and @minus need the same treatment as @math, just above. +% Some math mode symbols.  \def\bullet{$\ptexbullet$} -\def\minus{$-$} +\def\geq{\ifmmode \ge\else $\ge$\fi} +\def\leq{\ifmmode \le\else $\le$\fi} +\def\minus{\ifmmode -\else $-$\fi}  % @dots{} outputs 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. +% We do .5em per period so that it has the same spacing in the cm +% typewriter fonts as three actual period characters; on the other hand, +% in other typewriter fonts three periods are wider than 1.5em.  So do +% whichever is larger.  %  \def\dots{%    \leavevmode -  \hbox to 1.5em{% -    \hskip 0pt plus 0.25fil -    .\hfil.\hfil.% -    \hskip 0pt plus 0.5fil +  \setbox0=\hbox{...}% get width of three periods +  \ifdim\wd0 > 1.5em +    \dimen0 = \wd0 +  \else +    \dimen0 = 1.5em +  \fi +  \hbox to \dimen0{% +    \hskip 0pt plus.25fil +    .\hskip 0pt plus1fil +    .\hskip 0pt plus1fil +    .\hskip 0pt plus.5fil    }%  } @@ -1092,7 +1190,7 @@ where each line of input produces a line of output.}  %  \def\enddots{%    \dots -  \spacefactor=3000 +  \spacefactor=\endofsentencespacefactor  }  % @comma{} is so commas can be inserted into text without messing up @@ -1176,40 +1274,182 @@ where each line of input produces a line of output.}      \fi    \fi  \fi -% + +% PDF uses PostScript string constants for the names of xref targets, +% for display in the outlines, and in other places.  Thus, we have to +% double any backslashes.  Otherwise, a name like "\node" will be +% interpreted as a newline (\n), followed by o, d, e.  Not good. +% http://www.ntg.nl/pipermail/ntg-pdftex/2004-July/000654.html +% (and related messages, the final outcome is that it is up to the TeX +% user to double the backslashes and otherwise make the string valid, so +% that's what we do). + +% double active backslashes. +% +{\catcode`\@=0 \catcode`\\=\active + @gdef@activebackslashdouble{% +   @catcode`@\=@active +   @let\=@doublebackslash} +} + +% To handle parens, we must adopt a different approach, since parens are +% not active characters.  hyperref.dtx (which has the same problem as +% us) handles it with this amazing macro to replace tokens, with minor +% changes for Texinfo.  It is included here under the GPL by permission +% from the author, Heiko Oberdiek. +% +% #1 is the tokens to replace. +% #2 is the replacement. +% #3 is the control sequence with the string. +% +\def\HyPsdSubst#1#2#3{% +  \def\HyPsdReplace##1#1##2\END{% +    ##1% +    \ifx\\##2\\% +    \else +      #2% +      \HyReturnAfterFi{% +        \HyPsdReplace##2\END +      }% +    \fi +  }% +  \xdef#3{\expandafter\HyPsdReplace#3#1\END}% +} +\long\def\HyReturnAfterFi#1\fi{\fi#1} + +% #1 is a control sequence in which to do the replacements. +\def\backslashparens#1{% +  \xdef#1{#1}% redefine it as its expansion; the definition is simply +             % \lastnode when called from \setref -> \pdfmkdest. +  \HyPsdSubst{(}{\realbackslash(}{#1}% +  \HyPsdSubst{)}{\realbackslash)}{#1}% +} + +\newhelp\nopdfimagehelp{Texinfo supports .png, .jpg, .jpeg, and .pdf images +with PDF output, and none of those formats could be found.  (.eps cannot +be supported due to the design of the PDF format; use regular TeX (DVI +output) for that.)} +  \ifpdf -  \input pdfcolor -  \pdfcatalog{/PageMode /UseOutlines}% +  % +  % Color manipulation macros based on pdfcolor.tex, +  % except using rgb instead of cmyk; the latter is said to render as a +  % very dark gray on-screen and a very dark halftone in print, instead +  % of actual black. +  \def\rgbDarkRed{0.50 0.09 0.12} +  \def\rgbBlack{0 0 0} +  % +  % k sets the color for filling (usual text, etc.); +  % K sets the color for stroking (thin rules, e.g., normal _'s). +  \def\pdfsetcolor#1{\pdfliteral{#1 rg  #1 RG}} +  % +  % Set color, and create a mark which defines \thiscolor accordingly, +  % so that \makeheadline knows which color to restore. +  \def\setcolor#1{% +    \xdef\lastcolordefs{\gdef\noexpand\thiscolor{#1}}% +    \domark +    \pdfsetcolor{#1}% +  } +  % +  \def\maincolor{\rgbBlack} +  \pdfsetcolor{\maincolor} +  \edef\thiscolor{\maincolor} +  \def\lastcolordefs{} +  % +  \def\makefootline{% +    \baselineskip24pt +    \line{\pdfsetcolor{\maincolor}\the\footline}% +  } +  % +  \def\makeheadline{% +    \vbox to 0pt{% +      \vskip-22.5pt +      \line{% +        \vbox to8.5pt{}% +        % Extract \thiscolor definition from the marks. +        \getcolormarks +        % Typeset the headline with \maincolor, then restore the color. +        \pdfsetcolor{\maincolor}\the\headline\pdfsetcolor{\thiscolor}% +      }% +      \vss +    }% +    \nointerlineskip +  } +  % +  % +  \pdfcatalog{/PageMode /UseOutlines} +  % +  % #1 is image name, #2 width (might be empty/whitespace), #3 height (ditto).    \def\dopdfimage#1#2#3{% -    \def\imagewidth{#2}% -    \def\imageheight{#3}% -    % without \immediate, pdftex seg faults when the same image is +    \def\imagewidth{#2}\setbox0 = \hbox{\ignorespaces #2}% +    \def\imageheight{#3}\setbox2 = \hbox{\ignorespaces #3}% +    % +    % pdftex (and the PDF format) support .png, .jpg, .pdf (among +    % others).  Let's try in that order. +    \let\pdfimgext=\empty +    \begingroup +      \openin 1 #1.png \ifeof 1 +        \openin 1 #1.jpg \ifeof 1 +          \openin 1 #1.jpeg \ifeof 1 +            \openin 1 #1.JPG \ifeof 1 +              \openin 1 #1.pdf \ifeof 1 +                \openin 1 #1.PDF \ifeof 1 +                  \errhelp = \nopdfimagehelp +                  \errmessage{Could not find image file #1 for pdf}% +                \else \gdef\pdfimgext{PDF}% +                \fi +              \else \gdef\pdfimgext{pdf}% +              \fi +            \else \gdef\pdfimgext{JPG}% +            \fi +          \else \gdef\pdfimgext{jpeg}% +          \fi +        \else \gdef\pdfimgext{jpg}% +        \fi +      \else \gdef\pdfimgext{png}% +      \fi +      \closein 1 +    \endgroup +    % +    % without \immediate, ancient pdftex seg faults when the same image is      % included twice.  (Version 3.14159-pre-1.0-unofficial-20010704.)      \ifnum\pdftexversion < 14        \immediate\pdfimage      \else        \immediate\pdfximage      \fi -      \ifx\empty\imagewidth\else width \imagewidth \fi -      \ifx\empty\imageheight\else height \imageheight \fi +      \ifdim \wd0 >0pt width \imagewidth \fi +      \ifdim \wd2 >0pt height \imageheight \fi        \ifnum\pdftexversion<13 -         #1.pdf% +         #1.\pdfimgext         \else -         {#1.pdf}% +         {#1.\pdfimgext}%         \fi      \ifnum\pdftexversion < 14 \else        \pdfrefximage \pdflastximage      \fi} +  %    \def\pdfmkdest#1{{% -    % We have to set dummies so commands such as @code in a section title -    % aren't expanded. -    \atdummies -    \normalturnoffactive -    \pdfdest name{#1} xyz% +    % We have to set dummies so commands such as @code, and characters +    % such as \, aren't expanded when present in a section title. +    \indexnofonts +    \turnoffactive +    \activebackslashdouble +    \makevalueexpandable +    \def\pdfdestname{#1}% +    \backslashparens\pdfdestname +    \safewhatsit{\pdfdest name{\pdfdestname} xyz}%    }} +  % +  % used to mark target names; must be expandable.    \def\pdfmkpgn#1{#1} -  \let\linkcolor = \Blue  % was Cyan, but that seems light? -  \def\endlink{\Black\pdfendlink} +  % +  % by default, use a color that is dark enough to print on paper as +  % nearly black, but still distinguishable for online viewing. +  \def\urlcolor{\rgbDarkRed} +  \def\linkcolor{\rgbDarkRed} +  \def\endlink{\setcolor{\maincolor}\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% @@ -1218,20 +1458,31 @@ where each line of input produces a line of output.}      \advance\tempnum by 1      \expandafter\xdef\csname#1\endcsname{\the\tempnum}}    % -  % #1 is the section text.  #2 is the pdf expression for the number -  % of subentries (or empty, for subsubsections).  #3 is the node -  % text, which might be empty if this toc entry had no -  % corresponding node.  #4 is the page number. +  % #1 is the section text, which is what will be displayed in the +  % outline by the pdf viewer.  #2 is the pdf expression for the number +  % of subentries (or empty, for subsubsections).  #3 is the node text, +  % which might be empty if this toc entry had no corresponding node. +  % #4 is the page number    %    \def\dopdfoutline#1#2#3#4{%      % Generate a link to the node text if that exists; else, use the      % page number.  We could generate a destination for the section      % text in the case where a section has no node, but it doesn't -    % seem worthwhile, since most documents are normally structured. +    % seem worth the trouble, since most documents are normally structured.      \def\pdfoutlinedest{#3}% -    \ifx\pdfoutlinedest\empty \def\pdfoutlinedest{#4}\fi +    \ifx\pdfoutlinedest\empty +      \def\pdfoutlinedest{#4}% +    \else +      % Doubled backslashes in the name. +      {\activebackslashdouble \xdef\pdfoutlinedest{#3}% +       \backslashparens\pdfoutlinedest}% +    \fi      % -    \pdfoutline goto name{\pdfmkpgn{\pdfoutlinedest}}#2{#1}% +    % Also double the backslashes in the display string. +    {\activebackslashdouble \xdef\pdfoutlinetext{#1}% +     \backslashparens\pdfoutlinetext}% +    % +    \pdfoutline goto name{\pdfmkpgn{\pdfoutlinedest}}#2{\pdfoutlinetext}%    }    %    \def\pdfmakeoutlines{% @@ -1272,7 +1523,7 @@ where each line of input produces a line of output.}        \def\unnsecentry{\numsecentry}%        \def\unnsubsecentry{\numsubsecentry}%        \def\unnsubsubsecentry{\numsubsubsecentry}% -      \input \jobname.toc +      \readdatafile{toc}%        %        % Read toc second time, this time actually producing the outlines.        % The `-' means take the \expnumber as the absolute number of @@ -1298,41 +1549,12 @@ where each line of input produces a line of output.}        % their "best" equivalent, based on the @documentencoding.  Right        % now, I guess we'll just let the pdf reader have its way.        \indexnofonts -      \turnoffactive -      \input \jobname.toc +      \setupdatafile +      \catcode`\\=\active \otherbackslash +      \input \tocreadfilename      \endgroup    }    % -  \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\skipspaces#1{\def\PP{#1}\def\D{|}%      \ifx\PP\D\let\nextsp\relax      \else\let\nextsp\skipspaces @@ -1347,11 +1569,23 @@ where each line of input produces a line of output.}    \else      \let \startlink \pdfstartlink    \fi +  % make a live url in pdf output.    \def\pdfurl#1{%      \begingroup -      \normalturnoffactive\def\@{@}% +      % it seems we really need yet another set of dummies; have not +      % tried to figure out what each command should do in the context +      % of @url.  for now, just make @/ a no-op, that's the only one +      % people have actually reported a problem with. +      % +      \normalturnoffactive +      \def\@{@}% +      \let\/=\empty        \makevalueexpandable -      \leavevmode\Red +      % do we want to go so far as to use \indexnofonts instead of just +      % special-casing \var here? +      \def\var##1{##1}% +      % +      \leavevmode\setcolor{\urlcolor}%        \startlink attr{/Border [0 0 0]}%          user{/Subtype /Link /A << /S /URI /URI (#1) >>}%      \endgroup} @@ -1378,13 +1612,15 @@ where each line of input produces a line of output.}      {\noexpand\pdflink{\the\toksC}}\toksC={}\global\countA=0}    \def\pdflink#1{%      \startlink attr{/Border [0 0 0]} goto name{\pdfmkpgn{#1}} -    \linkcolor #1\endlink} +    \setcolor{\linkcolor}#1\endlink}    \def\done{\edef\st{\global\noexpand\toksA={\the\toksB}}\st}  \else +  % non-pdf mode    \let\pdfmkdest = \gobble    \let\pdfurl = \gobble    \let\endlink = \relax -  \let\linkcolor = \relax +  \let\setcolor = \gobble +  \let\pdfsetcolor = \gobble    \let\pdfmakeoutlines = \relax  \fi  % \ifx\pdfoutput @@ -1410,6 +1646,10 @@ where each line of input produces a line of output.}  \def\bf{\fam=\bffam \setfontstyle{bf}}\def\bfstylename{bf}  \def\tt{\fam=\ttfam \setfontstyle{tt}} +% Unfortunately, we have to override this for titles and the like, since +% in those cases "rm" is bold.  Sigh. +\def\rmisbold{\rm\def\curfontstyle{bf}} +  % Texinfo sort of supports the sans serif font style, which plain TeX does not.  % So we set up a \sf.  \newfam\sffam @@ -1419,6 +1659,7 @@ where each line of input produces a line of output.}  % We don't need math for this font style.  \def\ttsl{\setfontstyle{ttsl}} +  % Default leading.  \newdimen\textleading  \textleading = 13.2pt @@ -1430,8 +1671,12 @@ where each line of input produces a line of output.}  \def\strutheightpercent{.70833}  \def\strutdepthpercent {.29167}  % +% can get a sort of poor man's double spacing by redefining this. +\def\baselinefactor{1} +%  \def\setleading#1{% -  \normalbaselineskip = #1\relax +  \dimen0 = #1\relax +  \normalbaselineskip = \baselinefactor\dimen0    \normallineskip = \lineskipfactor\normalbaselineskip    \normalbaselines    \setbox\strutbox =\hbox{% @@ -1440,10 +1685,279 @@ where each line of input produces a line of output.}    }%  } +% PDF CMaps.  See also LaTeX's t1.cmap. +% +% do nothing with this by default. +\expandafter\let\csname cmapOT1\endcsname\gobble +\expandafter\let\csname cmapOT1IT\endcsname\gobble +\expandafter\let\csname cmapOT1TT\endcsname\gobble + +% if we are producing pdf, and we have \pdffontattr, then define cmaps. +% (\pdffontattr was introduced many years ago, but people still run +% older pdftex's; it's easy to conditionalize, so we do.) +\ifpdf \ifx\pdffontattr\undefined \else +  \begingroup +    \catcode`\^^M=\active \def^^M{^^J}% Output line endings as the ^^J char. +    \catcode`\%=12 \immediate\pdfobj stream {%!PS-Adobe-3.0 Resource-CMap +%%DocumentNeededResources: ProcSet (CIDInit) +%%IncludeResource: ProcSet (CIDInit) +%%BeginResource: CMap (TeX-OT1-0) +%%Title: (TeX-OT1-0 TeX OT1 0) +%%Version: 1.000 +%%EndComments +/CIDInit /ProcSet findresource begin +12 dict begin +begincmap +/CIDSystemInfo +<< /Registry (TeX) +/Ordering (OT1) +/Supplement 0 +>> def +/CMapName /TeX-OT1-0 def +/CMapType 2 def +1 begincodespacerange +<00> <7F> +endcodespacerange +8 beginbfrange +<00> <01> <0393> +<09> <0A> <03A8> +<23> <26> <0023> +<28> <3B> <0028> +<3F> <5B> <003F> +<5D> <5E> <005D> +<61> <7A> <0061> +<7B> <7C> <2013> +endbfrange +40 beginbfchar +<02> <0398> +<03> <039B> +<04> <039E> +<05> <03A0> +<06> <03A3> +<07> <03D2> +<08> <03A6> +<0B> <00660066> +<0C> <00660069> +<0D> <0066006C> +<0E> <006600660069> +<0F> <00660066006C> +<10> <0131> +<11> <0237> +<12> <0060> +<13> <00B4> +<14> <02C7> +<15> <02D8> +<16> <00AF> +<17> <02DA> +<18> <00B8> +<19> <00DF> +<1A> <00E6> +<1B> <0153> +<1C> <00F8> +<1D> <00C6> +<1E> <0152> +<1F> <00D8> +<21> <0021> +<22> <201D> +<27> <2019> +<3C> <00A1> +<3D> <003D> +<3E> <00BF> +<5C> <201C> +<5F> <02D9> +<60> <2018> +<7D> <02DD> +<7E> <007E> +<7F> <00A8> +endbfchar +endcmap +CMapName currentdict /CMap defineresource pop +end +end +%%EndResource +%%EOF +    }\endgroup +  \expandafter\edef\csname cmapOT1\endcsname#1{% +    \pdffontattr#1{/ToUnicode \the\pdflastobj\space 0 R}% +  }% +% +% \cmapOT1IT +  \begingroup +    \catcode`\^^M=\active \def^^M{^^J}% Output line endings as the ^^J char. +    \catcode`\%=12 \immediate\pdfobj stream {%!PS-Adobe-3.0 Resource-CMap +%%DocumentNeededResources: ProcSet (CIDInit) +%%IncludeResource: ProcSet (CIDInit) +%%BeginResource: CMap (TeX-OT1IT-0) +%%Title: (TeX-OT1IT-0 TeX OT1IT 0) +%%Version: 1.000 +%%EndComments +/CIDInit /ProcSet findresource begin +12 dict begin +begincmap +/CIDSystemInfo +<< /Registry (TeX) +/Ordering (OT1IT) +/Supplement 0 +>> def +/CMapName /TeX-OT1IT-0 def +/CMapType 2 def +1 begincodespacerange +<00> <7F> +endcodespacerange +8 beginbfrange +<00> <01> <0393> +<09> <0A> <03A8> +<25> <26> <0025> +<28> <3B> <0028> +<3F> <5B> <003F> +<5D> <5E> <005D> +<61> <7A> <0061> +<7B> <7C> <2013> +endbfrange +42 beginbfchar +<02> <0398> +<03> <039B> +<04> <039E> +<05> <03A0> +<06> <03A3> +<07> <03D2> +<08> <03A6> +<0B> <00660066> +<0C> <00660069> +<0D> <0066006C> +<0E> <006600660069> +<0F> <00660066006C> +<10> <0131> +<11> <0237> +<12> <0060> +<13> <00B4> +<14> <02C7> +<15> <02D8> +<16> <00AF> +<17> <02DA> +<18> <00B8> +<19> <00DF> +<1A> <00E6> +<1B> <0153> +<1C> <00F8> +<1D> <00C6> +<1E> <0152> +<1F> <00D8> +<21> <0021> +<22> <201D> +<23> <0023> +<24> <00A3> +<27> <2019> +<3C> <00A1> +<3D> <003D> +<3E> <00BF> +<5C> <201C> +<5F> <02D9> +<60> <2018> +<7D> <02DD> +<7E> <007E> +<7F> <00A8> +endbfchar +endcmap +CMapName currentdict /CMap defineresource pop +end +end +%%EndResource +%%EOF +    }\endgroup +  \expandafter\edef\csname cmapOT1IT\endcsname#1{% +    \pdffontattr#1{/ToUnicode \the\pdflastobj\space 0 R}% +  }% +% +% \cmapOT1TT +  \begingroup +    \catcode`\^^M=\active \def^^M{^^J}% Output line endings as the ^^J char. +    \catcode`\%=12 \immediate\pdfobj stream {%!PS-Adobe-3.0 Resource-CMap +%%DocumentNeededResources: ProcSet (CIDInit) +%%IncludeResource: ProcSet (CIDInit) +%%BeginResource: CMap (TeX-OT1TT-0) +%%Title: (TeX-OT1TT-0 TeX OT1TT 0) +%%Version: 1.000 +%%EndComments +/CIDInit /ProcSet findresource begin +12 dict begin +begincmap +/CIDSystemInfo +<< /Registry (TeX) +/Ordering (OT1TT) +/Supplement 0 +>> def +/CMapName /TeX-OT1TT-0 def +/CMapType 2 def +1 begincodespacerange +<00> <7F> +endcodespacerange +5 beginbfrange +<00> <01> <0393> +<09> <0A> <03A8> +<21> <26> <0021> +<28> <5F> <0028> +<61> <7E> <0061> +endbfrange +32 beginbfchar +<02> <0398> +<03> <039B> +<04> <039E> +<05> <03A0> +<06> <03A3> +<07> <03D2> +<08> <03A6> +<0B> <2191> +<0C> <2193> +<0D> <0027> +<0E> <00A1> +<0F> <00BF> +<10> <0131> +<11> <0237> +<12> <0060> +<13> <00B4> +<14> <02C7> +<15> <02D8> +<16> <00AF> +<17> <02DA> +<18> <00B8> +<19> <00DF> +<1A> <00E6> +<1B> <0153> +<1C> <00F8> +<1D> <00C6> +<1E> <0152> +<1F> <00D8> +<20> <2423> +<27> <2019> +<60> <2018> +<7F> <00A8> +endbfchar +endcmap +CMapName currentdict /CMap defineresource pop +end +end +%%EndResource +%%EOF +    }\endgroup +  \expandafter\edef\csname cmapOT1TT\endcsname#1{% +    \pdffontattr#1{/ToUnicode \the\pdflastobj\space 0 R}% +  }% +\fi\fi + +  % Set the font macro #1 to the font named #2, adding on the  % specified font prefix (normally `cm'). -% #3 is the font's design size, #4 is a scale factor -\def\setfont#1#2#3#4{\font#1=\fontprefix#2#3 scaled #4} +% #3 is the font's design size, #4 is a scale factor, #5 is the CMap +% encoding (currently only OT1, OT1IT and OT1TT are allowed, pass +% empty to omit). +\def\setfont#1#2#3#4#5{% +  \font#1=\fontprefix#2#3 scaled #4 +  \csname cmap#5\endcsname#1% +} +% This is what gets called when #5 of \setfont is empty. +\let\cmap\gobble +% emacs-page end of cmaps  % Use cm as the default font prefix.  % To specify the font prefix, you must define \fontprefix @@ -1468,118 +1982,293 @@ where each line of input produces a line of output.}  \def\scshape{csc}  \def\scbshape{csc} +% Definitions for a main text size of 11pt.  This is the default in +% Texinfo. +% +\def\definetextfontsizexi{%  % Text fonts (11.2pt, magstep1).  \def\textnominalsize{11pt}  \edef\mainmagstep{\magstephalf} -\setfont\textrm\rmshape{10}{\mainmagstep} -\setfont\texttt\ttshape{10}{\mainmagstep} -\setfont\textbf\bfshape{10}{\mainmagstep} -\setfont\textit\itshape{10}{\mainmagstep} -\setfont\textsl\slshape{10}{\mainmagstep} -\setfont\textsf\sfshape{10}{\mainmagstep} -\setfont\textsc\scshape{10}{\mainmagstep} -\setfont\textttsl\ttslshape{10}{\mainmagstep} +\setfont\textrm\rmshape{10}{\mainmagstep}{OT1} +\setfont\texttt\ttshape{10}{\mainmagstep}{OT1TT} +\setfont\textbf\bfshape{10}{\mainmagstep}{OT1} +\setfont\textit\itshape{10}{\mainmagstep}{OT1IT} +\setfont\textsl\slshape{10}{\mainmagstep}{OT1} +\setfont\textsf\sfshape{10}{\mainmagstep}{OT1} +\setfont\textsc\scshape{10}{\mainmagstep}{OT1} +\setfont\textttsl\ttslshape{10}{\mainmagstep}{OT1TT}  \font\texti=cmmi10 scaled \mainmagstep  \font\textsy=cmsy10 scaled \mainmagstep +\def\textecsize{1095}  % A few fonts for @defun names and args. -\setfont\defbf\bfshape{10}{\magstep1} -\setfont\deftt\ttshape{10}{\magstep1} -\setfont\defttsl\ttslshape{10}{\magstep1} +\setfont\defbf\bfshape{10}{\magstep1}{OT1} +\setfont\deftt\ttshape{10}{\magstep1}{OT1TT} +\setfont\defttsl\ttslshape{10}{\magstep1}{OT1TT}  \def\df{\let\tentt=\deftt \let\tenbf = \defbf \let\tenttsl=\defttsl \bf}  % Fonts for indices, footnotes, small examples (9pt).  \def\smallnominalsize{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} +\setfont\smallrm\rmshape{9}{1000}{OT1} +\setfont\smalltt\ttshape{9}{1000}{OT1TT} +\setfont\smallbf\bfshape{10}{900}{OT1} +\setfont\smallit\itshape{9}{1000}{OT1IT} +\setfont\smallsl\slshape{9}{1000}{OT1} +\setfont\smallsf\sfshape{9}{1000}{OT1} +\setfont\smallsc\scshape{10}{900}{OT1} +\setfont\smallttsl\ttslshape{10}{900}{OT1TT}  \font\smalli=cmmi9  \font\smallsy=cmsy9 +\def\smallecsize{0900}  % Fonts for small examples (8pt).  \def\smallernominalsize{8pt} -\setfont\smallerrm\rmshape{8}{1000} -\setfont\smallertt\ttshape{8}{1000} -\setfont\smallerbf\bfshape{10}{800} -\setfont\smallerit\itshape{8}{1000} -\setfont\smallersl\slshape{8}{1000} -\setfont\smallersf\sfshape{8}{1000} -\setfont\smallersc\scshape{10}{800} -\setfont\smallerttsl\ttslshape{10}{800} +\setfont\smallerrm\rmshape{8}{1000}{OT1} +\setfont\smallertt\ttshape{8}{1000}{OT1TT} +\setfont\smallerbf\bfshape{10}{800}{OT1} +\setfont\smallerit\itshape{8}{1000}{OT1IT} +\setfont\smallersl\slshape{8}{1000}{OT1} +\setfont\smallersf\sfshape{8}{1000}{OT1} +\setfont\smallersc\scshape{10}{800}{OT1} +\setfont\smallerttsl\ttslshape{10}{800}{OT1TT}  \font\smalleri=cmmi8  \font\smallersy=cmsy8 +\def\smallerecsize{0800}  % Fonts for title page (20.4pt):  \def\titlenominalsize{20pt} -\setfont\titlerm\rmbshape{12}{\magstep3} -\setfont\titleit\itbshape{10}{\magstep4} -\setfont\titlesl\slbshape{10}{\magstep4} -\setfont\titlett\ttbshape{12}{\magstep3} -\setfont\titlettsl\ttslshape{10}{\magstep4} -\setfont\titlesf\sfbshape{17}{\magstep1} +\setfont\titlerm\rmbshape{12}{\magstep3}{OT1} +\setfont\titleit\itbshape{10}{\magstep4}{OT1IT} +\setfont\titlesl\slbshape{10}{\magstep4}{OT1} +\setfont\titlett\ttbshape{12}{\magstep3}{OT1TT} +\setfont\titlettsl\ttslshape{10}{\magstep4}{OT1TT} +\setfont\titlesf\sfbshape{17}{\magstep1}{OT1}  \let\titlebf=\titlerm -\setfont\titlesc\scbshape{10}{\magstep4} +\setfont\titlesc\scbshape{10}{\magstep4}{OT1}  \font\titlei=cmmi12 scaled \magstep3  \font\titlesy=cmsy10 scaled \magstep4 -\def\authorrm{\secrm} -\def\authortt{\sectt} +\def\titleecsize{2074}  % Chapter (and unnumbered) fonts (17.28pt).  \def\chapnominalsize{17pt} -\setfont\chaprm\rmbshape{12}{\magstep2} -\setfont\chapit\itbshape{10}{\magstep3} -\setfont\chapsl\slbshape{10}{\magstep3} -\setfont\chaptt\ttbshape{12}{\magstep2} -\setfont\chapttsl\ttslshape{10}{\magstep3} -\setfont\chapsf\sfbshape{17}{1000} +\setfont\chaprm\rmbshape{12}{\magstep2}{OT1} +\setfont\chapit\itbshape{10}{\magstep3}{OT1IT} +\setfont\chapsl\slbshape{10}{\magstep3}{OT1} +\setfont\chaptt\ttbshape{12}{\magstep2}{OT1TT} +\setfont\chapttsl\ttslshape{10}{\magstep3}{OT1TT} +\setfont\chapsf\sfbshape{17}{1000}{OT1}  \let\chapbf=\chaprm -\setfont\chapsc\scbshape{10}{\magstep3} +\setfont\chapsc\scbshape{10}{\magstep3}{OT1}  \font\chapi=cmmi12 scaled \magstep2  \font\chapsy=cmsy10 scaled \magstep3 +\def\chapecsize{1728}  % Section fonts (14.4pt).  \def\secnominalsize{14pt} -\setfont\secrm\rmbshape{12}{\magstep1} -\setfont\secit\itbshape{10}{\magstep2} -\setfont\secsl\slbshape{10}{\magstep2} -\setfont\sectt\ttbshape{12}{\magstep1} -\setfont\secttsl\ttslshape{10}{\magstep2} -\setfont\secsf\sfbshape{12}{\magstep1} +\setfont\secrm\rmbshape{12}{\magstep1}{OT1} +\setfont\secit\itbshape{10}{\magstep2}{OT1IT} +\setfont\secsl\slbshape{10}{\magstep2}{OT1} +\setfont\sectt\ttbshape{12}{\magstep1}{OT1TT} +\setfont\secttsl\ttslshape{10}{\magstep2}{OT1TT} +\setfont\secsf\sfbshape{12}{\magstep1}{OT1}  \let\secbf\secrm -\setfont\secsc\scbshape{10}{\magstep2} +\setfont\secsc\scbshape{10}{\magstep2}{OT1}  \font\seci=cmmi12 scaled \magstep1  \font\secsy=cmsy10 scaled \magstep2 +\def\sececsize{1440}  % Subsection fonts (13.15pt).  \def\ssecnominalsize{13pt} -\setfont\ssecrm\rmbshape{12}{\magstephalf} -\setfont\ssecit\itbshape{10}{1315} -\setfont\ssecsl\slbshape{10}{1315} -\setfont\ssectt\ttbshape{12}{\magstephalf} -\setfont\ssecttsl\ttslshape{10}{1315} -\setfont\ssecsf\sfbshape{12}{\magstephalf} +\setfont\ssecrm\rmbshape{12}{\magstephalf}{OT1} +\setfont\ssecit\itbshape{10}{1315}{OT1IT} +\setfont\ssecsl\slbshape{10}{1315}{OT1} +\setfont\ssectt\ttbshape{12}{\magstephalf}{OT1TT} +\setfont\ssecttsl\ttslshape{10}{1315}{OT1TT} +\setfont\ssecsf\sfbshape{12}{\magstephalf}{OT1}  \let\ssecbf\ssecrm -\setfont\ssecsc\scbshape{10}{1315} +\setfont\ssecsc\scbshape{10}{1315}{OT1}  \font\sseci=cmmi12 scaled \magstephalf  \font\ssecsy=cmsy10 scaled 1315 +\def\ssececsize{1200}  % Reduced fonts for @acro in text (10pt).  \def\reducednominalsize{10pt} -\setfont\reducedrm\rmshape{10}{1000} -\setfont\reducedtt\ttshape{10}{1000} -\setfont\reducedbf\bfshape{10}{1000} -\setfont\reducedit\itshape{10}{1000} -\setfont\reducedsl\slshape{10}{1000} -\setfont\reducedsf\sfshape{10}{1000} -\setfont\reducedsc\scshape{10}{1000} -\setfont\reducedttsl\ttslshape{10}{1000} +\setfont\reducedrm\rmshape{10}{1000}{OT1} +\setfont\reducedtt\ttshape{10}{1000}{OT1TT} +\setfont\reducedbf\bfshape{10}{1000}{OT1} +\setfont\reducedit\itshape{10}{1000}{OT1IT} +\setfont\reducedsl\slshape{10}{1000}{OT1} +\setfont\reducedsf\sfshape{10}{1000}{OT1} +\setfont\reducedsc\scshape{10}{1000}{OT1} +\setfont\reducedttsl\ttslshape{10}{1000}{OT1TT}  \font\reducedi=cmmi10  \font\reducedsy=cmsy10 +\def\reducedecsize{1000} + +% reset the current fonts +\textfonts +\rm +} % end of 11pt text font size definitions + + +% Definitions to make the main text be 10pt Computer Modern, with +% section, chapter, etc., sizes following suit.  This is for the GNU +% Press printing of the Emacs 22 manual.  Maybe other manuals in the +% future.  Used with @smallbook, which sets the leading to 12pt. +% +\def\definetextfontsizex{% +% Text fonts (10pt). +\def\textnominalsize{10pt} +\edef\mainmagstep{1000} +\setfont\textrm\rmshape{10}{\mainmagstep}{OT1} +\setfont\texttt\ttshape{10}{\mainmagstep}{OT1TT} +\setfont\textbf\bfshape{10}{\mainmagstep}{OT1} +\setfont\textit\itshape{10}{\mainmagstep}{OT1IT} +\setfont\textsl\slshape{10}{\mainmagstep}{OT1} +\setfont\textsf\sfshape{10}{\mainmagstep}{OT1} +\setfont\textsc\scshape{10}{\mainmagstep}{OT1} +\setfont\textttsl\ttslshape{10}{\mainmagstep}{OT1TT} +\font\texti=cmmi10 scaled \mainmagstep +\font\textsy=cmsy10 scaled \mainmagstep +\def\textecsize{1000} + +% A few fonts for @defun names and args. +\setfont\defbf\bfshape{10}{\magstephalf}{OT1} +\setfont\deftt\ttshape{10}{\magstephalf}{OT1TT} +\setfont\defttsl\ttslshape{10}{\magstephalf}{OT1TT} +\def\df{\let\tentt=\deftt \let\tenbf = \defbf \let\tenttsl=\defttsl \bf} + +% Fonts for indices, footnotes, small examples (9pt). +\def\smallnominalsize{9pt} +\setfont\smallrm\rmshape{9}{1000}{OT1} +\setfont\smalltt\ttshape{9}{1000}{OT1TT} +\setfont\smallbf\bfshape{10}{900}{OT1} +\setfont\smallit\itshape{9}{1000}{OT1IT} +\setfont\smallsl\slshape{9}{1000}{OT1} +\setfont\smallsf\sfshape{9}{1000}{OT1} +\setfont\smallsc\scshape{10}{900}{OT1} +\setfont\smallttsl\ttslshape{10}{900}{OT1TT} +\font\smalli=cmmi9 +\font\smallsy=cmsy9 +\def\smallecsize{0900} + +% Fonts for small examples (8pt). +\def\smallernominalsize{8pt} +\setfont\smallerrm\rmshape{8}{1000}{OT1} +\setfont\smallertt\ttshape{8}{1000}{OT1TT} +\setfont\smallerbf\bfshape{10}{800}{OT1} +\setfont\smallerit\itshape{8}{1000}{OT1IT} +\setfont\smallersl\slshape{8}{1000}{OT1} +\setfont\smallersf\sfshape{8}{1000}{OT1} +\setfont\smallersc\scshape{10}{800}{OT1} +\setfont\smallerttsl\ttslshape{10}{800}{OT1TT} +\font\smalleri=cmmi8 +\font\smallersy=cmsy8 +\def\smallerecsize{0800} + +% Fonts for title page (20.4pt): +\def\titlenominalsize{20pt} +\setfont\titlerm\rmbshape{12}{\magstep3}{OT1} +\setfont\titleit\itbshape{10}{\magstep4}{OT1IT} +\setfont\titlesl\slbshape{10}{\magstep4}{OT1} +\setfont\titlett\ttbshape{12}{\magstep3}{OT1TT} +\setfont\titlettsl\ttslshape{10}{\magstep4}{OT1TT} +\setfont\titlesf\sfbshape{17}{\magstep1}{OT1} +\let\titlebf=\titlerm +\setfont\titlesc\scbshape{10}{\magstep4}{OT1} +\font\titlei=cmmi12 scaled \magstep3 +\font\titlesy=cmsy10 scaled \magstep4 +\def\titleecsize{2074} + +% Chapter fonts (14.4pt). +\def\chapnominalsize{14pt} +\setfont\chaprm\rmbshape{12}{\magstep1}{OT1} +\setfont\chapit\itbshape{10}{\magstep2}{OT1IT} +\setfont\chapsl\slbshape{10}{\magstep2}{OT1} +\setfont\chaptt\ttbshape{12}{\magstep1}{OT1TT} +\setfont\chapttsl\ttslshape{10}{\magstep2}{OT1TT} +\setfont\chapsf\sfbshape{12}{\magstep1}{OT1} +\let\chapbf\chaprm +\setfont\chapsc\scbshape{10}{\magstep2}{OT1} +\font\chapi=cmmi12 scaled \magstep1 +\font\chapsy=cmsy10 scaled \magstep2 +\def\chapecsize{1440} + +% Section fonts (12pt). +\def\secnominalsize{12pt} +\setfont\secrm\rmbshape{12}{1000}{OT1} +\setfont\secit\itbshape{10}{\magstep1}{OT1IT} +\setfont\secsl\slbshape{10}{\magstep1}{OT1} +\setfont\sectt\ttbshape{12}{1000}{OT1TT} +\setfont\secttsl\ttslshape{10}{\magstep1}{OT1TT} +\setfont\secsf\sfbshape{12}{1000}{OT1} +\let\secbf\secrm +\setfont\secsc\scbshape{10}{\magstep1}{OT1} +\font\seci=cmmi12 +\font\secsy=cmsy10 scaled \magstep1 +\def\sececsize{1200} + +% Subsection fonts (10pt). +\def\ssecnominalsize{10pt} +\setfont\ssecrm\rmbshape{10}{1000}{OT1} +\setfont\ssecit\itbshape{10}{1000}{OT1IT} +\setfont\ssecsl\slbshape{10}{1000}{OT1} +\setfont\ssectt\ttbshape{10}{1000}{OT1TT} +\setfont\ssecttsl\ttslshape{10}{1000}{OT1TT} +\setfont\ssecsf\sfbshape{10}{1000}{OT1} +\let\ssecbf\ssecrm +\setfont\ssecsc\scbshape{10}{1000}{OT1} +\font\sseci=cmmi10 +\font\ssecsy=cmsy10 +\def\ssececsize{1000} + +% Reduced fonts for @acro in text (9pt). +\def\reducednominalsize{9pt} +\setfont\reducedrm\rmshape{9}{1000}{OT1} +\setfont\reducedtt\ttshape{9}{1000}{OT1TT} +\setfont\reducedbf\bfshape{10}{900}{OT1} +\setfont\reducedit\itshape{9}{1000}{OT1IT} +\setfont\reducedsl\slshape{9}{1000}{OT1} +\setfont\reducedsf\sfshape{9}{1000}{OT1} +\setfont\reducedsc\scshape{10}{900}{OT1} +\setfont\reducedttsl\ttslshape{10}{900}{OT1TT} +\font\reducedi=cmmi9 +\font\reducedsy=cmsy9 +\def\reducedecsize{0900} + +% reduce space between paragraphs +\divide\parskip by 2 + +% reset the current fonts +\textfonts +\rm +} % end of 10pt text font size definitions + + +% We provide the user-level command +%   @fonttextsize 10 +% (or 11) to redefine the text font size.  pt is assumed. +% +\def\xword{10} +\def\xiword{11} +% +\parseargdef\fonttextsize{% +  \def\textsizearg{#1}% +  \wlog{doing @fonttextsize \textsizearg}% +  % +  % Set \globaldefs so that documents can use this inside @tex, since +  % makeinfo 4.8 does not support it, but we need it nonetheless. +  % + \begingroup \globaldefs=1 +  \ifx\textsizearg\xword \definetextfontsizex +  \else \ifx\textsizearg\xiword \definetextfontsizexi +  \else +    \errhelp=\EMsimple +    \errmessage{@fonttextsize only supports `10' or `11', not `\textsizearg'} +  \fi\fi + \endgroup +} +  % In order for the font changes to affect most math symbols and letters,  % we have to define the \textfont of the standard families.  Since @@ -1620,7 +2309,7 @@ where each line of input produces a line of output.}    \def\curfontsize{title}%    \def\lsize{chap}\def\lllsize{subsec}%    \resetmathfonts \setleading{25pt}} -\def\titlefont#1{{\titlefonts\rm #1}} +\def\titlefont#1{{\titlefonts\rmisbold #1}}  \def\chapfonts{%    \let\tenrm=\chaprm \let\tenit=\chapit \let\tensl=\chapsl    \let\tenbf=\chapbf \let\tentt=\chaptt \let\smallcaps=\chapsc @@ -1671,6 +2360,16 @@ where each line of input produces a line of output.}    \def\lsize{smaller}\def\lllsize{smaller}%    \resetmathfonts \setleading{9.5pt}} +% Fonts for short table of contents. +\setfont\shortcontrm\rmshape{12}{1000}{OT1} +\setfont\shortcontbf\bfshape{10}{\magstep1}{OT1}  % no cmb12 +\setfont\shortcontsl\slshape{12}{1000}{OT1} +\setfont\shortconttt\ttshape{12}{1000}{OT1TT} + +% Define these just so they can be easily changed for other fonts. +\def\angleleft{$\langle$} +\def\angleright{$\rangle$} +  % Set the fonts to use with the @small... environments.  \let\smallexamplefonts = \smallfonts @@ -1684,28 +2383,128 @@ where each line of input produces a line of output.}  %  % By the way, for comparison, here's what fits with @example (10pt):  %   8.5x11=71  smallbook=60  a4=75  a5=58 -% -% I wish the USA used A4 paper.  % --karl, 24jan03. -  % Set up the default fonts, so we can use them for creating boxes.  % -\textfonts \rm +\definetextfontsizexi -% Define these so they can be easily changed for other fonts. -\def\angleleft{$\langle$} -\def\angleright{$\rangle$} + +\message{markup,} + +% Check if we are currently using a typewriter font.  Since all the +% Computer Modern typewriter fonts have zero interword stretch (and +% shrink), and it is reasonable to expect all typewriter fonts to have +% this property, we can check that font parameter. +% +\def\ifmonospace{\ifdim\fontdimen3\font=0pt } + +% Markup style infrastructure.  \defmarkupstylesetup\INITMACRO will +% define and register \INITMACRO to be called on markup style changes. +% \INITMACRO can check \currentmarkupstyle for the innermost +% style and the set of \ifmarkupSTYLE switches for all styles +% currently in effect. +\newif\ifmarkupvar +\newif\ifmarkupsamp +\newif\ifmarkupkey +%\newif\ifmarkupfile % @file == @samp. +%\newif\ifmarkupoption % @option == @samp. +\newif\ifmarkupcode +\newif\ifmarkupkbd +%\newif\ifmarkupenv % @env == @code. +%\newif\ifmarkupcommand % @command == @code. +\newif\ifmarkuptex % @tex (and part of @math, for now). +\newif\ifmarkupexample +\newif\ifmarkupverb +\newif\ifmarkupverbatim + +\let\currentmarkupstyle\empty + +\def\setupmarkupstyle#1{% +  \csname markup#1true\endcsname +  \def\currentmarkupstyle{#1}% +  \markupstylesetup +} + +\let\markupstylesetup\empty + +\def\defmarkupstylesetup#1{% +  \expandafter\def\expandafter\markupstylesetup +    \expandafter{\markupstylesetup #1}% +  \def#1% +} + +% Markup style setup for left and right quotes. +\defmarkupstylesetup\markupsetuplq{% +  \expandafter\let\expandafter \temp \csname markupsetuplq\currentmarkupstyle\endcsname +  \ifx\temp\relax \markupsetuplqdefault \else \temp \fi +} + +\defmarkupstylesetup\markupsetuprq{% +  \expandafter\let\expandafter \temp \csname markupsetuprq\currentmarkupstyle\endcsname +  \ifx\temp\relax \markupsetuprqdefault \else \temp \fi +} + +{ +\catcode`\'=\active +\catcode`\`=\active + +\gdef\markupsetuplqdefault{\let`\lq} +\gdef\markupsetuprqdefault{\let'\rq} + +\gdef\markupsetcodequoteleft{\let`\codequoteleft} +\gdef\markupsetcodequoteright{\let'\codequoteright} + +\gdef\markupsetnoligaturesquoteleft{\let`\noligaturesquoteleft} +} + +\let\markupsetuplqcode \markupsetcodequoteleft +\let\markupsetuprqcode \markupsetcodequoteright +\let\markupsetuplqexample \markupsetcodequoteleft +\let\markupsetuprqexample \markupsetcodequoteright +\let\markupsetuplqverb \markupsetcodequoteleft +\let\markupsetuprqverb \markupsetcodequoteright +\let\markupsetuplqverbatim \markupsetcodequoteleft +\let\markupsetuprqverbatim \markupsetcodequoteright + +\let\markupsetuplqsamp \markupsetnoligaturesquoteleft +\let\markupsetuplqkbd \markupsetnoligaturesquoteleft + +% Allow an option to not replace quotes with a regular directed right +% quote/apostrophe (char 0x27), but instead use the undirected quote +% from cmtt (char 0x0d).  The undirected quote is ugly, so don't make it +% the default, but it works for pasting with more pdf viewers (at least +% evince), the lilypond developers report.  xpdf does work with the +% regular 0x27. +% +\def\codequoteright{% +  \expandafter\ifx\csname SETtxicodequoteundirected\endcsname\relax +    \expandafter\ifx\csname SETcodequoteundirected\endcsname\relax +      '% +    \else \char'15 \fi +  \else \char'15 \fi +} +% +% and a similar option for the left quote char vs. a grave accent. +% Modern fonts display ASCII 0x60 as a grave accent, so some people like +% the code environments to do likewise. +% +\def\codequoteleft{% +  \expandafter\ifx\csname SETtxicodequotebacktick\endcsname\relax +    \expandafter\ifx\csname SETcodequotebacktick\endcsname\relax +      % [Knuth] pp. 380,381,391 +      % \relax disables Spanish ligatures ?` and !` of \tt font. +      \relax`% +    \else \char'22 \fi +  \else \char'22 \fi +} + +% [Knuth] pp. 380,381,391, disable Spanish ligatures ?` and !` of \tt font. +\def\noligaturesquoteleft{\relax\lq}  % Count depth in font-changes, for error checks  \newcount\fontdepth \fontdepth=0 -% Fonts for short table of contents. -\setfont\shortcontrm\rmshape{12}{1000} -\setfont\shortcontbf\bfshape{10}{\magstep1}  % no cmb12 -\setfont\shortcontsl\slshape{12}{1000} -\setfont\shortconttt\ttshape{12}{1000} -  %% Add scribe-like font environments, plus @l for inline lisp (usually sans  %% serif) and @ii for TeX italic @@ -1720,17 +2519,22 @@ where each line of input produces a line of output.}  % @var is set to this for defun arguments.  \def\ttslanted#1{{\ttsl #1}\futurelet\next\smartitalicx} -% like \smartslanted except unconditionally use \sl.  We never want +% @cite is like \smartslanted except unconditionally use \sl.  We never want  % ttsl for book titles, do we?  \def\cite#1{{\sl #1}\futurelet\next\smartitalicx}  \let\i=\smartitalic  \let\slanted=\smartslanted -\let\var=\smartslanted +\def\var#1{{\setupmarkupstyle{var}\smartslanted{#1}}}  \let\dfn=\smartslanted  \let\emph=\smartitalic -% @b, explicit bold. +% Explicit font changes: @r, @sc, undocumented @ii. +\def\r#1{{\rm #1}}              % roman font +\def\sc#1{{\smallcaps#1}}       % smallcaps font +\def\ii#1{{\it #1}}             % italic font + +% @b, explicit bold.  Also @strong.  \def\b#1{{\bf #1}}  \let\strong=\b @@ -1749,27 +2553,48 @@ where each line of input produces a line of output.}  % sometimes \x has an active definition that messes things up.  %  \catcode`@=11 -  \def\frenchspacing{% +  \def\plainfrenchspacing{%      \sfcode\dotChar  =\@m \sfcode\questChar=\@m \sfcode\exclamChar=\@m      \sfcode\colonChar=\@m \sfcode\semiChar =\@m \sfcode\commaChar =\@m +    \def\endofsentencespacefactor{1000}% for @. and friends +  } +  \def\plainnonfrenchspacing{% +    \sfcode`\.3000\sfcode`\?3000\sfcode`\!3000 +    \sfcode`\:2000\sfcode`\;1500\sfcode`\,1250 +    \def\endofsentencespacefactor{3000}% for @. and friends    }  \catcode`@=\other +\def\endofsentencespacefactor{3000}% default +% @t, explicit typewriter.  \def\t#1{% -  {\tt \rawbackslash \frenchspacing #1}% +  {\tt \rawbackslash \plainfrenchspacing #1}%    \null  } -\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{\angleleft}}#1}}% -    \kern-0.4pt\hrule}% -  \kern-.06em\raise0.4pt\hbox{\angleright}}}} -% The old definition, with no lozenge: -%\def\key #1{{\ttsl \nohyphenation \uppercase{#1}}\null} + +% @samp. +\def\samp#1{{\setupmarkupstyle{samp}\lq\tclose{#1}\rq\null}} + +% definition of @key that produces a lozenge.  Doesn't adjust to text size. +%\setfont\keyrm\rmshape{8}{1000}{OT1} +%\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{\angleleft}}#1}}% +%    \kern-0.4pt\hrule}% +%  \kern-.06em\raise0.4pt\hbox{\angleright}}}} + +% definition of @key with no lozenge.  If the current font is already +% monospace, don't change it; that way, we respect @kbdinputstyle.  But +% if it isn't monospace, then use \tt. +% +\def\key#1{{\setupmarkupstyle{key}% +  \nohyphenation +  \ifmonospace\else\tt\fi +  #1}\null} + +% ctrl is no longer a Texinfo command.  \def\ctrl #1{{\tt \rawbackslash \hat}#1}  % @file, @option are the same as @samp. @@ -1793,7 +2618,7 @@ where each line of input produces a line of output.}      \nohyphenation      %      \rawbackslash -    \frenchspacing +    \plainfrenchspacing      #1%    }%    \null @@ -1809,12 +2634,21 @@ where each line of input produces a line of output.}  % and arrange explicitly to hyphenate at a dash.  %  -- rms.  { -  \catcode`\-=\active -  \catcode`\_=\active +  \catcode`\-=\active \catcode`\_=\active +  \catcode`\'=\active \catcode`\`=\active +  \global\let'=\rq \global\let`=\lq  % default definitions    %    \global\def\code{\begingroup -    \catcode`\-=\active \let-\codedash -    \catcode`\_=\active \let_\codeunder +    \setupmarkupstyle{code}% +    % The following should really be moved into \setupmarkupstyle handlers. +    \catcode\dashChar=\active  \catcode\underChar=\active +    \ifallowcodebreaks +     \let-\codedash +     \let_\codeunder +    \else +     \let-\realdash +     \let_\realunder +    \fi      \codex    }  } @@ -1834,43 +2668,73 @@ where each line of input produces a line of output.}  }  \def\codex #1{\tclose{#1}\endgroup} +% An additional complication: the above will allow breaks after, e.g., +% each of the four underscores in __typeof__.  This is undesirable in +% some manuals, especially if they don't have long identifiers in +% general.  @allowcodebreaks provides a way to control this. +% +\newif\ifallowcodebreaks  \allowcodebreakstrue + +\def\keywordtrue{true} +\def\keywordfalse{false} + +\parseargdef\allowcodebreaks{% +  \def\txiarg{#1}% +  \ifx\txiarg\keywordtrue +    \allowcodebreakstrue +  \else\ifx\txiarg\keywordfalse +    \allowcodebreaksfalse +  \else +    \errhelp = \EMsimple +    \errmessage{Unknown @allowcodebreaks option `\txiarg'}% +  \fi\fi +} +  % @kbd is like @code, except that if the argument is just one @key command,  % then @kbd has no effect. +\def\kbd#1{{\setupmarkupstyle{kbd}\def\look{#1}\expandafter\kbdfoo\look??\par}}  % @kbdinputstyle -- arg is `distinct' (@kbd uses slanted tty font always),  %   `example' (@kbd uses ttsl only inside of @example and friends),  %   or `code' (@kbd uses normal tty font always).  \parseargdef\kbdinputstyle{% -  \def\arg{#1}% -  \ifx\arg\worddistinct +  \def\txiarg{#1}% +  \ifx\txiarg\worddistinct      \gdef\kbdexamplefont{\ttsl}\gdef\kbdfont{\ttsl}% -  \else\ifx\arg\wordexample +  \else\ifx\txiarg\wordexample      \gdef\kbdexamplefont{\ttsl}\gdef\kbdfont{\tt}% -  \else\ifx\arg\wordcode +  \else\ifx\txiarg\wordcode      \gdef\kbdexamplefont{\tt}\gdef\kbdfont{\tt}%    \else      \errhelp = \EMsimple -    \errmessage{Unknown @kbdinputstyle option `\arg'}% +    \errmessage{Unknown @kbdinputstyle option `\txiarg'}%    \fi\fi\fi  }  \def\worddistinct{distinct}  \def\wordexample{example}  \def\wordcode{code} -% Default is `distinct.' +% Default is `distinct'.  \kbdinputstyle distinct  \def\xkey{\key}  \def\kbdfoo#1#2#3\par{\def\one{#1}\def\three{#3}\def\threex{??}%  \ifx\one\xkey\ifx\threex\three \key{#2}% -\else{\tclose{\kbdfont\look}}\fi -\else{\tclose{\kbdfont\look}}\fi} +\else{\tclose{\kbdfont\setupmarkupstyle{kbd}\look}}\fi +\else{\tclose{\kbdfont\setupmarkupstyle{kbd}\look}}\fi}  % For @indicateurl, @env, @command quotes seem unnecessary, so use \code.  \let\indicateurl=\code  \let\env=\code  \let\command=\code +% @clicksequence{File @click{} Open ...} +\def\clicksequence#1{\begingroup #1\endgroup} + +% @clickstyle @arrow   (by default) +\parseargdef\clickstyle{\def\click{#1}} +\def\click{\arrow} +  % @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 @@ -1920,34 +2784,20 @@ where each line of input produces a line of output.}    \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 -% shrink), and it is reasonable to expect all typewriter fonts to have -% this property, we can check that font parameter. -% -\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.  %  \def\dmn#1{\thinspace #1} -\def\kbd#1{\def\look{#1}\expandafter\kbdfoo\look??\par} -  % @l was never documented to mean ``switch to the Lisp font'',  % and it is not used as such in any manual I can find.  We need it for  % 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 -\def\sc#1{{\smallcaps#1}}       % smallcaps font -\def\ii#1{{\it #1}}             % italic font -  % @acronym for "FBI", "NATO", and the like.  % We print this one point size smaller, since it's intended for  % all-uppercase. -%  +%  \def\acronym#1{\doacronym #1,,\finish}  \def\doacronym#1,#2,#3\finish{%    {\selectfonts\lsize #1}% @@ -1959,16 +2809,54 @@ where each line of input produces a line of output.}  % @abbr for "Comput. J." and the like.  % No font change, but don't do end-of-sentence spacing. -%  +%  \def\abbr#1{\doabbr #1,,\finish}  \def\doabbr#1,#2,#3\finish{% -  {\frenchspacing #1}% +  {\plainfrenchspacing #1}%    \def\temp{#2}%    \ifx\temp\empty \else      \space ({\unsepspaces \ignorespaces \temp \unskip})%    \fi  } + +\message{glyphs,} + +% @point{}, @result{}, @expansion{}, @print{}, @equiv{}. +% +% Since these characters are used in examples, they should be an even number of +% \tt widths. Each \tt character is 1en, so two makes it 1em. +% +\def\point{$\star$} +\def\arrow{\leavevmode\raise.05ex\hbox to 1em{\hfil$\rightarrow$\hfil}} +\def\result{\leavevmode\raise.05ex\hbox to 1em{\hfil$\Rightarrow$\hfil}} +\def\expansion{\leavevmode\hbox to 1em{\hfil$\mapsto$\hfil}} +\def\print{\leavevmode\lower.1ex\hbox to 1em{\hfil$\dashv$\hfil}} +\def\equiv{\leavevmode\hbox to 1em{\hfil$\ptexequiv$\hfil}} + +% The @error{} command. +% Adapted from the TeXbook's \boxit. +% +\newbox\errorbox +% +{\tentt \global\dimen0 = 3em}% Width of the box. +\dimen2 = .55pt % Thickness of rules +% The text. (`r' is open on the right, `e' somewhat less so on the left.) +\setbox0 = \hbox{\kern-.75pt \reducedsf error\kern-1.5pt} +% +\setbox\errorbox=\hbox to \dimen0{\hfil +   \hsize = \dimen0 \advance\hsize by -5.8pt % Space to left+right. +   \advance\hsize by -2\dimen2 % Rules. +   \vbox{% +      \hrule height\dimen2 +      \hbox{\vrule width\dimen2 \kern3pt          % Space to left of text. +         \vtop{\kern2.4pt \box0 \kern2.4pt}% Space above/below. +         \kern3pt\vrule width\dimen2}% Space to right. +      \hrule height\dimen2} +    \hfil} +% +\def\error{\leavevmode\lower.7ex\copy\errorbox} +  % @pounds{} is a sterling sign, which Knuth put in the CM italic font.  %  \def\pounds{{\it\$}} @@ -1978,49 +2866,113 @@ where each line of input produces a line of output.}  % Theiling, which support regular, slanted, bold and bold slanted (and  % "outlined" (blackboard board, sort of) versions, which we don't need).  % It is available from http://www.ctan.org/tex-archive/fonts/eurosym. -%  +%  % Although only regular is the truly official Euro symbol, we ignore  % that.  The Euro is designed to be slightly taller than the regular  % font height. -%  +%  % feymr - regular  % feymo - slanted  % feybr - bold  % feybo - bold slanted -%  +%  % There is no good (free) typewriter version, to my knowledge.  % A feymr10 euro is ~7.3pt wide, while a normal cmtt10 char is ~5.25pt wide.  % Hmm. -%  +%  % Also doesn't work in math.  Do we need to do math with euro symbols?  % Hope not. -%  -%  +% +%  \def\euro{{\eurofont e}}  \def\eurofont{%    % We set the font at each command, rather than predefining it in    % \textfonts and the other font-switching commands, so that -  % installations which never need the symbold don't have to have the +  % installations which never need the symbol don't have to have the    % font installed. -  %  +  %    % There is only one designed size (nominal 10pt), so we always scale    % that to the current nominal size. -  %  +  %    % By the way, simply using "at 1em" works for cmr10 and the like, but    % does not work for cmbx10 and other extended/shrunken fonts. -  %  +  %    \def\eurosize{\csname\curfontsize nominalsize\endcsname}%    % -  \ifx\curfontstyle\bfstylename  +  \ifx\curfontstyle\bfstylename      % bold:      \font\thiseurofont = \ifusingit{feybo10}{feybr10} at \eurosize -  \else  +  \else      % regular:      \font\thiseurofont = \ifusingit{feymo10}{feymr10} at \eurosize    \fi    \thiseurofont  } +% Glyphs from the EC fonts.  We don't use \let for the aliases, because +% sometimes we redefine the original macro, and the alias should reflect +% the redefinition. +% +% Use LaTeX names for the Icelandic letters. +\def\DH{{\ecfont \char"D0}} % Eth +\def\dh{{\ecfont \char"F0}} % eth +\def\TH{{\ecfont \char"DE}} % Thorn +\def\th{{\ecfont \char"FE}} % thorn +% +\def\guillemetleft{{\ecfont \char"13}} +\def\guillemotleft{\guillemetleft} +\def\guillemetright{{\ecfont \char"14}} +\def\guillemotright{\guillemetright} +\def\guilsinglleft{{\ecfont \char"0E}} +\def\guilsinglright{{\ecfont \char"0F}} +\def\quotedblbase{{\ecfont \char"12}} +\def\quotesinglbase{{\ecfont \char"0D}} +% +% This positioning is not perfect (see the ogonek LaTeX package), but +% we have the precomposed glyphs for the most common cases.  We put the +% tests to use those glyphs in the single \ogonek macro so we have fewer +% dummy definitions to worry about for index entries, etc. +% +% ogonek is also used with other letters in Lithuanian (IOU), but using +% the precomposed glyphs for those is not so easy since they aren't in +% the same EC font. +\def\ogonek#1{{% +  \def\temp{#1}% +  \ifx\temp\macrocharA\Aogonek +  \else\ifx\temp\macrochara\aogonek +  \else\ifx\temp\macrocharE\Eogonek +  \else\ifx\temp\macrochare\eogonek +  \else +    \ecfont \setbox0=\hbox{#1}% +    \ifdim\ht0=1ex\accent"0C #1% +    \else\ooalign{\unhbox0\crcr\hidewidth\char"0C \hidewidth}% +    \fi +  \fi\fi\fi\fi +  }% +} +\def\Aogonek{{\ecfont \char"81}}\def\macrocharA{A} +\def\aogonek{{\ecfont \char"A1}}\def\macrochara{a} +\def\Eogonek{{\ecfont \char"86}}\def\macrocharE{E} +\def\eogonek{{\ecfont \char"A6}}\def\macrochare{e} +% +% Use the ec* fonts (cm-super in outline format) for non-CM glyphs. +\def\ecfont{% +  % We can't distinguish serif/sans and italic/slanted, but this +  % is used for crude hacks anyway (like adding French and German +  % quotes to documents typeset with CM, where we lose kerning), so +  % hopefully nobody will notice/care. +  \edef\ecsize{\csname\curfontsize ecsize\endcsname}% +  \edef\nominalsize{\csname\curfontsize nominalsize\endcsname}% +  \ifx\curfontstyle\bfstylename +    % bold: +    \font\thisecfont = ecb\ifusingit{i}{x}\ecsize \space at \nominalsize +  \else +    % regular: +    \font\thisecfont = ec\ifusingit{ti}{rm}\ecsize \space at \nominalsize +  \fi +  \thisecfont +} +  % @registeredsymbol - R in a circle.  The font for the R should really  % be smaller yet, but lllsize is the best we can do for now.  % Adapted from the plain.tex definition of \copyright. @@ -2031,14 +2983,24 @@ where each line of input produces a line of output.}      }$%  } +% @textdegree - the normal degrees sign. +% +\def\textdegree{$^\circ$} +  % Laurent Siebenmann reports \Orb undefined with:  %  Textures 1.7.7 (preloaded format=plain 93.10.14)  (68K)  16 APR 2004 02:38  % so we'll define it if necessary. -%  +%  \ifx\Orb\undefined  \def\Orb{\mathhexbox20D}  \fi +% Quotes. +\chardef\quotedblleft="5C +\chardef\quotedblright=`\" +\chardef\quoteleft=`\` +\chardef\quoteright=`\' +  \message{page headings,} @@ -2123,12 +3085,9 @@ where each line of input produces a line of output.}  \let\subtitlerm=\tenrm  \def\subtitlefont{\subtitlerm \normalbaselineskip = 13pt \normalbaselines} -\def\authorfont{\authorrm \normalbaselineskip = 16pt \normalbaselines -		\let\tt=\authortt} -  \parseargdef\title{%    \checkenv\titlepage -  \leftline{\titlefonts\rm #1} +  \leftline{\titlefonts\rmisbold #1}    % print a rule at the page bottom also.    \finishedtitlepagefalse    \vskip4pt \hrule height 4pt width \hsize \vskip4pt @@ -2149,7 +3108,7 @@ where each line of input produces a line of output.}    \else      \checkenv\titlepage      \ifseenauthor\else \vskip 0pt plus 1filll \seenauthortrue \fi -    {\authorfont \leftline{#1}}% +    {\secfonts\rmisbold \leftline{#1}}%    \fi  } @@ -2202,12 +3161,39 @@ where each line of input produces a line of output.}    %    % Leave some space for the footline.  Hopefully ok to assume    % @evenfooting will not be used by itself. -  \global\advance\pageheight by -\baselineskip -  \global\advance\vsize by -\baselineskip +  \global\advance\pageheight by -12pt +  \global\advance\vsize by -12pt  }  \parseargdef\everyfooting{\oddfootingxxx{#1}\evenfootingxxx{#1}} +% @evenheadingmarks top     \thischapter <- chapter at the top of a page +% @evenheadingmarks bottom  \thischapter <- chapter at the bottom of a page +% +% The same set of arguments for: +% +% @oddheadingmarks +% @evenfootingmarks +% @oddfootingmarks +% @everyheadingmarks +% @everyfootingmarks + +\def\evenheadingmarks{\headingmarks{even}{heading}} +\def\oddheadingmarks{\headingmarks{odd}{heading}} +\def\evenfootingmarks{\headingmarks{even}{footing}} +\def\oddfootingmarks{\headingmarks{odd}{footing}} +\def\everyheadingmarks#1 {\headingmarks{even}{heading}{#1} +                          \headingmarks{odd}{heading}{#1} } +\def\everyfootingmarks#1 {\headingmarks{even}{footing}{#1} +                          \headingmarks{odd}{footing}{#1} } +% #1 = even/odd, #2 = heading/footing, #3 = top/bottom. +\def\headingmarks#1#2#3 {% +  \expandafter\let\expandafter\temp \csname get#3headingmarks\endcsname +  \global\expandafter\let\csname get#1#2marks\endcsname \temp +} + +\everyheadingmarks bottom +\everyfootingmarks bottom  % @headings double      turns headings on for double-sided printing.  % @headings single      turns headings on for single-sided printing. @@ -2350,7 +3336,7 @@ where each line of input produces a line of output.}      % cause the example and the item to crash together.  So we use this      % bizarre value of 10001 as a signal to \aboveenvbreak to insert      % \parskip glue after all.  Section titles are handled this way also. -    %  +    %      \penalty 10001      \endgroup      \itemxneedsnegativevskipfalse @@ -2444,9 +3430,18 @@ where each line of input produces a line of output.}    \parindent=0pt    \parskip=\smallskipamount    \ifdim\parskip=0pt \parskip=2pt \fi +  % +  % Try typesetting the item mark that if the document erroneously says +  % something like @itemize @samp (intending @table), there's an error +  % right away at the @itemize.  It's not the best error message in the +  % world, but it's better than leaving it to the @item.  This means if +  % the user wants an empty mark, they have to say @w{} not just @w.    \def\itemcontents{#1}% +  \setbox0 = \hbox{\itemcontents}% +  %    % @itemize with no arg is equivalent to @itemize @bullet.    \ifx\itemcontents\empty\def\itemcontents{\bullet}\fi +  %    \let\item=\itemizeitem  } @@ -2467,6 +3462,7 @@ where each line of input produces a line of output.}     \ifnum\lastpenalty<10000 \parskip=0in \fi     \noindent     \hbox to 0pt{\hss \itemcontents \kern\itemmargin}% +   %     \vadjust{\penalty 1200}}% not good to break after first line of item.    \flushcr  } @@ -2688,12 +3684,19 @@ where each line of input produces a line of output.}  %  % @headitem starts a heading row, which we typeset in bold.  % Assignments have to be global since we are inside the implicit group -% of an alignment entry.  Note that \everycr resets \everytab. -\def\headitem{\checkenv\multitable \crcr \global\everytab={\bf}\the\everytab}% +% of an alignment entry.  \everycr resets \everytab so we don't have to +% undo it ourselves. +\def\headitemfont{\b}% for people to use in the template row; not changeable +\def\headitem{% +  \checkenv\multitable +  \crcr +  \global\everytab={\bf}% can't use \headitemfont since the parsing differs +  \the\everytab % for the first item +}%  %  % A \tab used to include \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. +% we again encounter the problem the 1sp was intended to solve.  %					--karl, nathan@acm.org, 20apr99.  \def\tab{\checkenv\multitable &\the\everytab}% @@ -2862,6 +3865,7 @@ where each line of input produces a line of output.}  \def\doignore#1{\begingroup    % Scan in ``verbatim'' mode: +  \obeylines    \catcode`\@ = \other    \catcode`\{ = \other    \catcode`\} = \other @@ -2882,16 +3886,16 @@ where each line of input produces a line of output.}    \gdef\dodoignore#1{%      % #1 contains the command name as a string, e.g., `ifinfo'.      % -    % Define a command to find the next `@end #1', which must be on a line -    % by itself. -    \long\def\doignoretext##1^^M@end #1{\doignoretextyyy##1^^M@#1\_STOP_}% +    % Define a command to find the next `@end #1'. +    \long\def\doignoretext##1^^M@end #1{% +      \doignoretextyyy##1^^M@#1\_STOP_}% +    %      % And this command to find another #1 command, at the beginning of a      % line.  (Otherwise, we would consider a line `@c @ifset', for      % example, to count as an @ifset for nesting.)      \long\def\doignoretextyyy##1^^M@#1##2\_STOP_{\doignoreyyy{##2}\_STOP_}%      %      % And now expand that command. -    \obeylines %      \doignoretext ^^M%    }%  } @@ -2921,7 +3925,12 @@ where each line of input produces a line of output.}  }  % Finish off ignored text. -\def\enddoignore{\endgroup\ignorespaces} +{ \obeylines% +  % Ignore anything after the last `@end #1'; this matters in verbatim +  % environments, where otherwise the newline after an ignored conditional +  % would result in a blank line in the output. +  \gdef\enddoignore#1^^M{\endgroup\ignorespaces}% +}  % @set VAR sets the variable VAR to an empty value. @@ -3086,11 +4095,11 @@ where each line of input produces a line of output.}  \def\dosynindex#1#2#3{%    % Only do \closeout if we haven't already done it, else we'll end up    % closing the target index. -  \expandafter \ifx\csname donesynindex#2\endcsname \undefined +  \expandafter \ifx\csname donesynindex#2\endcsname \relax      % The \closeout helps reduce unnecessary open files; the limit on the      % Acorn RISC OS is a mere 16 files.      \expandafter\closeout\csname#2indfile\endcsname -    \expandafter\let\csname\donesynindex#2\endcsname = 1 +    \expandafter\let\csname donesynindex#2\endcsname = 1    \fi    % redefine \fooindfile:    \expandafter\let\expandafter\temp\expandafter=\csname#3indfile\endcsname @@ -3121,42 +4130,50 @@ where each line of input produces a line of output.}  % we have to laboriously prevent expansion for those that we don't.  %  \def\indexdummies{% +  \escapechar = `\\     % use backslash in output files.    \def\@{@}% change to @@ when we switch to @ as escape char in index files.    \def\ {\realbackslash\space }% +  %    % 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    % -  % \definedummyword defines \#1 as \realbackslash #1\space, thus -  % effectively preventing its expansion.  This is used only for control -  % words, not control letters, because the \space would be incorrect -  % for control characters, but is needed to separate the control word -  % from whatever follows. +  % I don't entirely understand this, but when an index entry is +  % generated from a macro call, the \endinput which \scanmacro inserts +  % causes processing to be prematurely terminated.  This is, +  % apparently, because \indexsorttmp is fully expanded, and \endinput +  % is an expandable command.  The redefinition below makes \endinput +  % disappear altogether for that purpose -- although logging shows that +  % processing continues to some further point.  On the other hand, it +  % seems \endinput does not hurt in the printed index arg, since that +  % is still getting written without apparent harm.    % -  % For control letters, we have \definedummyletter, which omits the -  % space. +  % Sample source (mac-idx3.tex, reported by Graham Percival to +  % help-texinfo, 22may06): +  % @macro funindex {WORD} +  % @findex xyz +  % @end macro +  % ... +  % @funindex commtest    % -  % These can be used both for control words that take an argument and -  % those that do not.  If it is followed by {arg} in the input, then -  % that will dutifully get written to the index (or wherever). +  % The above is not enough to reproduce the bug, but it gives the flavor.    % -  \def\definedummyword##1{% -    \expandafter\def\csname ##1\endcsname{\realbackslash ##1\space}% -  }% -  \def\definedummyletter##1{% -    \expandafter\def\csname ##1\endcsname{\realbackslash ##1}% -  }% -  \let\definedummyaccent\definedummyletter +  % Sample whatsit resulting: +  % .@write3{\entry{xyz}{@folio }{@code {xyz@endinput }}} +  % +  % So: +  \let\endinput = \empty    %    % Do the redefinitions.    \commondummies  } -% For the aux file, @ is the escape character.  So we want to redefine -% everything using @ instead of \realbackslash.  When everything uses -% @, this will be simpler. +% For the aux and toc files, @ is the escape character.  So we want to +% redefine everything using @ as the escape character (instead of +% \realbackslash, still used for index files).  When everything uses @, +% this will be simpler.  %  \def\atdummies{%    \def\@{@@}% @@ -3164,147 +4181,169 @@ where each line of input produces a line of output.}    \let\{ = \lbraceatcmd    \let\} = \rbraceatcmd    % -  % (See comments in \indexdummies.) -  \def\definedummyword##1{% -    \expandafter\def\csname ##1\endcsname{@##1\space}% -  }% -  \def\definedummyletter##1{% -    \expandafter\def\csname ##1\endcsname{@##1}% -  }% -  \let\definedummyaccent\definedummyletter -  %    % Do the redefinitions.    \commondummies +  \otherbackslash  } -% Called from \indexdummies and \atdummies.  \definedummyword and -% \definedummyletter must be defined first. +% Called from \indexdummies and \atdummies.  %  \def\commondummies{%    % -  \normalturnoffactive +  % \definedummyword defines \#1 as \string\#1\space, thus effectively +  % preventing its expansion.  This is used only for control% words, +  % not control letters, because the \space would be incorrect for +  % control characters, but is needed to separate the control word +  % from whatever follows. +  % +  % For control letters, we have \definedummyletter, which omits the +  % space. +  % +  % These can be used both for control words that take an argument and +  % those that do not.  If it is followed by {arg} in the input, then +  % that will dutifully get written to the index (or wherever). +  % +  \def\definedummyword  ##1{\def##1{\string##1\space}}% +  \def\definedummyletter##1{\def##1{\string##1}}% +  \let\definedummyaccent\definedummyletter    %    \commondummiesnofonts    % -  \definedummyletter{_}% +  \definedummyletter\_%    %    % Non-English letters. -  \definedummyword{AA}% -  \definedummyword{AE}% -  \definedummyword{L}% -  \definedummyword{OE}% -  \definedummyword{O}% -  \definedummyword{aa}% -  \definedummyword{ae}% -  \definedummyword{l}% -  \definedummyword{oe}% -  \definedummyword{o}% -  \definedummyword{ss}% -  \definedummyword{exclamdown}% -  \definedummyword{questiondown}% -  \definedummyword{ordf}% -  \definedummyword{ordm}% +  \definedummyword\AA +  \definedummyword\AE +  \definedummyword\DH +  \definedummyword\L +  \definedummyword\O +  \definedummyword\OE +  \definedummyword\TH +  \definedummyword\aa +  \definedummyword\ae +  \definedummyword\dh +  \definedummyword\exclamdown +  \definedummyword\l +  \definedummyword\o +  \definedummyword\oe +  \definedummyword\ordf +  \definedummyword\ordm +  \definedummyword\questiondown +  \definedummyword\ss +  \definedummyword\th    %    % Although these internal commands shouldn't show up, sometimes they do. -  \definedummyword{bf}% -  \definedummyword{gtr}% -  \definedummyword{hat}% -  \definedummyword{less}% -  \definedummyword{sf}% -  \definedummyword{sl}% -  \definedummyword{tclose}% -  \definedummyword{tt}% -  % -  \definedummyword{LaTeX}% -  \definedummyword{TeX}% +  \definedummyword\bf +  \definedummyword\gtr +  \definedummyword\hat +  \definedummyword\less +  \definedummyword\sf +  \definedummyword\sl +  \definedummyword\tclose +  \definedummyword\tt +  % +  \definedummyword\LaTeX +  \definedummyword\TeX    %    % Assorted special characters. -  \definedummyword{bullet}% -  \definedummyword{comma}% -  \definedummyword{copyright}% -  \definedummyword{registeredsymbol}% -  \definedummyword{dots}% -  \definedummyword{enddots}% -  \definedummyword{equiv}% -  \definedummyword{error}% -  \definedummyword{euro}% -  \definedummyword{expansion}% -  \definedummyword{minus}% -  \definedummyword{pounds}% -  \definedummyword{point}% -  \definedummyword{print}% -  \definedummyword{result}% +  \definedummyword\bullet +  \definedummyword\comma +  \definedummyword\copyright +  \definedummyword\registeredsymbol +  \definedummyword\dots +  \definedummyword\enddots +  \definedummyword\equiv +  \definedummyword\error +  \definedummyword\euro +  \definedummyword\guillemetleft +  \definedummyword\guillemetright +  \definedummyword\guilsinglleft +  \definedummyword\guilsinglright +  \definedummyword\expansion +  \definedummyword\minus +  \definedummyword\ogonek +  \definedummyword\pounds +  \definedummyword\point +  \definedummyword\print +  \definedummyword\quotedblbase +  \definedummyword\quotedblleft +  \definedummyword\quotedblright +  \definedummyword\quoteleft +  \definedummyword\quoteright +  \definedummyword\quotesinglbase +  \definedummyword\result +  \definedummyword\textdegree +  % +  % We want to disable all macros so that they are not expanded by \write. +  \macrolist +  % +  \normalturnoffactive    %    % Handle some cases of @value -- where it does not contain any    % (non-fully-expandable) commands.    \makevalueexpandable -  % -  % Normal spaces, not active ones. -  \unsepspaces -  % -  % No macro expansion. -  \turnoffmacros  }  % \commondummiesnofonts: common to \commondummies and \indexnofonts.  % -% Better have this without active chars. -{ -  \catcode`\~=\other -  \gdef\commondummiesnofonts{% -    % Control letters and accents. -    \definedummyletter{!}% -    \definedummyaccent{"}% -    \definedummyaccent{'}% -    \definedummyletter{*}% -    \definedummyaccent{,}% -    \definedummyletter{.}% -    \definedummyletter{/}% -    \definedummyletter{:}% -    \definedummyaccent{=}% -    \definedummyletter{?}% -    \definedummyaccent{^}% -    \definedummyaccent{`}% -    \definedummyaccent{~}% -    \definedummyword{u}% -    \definedummyword{v}% -    \definedummyword{H}% -    \definedummyword{dotaccent}% -    \definedummyword{ringaccent}% -    \definedummyword{tieaccent}% -    \definedummyword{ubaraccent}% -    \definedummyword{udotaccent}% -    \definedummyword{dotless}% -    % -    % Texinfo font commands. -    \definedummyword{b}% -    \definedummyword{i}% -    \definedummyword{r}% -    \definedummyword{sc}% -    \definedummyword{t}% -    % -    % Commands that take arguments. -    \definedummyword{acronym}% -    \definedummyword{cite}% -    \definedummyword{code}% -    \definedummyword{command}% -    \definedummyword{dfn}% -    \definedummyword{emph}% -    \definedummyword{env}% -    \definedummyword{file}% -    \definedummyword{kbd}% -    \definedummyword{key}% -    \definedummyword{math}% -    \definedummyword{option}% -    \definedummyword{samp}% -    \definedummyword{strong}% -    \definedummyword{tie}% -    \definedummyword{uref}% -    \definedummyword{url}% -    \definedummyword{var}% -    \definedummyword{verb}% -    \definedummyword{w}% -  } +\def\commondummiesnofonts{% +  % Control letters and accents. +  \definedummyletter\!% +  \definedummyaccent\"% +  \definedummyaccent\'% +  \definedummyletter\*% +  \definedummyaccent\,% +  \definedummyletter\.% +  \definedummyletter\/% +  \definedummyletter\:% +  \definedummyaccent\=% +  \definedummyletter\?% +  \definedummyaccent\^% +  \definedummyaccent\`% +  \definedummyaccent\~% +  \definedummyword\u +  \definedummyword\v +  \definedummyword\H +  \definedummyword\dotaccent +  \definedummyword\ogonek +  \definedummyword\ringaccent +  \definedummyword\tieaccent +  \definedummyword\ubaraccent +  \definedummyword\udotaccent +  \definedummyword\dotless +  % +  % Texinfo font commands. +  \definedummyword\b +  \definedummyword\i +  \definedummyword\r +  \definedummyword\sc +  \definedummyword\t +  % +  % Commands that take arguments. +  \definedummyword\acronym +  \definedummyword\cite +  \definedummyword\code +  \definedummyword\command +  \definedummyword\dfn +  \definedummyword\email +  \definedummyword\emph +  \definedummyword\env +  \definedummyword\file +  \definedummyword\kbd +  \definedummyword\key +  \definedummyword\math +  \definedummyword\option +  \definedummyword\pxref +  \definedummyword\ref +  \definedummyword\samp +  \definedummyword\strong +  \definedummyword\tie +  \definedummyword\uref +  \definedummyword\url +  \definedummyword\var +  \definedummyword\verb +  \definedummyword\w +  \definedummyword\xref  }  % \indexnofonts is used when outputting the strings to sort the index @@ -3314,13 +4353,9 @@ where each line of input produces a line of output.}  %  \def\indexnofonts{%    % Accent commands should become @asis. -  \def\definedummyaccent##1{% -    \expandafter\let\csname ##1\endcsname\asis -  }% +  \def\definedummyaccent##1{\let##1\asis}%    % We can just ignore other control letters. -  \def\definedummyletter##1{% -    \expandafter\def\csname ##1\endcsname{}% -  }% +  \def\definedummyletter##1{\let##1\empty}%    % Hopefully, all control words can become @asis.    \let\definedummyword\definedummyaccent    % @@ -3339,19 +4374,23 @@ where each line of input produces a line of output.}    % Non-English letters.    \def\AA{AA}%    \def\AE{AE}% +  \def\DH{DZZ}%    \def\L{L}%    \def\OE{OE}%    \def\O{O}% +  \def\TH{ZZZ}%    \def\aa{aa}%    \def\ae{ae}% +  \def\dh{dzz}% +  \def\exclamdown{!}%    \def\l{l}%    \def\oe{oe}% -  \def\o{o}% -  \def\ss{ss}% -  \def\exclamdown{!}% -  \def\questiondown{?}%    \def\ordf{a}%    \def\ordm{o}% +  \def\o{o}% +  \def\questiondown{?}% +  \def\ss{ss}% +  \def\th{zzz}%    %    \def\LaTeX{LaTeX}%    \def\TeX{TeX}% @@ -3361,21 +4400,41 @@ where each line of input produces a line of output.}    \def\bullet{bullet}%    \def\comma{,}%    \def\copyright{copyright}% -  \def\registeredsymbol{R}%    \def\dots{...}%    \def\enddots{...}%    \def\equiv{==}%    \def\error{error}%    \def\euro{euro}%    \def\expansion{==>}% +  \def\guillemetleft{<<}% +  \def\guillemetright{>>}% +  \def\guilsinglleft{<}% +  \def\guilsinglright{>}%    \def\minus{-}% -  \def\pounds{pounds}%    \def\point{.}% +  \def\pounds{pounds}%    \def\print{-|}% +  \def\quotedblbase{"}% +  \def\quotedblleft{"}% +  \def\quotedblright{"}% +  \def\quoteleft{`}% +  \def\quoteright{'}% +  \def\quotesinglbase{,}% +  \def\registeredsymbol{R}%    \def\result{=>}% +  \def\textdegree{o}%    % -  % Don't write macro names. -  \emptyusermacros +  % We need to get rid of all macros, leaving only the arguments (if present). +  % Of course this is not nearly correct, but it is the best we can do for now. +  % makeinfo does not expand macros in the argument to @deffn, which ends up +  % writing an index entry, and texindex isn't prepared for an index sort entry +  % that starts with \. +  % +  % Since macro invocations are followed by braces, we can just redefine them +  % to take a single TeX argument.  The case of a macro invocation that +  % goes to end-of-line is not handled. +  % +  \macrolist  }  \let\indexbackslash=0  %overridden during \printindex. @@ -3403,11 +4462,7 @@ where each line of input produces a line of output.}      %      \edef\writeto{\csname#1indfile\endcsname}%      % -    \ifvmode -      \dosubindsanitize -    \else -      \dosubindwrite -    \fi +    \safewhatsit\dosubindwrite    }%    \fi  } @@ -3422,7 +4477,6 @@ where each line of input produces a line of output.}    %    % Remember, we are within a group.    \indexdummies % Must do this here, since \bf, etc expand at this stage -  \escapechar=`\\    \def\backslashcurfont{\indexbackslash}% \indexbackslash isn't defined now        % so it will be output as is; and it will print as backslash.    % @@ -3445,13 +4499,13 @@ where each line of input produces a line of output.}    \temp  } -% Take care of unwanted page breaks: +% Take care of unwanted page breaks/skips around a whatsit:  %  % 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: +% \write or \pdfdest will make \lastskip zero.  The result is that +% sequences like this:  % @end defun  % @tindex whatever  % @defun ... @@ -3475,25 +4529,31 @@ where each line of input produces a line of output.}  %  \edef\zeroskipmacro{\expandafter\the\csname z@skip\endcsname}  % +\newskip\whatsitskip +\newcount\whatsitpenalty +%  % ..., ready, GO:  % -\def\dosubindsanitize{% +\def\safewhatsit#1{% +\ifhmode +  #1% +\else    % \lastskip and \lastpenalty cannot both be nonzero simultaneously. -  \skip0 = \lastskip +  \whatsitskip = \lastskip    \edef\lastskipmacro{\the\lastskip}% -  \count255 = \lastpenalty +  \whatsitpenalty = \lastpenalty    %    % If \lastskip is nonzero, that means the last item was a    % skip.  And since a skip is discardable, that means this -  % -\skip0 glue we're inserting is preceded by a +  % -\whatsitskip glue we're inserting is preceded by a    % non-discardable item, therefore it is not a potential    % breakpoint, therefore no \nobreak needed.    \ifx\lastskipmacro\zeroskipmacro    \else -    \vskip-\skip0 +    \vskip-\whatsitskip    \fi    % -  \dosubindwrite +  #1%    %    \ifx\lastskipmacro\zeroskipmacro      % If \lastskip was zero, perhaps the last item was a penalty, and @@ -3501,19 +4561,20 @@ where each line of input produces a line of output.}      % to re-insert the same penalty (values >10000 are used for various      % signals); since we just inserted a non-discardable item, any      % following glue (such as a \parskip) would be a breakpoint.  For example: -    %  +    %      %   @deffn deffn-whatever      %   @vindex index-whatever      %   Description.      % would allow a break between the index-whatever whatsit      % and the "Description." paragraph. -    \ifnum\count255>9999 \penalty\count255 \fi +    \ifnum\whatsitpenalty>9999 \penalty\whatsitpenalty \fi    \else      % On the other hand, if we had a nonzero \lastskip,      % this make-up glue would be preceded by a non-discardable item      % (the whatsit from the \write), so we must insert a \nobreak. -    \nobreak\vskip\skip0 +    \nobreak\vskip\whatsitskip    \fi +\fi  }  % The index entry written in the file actually looks like @@ -3556,6 +4617,7 @@ where each line of input produces a line of output.}    %    \smallfonts \rm    \tolerance = 9500 +  \plainfrenchspacing    \everypar = {}% don't want the \kern\-parindent from indentation suppression.    %    % See if the index file exists and is nonempty. @@ -3629,7 +4691,7 @@ where each line of input produces a line of output.}  %  % A straightforward implementation would start like this:  %	\def\entry#1#2{... -% But this frozes the catcodes in the argument, and can cause problems to +% But this freezes the catcodes in the argument, and can cause problems to  % @code, which sets - active.  This problem was fixed by a kludge---  % ``-'' was active throughout whole index, but this isn't really right.  % @@ -3685,11 +4747,8 @@ where each line of input produces a line of output.}      % The following is kludged to not output a line of dots in the index if      % there are no page numbers.  The next person who breaks this will be      % cursed by a Unix daemon. -    \def\tempa{{\rm }}% -    \def\tempb{#1}% -    \edef\tempc{\tempa}% -    \edef\tempd{\tempb}% -    \ifx\tempc\tempd +    \setbox\boxA = \hbox{#1}% +    \ifdim\wd\boxA = 0pt        \ %      \else        % @@ -3713,9 +4772,9 @@ where each line of input produces a line of output.}    \endgroup  } -% Like \dotfill except takes at least 1 em. +% Like plain.tex's \dotfill, except uses up at least 1 em.  \def\indexdotfill{\cleaders -  \hbox{$\mathsurround=0pt \mkern1.5mu ${\it .}$ \mkern1.5mu$}\hskip 1em plus 1fill} +  \hbox{$\mathsurround=0pt \mkern1.5mu.\mkern1.5mu$}\hskip 1em plus 1fill}  \def\primary #1{\line{#1\hfil}} @@ -3825,6 +4884,34 @@ where each line of input produces a line of output.}  %  % All done with double columns.  \def\enddoublecolumns{% +  % The following penalty ensures that the page builder is exercised +  % _before_ we change the output routine.  This is necessary in the +  % following situation: +  % +  % The last section of the index consists only of a single entry. +  % Before this section, \pagetotal is less than \pagegoal, so no +  % break occurs before the last section starts.  However, the last +  % section, consisting of \initial and the single \entry, does not +  % fit on the page and has to be broken off.  Without the following +  % penalty the page builder will not be exercised until \eject +  % below, and by that time we'll already have changed the output +  % routine to the \balancecolumns version, so the next-to-last +  % double-column page will be processed with \balancecolumns, which +  % is wrong:  The two columns will go to the main vertical list, with +  % the broken-off section in the recent contributions.  As soon as +  % the output routine finishes, TeX starts reconsidering the page +  % break.  The two columns and the broken-off section both fit on the +  % page, because the two columns now take up only half of the page +  % goal.  When TeX sees \eject from below which follows the final +  % section, it invokes the new output routine that we've set after +  % \balancecolumns below; \onepageout will try to fit the two columns +  % and the final section into the vbox of \pageheight (see +  % \pagebody), causing an overfull box. +  % +  % Note that glue won't work here, because glue does not exercise the +  % page builder, unlike penalties (see The TeXbook, pp. 280-281). +  \penalty0 +  %    \output = {%      % Split the last of the double-column material.  Leave it on the      % current page, no automatic page break. @@ -3934,11 +5021,15 @@ where each line of input produces a line of output.}    \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. -% However, they are not reliable, because we don't use marks. +% Each @chapter defines these (using marks) as the number+name, number +% and name of the chapter.  Page headings and footings can use +% these.  @section does likewise.  \def\thischapter{} +\def\thischapternum{} +\def\thischaptername{}  \def\thissection{} +\def\thissectionnum{} +\def\thissectionname{}  \newcount\absseclevel % used to calculate proper heading level  \newcount\secbase\secbase=0 % @raisesections/@lowersections modify this count @@ -4051,7 +5142,9 @@ where each line of input produces a line of output.}    \gdef\chaplevelprefix{\the\chapno.}%    \resetallfloatnos    % -  \message{\putwordChapter\space \the\chapno}% +  % \putwordChapter can contain complex things in translations. +  \toks0=\expandafter{\putwordChapter}% +  \message{\the\toks0 \space \the\chapno}%    %    % Write the actual heading.    \chapmacro{#1}{Ynumbered}{\the\chapno}% @@ -4062,15 +5155,17 @@ where each line of input produces a line of output.}    \global\let\subsubsection = \numberedsubsubsec  } -\outer\parseargdef\appendix{\apphead0{#1}} % normally apphead0 calls appendixzzz +\outer\parseargdef\appendix{\apphead0{#1}} % normally calls appendixzzz +%  \def\appendixzzz#1{%    \global\secno=0 \global\subsecno=0 \global\subsubsecno=0      \global\advance\appendixno by 1    \gdef\chaplevelprefix{\appendixletter.}%    \resetallfloatnos    % -  \def\appendixnum{\putwordAppendix\space \appendixletter}% -  \message{\appendixnum}% +  % \putwordAppendix can contain complex things in translations. +  \toks0=\expandafter{\putwordAppendix}% +  \message{\the\toks0 \space \appendixletter}%    %    \chapmacro{#1}{Yappendix}{\appendixletter}%    % @@ -4202,7 +5297,6 @@ where each line of input produces a line of output.}  %       3) Likewise, headings look best if no \parindent is used, and  %          if justification is not attempted.  Hence \raggedright. -  \def\majorheading{%    {\advance\chapheadingskip by 10pt \chapbreak }%    \parsearg\chapheadingzzz @@ -4211,8 +5305,8 @@ where each line of input produces a line of output.}  \def\chapheading{\chapbreak \parsearg\chapheadingzzz}  \def\chapheadingzzz#1{%    {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000 -                    \parindent=0pt\raggedright -                    \rm #1\hfill}}% +                    \parindent=0pt\ptexraggedright +                    \rmisbold #1\hfill}}%    \bigskip \par\penalty 200\relax    \suppressfirstparagraphindent  } @@ -4239,7 +5333,20 @@ where each line of input produces a line of output.}  \def\chapbreak{\dobreak \chapheadingskip {-4000}}  \def\chappager{\par\vfill\supereject} -\def\chapoddpage{\chappager \ifodd\pageno \else \hbox to 0pt{} \chappager\fi} +% Because \domark is called before \chapoddpage, the filler page will +% get the headings for the next chapter, which is wrong.  But we don't +% care -- we just disable all headings on the filler page. +\def\chapoddpage{% +  \chappager +  \ifodd\pageno \else +    \begingroup +      \evenheadline={\hfil}\evenfootline={\hfil}% +      \oddheadline={\hfil}\oddfootline={\hfil}% +      \hbox to 0pt{}% +      \chappager +    \endgroup +  \fi +}  \def\setchapternewpage #1 {\csname CHAPPAG#1\endcsname} @@ -4273,41 +5380,78 @@ where each line of input produces a line of output.}  \def\Yappendixkeyword{Yappendix}  %  \def\chapmacro#1#2#3{% +  % Insert the first mark before the heading break (see notes for \domark). +  \let\prevchapterdefs=\lastchapterdefs +  \let\prevsectiondefs=\lastsectiondefs +  \gdef\lastsectiondefs{\gdef\thissectionname{}\gdef\thissectionnum{}% +                        \gdef\thissection{}}% +  % +  \def\temptype{#2}% +  \ifx\temptype\Ynothingkeyword +    \gdef\lastchapterdefs{\gdef\thischaptername{#1}\gdef\thischapternum{}% +                          \gdef\thischapter{\thischaptername}}% +  \else\ifx\temptype\Yomitfromtockeyword +    \gdef\lastchapterdefs{\gdef\thischaptername{#1}\gdef\thischapternum{}% +                          \gdef\thischapter{}}% +  \else\ifx\temptype\Yappendixkeyword +    \toks0={#1}% +    \xdef\lastchapterdefs{% +      \gdef\noexpand\thischaptername{\the\toks0}% +      \gdef\noexpand\thischapternum{\appendixletter}% +      % \noexpand\putwordAppendix avoids expanding indigestible +      % commands in some of the translations. +      \gdef\noexpand\thischapter{\noexpand\putwordAppendix{} +                                 \noexpand\thischapternum: +                                 \noexpand\thischaptername}% +    }% +  \else +    \toks0={#1}% +    \xdef\lastchapterdefs{% +      \gdef\noexpand\thischaptername{\the\toks0}% +      \gdef\noexpand\thischapternum{\the\chapno}% +      % \noexpand\putwordChapter avoids expanding indigestible +      % commands in some of the translations. +      \gdef\noexpand\thischapter{\noexpand\putwordChapter{} +                                 \noexpand\thischapternum: +                                 \noexpand\thischaptername}% +    }% +  \fi\fi\fi +  % +  % Output the mark.  Pass it through \safewhatsit, to take care of +  % the preceding space. +  \safewhatsit\domark +  % +  % Insert the chapter heading break.    \pchapsepmacro +  % +  % Now the second mark, after the heading break.  No break points +  % between here and the heading. +  \let\prevchapterdefs=\lastchapterdefs +  \let\prevsectiondefs=\lastsectiondefs +  \domark +  %    {% -    \chapfonts \rm +    \chapfonts \rmisbold      % -    % Have to define \thissection before calling \donoderef, because the +    % Have to define \lastsection before calling \donoderef, because the      % xref code eventually uses it.  On the other hand, it has to be called      % after \pchapsepmacro, or the headline will change too soon. -    \gdef\thissection{#1}% -    \gdef\thischaptername{#1}% +    \gdef\lastsection{#1}%      %      % Only insert the separating space if we have a chapter/appendix      % number, and don't print the unnumbered ``number''. -    \def\temptype{#2}%      \ifx\temptype\Ynothingkeyword        \setbox0 = \hbox{}%        \def\toctype{unnchap}% -      \def\thischapter{#1}%      \else\ifx\temptype\Yomitfromtockeyword        \setbox0 = \hbox{}% contents like unnumbered, but no toc entry        \def\toctype{omit}% -      \xdef\thischapter{}%      \else\ifx\temptype\Yappendixkeyword        \setbox0 = \hbox{\putwordAppendix{} #3\enspace}%        \def\toctype{app}% -      % We don't substitute the actual chapter name into \thischapter -      % because we don't want its macros evaluated now.  And we don't -      % use \thissection because that changes with each section. -      % -      \xdef\thischapter{\putwordAppendix{} \appendixletter: -                        \noexpand\thischaptername}%      \else        \setbox0 = \hbox{#3\enspace}%        \def\toctype{numchap}% -      \xdef\thischapter{\putwordChapter{} \the\chapno: -                        \noexpand\thischaptername}%      \fi\fi\fi      %      % Write the toc entry for this chapter.  Must come before the @@ -4323,7 +5467,8 @@ where each line of input produces a line of output.}      \donoderef{#2}%      %      % Typeset the actual heading. -    \vbox{\hyphenpenalty=10000 \tolerance=5000 \parindent=0pt \raggedright +    \nobreak % Avoid page breaks at the interline glue. +    \vbox{\hyphenpenalty=10000 \tolerance=5000 \parindent=0pt \ptexraggedright            \hangindent=\wd0 \centerparametersmaybe            \unhbox0 #1\par}%    }% @@ -4347,8 +5492,8 @@ where each line of input produces a line of output.}  %  \def\unnchfopen #1{%  \chapoddpage {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000 -                       \parindent=0pt\raggedright -                       \rm #1\hfill}}\bigskip \par\nobreak +                       \parindent=0pt\ptexraggedright +                       \rmisbold #1\hfill}}\bigskip \par\nobreak  }  \def\chfopen #1#2{\chapoddpage {\chapfonts  \vbox to 3in{\vfil \hbox to\hsize{\hfil #2} \hbox to\hsize{\hfil #1} \vfil}}% @@ -4357,7 +5502,7 @@ where each line of input produces a line of output.}  \def\centerchfopen #1{%  \chapoddpage {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000                         \parindent=0pt -                       \hfill {\rm #1}\hfill}}\bigskip \par\nobreak +                       \hfill {\rmisbold #1}\hfill}}\bigskip \par\nobreak  }  \def\CHAPFopen{%    \global\let\chapmacro=\chfopen @@ -4385,47 +5530,108 @@ where each line of input produces a line of output.}  % the section type for xrefs (Ynumbered, Ynothing, Yappendix), #4 is the  % section number.  % +\def\seckeyword{sec} +%  \def\sectionheading#1#2#3#4{%    {%      % Switch to the right set of fonts. -    \csname #2fonts\endcsname \rm +    \csname #2fonts\endcsname \rmisbold +    % +    \def\sectionlevel{#2}% +    \def\temptype{#3}% +    % +    % Insert first mark before the heading break (see notes for \domark). +    \let\prevsectiondefs=\lastsectiondefs +    \ifx\temptype\Ynothingkeyword +      \ifx\sectionlevel\seckeyword +        \gdef\lastsectiondefs{\gdef\thissectionname{#1}\gdef\thissectionnum{}% +                              \gdef\thissection{\thissectionname}}% +      \fi +    \else\ifx\temptype\Yomitfromtockeyword +      % Don't redefine \thissection. +    \else\ifx\temptype\Yappendixkeyword +      \ifx\sectionlevel\seckeyword +        \toks0={#1}% +        \xdef\lastsectiondefs{% +          \gdef\noexpand\thissectionname{\the\toks0}% +          \gdef\noexpand\thissectionnum{#4}% +          % \noexpand\putwordSection avoids expanding indigestible +          % commands in some of the translations. +          \gdef\noexpand\thissection{\noexpand\putwordSection{} +                                     \noexpand\thissectionnum: +                                     \noexpand\thissectionname}% +        }% +      \fi +    \else +      \ifx\sectionlevel\seckeyword +        \toks0={#1}% +        \xdef\lastsectiondefs{% +          \gdef\noexpand\thissectionname{\the\toks0}% +          \gdef\noexpand\thissectionnum{#4}% +          % \noexpand\putwordSection avoids expanding indigestible +          % commands in some of the translations. +          \gdef\noexpand\thissection{\noexpand\putwordSection{} +                                     \noexpand\thissectionnum: +                                     \noexpand\thissectionname}% +        }% +      \fi +    \fi\fi\fi +    % +    % Go into vertical mode.  Usually we'll already be there, but we +    % don't want the following whatsit to end up in a preceding paragraph +    % if the document didn't happen to have a blank line. +    \par +    % +    % Output the mark.  Pass it through \safewhatsit, to take care of +    % the preceding space. +    \safewhatsit\domark      %      % Insert space above the heading.      \csname #2headingbreak\endcsname      % -    % Only insert the space after the number if we have a section number. -    \def\sectionlevel{#2}% -    \def\temptype{#3}% +    % Now the second mark, after the heading break.  No break points +    % between here and the heading. +    \let\prevsectiondefs=\lastsectiondefs +    \domark      % +    % Only insert the space after the number if we have a section number.      \ifx\temptype\Ynothingkeyword        \setbox0 = \hbox{}%        \def\toctype{unn}% -      \gdef\thissection{#1}% +      \gdef\lastsection{#1}%      \else\ifx\temptype\Yomitfromtockeyword        % for @headings -- no section number, don't include in toc, -      % and don't redefine \thissection. +      % and don't redefine \lastsection.        \setbox0 = \hbox{}%        \def\toctype{omit}%        \let\sectionlevel=\empty      \else\ifx\temptype\Yappendixkeyword        \setbox0 = \hbox{#4\enspace}%        \def\toctype{app}% -      \gdef\thissection{#1}% +      \gdef\lastsection{#1}%      \else        \setbox0 = \hbox{#4\enspace}%        \def\toctype{num}% -      \gdef\thissection{#1}% +      \gdef\lastsection{#1}%      \fi\fi\fi      % -    % Write the toc entry (before \donoderef).  See comments in \chfplain. +    % Write the toc entry (before \donoderef).  See comments in \chapmacro.      \writetocentry{\toctype\sectionlevel}{#1}{#4}%      %      % Write the node reference (= pdf destination for pdftex). -    % Again, see comments in \chfplain. +    % Again, see comments in \chapmacro.      \donoderef{#3}%      % +    % Interline glue will be inserted when the vbox is completed. +    % That glue will be a valid breakpoint for the page, since it'll be +    % preceded by a whatsit (usually from the \donoderef, or from the +    % \writetocentry if there was no node).  We don't want to allow that +    % break, since then the whatsits could end up on page n while the +    % section is on page n+1, thus toc/etc. are wrong.  Debian bug 276000. +    \nobreak +    %      % Output the actual section heading. -    \vbox{\hyphenpenalty=10000 \tolerance=5000 \parindent=0pt \raggedright +    \vbox{\hyphenpenalty=10000 \tolerance=5000 \parindent=0pt \ptexraggedright            \hangindent=\wd0  % zero if no section number            \unhbox0 #1}%    }% @@ -4441,11 +5647,11 @@ where each line of input produces a line of output.}    % glue accumulate.  (Not a breakpoint because it's preceded by a    % discardable item.)    \vskip-\parskip -  %  +  %    % This is purely so the last item on the list is a known \penalty >    % 10000.  This is so \startdefun can avoid allowing breakpoints after    % section headings.  Otherwise, it would insert a valid breakpoint between: -  %  +  %    %   @section sec-whatever    %   @deffn def-whatever    \penalty 10001 @@ -4482,11 +5688,11 @@ where each line of input produces a line of output.}      \fi      %      \iflinks -      \toks0 = {#2}% -      \toks2 = \expandafter{\lastnode}% -      \edef\temp{\write\tocfile{\realbackslash #1entry{\the\toks0}{#3}% -                               {\the\toks2}{\noexpand\folio}}}% -      \temp +      {\atdummies +       \edef\temp{% +         \write\tocfile{@#1entry{#2}{#3}{\lastnode}{\noexpand\folio}}}% +       \temp +      }%      \fi    \fi    % @@ -4499,6 +5705,31 @@ where each line of input produces a line of output.}    \ifpdf \global\pdfmakepagedesttrue \fi  } + +% These characters do not print properly in the Computer Modern roman +% fonts, so we must take special care.  This is more or less redundant +% with the Texinfo input format setup at the end of this file. +% +\def\activecatcodes{% +  \catcode`\"=\active +  \catcode`\$=\active +  \catcode`\<=\active +  \catcode`\>=\active +  \catcode`\\=\active +  \catcode`\^=\active +  \catcode`\_=\active +  \catcode`\|=\active +  \catcode`\~=\active +} + + +% Read the toc file, which is essentially Texinfo input. +\def\readtocfile{% +  \setupdatafile +  \activecatcodes +  \input \tocreadfilename +} +  \newskip\contentsrightmargin \contentsrightmargin=1in  \newcount\savepageno  \newcount\lastnegativepageno \lastnegativepageno = -1 @@ -4515,29 +5746,29 @@ where each line of input produces a line of output.}    %    % Don't need to put `Contents' or `Short Contents' in the headline.    % It is abundantly clear what they are. -  \def\thischapter{}%    \chapmacro{#1}{Yomitfromtoc}{}%    %    \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 -    % title fails, e.g., @chapter ^ -- exponentiation.  --karl, 9jul97. -    %\catcode`\^=7 % to see ^^e4 as \"a etc. juha@piuha.ydi.vtt.fi -    \raggedbottom             % Worry more about breakpoints than the bottom. +    \raggedbottom              % Worry more about breakpoints than the bottom.      \advance\hsize by -\contentsrightmargin % Don't use the full line length.      %      % Roman numerals for page numbers.      \ifnum \pageno>0 \global\pageno = \lastnegativepageno \fi  } +% redefined for the two-volume lispref.  We always output on +% \jobname.toc even if this is redefined. +% +\def\tocreadfilename{\jobname.toc}  % Normal (long) toc. +%  \def\contents{%    \startcontents{\putwordTOC}% -    \openin 1 \jobname.toc +    \openin 1 \tocreadfilename\space      \ifeof 1 \else -      \input \jobname.toc +      \readtocfile      \fi      \vfill \eject      \contentsalignmacro % in case @setchapternewpage odd is in effect @@ -4573,9 +5804,9 @@ where each line of input produces a line of output.}      \let\numsubsubsecentry = \numsecentry      \let\appsubsubsecentry = \numsecentry      \let\unnsubsubsecentry = \numsecentry -    \openin 1 \jobname.toc +    \openin 1 \tocreadfilename\space      \ifeof 1 \else -      \input \jobname.toc +      \readtocfile      \fi      \closein 1      \vfill \eject @@ -4698,45 +5929,12 @@ where each line of input produces a line of output.}  \message{environments,}  % @foo ... @end foo. -% @point{}, @result{}, @expansion{}, @print{}, @equiv{}. -% -% 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. -% -\def\point{$\star$} -\def\result{\leavevmode\raise.15ex\hbox to 1em{\hfil$\Rightarrow$\hfil}} -\def\expansion{\leavevmode\raise.1ex\hbox to 1em{\hfil$\mapsto$\hfil}} -\def\print{\leavevmode\lower.1ex\hbox to 1em{\hfil$\dashv$\hfil}} -\def\equiv{\leavevmode\lower.1ex\hbox to 1em{\hfil$\ptexequiv$\hfil}} - -% The @error{} command. -% Adapted from the TeXbook's \boxit. -% -\newbox\errorbox -% -{\tentt \global\dimen0 = 3em}% Width of the box. -\dimen2 = .55pt % Thickness of rules -% The text. (`r' is open on the right, `e' somewhat less so on the left.) -\setbox0 = \hbox{\kern-.75pt \tensf error\kern-1.5pt} -% -\setbox\errorbox=\hbox to \dimen0{\hfil -   \hsize = \dimen0 \advance\hsize by -5.8pt % Space to left+right. -   \advance\hsize by -2\dimen2 % Rules. -   \vbox{% -      \hrule height\dimen2 -      \hbox{\vrule width\dimen2 \kern3pt          % Space to left of text. -         \vtop{\kern2.4pt \box0 \kern2.4pt}% Space above/below. -         \kern3pt\vrule width\dimen2}% Space to right. -      \hrule height\dimen2} -    \hfil} -% -\def\error{\leavevmode\lower.7ex\copy\errorbox} -  % @tex ... @end tex    escapes into raw Tex temporarily.  % One exception: @ is still an escape character, so that @end tex works.  % But \@ or @@ will get a plain tex @ character.  \envdef\tex{% +  \setupmarkupstyle{tex}%    \catcode `\\=0 \catcode `\{=1 \catcode `\}=2    \catcode `\$=3 \catcode `\&=4 \catcode `\#=6    \catcode `\^=7 \catcode `\_=8 \catcode `\~=\active \let~=\tie @@ -4746,6 +5944,8 @@ where each line of input produces a line of output.}    \catcode `\|=\other    \catcode `\<=\other    \catcode `\>=\other +  \catcode`\`=\other +  \catcode`\'=\other    \escapechar=`\\    %    \let\b=\ptexb @@ -4765,6 +5965,8 @@ where each line of input produces a line of output.}    \let\/=\ptexslash    \let\*=\ptexstar    \let\t=\ptext +  \expandafter \let\csname top\endcsname=\ptextop  % outer +  \let\frenchspacing=\plainfrenchspacing    %    \def\endldots{\mathinner{\ldots\ldots\ldots\ldots}}%    \def\enddots{\relax\ifmmode\endldots\else$\mathsurround=0pt \endldots\,$\fi}% @@ -4810,7 +6012,8 @@ where each line of input produces a line of output.}  \let\afterenvbreak = \aboveenvbreak -% \nonarrowing is a flag.  If "set", @lisp etc don't narrow margins. +% \nonarrowing is a flag.  If "set", @lisp etc don't narrow margins; it will +% also clear it, so that its embedded environments do the narrowing again.  \let\nonarrowing=\relax  % @cartouche ... @end cartouche: draw rectangle w/rounded corners around @@ -4847,7 +6050,7 @@ where each line of input produces a line of output.}  				% each corner char, and rule thickness    \normbskip=\baselineskip \normpskip=\parskip \normlskip=\lineskip    % Flag to tell @lisp, etc., not to narrow margin. -  \let\nonarrowing=\comment +  \let\nonarrowing = t%    \vbox\bgroup        \baselineskip=0pt\parskip=0pt\lineskip=0pt        \carttop @@ -4878,6 +6081,7 @@ where each line of input produces a line of output.}  % This macro is called at the beginning of all the @example variants,  % inside a group. +\newdimen\nonfillparindent  \def\nonfillstart{%    \aboveenvbreak    \hfuzz = 12pt % Don't be fussy @@ -4885,17 +6089,40 @@ where each line of input produces a line of output.}    \let\par = \lisppar % don't ignore blank lines    \obeylines % each line of input is a line of output    \parskip = 0pt +  % Turn off paragraph indentation but redefine \indent to emulate +  % the normal \indent. +  \nonfillparindent=\parindent    \parindent = 0pt +  \let\indent\nonfillindent +  %    \emergencystretch = 0pt % don't try to avoid overfull boxes -  % @cartouche defines \nonarrowing to inhibit narrowing -  % at next level down.    \ifx\nonarrowing\relax      \advance \leftskip by \lispnarrowing      \exdentamount=\lispnarrowing +  \else +    \let\nonarrowing = \relax    \fi    \let\exdent=\nofillexdent  } +\begingroup +\obeyspaces +% We want to swallow spaces (but not other tokens) after the fake +% @indent in our nonfill-environments, where spaces are normally +% active and set to @tie, resulting in them not being ignored after +% @indent. +\gdef\nonfillindent{\futurelet\temp\nonfillindentcheck}% +\gdef\nonfillindentcheck{% +\ifx\temp % +\expandafter\nonfillindentgobble% +\else% +\leavevmode\nonfillindentbox% +\fi% +}% +\endgroup +\def\nonfillindentgobble#1{\nonfillindent} +\def\nonfillindentbox{\hbox to \nonfillparindent{\hss}} +  % If you want all examples etc. small: @set dispenvsize small.  % If you want even small examples the full size: @set dispenvsize nosmall.  % This affects the following displayed environments: @@ -4906,12 +6133,18 @@ where each line of input produces a line of output.}  \let\SETdispenvsize\relax  \def\setnormaldispenv{%    \ifx\SETdispenvsize\smallword +    % end paragraph for sake of leading, in case document has no blank +    % line.  This is redundant with what happens in \aboveenvbreak, but +    % we need to do it before changing the fonts, and it's inconvenient +    % to change the fonts afterward. +    \ifnum \lastpenalty=10000 \else \endgraf \fi      \smallexamplefonts \rm    \fi  }  \def\setsmalldispenv{%    \ifx\SETdispenvsize\nosmallword    \else +    \ifnum \lastpenalty=10000 \else \endgraf \fi      \smallexamplefonts \rm    \fi  } @@ -4938,11 +6171,10 @@ where each line of input produces a line of output.}  %  \maketwodispenvs {lisp}{example}{%    \nonfillstart -  \tt +  \tt\setupmarkupstyle{example}%    \let\kbdfont = \kbdexamplefont % Allow @kbd to do something special.    \gobble       % eat return  } -  % @display/@smalldisplay: same as @lisp except keep current font.  %  \makedispenv {display}{% @@ -4977,12 +6209,36 @@ where each line of input produces a line of output.}  \let\Eflushright = \afterenvbreak +% @raggedright does more-or-less normal line breaking but no right +% justification.  From plain.tex. +\envdef\raggedright{% +  \rightskip0pt plus2em \spaceskip.3333em \xspaceskip.5em\relax +} +\let\Eraggedright\par + +\envdef\raggedleft{% +  \parindent=0pt \leftskip0pt plus2em +  \spaceskip.3333em \xspaceskip.5em \parfillskip=0pt +  \hbadness=10000 % Last line will usually be underfull, so turn off +                  % badness reporting. +} +\let\Eraggedleft\par + +\envdef\raggedcenter{% +  \parindent=0pt \rightskip0pt plus1em \leftskip0pt plus1em +  \spaceskip.3333em \xspaceskip.5em \parfillskip=0pt +  \hbadness=10000 % Last line will usually be underfull, so turn off +                  % badness reporting. +} +\let\Eraggedcenter\par + +  % @quotation does normal linebreaking (hence we can't use \nonfillstart)  % and narrows the margins.  We keep \parskip nonzero in general, since  % we're doing normal filling.  So, when using \aboveenvbreak and  % \afterenvbreak, temporarily make \parskip 0.  % -\envdef\quotation{% +\def\quotationstart{%    {\parskip=0pt \aboveenvbreak}% because \aboveenvbreak inserts \parskip    \parindent=0pt    % @@ -4991,11 +6247,23 @@ where each line of input produces a line of output.}      \advance\leftskip by \lispnarrowing      \advance\rightskip by \lispnarrowing      \exdentamount = \lispnarrowing +  \else      \let\nonarrowing = \relax    \fi    \parsearg\quotationlabel  } +\envdef\quotation{% +  \setnormaldispenv +  \quotationstart +} + +\envdef\smallquotation{% +  \setsmalldispenv +  \quotationstart +} +\let\Esmallquotation = \Equotation +  % We have retained a nonzero parskip for the environment, since we're  % doing normal filling.  % @@ -5031,18 +6299,16 @@ where each line of input produces a line of output.}    \do\ \do\\\do\{\do\}\do\$\do\&%    \do\#\do\^\do\^^K\do\_\do\^^A\do\%\do\~%    \do\<\do\>\do\|\do\@\do+\do\"% +  % Don't do the quotes -- if we do, @set txicodequoteundirected and +  % @set txicodequotebacktick will not have effect on @verb and +  % @verbatim, and ?` and !` ligatures won't get disabled. +  %\do\`\do\'%  }  %  % [Knuth] p. 380  \def\uncatcodespecials{%    \def\do##1{\catcode`##1=\other}\dospecials}  % -% [Knuth] pp. 380,381,391 -% Disable Spanish ligatures ?` and !` of \tt font -\begingroup -  \catcode`\`=\active\gdef`{\relax\lq} -\endgroup -%  % Setup for the @verb command.  %  % Eight spaces for a tab @@ -5054,7 +6320,7 @@ where each line of input produces a line of output.}  \def\setupverb{%    \tt  % easiest (and conventionally used) font for verbatim    \def\par{\leavevmode\endgraf}% -  \catcode`\`=\active +  \setupmarkupstyle{verb}%    \tabeightspaces    % Respect line breaks,    % print special symbols as themselves, and @@ -5069,6 +6335,7 @@ where each line of input produces a line of output.}  \newdimen\tabw \setbox0=\hbox{\tt\space} \tabw=8\wd0 % tab amount  %  \def\starttabbox{\setbox0=\hbox\bgroup} +%  \begingroup    \catcode`\^^I=\active    \gdef\tabexpand{% @@ -5082,14 +6349,16 @@ where each line of input produces a line of output.}      }%    }  \endgroup + +% start the verbatim environment.  \def\setupverbatim{% +  \let\nonarrowing = t%    \nonfillstart -  \advance\leftskip by -\defbodyindent    % Easiest (and conventionally used) font for verbatim    \tt    \def\par{\leavevmode\egroup\box0\endgraf}% -  \catcode`\`=\active    \tabexpand +  \setupmarkupstyle{verbatim}%    % Respect line breaks,    % print special symbols as themselves, and    % make each space count @@ -5149,6 +6418,7 @@ where each line of input produces a line of output.}    {%      \makevalueexpandable      \setupverbatim +    \indexnofonts       % Allow `@@' and other weird things in file names.      \input #1      \afterenvbreak    }% @@ -5174,27 +6444,35 @@ where each line of input produces a line of output.}    \endgroup  } +  \message{defuns,}  % @defun etc.  \newskip\defbodyindent \defbodyindent=.4in  \newskip\defargsindent \defargsindent=50pt  \newskip\deflastargmargin \deflastargmargin=18pt +\newcount\defunpenalty  % Start the processing of @deffn:  \def\startdefun{%    \ifnum\lastpenalty<10000      \medbreak +    \defunpenalty=10003 % Will keep this @deffn together with the +                        % following @def command, see below.    \else      % If there are two @def commands in a row, we'll have a \nobreak,      % which is there to keep the function description together with its      % header.  But if there's nothing but headers, we need to allow a      % break somewhere.  Check specifically for penalty 10002, inserted -    % by \defargscommonending, instead of 10000, since the sectioning +    % by \printdefunline, instead of 10000, since the sectioning      % commands also insert a nobreak penalty, and we don't want to allow      % a break between a section heading and a defun. -    %  -    \ifnum\lastpenalty=10002 \penalty2000 \fi +    % +    % As a minor refinement, we avoid "club" headers by signalling +    % with penalty of 10003 after the very first @deffn in the +    % sequence (see above), and penalty of 10002 after any following +    % @def command. +    \ifnum\lastpenalty=10002 \penalty2000 \else \defunpenalty=10002 \fi      %      % Similarly, after a section heading, do not allow a break.      % But do insert the glue. @@ -5212,7 +6490,7 @@ where each line of input produces a line of output.}    %    % As above, allow line break if we have multiple x headers in a row.    % It's not a great place, though. -  \ifnum\lastpenalty=10002 \penalty3000 \fi +  \ifnum\lastpenalty=10002 \penalty3000 \else \defunpenalty=10002 \fi    %    % And now, it's time to reuse the body of the original defun:    \expandafter\gobbledefun#1% @@ -5230,7 +6508,7 @@ where each line of input produces a line of output.}      \advance\rightskip by 0pt plus 1fil      \endgraf      \nobreak\vskip -\parskip -    \penalty 10002  % signal to \startdefun and \dodefunx +    \penalty\defunpenalty  % signal to \startdefun and \dodefunx      % Some of the @defun-type tags do not enable magic parentheses,      % rendering the following check redundant.  But we don't optimize.      \checkparencounts @@ -5240,7 +6518,7 @@ where each line of input produces a line of output.}  \def\Edefun{\endgraf\medbreak}  % \makedefun{deffn} creates \deffn, \deffnx and \Edeffn; -% the only thing remainnig is to define \deffnheader. +% the only thing remaining is to define \deffnheader.  %  \def\makedefun#1{%    \expandafter\let\csname E#1\endcsname = \Edefun @@ -5419,7 +6697,7 @@ where each line of input produces a line of output.}    %    % On the other hand, if an argument has two dashes (for instance), we    % want a way to get ttsl.  Let's try @var for that. -  \let\var=\ttslanted +  \def\var##1{{\setupmarkupstyle{var}\ttslanted{##1}}}%    #1%    \sl\hyphenchar\font=45  } @@ -5499,12 +6777,14 @@ where each line of input produces a line of output.}    \ifnum\parencount=0 \else \badparencount \fi    \ifnum\brackcount=0 \else \badbrackcount \fi  } +% these should not use \errmessage; the glibc manual, at least, actually +% has such constructs (when documenting function pointers).  \def\badparencount{% -  \errmessage{Unbalanced parentheses in @def}% +  \message{Warning: unbalanced parentheses in @def...}%    \global\parencount=0  }  \def\badbrackcount{% -  \errmessage{Unbalanced square braces in @def}% +  \message{Warning: unbalanced square brackets in @def...}%    \global\brackcount=0  } @@ -5539,7 +6819,6 @@ where each line of input produces a line of output.}      \spaceisspace      %      % Append \endinput to make sure that TeX does not see the ending newline. -    %      % I've verified that it is necessary both for e-TeX and for ordinary TeX      %							--kasal, 29nov03      \scantokens{#1\endinput}% @@ -5554,14 +6833,25 @@ where each line of input produces a line of output.}  \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... + +% List of all defined macros in the form +%    \definedummyword\macro1\definedummyword\macro2... +% Currently is also contains all @aliases; the list can be split +% if there is a need. +\def\macrolist{} + +% Add the macro to \macrolist +\def\addtomacrolist#1{\expandafter \addtomacrolistxxx \csname#1\endcsname} +\def\addtomacrolistxxx#1{% +     \toks0 = \expandafter{\macrolist\definedummyword#1}% +     \xdef\macrolist{\the\toks0}% +}  % Utility routines.  % This does \let #1 = #2, with \csnames; that is,  %   \let \csname#1\endcsname = \csname#2\endcsname  % (except of course we have to play expansion games). -%  +%  \def\cslet#1#2{%    \expandafter\let    \csname#1\expandafter\endcsname @@ -5589,6 +6879,10 @@ where each line of input produces a line of output.}  % all characters are catcode 10, 11 or 12, except \ which is active  % (as in normal texinfo). It is necessary to change the definition of \. +% Non-ASCII encodings make 8-bit characters active, so un-activate +% them to avoid their expansion.  Must do this non-globally, to +% confine the change to the current group. +  % 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. @@ -5603,6 +6897,7 @@ where each line of input produces a line of output.}    \catcode`\_=\other    \catcode`\|=\other    \catcode`\~=\other +  \ifx\declaredencoding\ascii \else \setnonasciicharscatcodenonglobal\other \fi  }  \def\scanargctxt{% @@ -5653,10 +6948,7 @@ where each line of input produces a line of output.}       \else \errmessage{Macro name \the\macname\space already defined}\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}% +     \addtomacrolist{\the\macname}%    \fi    \begingroup \macrobodyctxt    \ifrecursive \expandafter\parsermacbody @@ -5670,7 +6962,7 @@ where each line of input produces a line of output.}      % Remove the macro name from \macrolist:      \begingroup        \expandafter\let\csname#1\endcsname \relax -      \let\do\unmacrodo +      \let\definedummyword\unmacrodo        \xdef\macrolist{\macrolist}%      \endgroup    \else @@ -5682,10 +6974,10 @@ where each line of input produces a line of output.}  % macro definitions that have been changed to \relax.  %  \def\unmacrodo#1{% -  \ifx#1\relax +  \ifx #1\relax      % remove this    \else -    \noexpand\do \noexpand #1% +    \noexpand\definedummyword \noexpand#1%    \fi  } @@ -5798,30 +7090,11 @@ where each line of input produces a line of output.}  % {.  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\braceorline#1{\let\macnamexxx=#1\futurelet\nchar\braceorlinexxx}  \def\braceorlinexxx{%    \ifx\nchar\bgroup\else      \expandafter\parsearg -  \fi \next} - -% We want 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} - -% For \indexnofonts, we need to get rid of all macros, leaving only the -% arguments (if present).  Of course this is not nearly correct, but it -% is the best we can do for now.  makeinfo does not expand macros in the -% argument to @deffn, which ends up writing an index entry, and texindex -% isn't prepared for an index sort entry that starts with \. -%  -% Since macro invocations are followed by braces, we can just redefine them -% to take a single TeX argument.  The case of a macro invocation that -% goes to end-of-line is not handled. -%  -\def\emptyusermacros{\begingroup -  \def\do##1{\let\noexpand##1=\noexpand\asis}% -  \edef\next{\macrolist}\expandafter\endgroup\next} +  \fi \macnamexxx}  % @alias. @@ -5832,6 +7105,7 @@ where each line of input produces a line of output.}  \def\aliasyyy #1=#2\relax{%    {%      \expandafter\let\obeyedspace=\empty +    \addtomacrolist{#1}%      \xdef\next{\global\let\makecsname{#1}=\makecsname{#2}}%    }%    \next @@ -5841,7 +7115,6 @@ where each line of input produces a line of output.}  \message{cross references,}  \newwrite\auxfile -  \newif\ifhavexrefs    % True if xref values are known.  \newif\ifwarnedxrefs  % True if we warned once that they aren't known. @@ -5886,7 +7159,7 @@ where each line of input produces a line of output.}  % \setref{NAME}{SNT} defines a cross-reference point NAME (a node or an  % anchor), which consists of three parts: -% 1) NAME-title - the current sectioning name taken from \thissection, +% 1) NAME-title - the current sectioning name taken from \lastsection,  %                 or the anchor name.  % 2) NAME-snt   - section number and type, passed as the SNT arg, or  %                 empty for anchors. @@ -5901,16 +7174,14 @@ where each line of input produces a line of output.}    \iflinks      {%        \atdummies  % preserve commands, but don't expand them -      \turnoffactive -      \otherbackslash        \edef\writexrdef##1##2{%  	\write\auxfile{@xrdef{#1-% #1 of \setref, expanded by the \edef  	  ##1}{##2}}% these are parameters of \writexrdef        }% -      \toks0 = \expandafter{\thissection}% +      \toks0 = \expandafter{\lastsection}%        \immediate \writexrdef{title}{\the\toks0 }%        \immediate \writexrdef{snt}{\csname #2\endcsname}% \Ynumbered etc. -      \writexrdef{pg}{\folio}% will be written later, during \shipout +      \safewhatsit{\writexrdef{pg}{\folio}}% will be written later, during \shipout      }%    \fi  } @@ -5954,18 +7225,25 @@ where each line of input produces a line of output.}    %    % Make link in pdf output.    \ifpdf -    \leavevmode -    \getfilename{#4}% -    {\turnoffactive \otherbackslash +    {\indexnofonts +     \turnoffactive +     % This expands tokens, so do it after making catcode changes, so _ +     % etc. don't get their TeX definitions. +     \getfilename{#4}% +     % +     % See comments at \activebackslashdouble. +     {\activebackslashdouble \xdef\pdfxrefdest{#1}% +      \backslashparens\pdfxrefdest}% +     % +     \leavevmode +     \startlink attr{/Border [0 0 0]}%       \ifnum\filenamelength>0 -       \startlink attr{/Border [0 0 0]}% -         goto file{\the\filename.pdf} name{#1}% +       goto file{\the\filename.pdf} name{\pdfxrefdest}%       \else -       \startlink attr{/Border [0 0 0]}% -         goto name{\pdfmkpgn{#1}}% +       goto name{\pdfmkpgn{\pdfxrefdest}}%       \fi      }% -    \linkcolor +    \setcolor{\linkcolor}%    \fi    %    % Float references are printed completely differently: "Figure 1.2" @@ -5976,7 +7254,6 @@ where each line of input produces a line of output.}      % include an _ in the xref name, etc.      \indexnofonts      \turnoffactive -    \otherbackslash      \expandafter\global\expandafter\let\expandafter\Xthisreftitle        \csname XR#1-title\endcsname    }% @@ -5984,7 +7261,7 @@ where each line of input produces a line of output.}      % If the user specified the print name (third arg) to the ref,      % print it instead of our usual "Figure 1.2".      \ifdim\wd0 = 0pt -      \refx{#1-snt}% +      \refx{#1-snt}{}%      \else        \printedrefname      \fi @@ -6004,14 +7281,14 @@ where each line of input produces a line of output.}      % 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.      \ifdim \wd1 > 0pt -      \putwordsection{} ``\printedrefname'' \putwordin{} \cite{\printedmanual}% +      \putwordSection{} ``\printedrefname'' \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 \otherbackslash +      {\turnoffactive         % 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}{}}% @@ -6024,7 +7301,7 @@ where each line of input produces a line of output.}        ,\space        %        % output the `page 3'. -      \turnoffactive \otherbackslash \putwordpage\tie\refx{#1-pg}{}% +      \turnoffactive \putwordpage\tie\refx{#1-pg}{}%      \fi    \fi    \endlink @@ -6100,10 +7377,18 @@ where each line of input produces a line of output.}  % collisions).  But if this is a float type, we have more work to do.  %  \def\xrdef#1#2{% -  \expandafter\gdef\csname XR#1\endcsname{#2}% remember this xref value. +  {% The node name might contain 8-bit characters, which in our current +   % implementation are changed to commands like @'e.  Don't let these +   % mess up the control sequence name. +    \indexnofonts +    \turnoffactive +    \xdef\safexrefname{#1}% +  }% +  % +  \expandafter\gdef\csname XR\safexrefname\endcsname{#2}% remember this xref    %    % Was that xref control sequence that we just defined for a float? -  \expandafter\iffloat\csname XR#1\endcsname +  \expandafter\iffloat\csname XR\safexrefname\endcsname      % it was a float, and we have the (safe) float type in \iffloattype.      \expandafter\let\expandafter\floatlist        \csname floatlist\iffloattype\endcsname @@ -6118,7 +7403,8 @@ where each line of input produces a line of output.}      %      % Remember this xref in the control sequence \floatlistFLOATTYPE,      % for later use in \listoffloats. -    \expandafter\xdef\csname floatlist\iffloattype\endcsname{\the\toks0{#1}}% +    \expandafter\xdef\csname floatlist\iffloattype\endcsname{\the\toks0 +      {\safexrefname}}%    \fi  } @@ -6127,13 +7413,13 @@ where each line of input produces a line of output.}  \def\tryauxfile{%    \openin 1 \jobname.aux    \ifeof 1 \else -    \readauxfile +    \readdatafile{aux}%      \global\havexrefstrue    \fi    \closein 1  } -\def\readauxfile{\begingroup +\def\setupdatafile{%    \catcode`\^^@=\other    \catcode`\^^A=\other    \catcode`\^^B=\other @@ -6202,11 +7488,11 @@ where each line of input produces a line of output.}    %    % Make the characters 128-255 be printing characters.    {% -    \count 1=128 +    \count1=128      \def\loop{% -      \catcode\count 1=\other -      \advance\count 1 by 1 -      \ifnum \count 1<256 \loop \fi +      \catcode\count1=\other +      \advance\count1 by 1 +      \ifnum \count1<256 \loop \fi      }%    }%    % @@ -6214,8 +7500,12 @@ where each line of input produces a line of output.}    \catcode`\{=1    \catcode`\}=2    \catcode`\@=0 -  % -  \input \jobname.aux +} + +\def\readdatafile#1{% +\begingroup +  \setupdatafile +  \input\jobname.#1  \endgroup} @@ -6301,7 +7591,7 @@ where each line of input produces a line of output.}  % In case a @footnote appears in a vbox, save the footnote text and create  % the real \insert just after the vbox finished.  Otherwise, the insertion  % would be lost. -% Similarily, if a @footnote appears inside an alignment, save the footnote +% Similarly, if a @footnote appears inside an alignment, save the footnote  % text to a box and make the \insert when a row of the table is finished.  % And the same can be done for other insert classes.  --kasal, 16nov03. @@ -6405,15 +7695,19 @@ where each line of input produces a line of output.}    % If the image is by itself, center it.    \ifvmode      \imagevmodetrue -    \nobreak\bigskip +    \nobreak\medskip      % Usually we'll have text after the image which will insert      % \parskip glue, so insert it here too to equalize the space      % above and below.      \nobreak\vskip\parskip      \nobreak -    \line\bgroup\hss    \fi    % +  % Leave vertical mode so that indentation from an enclosing +  % environment such as @quotation is respected.  On the other hand, if +  % it's at the top level, we don't want the normal paragraph indentation. +  \noindent +  %    % Output the image.    \ifpdf      \dopdfimage{#1}{#2}{#3}% @@ -6424,7 +7718,7 @@ where each line of input produces a line of output.}      \epsfbox{#1.eps}%    \fi    % -  \ifimagevmode \hss \egroup \bigbreak \fi  % space after the image +  \ifimagevmode \medskip \fi  % space after the standalone image  \endgroup} @@ -6491,13 +7785,13 @@ where each line of input produces a line of output.}        \global\advance\floatno by 1        %        {% -        % This magic value for \thissection is output by \setref as the +        % This magic value for \lastsection is output by \setref as the          % XREFLABEL-title value.  \xrefX uses it to distinguish float          % labels (which have a completely different output format) from          % node and anchor labels.  And \xrdef uses it to construct the          % lists of floats.          % -        \edef\thissection{\floatmagic=\safefloattype}% +        \edef\lastsection{\floatmagic=\safefloattype}%          \setref{\floatlabel}{Yfloat}%        }%      \fi @@ -6564,7 +7858,8 @@ where each line of input produces a line of output.}        % \floatlabel-lof.  Besides \floatident, we include the short        % caption if specified, else the full caption if specified, else nothing.        {% -        \atdummies \turnoffactive \otherbackslash +        \atdummies +        %          % since we read the caption text in the macro world, where ^^M          % is turned into a normal character, we have to scan it back, so          % we don't write the literal three characters "^^M" into the aux file. @@ -6585,8 +7880,9 @@ where each line of input produces a line of output.}    %    % place the captured inserts    % -  % BEWARE: when the floats start float, we have to issue warning whenever an -  % insert appears inside a float which could possibly float. --kasal, 26may04 +  % BEWARE: when the floats start floating, we have to issue warning +  % whenever an insert appears inside a float which could possibly +  % float. --kasal, 26may04    %    \checkinserts  } @@ -6630,7 +7926,7 @@ where each line of input produces a line of output.}  % #1 is the control sequence we are passed; we expand into a conditional  % which is true if #1 represents a float ref.  That is, the magic -% \thissection value which we \setref above. +% \lastsection value which we \setref above.  %  \def\iffloat#1{\expandafter\doiffloat#1==\finish}  % @@ -6691,39 +7987,909 @@ where each line of input produces a line of output.}    \writeentry  }} +  \message{localization,} -% and i18n. -% @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. +% For single-language documents, @documentlanguage is usually given very +% early, just after @documentencoding.  Single argument is the language +% (de) or locale (de_DE) abbreviation.  % -\parseargdef\documentlanguage{% +{ +  \catcode`\_ = \active +  \globaldefs=1 +\parseargdef\documentlanguage{\begingroup +  \let_=\normalunderscore  % normal _ character for filenames    \tex % read txi-??.tex file in plain TeX. -    % Read the file if it exists. +    % Read the file by the name they passed if it exists.      \openin 1 txi-#1.tex      \ifeof 1 -      \errhelp = \nolanghelp -      \errmessage{Cannot read language file txi-#1.tex}% +      \documentlanguagetrywithoutunderscore{#1_\finish}%      \else +      \globaldefs = 1  % everything in the txi-LL files needs to persist        \input txi-#1.tex      \fi      \closein 1 -  \endgroup +  \endgroup % end raw TeX +\endgroup} +% +% If they passed de_DE, and txi-de_DE.tex doesn't exist, +% try txi-de.tex. +% +\gdef\documentlanguagetrywithoutunderscore#1_#2\finish{% +  \openin 1 txi-#1.tex +  \ifeof 1 +    \errhelp = \nolanghelp +    \errmessage{Cannot read language file txi-#1.tex}% +  \else +    \globaldefs = 1  % everything in the txi-LL files needs to persist +    \input txi-#1.tex +  \fi +  \closein 1  } +}% end of special _ catcode +%  \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.} +is empty.  Maybe you need to install it?  Putting it in the current +directory should work if nowhere else does.} +% This macro is called from txi-??.tex files; the first argument is the +% \language name to set (without the "\lang@" prefix), the second and +% third args are \{left,right}hyphenmin. +% +% The language names to pass are determined when the format is built. +% See the etex.log file created at that time, e.g., +% /usr/local/texlive/2008/texmf-var/web2c/pdftex/etex.log. +% +% With TeX Live 2008, etex now includes hyphenation patterns for all +% available languages.  This means we can support hyphenation in +% Texinfo, at least to some extent.  (This still doesn't solve the +% accented characters problem.) +% +\catcode`@=11 +\def\txisetlanguage#1#2#3{% +  % do not set the language if the name is undefined in the current TeX. +  \expandafter\ifx\csname lang@#1\endcsname \relax +    \message{no patterns for #1}% +  \else +    \global\language = \csname lang@#1\endcsname +  \fi +  % but there is no harm in adjusting the hyphenmin values regardless. +  \global\lefthyphenmin = #2\relax +  \global\righthyphenmin = #3\relax +} -% @documentencoding should change something in TeX eventually, most -% likely, but for now just recognize it. -\let\documentencoding = \comment +% Helpers for encodings. +% Set the catcode of characters 128 through 255 to the specified number. +% +\def\setnonasciicharscatcode#1{% +   \count255=128 +   \loop\ifnum\count255<256 +      \global\catcode\count255=#1\relax +      \advance\count255 by 1 +   \repeat +} +\def\setnonasciicharscatcodenonglobal#1{% +   \count255=128 +   \loop\ifnum\count255<256 +      \catcode\count255=#1\relax +      \advance\count255 by 1 +   \repeat +} -% Page size parameters. +% @documentencoding sets the definition of non-ASCII characters +% according to the specified encoding.  % +\parseargdef\documentencoding{% +  % Encoding being declared for the document. +  \def\declaredencoding{\csname #1.enc\endcsname}% +  % +  % Supported encodings: names converted to tokens in order to be able +  % to compare them with \ifx. +  \def\ascii{\csname US-ASCII.enc\endcsname}% +  \def\latnine{\csname ISO-8859-15.enc\endcsname}% +  \def\latone{\csname ISO-8859-1.enc\endcsname}% +  \def\lattwo{\csname ISO-8859-2.enc\endcsname}% +  \def\utfeight{\csname UTF-8.enc\endcsname}% +  % +  \ifx \declaredencoding \ascii +     \asciichardefs +  % +  \else \ifx \declaredencoding \lattwo +     \setnonasciicharscatcode\active +     \lattwochardefs +  % +  \else \ifx \declaredencoding \latone +     \setnonasciicharscatcode\active +     \latonechardefs +  % +  \else \ifx \declaredencoding \latnine +     \setnonasciicharscatcode\active +     \latninechardefs +  % +  \else \ifx \declaredencoding \utfeight +     \setnonasciicharscatcode\active +     \utfeightchardefs +  % +  \else +    \message{Unknown document encoding #1, ignoring.}% +  % +  \fi % utfeight +  \fi % latnine +  \fi % latone +  \fi % lattwo +  \fi % ascii +} + +% A message to be logged when using a character that isn't available +% the default font encoding (OT1). +% +\def\missingcharmsg#1{\message{Character missing in OT1 encoding: #1.}} + +% Take account of \c (plain) vs. \, (Texinfo) difference. +\def\cedilla#1{\ifx\c\ptexc\c{#1}\else\,{#1}\fi} + +% First, make active non-ASCII characters in order for them to be +% correctly categorized when TeX reads the replacement text of +% macros containing the character definitions. +\setnonasciicharscatcode\active +% +% Latin1 (ISO-8859-1) character definitions. +\def\latonechardefs{% +  \gdef^^a0{~} +  \gdef^^a1{\exclamdown} +  \gdef^^a2{\missingcharmsg{CENT SIGN}} +  \gdef^^a3{{\pounds}} +  \gdef^^a4{\missingcharmsg{CURRENCY SIGN}} +  \gdef^^a5{\missingcharmsg{YEN SIGN}} +  \gdef^^a6{\missingcharmsg{BROKEN BAR}} +  \gdef^^a7{\S} +  \gdef^^a8{\"{}} +  \gdef^^a9{\copyright} +  \gdef^^aa{\ordf} +  \gdef^^ab{\guillemetleft} +  \gdef^^ac{$\lnot$} +  \gdef^^ad{\-} +  \gdef^^ae{\registeredsymbol} +  \gdef^^af{\={}} +  % +  \gdef^^b0{\textdegree} +  \gdef^^b1{$\pm$} +  \gdef^^b2{$^2$} +  \gdef^^b3{$^3$} +  \gdef^^b4{\'{}} +  \gdef^^b5{$\mu$} +  \gdef^^b6{\P} +  % +  \gdef^^b7{$^.$} +  \gdef^^b8{\cedilla\ } +  \gdef^^b9{$^1$} +  \gdef^^ba{\ordm} +  % +  \gdef^^bb{\guilletright} +  \gdef^^bc{$1\over4$} +  \gdef^^bd{$1\over2$} +  \gdef^^be{$3\over4$} +  \gdef^^bf{\questiondown} +  % +  \gdef^^c0{\`A} +  \gdef^^c1{\'A} +  \gdef^^c2{\^A} +  \gdef^^c3{\~A} +  \gdef^^c4{\"A} +  \gdef^^c5{\ringaccent A} +  \gdef^^c6{\AE} +  \gdef^^c7{\cedilla C} +  \gdef^^c8{\`E} +  \gdef^^c9{\'E} +  \gdef^^ca{\^E} +  \gdef^^cb{\"E} +  \gdef^^cc{\`I} +  \gdef^^cd{\'I} +  \gdef^^ce{\^I} +  \gdef^^cf{\"I} +  % +  \gdef^^d0{\DH} +  \gdef^^d1{\~N} +  \gdef^^d2{\`O} +  \gdef^^d3{\'O} +  \gdef^^d4{\^O} +  \gdef^^d5{\~O} +  \gdef^^d6{\"O} +  \gdef^^d7{$\times$} +  \gdef^^d8{\O} +  \gdef^^d9{\`U} +  \gdef^^da{\'U} +  \gdef^^db{\^U} +  \gdef^^dc{\"U} +  \gdef^^dd{\'Y} +  \gdef^^de{\TH} +  \gdef^^df{\ss} +  % +  \gdef^^e0{\`a} +  \gdef^^e1{\'a} +  \gdef^^e2{\^a} +  \gdef^^e3{\~a} +  \gdef^^e4{\"a} +  \gdef^^e5{\ringaccent a} +  \gdef^^e6{\ae} +  \gdef^^e7{\cedilla c} +  \gdef^^e8{\`e} +  \gdef^^e9{\'e} +  \gdef^^ea{\^e} +  \gdef^^eb{\"e} +  \gdef^^ec{\`{\dotless i}} +  \gdef^^ed{\'{\dotless i}} +  \gdef^^ee{\^{\dotless i}} +  \gdef^^ef{\"{\dotless i}} +  % +  \gdef^^f0{\dh} +  \gdef^^f1{\~n} +  \gdef^^f2{\`o} +  \gdef^^f3{\'o} +  \gdef^^f4{\^o} +  \gdef^^f5{\~o} +  \gdef^^f6{\"o} +  \gdef^^f7{$\div$} +  \gdef^^f8{\o} +  \gdef^^f9{\`u} +  \gdef^^fa{\'u} +  \gdef^^fb{\^u} +  \gdef^^fc{\"u} +  \gdef^^fd{\'y} +  \gdef^^fe{\th} +  \gdef^^ff{\"y} +} + +% Latin9 (ISO-8859-15) encoding character definitions. +\def\latninechardefs{% +  % Encoding is almost identical to Latin1. +  \latonechardefs +  % +  \gdef^^a4{\euro} +  \gdef^^a6{\v S} +  \gdef^^a8{\v s} +  \gdef^^b4{\v Z} +  \gdef^^b8{\v z} +  \gdef^^bc{\OE} +  \gdef^^bd{\oe} +  \gdef^^be{\"Y} +} + +% Latin2 (ISO-8859-2) character definitions. +\def\lattwochardefs{% +  \gdef^^a0{~} +  \gdef^^a1{\ogonek{A}} +  \gdef^^a2{\u{}} +  \gdef^^a3{\L} +  \gdef^^a4{\missingcharmsg{CURRENCY SIGN}} +  \gdef^^a5{\v L} +  \gdef^^a6{\'S} +  \gdef^^a7{\S} +  \gdef^^a8{\"{}} +  \gdef^^a9{\v S} +  \gdef^^aa{\cedilla S} +  \gdef^^ab{\v T} +  \gdef^^ac{\'Z} +  \gdef^^ad{\-} +  \gdef^^ae{\v Z} +  \gdef^^af{\dotaccent Z} +  % +  \gdef^^b0{\textdegree} +  \gdef^^b1{\ogonek{a}} +  \gdef^^b2{\ogonek{ }} +  \gdef^^b3{\l} +  \gdef^^b4{\'{}} +  \gdef^^b5{\v l} +  \gdef^^b6{\'s} +  \gdef^^b7{\v{}} +  \gdef^^b8{\cedilla\ } +  \gdef^^b9{\v s} +  \gdef^^ba{\cedilla s} +  \gdef^^bb{\v t} +  \gdef^^bc{\'z} +  \gdef^^bd{\H{}} +  \gdef^^be{\v z} +  \gdef^^bf{\dotaccent z} +  % +  \gdef^^c0{\'R} +  \gdef^^c1{\'A} +  \gdef^^c2{\^A} +  \gdef^^c3{\u A} +  \gdef^^c4{\"A} +  \gdef^^c5{\'L} +  \gdef^^c6{\'C} +  \gdef^^c7{\cedilla C} +  \gdef^^c8{\v C} +  \gdef^^c9{\'E} +  \gdef^^ca{\ogonek{E}} +  \gdef^^cb{\"E} +  \gdef^^cc{\v E} +  \gdef^^cd{\'I} +  \gdef^^ce{\^I} +  \gdef^^cf{\v D} +  % +  \gdef^^d0{\DH} +  \gdef^^d1{\'N} +  \gdef^^d2{\v N} +  \gdef^^d3{\'O} +  \gdef^^d4{\^O} +  \gdef^^d5{\H O} +  \gdef^^d6{\"O} +  \gdef^^d7{$\times$} +  \gdef^^d8{\v R} +  \gdef^^d9{\ringaccent U} +  \gdef^^da{\'U} +  \gdef^^db{\H U} +  \gdef^^dc{\"U} +  \gdef^^dd{\'Y} +  \gdef^^de{\cedilla T} +  \gdef^^df{\ss} +  % +  \gdef^^e0{\'r} +  \gdef^^e1{\'a} +  \gdef^^e2{\^a} +  \gdef^^e3{\u a} +  \gdef^^e4{\"a} +  \gdef^^e5{\'l} +  \gdef^^e6{\'c} +  \gdef^^e7{\cedilla c} +  \gdef^^e8{\v c} +  \gdef^^e9{\'e} +  \gdef^^ea{\ogonek{e}} +  \gdef^^eb{\"e} +  \gdef^^ec{\v e} +  \gdef^^ed{\'\i} +  \gdef^^ee{\^\i} +  \gdef^^ef{\v d} +  % +  \gdef^^f0{\dh} +  \gdef^^f1{\'n} +  \gdef^^f2{\v n} +  \gdef^^f3{\'o} +  \gdef^^f4{\^o} +  \gdef^^f5{\H o} +  \gdef^^f6{\"o} +  \gdef^^f7{$\div$} +  \gdef^^f8{\v r} +  \gdef^^f9{\ringaccent u} +  \gdef^^fa{\'u} +  \gdef^^fb{\H u} +  \gdef^^fc{\"u} +  \gdef^^fd{\'y} +  \gdef^^fe{\cedilla t} +  \gdef^^ff{\dotaccent{}} +} + +% UTF-8 character definitions. +% +% This code to support UTF-8 is based on LaTeX's utf8.def, with some +% changes for Texinfo conventions.  It is included here under the GPL by +% permission from Frank Mittelbach and the LaTeX team. +% +\newcount\countUTFx +\newcount\countUTFy +\newcount\countUTFz + +\gdef\UTFviiiTwoOctets#1#2{\expandafter +   \UTFviiiDefined\csname u8:#1\string #2\endcsname} +% +\gdef\UTFviiiThreeOctets#1#2#3{\expandafter +   \UTFviiiDefined\csname u8:#1\string #2\string #3\endcsname} +% +\gdef\UTFviiiFourOctets#1#2#3#4{\expandafter +   \UTFviiiDefined\csname u8:#1\string #2\string #3\string #4\endcsname} + +\gdef\UTFviiiDefined#1{% +  \ifx #1\relax +    \message{\linenumber Unicode char \string #1 not defined for Texinfo}% +  \else +    \expandafter #1% +  \fi +} + +\begingroup +  \catcode`\~13 +  \catcode`\"12 + +  \def\UTFviiiLoop{% +    \global\catcode\countUTFx\active +    \uccode`\~\countUTFx +    \uppercase\expandafter{\UTFviiiTmp}% +    \advance\countUTFx by 1 +    \ifnum\countUTFx < \countUTFy +      \expandafter\UTFviiiLoop +    \fi} + +  \countUTFx = "C2 +  \countUTFy = "E0 +  \def\UTFviiiTmp{% +    \xdef~{\noexpand\UTFviiiTwoOctets\string~}} +  \UTFviiiLoop + +  \countUTFx = "E0 +  \countUTFy = "F0 +  \def\UTFviiiTmp{% +    \xdef~{\noexpand\UTFviiiThreeOctets\string~}} +  \UTFviiiLoop + +  \countUTFx = "F0 +  \countUTFy = "F4 +  \def\UTFviiiTmp{% +    \xdef~{\noexpand\UTFviiiFourOctets\string~}} +  \UTFviiiLoop +\endgroup + +\begingroup +  \catcode`\"=12 +  \catcode`\<=12 +  \catcode`\.=12 +  \catcode`\,=12 +  \catcode`\;=12 +  \catcode`\!=12 +  \catcode`\~=13 + +  \gdef\DeclareUnicodeCharacter#1#2{% +    \countUTFz = "#1\relax +    \wlog{\space\space defining Unicode char U+#1 (decimal \the\countUTFz)}% +    \begingroup +      \parseXMLCharref +      \def\UTFviiiTwoOctets##1##2{% +        \csname u8:##1\string ##2\endcsname}% +      \def\UTFviiiThreeOctets##1##2##3{% +        \csname u8:##1\string ##2\string ##3\endcsname}% +      \def\UTFviiiFourOctets##1##2##3##4{% +        \csname u8:##1\string ##2\string ##3\string ##4\endcsname}% +      \expandafter\expandafter\expandafter\expandafter +       \expandafter\expandafter\expandafter +       \gdef\UTFviiiTmp{#2}% +    \endgroup} + +  \gdef\parseXMLCharref{% +    \ifnum\countUTFz < "A0\relax +      \errhelp = \EMsimple +      \errmessage{Cannot define Unicode char value < 00A0}% +    \else\ifnum\countUTFz < "800\relax +      \parseUTFviiiA,% +      \parseUTFviiiB C\UTFviiiTwoOctets.,% +    \else\ifnum\countUTFz < "10000\relax +      \parseUTFviiiA;% +      \parseUTFviiiA,% +      \parseUTFviiiB E\UTFviiiThreeOctets.{,;}% +    \else +      \parseUTFviiiA;% +      \parseUTFviiiA,% +      \parseUTFviiiA!% +      \parseUTFviiiB F\UTFviiiFourOctets.{!,;}% +    \fi\fi\fi +  } + +  \gdef\parseUTFviiiA#1{% +    \countUTFx = \countUTFz +    \divide\countUTFz by 64 +    \countUTFy = \countUTFz +    \multiply\countUTFz by 64 +    \advance\countUTFx by -\countUTFz +    \advance\countUTFx by 128 +    \uccode `#1\countUTFx +    \countUTFz = \countUTFy} + +  \gdef\parseUTFviiiB#1#2#3#4{% +    \advance\countUTFz by "#10\relax +    \uccode `#3\countUTFz +    \uppercase{\gdef\UTFviiiTmp{#2#3#4}}} +\endgroup + +\def\utfeightchardefs{% +  \DeclareUnicodeCharacter{00A0}{\tie} +  \DeclareUnicodeCharacter{00A1}{\exclamdown} +  \DeclareUnicodeCharacter{00A3}{\pounds} +  \DeclareUnicodeCharacter{00A8}{\"{ }} +  \DeclareUnicodeCharacter{00A9}{\copyright} +  \DeclareUnicodeCharacter{00AA}{\ordf} +  \DeclareUnicodeCharacter{00AB}{\guillemetleft} +  \DeclareUnicodeCharacter{00AD}{\-} +  \DeclareUnicodeCharacter{00AE}{\registeredsymbol} +  \DeclareUnicodeCharacter{00AF}{\={ }} + +  \DeclareUnicodeCharacter{00B0}{\ringaccent{ }} +  \DeclareUnicodeCharacter{00B4}{\'{ }} +  \DeclareUnicodeCharacter{00B8}{\cedilla{ }} +  \DeclareUnicodeCharacter{00BA}{\ordm} +  \DeclareUnicodeCharacter{00BB}{\guillemetright} +  \DeclareUnicodeCharacter{00BF}{\questiondown} + +  \DeclareUnicodeCharacter{00C0}{\`A} +  \DeclareUnicodeCharacter{00C1}{\'A} +  \DeclareUnicodeCharacter{00C2}{\^A} +  \DeclareUnicodeCharacter{00C3}{\~A} +  \DeclareUnicodeCharacter{00C4}{\"A} +  \DeclareUnicodeCharacter{00C5}{\AA} +  \DeclareUnicodeCharacter{00C6}{\AE} +  \DeclareUnicodeCharacter{00C7}{\cedilla{C}} +  \DeclareUnicodeCharacter{00C8}{\`E} +  \DeclareUnicodeCharacter{00C9}{\'E} +  \DeclareUnicodeCharacter{00CA}{\^E} +  \DeclareUnicodeCharacter{00CB}{\"E} +  \DeclareUnicodeCharacter{00CC}{\`I} +  \DeclareUnicodeCharacter{00CD}{\'I} +  \DeclareUnicodeCharacter{00CE}{\^I} +  \DeclareUnicodeCharacter{00CF}{\"I} + +  \DeclareUnicodeCharacter{00D0}{\DH} +  \DeclareUnicodeCharacter{00D1}{\~N} +  \DeclareUnicodeCharacter{00D2}{\`O} +  \DeclareUnicodeCharacter{00D3}{\'O} +  \DeclareUnicodeCharacter{00D4}{\^O} +  \DeclareUnicodeCharacter{00D5}{\~O} +  \DeclareUnicodeCharacter{00D6}{\"O} +  \DeclareUnicodeCharacter{00D8}{\O} +  \DeclareUnicodeCharacter{00D9}{\`U} +  \DeclareUnicodeCharacter{00DA}{\'U} +  \DeclareUnicodeCharacter{00DB}{\^U} +  \DeclareUnicodeCharacter{00DC}{\"U} +  \DeclareUnicodeCharacter{00DD}{\'Y} +  \DeclareUnicodeCharacter{00DE}{\TH} +  \DeclareUnicodeCharacter{00DF}{\ss} + +  \DeclareUnicodeCharacter{00E0}{\`a} +  \DeclareUnicodeCharacter{00E1}{\'a} +  \DeclareUnicodeCharacter{00E2}{\^a} +  \DeclareUnicodeCharacter{00E3}{\~a} +  \DeclareUnicodeCharacter{00E4}{\"a} +  \DeclareUnicodeCharacter{00E5}{\aa} +  \DeclareUnicodeCharacter{00E6}{\ae} +  \DeclareUnicodeCharacter{00E7}{\cedilla{c}} +  \DeclareUnicodeCharacter{00E8}{\`e} +  \DeclareUnicodeCharacter{00E9}{\'e} +  \DeclareUnicodeCharacter{00EA}{\^e} +  \DeclareUnicodeCharacter{00EB}{\"e} +  \DeclareUnicodeCharacter{00EC}{\`{\dotless{i}}} +  \DeclareUnicodeCharacter{00ED}{\'{\dotless{i}}} +  \DeclareUnicodeCharacter{00EE}{\^{\dotless{i}}} +  \DeclareUnicodeCharacter{00EF}{\"{\dotless{i}}} + +  \DeclareUnicodeCharacter{00F0}{\dh} +  \DeclareUnicodeCharacter{00F1}{\~n} +  \DeclareUnicodeCharacter{00F2}{\`o} +  \DeclareUnicodeCharacter{00F3}{\'o} +  \DeclareUnicodeCharacter{00F4}{\^o} +  \DeclareUnicodeCharacter{00F5}{\~o} +  \DeclareUnicodeCharacter{00F6}{\"o} +  \DeclareUnicodeCharacter{00F8}{\o} +  \DeclareUnicodeCharacter{00F9}{\`u} +  \DeclareUnicodeCharacter{00FA}{\'u} +  \DeclareUnicodeCharacter{00FB}{\^u} +  \DeclareUnicodeCharacter{00FC}{\"u} +  \DeclareUnicodeCharacter{00FD}{\'y} +  \DeclareUnicodeCharacter{00FE}{\th} +  \DeclareUnicodeCharacter{00FF}{\"y} + +  \DeclareUnicodeCharacter{0100}{\=A} +  \DeclareUnicodeCharacter{0101}{\=a} +  \DeclareUnicodeCharacter{0102}{\u{A}} +  \DeclareUnicodeCharacter{0103}{\u{a}} +  \DeclareUnicodeCharacter{0104}{\ogonek{A}} +  \DeclareUnicodeCharacter{0105}{\ogonek{a}} +  \DeclareUnicodeCharacter{0106}{\'C} +  \DeclareUnicodeCharacter{0107}{\'c} +  \DeclareUnicodeCharacter{0108}{\^C} +  \DeclareUnicodeCharacter{0109}{\^c} +  \DeclareUnicodeCharacter{0118}{\ogonek{E}} +  \DeclareUnicodeCharacter{0119}{\ogonek{e}} +  \DeclareUnicodeCharacter{010A}{\dotaccent{C}} +  \DeclareUnicodeCharacter{010B}{\dotaccent{c}} +  \DeclareUnicodeCharacter{010C}{\v{C}} +  \DeclareUnicodeCharacter{010D}{\v{c}} +  \DeclareUnicodeCharacter{010E}{\v{D}} + +  \DeclareUnicodeCharacter{0112}{\=E} +  \DeclareUnicodeCharacter{0113}{\=e} +  \DeclareUnicodeCharacter{0114}{\u{E}} +  \DeclareUnicodeCharacter{0115}{\u{e}} +  \DeclareUnicodeCharacter{0116}{\dotaccent{E}} +  \DeclareUnicodeCharacter{0117}{\dotaccent{e}} +  \DeclareUnicodeCharacter{011A}{\v{E}} +  \DeclareUnicodeCharacter{011B}{\v{e}} +  \DeclareUnicodeCharacter{011C}{\^G} +  \DeclareUnicodeCharacter{011D}{\^g} +  \DeclareUnicodeCharacter{011E}{\u{G}} +  \DeclareUnicodeCharacter{011F}{\u{g}} + +  \DeclareUnicodeCharacter{0120}{\dotaccent{G}} +  \DeclareUnicodeCharacter{0121}{\dotaccent{g}} +  \DeclareUnicodeCharacter{0124}{\^H} +  \DeclareUnicodeCharacter{0125}{\^h} +  \DeclareUnicodeCharacter{0128}{\~I} +  \DeclareUnicodeCharacter{0129}{\~{\dotless{i}}} +  \DeclareUnicodeCharacter{012A}{\=I} +  \DeclareUnicodeCharacter{012B}{\={\dotless{i}}} +  \DeclareUnicodeCharacter{012C}{\u{I}} +  \DeclareUnicodeCharacter{012D}{\u{\dotless{i}}} + +  \DeclareUnicodeCharacter{0130}{\dotaccent{I}} +  \DeclareUnicodeCharacter{0131}{\dotless{i}} +  \DeclareUnicodeCharacter{0132}{IJ} +  \DeclareUnicodeCharacter{0133}{ij} +  \DeclareUnicodeCharacter{0134}{\^J} +  \DeclareUnicodeCharacter{0135}{\^{\dotless{j}}} +  \DeclareUnicodeCharacter{0139}{\'L} +  \DeclareUnicodeCharacter{013A}{\'l} + +  \DeclareUnicodeCharacter{0141}{\L} +  \DeclareUnicodeCharacter{0142}{\l} +  \DeclareUnicodeCharacter{0143}{\'N} +  \DeclareUnicodeCharacter{0144}{\'n} +  \DeclareUnicodeCharacter{0147}{\v{N}} +  \DeclareUnicodeCharacter{0148}{\v{n}} +  \DeclareUnicodeCharacter{014C}{\=O} +  \DeclareUnicodeCharacter{014D}{\=o} +  \DeclareUnicodeCharacter{014E}{\u{O}} +  \DeclareUnicodeCharacter{014F}{\u{o}} + +  \DeclareUnicodeCharacter{0150}{\H{O}} +  \DeclareUnicodeCharacter{0151}{\H{o}} +  \DeclareUnicodeCharacter{0152}{\OE} +  \DeclareUnicodeCharacter{0153}{\oe} +  \DeclareUnicodeCharacter{0154}{\'R} +  \DeclareUnicodeCharacter{0155}{\'r} +  \DeclareUnicodeCharacter{0158}{\v{R}} +  \DeclareUnicodeCharacter{0159}{\v{r}} +  \DeclareUnicodeCharacter{015A}{\'S} +  \DeclareUnicodeCharacter{015B}{\'s} +  \DeclareUnicodeCharacter{015C}{\^S} +  \DeclareUnicodeCharacter{015D}{\^s} +  \DeclareUnicodeCharacter{015E}{\cedilla{S}} +  \DeclareUnicodeCharacter{015F}{\cedilla{s}} + +  \DeclareUnicodeCharacter{0160}{\v{S}} +  \DeclareUnicodeCharacter{0161}{\v{s}} +  \DeclareUnicodeCharacter{0162}{\cedilla{t}} +  \DeclareUnicodeCharacter{0163}{\cedilla{T}} +  \DeclareUnicodeCharacter{0164}{\v{T}} + +  \DeclareUnicodeCharacter{0168}{\~U} +  \DeclareUnicodeCharacter{0169}{\~u} +  \DeclareUnicodeCharacter{016A}{\=U} +  \DeclareUnicodeCharacter{016B}{\=u} +  \DeclareUnicodeCharacter{016C}{\u{U}} +  \DeclareUnicodeCharacter{016D}{\u{u}} +  \DeclareUnicodeCharacter{016E}{\ringaccent{U}} +  \DeclareUnicodeCharacter{016F}{\ringaccent{u}} + +  \DeclareUnicodeCharacter{0170}{\H{U}} +  \DeclareUnicodeCharacter{0171}{\H{u}} +  \DeclareUnicodeCharacter{0174}{\^W} +  \DeclareUnicodeCharacter{0175}{\^w} +  \DeclareUnicodeCharacter{0176}{\^Y} +  \DeclareUnicodeCharacter{0177}{\^y} +  \DeclareUnicodeCharacter{0178}{\"Y} +  \DeclareUnicodeCharacter{0179}{\'Z} +  \DeclareUnicodeCharacter{017A}{\'z} +  \DeclareUnicodeCharacter{017B}{\dotaccent{Z}} +  \DeclareUnicodeCharacter{017C}{\dotaccent{z}} +  \DeclareUnicodeCharacter{017D}{\v{Z}} +  \DeclareUnicodeCharacter{017E}{\v{z}} + +  \DeclareUnicodeCharacter{01C4}{D\v{Z}} +  \DeclareUnicodeCharacter{01C5}{D\v{z}} +  \DeclareUnicodeCharacter{01C6}{d\v{z}} +  \DeclareUnicodeCharacter{01C7}{LJ} +  \DeclareUnicodeCharacter{01C8}{Lj} +  \DeclareUnicodeCharacter{01C9}{lj} +  \DeclareUnicodeCharacter{01CA}{NJ} +  \DeclareUnicodeCharacter{01CB}{Nj} +  \DeclareUnicodeCharacter{01CC}{nj} +  \DeclareUnicodeCharacter{01CD}{\v{A}} +  \DeclareUnicodeCharacter{01CE}{\v{a}} +  \DeclareUnicodeCharacter{01CF}{\v{I}} + +  \DeclareUnicodeCharacter{01D0}{\v{\dotless{i}}} +  \DeclareUnicodeCharacter{01D1}{\v{O}} +  \DeclareUnicodeCharacter{01D2}{\v{o}} +  \DeclareUnicodeCharacter{01D3}{\v{U}} +  \DeclareUnicodeCharacter{01D4}{\v{u}} + +  \DeclareUnicodeCharacter{01E2}{\={\AE}} +  \DeclareUnicodeCharacter{01E3}{\={\ae}} +  \DeclareUnicodeCharacter{01E6}{\v{G}} +  \DeclareUnicodeCharacter{01E7}{\v{g}} +  \DeclareUnicodeCharacter{01E8}{\v{K}} +  \DeclareUnicodeCharacter{01E9}{\v{k}} + +  \DeclareUnicodeCharacter{01F0}{\v{\dotless{j}}} +  \DeclareUnicodeCharacter{01F1}{DZ} +  \DeclareUnicodeCharacter{01F2}{Dz} +  \DeclareUnicodeCharacter{01F3}{dz} +  \DeclareUnicodeCharacter{01F4}{\'G} +  \DeclareUnicodeCharacter{01F5}{\'g} +  \DeclareUnicodeCharacter{01F8}{\`N} +  \DeclareUnicodeCharacter{01F9}{\`n} +  \DeclareUnicodeCharacter{01FC}{\'{\AE}} +  \DeclareUnicodeCharacter{01FD}{\'{\ae}} +  \DeclareUnicodeCharacter{01FE}{\'{\O}} +  \DeclareUnicodeCharacter{01FF}{\'{\o}} + +  \DeclareUnicodeCharacter{021E}{\v{H}} +  \DeclareUnicodeCharacter{021F}{\v{h}} + +  \DeclareUnicodeCharacter{0226}{\dotaccent{A}} +  \DeclareUnicodeCharacter{0227}{\dotaccent{a}} +  \DeclareUnicodeCharacter{0228}{\cedilla{E}} +  \DeclareUnicodeCharacter{0229}{\cedilla{e}} +  \DeclareUnicodeCharacter{022E}{\dotaccent{O}} +  \DeclareUnicodeCharacter{022F}{\dotaccent{o}} + +  \DeclareUnicodeCharacter{0232}{\=Y} +  \DeclareUnicodeCharacter{0233}{\=y} +  \DeclareUnicodeCharacter{0237}{\dotless{j}} + +  \DeclareUnicodeCharacter{02DB}{\ogonek{ }} + +  \DeclareUnicodeCharacter{1E02}{\dotaccent{B}} +  \DeclareUnicodeCharacter{1E03}{\dotaccent{b}} +  \DeclareUnicodeCharacter{1E04}{\udotaccent{B}} +  \DeclareUnicodeCharacter{1E05}{\udotaccent{b}} +  \DeclareUnicodeCharacter{1E06}{\ubaraccent{B}} +  \DeclareUnicodeCharacter{1E07}{\ubaraccent{b}} +  \DeclareUnicodeCharacter{1E0A}{\dotaccent{D}} +  \DeclareUnicodeCharacter{1E0B}{\dotaccent{d}} +  \DeclareUnicodeCharacter{1E0C}{\udotaccent{D}} +  \DeclareUnicodeCharacter{1E0D}{\udotaccent{d}} +  \DeclareUnicodeCharacter{1E0E}{\ubaraccent{D}} +  \DeclareUnicodeCharacter{1E0F}{\ubaraccent{d}} + +  \DeclareUnicodeCharacter{1E1E}{\dotaccent{F}} +  \DeclareUnicodeCharacter{1E1F}{\dotaccent{f}} + +  \DeclareUnicodeCharacter{1E20}{\=G} +  \DeclareUnicodeCharacter{1E21}{\=g} +  \DeclareUnicodeCharacter{1E22}{\dotaccent{H}} +  \DeclareUnicodeCharacter{1E23}{\dotaccent{h}} +  \DeclareUnicodeCharacter{1E24}{\udotaccent{H}} +  \DeclareUnicodeCharacter{1E25}{\udotaccent{h}} +  \DeclareUnicodeCharacter{1E26}{\"H} +  \DeclareUnicodeCharacter{1E27}{\"h} + +  \DeclareUnicodeCharacter{1E30}{\'K} +  \DeclareUnicodeCharacter{1E31}{\'k} +  \DeclareUnicodeCharacter{1E32}{\udotaccent{K}} +  \DeclareUnicodeCharacter{1E33}{\udotaccent{k}} +  \DeclareUnicodeCharacter{1E34}{\ubaraccent{K}} +  \DeclareUnicodeCharacter{1E35}{\ubaraccent{k}} +  \DeclareUnicodeCharacter{1E36}{\udotaccent{L}} +  \DeclareUnicodeCharacter{1E37}{\udotaccent{l}} +  \DeclareUnicodeCharacter{1E3A}{\ubaraccent{L}} +  \DeclareUnicodeCharacter{1E3B}{\ubaraccent{l}} +  \DeclareUnicodeCharacter{1E3E}{\'M} +  \DeclareUnicodeCharacter{1E3F}{\'m} + +  \DeclareUnicodeCharacter{1E40}{\dotaccent{M}} +  \DeclareUnicodeCharacter{1E41}{\dotaccent{m}} +  \DeclareUnicodeCharacter{1E42}{\udotaccent{M}} +  \DeclareUnicodeCharacter{1E43}{\udotaccent{m}} +  \DeclareUnicodeCharacter{1E44}{\dotaccent{N}} +  \DeclareUnicodeCharacter{1E45}{\dotaccent{n}} +  \DeclareUnicodeCharacter{1E46}{\udotaccent{N}} +  \DeclareUnicodeCharacter{1E47}{\udotaccent{n}} +  \DeclareUnicodeCharacter{1E48}{\ubaraccent{N}} +  \DeclareUnicodeCharacter{1E49}{\ubaraccent{n}} + +  \DeclareUnicodeCharacter{1E54}{\'P} +  \DeclareUnicodeCharacter{1E55}{\'p} +  \DeclareUnicodeCharacter{1E56}{\dotaccent{P}} +  \DeclareUnicodeCharacter{1E57}{\dotaccent{p}} +  \DeclareUnicodeCharacter{1E58}{\dotaccent{R}} +  \DeclareUnicodeCharacter{1E59}{\dotaccent{r}} +  \DeclareUnicodeCharacter{1E5A}{\udotaccent{R}} +  \DeclareUnicodeCharacter{1E5B}{\udotaccent{r}} +  \DeclareUnicodeCharacter{1E5E}{\ubaraccent{R}} +  \DeclareUnicodeCharacter{1E5F}{\ubaraccent{r}} + +  \DeclareUnicodeCharacter{1E60}{\dotaccent{S}} +  \DeclareUnicodeCharacter{1E61}{\dotaccent{s}} +  \DeclareUnicodeCharacter{1E62}{\udotaccent{S}} +  \DeclareUnicodeCharacter{1E63}{\udotaccent{s}} +  \DeclareUnicodeCharacter{1E6A}{\dotaccent{T}} +  \DeclareUnicodeCharacter{1E6B}{\dotaccent{t}} +  \DeclareUnicodeCharacter{1E6C}{\udotaccent{T}} +  \DeclareUnicodeCharacter{1E6D}{\udotaccent{t}} +  \DeclareUnicodeCharacter{1E6E}{\ubaraccent{T}} +  \DeclareUnicodeCharacter{1E6F}{\ubaraccent{t}} + +  \DeclareUnicodeCharacter{1E7C}{\~V} +  \DeclareUnicodeCharacter{1E7D}{\~v} +  \DeclareUnicodeCharacter{1E7E}{\udotaccent{V}} +  \DeclareUnicodeCharacter{1E7F}{\udotaccent{v}} + +  \DeclareUnicodeCharacter{1E80}{\`W} +  \DeclareUnicodeCharacter{1E81}{\`w} +  \DeclareUnicodeCharacter{1E82}{\'W} +  \DeclareUnicodeCharacter{1E83}{\'w} +  \DeclareUnicodeCharacter{1E84}{\"W} +  \DeclareUnicodeCharacter{1E85}{\"w} +  \DeclareUnicodeCharacter{1E86}{\dotaccent{W}} +  \DeclareUnicodeCharacter{1E87}{\dotaccent{w}} +  \DeclareUnicodeCharacter{1E88}{\udotaccent{W}} +  \DeclareUnicodeCharacter{1E89}{\udotaccent{w}} +  \DeclareUnicodeCharacter{1E8A}{\dotaccent{X}} +  \DeclareUnicodeCharacter{1E8B}{\dotaccent{x}} +  \DeclareUnicodeCharacter{1E8C}{\"X} +  \DeclareUnicodeCharacter{1E8D}{\"x} +  \DeclareUnicodeCharacter{1E8E}{\dotaccent{Y}} +  \DeclareUnicodeCharacter{1E8F}{\dotaccent{y}} + +  \DeclareUnicodeCharacter{1E90}{\^Z} +  \DeclareUnicodeCharacter{1E91}{\^z} +  \DeclareUnicodeCharacter{1E92}{\udotaccent{Z}} +  \DeclareUnicodeCharacter{1E93}{\udotaccent{z}} +  \DeclareUnicodeCharacter{1E94}{\ubaraccent{Z}} +  \DeclareUnicodeCharacter{1E95}{\ubaraccent{z}} +  \DeclareUnicodeCharacter{1E96}{\ubaraccent{h}} +  \DeclareUnicodeCharacter{1E97}{\"t} +  \DeclareUnicodeCharacter{1E98}{\ringaccent{w}} +  \DeclareUnicodeCharacter{1E99}{\ringaccent{y}} + +  \DeclareUnicodeCharacter{1EA0}{\udotaccent{A}} +  \DeclareUnicodeCharacter{1EA1}{\udotaccent{a}} + +  \DeclareUnicodeCharacter{1EB8}{\udotaccent{E}} +  \DeclareUnicodeCharacter{1EB9}{\udotaccent{e}} +  \DeclareUnicodeCharacter{1EBC}{\~E} +  \DeclareUnicodeCharacter{1EBD}{\~e} + +  \DeclareUnicodeCharacter{1ECA}{\udotaccent{I}} +  \DeclareUnicodeCharacter{1ECB}{\udotaccent{i}} +  \DeclareUnicodeCharacter{1ECC}{\udotaccent{O}} +  \DeclareUnicodeCharacter{1ECD}{\udotaccent{o}} + +  \DeclareUnicodeCharacter{1EE4}{\udotaccent{U}} +  \DeclareUnicodeCharacter{1EE5}{\udotaccent{u}} + +  \DeclareUnicodeCharacter{1EF2}{\`Y} +  \DeclareUnicodeCharacter{1EF3}{\`y} +  \DeclareUnicodeCharacter{1EF4}{\udotaccent{Y}} + +  \DeclareUnicodeCharacter{1EF8}{\~Y} +  \DeclareUnicodeCharacter{1EF9}{\~y} + +  \DeclareUnicodeCharacter{2013}{--} +  \DeclareUnicodeCharacter{2014}{---} +  \DeclareUnicodeCharacter{2018}{\quoteleft} +  \DeclareUnicodeCharacter{2019}{\quoteright} +  \DeclareUnicodeCharacter{201A}{\quotesinglbase} +  \DeclareUnicodeCharacter{201C}{\quotedblleft} +  \DeclareUnicodeCharacter{201D}{\quotedblright} +  \DeclareUnicodeCharacter{201E}{\quotedblbase} +  \DeclareUnicodeCharacter{2022}{\bullet} +  \DeclareUnicodeCharacter{2026}{\dots} +  \DeclareUnicodeCharacter{2039}{\guilsinglleft} +  \DeclareUnicodeCharacter{203A}{\guilsinglright} +  \DeclareUnicodeCharacter{20AC}{\euro} + +  \DeclareUnicodeCharacter{2192}{\expansion} +  \DeclareUnicodeCharacter{21D2}{\result} + +  \DeclareUnicodeCharacter{2212}{\minus} +  \DeclareUnicodeCharacter{2217}{\point} +  \DeclareUnicodeCharacter{2261}{\equiv} +}% end of \utfeightchardefs + + +% US-ASCII character definitions. +\def\asciichardefs{% nothing need be done +   \relax +} + +% Make non-ASCII characters printable again for compatibility with +% existing Texinfo documents that may use them, even without declaring a +% document encoding. +% +\setnonasciicharscatcode \other + + +\message{formatting,} +  \newdimen\defaultparindent \defaultparindent = 15pt  \chapheadingskip = 15pt plus 4pt minus 2pt @@ -6736,7 +8902,7 @@ should work if nowhere else does.}  % Don't be so finicky about underfull hboxes, either.  \hbadness = 2000 -% Following George Bush, just get rid of widows and orphans. +% Following George Bush, get rid of widows and orphans.  \widowpenalty=10000  \clubpenalty=10000 @@ -6754,9 +8920,9 @@ should work if nowhere else does.}    \fi  } -% Parameters in order: 1) textheight; 2) textwidth; 3) voffset; -% 4) hoffset; 5) binding offset; 6) topskip; 7) physical page height; 8) -% physical page width. +% Parameters in order: 1) textheight; 2) textwidth; +% 3) voffset; 4) hoffset; 5) binding offset; 6) topskip; +% 7) physical page height; 8) physical page width.  %  % We also call \setleading{\textleading}, so the caller should define  % \textleading.  The caller should also set \parskip. @@ -6783,6 +8949,10 @@ should work if nowhere else does.}    \ifpdf      \pdfpageheight #7\relax      \pdfpagewidth #8\relax +    % if we don't reset these, they will remain at "1 true in" of +    % whatever layout pdftex was dumped with. +    \pdfhorigin = 1 true in +    \pdfvorigin = 1 true in    \fi    %    \setleading{\textleading} @@ -6797,19 +8967,19 @@ should work if nowhere else does.}    \textleading = 13.2pt    %    % If page is nothing but text, make it come out even. -  \internalpagesizes{46\baselineskip}{6in}% +  \internalpagesizes{607.2pt}{6in}% that's 46 lines                      {\voffset}{.25in}%                      {\bindingoffset}{36pt}%                      {11in}{8.5in}%  }} -% Use @smallbook to reset parameters for 7x9.5 (or so) format. +% Use @smallbook to reset parameters for 7x9.25 trim size.  \def\smallbook{{\globaldefs = 1    \parskip = 2pt plus 1pt    \textleading = 12pt    %    \internalpagesizes{7.5in}{5in}% -                    {\voffset}{.25in}% +                    {-.2in}{0in}%                      {\bindingoffset}{16pt}%                      {9.25in}{7in}%    % @@ -6820,6 +8990,24 @@ should work if nowhere else does.}    \defbodyindent = .5cm  }} +% Use @smallerbook to reset parameters for 6x9 trim size. +% (Just testing, parameters still in flux.) +\def\smallerbook{{\globaldefs = 1 +  \parskip = 1.5pt plus 1pt +  \textleading = 12pt +  % +  \internalpagesizes{7.4in}{4.8in}% +                    {-.2in}{-.4in}% +                    {0pt}{14pt}% +                    {9in}{6in}% +  % +  \lispnarrowing = 0.25in +  \tolerance = 700 +  \hfuzz = 1pt +  \contentsrightmargin = 0pt +  \defbodyindent = .4cm +}} +  % Use @afourpaper to print on European A4 paper.  \def\afourpaper{{\globaldefs = 1    \parskip = 3pt plus 2pt minus 1pt @@ -6835,7 +9023,7 @@ should work if nowhere else does.}    % \global\normaloffset = -6mm    % \global\bindingoffset = 10mm    % @end tex -  \internalpagesizes{51\baselineskip}{160mm} +  \internalpagesizes{673.2pt}{160mm}% that's 51 lines                      {\voffset}{\hoffset}%                      {\bindingoffset}{44pt}%                      {297mm}{210mm}% @@ -6900,7 +9088,7 @@ should work if nowhere else does.}    \parskip = 3pt plus 2pt minus 1pt    \setleading{\textleading}%    % -  \dimen0 = #1 +  \dimen0 = #1\relax    \advance\dimen0 by \voffset    %    \dimen2 = \hsize @@ -6919,6 +9107,9 @@ should work if nowhere else does.}  \message{and turning on texinfo input format.} +% DEL is a comment character, in case @c does not suffice. +\catcode`\^^? = 14 +  % Define macros to output various characters with catcode for normal text.  \catcode`\"=\other  \catcode`\~=\other @@ -6972,6 +9163,7 @@ should work if nowhere else does.}  \catcode`\_=\active  \def_{\ifusingtt\normalunderscore\_} +\let\realunder=_  % Subroutine for the previous macro.  \def\_{\leavevmode \kern.07em \vbox{\hrule width.3em height.1ex}\kern .07em } @@ -6994,6 +9186,13 @@ should work if nowhere else does.}  % \otherifyactive is called near the end of this file.  \def\otherifyactive{\catcode`+=\other \catcode`\_=\other} +% Used sometimes to turn off (effectively) the active characters even after +% parsing them. +\def\turnoffactive{% +  \normalturnoffactive +  \otherbackslash +} +  \catcode`\@=0  % \backslashcurfont outputs one backslash character in current font, @@ -7001,27 +9200,29 @@ should work if nowhere else does.}  \global\chardef\backslashcurfont=`\\  \global\let\rawbackslashxx=\backslashcurfont  % let existing .??s files work +% \realbackslash is an actual character `\' with catcode other, and +% \doublebackslash is two of them (for the pdf outlines). +{\catcode`\\=\other @gdef@realbackslash{\} @gdef@doublebackslash{\\}} + +% In texinfo, backslash is an active character; it prints the backslash +% in fixed width font. +\catcode`\\=\active +@def@normalbackslash{{@tt@backslashcurfont}} +% On startup, @fixbackslash assigns: +%  @let \ = @normalbackslash +  % \rawbackslash defines an active \ to do \backslashcurfont.  % \otherbackslash defines an active \ to be a literal `\' character with  % catcode other. -{\catcode`\\=\active - @gdef@rawbackslash{@let\=@backslashcurfont} - @gdef@otherbackslash{@let\=@realbackslash} -} - -% \realbackslash is an actual character `\' with catcode other. -{\catcode`\\=\other @gdef@realbackslash{\}} +@gdef@rawbackslash{@let\=@backslashcurfont} +@gdef@otherbackslash{@let\=@realbackslash} -% \normalbackslash outputs one backslash in fixed width font. -\def\normalbackslash{{\tt\backslashcurfont}} - -\catcode`\\=\active - -% Used sometimes to turn off (effectively) the active characters -% even after parsing them. -@def@turnoffactive{% +% Same as @turnoffactive except outputs \ as {\tt\char`\\} instead of +% the literal character `\'. +% +@def@normalturnoffactive{% +  @let\=@normalbackslash    @let"=@normaldoublequote -  @let\=@realbackslash    @let~=@normaltilde    @let^=@normalcaret    @let_=@normalunderscore @@ -7030,15 +9231,11 @@ should work if nowhere else does.}    @let>=@normalgreater    @let+=@normalplus    @let$=@normaldollar %$ font-lock fix +  @markupsetuplqdefault +  @markupsetuprqdefault    @unsepspaces  } -% Same as @turnoffactive except outputs \ as {\tt\char`\\} instead of -% the literal character `\'.  (Thus, \ is not expandable when this is in -% effect.) -% -@def@normalturnoffactive{@turnoffactive @let\=@normalbackslash} -  % Make _ and + \other characters, temporarily.  % This is canceled by @fixbackslash.  @otherifyactive @@ -7051,9 +9248,9 @@ should work if nowhere else does.}  @global@let\ = @eatinput  % On the other hand, perhaps the file did not have a `\input texinfo'. Then -% the first `\{ in the file would cause an error. This macro tries to fix +% the first `\' in the file would cause an error. This macro tries to fix  % that, assuming it is called before the first `\' could plausibly occur. -% Also back turn on active characters that might appear in the input +% Also turn back on active characters that might appear in the input  % file name, in case not using a pre-dumped format.  %  @gdef@fixbackslash{% @@ -7070,6 +9267,14 @@ should work if nowhere else does.}  @catcode`@# = @other  @catcode`@% = @other +@c Finally, make ` and ' active, so that txicodequoteundirected and +@c txicodequotebacktick work right in, e.g., @w{@code{`foo'}}.  If we +@c don't make ` and ' active, @code will not get them as active chars. +@c Do this last of all since we use ` in the previous @catcode assignments. +@catcode`@'=@active +@catcode`@`=@active +@markupsetuplqdefault +@markupsetuprqdefault  @c Local variables:  @c eval: (add-hook 'write-file-hooks 'time-stamp) | 
