|
|
|
@@ -3,16 +3,16 @@
|
|
|
|
|
% Load plain if necessary, i.e., if running under initex.
|
|
|
|
|
\expandafter\ifx\csname fmtname\endcsname\relax\input plain\fi
|
|
|
|
|
%
|
|
|
|
|
\def\texinfoversion{2005-07-05.19}
|
|
|
|
|
\def\texinfoversion{2007-12-02.17}
|
|
|
|
|
%
|
|
|
|
|
% Copyright (C) 1985, 1986, 1988, 1990, 1991, 1992, 1993, 1994, 1995,
|
|
|
|
|
% 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 Free Software
|
|
|
|
|
% Foundation, Inc.
|
|
|
|
|
% Copyright (C) 1985, 1986, 1988, 1990, 1991, 1992, 1993, 1994, 1995, 2007,
|
|
|
|
|
% 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
|
|
|
|
|
% 2007 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., 51 Franklin Street, Fifth Floor,
|
|
|
|
|
% Boston, MA 02110-1301, 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.
|
|
|
|
@@ -153,28 +151,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.
|
|
|
|
|
\chardef\backChar = `\\
|
|
|
|
|
% 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\plusChar = `\+
|
|
|
|
|
\chardef\lquoteChar= `\`
|
|
|
|
|
\chardef\questChar = `\?
|
|
|
|
|
\chardef\rquoteChar= `\'
|
|
|
|
|
\chardef\semiChar = `\;
|
|
|
|
|
\chardef\underChar = `\_
|
|
|
|
|
|
|
|
|
|
\chardef\spaceChar = `\ %
|
|
|
|
|
\chardef\spacecat = 10
|
|
|
|
|
\def\spaceisspace{\catcode\spaceChar=\spacecat}
|
|
|
|
|
|
|
|
|
|
{% for help with debugging.
|
|
|
|
|
% example usage: \expandafter\show\activebackslash
|
|
|
|
|
\catcode`\! = 0 \catcode`\\ = \active
|
|
|
|
|
!global!def!activebackslash{\}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
% Ignore a token.
|
|
|
|
|
%
|
|
|
|
|
\def\gobble#1{}
|
|
|
|
@@ -285,6 +277,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}}
|
|
|
|
@@ -302,7 +338,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}%
|
|
|
|
|
%
|
|
|
|
|
{%
|
|
|
|
@@ -311,6 +349,13 @@
|
|
|
|
|
% before the \shipout runs.
|
|
|
|
|
%
|
|
|
|
|
\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.
|
|
|
|
|
% 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
|
|
|
|
@@ -338,9 +383,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
|
|
|
|
|
%
|
|
|
|
@@ -374,7 +419,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}
|
|
|
|
|
}
|
|
|
|
@@ -396,7 +441,7 @@
|
|
|
|
|
%
|
|
|
|
|
\def\parsearg{\parseargusing{}}
|
|
|
|
|
\def\parseargusing#1#2{%
|
|
|
|
|
\def\next{#2}%
|
|
|
|
|
\def\argtorun{#2}%
|
|
|
|
|
\begingroup
|
|
|
|
|
\obeylines
|
|
|
|
|
\spaceisspace
|
|
|
|
@@ -427,8 +472,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
|
|
|
|
@@ -440,14 +484,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.
|
|
|
|
|
% just before passing the control to \argtorun.
|
|
|
|
|
% (Similarily, 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
|
|
|
|
@@ -1051,9 +1095,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}%
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
@@ -1096,15 +1140,24 @@ where each line of input produces a line of output.}
|
|
|
|
|
\def\minus{$-$}
|
|
|
|
|
|
|
|
|
|
% @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
|
|
|
|
|
}%
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@@ -1197,28 +1250,28 @@ where each line of input produces a line of output.}
|
|
|
|
|
\fi
|
|
|
|
|
\fi
|
|
|
|
|
|
|
|
|
|
% PDF uses PostScript string constants for the names of xref targets, to
|
|
|
|
|
% 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 we do).
|
|
|
|
|
% that's what we do).
|
|
|
|
|
|
|
|
|
|
% double active backslashes.
|
|
|
|
|
%
|
|
|
|
|
{\catcode`\@=0 \catcode`\\=\active
|
|
|
|
|
@gdef@activebackslash{@catcode`@\=@active @otherbackslash}
|
|
|
|
|
@gdef@activebackslashdouble{%
|
|
|
|
|
@catcode@backChar=@active
|
|
|
|
|
@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. I've
|
|
|
|
|
% tinkered with it a little for texinfo, but it's definitely from there.
|
|
|
|
|
% 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.
|
|
|
|
@@ -1243,21 +1296,87 @@ where each line of input produces a line of output.}
|
|
|
|
|
\def\backslashparens#1{%
|
|
|
|
|
\xdef#1{#1}% redefine it as its expansion; the definition is simply
|
|
|
|
|
% \lastnode when called from \setref -> \pdfmkdest.
|
|
|
|
|
\HyPsdSubst{(}{\backslashlparen}{#1}%
|
|
|
|
|
\HyPsdSubst{)}{\backslashrparen}{#1}%
|
|
|
|
|
\HyPsdSubst{(}{\realbackslash(}{#1}%
|
|
|
|
|
\HyPsdSubst{)}{\realbackslash)}{#1}%
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
{\catcode\exclamChar = 0 \catcode\backChar = \other
|
|
|
|
|
!gdef!backslashlparen{\(}%
|
|
|
|
|
!gdef!backslashrparen{\)}%
|
|
|
|
|
}
|
|
|
|
|
\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.
|
|
|
|
|
\def\cmykDarkRed{0.28 1 1 0.35}
|
|
|
|
|
\def\cmykBlack{0 0 0 1}
|
|
|
|
|
%
|
|
|
|
|
\def\pdfsetcolor#1{\pdfliteral{#1 k}}
|
|
|
|
|
% 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{\cmykBlack}
|
|
|
|
|
\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}%
|
|
|
|
|
\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
|
|
|
|
|
\errhelp = \nopdfimagehelp
|
|
|
|
|
\errmessage{Could not find image file #1 for pdf}%
|
|
|
|
|
\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, pdftex seg faults when the same image is
|
|
|
|
|
% included twice. (Version 3.14159-pre-1.0-unofficial-20010704.)
|
|
|
|
|
\ifnum\pdftexversion < 14
|
|
|
|
@@ -1265,31 +1384,38 @@ where each line of input produces a line of output.}
|
|
|
|
|
\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, and characters
|
|
|
|
|
% such as \, aren't expanded when present in a section title.
|
|
|
|
|
\atdummies
|
|
|
|
|
\indexnofonts
|
|
|
|
|
\turnoffactive
|
|
|
|
|
\activebackslashdouble
|
|
|
|
|
\makevalueexpandable
|
|
|
|
|
\def\pdfdestname{#1}%
|
|
|
|
|
\backslashparens\pdfdestname
|
|
|
|
|
\pdfdest name{\pdfdestname} xyz%
|
|
|
|
|
}}%
|
|
|
|
|
\safewhatsit{\pdfdest name{\pdfdestname} xyz}%
|
|
|
|
|
}}
|
|
|
|
|
%
|
|
|
|
|
% used to mark target names; must be expandable.
|
|
|
|
|
\def\pdfmkpgn#1{#1}%
|
|
|
|
|
\def\pdfmkpgn#1{#1}
|
|
|
|
|
%
|
|
|
|
|
% by default, use a color that is dark enough to print on paper as
|
|
|
|
|
% nearly black, but still distinguishable for online viewing.
|
|
|
|
|
\def\urlcolor{\cmykDarkRed}
|
|
|
|
|
\def\linkcolor{\cmykDarkRed}
|
|
|
|
|
\def\endlink{\setcolor{\maincolor}\pdfendlink}
|
|
|
|
|
%
|
|
|
|
|
\let\linkcolor = \Blue % was Cyan, but that seems light?
|
|
|
|
|
\def\endlink{\Black\pdfendlink}
|
|
|
|
|
% Adding outlines to PDF; macros for calculating structure of outlines
|
|
|
|
|
% come from Petr Olsak
|
|
|
|
|
\def\expnumber#1{\expandafter\ifx\csname#1\endcsname\relax 0%
|
|
|
|
@@ -1390,8 +1516,8 @@ where each line of input produces a line of output.}
|
|
|
|
|
% now, I guess we'll just let the pdf reader have its way.
|
|
|
|
|
\indexnofonts
|
|
|
|
|
\setupdatafile
|
|
|
|
|
\activebackslash
|
|
|
|
|
\input \jobname.toc
|
|
|
|
|
\catcode`\\=\active \otherbackslash
|
|
|
|
|
\input \tocreadfilename
|
|
|
|
|
\endgroup
|
|
|
|
|
}
|
|
|
|
|
%
|
|
|
|
@@ -1409,11 +1535,19 @@ 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
|
|
|
|
|
\leavevmode\setcolor{\urlcolor}%
|
|
|
|
|
\startlink attr{/Border [0 0 0]}%
|
|
|
|
|
user{/Subtype /Link /A << /S /URI /URI (#1) >>}%
|
|
|
|
|
\endgroup}
|
|
|
|
@@ -1440,13 +1574,14 @@ 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
|
|
|
|
|
\let\pdfmkdest = \gobble
|
|
|
|
|
\let\pdfurl = \gobble
|
|
|
|
|
\let\endlink = \relax
|
|
|
|
|
\let\linkcolor = \relax
|
|
|
|
|
\let\setcolor = \gobble
|
|
|
|
|
\let\pdfsetcolor = \gobble
|
|
|
|
|
\let\pdfmakeoutlines = \relax
|
|
|
|
|
\fi % \ifx\pdfoutput
|
|
|
|
|
|
|
|
|
@@ -1481,6 +1616,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
|
|
|
|
|
|
|
|
|
@@ -1492,8 +1628,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{%
|
|
|
|
@@ -1502,10 +1642,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
|
|
|
|
@@ -1530,118 +1939,297 @@ 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\authorrm{\secrm}
|
|
|
|
|
\def\authortt{\sectt}
|
|
|
|
|
\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
|
|
|
|
@@ -1753,7 +2341,7 @@ where each line of input produces a line of output.}
|
|
|
|
|
|
|
|
|
|
% 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$}
|
|
|
|
@@ -1763,10 +2351,10 @@ where each line of input produces a line of output.}
|
|
|
|
|
\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}
|
|
|
|
|
\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}
|
|
|
|
|
|
|
|
|
|
%% Add scribe-like font environments, plus @l for inline lisp (usually sans
|
|
|
|
|
%% serif) and @ii for TeX italic
|
|
|
|
@@ -1829,7 +2417,7 @@ where each line of input produces a line of output.}
|
|
|
|
|
\null
|
|
|
|
|
}
|
|
|
|
|
\def\samp#1{`\tclose{#1}'\null}
|
|
|
|
|
\setfont\keyrm\rmshape{8}{1000}
|
|
|
|
|
\setfont\keyrm\rmshape{8}{1000}{OT1}
|
|
|
|
|
\font\keysy=cmsy9
|
|
|
|
|
\def\key#1{{\keyrm\textfont2=\keysy \leavevmode\hbox{%
|
|
|
|
|
\raise0.4pt\hbox{\angleleft}\kern-.08em\vtop{%
|
|
|
|
@@ -1837,6 +2425,7 @@ where each line of input produces a line of output.}
|
|
|
|
|
\hbox{\raise0.4pt\hbox{\vphantom{\angleleft}}#1}}%
|
|
|
|
|
\kern-0.4pt\hrule}%
|
|
|
|
|
\kern-.06em\raise0.4pt\hbox{\angleright}}}}
|
|
|
|
|
\def\key #1{{\nohyphenation \uppercase{#1}}\null}
|
|
|
|
|
% The old definition, with no lozenge:
|
|
|
|
|
%\def\key #1{{\ttsl \nohyphenation \uppercase{#1}}\null}
|
|
|
|
|
\def\ctrl #1{{\tt \rawbackslash \hat}#1}
|
|
|
|
@@ -1878,11 +2467,14 @@ 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\def\code{\begingroup
|
|
|
|
|
\catcode`\-=\active \catcode`\_=\active
|
|
|
|
|
\catcode\rquoteChar=\active \catcode\lquoteChar=\active
|
|
|
|
|
\let'\codequoteright \let`\codequoteleft
|
|
|
|
|
%
|
|
|
|
|
\catcode\dashChar=\active \catcode\underChar=\active
|
|
|
|
|
\ifallowcodebreaks
|
|
|
|
|
\let-\codedash
|
|
|
|
|
\let_\codeunder
|
|
|
|
@@ -2118,6 +2710,35 @@ where each line of input produces a line of output.}
|
|
|
|
|
\thiseurofont
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
% Hacks for glyphs from the EC fonts similar to \euro. We don't
|
|
|
|
|
% use \let for the aliases, because sometimes we redefine the original
|
|
|
|
|
% macro, and the alias should reflect the redefinition.
|
|
|
|
|
\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}}
|
|
|
|
|
%
|
|
|
|
|
\def\ecfont{%
|
|
|
|
|
% We can't distinguish serif/sanserif 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.
|
|
|
|
@@ -2128,6 +2749,10 @@ 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.
|
|
|
|
@@ -2136,6 +2761,12 @@ where each line of input produces a line of output.}
|
|
|
|
|
\def\Orb{\mathhexbox20D}
|
|
|
|
|
\fi
|
|
|
|
|
|
|
|
|
|
% Quotes.
|
|
|
|
|
\chardef\quotedblleft="5C
|
|
|
|
|
\chardef\quotedblright=`\"
|
|
|
|
|
\chardef\quoteleft=`\`
|
|
|
|
|
\chardef\quoteright=`\'
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
\message{page headings,}
|
|
|
|
|
|
|
|
|
@@ -2299,12 +2930,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.
|
|
|
|
@@ -2959,6 +3617,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
|
|
|
|
@@ -2979,16 +3638,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%
|
|
|
|
|
}%
|
|
|
|
|
}
|
|
|
|
@@ -3018,7 +3677,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.
|
|
|
|
@@ -3221,12 +3885,39 @@ where each line of input produces a line of output.}
|
|
|
|
|
\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
|
|
|
|
|
%
|
|
|
|
|
% 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.
|
|
|
|
|
%
|
|
|
|
|
% Sample source (mac-idx3.tex, reported by Graham Percival to
|
|
|
|
|
% help-texinfo, 22may06):
|
|
|
|
|
% @macro funindex {WORD}
|
|
|
|
|
% @findex xyz
|
|
|
|
|
% @end macro
|
|
|
|
|
% ...
|
|
|
|
|
% @funindex commtest
|
|
|
|
|
%
|
|
|
|
|
% The above is not enough to reproduce the bug, but it gives the flavor.
|
|
|
|
|
%
|
|
|
|
|
% Sample whatsit resulting:
|
|
|
|
|
% .@write3{\entry{xyz}{@folio }{@code {xyz@endinput }}}
|
|
|
|
|
%
|
|
|
|
|
% So:
|
|
|
|
|
\let\endinput = \empty
|
|
|
|
|
%
|
|
|
|
|
% Do the redefinitions.
|
|
|
|
|
\commondummies
|
|
|
|
|
}
|
|
|
|
@@ -3244,6 +3935,7 @@ where each line of input produces a line of output.}
|
|
|
|
|
%
|
|
|
|
|
% Do the redefinitions.
|
|
|
|
|
\commondummies
|
|
|
|
|
\otherbackslash
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
% Called from \indexdummies and \atdummies.
|
|
|
|
@@ -3311,12 +4003,23 @@ where each line of input produces a line of output.}
|
|
|
|
|
\definedummyword\equiv
|
|
|
|
|
\definedummyword\error
|
|
|
|
|
\definedummyword\euro
|
|
|
|
|
\definedummyword\guillemetleft
|
|
|
|
|
\definedummyword\guillemetright
|
|
|
|
|
\definedummyword\guilsinglleft
|
|
|
|
|
\definedummyword\guilsinglright
|
|
|
|
|
\definedummyword\expansion
|
|
|
|
|
\definedummyword\minus
|
|
|
|
|
\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
|
|
|
|
@@ -3330,63 +4033,62 @@ where each line of input produces a line of output.}
|
|
|
|
|
|
|
|
|
|
% \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\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\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
|
|
|
|
@@ -3445,12 +4147,23 @@ where each line of input produces a line of output.}
|
|
|
|
|
\def\equiv{==}%
|
|
|
|
|
\def\error{error}%
|
|
|
|
|
\def\euro{euro}%
|
|
|
|
|
\def\guillemetleft{<<}%
|
|
|
|
|
\def\guillemetright{>>}%
|
|
|
|
|
\def\guilsinglleft{<}%
|
|
|
|
|
\def\guilsinglright{>}%
|
|
|
|
|
\def\expansion{==>}%
|
|
|
|
|
\def\minus{-}%
|
|
|
|
|
\def\pounds{pounds}%
|
|
|
|
|
\def\point{.}%
|
|
|
|
|
\def\print{-|}%
|
|
|
|
|
\def\quotedblbase{"}%
|
|
|
|
|
\def\quotedblleft{"}%
|
|
|
|
|
\def\quotedblright{"}%
|
|
|
|
|
\def\quoteleft{`}%
|
|
|
|
|
\def\quoteright{'}%
|
|
|
|
|
\def\quotesinglbase{,}%
|
|
|
|
|
\def\result{=>}%
|
|
|
|
|
\def\textdegree{degrees}%
|
|
|
|
|
%
|
|
|
|
|
% 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.
|
|
|
|
@@ -3490,11 +4203,7 @@ where each line of input produces a line of output.}
|
|
|
|
|
%
|
|
|
|
|
\edef\writeto{\csname#1indfile\endcsname}%
|
|
|
|
|
%
|
|
|
|
|
\ifvmode
|
|
|
|
|
\dosubindsanitize
|
|
|
|
|
\else
|
|
|
|
|
\dosubindwrite
|
|
|
|
|
\fi
|
|
|
|
|
\safewhatsit\dosubindwrite
|
|
|
|
|
}%
|
|
|
|
|
\fi
|
|
|
|
|
}
|
|
|
|
@@ -3531,13 +4240,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 ...
|
|
|
|
@@ -3561,25 +4270,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
|
|
|
|
@@ -3593,13 +4308,14 @@ where each line of input produces a line of output.}
|
|
|
|
|
% 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
|
|
|
|
@@ -3642,6 +4358,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.
|
|
|
|
@@ -3771,11 +4488,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
|
|
|
|
|
%
|
|
|
|
@@ -3799,9 +4513,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}}
|
|
|
|
|
|
|
|
|
@@ -3911,6 +4625,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.
|
|
|
|
@@ -4020,11 +4762,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
|
|
|
|
@@ -4325,7 +5071,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}
|
|
|
|
|
|
|
|
|
@@ -4359,41 +5118,72 @@ 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}%
|
|
|
|
|
\gdef\noexpand\thischapter{\putwordAppendix{} \noexpand\thischapternum:
|
|
|
|
|
\noexpand\thischaptername}%
|
|
|
|
|
}%
|
|
|
|
|
\else
|
|
|
|
|
\toks0={#1}%
|
|
|
|
|
\xdef\lastchapterdefs{%
|
|
|
|
|
\gdef\noexpand\thischaptername{\the\toks0}%
|
|
|
|
|
\gdef\noexpand\thischapternum{\the\chapno}%
|
|
|
|
|
\gdef\noexpand\thischapter{\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
|
|
|
|
|
%
|
|
|
|
|
% 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}%
|
|
|
|
|
\gdef\thischapter{#1}%
|
|
|
|
|
\else\ifx\temptype\Yomitfromtockeyword
|
|
|
|
|
\setbox0 = \hbox{}% contents like unnumbered, but no toc entry
|
|
|
|
|
\def\toctype{omit}%
|
|
|
|
|
\gdef\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
|
|
|
|
@@ -4409,6 +5199,7 @@ where each line of input produces a line of output.}
|
|
|
|
|
\donoderef{#2}%
|
|
|
|
|
%
|
|
|
|
|
% Typeset the actual heading.
|
|
|
|
|
\nobreak % Avoid page breaks at the interline glue.
|
|
|
|
|
\vbox{\hyphenpenalty=10000 \tolerance=5000 \parindent=0pt \raggedright
|
|
|
|
|
\hangindent=\wd0 \centerparametersmaybe
|
|
|
|
|
\unhbox0 #1\par}%
|
|
|
|
@@ -4471,45 +5262,95 @@ 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
|
|
|
|
|
%
|
|
|
|
|
% 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}%
|
|
|
|
|
%
|
|
|
|
|
% 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}%
|
|
|
|
|
\gdef\noexpand\thissection{\putwordSection{} \noexpand\thissectionnum:
|
|
|
|
|
\noexpand\thissectionname}%
|
|
|
|
|
}%
|
|
|
|
|
\fi
|
|
|
|
|
\else
|
|
|
|
|
\ifx\sectionlevel\seckeyword
|
|
|
|
|
\toks0={#1}%
|
|
|
|
|
\xdef\lastsectiondefs{%
|
|
|
|
|
\gdef\noexpand\thissectionname{\the\toks0}%
|
|
|
|
|
\gdef\noexpand\thissectionnum{#4}%
|
|
|
|
|
\gdef\noexpand\thissection{\putwordSection{} \noexpand\thissectionnum:
|
|
|
|
|
\noexpand\thissectionname}%
|
|
|
|
|
}%
|
|
|
|
|
\fi
|
|
|
|
|
\fi\fi\fi
|
|
|
|
|
%
|
|
|
|
|
% Output the mark. Pass it through \safewhatsit, to take care of
|
|
|
|
|
% the preceding space.
|
|
|
|
|
\safewhatsit\domark
|
|
|
|
|
%
|
|
|
|
|
% Insert space above the heading.
|
|
|
|
|
\csname #2headingbreak\endcsname
|
|
|
|
|
%
|
|
|
|
|
% 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
|
|
|
|
|
\hangindent=\wd0 % zero if no section number
|
|
|
|
@@ -4572,7 +5413,7 @@ where each line of input produces a line of output.}
|
|
|
|
|
\edef\temp{%
|
|
|
|
|
\write\tocfile{@#1entry{#2}{#3}{\lastnode}{\noexpand\folio}}}%
|
|
|
|
|
\temp
|
|
|
|
|
}
|
|
|
|
|
}%
|
|
|
|
|
\fi
|
|
|
|
|
\fi
|
|
|
|
|
%
|
|
|
|
@@ -4607,7 +5448,7 @@ where each line of input produces a line of output.}
|
|
|
|
|
\def\readtocfile{%
|
|
|
|
|
\setupdatafile
|
|
|
|
|
\activecatcodes
|
|
|
|
|
\input \jobname.toc
|
|
|
|
|
\input \tocreadfilename
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
\newskip\contentsrightmargin \contentsrightmargin=1in
|
|
|
|
@@ -4626,7 +5467,6 @@ 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
|
|
|
|
@@ -4638,11 +5478,16 @@ where each line of input produces a line of output.}
|
|
|
|
|
\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
|
|
|
|
|
\readtocfile
|
|
|
|
|
\fi
|
|
|
|
@@ -4680,7 +5525,7 @@ 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
|
|
|
|
|
\readtocfile
|
|
|
|
|
\fi
|
|
|
|
@@ -4824,7 +5669,7 @@ where each line of input produces a line of output.}
|
|
|
|
|
{\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}
|
|
|
|
|
\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.
|
|
|
|
@@ -5015,12 +5860,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
|
|
|
|
|
}
|
|
|
|
@@ -5047,11 +5898,10 @@ where each line of input produces a line of output.}
|
|
|
|
|
%
|
|
|
|
|
\maketwodispenvs {lisp}{example}{%
|
|
|
|
|
\nonfillstart
|
|
|
|
|
\tt
|
|
|
|
|
\tt\quoteexpand
|
|
|
|
|
\let\kbdfont = \kbdexamplefont % Allow @kbd to do something special.
|
|
|
|
|
\gobble % eat return
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
% @display/@smalldisplay: same as @lisp except keep current font.
|
|
|
|
|
%
|
|
|
|
|
\makedispenv {display}{%
|
|
|
|
@@ -5179,6 +6029,34 @@ 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}
|
|
|
|
|
|
|
|
|
|
% 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
|
|
|
|
|
`%
|
|
|
|
|
\else \char'22 \fi
|
|
|
|
|
\else \char'22 \fi
|
|
|
|
|
}
|
|
|
|
|
%
|
|
|
|
|
\begingroup
|
|
|
|
|
\catcode`\^^I=\active
|
|
|
|
|
\gdef\tabexpand{%
|
|
|
|
@@ -5191,7 +6069,16 @@ where each line of input produces a line of output.}
|
|
|
|
|
\wd0=\dimen0 \box0 \starttabbox
|
|
|
|
|
}%
|
|
|
|
|
}
|
|
|
|
|
\catcode`\'=\active
|
|
|
|
|
\gdef\rquoteexpand{\catcode\rquoteChar=\active \def'{\codequoteright}}%
|
|
|
|
|
%
|
|
|
|
|
\catcode`\`=\active
|
|
|
|
|
\gdef\lquoteexpand{\catcode\lquoteChar=\active \def`{\codequoteleft}}%
|
|
|
|
|
%
|
|
|
|
|
\gdef\quoteexpand{\rquoteexpand \lquoteexpand}%
|
|
|
|
|
\endgroup
|
|
|
|
|
|
|
|
|
|
% start the verbatim environment.
|
|
|
|
|
\def\setupverbatim{%
|
|
|
|
|
\let\nonarrowing = t%
|
|
|
|
|
\nonfillstart
|
|
|
|
@@ -5200,6 +6087,7 @@ where each line of input produces a line of output.}
|
|
|
|
|
\def\par{\leavevmode\egroup\box0\endgraf}%
|
|
|
|
|
\catcode`\`=\active
|
|
|
|
|
\tabexpand
|
|
|
|
|
\quoteexpand
|
|
|
|
|
% Respect line breaks,
|
|
|
|
|
% print special symbols as themselves, and
|
|
|
|
|
% make each space count
|
|
|
|
@@ -5284,27 +6172,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.
|
|
|
|
@@ -5322,7 +6218,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%
|
|
|
|
@@ -5340,7 +6236,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
|
|
|
|
@@ -5609,12 +6505,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
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@@ -5649,7 +6547,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}%
|
|
|
|
@@ -5710,6 +6607,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.
|
|
|
|
@@ -5724,6 +6625,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{%
|
|
|
|
@@ -5916,11 +6818,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}
|
|
|
|
|
\fi \macnamexxx}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
% @alias.
|
|
|
|
@@ -5941,7 +6843,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.
|
|
|
|
|
|
|
|
|
@@ -5986,7 +6887,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.
|
|
|
|
@@ -6005,10 +6906,10 @@ where each line of input produces a line of output.}
|
|
|
|
|
\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
|
|
|
|
|
}
|
|
|
|
@@ -6054,7 +6955,8 @@ where each line of input produces a line of output.}
|
|
|
|
|
\ifpdf
|
|
|
|
|
\leavevmode
|
|
|
|
|
\getfilename{#4}%
|
|
|
|
|
{\turnoffactive
|
|
|
|
|
{\indexnofonts
|
|
|
|
|
\turnoffactive
|
|
|
|
|
% See comments at \activebackslashdouble.
|
|
|
|
|
{\activebackslashdouble \xdef\pdfxrefdest{#1}%
|
|
|
|
|
\backslashparens\pdfxrefdest}%
|
|
|
|
@@ -6067,7 +6969,7 @@ where each line of input produces a line of output.}
|
|
|
|
|
goto name{\pdfmkpgn{\pdfxrefdest}}%
|
|
|
|
|
\fi
|
|
|
|
|
}%
|
|
|
|
|
\linkcolor
|
|
|
|
|
\setcolor{\linkcolor}%
|
|
|
|
|
\fi
|
|
|
|
|
%
|
|
|
|
|
% Float references are printed completely differently: "Figure 1.2"
|
|
|
|
@@ -6085,7 +6987,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
|
|
|
|
@@ -6105,7 +7007,7 @@ 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
|
|
|
|
@@ -6201,10 +7103,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
|
|
|
|
@@ -6219,7 +7129,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
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@@ -6323,6 +7234,7 @@ where each line of input produces a line of output.}
|
|
|
|
|
\input\jobname.#1
|
|
|
|
|
\endgroup}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
\message{insertions,}
|
|
|
|
|
% including footnotes.
|
|
|
|
|
|
|
|
|
@@ -6515,7 +7427,7 @@ where each line of input produces a line of output.}
|
|
|
|
|
% above and below.
|
|
|
|
|
\nobreak\vskip\parskip
|
|
|
|
|
\nobreak
|
|
|
|
|
\line\bgroup\hss
|
|
|
|
|
\line\bgroup
|
|
|
|
|
\fi
|
|
|
|
|
%
|
|
|
|
|
% Output the image.
|
|
|
|
@@ -6528,7 +7440,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 \egroup \bigbreak \fi % space after the image
|
|
|
|
|
\endgroup}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@@ -6595,13 +7507,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
|
|
|
|
@@ -6669,6 +7581,7 @@ where each line of input produces a line of output.}
|
|
|
|
|
% caption if specified, else the full caption if specified, else nothing.
|
|
|
|
|
{%
|
|
|
|
|
\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.
|
|
|
|
@@ -6689,8 +7602,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
|
|
|
|
|
}
|
|
|
|
@@ -6734,7 +7648,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}
|
|
|
|
|
%
|
|
|
|
@@ -6795,39 +7709,871 @@ 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.
|
|
|
|
|
% properly. Single argument is the language (de) or locale (de_DE)
|
|
|
|
|
% abbreviation. It would be nice if we could set up a hyphenation file.
|
|
|
|
|
%
|
|
|
|
|
\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
|
|
|
|
|
\input txi-#1.tex
|
|
|
|
|
\fi
|
|
|
|
|
\closein 1
|
|
|
|
|
\endgroup
|
|
|
|
|
\endgroup}
|
|
|
|
|
}
|
|
|
|
|
%
|
|
|
|
|
% If they passed de_DE, and txi-de_DE.tex doesn't exist,
|
|
|
|
|
% try txi-de.tex.
|
|
|
|
|
%
|
|
|
|
|
\def\documentlanguagetrywithoutunderscore#1_#2\finish{%
|
|
|
|
|
\openin 1 txi-#1.tex
|
|
|
|
|
\ifeof 1
|
|
|
|
|
\errhelp = \nolanghelp
|
|
|
|
|
\errmessage{Cannot read language file txi-#1.tex}%
|
|
|
|
|
\else
|
|
|
|
|
\input txi-#1.tex
|
|
|
|
|
\fi
|
|
|
|
|
\closein 1
|
|
|
|
|
}
|
|
|
|
|
%
|
|
|
|
|
\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.}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
% @documentencoding should change something in TeX eventually, most
|
|
|
|
|
% likely, but for now just recognize it.
|
|
|
|
|
\let\documentencoding = \comment
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
% Page size parameters.
|
|
|
|
|
% 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
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
% @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{\missingcharmsg{LEFT-POINTING DOUBLE ANGLE QUOTATION MARK}}
|
|
|
|
|
\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{\missingcharmsg{RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK}}
|
|
|
|
|
\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{\missingcharmsg{LATIN CAPITAL LETTER ETH}}
|
|
|
|
|
\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{\missingcharmsg{LATIN CAPITAL LETTER THORN}}
|
|
|
|
|
\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{\missingcharmsg{LATIN SMALL LETTER ETH}}
|
|
|
|
|
\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{\missingcharmsg{LATIN SMALL LETTER THORN}}
|
|
|
|
|
\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{\missingcharmsg{LATIN CAPITAL LETTER A WITH OGONEK}}
|
|
|
|
|
\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{\missingcharmsg{LATIN SMALL LETTER A WITH OGONEK}}
|
|
|
|
|
\gdef^^b2{\missingcharmsg{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{\missingcharmsg{LATIN CAPITAL LETTER E WITH OGONEK}}
|
|
|
|
|
\gdef^^cb{\"E}
|
|
|
|
|
\gdef^^cc{\v E}
|
|
|
|
|
\gdef^^cd{\'I}
|
|
|
|
|
\gdef^^ce{\^I}
|
|
|
|
|
\gdef^^cf{\v D}
|
|
|
|
|
%
|
|
|
|
|
\gdef^^d0{\missingcharmsg{LATIN CAPITAL LETTER D WITH STROKE}}
|
|
|
|
|
\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{\missingcharmsg{LATIN SMALL LETTER E WITH OGONEK}}
|
|
|
|
|
\gdef^^eb{\"e}
|
|
|
|
|
\gdef^^ec{\v e}
|
|
|
|
|
\gdef^^ed{\'\i}
|
|
|
|
|
\gdef^^ee{\^\i}
|
|
|
|
|
\gdef^^ef{\v d}
|
|
|
|
|
%
|
|
|
|
|
\gdef^^f0{\missingcharmsg{LATIN SMALL LETTER D WITH STROKE}}
|
|
|
|
|
\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{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{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{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{00FF}{\"y}
|
|
|
|
|
|
|
|
|
|
\DeclareUnicodeCharacter{0100}{\=A}
|
|
|
|
|
\DeclareUnicodeCharacter{0101}{\=a}
|
|
|
|
|
\DeclareUnicodeCharacter{0102}{\u{A}}
|
|
|
|
|
\DeclareUnicodeCharacter{0103}{\u{a}}
|
|
|
|
|
\DeclareUnicodeCharacter{0106}{\'C}
|
|
|
|
|
\DeclareUnicodeCharacter{0107}{\'c}
|
|
|
|
|
\DeclareUnicodeCharacter{0108}{\^C}
|
|
|
|
|
\DeclareUnicodeCharacter{0109}{\^c}
|
|
|
|
|
\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{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
|
|
|
|
@@ -6840,7 +8586,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
|
|
|
|
|
|
|
|
|
@@ -6887,6 +8633,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}
|
|
|
|
@@ -6901,7 +8651,7 @@ 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}%
|
|
|
|
@@ -6913,7 +8663,7 @@ should work if nowhere else does.}
|
|
|
|
|
\textleading = 12pt
|
|
|
|
|
%
|
|
|
|
|
\internalpagesizes{7.5in}{5in}%
|
|
|
|
|
{\voffset}{.25in}%
|
|
|
|
|
{-.2in}{0in}%
|
|
|
|
|
{\bindingoffset}{16pt}%
|
|
|
|
|
{9.25in}{7in}%
|
|
|
|
|
%
|
|
|
|
@@ -6957,7 +8707,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}%
|
|
|
|
@@ -7022,7 +8772,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
|
|
|
|
@@ -7117,6 +8867,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,
|
|
|
|
@@ -7124,28 +8881,29 @@ should work if nowhere else does.}
|
|
|
|
|
\global\chardef\backslashcurfont=`\\
|
|
|
|
|
\global\let\rawbackslashxx=\backslashcurfont % let existing .??s files work
|
|
|
|
|
|
|
|
|
|
% \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, and
|
|
|
|
|
% \doublebackslash is two of them (for the pdf outlines).
|
|
|
|
|
{\catcode`\\=\other @gdef@realbackslash{\} @gdef@doublebackslash{\\}}
|
|
|
|
|
|
|
|
|
|
% \normalbackslash outputs one backslash in fixed width font.
|
|
|
|
|
\def\normalbackslash{{\tt\backslashcurfont}}
|
|
|
|
|
|
|
|
|
|
% 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
|
|
|
|
|
|
|
|
|
|
% Used sometimes to turn off (effectively) the active characters
|
|
|
|
|
% even after parsing them.
|
|
|
|
|
@def@turnoffactive{%
|
|
|
|
|
% \rawbackslash defines an active \ to do \backslashcurfont.
|
|
|
|
|
% \otherbackslash defines an active \ to be a literal `\' character with
|
|
|
|
|
% catcode other.
|
|
|
|
|
@gdef@rawbackslash{@let\=@backslashcurfont}
|
|
|
|
|
@gdef@otherbackslash{@let\=@realbackslash}
|
|
|
|
|
|
|
|
|
|
% 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
|
|
|
|
@@ -7157,12 +8915,6 @@ should work if nowhere else does.}
|
|
|
|
|
@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
|
|
|
|
@@ -7175,7 +8927,7 @@ 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 turn back on active characters that might appear in the input
|
|
|
|
|
% file name, in case not using a pre-dumped format.
|
|
|
|
|