• R/O
  • HTTP
  • SSH
  • HTTPS

提交

標籤
無標籤

Frequently used words (click to add to your profile)

javac++androidlinuxc#windowsobjective-ccocoa誰得qtpythonphprubygameguibathyscaphec計画中(planning stage)翻訳omegatframeworktwitterdomtestvb.netdirectxゲームエンジンbtronarduinopreviewer

Commit MetaInfo

修訂f8d5f06c976e44090f37a706c6a57456916df59b (tree)
時間2009-04-21 21:36:46
作者Joseph Myers <joseph@code...>
CommiterJoseph Myers

Log Message

* texinfo/texinfo.tex: Update to version 2009-03-28.05.

Change Summary

差異

--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
1+2009-04-21 Joseph Myers <joseph@codesourcery.com>
2+
3+ * texinfo/texinfo.tex: Update to version 2009-03-28.05.
4+
15 2009-04-17 Ben Elliston <bje@au.ibm.com>
26
37 * config.sub, config.guess: Update from upstream sources.
--- a/texinfo/texinfo.tex
+++ b/texinfo/texinfo.tex
@@ -3,16 +3,16 @@
33 % Load plain if necessary, i.e., if running under initex.
44 \expandafter\ifx\csname fmtname\endcsname\relax\input plain\fi
55 %
6-\def\texinfoversion{2004-02-19.09}
6+\def\texinfoversion{2009-03-28.05}
77 %
8-% Copyright (C) 1985, 1986, 1988, 1990, 1991, 1992, 1993, 1994, 1995,
9-% 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004 Free Software
10-% Foundation, Inc.
8+% Copyright 1985, 1986, 1988, 1990, 1991, 1992, 1993, 1994, 1995,
9+% 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
10+% 2007, 2008, 2009 Free Software Foundation, Inc.
1111 %
12-% This texinfo.tex file is free software; you can redistribute it and/or
12+% This texinfo.tex file is free software: you can redistribute it and/or
1313 % modify it under the terms of the GNU General Public License as
14-% published by the Free Software Foundation; either version 2, or (at
15-% your option) any later version.
14+% published by the Free Software Foundation, either version 3 of the
15+% License, or (at your option) any later version.
1616 %
1717 % This texinfo.tex file is distributed in the hope that it will be
1818 % useful, but WITHOUT ANY WARRANTY; without even the implied warranty
@@ -20,14 +20,12 @@
2020 % General Public License for more details.
2121 %
2222 % You should have received a copy of the GNU General Public License
23-% along with this texinfo.tex file; see the file COPYING. If not, write
24-% to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
25-% Boston, MA 02111-1307, USA.
23+% along with this program. If not, see <http://www.gnu.org/licenses/>.
2624 %
2725 % As a special exception, when this file is read by TeX when processing
2826 % a Texinfo source document, you may use the result without
2927 % restriction. (This has been our intent since Texinfo was invented.)
30-%
28+%
3129 % Please try the latest version of texinfo.tex before submitting bug
3230 % reports; you can get the latest version from:
3331 % http://www.gnu.org/software/texinfo/ (the Texinfo home page), or
@@ -55,7 +53,7 @@
5553 % It is possible to adapt texinfo.tex for other languages, to some
5654 % extent. You can get the existing language-specific files from the
5755 % full Texinfo distribution.
58-%
56+%
5957 % The GNU Texinfo home page is http://www.gnu.org/software/texinfo.
6058
6159
@@ -67,7 +65,7 @@
6765 \everyjob{\message{[Texinfo version \texinfoversion]}%
6866 \catcode`+=\active \catcode`\_=\active}
6967
70-\message{Basics,}
68+
7169 \chardef\other=12
7270
7371 % We never want plain's \outer definition of \+ in Texinfo.
@@ -89,15 +87,20 @@
8987 \let\ptexhat=^
9088 \let\ptexi=\i
9189 \let\ptexindent=\indent
92-\let\ptexnoindent=\noindent
9390 \let\ptexinsert=\insert
9491 \let\ptexlbrace=\{
9592 \let\ptexless=<
93+\let\ptexnewwrite\newwrite
94+\let\ptexnoindent=\noindent
9695 \let\ptexplus=+
9796 \let\ptexrbrace=\}
9897 \let\ptexslash=\/
9998 \let\ptexstar=\*
10099 \let\ptext=\t
100+\let\ptextop=\top
101+{\catcode`\'=\active
102+\global\let\ptexquoteright'}% Math-mode def from plain.tex.
103+\let\ptexraggedright=\raggedright
101104
102105 % If this character appears in an error message or help string, it
103106 % starts a new line in the output.
@@ -152,20 +155,22 @@
152155 \ifx\putwordDefopt\undefined \gdef\putwordDefopt{User Option}\fi
153156 \ifx\putwordDeffunc\undefined \gdef\putwordDeffunc{Function}\fi
154157
155-% In some macros, we cannot use the `\? notation---the left quote is
156-% in some cases the escape char.
158+% Since the category of space is not known, we have to be careful.
159+\chardef\spacecat = 10
160+\def\spaceisspace{\catcode`\ =\spacecat}
161+
162+% sometimes characters are active, so we need control sequences.
157163 \chardef\colonChar = `\:
158164 \chardef\commaChar = `\,
165+\chardef\dashChar = `\-
159166 \chardef\dotChar = `\.
160167 \chardef\exclamChar= `\!
168+\chardef\lquoteChar= `\`
161169 \chardef\questChar = `\?
170+\chardef\rquoteChar= `\'
162171 \chardef\semiChar = `\;
163172 \chardef\underChar = `\_
164173
165-\chardef\spaceChar = `\ %
166-\chardef\spacecat = 10
167-\def\spaceisspace{\catcode\spaceChar=\spacecat}
168-
169174 % Ignore a token.
170175 %
171176 \def\gobble#1{}
@@ -175,10 +180,12 @@
175180
176181 % Hyphenation fixes.
177182 \hyphenation{
178- Flor-i-da Ghost-script Ghost-view Mac-OS ap-pen-dix bit-map bit-maps
183+ Flor-i-da Ghost-script Ghost-view Mac-OS Post-Script
184+ ap-pen-dix bit-map bit-maps
179185 data-base data-bases eshell fall-ing half-way long-est man-u-script
180186 man-u-scripts mini-buf-fer mini-buf-fers over-view par-a-digm
181- par-a-digms rec-tan-gu-lar ro-bot-ics se-vere-ly set-up spa-ces
187+ par-a-digms rath-er rec-tan-gu-lar ro-bot-ics se-vere-ly set-up spa-ces
188+ spell-ing spell-ings
182189 stand-alone strong-est time-stamp time-stamps which-ever white-space
183190 wide-spread wrap-around
184191 }
@@ -274,6 +281,50 @@
274281 \newdimen\cornerthick \cornerthick=.3pt
275282 \newdimen\topandbottommargin \topandbottommargin=.75in
276283
284+% Output a mark which sets \thischapter, \thissection and \thiscolor.
285+% We dump everything together because we only have one kind of mark.
286+% This works because we only use \botmark / \topmark, not \firstmark.
287+%
288+% A mark contains a subexpression of the \ifcase ... \fi construct.
289+% \get*marks macros below extract the needed part using \ifcase.
290+%
291+% Another complication is to let the user choose whether \thischapter
292+% (\thissection) refers to the chapter (section) in effect at the top
293+% of a page, or that at the bottom of a page. The solution is
294+% described on page 260 of The TeXbook. It involves outputting two
295+% marks for the sectioning macros, one before the section break, and
296+% one after. I won't pretend I can describe this better than DEK...
297+\def\domark{%
298+ \toks0=\expandafter{\lastchapterdefs}%
299+ \toks2=\expandafter{\lastsectiondefs}%
300+ \toks4=\expandafter{\prevchapterdefs}%
301+ \toks6=\expandafter{\prevsectiondefs}%
302+ \toks8=\expandafter{\lastcolordefs}%
303+ \mark{%
304+ \the\toks0 \the\toks2
305+ \noexpand\or \the\toks4 \the\toks6
306+ \noexpand\else \the\toks8
307+ }%
308+}
309+% \topmark doesn't work for the very first chapter (after the title
310+% page or the contents), so we use \firstmark there -- this gets us
311+% the mark with the chapter defs, unless the user sneaks in, e.g.,
312+% @setcolor (or @url, or @link, etc.) between @contents and the very
313+% first @chapter.
314+\def\gettopheadingmarks{%
315+ \ifcase0\topmark\fi
316+ \ifx\thischapter\empty \ifcase0\firstmark\fi \fi
317+}
318+\def\getbottomheadingmarks{\ifcase1\botmark\fi}
319+\def\getcolormarks{\ifcase2\topmark\fi}
320+
321+% Avoid "undefined control sequence" errors.
322+\def\lastchapterdefs{}
323+\def\lastsectiondefs{}
324+\def\prevchapterdefs{}
325+\def\prevsectiondefs{}
326+\def\lastcolordefs{}
327+
277328 % Main output routine.
278329 \chardef\PAGE = 255
279330 \output = {\onepageout{\pagecontents\PAGE}}
@@ -291,7 +342,9 @@
291342 %
292343 % Do this outside of the \shipout so @code etc. will be expanded in
293344 % the headline as they should be, not taken literally (outputting ''code).
345+ \ifodd\pageno \getoddheadingmarks \else \getevenheadingmarks \fi
294346 \setbox\headlinebox = \vbox{\let\hsize=\pagewidth \makeheadline}%
347+ \ifodd\pageno \getoddfootingmarks \else \getevenfootingmarks \fi
295348 \setbox\footlinebox = \vbox{\let\hsize=\pagewidth \makefootline}%
296349 %
297350 {%
@@ -299,10 +352,14 @@
299352 % take effect in \write's, yet the group defined by the \vbox ends
300353 % before the \shipout runs.
301354 %
302- \escapechar = `\\ % use backslash in output files.
303355 \indexdummies % don't expand commands in the output.
304356 \normalturnoffactive % \ in index entries must not stay \, e.g., if
305- % the page break happens to be in the middle of an example.
357+ % the page break happens to be in the middle of an example.
358+ % We don't want .vr (or whatever) entries like this:
359+ % \entry{{\tt \indexbackslash }acronym}{32}{\code {\acronym}}
360+ % "\acronym" won't work when it's read back in;
361+ % it needs to be
362+ % {\code {{\tt \backslashcurfont }acronym}
306363 \shipout\vbox{%
307364 % Do this early so pdf references go to the beginning of the page.
308365 \ifpdfmakepagedest \pdfdest name{\the\pageno} xyz\fi
@@ -330,9 +387,9 @@
330387 \pagebody{#1}%
331388 \ifdim\ht\footlinebox > 0pt
332389 % Only leave this space if the footline is nonempty.
333- % (We lessened \vsize for it in \oddfootingxxx.)
390+ % (We lessened \vsize for it in \oddfootingyyy.)
334391 % The \baselineskip=24pt in plain's \makefootline has no effect.
335- \vskip 2\baselineskip
392+ \vskip 24pt
336393 \unvbox\footlinebox
337394 \fi
338395 %
@@ -353,7 +410,7 @@
353410 \egroup % \vbox from first cropmarks clause
354411 \fi
355412 }% end of \shipout\vbox
356- }% end of group with \normalturnoffactive
413+ }% end of group with \indexdummies
357414 \advancepageno
358415 \ifnum\outputpenalty>-20000 \else\dosupereject\fi
359416 }
@@ -366,7 +423,7 @@
366423 % marginal hacks, juha@viisa.uucp (Juha Takala)
367424 \ifvoid\margin\else % marginal info is present
368425 \rlap{\kern\hsize\vbox to\z@{\kern1pt\box\margin \vss}}\fi
369-\dimen@=\dp#1 \unvbox#1
426+\dimen@=\dp#1\relax \unvbox#1\relax
370427 \ifvoid\footins\else\vskip\skip\footins\footnoterule \unvbox\footins\fi
371428 \ifr@ggedbottom \kern-\dimen@ \vfil \fi}
372429 }
@@ -388,7 +445,7 @@
388445 %
389446 \def\parsearg{\parseargusing{}}
390447 \def\parseargusing#1#2{%
391- \def\next{#2}%
448+ \def\argtorun{#2}%
392449 \begingroup
393450 \obeylines
394451 \spaceisspace
@@ -407,7 +464,7 @@
407464 \def\argremovecomment#1\comment#2\ArgTerm{\argremovec #1\c\ArgTerm}
408465 \def\argremovec#1\c#2\ArgTerm{\argcheckspaces#1\^^M\ArgTerm}
409466
410-% Each occurence of `\^^M' or `<space>\^^M' is replaced by a single space.
467+% Each occurrence of `\^^M' or `<space>\^^M' is replaced by a single space.
411468 %
412469 % \argremovec might leave us with trailing space, e.g.,
413470 % @end itemize @c foo
@@ -419,8 +476,7 @@
419476 \def\argcheckspacesY#1\^^M#2\^^M#3\ArgTerm{%
420477 \def\temp{#3}%
421478 \ifx\temp\empty
422- % We cannot use \next here, as it holds the macro to run;
423- % thus we reuse \temp.
479+ % Do not use \next, perhaps the caller of \parsearg uses it; reuse \temp:
424480 \let\temp\finishparsearg
425481 \else
426482 \let\temp\argcheckspaces
@@ -432,14 +488,14 @@
432488 % If a _delimited_ argument is enclosed in braces, they get stripped; so
433489 % to get _exactly_ the rest of the line, we had to prevent such situation.
434490 % We prepended an \empty token at the very beginning and we expand it now,
435-% just before passing the control to \next.
436-% (Similarily, we have to think about #3 of \argcheckspacesY above: it is
491+% just before passing the control to \argtorun.
492+% (Similarly, we have to think about #3 of \argcheckspacesY above: it is
437493 % either the null string, or it ends with \^^M---thus there is no danger
438494 % that a pair of braces would be stripped.
439495 %
440496 % But first, we have to remove the trailing space token.
441497 %
442-\def\finishparsearg#1 \ArgTerm{\expandafter\next\expandafter{#1}}
498+\def\finishparsearg#1 \ArgTerm{\expandafter\argtorun\expandafter{#1}}
443499
444500 % \parseargdef\foo{...}
445501 % is roughly equivalent to
@@ -479,23 +535,23 @@
479535 \def\flushcr{\ifx\par\lisppar \def\next##1{}\else \let\next=\relax \fi \next}
480536
481537 % Define the framework for environments in texinfo.tex. It's used like this:
482-%
538+%
483539 % \envdef\foo{...}
484540 % \def\Efoo{...}
485-%
541+%
486542 % It's the responsibility of \envdef to insert \begingroup before the
487543 % actual body; @end closes the group after calling \Efoo. \envdef also
488544 % defines \thisenv, so the current environment is known; @end checks
489545 % whether the environment name matches. The \checkenv macro can also be
490546 % used to check whether the current environment is the one expected.
491-%
547+%
492548 % Non-false conditionals (@iftex, @ifset) don't fit into this, so they
493-% are not treated as enviroments; they don't open a group. (The
549+% are not treated as environments; they don't open a group. (The
494550 % implementation of @end takes care not to call \endgroup in this
495551 % special case.)
496552
497553
498-% At runtime, environments start with this:
554+% At run-time, environments start with this:
499555 \def\startenvironment#1{\begingroup\def\thisenv{#1}}
500556 % initialize
501557 \let\thisenv\empty
@@ -513,7 +569,7 @@
513569 \fi
514570 }
515571
516-% Evironment mismatch, #1 expected:
572+% Environment mismatch, #1 expected:
517573 \def\badenverr{%
518574 \errhelp = \EMsimple
519575 \errmessage{This command can appear only \inenvironment\temp,
@@ -563,7 +619,7 @@
563619 \let\}=\myrbrace
564620 \begingroup
565621 % Definitions to produce \{ and \} commands for indices,
566- % and @{ and @} for the aux file.
622+ % and @{ and @} for the aux/toc files.
567623 \catcode`\{ = \other \catcode`\} = \other
568624 \catcode`\[ = 1 \catcode`\] = 2
569625 \catcode`\! = 0 \catcode`\\ = \other
@@ -597,23 +653,23 @@
597653 \def\jmacro{j}
598654 \def\dotless#1{%
599655 \def\temp{#1}%
600- \ifx\temp\imacro \ptexi
601- \else\ifx\temp\jmacro \j
656+ \ifx\temp\imacro \ifmmode\imath \else\ptexi \fi
657+ \else\ifx\temp\jmacro \ifmmode\jmath \else\j \fi
602658 \else \errmessage{@dotless can be used only with i or j}%
603659 \fi\fi
604660 }
605661
606662 % The \TeX{} logo, as in plain, but resetting the spacing so that a
607663 % period following counts as ending a sentence. (Idea found in latex.)
608-%
609-\edef\TeX{\TeX \spacefactor=3000 }
664+%
665+\edef\TeX{\TeX \spacefactor=1000 }
610666
611667 % @LaTeX{} logo. Not quite the same results as the definition in
612668 % latex.ltx, since we use a different font for the raised A; it's most
613669 % convenient for us to use an explicitly smaller font, rather than using
614670 % the \scriptstyle font (since we don't reset \scriptstyle and
615671 % \scriptscriptstyle).
616-%
672+%
617673 \def\LaTeX{%
618674 L\kern-.36em
619675 {\setbox0=\hbox{T}%
@@ -644,13 +700,28 @@
644700 \let\/=\allowbreak
645701
646702 % @. is an end-of-sentence period.
647-\def\.{.\spacefactor=3000 }
703+\def\.{.\spacefactor=\endofsentencespacefactor\space}
648704
649705 % @! is an end-of-sentence bang.
650-\def\!{!\spacefactor=3000 }
706+\def\!{!\spacefactor=\endofsentencespacefactor\space}
651707
652708 % @? is an end-of-sentence query.
653-\def\?{?\spacefactor=3000 }
709+\def\?{?\spacefactor=\endofsentencespacefactor\space}
710+
711+% @frenchspacing on|off says whether to put extra space after punctuation.
712+%
713+\def\onword{on}
714+\def\offword{off}
715+%
716+\parseargdef\frenchspacing{%
717+ \def\temp{#1}%
718+ \ifx\temp\onword \plainfrenchspacing
719+ \else\ifx\temp\offword \plainnonfrenchspacing
720+ \else
721+ \errhelp = \EMsimple
722+ \errmessage{Unknown @frenchspacing option `\temp', must be on/off}%
723+ \fi\fi
724+}
654725
655726 % @w prevents a word break. Without the \leavevmode, @w at the
656727 % beginning of a paragraph, when TeX is still in vertical mode, would
@@ -849,15 +920,20 @@ where each line of input produces a line of output.}
849920 \temp
850921 }
851922
852-% @include file insert text of that file as input.
923+% @include FILE -- \input text of FILE.
853924 %
854925 \def\include{\parseargusing\filenamecatcodes\includezzz}
855926 \def\includezzz#1{%
856927 \pushthisfilestack
857928 \def\thisfile{#1}%
858929 {%
859- \makevalueexpandable
860- \def\temp{\input #1 }%
930+ \makevalueexpandable % we want to expand any @value in FILE.
931+ \turnoffactive % and allow special characters in the expansion
932+ \indexnofonts % Allow `@@' and other weird things in file names.
933+ \edef\temp{\noexpand\input #1 }%
934+ %
935+ % This trickery is to read FILE outside of a group, in case it makes
936+ % definitions, etc.
861937 \expandafter
862938 }\temp
863939 \popthisfilestack
@@ -872,6 +948,8 @@ where each line of input produces a line of output.}
872948 \catcode`>=\other
873949 \catcode`+=\other
874950 \catcode`-=\other
951+ \catcode`\`=\other
952+ \catcode`\'=\other
875953 }
876954
877955 \def\pushthisfilestack{%
@@ -1028,9 +1106,9 @@ where each line of input produces a line of output.}
10281106 % _ active, and distinguish by seeing if the current family is \slfam,
10291107 % which is what @var uses.
10301108 {
1031- \catcode\underChar = \active
1109+ \catcode`\_ = \active
10321110 \gdef\mathunderscore{%
1033- \catcode\underChar=\active
1111+ \catcode`\_=\active
10341112 \def_{\ifnum\fam=\slfam \_\else\sb\fi}%
10351113 }
10361114 }
@@ -1047,6 +1125,16 @@ where each line of input produces a line of output.}
10471125 \mathunderscore
10481126 \let\\ = \mathbackslash
10491127 \mathactive
1128+ % make the texinfo accent commands work in math mode
1129+ \let\"=\ddot
1130+ \let\'=\acute
1131+ \let\==\bar
1132+ \let\^=\hat
1133+ \let\`=\grave
1134+ \let\u=\breve
1135+ \let\v=\check
1136+ \let\~=\tilde
1137+ \let\dotaccent=\dot
10501138 $\finishmath
10511139 }
10521140 \def\finishmath#1{#1$\endgroup} % Close the group opened by \tex.
@@ -1060,28 +1148,41 @@ where each line of input produces a line of output.}
10601148 \catcode`< = \active
10611149 \catcode`> = \active
10621150 \catcode`+ = \active
1151+ \catcode`' = \active
10631152 \gdef\mathactive{%
10641153 \let^ = \ptexhat
10651154 \let< = \ptexless
10661155 \let> = \ptexgtr
10671156 \let+ = \ptexplus
1157+ \let' = \ptexquoteright
10681158 }
10691159 }
10701160
1071-% @bullet and @minus need the same treatment as @math, just above.
1161+% Some math mode symbols.
10721162 \def\bullet{$\ptexbullet$}
1073-\def\minus{$-$}
1163+\def\geq{\ifmmode \ge\else $\ge$\fi}
1164+\def\leq{\ifmmode \le\else $\le$\fi}
1165+\def\minus{\ifmmode -\else $-$\fi}
10741166
10751167 % @dots{} outputs an ellipsis using the current font.
1076-% We do .5em per period so that it has the same spacing in a typewriter
1077-% font as three actual period characters.
1168+% We do .5em per period so that it has the same spacing in the cm
1169+% typewriter fonts as three actual period characters; on the other hand,
1170+% in other typewriter fonts three periods are wider than 1.5em. So do
1171+% whichever is larger.
10781172 %
10791173 \def\dots{%
10801174 \leavevmode
1081- \hbox to 1.5em{%
1082- \hskip 0pt plus 0.25fil
1083- .\hfil.\hfil.%
1084- \hskip 0pt plus 0.5fil
1175+ \setbox0=\hbox{...}% get width of three periods
1176+ \ifdim\wd0 > 1.5em
1177+ \dimen0 = \wd0
1178+ \else
1179+ \dimen0 = 1.5em
1180+ \fi
1181+ \hbox to \dimen0{%
1182+ \hskip 0pt plus.25fil
1183+ .\hskip 0pt plus1fil
1184+ .\hskip 0pt plus1fil
1185+ .\hskip 0pt plus.5fil
10851186 }%
10861187 }
10871188
@@ -1089,12 +1190,12 @@ where each line of input produces a line of output.}
10891190 %
10901191 \def\enddots{%
10911192 \dots
1092- \spacefactor=3000
1193+ \spacefactor=\endofsentencespacefactor
10931194 }
10941195
10951196 % @comma{} is so commas can be inserted into text without messing up
10961197 % Texinfo's parsing.
1097-%
1198+%
10981199 \let\comma = ,
10991200
11001201 % @refill is a no-op.
@@ -1160,48 +1261,192 @@ where each line of input produces a line of output.}
11601261 \newif\ifpdf
11611262 \newif\ifpdfmakepagedest
11621263
1264+% when pdftex is run in dvi mode, \pdfoutput is defined (so \pdfoutput=1
1265+% can be set). So we test for \relax and 0 as well as \undefined,
1266+% borrowed from ifpdf.sty.
11631267 \ifx\pdfoutput\undefined
1164- \pdffalse
1165- \let\pdfmkdest = \gobble
1166- \let\pdfurl = \gobble
1167- \let\endlink = \relax
1168- \let\linkcolor = \relax
1169- \let\pdfmakeoutlines = \relax
11701268 \else
1171- \pdftrue
1172- \pdfoutput = 1
1173- \input pdfcolor
1174- \pdfcatalog{/PageMode /UseOutlines}%
1269+ \ifx\pdfoutput\relax
1270+ \else
1271+ \ifcase\pdfoutput
1272+ \else
1273+ \pdftrue
1274+ \fi
1275+ \fi
1276+\fi
1277+
1278+% PDF uses PostScript string constants for the names of xref targets,
1279+% for display in the outlines, and in other places. Thus, we have to
1280+% double any backslashes. Otherwise, a name like "\node" will be
1281+% interpreted as a newline (\n), followed by o, d, e. Not good.
1282+% http://www.ntg.nl/pipermail/ntg-pdftex/2004-July/000654.html
1283+% (and related messages, the final outcome is that it is up to the TeX
1284+% user to double the backslashes and otherwise make the string valid, so
1285+% that's what we do).
1286+
1287+% double active backslashes.
1288+%
1289+{\catcode`\@=0 \catcode`\\=\active
1290+ @gdef@activebackslashdouble{%
1291+ @catcode`@\=@active
1292+ @let\=@doublebackslash}
1293+}
1294+
1295+% To handle parens, we must adopt a different approach, since parens are
1296+% not active characters. hyperref.dtx (which has the same problem as
1297+% us) handles it with this amazing macro to replace tokens, with minor
1298+% changes for Texinfo. It is included here under the GPL by permission
1299+% from the author, Heiko Oberdiek.
1300+%
1301+% #1 is the tokens to replace.
1302+% #2 is the replacement.
1303+% #3 is the control sequence with the string.
1304+%
1305+\def\HyPsdSubst#1#2#3{%
1306+ \def\HyPsdReplace##1#1##2\END{%
1307+ ##1%
1308+ \ifx\\##2\\%
1309+ \else
1310+ #2%
1311+ \HyReturnAfterFi{%
1312+ \HyPsdReplace##2\END
1313+ }%
1314+ \fi
1315+ }%
1316+ \xdef#3{\expandafter\HyPsdReplace#3#1\END}%
1317+}
1318+\long\def\HyReturnAfterFi#1\fi{\fi#1}
1319+
1320+% #1 is a control sequence in which to do the replacements.
1321+\def\backslashparens#1{%
1322+ \xdef#1{#1}% redefine it as its expansion; the definition is simply
1323+ % \lastnode when called from \setref -> \pdfmkdest.
1324+ \HyPsdSubst{(}{\realbackslash(}{#1}%
1325+ \HyPsdSubst{)}{\realbackslash)}{#1}%
1326+}
1327+
1328+\newhelp\nopdfimagehelp{Texinfo supports .png, .jpg, .jpeg, and .pdf images
1329+with PDF output, and none of those formats could be found. (.eps cannot
1330+be supported due to the design of the PDF format; use regular TeX (DVI
1331+output) for that.)}
1332+
1333+\ifpdf
1334+ %
1335+ % Color manipulation macros based on pdfcolor.tex.
1336+ \def\cmykDarkRed{0.28 1 1 0.35}
1337+ \def\cmykBlack{0 0 0 1}
1338+ %
1339+ % k sets the color for filling (usual text, etc.);
1340+ % K sets the color for stroking (thin rules, e.g., normal _'s).
1341+ \def\pdfsetcolor#1{\pdfliteral{#1 k #1 K}}
1342+ %
1343+ % Set color, and create a mark which defines \thiscolor accordingly,
1344+ % so that \makeheadline knows which color to restore.
1345+ \def\setcolor#1{%
1346+ \xdef\lastcolordefs{\gdef\noexpand\thiscolor{#1}}%
1347+ \domark
1348+ \pdfsetcolor{#1}%
1349+ }
1350+ %
1351+ \def\maincolor{\cmykBlack}
1352+ \pdfsetcolor{\maincolor}
1353+ \edef\thiscolor{\maincolor}
1354+ \def\lastcolordefs{}
1355+ %
1356+ \def\makefootline{%
1357+ \baselineskip24pt
1358+ \line{\pdfsetcolor{\maincolor}\the\footline}%
1359+ }
1360+ %
1361+ \def\makeheadline{%
1362+ \vbox to 0pt{%
1363+ \vskip-22.5pt
1364+ \line{%
1365+ \vbox to8.5pt{}%
1366+ % Extract \thiscolor definition from the marks.
1367+ \getcolormarks
1368+ % Typeset the headline with \maincolor, then restore the color.
1369+ \pdfsetcolor{\maincolor}\the\headline\pdfsetcolor{\thiscolor}%
1370+ }%
1371+ \vss
1372+ }%
1373+ \nointerlineskip
1374+ }
1375+ %
1376+ %
1377+ \pdfcatalog{/PageMode /UseOutlines}
1378+ %
1379+ % #1 is image name, #2 width (might be empty/whitespace), #3 height (ditto).
11751380 \def\dopdfimage#1#2#3{%
1176- \def\imagewidth{#2}%
1177- \def\imageheight{#3}%
1178- % without \immediate, pdftex seg faults when the same image is
1381+ \def\imagewidth{#2}\setbox0 = \hbox{\ignorespaces #2}%
1382+ \def\imageheight{#3}\setbox2 = \hbox{\ignorespaces #3}%
1383+ %
1384+ % pdftex (and the PDF format) support .png, .jpg, .pdf (among
1385+ % others). Let's try in that order.
1386+ \let\pdfimgext=\empty
1387+ \begingroup
1388+ \openin 1 #1.png \ifeof 1
1389+ \openin 1 #1.jpg \ifeof 1
1390+ \openin 1 #1.jpeg \ifeof 1
1391+ \openin 1 #1.JPG \ifeof 1
1392+ \openin 1 #1.pdf \ifeof 1
1393+ \openin 1 #1.PDF \ifeof 1
1394+ \errhelp = \nopdfimagehelp
1395+ \errmessage{Could not find image file #1 for pdf}%
1396+ \else \gdef\pdfimgext{PDF}%
1397+ \fi
1398+ \else \gdef\pdfimgext{pdf}%
1399+ \fi
1400+ \else \gdef\pdfimgext{JPG}%
1401+ \fi
1402+ \else \gdef\pdfimgext{jpeg}%
1403+ \fi
1404+ \else \gdef\pdfimgext{jpg}%
1405+ \fi
1406+ \else \gdef\pdfimgext{png}%
1407+ \fi
1408+ \closein 1
1409+ \endgroup
1410+ %
1411+ % without \immediate, ancient pdftex seg faults when the same image is
11791412 % included twice. (Version 3.14159-pre-1.0-unofficial-20010704.)
11801413 \ifnum\pdftexversion < 14
11811414 \immediate\pdfimage
11821415 \else
11831416 \immediate\pdfximage
11841417 \fi
1185- \ifx\empty\imagewidth\else width \imagewidth \fi
1186- \ifx\empty\imageheight\else height \imageheight \fi
1418+ \ifdim \wd0 >0pt width \imagewidth \fi
1419+ \ifdim \wd2 >0pt height \imageheight \fi
11871420 \ifnum\pdftexversion<13
1188- #1.pdf%
1421+ #1.\pdfimgext
11891422 \else
1190- {#1.pdf}%
1423+ {#1.\pdfimgext}%
11911424 \fi
11921425 \ifnum\pdftexversion < 14 \else
11931426 \pdfrefximage \pdflastximage
11941427 \fi}
1428+ %
11951429 \def\pdfmkdest#1{{%
1196- % We have to set dummies so commands such as @code in a section title
1197- % aren't expanded.
1198- \atdummies
1199- \normalturnoffactive
1200- \pdfdest name{#1} xyz%
1430+ % We have to set dummies so commands such as @code, and characters
1431+ % such as \, aren't expanded when present in a section title.
1432+ \indexnofonts
1433+ \turnoffactive
1434+ \activebackslashdouble
1435+ \makevalueexpandable
1436+ \def\pdfdestname{#1}%
1437+ \backslashparens\pdfdestname
1438+ \safewhatsit{\pdfdest name{\pdfdestname} xyz}%
12011439 }}
1440+ %
1441+ % used to mark target names; must be expandable.
12021442 \def\pdfmkpgn#1{#1}
1203- \let\linkcolor = \Blue % was Cyan, but that seems light?
1204- \def\endlink{\Black\pdfendlink}
1443+ %
1444+ % by default, use a color that is dark enough to print on paper as
1445+ % nearly black, but still distinguishable for online viewing.
1446+ \def\urlcolor{\cmykDarkRed}
1447+ \def\linkcolor{\cmykDarkRed}
1448+ \def\endlink{\setcolor{\maincolor}\pdfendlink}
1449+ %
12051450 % Adding outlines to PDF; macros for calculating structure of outlines
12061451 % come from Petr Olsak
12071452 \def\expnumber#1{\expandafter\ifx\csname#1\endcsname\relax 0%
@@ -1210,20 +1455,31 @@ where each line of input produces a line of output.}
12101455 \advance\tempnum by 1
12111456 \expandafter\xdef\csname#1\endcsname{\the\tempnum}}
12121457 %
1213- % #1 is the section text. #2 is the pdf expression for the number
1214- % of subentries (or empty, for subsubsections). #3 is the node
1215- % text, which might be empty if this toc entry had no
1216- % corresponding node. #4 is the page number.
1217- %
1458+ % #1 is the section text, which is what will be displayed in the
1459+ % outline by the pdf viewer. #2 is the pdf expression for the number
1460+ % of subentries (or empty, for subsubsections). #3 is the node text,
1461+ % which might be empty if this toc entry had no corresponding node.
1462+ % #4 is the page number
1463+ %
12181464 \def\dopdfoutline#1#2#3#4{%
12191465 % Generate a link to the node text if that exists; else, use the
12201466 % page number. We could generate a destination for the section
12211467 % text in the case where a section has no node, but it doesn't
1222- % seem worthwhile, since most documents are normally structured.
1468+ % seem worth the trouble, since most documents are normally structured.
12231469 \def\pdfoutlinedest{#3}%
1224- \ifx\pdfoutlinedest\empty \def\pdfoutlinedest{#4}\fi
1470+ \ifx\pdfoutlinedest\empty
1471+ \def\pdfoutlinedest{#4}%
1472+ \else
1473+ % Doubled backslashes in the name.
1474+ {\activebackslashdouble \xdef\pdfoutlinedest{#3}%
1475+ \backslashparens\pdfoutlinedest}%
1476+ \fi
1477+ %
1478+ % Also double the backslashes in the display string.
1479+ {\activebackslashdouble \xdef\pdfoutlinetext{#1}%
1480+ \backslashparens\pdfoutlinetext}%
12251481 %
1226- \pdfoutline goto name{\pdfmkpgn{\pdfoutlinedest}}#2{#1}%
1482+ \pdfoutline goto name{\pdfmkpgn{\pdfoutlinedest}}#2{\pdfoutlinetext}%
12271483 }
12281484 %
12291485 \def\pdfmakeoutlines{%
@@ -1235,13 +1491,13 @@ where each line of input produces a line of output.}
12351491 % Read toc silently, to get counts of subentries for \pdfoutline.
12361492 \def\numchapentry##1##2##3##4{%
12371493 \def\thischapnum{##2}%
1238- \let\thissecnum\empty
1239- \let\thissubsecnum\empty
1494+ \def\thissecnum{0}%
1495+ \def\thissubsecnum{0}%
12401496 }%
12411497 \def\numsecentry##1##2##3##4{%
12421498 \advancenumber{chap\thischapnum}%
12431499 \def\thissecnum{##2}%
1244- \let\thissubsecnum\empty
1500+ \def\thissubsecnum{0}%
12451501 }%
12461502 \def\numsubsecentry##1##2##3##4{%
12471503 \advancenumber{sec\thissecnum}%
@@ -1250,9 +1506,9 @@ where each line of input produces a line of output.}
12501506 \def\numsubsubsecentry##1##2##3##4{%
12511507 \advancenumber{subsec\thissubsecnum}%
12521508 }%
1253- \let\thischapnum\empty
1254- \let\thissecnum\empty
1255- \let\thissubsecnum\empty
1509+ \def\thischapnum{0}%
1510+ \def\thissecnum{0}%
1511+ \def\thissubsecnum{0}%
12561512 %
12571513 % use \def rather than \let here because we redefine \chapentry et
12581514 % al. a second time, below.
@@ -1264,12 +1520,12 @@ where each line of input produces a line of output.}
12641520 \def\unnsecentry{\numsecentry}%
12651521 \def\unnsubsecentry{\numsubsecentry}%
12661522 \def\unnsubsubsecentry{\numsubsubsecentry}%
1267- \input \jobname.toc
1523+ \readdatafile{toc}%
12681524 %
12691525 % Read toc second time, this time actually producing the outlines.
12701526 % The `-' means take the \expnumber as the absolute number of
12711527 % subentries, which we calculated on our first read of the .toc above.
1272- %
1528+ %
12731529 % We use the node names as the destinations.
12741530 \def\numchapentry##1##2##3##4{%
12751531 \dopdfoutline{##1}{count-\expnumber{chap##2}}{##3}{##4}}%
@@ -1285,46 +1541,17 @@ where each line of input produces a line of output.}
12851541 % since the encoding is unknown. For example, the eogonek from
12861542 % Latin 2 (0xea) gets translated to a | character. Info from
12871543 % Staszek Wawrykiewicz, 19 Jan 2004 04:09:24 +0100.
1288- %
1544+ %
12891545 % xx to do this right, we have to translate 8-bit characters to
12901546 % their "best" equivalent, based on the @documentencoding. Right
12911547 % now, I guess we'll just let the pdf reader have its way.
12921548 \indexnofonts
1293- \turnoffactive
1294- \input \jobname.toc
1549+ \setupdatafile
1550+ \catcode`\\=\active \otherbackslash
1551+ \input \tocreadfilename
12951552 \endgroup
12961553 }
12971554 %
1298- \def\makelinks #1,{%
1299- \def\params{#1}\def\E{END}%
1300- \ifx\params\E
1301- \let\nextmakelinks=\relax
1302- \else
1303- \let\nextmakelinks=\makelinks
1304- \ifnum\lnkcount>0,\fi
1305- \picknum{#1}%
1306- \startlink attr{/Border [0 0 0]}
1307- goto name{\pdfmkpgn{\the\pgn}}%
1308- \linkcolor #1%
1309- \advance\lnkcount by 1%
1310- \endlink
1311- \fi
1312- \nextmakelinks
1313- }
1314- \def\picknum#1{\expandafter\pn#1}
1315- \def\pn#1{%
1316- \def\p{#1}%
1317- \ifx\p\lbrace
1318- \let\nextpn=\ppn
1319- \else
1320- \let\nextpn=\ppnn
1321- \def\first{#1}
1322- \fi
1323- \nextpn
1324- }
1325- \def\ppn#1{\pgn=#1\gobble}
1326- \def\ppnn{\pgn=\first}
1327- \def\pdfmklnk#1{\lnkcount=0\makelinks #1,END,}
13281555 \def\skipspaces#1{\def\PP{#1}\def\D{|}%
13291556 \ifx\PP\D\let\nextsp\relax
13301557 \else\let\nextsp\skipspaces
@@ -1339,11 +1566,23 @@ where each line of input produces a line of output.}
13391566 \else
13401567 \let \startlink \pdfstartlink
13411568 \fi
1569+ % make a live url in pdf output.
13421570 \def\pdfurl#1{%
13431571 \begingroup
1344- \normalturnoffactive\def\@{@}%
1572+ % it seems we really need yet another set of dummies; have not
1573+ % tried to figure out what each command should do in the context
1574+ % of @url. for now, just make @/ a no-op, that's the only one
1575+ % people have actually reported a problem with.
1576+ %
1577+ \normalturnoffactive
1578+ \def\@{@}%
1579+ \let\/=\empty
13451580 \makevalueexpandable
1346- \leavevmode\Red
1581+ % do we want to go so far as to use \indexnofonts instead of just
1582+ % special-casing \var here?
1583+ \def\var##1{##1}%
1584+ %
1585+ \leavevmode\setcolor{\urlcolor}%
13471586 \startlink attr{/Border [0 0 0]}%
13481587 user{/Subtype /Link /A << /S /URI /URI (#1) >>}%
13491588 \endgroup}
@@ -1370,9 +1609,17 @@ where each line of input produces a line of output.}
13701609 {\noexpand\pdflink{\the\toksC}}\toksC={}\global\countA=0}
13711610 \def\pdflink#1{%
13721611 \startlink attr{/Border [0 0 0]} goto name{\pdfmkpgn{#1}}
1373- \linkcolor #1\endlink}
1612+ \setcolor{\linkcolor}#1\endlink}
13741613 \def\done{\edef\st{\global\noexpand\toksA={\the\toksB}}\st}
1375-\fi % \ifx\pdfoutput
1614+\else
1615+ % non-pdf mode
1616+ \let\pdfmkdest = \gobble
1617+ \let\pdfurl = \gobble
1618+ \let\endlink = \relax
1619+ \let\setcolor = \gobble
1620+ \let\pdfsetcolor = \gobble
1621+ \let\pdfmakeoutlines = \relax
1622+\fi % \ifx\pdfoutput
13761623
13771624
13781625 \message{fonts,}
@@ -1380,22 +1627,26 @@ where each line of input produces a line of output.}
13801627 % Change the current font style to #1, remembering it in \curfontstyle.
13811628 % For now, we do not accumulate font styles: @b{@i{foo}} prints foo in
13821629 % italics, not bold italics.
1383-%
1630+%
13841631 \def\setfontstyle#1{%
13851632 \def\curfontstyle{#1}% not as a control sequence, because we are \edef'd.
13861633 \csname ten#1\endcsname % change the current font
13871634 }
13881635
13891636 % Select #1 fonts with the current style.
1390-%
1637+%
13911638 \def\selectfonts#1{\csname #1fonts\endcsname \csname\curfontstyle\endcsname}
13921639
13931640 \def\rm{\fam=0 \setfontstyle{rm}}
13941641 \def\it{\fam=\itfam \setfontstyle{it}}
13951642 \def\sl{\fam=\slfam \setfontstyle{sl}}
1396-\def\bf{\fam=\bffam \setfontstyle{bf}}
1643+\def\bf{\fam=\bffam \setfontstyle{bf}}\def\bfstylename{bf}
13971644 \def\tt{\fam=\ttfam \setfontstyle{tt}}
13981645
1646+% Unfortunately, we have to override this for titles and the like, since
1647+% in those cases "rm" is bold. Sigh.
1648+\def\rmisbold{\rm\def\curfontstyle{bf}}
1649+
13991650 % Texinfo sort of supports the sans serif font style, which plain TeX does not.
14001651 % So we set up a \sf.
14011652 \newfam\sffam
@@ -1405,6 +1656,7 @@ where each line of input produces a line of output.}
14051656 % We don't need math for this font style.
14061657 \def\ttsl{\setfontstyle{ttsl}}
14071658
1659+
14081660 % Default leading.
14091661 \newdimen\textleading \textleading = 13.2pt
14101662
@@ -1416,8 +1668,12 @@ where each line of input produces a line of output.}
14161668 \def\strutheightpercent{.70833}
14171669 \def\strutdepthpercent {.29167}
14181670 %
1671+% can get a sort of poor man's double spacing by redefining this.
1672+\def\baselinefactor{1}
1673+%
14191674 \def\setleading#1{%
1420- \normalbaselineskip = #1\relax
1675+ \dimen0 = #1\relax
1676+ \normalbaselineskip = \baselinefactor\dimen0
14211677 \normallineskip = \lineskipfactor\normalbaselineskip
14221678 \normalbaselines
14231679 \setbox\strutbox =\hbox{%
@@ -1426,10 +1682,279 @@ where each line of input produces a line of output.}
14261682 }%
14271683 }
14281684
1685+% PDF CMaps. See also LaTeX's t1.cmap.
1686+%
1687+% do nothing with this by default.
1688+\expandafter\let\csname cmapOT1\endcsname\gobble
1689+\expandafter\let\csname cmapOT1IT\endcsname\gobble
1690+\expandafter\let\csname cmapOT1TT\endcsname\gobble
1691+
1692+% if we are producing pdf, and we have \pdffontattr, then define cmaps.
1693+% (\pdffontattr was introduced many years ago, but people still run
1694+% older pdftex's; it's easy to conditionalize, so we do.)
1695+\ifpdf \ifx\pdffontattr\undefined \else
1696+ \begingroup
1697+ \catcode`\^^M=\active \def^^M{^^J}% Output line endings as the ^^J char.
1698+ \catcode`\%=12 \immediate\pdfobj stream {%!PS-Adobe-3.0 Resource-CMap
1699+%%DocumentNeededResources: ProcSet (CIDInit)
1700+%%IncludeResource: ProcSet (CIDInit)
1701+%%BeginResource: CMap (TeX-OT1-0)
1702+%%Title: (TeX-OT1-0 TeX OT1 0)
1703+%%Version: 1.000
1704+%%EndComments
1705+/CIDInit /ProcSet findresource begin
1706+12 dict begin
1707+begincmap
1708+/CIDSystemInfo
1709+<< /Registry (TeX)
1710+/Ordering (OT1)
1711+/Supplement 0
1712+>> def
1713+/CMapName /TeX-OT1-0 def
1714+/CMapType 2 def
1715+1 begincodespacerange
1716+<00> <7F>
1717+endcodespacerange
1718+8 beginbfrange
1719+<00> <01> <0393>
1720+<09> <0A> <03A8>
1721+<23> <26> <0023>
1722+<28> <3B> <0028>
1723+<3F> <5B> <003F>
1724+<5D> <5E> <005D>
1725+<61> <7A> <0061>
1726+<7B> <7C> <2013>
1727+endbfrange
1728+40 beginbfchar
1729+<02> <0398>
1730+<03> <039B>
1731+<04> <039E>
1732+<05> <03A0>
1733+<06> <03A3>
1734+<07> <03D2>
1735+<08> <03A6>
1736+<0B> <00660066>
1737+<0C> <00660069>
1738+<0D> <0066006C>
1739+<0E> <006600660069>
1740+<0F> <00660066006C>
1741+<10> <0131>
1742+<11> <0237>
1743+<12> <0060>
1744+<13> <00B4>
1745+<14> <02C7>
1746+<15> <02D8>
1747+<16> <00AF>
1748+<17> <02DA>
1749+<18> <00B8>
1750+<19> <00DF>
1751+<1A> <00E6>
1752+<1B> <0153>
1753+<1C> <00F8>
1754+<1D> <00C6>
1755+<1E> <0152>
1756+<1F> <00D8>
1757+<21> <0021>
1758+<22> <201D>
1759+<27> <2019>
1760+<3C> <00A1>
1761+<3D> <003D>
1762+<3E> <00BF>
1763+<5C> <201C>
1764+<5F> <02D9>
1765+<60> <2018>
1766+<7D> <02DD>
1767+<7E> <007E>
1768+<7F> <00A8>
1769+endbfchar
1770+endcmap
1771+CMapName currentdict /CMap defineresource pop
1772+end
1773+end
1774+%%EndResource
1775+%%EOF
1776+ }\endgroup
1777+ \expandafter\edef\csname cmapOT1\endcsname#1{%
1778+ \pdffontattr#1{/ToUnicode \the\pdflastobj\space 0 R}%
1779+ }%
1780+%
1781+% \cmapOT1IT
1782+ \begingroup
1783+ \catcode`\^^M=\active \def^^M{^^J}% Output line endings as the ^^J char.
1784+ \catcode`\%=12 \immediate\pdfobj stream {%!PS-Adobe-3.0 Resource-CMap
1785+%%DocumentNeededResources: ProcSet (CIDInit)
1786+%%IncludeResource: ProcSet (CIDInit)
1787+%%BeginResource: CMap (TeX-OT1IT-0)
1788+%%Title: (TeX-OT1IT-0 TeX OT1IT 0)
1789+%%Version: 1.000
1790+%%EndComments
1791+/CIDInit /ProcSet findresource begin
1792+12 dict begin
1793+begincmap
1794+/CIDSystemInfo
1795+<< /Registry (TeX)
1796+/Ordering (OT1IT)
1797+/Supplement 0
1798+>> def
1799+/CMapName /TeX-OT1IT-0 def
1800+/CMapType 2 def
1801+1 begincodespacerange
1802+<00> <7F>
1803+endcodespacerange
1804+8 beginbfrange
1805+<00> <01> <0393>
1806+<09> <0A> <03A8>
1807+<25> <26> <0025>
1808+<28> <3B> <0028>
1809+<3F> <5B> <003F>
1810+<5D> <5E> <005D>
1811+<61> <7A> <0061>
1812+<7B> <7C> <2013>
1813+endbfrange
1814+42 beginbfchar
1815+<02> <0398>
1816+<03> <039B>
1817+<04> <039E>
1818+<05> <03A0>
1819+<06> <03A3>
1820+<07> <03D2>
1821+<08> <03A6>
1822+<0B> <00660066>
1823+<0C> <00660069>
1824+<0D> <0066006C>
1825+<0E> <006600660069>
1826+<0F> <00660066006C>
1827+<10> <0131>
1828+<11> <0237>
1829+<12> <0060>
1830+<13> <00B4>
1831+<14> <02C7>
1832+<15> <02D8>
1833+<16> <00AF>
1834+<17> <02DA>
1835+<18> <00B8>
1836+<19> <00DF>
1837+<1A> <00E6>
1838+<1B> <0153>
1839+<1C> <00F8>
1840+<1D> <00C6>
1841+<1E> <0152>
1842+<1F> <00D8>
1843+<21> <0021>
1844+<22> <201D>
1845+<23> <0023>
1846+<24> <00A3>
1847+<27> <2019>
1848+<3C> <00A1>
1849+<3D> <003D>
1850+<3E> <00BF>
1851+<5C> <201C>
1852+<5F> <02D9>
1853+<60> <2018>
1854+<7D> <02DD>
1855+<7E> <007E>
1856+<7F> <00A8>
1857+endbfchar
1858+endcmap
1859+CMapName currentdict /CMap defineresource pop
1860+end
1861+end
1862+%%EndResource
1863+%%EOF
1864+ }\endgroup
1865+ \expandafter\edef\csname cmapOT1IT\endcsname#1{%
1866+ \pdffontattr#1{/ToUnicode \the\pdflastobj\space 0 R}%
1867+ }%
1868+%
1869+% \cmapOT1TT
1870+ \begingroup
1871+ \catcode`\^^M=\active \def^^M{^^J}% Output line endings as the ^^J char.
1872+ \catcode`\%=12 \immediate\pdfobj stream {%!PS-Adobe-3.0 Resource-CMap
1873+%%DocumentNeededResources: ProcSet (CIDInit)
1874+%%IncludeResource: ProcSet (CIDInit)
1875+%%BeginResource: CMap (TeX-OT1TT-0)
1876+%%Title: (TeX-OT1TT-0 TeX OT1TT 0)
1877+%%Version: 1.000
1878+%%EndComments
1879+/CIDInit /ProcSet findresource begin
1880+12 dict begin
1881+begincmap
1882+/CIDSystemInfo
1883+<< /Registry (TeX)
1884+/Ordering (OT1TT)
1885+/Supplement 0
1886+>> def
1887+/CMapName /TeX-OT1TT-0 def
1888+/CMapType 2 def
1889+1 begincodespacerange
1890+<00> <7F>
1891+endcodespacerange
1892+5 beginbfrange
1893+<00> <01> <0393>
1894+<09> <0A> <03A8>
1895+<21> <26> <0021>
1896+<28> <5F> <0028>
1897+<61> <7E> <0061>
1898+endbfrange
1899+32 beginbfchar
1900+<02> <0398>
1901+<03> <039B>
1902+<04> <039E>
1903+<05> <03A0>
1904+<06> <03A3>
1905+<07> <03D2>
1906+<08> <03A6>
1907+<0B> <2191>
1908+<0C> <2193>
1909+<0D> <0027>
1910+<0E> <00A1>
1911+<0F> <00BF>
1912+<10> <0131>
1913+<11> <0237>
1914+<12> <0060>
1915+<13> <00B4>
1916+<14> <02C7>
1917+<15> <02D8>
1918+<16> <00AF>
1919+<17> <02DA>
1920+<18> <00B8>
1921+<19> <00DF>
1922+<1A> <00E6>
1923+<1B> <0153>
1924+<1C> <00F8>
1925+<1D> <00C6>
1926+<1E> <0152>
1927+<1F> <00D8>
1928+<20> <2423>
1929+<27> <2019>
1930+<60> <2018>
1931+<7F> <00A8>
1932+endbfchar
1933+endcmap
1934+CMapName currentdict /CMap defineresource pop
1935+end
1936+end
1937+%%EndResource
1938+%%EOF
1939+ }\endgroup
1940+ \expandafter\edef\csname cmapOT1TT\endcsname#1{%
1941+ \pdffontattr#1{/ToUnicode \the\pdflastobj\space 0 R}%
1942+ }%
1943+\fi\fi
1944+
1945+
14291946 % Set the font macro #1 to the font named #2, adding on the
14301947 % specified font prefix (normally `cm').
1431-% #3 is the font's design size, #4 is a scale factor
1432-\def\setfont#1#2#3#4{\font#1=\fontprefix#2#3 scaled #4}
1948+% #3 is the font's design size, #4 is a scale factor, #5 is the CMap
1949+% encoding (currently only OT1, OT1IT and OT1TT are allowed, pass
1950+% empty to omit).
1951+\def\setfont#1#2#3#4#5{%
1952+ \font#1=\fontprefix#2#3 scaled #4
1953+ \csname cmap#5\endcsname#1%
1954+}
1955+% This is what gets called when #5 of \setfont is empty.
1956+\let\cmap\gobble
1957+% emacs-page end of cmaps
14331958
14341959 % Use cm as the default font prefix.
14351960 % To specify the font prefix, you must define \fontprefix
@@ -1454,118 +1979,293 @@ where each line of input produces a line of output.}
14541979 \def\scshape{csc}
14551980 \def\scbshape{csc}
14561981
1982+% Definitions for a main text size of 11pt. This is the default in
1983+% Texinfo.
1984+%
1985+\def\definetextfontsizexi{%
14571986 % Text fonts (11.2pt, magstep1).
1458-\newcount\mainmagstep
1459-\ifx\bigger\relax
1460- % not really supported.
1461- \mainmagstep=\magstep1
1462- \setfont\textrm\rmshape{12}{1000}
1463- \setfont\texttt\ttshape{12}{1000}
1464-\else
1465- \mainmagstep=\magstephalf
1466- \setfont\textrm\rmshape{10}{\mainmagstep}
1467- \setfont\texttt\ttshape{10}{\mainmagstep}
1468-\fi
1469-\setfont\textbf\bfshape{10}{\mainmagstep}
1470-\setfont\textit\itshape{10}{\mainmagstep}
1471-\setfont\textsl\slshape{10}{\mainmagstep}
1472-\setfont\textsf\sfshape{10}{\mainmagstep}
1473-\setfont\textsc\scshape{10}{\mainmagstep}
1474-\setfont\textttsl\ttslshape{10}{\mainmagstep}
1987+\def\textnominalsize{11pt}
1988+\edef\mainmagstep{\magstephalf}
1989+\setfont\textrm\rmshape{10}{\mainmagstep}{OT1}
1990+\setfont\texttt\ttshape{10}{\mainmagstep}{OT1TT}
1991+\setfont\textbf\bfshape{10}{\mainmagstep}{OT1}
1992+\setfont\textit\itshape{10}{\mainmagstep}{OT1IT}
1993+\setfont\textsl\slshape{10}{\mainmagstep}{OT1}
1994+\setfont\textsf\sfshape{10}{\mainmagstep}{OT1}
1995+\setfont\textsc\scshape{10}{\mainmagstep}{OT1}
1996+\setfont\textttsl\ttslshape{10}{\mainmagstep}{OT1TT}
14751997 \font\texti=cmmi10 scaled \mainmagstep
14761998 \font\textsy=cmsy10 scaled \mainmagstep
1999+\def\textecsize{1095}
14772000
14782001 % A few fonts for @defun names and args.
1479-\setfont\defbf\bfshape{10}{\magstep1}
1480-\setfont\deftt\ttshape{10}{\magstep1}
1481-\setfont\defttsl\ttslshape{10}{\magstep1}
2002+\setfont\defbf\bfshape{10}{\magstep1}{OT1}
2003+\setfont\deftt\ttshape{10}{\magstep1}{OT1TT}
2004+\setfont\defttsl\ttslshape{10}{\magstep1}{OT1TT}
14822005 \def\df{\let\tentt=\deftt \let\tenbf = \defbf \let\tenttsl=\defttsl \bf}
14832006
14842007 % Fonts for indices, footnotes, small examples (9pt).
1485-\setfont\smallrm\rmshape{9}{1000}
1486-\setfont\smalltt\ttshape{9}{1000}
1487-\setfont\smallbf\bfshape{10}{900}
1488-\setfont\smallit\itshape{9}{1000}
1489-\setfont\smallsl\slshape{9}{1000}
1490-\setfont\smallsf\sfshape{9}{1000}
1491-\setfont\smallsc\scshape{10}{900}
1492-\setfont\smallttsl\ttslshape{10}{900}
2008+\def\smallnominalsize{9pt}
2009+\setfont\smallrm\rmshape{9}{1000}{OT1}
2010+\setfont\smalltt\ttshape{9}{1000}{OT1TT}
2011+\setfont\smallbf\bfshape{10}{900}{OT1}
2012+\setfont\smallit\itshape{9}{1000}{OT1IT}
2013+\setfont\smallsl\slshape{9}{1000}{OT1}
2014+\setfont\smallsf\sfshape{9}{1000}{OT1}
2015+\setfont\smallsc\scshape{10}{900}{OT1}
2016+\setfont\smallttsl\ttslshape{10}{900}{OT1TT}
14932017 \font\smalli=cmmi9
14942018 \font\smallsy=cmsy9
2019+\def\smallecsize{0900}
14952020
14962021 % Fonts for small examples (8pt).
1497-\setfont\smallerrm\rmshape{8}{1000}
1498-\setfont\smallertt\ttshape{8}{1000}
1499-\setfont\smallerbf\bfshape{10}{800}
1500-\setfont\smallerit\itshape{8}{1000}
1501-\setfont\smallersl\slshape{8}{1000}
1502-\setfont\smallersf\sfshape{8}{1000}
1503-\setfont\smallersc\scshape{10}{800}
1504-\setfont\smallerttsl\ttslshape{10}{800}
2022+\def\smallernominalsize{8pt}
2023+\setfont\smallerrm\rmshape{8}{1000}{OT1}
2024+\setfont\smallertt\ttshape{8}{1000}{OT1TT}
2025+\setfont\smallerbf\bfshape{10}{800}{OT1}
2026+\setfont\smallerit\itshape{8}{1000}{OT1IT}
2027+\setfont\smallersl\slshape{8}{1000}{OT1}
2028+\setfont\smallersf\sfshape{8}{1000}{OT1}
2029+\setfont\smallersc\scshape{10}{800}{OT1}
2030+\setfont\smallerttsl\ttslshape{10}{800}{OT1TT}
15052031 \font\smalleri=cmmi8
15062032 \font\smallersy=cmsy8
2033+\def\smallerecsize{0800}
15072034
15082035 % Fonts for title page (20.4pt):
1509-\setfont\titlerm\rmbshape{12}{\magstep3}
1510-\setfont\titleit\itbshape{10}{\magstep4}
1511-\setfont\titlesl\slbshape{10}{\magstep4}
1512-\setfont\titlett\ttbshape{12}{\magstep3}
1513-\setfont\titlettsl\ttslshape{10}{\magstep4}
1514-\setfont\titlesf\sfbshape{17}{\magstep1}
2036+\def\titlenominalsize{20pt}
2037+\setfont\titlerm\rmbshape{12}{\magstep3}{OT1}
2038+\setfont\titleit\itbshape{10}{\magstep4}{OT1IT}
2039+\setfont\titlesl\slbshape{10}{\magstep4}{OT1}
2040+\setfont\titlett\ttbshape{12}{\magstep3}{OT1TT}
2041+\setfont\titlettsl\ttslshape{10}{\magstep4}{OT1TT}
2042+\setfont\titlesf\sfbshape{17}{\magstep1}{OT1}
15152043 \let\titlebf=\titlerm
1516-\setfont\titlesc\scbshape{10}{\magstep4}
2044+\setfont\titlesc\scbshape{10}{\magstep4}{OT1}
15172045 \font\titlei=cmmi12 scaled \magstep3
15182046 \font\titlesy=cmsy10 scaled \magstep4
1519-\def\authorrm{\secrm}
1520-\def\authortt{\sectt}
2047+\def\titleecsize{2074}
15212048
15222049 % Chapter (and unnumbered) fonts (17.28pt).
1523-\setfont\chaprm\rmbshape{12}{\magstep2}
1524-\setfont\chapit\itbshape{10}{\magstep3}
1525-\setfont\chapsl\slbshape{10}{\magstep3}
1526-\setfont\chaptt\ttbshape{12}{\magstep2}
1527-\setfont\chapttsl\ttslshape{10}{\magstep3}
1528-\setfont\chapsf\sfbshape{17}{1000}
2050+\def\chapnominalsize{17pt}
2051+\setfont\chaprm\rmbshape{12}{\magstep2}{OT1}
2052+\setfont\chapit\itbshape{10}{\magstep3}{OT1IT}
2053+\setfont\chapsl\slbshape{10}{\magstep3}{OT1}
2054+\setfont\chaptt\ttbshape{12}{\magstep2}{OT1TT}
2055+\setfont\chapttsl\ttslshape{10}{\magstep3}{OT1TT}
2056+\setfont\chapsf\sfbshape{17}{1000}{OT1}
15292057 \let\chapbf=\chaprm
1530-\setfont\chapsc\scbshape{10}{\magstep3}
2058+\setfont\chapsc\scbshape{10}{\magstep3}{OT1}
15312059 \font\chapi=cmmi12 scaled \magstep2
15322060 \font\chapsy=cmsy10 scaled \magstep3
2061+\def\chapecsize{1728}
15332062
15342063 % Section fonts (14.4pt).
1535-\setfont\secrm\rmbshape{12}{\magstep1}
1536-\setfont\secit\itbshape{10}{\magstep2}
1537-\setfont\secsl\slbshape{10}{\magstep2}
1538-\setfont\sectt\ttbshape{12}{\magstep1}
1539-\setfont\secttsl\ttslshape{10}{\magstep2}
1540-\setfont\secsf\sfbshape{12}{\magstep1}
2064+\def\secnominalsize{14pt}
2065+\setfont\secrm\rmbshape{12}{\magstep1}{OT1}
2066+\setfont\secit\itbshape{10}{\magstep2}{OT1IT}
2067+\setfont\secsl\slbshape{10}{\magstep2}{OT1}
2068+\setfont\sectt\ttbshape{12}{\magstep1}{OT1TT}
2069+\setfont\secttsl\ttslshape{10}{\magstep2}{OT1TT}
2070+\setfont\secsf\sfbshape{12}{\magstep1}{OT1}
15412071 \let\secbf\secrm
1542-\setfont\secsc\scbshape{10}{\magstep2}
2072+\setfont\secsc\scbshape{10}{\magstep2}{OT1}
15432073 \font\seci=cmmi12 scaled \magstep1
15442074 \font\secsy=cmsy10 scaled \magstep2
2075+\def\sececsize{1440}
15452076
15462077 % Subsection fonts (13.15pt).
1547-\setfont\ssecrm\rmbshape{12}{\magstephalf}
1548-\setfont\ssecit\itbshape{10}{1315}
1549-\setfont\ssecsl\slbshape{10}{1315}
1550-\setfont\ssectt\ttbshape{12}{\magstephalf}
1551-\setfont\ssecttsl\ttslshape{10}{1315}
1552-\setfont\ssecsf\sfbshape{12}{\magstephalf}
2078+\def\ssecnominalsize{13pt}
2079+\setfont\ssecrm\rmbshape{12}{\magstephalf}{OT1}
2080+\setfont\ssecit\itbshape{10}{1315}{OT1IT}
2081+\setfont\ssecsl\slbshape{10}{1315}{OT1}
2082+\setfont\ssectt\ttbshape{12}{\magstephalf}{OT1TT}
2083+\setfont\ssecttsl\ttslshape{10}{1315}{OT1TT}
2084+\setfont\ssecsf\sfbshape{12}{\magstephalf}{OT1}
15532085 \let\ssecbf\ssecrm
1554-\setfont\ssecsc\scbshape{10}{1315}
2086+\setfont\ssecsc\scbshape{10}{1315}{OT1}
15552087 \font\sseci=cmmi12 scaled \magstephalf
15562088 \font\ssecsy=cmsy10 scaled 1315
2089+\def\ssececsize{1200}
15572090
15582091 % Reduced fonts for @acro in text (10pt).
1559-\setfont\reducedrm\rmshape{10}{1000}
1560-\setfont\reducedtt\ttshape{10}{1000}
1561-\setfont\reducedbf\bfshape{10}{1000}
1562-\setfont\reducedit\itshape{10}{1000}
1563-\setfont\reducedsl\slshape{10}{1000}
1564-\setfont\reducedsf\sfshape{10}{1000}
1565-\setfont\reducedsc\scshape{10}{1000}
1566-\setfont\reducedttsl\ttslshape{10}{1000}
2092+\def\reducednominalsize{10pt}
2093+\setfont\reducedrm\rmshape{10}{1000}{OT1}
2094+\setfont\reducedtt\ttshape{10}{1000}{OT1TT}
2095+\setfont\reducedbf\bfshape{10}{1000}{OT1}
2096+\setfont\reducedit\itshape{10}{1000}{OT1IT}
2097+\setfont\reducedsl\slshape{10}{1000}{OT1}
2098+\setfont\reducedsf\sfshape{10}{1000}{OT1}
2099+\setfont\reducedsc\scshape{10}{1000}{OT1}
2100+\setfont\reducedttsl\ttslshape{10}{1000}{OT1TT}
15672101 \font\reducedi=cmmi10
15682102 \font\reducedsy=cmsy10
2103+\def\reducedecsize{1000}
2104+
2105+% reset the current fonts
2106+\textfonts
2107+\rm
2108+} % end of 11pt text font size definitions
2109+
2110+
2111+% Definitions to make the main text be 10pt Computer Modern, with
2112+% section, chapter, etc., sizes following suit. This is for the GNU
2113+% Press printing of the Emacs 22 manual. Maybe other manuals in the
2114+% future. Used with @smallbook, which sets the leading to 12pt.
2115+%
2116+\def\definetextfontsizex{%
2117+% Text fonts (10pt).
2118+\def\textnominalsize{10pt}
2119+\edef\mainmagstep{1000}
2120+\setfont\textrm\rmshape{10}{\mainmagstep}{OT1}
2121+\setfont\texttt\ttshape{10}{\mainmagstep}{OT1TT}
2122+\setfont\textbf\bfshape{10}{\mainmagstep}{OT1}
2123+\setfont\textit\itshape{10}{\mainmagstep}{OT1IT}
2124+\setfont\textsl\slshape{10}{\mainmagstep}{OT1}
2125+\setfont\textsf\sfshape{10}{\mainmagstep}{OT1}
2126+\setfont\textsc\scshape{10}{\mainmagstep}{OT1}
2127+\setfont\textttsl\ttslshape{10}{\mainmagstep}{OT1TT}
2128+\font\texti=cmmi10 scaled \mainmagstep
2129+\font\textsy=cmsy10 scaled \mainmagstep
2130+\def\textecsize{1000}
2131+
2132+% A few fonts for @defun names and args.
2133+\setfont\defbf\bfshape{10}{\magstephalf}{OT1}
2134+\setfont\deftt\ttshape{10}{\magstephalf}{OT1TT}
2135+\setfont\defttsl\ttslshape{10}{\magstephalf}{OT1TT}
2136+\def\df{\let\tentt=\deftt \let\tenbf = \defbf \let\tenttsl=\defttsl \bf}
2137+
2138+% Fonts for indices, footnotes, small examples (9pt).
2139+\def\smallnominalsize{9pt}
2140+\setfont\smallrm\rmshape{9}{1000}{OT1}
2141+\setfont\smalltt\ttshape{9}{1000}{OT1TT}
2142+\setfont\smallbf\bfshape{10}{900}{OT1}
2143+\setfont\smallit\itshape{9}{1000}{OT1IT}
2144+\setfont\smallsl\slshape{9}{1000}{OT1}
2145+\setfont\smallsf\sfshape{9}{1000}{OT1}
2146+\setfont\smallsc\scshape{10}{900}{OT1}
2147+\setfont\smallttsl\ttslshape{10}{900}{OT1TT}
2148+\font\smalli=cmmi9
2149+\font\smallsy=cmsy9
2150+\def\smallecsize{0900}
2151+
2152+% Fonts for small examples (8pt).
2153+\def\smallernominalsize{8pt}
2154+\setfont\smallerrm\rmshape{8}{1000}{OT1}
2155+\setfont\smallertt\ttshape{8}{1000}{OT1TT}
2156+\setfont\smallerbf\bfshape{10}{800}{OT1}
2157+\setfont\smallerit\itshape{8}{1000}{OT1IT}
2158+\setfont\smallersl\slshape{8}{1000}{OT1}
2159+\setfont\smallersf\sfshape{8}{1000}{OT1}
2160+\setfont\smallersc\scshape{10}{800}{OT1}
2161+\setfont\smallerttsl\ttslshape{10}{800}{OT1TT}
2162+\font\smalleri=cmmi8
2163+\font\smallersy=cmsy8
2164+\def\smallerecsize{0800}
2165+
2166+% Fonts for title page (20.4pt):
2167+\def\titlenominalsize{20pt}
2168+\setfont\titlerm\rmbshape{12}{\magstep3}{OT1}
2169+\setfont\titleit\itbshape{10}{\magstep4}{OT1IT}
2170+\setfont\titlesl\slbshape{10}{\magstep4}{OT1}
2171+\setfont\titlett\ttbshape{12}{\magstep3}{OT1TT}
2172+\setfont\titlettsl\ttslshape{10}{\magstep4}{OT1TT}
2173+\setfont\titlesf\sfbshape{17}{\magstep1}{OT1}
2174+\let\titlebf=\titlerm
2175+\setfont\titlesc\scbshape{10}{\magstep4}{OT1}
2176+\font\titlei=cmmi12 scaled \magstep3
2177+\font\titlesy=cmsy10 scaled \magstep4
2178+\def\titleecsize{2074}
2179+
2180+% Chapter fonts (14.4pt).
2181+\def\chapnominalsize{14pt}
2182+\setfont\chaprm\rmbshape{12}{\magstep1}{OT1}
2183+\setfont\chapit\itbshape{10}{\magstep2}{OT1IT}
2184+\setfont\chapsl\slbshape{10}{\magstep2}{OT1}
2185+\setfont\chaptt\ttbshape{12}{\magstep1}{OT1TT}
2186+\setfont\chapttsl\ttslshape{10}{\magstep2}{OT1TT}
2187+\setfont\chapsf\sfbshape{12}{\magstep1}{OT1}
2188+\let\chapbf\chaprm
2189+\setfont\chapsc\scbshape{10}{\magstep2}{OT1}
2190+\font\chapi=cmmi12 scaled \magstep1
2191+\font\chapsy=cmsy10 scaled \magstep2
2192+\def\chapecsize{1440}
2193+
2194+% Section fonts (12pt).
2195+\def\secnominalsize{12pt}
2196+\setfont\secrm\rmbshape{12}{1000}{OT1}
2197+\setfont\secit\itbshape{10}{\magstep1}{OT1IT}
2198+\setfont\secsl\slbshape{10}{\magstep1}{OT1}
2199+\setfont\sectt\ttbshape{12}{1000}{OT1TT}
2200+\setfont\secttsl\ttslshape{10}{\magstep1}{OT1TT}
2201+\setfont\secsf\sfbshape{12}{1000}{OT1}
2202+\let\secbf\secrm
2203+\setfont\secsc\scbshape{10}{\magstep1}{OT1}
2204+\font\seci=cmmi12
2205+\font\secsy=cmsy10 scaled \magstep1
2206+\def\sececsize{1200}
2207+
2208+% Subsection fonts (10pt).
2209+\def\ssecnominalsize{10pt}
2210+\setfont\ssecrm\rmbshape{10}{1000}{OT1}
2211+\setfont\ssecit\itbshape{10}{1000}{OT1IT}
2212+\setfont\ssecsl\slbshape{10}{1000}{OT1}
2213+\setfont\ssectt\ttbshape{10}{1000}{OT1TT}
2214+\setfont\ssecttsl\ttslshape{10}{1000}{OT1TT}
2215+\setfont\ssecsf\sfbshape{10}{1000}{OT1}
2216+\let\ssecbf\ssecrm
2217+\setfont\ssecsc\scbshape{10}{1000}{OT1}
2218+\font\sseci=cmmi10
2219+\font\ssecsy=cmsy10
2220+\def\ssececsize{1000}
2221+
2222+% Reduced fonts for @acro in text (9pt).
2223+\def\reducednominalsize{9pt}
2224+\setfont\reducedrm\rmshape{9}{1000}{OT1}
2225+\setfont\reducedtt\ttshape{9}{1000}{OT1TT}
2226+\setfont\reducedbf\bfshape{10}{900}{OT1}
2227+\setfont\reducedit\itshape{9}{1000}{OT1IT}
2228+\setfont\reducedsl\slshape{9}{1000}{OT1}
2229+\setfont\reducedsf\sfshape{9}{1000}{OT1}
2230+\setfont\reducedsc\scshape{10}{900}{OT1}
2231+\setfont\reducedttsl\ttslshape{10}{900}{OT1TT}
2232+\font\reducedi=cmmi9
2233+\font\reducedsy=cmsy9
2234+\def\reducedecsize{0900}
2235+
2236+% reduce space between paragraphs
2237+\divide\parskip by 2
2238+
2239+% reset the current fonts
2240+\textfonts
2241+\rm
2242+} % end of 10pt text font size definitions
2243+
2244+
2245+% We provide the user-level command
2246+% @fonttextsize 10
2247+% (or 11) to redefine the text font size. pt is assumed.
2248+%
2249+\def\xword{10}
2250+\def\xiword{11}
2251+%
2252+\parseargdef\fonttextsize{%
2253+ \def\textsizearg{#1}%
2254+ \wlog{doing @fonttextsize \textsizearg}%
2255+ %
2256+ % Set \globaldefs so that documents can use this inside @tex, since
2257+ % makeinfo 4.8 does not support it, but we need it nonetheless.
2258+ %
2259+ \begingroup \globaldefs=1
2260+ \ifx\textsizearg\xword \definetextfontsizex
2261+ \else \ifx\textsizearg\xiword \definetextfontsizexi
2262+ \else
2263+ \errhelp=\EMsimple
2264+ \errmessage{@fonttextsize only supports `10' or `11', not `\textsizearg'}
2265+ \fi\fi
2266+ \endgroup
2267+}
2268+
15692269
15702270 % In order for the font changes to affect most math symbols and letters,
15712271 % we have to define the \textfont of the standard families. Since
@@ -1583,18 +2283,19 @@ where each line of input produces a line of output.}
15832283 % of just \STYLE. We do this because \STYLE needs to also set the
15842284 % current \fam for math mode. Our \STYLE (e.g., \rm) commands hardwire
15852285 % \tenSTYLE to set the current font.
1586-%
2286+%
15872287 % Each font-changing command also sets the names \lsize (one size lower)
15882288 % and \lllsize (three sizes lower). These relative commands are used in
15892289 % the LaTeX logo and acronyms.
1590-%
2290+%
15912291 % This all needs generalizing, badly.
1592-%
2292+%
15932293 \def\textfonts{%
15942294 \let\tenrm=\textrm \let\tenit=\textit \let\tensl=\textsl
15952295 \let\tenbf=\textbf \let\tentt=\texttt \let\smallcaps=\textsc
15962296 \let\tensf=\textsf \let\teni=\texti \let\tensy=\textsy
15972297 \let\tenttsl=\textttsl
2298+ \def\curfontsize{text}%
15982299 \def\lsize{reduced}\def\lllsize{smaller}%
15992300 \resetmathfonts \setleading{\textleading}}
16002301 \def\titlefonts{%
@@ -1602,13 +2303,16 @@ where each line of input produces a line of output.}
16022303 \let\tenbf=\titlebf \let\tentt=\titlett \let\smallcaps=\titlesc
16032304 \let\tensf=\titlesf \let\teni=\titlei \let\tensy=\titlesy
16042305 \let\tenttsl=\titlettsl
2306+ \def\curfontsize{title}%
16052307 \def\lsize{chap}\def\lllsize{subsec}%
16062308 \resetmathfonts \setleading{25pt}}
1607-\def\titlefont#1{{\titlefonts\rm #1}}
2309+\def\titlefont#1{{\titlefonts\rmisbold #1}}
16082310 \def\chapfonts{%
16092311 \let\tenrm=\chaprm \let\tenit=\chapit \let\tensl=\chapsl
16102312 \let\tenbf=\chapbf \let\tentt=\chaptt \let\smallcaps=\chapsc
1611- \let\tensf=\chapsf \let\teni=\chapi \let\tensy=\chapsy \let\tenttsl=\chapttsl
2313+ \let\tensf=\chapsf \let\teni=\chapi \let\tensy=\chapsy
2314+ \let\tenttsl=\chapttsl
2315+ \def\curfontsize{chap}%
16122316 \def\lsize{sec}\def\lllsize{text}%
16132317 \resetmathfonts \setleading{19pt}}
16142318 \def\secfonts{%
@@ -1616,6 +2320,7 @@ where each line of input produces a line of output.}
16162320 \let\tenbf=\secbf \let\tentt=\sectt \let\smallcaps=\secsc
16172321 \let\tensf=\secsf \let\teni=\seci \let\tensy=\secsy
16182322 \let\tenttsl=\secttsl
2323+ \def\curfontsize{sec}%
16192324 \def\lsize{subsec}\def\lllsize{reduced}%
16202325 \resetmathfonts \setleading{16pt}}
16212326 \def\subsecfonts{%
@@ -1623,6 +2328,7 @@ where each line of input produces a line of output.}
16232328 \let\tenbf=\ssecbf \let\tentt=\ssectt \let\smallcaps=\ssecsc
16242329 \let\tensf=\ssecsf \let\teni=\sseci \let\tensy=\ssecsy
16252330 \let\tenttsl=\ssecttsl
2331+ \def\curfontsize{ssec}%
16262332 \def\lsize{text}\def\lllsize{small}%
16272333 \resetmathfonts \setleading{15pt}}
16282334 \let\subsubsecfonts = \subsecfonts
@@ -1631,6 +2337,7 @@ where each line of input produces a line of output.}
16312337 \let\tenbf=\reducedbf \let\tentt=\reducedtt \let\reducedcaps=\reducedsc
16322338 \let\tensf=\reducedsf \let\teni=\reducedi \let\tensy=\reducedsy
16332339 \let\tenttsl=\reducedttsl
2340+ \def\curfontsize{reduced}%
16342341 \def\lsize{small}\def\lllsize{smaller}%
16352342 \resetmathfonts \setleading{10.5pt}}
16362343 \def\smallfonts{%
@@ -1638,6 +2345,7 @@ where each line of input produces a line of output.}
16382345 \let\tenbf=\smallbf \let\tentt=\smalltt \let\smallcaps=\smallsc
16392346 \let\tensf=\smallsf \let\teni=\smalli \let\tensy=\smallsy
16402347 \let\tenttsl=\smallttsl
2348+ \def\curfontsize{small}%
16412349 \def\lsize{smaller}\def\lllsize{smaller}%
16422350 \resetmathfonts \setleading{10.5pt}}
16432351 \def\smallerfonts{%
@@ -1645,9 +2353,20 @@ where each line of input produces a line of output.}
16452353 \let\tenbf=\smallerbf \let\tentt=\smallertt \let\smallcaps=\smallersc
16462354 \let\tensf=\smallersf \let\teni=\smalleri \let\tensy=\smallersy
16472355 \let\tenttsl=\smallerttsl
2356+ \def\curfontsize{smaller}%
16482357 \def\lsize{smaller}\def\lllsize{smaller}%
16492358 \resetmathfonts \setleading{9.5pt}}
16502359
2360+% Fonts for short table of contents.
2361+\setfont\shortcontrm\rmshape{12}{1000}{OT1}
2362+\setfont\shortcontbf\bfshape{10}{\magstep1}{OT1} % no cmb12
2363+\setfont\shortcontsl\slshape{12}{1000}{OT1}
2364+\setfont\shortconttt\ttshape{12}{1000}{OT1TT}
2365+
2366+% Define these just so they can be easily changed for other fonts.
2367+\def\angleleft{$\langle$}
2368+\def\angleright{$\rangle$}
2369+
16512370 % Set the fonts to use with the @small... environments.
16522371 \let\smallexamplefonts = \smallfonts
16532372
@@ -1661,28 +2380,128 @@ where each line of input produces a line of output.}
16612380 %
16622381 % By the way, for comparison, here's what fits with @example (10pt):
16632382 % 8.5x11=71 smallbook=60 a4=75 a5=58
1664-%
1665-% I wish the USA used A4 paper.
16662383 % --karl, 24jan03.
16672384
1668-
16692385 % Set up the default fonts, so we can use them for creating boxes.
16702386 %
1671-\textfonts \rm
2387+\definetextfontsizexi
16722388
1673-% Define these so they can be easily changed for other fonts.
1674-\def\angleleft{$\langle$}
1675-\def\angleright{$\rangle$}
2389+
2390+\message{markup,}
2391+
2392+% Check if we are currently using a typewriter font. Since all the
2393+% Computer Modern typewriter fonts have zero interword stretch (and
2394+% shrink), and it is reasonable to expect all typewriter fonts to have
2395+% this property, we can check that font parameter.
2396+%
2397+\def\ifmonospace{\ifdim\fontdimen3\font=0pt }
2398+
2399+% Markup style infrastructure. \defmarkupstylesetup\INITMACRO will
2400+% define and register \INITMACRO to be called on markup style changes.
2401+% \INITMACRO can check \currentmarkupstyle for the innermost
2402+% style and the set of \ifmarkupSTYLE switches for all styles
2403+% currently in effect.
2404+\newif\ifmarkupvar
2405+\newif\ifmarkupsamp
2406+\newif\ifmarkupkey
2407+%\newif\ifmarkupfile % @file == @samp.
2408+%\newif\ifmarkupoption % @option == @samp.
2409+\newif\ifmarkupcode
2410+\newif\ifmarkupkbd
2411+%\newif\ifmarkupenv % @env == @code.
2412+%\newif\ifmarkupcommand % @command == @code.
2413+\newif\ifmarkuptex % @tex (and part of @math, for now).
2414+\newif\ifmarkupexample
2415+\newif\ifmarkupverb
2416+\newif\ifmarkupverbatim
2417+
2418+\let\currentmarkupstyle\empty
2419+
2420+\def\setupmarkupstyle#1{%
2421+ \csname markup#1true\endcsname
2422+ \def\currentmarkupstyle{#1}%
2423+ \markupstylesetup
2424+}
2425+
2426+\let\markupstylesetup\empty
2427+
2428+\def\defmarkupstylesetup#1{%
2429+ \expandafter\def\expandafter\markupstylesetup
2430+ \expandafter{\markupstylesetup #1}%
2431+ \def#1%
2432+}
2433+
2434+% Markup style setup for left and right quotes.
2435+\defmarkupstylesetup\markupsetuplq{%
2436+ \expandafter\let\expandafter \temp \csname markupsetuplq\currentmarkupstyle\endcsname
2437+ \ifx\temp\relax \markupsetuplqdefault \else \temp \fi
2438+}
2439+
2440+\defmarkupstylesetup\markupsetuprq{%
2441+ \expandafter\let\expandafter \temp \csname markupsetuprq\currentmarkupstyle\endcsname
2442+ \ifx\temp\relax \markupsetuprqdefault \else \temp \fi
2443+}
2444+
2445+{
2446+\catcode`\'=\active
2447+\catcode`\`=\active
2448+
2449+\gdef\markupsetuplqdefault{\let`\lq}
2450+\gdef\markupsetuprqdefault{\let'\rq}
2451+
2452+\gdef\markupsetcodequoteleft{\let`\codequoteleft}
2453+\gdef\markupsetcodequoteright{\let'\codequoteright}
2454+
2455+\gdef\markupsetnoligaturesquoteleft{\let`\noligaturesquoteleft}
2456+}
2457+
2458+\let\markupsetuplqcode \markupsetcodequoteleft
2459+\let\markupsetuprqcode \markupsetcodequoteright
2460+\let\markupsetuplqexample \markupsetcodequoteleft
2461+\let\markupsetuprqexample \markupsetcodequoteright
2462+\let\markupsetuplqverb \markupsetcodequoteleft
2463+\let\markupsetuprqverb \markupsetcodequoteright
2464+\let\markupsetuplqverbatim \markupsetcodequoteleft
2465+\let\markupsetuprqverbatim \markupsetcodequoteright
2466+
2467+\let\markupsetuplqsamp \markupsetnoligaturesquoteleft
2468+\let\markupsetuplqkbd \markupsetnoligaturesquoteleft
2469+
2470+% Allow an option to not replace quotes with a regular directed right
2471+% quote/apostrophe (char 0x27), but instead use the undirected quote
2472+% from cmtt (char 0x0d). The undirected quote is ugly, so don't make it
2473+% the default, but it works for pasting with more pdf viewers (at least
2474+% evince), the lilypond developers report. xpdf does work with the
2475+% regular 0x27.
2476+%
2477+\def\codequoteright{%
2478+ \expandafter\ifx\csname SETtxicodequoteundirected\endcsname\relax
2479+ \expandafter\ifx\csname SETcodequoteundirected\endcsname\relax
2480+ '%
2481+ \else \char'15 \fi
2482+ \else \char'15 \fi
2483+}
2484+%
2485+% and a similar option for the left quote char vs. a grave accent.
2486+% Modern fonts display ASCII 0x60 as a grave accent, so some people like
2487+% the code environments to do likewise.
2488+%
2489+\def\codequoteleft{%
2490+ \expandafter\ifx\csname SETtxicodequotebacktick\endcsname\relax
2491+ \expandafter\ifx\csname SETcodequotebacktick\endcsname\relax
2492+ % [Knuth] pp. 380,381,391
2493+ % \relax disables Spanish ligatures ?` and !` of \tt font.
2494+ \relax`%
2495+ \else \char'22 \fi
2496+ \else \char'22 \fi
2497+}
2498+
2499+% [Knuth] pp. 380,381,391, disable Spanish ligatures ?` and !` of \tt font.
2500+\def\noligaturesquoteleft{\relax\lq}
16762501
16772502 % Count depth in font-changes, for error checks
16782503 \newcount\fontdepth \fontdepth=0
16792504
1680-% Fonts for short table of contents.
1681-\setfont\shortcontrm\rmshape{12}{1000}
1682-\setfont\shortcontbf\bfshape{10}{\magstep1} % no cmb12
1683-\setfont\shortcontsl\slshape{12}{1000}
1684-\setfont\shortconttt\ttshape{12}{1000}
1685-
16862505 %% Add scribe-like font environments, plus @l for inline lisp (usually sans
16872506 %% serif) and @ii for TeX italic
16882507
@@ -1697,18 +2516,28 @@ where each line of input produces a line of output.}
16972516 % @var is set to this for defun arguments.
16982517 \def\ttslanted#1{{\ttsl #1}\futurelet\next\smartitalicx}
16992518
1700-% like \smartslanted except unconditionally use \sl. We never want
2519+% @cite is like \smartslanted except unconditionally use \sl. We never want
17012520 % ttsl for book titles, do we?
17022521 \def\cite#1{{\sl #1}\futurelet\next\smartitalicx}
17032522
17042523 \let\i=\smartitalic
1705-\let\var=\smartslanted
2524+\let\slanted=\smartslanted
2525+\def\var#1{{\setupmarkupstyle{var}\smartslanted{#1}}}
17062526 \let\dfn=\smartslanted
17072527 \let\emph=\smartitalic
17082528
2529+% Explicit font changes: @r, @sc, undocumented @ii.
2530+\def\r#1{{\rm #1}} % roman font
2531+\def\sc#1{{\smallcaps#1}} % smallcaps font
2532+\def\ii#1{{\it #1}} % italic font
2533+
2534+% @b, explicit bold. Also @strong.
17092535 \def\b#1{{\bf #1}}
17102536 \let\strong=\b
17112537
2538+% @sansserif, explicit sans.
2539+\def\sansserif#1{{\sf #1}}
2540+
17122541 % We can't just use \exhyphenpenalty, because that only has effect at
17132542 % the end of a paragraph. Restore normal hyphenation at the end of the
17142543 % group within which \nohyphenation is presumably called.
@@ -1721,27 +2550,48 @@ where each line of input produces a line of output.}
17212550 % sometimes \x has an active definition that messes things up.
17222551 %
17232552 \catcode`@=11
1724- \def\frenchspacing{%
2553+ \def\plainfrenchspacing{%
17252554 \sfcode\dotChar =\@m \sfcode\questChar=\@m \sfcode\exclamChar=\@m
17262555 \sfcode\colonChar=\@m \sfcode\semiChar =\@m \sfcode\commaChar =\@m
2556+ \def\endofsentencespacefactor{1000}% for @. and friends
2557+ }
2558+ \def\plainnonfrenchspacing{%
2559+ \sfcode`\.3000\sfcode`\?3000\sfcode`\!3000
2560+ \sfcode`\:2000\sfcode`\;1500\sfcode`\,1250
2561+ \def\endofsentencespacefactor{3000}% for @. and friends
17272562 }
17282563 \catcode`@=\other
2564+\def\endofsentencespacefactor{3000}% default
17292565
2566+% @t, explicit typewriter.
17302567 \def\t#1{%
1731- {\tt \rawbackslash \frenchspacing #1}%
2568+ {\tt \rawbackslash \plainfrenchspacing #1}%
17322569 \null
17332570 }
1734-\def\samp#1{`\tclose{#1}'\null}
1735-\setfont\keyrm\rmshape{8}{1000}
1736-\font\keysy=cmsy9
1737-\def\key#1{{\keyrm\textfont2=\keysy \leavevmode\hbox{%
1738- \raise0.4pt\hbox{\angleleft}\kern-.08em\vtop{%
1739- \vbox{\hrule\kern-0.4pt
1740- \hbox{\raise0.4pt\hbox{\vphantom{\angleleft}}#1}}%
1741- \kern-0.4pt\hrule}%
1742- \kern-.06em\raise0.4pt\hbox{\angleright}}}}
1743-% The old definition, with no lozenge:
1744-%\def\key #1{{\ttsl \nohyphenation \uppercase{#1}}\null}
2571+
2572+% @samp.
2573+\def\samp#1{{\setupmarkupstyle{samp}\lq\tclose{#1}\rq\null}}
2574+
2575+% definition of @key that produces a lozenge. Doesn't adjust to text size.
2576+%\setfont\keyrm\rmshape{8}{1000}{OT1}
2577+%\font\keysy=cmsy9
2578+%\def\key#1{{\keyrm\textfont2=\keysy \leavevmode\hbox{%
2579+% \raise0.4pt\hbox{\angleleft}\kern-.08em\vtop{%
2580+% \vbox{\hrule\kern-0.4pt
2581+% \hbox{\raise0.4pt\hbox{\vphantom{\angleleft}}#1}}%
2582+% \kern-0.4pt\hrule}%
2583+% \kern-.06em\raise0.4pt\hbox{\angleright}}}}
2584+
2585+% definition of @key with no lozenge. If the current font is already
2586+% monospace, don't change it; that way, we respect @kbdinputstyle. But
2587+% if it isn't monospace, then use \tt.
2588+%
2589+\def\key#1{{\setupmarkupstyle{key}%
2590+ \nohyphenation
2591+ \ifmonospace\else\tt\fi
2592+ #1}\null}
2593+
2594+% ctrl is no longer a Texinfo command.
17452595 \def\ctrl #1{{\tt \rawbackslash \hat}#1}
17462596
17472597 % @file, @option are the same as @samp.
@@ -1765,7 +2615,7 @@ where each line of input produces a line of output.}
17652615 \nohyphenation
17662616 %
17672617 \rawbackslash
1768- \frenchspacing
2618+ \plainfrenchspacing
17692619 #1%
17702620 }%
17712621 \null
@@ -1781,12 +2631,21 @@ where each line of input produces a line of output.}
17812631 % and arrange explicitly to hyphenate at a dash.
17822632 % -- rms.
17832633 {
1784- \catcode`\-=\active
1785- \catcode`\_=\active
2634+ \catcode`\-=\active \catcode`\_=\active
2635+ \catcode`\'=\active \catcode`\`=\active
2636+ \global\let'=\rq \global\let`=\lq % default definitions
17862637 %
17872638 \global\def\code{\begingroup
1788- \catcode`\-=\active \let-\codedash
1789- \catcode`\_=\active \let_\codeunder
2639+ \setupmarkupstyle{code}%
2640+ % The following should really be moved into \setupmarkupstyle handlers.
2641+ \catcode\dashChar=\active \catcode\underChar=\active
2642+ \ifallowcodebreaks
2643+ \let-\codedash
2644+ \let_\codeunder
2645+ \else
2646+ \let-\realdash
2647+ \let_\realunder
2648+ \fi
17902649 \codex
17912650 }
17922651 }
@@ -1806,43 +2665,73 @@ where each line of input produces a line of output.}
18062665 }
18072666 \def\codex #1{\tclose{#1}\endgroup}
18082667
2668+% An additional complication: the above will allow breaks after, e.g.,
2669+% each of the four underscores in __typeof__. This is undesirable in
2670+% some manuals, especially if they don't have long identifiers in
2671+% general. @allowcodebreaks provides a way to control this.
2672+%
2673+\newif\ifallowcodebreaks \allowcodebreakstrue
2674+
2675+\def\keywordtrue{true}
2676+\def\keywordfalse{false}
2677+
2678+\parseargdef\allowcodebreaks{%
2679+ \def\txiarg{#1}%
2680+ \ifx\txiarg\keywordtrue
2681+ \allowcodebreakstrue
2682+ \else\ifx\txiarg\keywordfalse
2683+ \allowcodebreaksfalse
2684+ \else
2685+ \errhelp = \EMsimple
2686+ \errmessage{Unknown @allowcodebreaks option `\txiarg'}%
2687+ \fi\fi
2688+}
2689+
18092690 % @kbd is like @code, except that if the argument is just one @key command,
18102691 % then @kbd has no effect.
2692+\def\kbd#1{{\setupmarkupstyle{kbd}\def\look{#1}\expandafter\kbdfoo\look??\par}}
18112693
18122694 % @kbdinputstyle -- arg is `distinct' (@kbd uses slanted tty font always),
18132695 % `example' (@kbd uses ttsl only inside of @example and friends),
18142696 % or `code' (@kbd uses normal tty font always).
18152697 \parseargdef\kbdinputstyle{%
1816- \def\arg{#1}%
1817- \ifx\arg\worddistinct
2698+ \def\txiarg{#1}%
2699+ \ifx\txiarg\worddistinct
18182700 \gdef\kbdexamplefont{\ttsl}\gdef\kbdfont{\ttsl}%
1819- \else\ifx\arg\wordexample
2701+ \else\ifx\txiarg\wordexample
18202702 \gdef\kbdexamplefont{\ttsl}\gdef\kbdfont{\tt}%
1821- \else\ifx\arg\wordcode
2703+ \else\ifx\txiarg\wordcode
18222704 \gdef\kbdexamplefont{\tt}\gdef\kbdfont{\tt}%
18232705 \else
18242706 \errhelp = \EMsimple
1825- \errmessage{Unknown @kbdinputstyle option `\arg'}%
2707+ \errmessage{Unknown @kbdinputstyle option `\txiarg'}%
18262708 \fi\fi\fi
18272709 }
18282710 \def\worddistinct{distinct}
18292711 \def\wordexample{example}
18302712 \def\wordcode{code}
18312713
1832-% Default is `distinct.'
2714+% Default is `distinct'.
18332715 \kbdinputstyle distinct
18342716
18352717 \def\xkey{\key}
18362718 \def\kbdfoo#1#2#3\par{\def\one{#1}\def\three{#3}\def\threex{??}%
18372719 \ifx\one\xkey\ifx\threex\three \key{#2}%
1838-\else{\tclose{\kbdfont\look}}\fi
1839-\else{\tclose{\kbdfont\look}}\fi}
2720+\else{\tclose{\kbdfont\setupmarkupstyle{kbd}\look}}\fi
2721+\else{\tclose{\kbdfont\setupmarkupstyle{kbd}\look}}\fi}
18402722
1841-% For @url, @env, @command quotes seem unnecessary, so use \code.
1842-\let\url=\code
2723+% For @indicateurl, @env, @command quotes seem unnecessary, so use \code.
2724+\let\indicateurl=\code
18432725 \let\env=\code
18442726 \let\command=\code
18452727
2728+% @clicksequence{File @click{} Open ...}
2729+\def\clicksequence#1{\begingroup #1\endgroup}
2730+
2731+% @clickstyle @arrow (by default)
2732+\parseargdef\clickstyle{\def\click{#1}}
2733+\def\click{\arrow}
2734+
18462735 % @uref (abbreviation for `urlref') takes an optional (comma-separated)
18472736 % second argument specifying the text to display and an optional third
18482737 % arg as text to display instead of (rather than in addition to) the url
@@ -1871,6 +2760,10 @@ where each line of input produces a line of output.}
18712760 \endlink
18722761 \endgroup}
18732762
2763+% @url synonym for @uref, since that's how everyone uses it.
2764+%
2765+\let\url=\uref
2766+
18742767 % rms does not like angle brackets --karl, 17may97.
18752768 % So now @email is just like @uref, unless we are pdf.
18762769 %
@@ -1888,30 +2781,20 @@ where each line of input produces a line of output.}
18882781 \let\email=\uref
18892782 \fi
18902783
1891-% Check if we are currently using a typewriter font. Since all the
1892-% Computer Modern typewriter fonts have zero interword stretch (and
1893-% shrink), and it is reasonable to expect all typewriter fonts to have
1894-% this property, we can check that font parameter.
1895-%
1896-\def\ifmonospace{\ifdim\fontdimen3\font=0pt }
1897-
18982784 % Typeset a dimension, e.g., `in' or `pt'. The only reason for the
18992785 % argument is to make the input look right: @dmn{pt} instead of @dmn{}pt.
19002786 %
19012787 \def\dmn#1{\thinspace #1}
19022788
1903-\def\kbd#1{\def\look{#1}\expandafter\kbdfoo\look??\par}
1904-
19052789 % @l was never documented to mean ``switch to the Lisp font'',
19062790 % and it is not used as such in any manual I can find. We need it for
19072791 % Polish suppressed-l. --karl, 22sep96.
19082792 %\def\l#1{{\li #1}\null}
19092793
1910-% Explicit font changes: @r, @sc, undocumented @ii.
1911-\def\r#1{{\rm #1}} % roman font
1912-\def\sc#1{{\smallcaps#1}} % smallcaps font
1913-\def\ii#1{{\it #1}} % italic font
1914-
2794+% @acronym for "FBI", "NATO", and the like.
2795+% We print this one point size smaller, since it's intended for
2796+% all-uppercase.
2797+%
19152798 \def\acronym#1{\doacronym #1,,\finish}
19162799 \def\doacronym#1,#2,#3\finish{%
19172800 {\selectfonts\lsize #1}%
@@ -1921,10 +2804,172 @@ where each line of input produces a line of output.}
19212804 \fi
19222805 }
19232806
1924-% @pounds{} is a sterling sign, which is in the CM italic font.
1925-%
2807+% @abbr for "Comput. J." and the like.
2808+% No font change, but don't do end-of-sentence spacing.
2809+%
2810+\def\abbr#1{\doabbr #1,,\finish}
2811+\def\doabbr#1,#2,#3\finish{%
2812+ {\plainfrenchspacing #1}%
2813+ \def\temp{#2}%
2814+ \ifx\temp\empty \else
2815+ \space ({\unsepspaces \ignorespaces \temp \unskip})%
2816+ \fi
2817+}
2818+
2819+
2820+\message{glyphs,}
2821+
2822+% @point{}, @result{}, @expansion{}, @print{}, @equiv{}.
2823+%
2824+% Since these characters are used in examples, they should be an even number of
2825+% \tt widths. Each \tt character is 1en, so two makes it 1em.
2826+%
2827+\def\point{$\star$}
2828+\def\arrow{\leavevmode\raise.05ex\hbox to 1em{\hfil$\rightarrow$\hfil}}
2829+\def\result{\leavevmode\raise.05ex\hbox to 1em{\hfil$\Rightarrow$\hfil}}
2830+\def\expansion{\leavevmode\hbox to 1em{\hfil$\mapsto$\hfil}}
2831+\def\print{\leavevmode\lower.1ex\hbox to 1em{\hfil$\dashv$\hfil}}
2832+\def\equiv{\leavevmode\hbox to 1em{\hfil$\ptexequiv$\hfil}}
2833+
2834+% The @error{} command.
2835+% Adapted from the TeXbook's \boxit.
2836+%
2837+\newbox\errorbox
2838+%
2839+{\tentt \global\dimen0 = 3em}% Width of the box.
2840+\dimen2 = .55pt % Thickness of rules
2841+% The text. (`r' is open on the right, `e' somewhat less so on the left.)
2842+\setbox0 = \hbox{\kern-.75pt \reducedsf error\kern-1.5pt}
2843+%
2844+\setbox\errorbox=\hbox to \dimen0{\hfil
2845+ \hsize = \dimen0 \advance\hsize by -5.8pt % Space to left+right.
2846+ \advance\hsize by -2\dimen2 % Rules.
2847+ \vbox{%
2848+ \hrule height\dimen2
2849+ \hbox{\vrule width\dimen2 \kern3pt % Space to left of text.
2850+ \vtop{\kern2.4pt \box0 \kern2.4pt}% Space above/below.
2851+ \kern3pt\vrule width\dimen2}% Space to right.
2852+ \hrule height\dimen2}
2853+ \hfil}
2854+%
2855+\def\error{\leavevmode\lower.7ex\copy\errorbox}
2856+
2857+% @pounds{} is a sterling sign, which Knuth put in the CM italic font.
2858+%
19262859 \def\pounds{{\it\$}}
19272860
2861+% @euro{} comes from a separate font, depending on the current style.
2862+% We use the free feym* fonts from the eurosym package by Henrik
2863+% Theiling, which support regular, slanted, bold and bold slanted (and
2864+% "outlined" (blackboard board, sort of) versions, which we don't need).
2865+% It is available from http://www.ctan.org/tex-archive/fonts/eurosym.
2866+%
2867+% Although only regular is the truly official Euro symbol, we ignore
2868+% that. The Euro is designed to be slightly taller than the regular
2869+% font height.
2870+%
2871+% feymr - regular
2872+% feymo - slanted
2873+% feybr - bold
2874+% feybo - bold slanted
2875+%
2876+% There is no good (free) typewriter version, to my knowledge.
2877+% A feymr10 euro is ~7.3pt wide, while a normal cmtt10 char is ~5.25pt wide.
2878+% Hmm.
2879+%
2880+% Also doesn't work in math. Do we need to do math with euro symbols?
2881+% Hope not.
2882+%
2883+%
2884+\def\euro{{\eurofont e}}
2885+\def\eurofont{%
2886+ % We set the font at each command, rather than predefining it in
2887+ % \textfonts and the other font-switching commands, so that
2888+ % installations which never need the symbol don't have to have the
2889+ % font installed.
2890+ %
2891+ % There is only one designed size (nominal 10pt), so we always scale
2892+ % that to the current nominal size.
2893+ %
2894+ % By the way, simply using "at 1em" works for cmr10 and the like, but
2895+ % does not work for cmbx10 and other extended/shrunken fonts.
2896+ %
2897+ \def\eurosize{\csname\curfontsize nominalsize\endcsname}%
2898+ %
2899+ \ifx\curfontstyle\bfstylename
2900+ % bold:
2901+ \font\thiseurofont = \ifusingit{feybo10}{feybr10} at \eurosize
2902+ \else
2903+ % regular:
2904+ \font\thiseurofont = \ifusingit{feymo10}{feymr10} at \eurosize
2905+ \fi
2906+ \thiseurofont
2907+}
2908+
2909+% Glyphs from the EC fonts. We don't use \let for the aliases, because
2910+% sometimes we redefine the original macro, and the alias should reflect
2911+% the redefinition.
2912+%
2913+% Use LaTeX names for the Icelandic letters.
2914+\def\DH{{\ecfont \char"D0}} % Eth
2915+\def\dh{{\ecfont \char"F0}} % eth
2916+\def\TH{{\ecfont \char"DE}} % Thorn
2917+\def\th{{\ecfont \char"FE}} % thorn
2918+%
2919+\def\guillemetleft{{\ecfont \char"13}}
2920+\def\guillemotleft{\guillemetleft}
2921+\def\guillemetright{{\ecfont \char"14}}
2922+\def\guillemotright{\guillemetright}
2923+\def\guilsinglleft{{\ecfont \char"0E}}
2924+\def\guilsinglright{{\ecfont \char"0F}}
2925+\def\quotedblbase{{\ecfont \char"12}}
2926+\def\quotesinglbase{{\ecfont \char"0D}}
2927+%
2928+% This positioning is not perfect (see the ogonek LaTeX package), but
2929+% we have the precomposed glyphs for the most common cases. We put the
2930+% tests to use those glyphs in the single \ogonek macro so we have fewer
2931+% dummy definitions to worry about for index entries, etc.
2932+%
2933+% ogonek is also used with other letters in Lithuanian (IOU), but using
2934+% the precomposed glyphs for those is not so easy since they aren't in
2935+% the same EC font.
2936+\def\ogonek#1{{%
2937+ \def\temp{#1}%
2938+ \ifx\temp\macrocharA\Aogonek
2939+ \else\ifx\temp\macrochara\aogonek
2940+ \else\ifx\temp\macrocharE\Eogonek
2941+ \else\ifx\temp\macrochare\eogonek
2942+ \else
2943+ \ecfont \setbox0=\hbox{#1}%
2944+ \ifdim\ht0=1ex\accent"0C #1%
2945+ \else\ooalign{\unhbox0\crcr\hidewidth\char"0C \hidewidth}%
2946+ \fi
2947+ \fi\fi\fi\fi
2948+ }%
2949+}
2950+\def\Aogonek{{\ecfont \char"81}}\def\macrocharA{A}
2951+\def\aogonek{{\ecfont \char"A1}}\def\macrochara{a}
2952+\def\Eogonek{{\ecfont \char"86}}\def\macrocharE{E}
2953+\def\eogonek{{\ecfont \char"A6}}\def\macrochare{e}
2954+%
2955+% Use the ec* fonts (cm-super in outline format) for non-CM glyphs.
2956+\def\ecfont{%
2957+ % We can't distinguish serif/sans and italic/slanted, but this
2958+ % is used for crude hacks anyway (like adding French and German
2959+ % quotes to documents typeset with CM, where we lose kerning), so
2960+ % hopefully nobody will notice/care.
2961+ \edef\ecsize{\csname\curfontsize ecsize\endcsname}%
2962+ \edef\nominalsize{\csname\curfontsize nominalsize\endcsname}%
2963+ \ifx\curfontstyle\bfstylename
2964+ % bold:
2965+ \font\thisecfont = ecb\ifusingit{i}{x}\ecsize \space at \nominalsize
2966+ \else
2967+ % regular:
2968+ \font\thisecfont = ec\ifusingit{ti}{rm}\ecsize \space at \nominalsize
2969+ \fi
2970+ \thisecfont
2971+}
2972+
19282973 % @registeredsymbol - R in a circle. The font for the R should really
19292974 % be smaller yet, but lllsize is the best we can do for now.
19302975 % Adapted from the plain.tex definition of \copyright.
@@ -1935,6 +2980,24 @@ where each line of input produces a line of output.}
19352980 }$%
19362981 }
19372982
2983+% @textdegree - the normal degrees sign.
2984+%
2985+\def\textdegree{$^\circ$}
2986+
2987+% Laurent Siebenmann reports \Orb undefined with:
2988+% Textures 1.7.7 (preloaded format=plain 93.10.14) (68K) 16 APR 2004 02:38
2989+% so we'll define it if necessary.
2990+%
2991+\ifx\Orb\undefined
2992+\def\Orb{\mathhexbox20D}
2993+\fi
2994+
2995+% Quotes.
2996+\chardef\quotedblleft="5C
2997+\chardef\quotedblright=`\"
2998+\chardef\quoteleft=`\`
2999+\chardef\quoteright=`\'
3000+
19383001
19393002 \message{page headings,}
19403003
@@ -2019,12 +3082,9 @@ where each line of input produces a line of output.}
20193082 \let\subtitlerm=\tenrm
20203083 \def\subtitlefont{\subtitlerm \normalbaselineskip = 13pt \normalbaselines}
20213084
2022-\def\authorfont{\authorrm \normalbaselineskip = 16pt \normalbaselines
2023- \let\tt=\authortt}
2024-
20253085 \parseargdef\title{%
20263086 \checkenv\titlepage
2027- \leftline{\titlefonts\rm #1}
3087+ \leftline{\titlefonts\rmisbold #1}
20283088 % print a rule at the page bottom also.
20293089 \finishedtitlepagefalse
20303090 \vskip4pt \hrule height 4pt width \hsize \vskip4pt
@@ -2037,7 +3097,7 @@ where each line of input produces a line of output.}
20373097
20383098 % @author should come last, but may come many times.
20393099 % It can also be used inside @quotation.
2040-%
3100+%
20413101 \parseargdef\author{%
20423102 \def\temp{\quotation}%
20433103 \ifx\thisenv\temp
@@ -2045,7 +3105,7 @@ where each line of input produces a line of output.}
20453105 \else
20463106 \checkenv\titlepage
20473107 \ifseenauthor\else \vskip 0pt plus 1filll \seenauthortrue \fi
2048- {\authorfont \leftline{#1}}%
3108+ {\secfonts\rmisbold \leftline{#1}}%
20493109 \fi
20503110 }
20513111
@@ -2098,12 +3158,39 @@ where each line of input produces a line of output.}
20983158 %
20993159 % Leave some space for the footline. Hopefully ok to assume
21003160 % @evenfooting will not be used by itself.
2101- \global\advance\pageheight by -\baselineskip
2102- \global\advance\vsize by -\baselineskip
3161+ \global\advance\pageheight by -12pt
3162+ \global\advance\vsize by -12pt
21033163 }
21043164
21053165 \parseargdef\everyfooting{\oddfootingxxx{#1}\evenfootingxxx{#1}}
21063166
3167+% @evenheadingmarks top \thischapter <- chapter at the top of a page
3168+% @evenheadingmarks bottom \thischapter <- chapter at the bottom of a page
3169+%
3170+% The same set of arguments for:
3171+%
3172+% @oddheadingmarks
3173+% @evenfootingmarks
3174+% @oddfootingmarks
3175+% @everyheadingmarks
3176+% @everyfootingmarks
3177+
3178+\def\evenheadingmarks{\headingmarks{even}{heading}}
3179+\def\oddheadingmarks{\headingmarks{odd}{heading}}
3180+\def\evenfootingmarks{\headingmarks{even}{footing}}
3181+\def\oddfootingmarks{\headingmarks{odd}{footing}}
3182+\def\everyheadingmarks#1 {\headingmarks{even}{heading}{#1}
3183+ \headingmarks{odd}{heading}{#1} }
3184+\def\everyfootingmarks#1 {\headingmarks{even}{footing}{#1}
3185+ \headingmarks{odd}{footing}{#1} }
3186+% #1 = even/odd, #2 = heading/footing, #3 = top/bottom.
3187+\def\headingmarks#1#2#3 {%
3188+ \expandafter\let\expandafter\temp \csname get#3headingmarks\endcsname
3189+ \global\expandafter\let\csname get#1#2marks\endcsname \temp
3190+}
3191+
3192+\everyheadingmarks bottom
3193+\everyfootingmarks bottom
21073194
21083195 % @headings double turns headings on for double-sided printing.
21093196 % @headings single turns headings on for single-sided printing.
@@ -2240,17 +3327,13 @@ where each line of input produces a line of output.}
22403327 % \parskip glue -- logically it's part of the @item we just started.
22413328 \nobreak \vskip-\parskip
22423329 %
2243- % Stop a page break at the \parskip glue coming up. (Unfortunately
2244- % we can't prevent a possible page break at the following
2245- % \baselineskip glue.) However, if what follows is an environment
2246- % such as @example, there will be no \parskip glue; then
2247- % the negative vskip we just would cause the example and the item to
2248- % crash together. So we use this bizarre value of 10001 as a signal
2249- % to \aboveenvbreak to insert \parskip glue after all.
2250- % (Possibly there are other commands that could be followed by
2251- % @example which need the same treatment, but not section titles; or
2252- % maybe section titles are the only special case and they should be
2253- % penalty 10001...)
3330+ % Stop a page break at the \parskip glue coming up. However, if
3331+ % what follows is an environment such as @example, there will be no
3332+ % \parskip glue; then the negative vskip we just inserted would
3333+ % cause the example and the item to crash together. So we use this
3334+ % bizarre value of 10001 as a signal to \aboveenvbreak to insert
3335+ % \parskip glue after all. Section titles are handled this way also.
3336+ %
22543337 \penalty 10001
22553338 \endgroup
22563339 \itemxneedsnegativevskipfalse
@@ -2276,15 +3359,26 @@ where each line of input produces a line of output.}
22763359 % @table, @ftable, @vtable.
22773360 \envdef\table{%
22783361 \let\itemindex\gobble
2279- \tablex
3362+ \tablecheck{table}%
22803363 }
22813364 \envdef\ftable{%
22823365 \def\itemindex ##1{\doind {fn}{\code{##1}}}%
2283- \tablex
3366+ \tablecheck{ftable}%
22843367 }
22853368 \envdef\vtable{%
22863369 \def\itemindex ##1{\doind {vr}{\code{##1}}}%
2287- \tablex
3370+ \tablecheck{vtable}%
3371+}
3372+\def\tablecheck#1{%
3373+ \ifnum \the\catcode`\^^M=\active
3374+ \endgroup
3375+ \errmessage{This command won't work in this context; perhaps the problem is
3376+ that we are \inenvironment\thisenv}%
3377+ \def\next{\doignore{#1}}%
3378+ \else
3379+ \let\next\tablex
3380+ \fi
3381+ \next
22883382 }
22893383 \def\tablex#1{%
22903384 \def\itemindicate{#1}%
@@ -2333,9 +3427,18 @@ where each line of input produces a line of output.}
23333427 \parindent=0pt
23343428 \parskip=\smallskipamount
23353429 \ifdim\parskip=0pt \parskip=2pt \fi
3430+ %
3431+ % Try typesetting the item mark that if the document erroneously says
3432+ % something like @itemize @samp (intending @table), there's an error
3433+ % right away at the @itemize. It's not the best error message in the
3434+ % world, but it's better than leaving it to the @item. This means if
3435+ % the user wants an empty mark, they have to say @w{} not just @w.
23363436 \def\itemcontents{#1}%
3437+ \setbox0 = \hbox{\itemcontents}%
3438+ %
23373439 % @itemize with no arg is equivalent to @itemize @bullet.
23383440 \ifx\itemcontents\empty\def\itemcontents{\bullet}\fi
3441+ %
23393442 \let\item=\itemizeitem
23403443 }
23413444
@@ -2356,6 +3459,7 @@ where each line of input produces a line of output.}
23563459 \ifnum\lastpenalty<10000 \parskip=0in \fi
23573460 \noindent
23583461 \hbox to 0pt{\hss \itemcontents \kern\itemmargin}%
3462+ %
23593463 \vadjust{\penalty 1200}}% not good to break after first line of item.
23603464 \flushcr
23613465 }
@@ -2537,7 +3641,7 @@ where each line of input produces a line of output.}
25373641
25383642 % #1 is the @columnfraction, usually a decimal number like .5, but might
25393643 % be just 1. We just use it, whatever it is.
2540-%
3644+%
25413645 \def\pickupwholefraction#1 {%
25423646 \global\advance\colcount by 1
25433647 \expandafter\xdef\csname col\the\colcount\endcsname{#1\hsize}%
@@ -2577,12 +3681,19 @@ where each line of input produces a line of output.}
25773681 %
25783682 % @headitem starts a heading row, which we typeset in bold.
25793683 % Assignments have to be global since we are inside the implicit group
2580-% of an alignment entry. Note that \everycr resets \everytab.
2581-\def\headitem{\checkenv\multitable \crcr \global\everytab={\bf}\the\everytab}%
3684+% of an alignment entry. \everycr resets \everytab so we don't have to
3685+% undo it ourselves.
3686+\def\headitemfont{\b}% for people to use in the template row; not changeable
3687+\def\headitem{%
3688+ \checkenv\multitable
3689+ \crcr
3690+ \global\everytab={\bf}% can't use \headitemfont since the parsing differs
3691+ \the\everytab % for the first item
3692+}%
25823693 %
25833694 % A \tab used to include \hskip1sp. But then the space in a template
25843695 % line is not enough. That is bad. So let's go back to just `&' until
2585-% we encounter the problem it was intended to solve again.
3696+% we again encounter the problem the 1sp was intended to solve.
25863697 % --karl, nathan@acm.org, 20apr99.
25873698 \def\tab{\checkenv\multitable &\the\everytab}%
25883699
@@ -2595,7 +3706,10 @@ where each line of input produces a line of output.}
25953706 \startsavinginserts
25963707 %
25973708 % @item within a multitable starts a normal row.
2598- \let\item\crcr
3709+ % We use \def instead of \let so that if one of the multitable entries
3710+ % contains an @itemize, we don't choke on the \item (seen as \crcr aka
3711+ % \endtemplate) expanding \doitemize.
3712+ \def\item{\crcr}%
25993713 %
26003714 \tolerance=9500
26013715 \hbadness=9500
@@ -2680,19 +3794,17 @@ where each line of input produces a line of output.}
26803794 \global\setpercentfalse
26813795 }
26823796
2683-\def\setmultitablespacing{% test to see if user has set \multitablelinespace.
2684-% If so, do nothing. If not, give it an appropriate dimension based on
2685-% current baselineskip.
3797+\def\setmultitablespacing{%
3798+ \def\multistrut{\strut}% just use the standard line spacing
3799+ %
3800+ % Compute \multitablelinespace (if not defined by user) for use in
3801+ % \multitableparskip calculation. We used define \multistrut based on
3802+ % this, but (ironically) that caused the spacing to be off.
3803+ % See bug-texinfo report from Werner Lemberg, 31 Oct 2004 12:52:20 +0100.
26863804 \ifdim\multitablelinespace=0pt
26873805 \setbox0=\vbox{X}\global\multitablelinespace=\the\baselineskip
26883806 \global\advance\multitablelinespace by-\ht0
2689-%% strut to put in table in case some entry doesn't have descenders,
2690-%% to keep lines equally spaced
2691-\let\multistrut = \strut
2692-\else
2693-%% FIXME: what is \box0 supposed to be?
2694-\gdef\multistrut{\vrule height\multitablelinespace depth\dp0
2695-width0pt\relax} \fi
3807+\fi
26963808 %% Test to see if parskip is larger than space between lines of
26973809 %% table. If not, do nothing.
26983810 %% If so, set to same dimension as multitablelinespace.
@@ -2750,6 +3862,7 @@ width0pt\relax} \fi
27503862
27513863 \def\doignore#1{\begingroup
27523864 % Scan in ``verbatim'' mode:
3865+ \obeylines
27533866 \catcode`\@ = \other
27543867 \catcode`\{ = \other
27553868 \catcode`\} = \other
@@ -2761,25 +3874,25 @@ width0pt\relax} \fi
27613874 \doignorecount = 0
27623875 %
27633876 % Swallow text until we reach the matching `@end #1'.
2764- \dodoignore {#1}%
3877+ \dodoignore{#1}%
27653878 }
27663879
27673880 { \catcode`_=11 % We want to use \_STOP_ which cannot appear in texinfo source.
27683881 \obeylines %
27693882 %
27703883 \gdef\dodoignore#1{%
2771- % #1 contains the string `ifinfo'.
3884+ % #1 contains the command name as a string, e.g., `ifinfo'.
3885+ %
3886+ % Define a command to find the next `@end #1'.
3887+ \long\def\doignoretext##1^^M@end #1{%
3888+ \doignoretextyyy##1^^M@#1\_STOP_}%
27723889 %
2773- % Define a command to find the next `@end #1', which must be on a line
2774- % by itself.
2775- \long\def\doignoretext##1^^M@end #1{\doignoretextyyy##1^^M@#1\_STOP_}%
27763890 % And this command to find another #1 command, at the beginning of a
27773891 % line. (Otherwise, we would consider a line `@c @ifset', for
27783892 % example, to count as an @ifset for nesting.)
27793893 \long\def\doignoretextyyy##1^^M@#1##2\_STOP_{\doignoreyyy{##2}\_STOP_}%
27803894 %
27813895 % And now expand that command.
2782- \obeylines %
27833896 \doignoretext ^^M%
27843897 }%
27853898 }
@@ -2797,7 +3910,7 @@ width0pt\relax} \fi
27973910 }
27983911
27993912 % We have to swallow the remaining "\_STOP_".
2800-%
3913+%
28013914 \def\doignoretextzzz#1{%
28023915 \ifnum\doignorecount = 0 % We have just found the outermost @end.
28033916 \let\next\enddoignore
@@ -2809,7 +3922,12 @@ width0pt\relax} \fi
28093922 }
28103923
28113924 % Finish off ignored text.
2812-\def\enddoignore{\endgroup\ignorespaces}
3925+{ \obeylines%
3926+ % Ignore anything after the last `@end #1'; this matters in verbatim
3927+ % environments, where otherwise the newline after an ignored conditional
3928+ % would result in a blank line in the output.
3929+ \gdef\enddoignore#1^^M{\endgroup\ignorespaces}%
3930+}
28133931
28143932
28153933 % @set VAR sets the variable VAR to an empty value.
@@ -2922,9 +4040,8 @@ width0pt\relax} \fi
29224040 % Index generation facilities
29234041
29244042 % Define \newwrite to be identical to plain tex's \newwrite
2925-% except not \outer, so it can be used within \newindex.
2926-{\catcode`\@=11
2927-\gdef\newwrite{\alloc@7\write\chardef\sixt@@n}}
4043+% except not \outer, so it can be used within macros and \if's.
4044+\edef\newwrite{\makecsname{ptexnewwrite}}
29284045
29294046 % \newindex {foo} defines an index named foo.
29304047 % It automatically defines \fooindex such that
@@ -2975,11 +4092,11 @@ width0pt\relax} \fi
29754092 \def\dosynindex#1#2#3{%
29764093 % Only do \closeout if we haven't already done it, else we'll end up
29774094 % closing the target index.
2978- \expandafter \ifx\csname donesynindex#2\endcsname \undefined
4095+ \expandafter \ifx\csname donesynindex#2\endcsname \relax
29794096 % The \closeout helps reduce unnecessary open files; the limit on the
29804097 % Acorn RISC OS is a mere 16 files.
29814098 \expandafter\closeout\csname#2indfile\endcsname
2982- \expandafter\let\csname\donesynindex#2\endcsname = 1
4099+ \expandafter\let\csname donesynindex#2\endcsname = 1
29834100 \fi
29844101 % redefine \fooindfile:
29854102 \expandafter\let\expandafter\temp\expandafter=\csname#3indfile\endcsname
@@ -3010,41 +4127,50 @@ width0pt\relax} \fi
30104127 % we have to laboriously prevent expansion for those that we don't.
30114128 %
30124129 \def\indexdummies{%
4130+ \escapechar = `\\ % use backslash in output files.
30134131 \def\@{@}% change to @@ when we switch to @ as escape char in index files.
30144132 \def\ {\realbackslash\space }%
4133+ %
30154134 % Need these in case \tex is in effect and \{ is a \delimiter again.
30164135 % But can't use \lbracecmd and \rbracecmd because texindex assumes
30174136 % braces and backslashes are used only as delimiters.
30184137 \let\{ = \mylbrace
30194138 \let\} = \myrbrace
30204139 %
3021- % \definedummyword defines \#1 as \realbackslash #1\space, thus
3022- % effectively preventing its expansion. This is used only for control
3023- % words, not control letters, because the \space would be incorrect
3024- % for control characters, but is needed to separate the control word
3025- % from whatever follows.
4140+ % I don't entirely understand this, but when an index entry is
4141+ % generated from a macro call, the \endinput which \scanmacro inserts
4142+ % causes processing to be prematurely terminated. This is,
4143+ % apparently, because \indexsorttmp is fully expanded, and \endinput
4144+ % is an expandable command. The redefinition below makes \endinput
4145+ % disappear altogether for that purpose -- although logging shows that
4146+ % processing continues to some further point. On the other hand, it
4147+ % seems \endinput does not hurt in the printed index arg, since that
4148+ % is still getting written without apparent harm.
30264149 %
3027- % For control letters, we have \definedummyletter, which omits the
3028- % space.
4150+ % Sample source (mac-idx3.tex, reported by Graham Percival to
4151+ % help-texinfo, 22may06):
4152+ % @macro funindex {WORD}
4153+ % @findex xyz
4154+ % @end macro
4155+ % ...
4156+ % @funindex commtest
30294157 %
3030- % These can be used both for control words that take an argument and
3031- % those that do not. If it is followed by {arg} in the input, then
3032- % that will dutifully get written to the index (or wherever).
4158+ % The above is not enough to reproduce the bug, but it gives the flavor.
30334159 %
3034- \def\definedummyword##1{%
3035- \expandafter\def\csname ##1\endcsname{\realbackslash ##1\space}%
3036- }%
3037- \def\definedummyletter##1{%
3038- \expandafter\def\csname ##1\endcsname{\realbackslash ##1}%
3039- }%
4160+ % Sample whatsit resulting:
4161+ % .@write3{\entry{xyz}{@folio }{@code {xyz@endinput }}}
4162+ %
4163+ % So:
4164+ \let\endinput = \empty
30404165 %
30414166 % Do the redefinitions.
30424167 \commondummies
30434168 }
30444169
3045-% For the aux file, @ is the escape character. So we want to redefine
3046-% everything using @ instead of \realbackslash. When everything uses
3047-% @, this will be simpler.
4170+% For the aux and toc files, @ is the escape character. So we want to
4171+% redefine everything using @ as the escape character (instead of
4172+% \realbackslash, still used for index files). When everything uses @,
4173+% this will be simpler.
30484174 %
30494175 \def\atdummies{%
30504176 \def\@{@@}%
@@ -3052,144 +4178,168 @@ width0pt\relax} \fi
30524178 \let\{ = \lbraceatcmd
30534179 \let\} = \rbraceatcmd
30544180 %
3055- % (See comments in \indexdummies.)
3056- \def\definedummyword##1{%
3057- \expandafter\def\csname ##1\endcsname{@##1\space}%
3058- }%
3059- \def\definedummyletter##1{%
3060- \expandafter\def\csname ##1\endcsname{@##1}%
3061- }%
3062- %
30634181 % Do the redefinitions.
30644182 \commondummies
4183+ \otherbackslash
30654184 }
30664185
3067-% Called from \indexdummies and \atdummies. \definedummyword and
3068-% \definedummyletter must be defined first.
4186+% Called from \indexdummies and \atdummies.
30694187 %
30704188 \def\commondummies{%
30714189 %
3072- \normalturnoffactive
4190+ % \definedummyword defines \#1 as \string\#1\space, thus effectively
4191+ % preventing its expansion. This is used only for control% words,
4192+ % not control letters, because the \space would be incorrect for
4193+ % control characters, but is needed to separate the control word
4194+ % from whatever follows.
4195+ %
4196+ % For control letters, we have \definedummyletter, which omits the
4197+ % space.
4198+ %
4199+ % These can be used both for control words that take an argument and
4200+ % those that do not. If it is followed by {arg} in the input, then
4201+ % that will dutifully get written to the index (or wherever).
4202+ %
4203+ \def\definedummyword ##1{\def##1{\string##1\space}}%
4204+ \def\definedummyletter##1{\def##1{\string##1}}%
4205+ \let\definedummyaccent\definedummyletter
30734206 %
30744207 \commondummiesnofonts
30754208 %
3076- \definedummyletter{_}%
4209+ \definedummyletter\_%
30774210 %
30784211 % Non-English letters.
3079- \definedummyword{AA}%
3080- \definedummyword{AE}%
3081- \definedummyword{L}%
3082- \definedummyword{OE}%
3083- \definedummyword{O}%
3084- \definedummyword{aa}%
3085- \definedummyword{ae}%
3086- \definedummyword{l}%
3087- \definedummyword{oe}%
3088- \definedummyword{o}%
3089- \definedummyword{ss}%
3090- \definedummyword{exclamdown}%
3091- \definedummyword{questiondown}%
3092- \definedummyword{ordf}%
3093- \definedummyword{ordm}%
4212+ \definedummyword\AA
4213+ \definedummyword\AE
4214+ \definedummyword\DH
4215+ \definedummyword\L
4216+ \definedummyword\O
4217+ \definedummyword\OE
4218+ \definedummyword\TH
4219+ \definedummyword\aa
4220+ \definedummyword\ae
4221+ \definedummyword\dh
4222+ \definedummyword\exclamdown
4223+ \definedummyword\l
4224+ \definedummyword\o
4225+ \definedummyword\oe
4226+ \definedummyword\ordf
4227+ \definedummyword\ordm
4228+ \definedummyword\questiondown
4229+ \definedummyword\ss
4230+ \definedummyword\th
30944231 %
30954232 % Although these internal commands shouldn't show up, sometimes they do.
3096- \definedummyword{bf}%
3097- \definedummyword{gtr}%
3098- \definedummyword{hat}%
3099- \definedummyword{less}%
3100- \definedummyword{sf}%
3101- \definedummyword{sl}%
3102- \definedummyword{tclose}%
3103- \definedummyword{tt}%
3104- %
3105- \definedummyword{LaTeX}%
3106- \definedummyword{TeX}%
4233+ \definedummyword\bf
4234+ \definedummyword\gtr
4235+ \definedummyword\hat
4236+ \definedummyword\less
4237+ \definedummyword\sf
4238+ \definedummyword\sl
4239+ \definedummyword\tclose
4240+ \definedummyword\tt
4241+ %
4242+ \definedummyword\LaTeX
4243+ \definedummyword\TeX
31074244 %
31084245 % Assorted special characters.
3109- \definedummyword{bullet}%
3110- \definedummyword{copyright}%
3111- \definedummyword{registeredsymbol}%
3112- \definedummyword{dots}%
3113- \definedummyword{enddots}%
3114- \definedummyword{equiv}%
3115- \definedummyword{error}%
3116- \definedummyword{expansion}%
3117- \definedummyword{minus}%
3118- \definedummyword{pounds}%
3119- \definedummyword{point}%
3120- \definedummyword{print}%
3121- \definedummyword{result}%
4246+ \definedummyword\bullet
4247+ \definedummyword\comma
4248+ \definedummyword\copyright
4249+ \definedummyword\registeredsymbol
4250+ \definedummyword\dots
4251+ \definedummyword\enddots
4252+ \definedummyword\equiv
4253+ \definedummyword\error
4254+ \definedummyword\euro
4255+ \definedummyword\guillemetleft
4256+ \definedummyword\guillemetright
4257+ \definedummyword\guilsinglleft
4258+ \definedummyword\guilsinglright
4259+ \definedummyword\expansion
4260+ \definedummyword\minus
4261+ \definedummyword\ogonek
4262+ \definedummyword\pounds
4263+ \definedummyword\point
4264+ \definedummyword\print
4265+ \definedummyword\quotedblbase
4266+ \definedummyword\quotedblleft
4267+ \definedummyword\quotedblright
4268+ \definedummyword\quoteleft
4269+ \definedummyword\quoteright
4270+ \definedummyword\quotesinglbase
4271+ \definedummyword\result
4272+ \definedummyword\textdegree
4273+ %
4274+ % We want to disable all macros so that they are not expanded by \write.
4275+ \macrolist
4276+ %
4277+ \normalturnoffactive
31224278 %
31234279 % Handle some cases of @value -- where it does not contain any
31244280 % (non-fully-expandable) commands.
31254281 \makevalueexpandable
3126- %
3127- % Normal spaces, not active ones.
3128- \unsepspaces
3129- %
3130- % No macro expansion.
3131- \turnoffmacros
31324282 }
31334283
31344284 % \commondummiesnofonts: common to \commondummies and \indexnofonts.
31354285 %
3136-% Better have this without active chars.
3137-{
3138- \catcode`\~=\other
3139- \gdef\commondummiesnofonts{%
3140- % Control letters and accents.
3141- \definedummyletter{!}%
3142- \definedummyletter{"}%
3143- \definedummyletter{'}%
3144- \definedummyletter{*}%
3145- \definedummyletter{,}%
3146- \definedummyletter{.}%
3147- \definedummyletter{/}%
3148- \definedummyletter{:}%
3149- \definedummyletter{=}%
3150- \definedummyletter{?}%
3151- \definedummyletter{^}%
3152- \definedummyletter{`}%
3153- \definedummyletter{~}%
3154- \definedummyword{u}%
3155- \definedummyword{v}%
3156- \definedummyword{H}%
3157- \definedummyword{dotaccent}%
3158- \definedummyword{ringaccent}%
3159- \definedummyword{tieaccent}%
3160- \definedummyword{ubaraccent}%
3161- \definedummyword{udotaccent}%
3162- \definedummyword{dotless}%
3163- %
3164- % Texinfo font commands.
3165- \definedummyword{b}%
3166- \definedummyword{i}%
3167- \definedummyword{r}%
3168- \definedummyword{sc}%
3169- \definedummyword{t}%
3170- %
3171- % Commands that take arguments.
3172- \definedummyword{acronym}%
3173- \definedummyword{cite}%
3174- \definedummyword{code}%
3175- \definedummyword{command}%
3176- \definedummyword{dfn}%
3177- \definedummyword{emph}%
3178- \definedummyword{env}%
3179- \definedummyword{file}%
3180- \definedummyword{kbd}%
3181- \definedummyword{key}%
3182- \definedummyword{math}%
3183- \definedummyword{option}%
3184- \definedummyword{samp}%
3185- \definedummyword{strong}%
3186- \definedummyword{tie}%
3187- \definedummyword{uref}%
3188- \definedummyword{url}%
3189- \definedummyword{var}%
3190- \definedummyword{verb}%
3191- \definedummyword{w}%
3192- }
4286+\def\commondummiesnofonts{%
4287+ % Control letters and accents.
4288+ \definedummyletter\!%
4289+ \definedummyaccent\"%
4290+ \definedummyaccent\'%
4291+ \definedummyletter\*%
4292+ \definedummyaccent\,%
4293+ \definedummyletter\.%
4294+ \definedummyletter\/%
4295+ \definedummyletter\:%
4296+ \definedummyaccent\=%
4297+ \definedummyletter\?%
4298+ \definedummyaccent\^%
4299+ \definedummyaccent\`%
4300+ \definedummyaccent\~%
4301+ \definedummyword\u
4302+ \definedummyword\v
4303+ \definedummyword\H
4304+ \definedummyword\dotaccent
4305+ \definedummyword\ogonek
4306+ \definedummyword\ringaccent
4307+ \definedummyword\tieaccent
4308+ \definedummyword\ubaraccent
4309+ \definedummyword\udotaccent
4310+ \definedummyword\dotless
4311+ %
4312+ % Texinfo font commands.
4313+ \definedummyword\b
4314+ \definedummyword\i
4315+ \definedummyword\r
4316+ \definedummyword\sc
4317+ \definedummyword\t
4318+ %
4319+ % Commands that take arguments.
4320+ \definedummyword\acronym
4321+ \definedummyword\cite
4322+ \definedummyword\code
4323+ \definedummyword\command
4324+ \definedummyword\dfn
4325+ \definedummyword\emph
4326+ \definedummyword\env
4327+ \definedummyword\file
4328+ \definedummyword\kbd
4329+ \definedummyword\key
4330+ \definedummyword\math
4331+ \definedummyword\option
4332+ \definedummyword\pxref
4333+ \definedummyword\ref
4334+ \definedummyword\samp
4335+ \definedummyword\strong
4336+ \definedummyword\tie
4337+ \definedummyword\uref
4338+ \definedummyword\url
4339+ \definedummyword\var
4340+ \definedummyword\verb
4341+ \definedummyword\w
4342+ \definedummyword\xref
31934343 }
31944344
31954345 % \indexnofonts is used when outputting the strings to sort the index
@@ -3198,10 +4348,12 @@ width0pt\relax} \fi
31984348 % would be for a given command (usually its argument).
31994349 %
32004350 \def\indexnofonts{%
3201- \def\definedummyword##1{%
3202- \expandafter\let\csname ##1\endcsname\asis
3203- }%
3204- \let\definedummyletter=\definedummyword
4351+ % Accent commands should become @asis.
4352+ \def\definedummyaccent##1{\let##1\asis}%
4353+ % We can just ignore other control letters.
4354+ \def\definedummyletter##1{\let##1\empty}%
4355+ % Hopefully, all control words can become @asis.
4356+ \let\definedummyword\definedummyaccent
32054357 %
32064358 \commondummiesnofonts
32074359 %
@@ -3218,19 +4370,23 @@ width0pt\relax} \fi
32184370 % Non-English letters.
32194371 \def\AA{AA}%
32204372 \def\AE{AE}%
4373+ \def\DH{DZZ}%
32214374 \def\L{L}%
32224375 \def\OE{OE}%
32234376 \def\O{O}%
4377+ \def\TH{ZZZ}%
32244378 \def\aa{aa}%
32254379 \def\ae{ae}%
4380+ \def\dh{dzz}%
4381+ \def\exclamdown{!}%
32264382 \def\l{l}%
32274383 \def\oe{oe}%
3228- \def\o{o}%
3229- \def\ss{ss}%
3230- \def\exclamdown{!}%
3231- \def\questiondown{?}%
32324384 \def\ordf{a}%
32334385 \def\ordm{o}%
4386+ \def\o{o}%
4387+ \def\questiondown{?}%
4388+ \def\ss{ss}%
4389+ \def\th{zzz}%
32344390 %
32354391 \def\LaTeX{LaTeX}%
32364392 \def\TeX{TeX}%
@@ -3238,18 +4394,43 @@ width0pt\relax} \fi
32384394 % Assorted special characters.
32394395 % (The following {} will end up in the sort string, but that's ok.)
32404396 \def\bullet{bullet}%
4397+ \def\comma{,}%
32414398 \def\copyright{copyright}%
32424399 \def\registeredsymbol{R}%
32434400 \def\dots{...}%
32444401 \def\enddots{...}%
32454402 \def\equiv{==}%
32464403 \def\error{error}%
4404+ \def\euro{euro}%
4405+ \def\guillemetleft{<<}%
4406+ \def\guillemetright{>>}%
4407+ \def\guilsinglleft{<}%
4408+ \def\guilsinglright{>}%
32474409 \def\expansion{==>}%
32484410 \def\minus{-}%
32494411 \def\pounds{pounds}%
32504412 \def\point{.}%
32514413 \def\print{-|}%
4414+ \def\quotedblbase{"}%
4415+ \def\quotedblleft{"}%
4416+ \def\quotedblright{"}%
4417+ \def\quoteleft{`}%
4418+ \def\quoteright{'}%
4419+ \def\quotesinglbase{,}%
32524420 \def\result{=>}%
4421+ \def\textdegree{degrees}%
4422+ %
4423+ % We need to get rid of all macros, leaving only the arguments (if present).
4424+ % Of course this is not nearly correct, but it is the best we can do for now.
4425+ % makeinfo does not expand macros in the argument to @deffn, which ends up
4426+ % writing an index entry, and texindex isn't prepared for an index sort entry
4427+ % that starts with \.
4428+ %
4429+ % Since macro invocations are followed by braces, we can just redefine them
4430+ % to take a single TeX argument. The case of a macro invocation that
4431+ % goes to end-of-line is not handled.
4432+ %
4433+ \macrolist
32534434 }
32544435
32554436 \let\indexbackslash=0 %overridden during \printindex.
@@ -3277,11 +4458,7 @@ width0pt\relax} \fi
32774458 %
32784459 \edef\writeto{\csname#1indfile\endcsname}%
32794460 %
3280- \ifvmode
3281- \dosubindsanitize
3282- \else
3283- \dosubindwrite
3284- \fi
4461+ \safewhatsit\dosubindwrite
32854462 }%
32864463 \fi
32874464 }
@@ -3296,7 +4473,6 @@ width0pt\relax} \fi
32964473 %
32974474 % Remember, we are within a group.
32984475 \indexdummies % Must do this here, since \bf, etc expand at this stage
3299- \escapechar=`\\
33004476 \def\backslashcurfont{\indexbackslash}% \indexbackslash isn't defined now
33014477 % so it will be output as is; and it will print as backslash.
33024478 %
@@ -3319,13 +4495,13 @@ width0pt\relax} \fi
33194495 \temp
33204496 }
33214497
3322-% Take care of unwanted page breaks:
4498+% Take care of unwanted page breaks/skips around a whatsit:
33234499 %
33244500 % If a skip is the last thing on the list now, preserve it
33254501 % by backing up by \lastskip, doing the \write, then inserting
33264502 % the skip again. Otherwise, the whatsit generated by the
3327-% \write will make \lastskip zero. The result is that sequences
3328-% like this:
4503+% \write or \pdfdest will make \lastskip zero. The result is that
4504+% sequences like this:
33294505 % @end defun
33304506 % @tindex whatever
33314507 % @defun ...
@@ -3349,44 +4525,52 @@ width0pt\relax} \fi
33494525 %
33504526 \edef\zeroskipmacro{\expandafter\the\csname z@skip\endcsname}
33514527 %
4528+\newskip\whatsitskip
4529+\newcount\whatsitpenalty
4530+%
33524531 % ..., ready, GO:
33534532 %
3354-\def\dosubindsanitize{%
4533+\def\safewhatsit#1{%
4534+\ifhmode
4535+ #1%
4536+\else
33554537 % \lastskip and \lastpenalty cannot both be nonzero simultaneously.
3356- \skip0 = \lastskip
4538+ \whatsitskip = \lastskip
33574539 \edef\lastskipmacro{\the\lastskip}%
3358- \count255 = \lastpenalty
4540+ \whatsitpenalty = \lastpenalty
33594541 %
33604542 % If \lastskip is nonzero, that means the last item was a
33614543 % skip. And since a skip is discardable, that means this
3362- % -\skip0 glue we're inserting is preceded by a
4544+ % -\whatsitskip glue we're inserting is preceded by a
33634545 % non-discardable item, therefore it is not a potential
33644546 % breakpoint, therefore no \nobreak needed.
33654547 \ifx\lastskipmacro\zeroskipmacro
33664548 \else
3367- \vskip-\skip0
4549+ \vskip-\whatsitskip
33684550 \fi
33694551 %
3370- \dosubindwrite
4552+ #1%
33714553 %
33724554 \ifx\lastskipmacro\zeroskipmacro
3373- % if \lastskip was zero, perhaps the last item was a
3374- % penalty, and perhaps it was >=10000, e.g., a \nobreak.
3375- % In that case, we want to re-insert the penalty; since we
3376- % just inserted a non-discardable item, any following glue
3377- % (such as a \parskip) would be a breakpoint. For example:
4555+ % If \lastskip was zero, perhaps the last item was a penalty, and
4556+ % perhaps it was >=10000, e.g., a \nobreak. In that case, we want
4557+ % to re-insert the same penalty (values >10000 are used for various
4558+ % signals); since we just inserted a non-discardable item, any
4559+ % following glue (such as a \parskip) would be a breakpoint. For example:
4560+ %
33784561 % @deffn deffn-whatever
33794562 % @vindex index-whatever
33804563 % Description.
33814564 % would allow a break between the index-whatever whatsit
33824565 % and the "Description." paragraph.
3383- \ifnum\count255>9999 \nobreak \fi
4566+ \ifnum\whatsitpenalty>9999 \penalty\whatsitpenalty \fi
33844567 \else
33854568 % On the other hand, if we had a nonzero \lastskip,
33864569 % this make-up glue would be preceded by a non-discardable item
33874570 % (the whatsit from the \write), so we must insert a \nobreak.
3388- \nobreak\vskip\skip0
4571+ \nobreak\vskip\whatsitskip
33894572 \fi
4573+\fi
33904574 }
33914575
33924576 % The index entry written in the file actually looks like
@@ -3429,6 +4613,7 @@ width0pt\relax} \fi
34294613 %
34304614 \smallfonts \rm
34314615 \tolerance = 9500
4616+ \plainfrenchspacing
34324617 \everypar = {}% don't want the \kern\-parindent from indentation suppression.
34334618 %
34344619 % See if the index file exists and is nonempty.
@@ -3478,7 +4663,10 @@ width0pt\relax} \fi
34784663 \removelastskip
34794664 %
34804665 % We like breaks before the index initials, so insert a bonus.
3481- \penalty -300
4666+ \nobreak
4667+ \vskip 0pt plus 3\baselineskip
4668+ \penalty 0
4669+ \vskip 0pt plus -3\baselineskip
34824670 %
34834671 % Typeset the initial. Making this add up to a whole number of
34844672 % baselineskips increases the chance of the dots lining up from column
@@ -3488,10 +4676,9 @@ width0pt\relax} \fi
34884676 % No shrink because it confuses \balancecolumns.
34894677 \vskip 1.67\baselineskip plus .5\baselineskip
34904678 \leftline{\secbf #1}%
3491- \vskip .33\baselineskip plus .1\baselineskip
3492- %
34934679 % Do our best not to break after the initial.
34944680 \nobreak
4681+ \vskip .33\baselineskip plus .1\baselineskip
34954682 }}
34964683
34974684 % \entry typesets a paragraph consisting of the text (#1), dot leaders, and
@@ -3500,10 +4687,10 @@ width0pt\relax} \fi
35004687 %
35014688 % A straightforward implementation would start like this:
35024689 % \def\entry#1#2{...
3503-% But this frozes the catcodes in the argument, and can cause problems to
4690+% But this freezes the catcodes in the argument, and can cause problems to
35044691 % @code, which sets - active. This problem was fixed by a kludge---
35054692 % ``-'' was active throughout whole index, but this isn't really right.
3506-%
4693+%
35074694 % The right solution is to prevent \entry from swallowing the whole text.
35084695 % --kasal, 21nov03
35094696 \def\entry{%
@@ -3556,11 +4743,8 @@ width0pt\relax} \fi
35564743 % The following is kludged to not output a line of dots in the index if
35574744 % there are no page numbers. The next person who breaks this will be
35584745 % cursed by a Unix daemon.
3559- \def\tempa{{\rm }}%
3560- \def\tempb{#1}%
3561- \edef\tempc{\tempa}%
3562- \edef\tempd{\tempb}%
3563- \ifx\tempc\tempd
4746+ \setbox\boxA = \hbox{#1}%
4747+ \ifdim\wd\boxA = 0pt
35644748 \ %
35654749 \else
35664750 %
@@ -3584,9 +4768,9 @@ width0pt\relax} \fi
35844768 \endgroup
35854769 }
35864770
3587-% Like \dotfill except takes at least 1 em.
4771+% Like plain.tex's \dotfill, except uses up at least 1 em.
35884772 \def\indexdotfill{\cleaders
3589- \hbox{$\mathsurround=0pt \mkern1.5mu ${\it .}$ \mkern1.5mu$}\hskip 1em plus 1fill}
4773+ \hbox{$\mathsurround=0pt \mkern1.5mu.\mkern1.5mu$}\hskip 1em plus 1fill}
35904774
35914775 \def\primary #1{\line{#1\hfil}}
35924776
@@ -3696,6 +4880,34 @@ width0pt\relax} \fi
36964880 %
36974881 % All done with double columns.
36984882 \def\enddoublecolumns{%
4883+ % The following penalty ensures that the page builder is exercised
4884+ % _before_ we change the output routine. This is necessary in the
4885+ % following situation:
4886+ %
4887+ % The last section of the index consists only of a single entry.
4888+ % Before this section, \pagetotal is less than \pagegoal, so no
4889+ % break occurs before the last section starts. However, the last
4890+ % section, consisting of \initial and the single \entry, does not
4891+ % fit on the page and has to be broken off. Without the following
4892+ % penalty the page builder will not be exercised until \eject
4893+ % below, and by that time we'll already have changed the output
4894+ % routine to the \balancecolumns version, so the next-to-last
4895+ % double-column page will be processed with \balancecolumns, which
4896+ % is wrong: The two columns will go to the main vertical list, with
4897+ % the broken-off section in the recent contributions. As soon as
4898+ % the output routine finishes, TeX starts reconsidering the page
4899+ % break. The two columns and the broken-off section both fit on the
4900+ % page, because the two columns now take up only half of the page
4901+ % goal. When TeX sees \eject from below which follows the final
4902+ % section, it invokes the new output routine that we've set after
4903+ % \balancecolumns below; \onepageout will try to fit the two columns
4904+ % and the final section into the vbox of \pageheight (see
4905+ % \pagebody), causing an overfull box.
4906+ %
4907+ % Note that glue won't work here, because glue does not exercise the
4908+ % page builder, unlike penalties (see The TeXbook, pp. 280-281).
4909+ \penalty0
4910+ %
36994911 \output = {%
37004912 % Split the last of the double-column material. Leave it on the
37014913 % current page, no automatic page break.
@@ -3769,7 +4981,7 @@ width0pt\relax} \fi
37694981 % We do the following ugly conditional instead of the above simple
37704982 % construct for the sake of pdftex, which needs the actual
37714983 % letter in the expansion, not just typeset.
3772-%
4984+%
37734985 \def\appendixletter{%
37744986 \ifnum\appendixno=`A A%
37754987 \else\ifnum\appendixno=`B B%
@@ -3805,11 +5017,15 @@ width0pt\relax} \fi
38055017 \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi
38065018 \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi}
38075019
3808-% Each @chapter defines this as the name of the chapter.
3809-% page headings and footings can use it. @section does likewise.
3810-% However, they are not reliable, because we don't use marks.
5020+% Each @chapter defines these (using marks) as the number+name, number
5021+% and name of the chapter. Page headings and footings can use
5022+% these. @section does likewise.
38115023 \def\thischapter{}
5024+\def\thischapternum{}
5025+\def\thischaptername{}
38125026 \def\thissection{}
5027+\def\thissectionnum{}
5028+\def\thissectionname{}
38135029
38145030 \newcount\absseclevel % used to calculate proper heading level
38155031 \newcount\secbase\secbase=0 % @raisesections/@lowersections modify this count
@@ -3822,60 +5038,95 @@ width0pt\relax} \fi
38225038 \def\lowersections{\global\advance\secbase by 1}
38235039 \let\down=\lowersections % original BFox name
38245040
3825-% Choose a numbered-heading macro
3826-% #1 is heading level if unmodified by @raisesections or @lowersections
3827-% #2 is text for heading
3828-\def\numhead#1#2{\absseclevel=\secbase\advance\absseclevel by #1
3829-\ifcase\absseclevel
3830- \chapterzzz{#2}%
3831- \or \seczzz{#2}%
3832- \or \numberedsubseczzz{#2}%
3833- \or \numberedsubsubseczzz{#2}%
5041+% we only have subsub.
5042+\chardef\maxseclevel = 3
5043+%
5044+% A numbered section within an unnumbered changes to unnumbered too.
5045+% To achive this, remember the "biggest" unnum. sec. we are currently in:
5046+\chardef\unmlevel = \maxseclevel
5047+%
5048+% Trace whether the current chapter is an appendix or not:
5049+% \chapheadtype is "N" or "A", unnumbered chapters are ignored.
5050+\def\chapheadtype{N}
5051+
5052+% Choose a heading macro
5053+% #1 is heading type
5054+% #2 is heading level
5055+% #3 is text for heading
5056+\def\genhead#1#2#3{%
5057+ % Compute the abs. sec. level:
5058+ \absseclevel=#2
5059+ \advance\absseclevel by \secbase
5060+ % Make sure \absseclevel doesn't fall outside the range:
5061+ \ifnum \absseclevel < 0
5062+ \absseclevel = 0
38345063 \else
3835- \ifnum \absseclevel<0 \chapterzzz{#2}%
3836- \else \numberedsubsubseczzz{#2}%
5064+ \ifnum \absseclevel > 3
5065+ \absseclevel = 3
38375066 \fi
38385067 \fi
3839- \suppressfirstparagraphindent
3840-}
3841-
3842-% like \numhead, but chooses appendix heading levels
3843-\def\apphead#1#2{\absseclevel=\secbase\advance\absseclevel by #1
3844-\ifcase\absseclevel
3845- \appendixzzz{#2}%
3846- \or \appendixsectionzzz{#2}%
3847- \or \appendixsubseczzz{#2}%
3848- \or \appendixsubsubseczzz{#2}%
5068+ % The heading type:
5069+ \def\headtype{#1}%
5070+ \if \headtype U%
5071+ \ifnum \absseclevel < \unmlevel
5072+ \chardef\unmlevel = \absseclevel
5073+ \fi
38495074 \else
3850- \ifnum \absseclevel<0 \appendixzzz{#2}%
3851- \else \appendixsubsubseczzz{#2}%
5075+ % Check for appendix sections:
5076+ \ifnum \absseclevel = 0
5077+ \edef\chapheadtype{\headtype}%
5078+ \else
5079+ \if \headtype A\if \chapheadtype N%
5080+ \errmessage{@appendix... within a non-appendix chapter}%
5081+ \fi\fi
5082+ \fi
5083+ % Check for numbered within unnumbered:
5084+ \ifnum \absseclevel > \unmlevel
5085+ \def\headtype{U}%
5086+ \else
5087+ \chardef\unmlevel = 3
38525088 \fi
38535089 \fi
3854- \suppressfirstparagraphindent
3855-}
3856-
3857-% like \numhead, but chooses numberless heading levels
3858-\def\unnmhead#1#2{\absseclevel=\secbase\advance\absseclevel by #1
3859- \ifcase\absseclevel
3860- \unnumberedzzz{#2}%
3861- \or \unnumberedseczzz{#2}%
3862- \or \unnumberedsubseczzz{#2}%
3863- \or \unnumberedsubsubseczzz{#2}%
5090+ % Now print the heading:
5091+ \if \headtype U%
5092+ \ifcase\absseclevel
5093+ \unnumberedzzz{#3}%
5094+ \or \unnumberedseczzz{#3}%
5095+ \or \unnumberedsubseczzz{#3}%
5096+ \or \unnumberedsubsubseczzz{#3}%
5097+ \fi
38645098 \else
3865- \ifnum \absseclevel<0 \unnumberedzzz{#2}%
3866- \else \unnumberedsubsubseczzz{#2}%
5099+ \if \headtype A%
5100+ \ifcase\absseclevel
5101+ \appendixzzz{#3}%
5102+ \or \appendixsectionzzz{#3}%
5103+ \or \appendixsubseczzz{#3}%
5104+ \or \appendixsubsubseczzz{#3}%
5105+ \fi
5106+ \else
5107+ \ifcase\absseclevel
5108+ \chapterzzz{#3}%
5109+ \or \seczzz{#3}%
5110+ \or \numberedsubseczzz{#3}%
5111+ \or \numberedsubsubseczzz{#3}%
5112+ \fi
38675113 \fi
38685114 \fi
38695115 \suppressfirstparagraphindent
38705116 }
38715117
5118+% an interface:
5119+\def\numhead{\genhead N}
5120+\def\apphead{\genhead A}
5121+\def\unnmhead{\genhead U}
5122+
38725123 % @chapter, @appendix, @unnumbered. Increment top-level counter, reset
38735124 % all lower-level sectioning counters to zero.
3874-%
5125+%
38755126 % Also set \chaplevelprefix, which we prepend to @float sequence numbers
38765127 % (e.g., figures), q.v. By default (before any chapter), that is empty.
38775128 \let\chaplevelprefix = \empty
3878-%
5129+%
38795130 \outer\parseargdef\chapter{\numhead0{#1}} % normally numhead0 calls chapterzzz
38805131 \def\chapterzzz#1{%
38815132 % section resetting is \global in case the chapter is in a group, such
@@ -3887,7 +5138,9 @@ width0pt\relax} \fi
38875138 \gdef\chaplevelprefix{\the\chapno.}%
38885139 \resetallfloatnos
38895140 %
3890- \message{\putwordChapter\space \the\chapno}%
5141+ % \putwordChapter can contain complex things in translations.
5142+ \toks0=\expandafter{\putwordChapter}%
5143+ \message{\the\toks0 \space \the\chapno}%
38915144 %
38925145 % Write the actual heading.
38935146 \chapmacro{#1}{Ynumbered}{\the\chapno}%
@@ -3898,15 +5151,17 @@ width0pt\relax} \fi
38985151 \global\let\subsubsection = \numberedsubsubsec
38995152 }
39005153
3901-\outer\parseargdef\appendix{\apphead0{#1}} % normally apphead0 calls appendixzzz
5154+\outer\parseargdef\appendix{\apphead0{#1}} % normally calls appendixzzz
5155+%
39025156 \def\appendixzzz#1{%
39035157 \global\secno=0 \global\subsecno=0 \global\subsubsecno=0
39045158 \global\advance\appendixno by 1
39055159 \gdef\chaplevelprefix{\appendixletter.}%
39065160 \resetallfloatnos
39075161 %
3908- \def\appendixnum{\putwordAppendix\space \appendixletter}%
3909- \message{\appendixnum}%
5162+ % \putwordAppendix can contain complex things in translations.
5163+ \toks0=\expandafter{\putwordAppendix}%
5164+ \message{\the\toks0 \space \appendixletter}%
39105165 %
39115166 \chapmacro{#1}{Yappendix}{\appendixletter}%
39125167 %
@@ -3915,9 +5170,6 @@ width0pt\relax} \fi
39155170 \global\let\subsubsection = \appendixsubsubsec
39165171 }
39175172
3918-% @centerchap is like @unnumbered, but the heading is centered.
3919-\outer\parseargdef\centerchap{{\unnumberedyyy{#1}}}
3920-
39215173 \outer\parseargdef\unnumbered{\unnmhead0{#1}} % normally unnmhead0 calls unnumberedzzz
39225174 \def\unnumberedzzz#1{%
39235175 \global\secno=0 \global\subsecno=0 \global\subsubsecno=0
@@ -3948,6 +5200,16 @@ width0pt\relax} \fi
39485200 \global\let\subsubsection = \unnumberedsubsubsec
39495201 }
39505202
5203+% @centerchap is like @unnumbered, but the heading is centered.
5204+\outer\parseargdef\centerchap{%
5205+ % Well, we could do the following in a group, but that would break
5206+ % an assumption that \chapmacro is called at the outermost level.
5207+ % Thus we are safer this way: --kasal, 24feb04
5208+ \let\centerparametersmaybe = \centerparameters
5209+ \unnmhead0{#1}%
5210+ \let\centerparametersmaybe = \relax
5211+}
5212+
39515213 % @top is like @unnumbered.
39525214 \let\top\unnumbered
39535215
@@ -4014,24 +5276,6 @@ width0pt\relax} \fi
40145276 {\the\unnumberedno.\the\secno.\the\subsecno.\the\subsubsecno}%
40155277 }
40165278
4017-% These are variants which are not "outer", so they can appear in @ifinfo.
4018-% Actually, they are now be obsolete; ordinary section commands should work.
4019-\def\infotop{\parsearg\unnumberedzzz}
4020-\def\infounnumbered{\parsearg\unnumberedzzz}
4021-\def\infounnumberedsec{\parsearg\unnumberedseczzz}
4022-\def\infounnumberedsubsec{\parsearg\unnumberedsubseczzz}
4023-\def\infounnumberedsubsubsec{\parsearg\unnumberedsubsubseczzz}
4024-
4025-\def\infoappendix{\parsearg\appendixzzz}
4026-\def\infoappendixsec{\parsearg\appendixseczzz}
4027-\def\infoappendixsubsec{\parsearg\appendixsubseczzz}
4028-\def\infoappendixsubsubsec{\parsearg\appendixsubsubseczzz}
4029-
4030-\def\infochapter{\parsearg\chapterzzz}
4031-\def\infosection{\parsearg\sectionzzz}
4032-\def\infosubsection{\parsearg\subsectionzzz}
4033-\def\infosubsubsection{\parsearg\subsubsectionzzz}
4034-
40355279 % These macros control what the section commands do, according
40365280 % to what kind of chapter we are in (ordinary, appendix, or unnumbered).
40375281 % Define them by default for a numbered chapter.
@@ -4049,7 +5293,6 @@ width0pt\relax} \fi
40495293 % 3) Likewise, headings look best if no \parindent is used, and
40505294 % if justification is not attempted. Hence \raggedright.
40515295
4052-
40535296 \def\majorheading{%
40545297 {\advance\chapheadingskip by 10pt \chapbreak }%
40555298 \parsearg\chapheadingzzz
@@ -4058,8 +5301,8 @@ width0pt\relax} \fi
40585301 \def\chapheading{\chapbreak \parsearg\chapheadingzzz}
40595302 \def\chapheadingzzz#1{%
40605303 {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000
4061- \parindent=0pt\raggedright
4062- \rm #1\hfill}}%
5304+ \parindent=0pt\ptexraggedright
5305+ \rmisbold #1\hfill}}%
40635306 \bigskip \par\penalty 200\relax
40645307 \suppressfirstparagraphindent
40655308 }
@@ -4079,8 +5322,6 @@ width0pt\relax} \fi
40795322 %%% Args are the skip and penalty (usually negative)
40805323 \def\dobreak#1#2{\par\ifdim\lastskip<#1\removelastskip\penalty#2\vskip#1\fi}
40815324
4082-\def\setchapterstyle #1 {\csname CHAPF#1\endcsname}
4083-
40845325 %%% Define plain chapter starts, and page on/off switching for it
40855326 % Parameter controlling skip before chapter headings (if needed)
40865327
@@ -4088,7 +5329,20 @@ width0pt\relax} \fi
40885329
40895330 \def\chapbreak{\dobreak \chapheadingskip {-4000}}
40905331 \def\chappager{\par\vfill\supereject}
4091-\def\chapoddpage{\chappager \ifodd\pageno \else \hbox to 0pt{} \chappager\fi}
5332+% Because \domark is called before \chapoddpage, the filler page will
5333+% get the headings for the next chapter, which is wrong. But we don't
5334+% care -- we just disable all headings on the filler page.
5335+\def\chapoddpage{%
5336+ \chappager
5337+ \ifodd\pageno \else
5338+ \begingroup
5339+ \evenheadline={\hfil}\evenfootline={\hfil}%
5340+ \oddheadline={\hfil}\oddfootline={\hfil}%
5341+ \hbox to 0pt{}%
5342+ \chappager
5343+ \endgroup
5344+ \fi
5345+}
40925346
40935347 \def\setchapternewpage #1 {\csname CHAPPAG#1\endcsname}
40945348
@@ -4111,56 +5365,89 @@ width0pt\relax} \fi
41115365
41125366 \CHAPPAGon
41135367
4114-\def\CHAPFplain{%
4115-\global\let\chapmacro=\chfplain
4116-\global\let\centerchapmacro=\centerchfplain}
4117-
4118-% Normal chapter opening.
4119-%
5368+% Chapter opening.
5369+%
41205370 % #1 is the text, #2 is the section type (Ynumbered, Ynothing,
41215371 % Yappendix, Yomitfromtoc), #3 the chapter number.
4122-%
5372+%
41235373 % To test against our argument.
41245374 \def\Ynothingkeyword{Ynothing}
41255375 \def\Yomitfromtockeyword{Yomitfromtoc}
41265376 \def\Yappendixkeyword{Yappendix}
41275377 %
4128-\def\chfplain#1#2#3{%
5378+\def\chapmacro#1#2#3{%
5379+ % Insert the first mark before the heading break (see notes for \domark).
5380+ \let\prevchapterdefs=\lastchapterdefs
5381+ \let\prevsectiondefs=\lastsectiondefs
5382+ \gdef\lastsectiondefs{\gdef\thissectionname{}\gdef\thissectionnum{}%
5383+ \gdef\thissection{}}%
5384+ %
5385+ \def\temptype{#2}%
5386+ \ifx\temptype\Ynothingkeyword
5387+ \gdef\lastchapterdefs{\gdef\thischaptername{#1}\gdef\thischapternum{}%
5388+ \gdef\thischapter{\thischaptername}}%
5389+ \else\ifx\temptype\Yomitfromtockeyword
5390+ \gdef\lastchapterdefs{\gdef\thischaptername{#1}\gdef\thischapternum{}%
5391+ \gdef\thischapter{}}%
5392+ \else\ifx\temptype\Yappendixkeyword
5393+ \toks0={#1}%
5394+ \xdef\lastchapterdefs{%
5395+ \gdef\noexpand\thischaptername{\the\toks0}%
5396+ \gdef\noexpand\thischapternum{\appendixletter}%
5397+ % \noexpand\putwordAppendix avoids expanding indigestible
5398+ % commands in some of the translations.
5399+ \gdef\noexpand\thischapter{\noexpand\putwordAppendix{}
5400+ \noexpand\thischapternum:
5401+ \noexpand\thischaptername}%
5402+ }%
5403+ \else
5404+ \toks0={#1}%
5405+ \xdef\lastchapterdefs{%
5406+ \gdef\noexpand\thischaptername{\the\toks0}%
5407+ \gdef\noexpand\thischapternum{\the\chapno}%
5408+ % \noexpand\putwordChapter avoids expanding indigestible
5409+ % commands in some of the translations.
5410+ \gdef\noexpand\thischapter{\noexpand\putwordChapter{}
5411+ \noexpand\thischapternum:
5412+ \noexpand\thischaptername}%
5413+ }%
5414+ \fi\fi\fi
5415+ %
5416+ % Output the mark. Pass it through \safewhatsit, to take care of
5417+ % the preceding space.
5418+ \safewhatsit\domark
5419+ %
5420+ % Insert the chapter heading break.
41295421 \pchapsepmacro
5422+ %
5423+ % Now the second mark, after the heading break. No break points
5424+ % between here and the heading.
5425+ \let\prevchapterdefs=\lastchapterdefs
5426+ \let\prevsectiondefs=\lastsectiondefs
5427+ \domark
5428+ %
41305429 {%
4131- \chapfonts \rm
5430+ \chapfonts \rmisbold
41325431 %
4133- % Have to define \thissection before calling \donoderef, because the
5432+ % Have to define \lastsection before calling \donoderef, because the
41345433 % xref code eventually uses it. On the other hand, it has to be called
41355434 % after \pchapsepmacro, or the headline will change too soon.
4136- \gdef\thissection{#1}%
4137- \gdef\thischaptername{#1}%
5435+ \gdef\lastsection{#1}%
41385436 %
41395437 % Only insert the separating space if we have a chapter/appendix
41405438 % number, and don't print the unnumbered ``number''.
4141- \def\temptype{#2}%
41425439 \ifx\temptype\Ynothingkeyword
41435440 \setbox0 = \hbox{}%
41445441 \def\toctype{unnchap}%
4145- \def\thischapter{#1}%
41465442 \else\ifx\temptype\Yomitfromtockeyword
41475443 \setbox0 = \hbox{}% contents like unnumbered, but no toc entry
41485444 \def\toctype{omit}%
4149- \xdef\thischapter{}%
41505445 \else\ifx\temptype\Yappendixkeyword
41515446 \setbox0 = \hbox{\putwordAppendix{} #3\enspace}%
41525447 \def\toctype{app}%
4153- % We don't substitute the actual chapter name into \thischapter
4154- % because we don't want its macros evaluated now. And we don't
4155- % use \thissection because that changes with each section.
4156- %
4157- \xdef\thischapter{\putwordAppendix{} \appendixletter:
4158- \noexpand\thischaptername}%
41595448 \else
41605449 \setbox0 = \hbox{#3\enspace}%
41615450 \def\toctype{numchap}%
4162- \xdef\thischapter{\putwordChapter{} \the\chapno:
4163- \noexpand\thischaptername}%
41645451 \fi\fi\fi
41655452 %
41665453 % Write the toc entry for this chapter. Must come before the
@@ -4176,7 +5463,8 @@ width0pt\relax} \fi
41765463 \donoderef{#2}%
41775464 %
41785465 % Typeset the actual heading.
4179- \vbox{\hyphenpenalty=10000 \tolerance=5000 \parindent=0pt \raggedright
5466+ \nobreak % Avoid page breaks at the interline glue.
5467+ \vbox{\hyphenpenalty=10000 \tolerance=5000 \parindent=0pt \ptexraggedright
41805468 \hangindent=\wd0 \centerparametersmaybe
41815469 \unhbox0 #1\par}%
41825470 }%
@@ -4186,45 +5474,40 @@ width0pt\relax} \fi
41865474
41875475 % @centerchap -- centered and unnumbered.
41885476 \let\centerparametersmaybe = \relax
4189-\def\centerchfplain#1{{%
4190- \def\centerparametersmaybe{%
4191- \advance\rightskip by 3\rightskip
4192- \leftskip = \rightskip
4193- \parfillskip = 0pt
4194- }%
4195- \chfplain{#1}{Ynothing}{}%
4196-}}
5477+\def\centerparameters{%
5478+ \advance\rightskip by 3\rightskip
5479+ \leftskip = \rightskip
5480+ \parfillskip = 0pt
5481+}
41975482
4198-\CHAPFplain % The default
41995483
42005484 % I don't think this chapter style is supported any more, so I'm not
42015485 % updating it with the new noderef stuff. We'll see. --karl, 11aug03.
4202-%
5486+%
5487+\def\setchapterstyle #1 {\csname CHAPF#1\endcsname}
5488+%
42035489 \def\unnchfopen #1{%
42045490 \chapoddpage {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000
4205- \parindent=0pt\raggedright
4206- \rm #1\hfill}}\bigskip \par\nobreak
5491+ \parindent=0pt\ptexraggedright
5492+ \rmisbold #1\hfill}}\bigskip \par\nobreak
42075493 }
4208-
42095494 \def\chfopen #1#2{\chapoddpage {\chapfonts
42105495 \vbox to 3in{\vfil \hbox to\hsize{\hfil #2} \hbox to\hsize{\hfil #1} \vfil}}%
42115496 \par\penalty 5000 %
42125497 }
4213-
42145498 \def\centerchfopen #1{%
42155499 \chapoddpage {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000
42165500 \parindent=0pt
4217- \hfill {\rm #1}\hfill}}\bigskip \par\nobreak
5501+ \hfill {\rmisbold #1}\hfill}}\bigskip \par\nobreak
42185502 }
4219-
42205503 \def\CHAPFopen{%
4221-\global\let\chapmacro=\chfopen
4222-\global\let\centerchapmacro=\centerchfopen}
5504+ \global\let\chapmacro=\chfopen
5505+ \global\let\centerchapmacro=\centerchfopen}
42235506
42245507
42255508 % Section titles. These macros combine the section number parts and
42265509 % call the generic \sectionheading to do the printing.
4227-%
5510+%
42285511 \newskip\secheadingskip
42295512 \def\secheadingbreak{\dobreak \secheadingskip{-1000}}
42305513
@@ -4238,52 +5521,113 @@ width0pt\relax} \fi
42385521
42395522
42405523 % Print any size, any type, section title.
4241-%
5524+%
42425525 % #1 is the text, #2 is the section level (sec/subsec/subsubsec), #3 is
42435526 % the section type for xrefs (Ynumbered, Ynothing, Yappendix), #4 is the
42445527 % section number.
4245-%
5528+%
5529+\def\seckeyword{sec}
5530+%
42465531 \def\sectionheading#1#2#3#4{%
42475532 {%
42485533 % Switch to the right set of fonts.
4249- \csname #2fonts\endcsname \rm
5534+ \csname #2fonts\endcsname \rmisbold
5535+ %
5536+ \def\sectionlevel{#2}%
5537+ \def\temptype{#3}%
5538+ %
5539+ % Insert first mark before the heading break (see notes for \domark).
5540+ \let\prevsectiondefs=\lastsectiondefs
5541+ \ifx\temptype\Ynothingkeyword
5542+ \ifx\sectionlevel\seckeyword
5543+ \gdef\lastsectiondefs{\gdef\thissectionname{#1}\gdef\thissectionnum{}%
5544+ \gdef\thissection{\thissectionname}}%
5545+ \fi
5546+ \else\ifx\temptype\Yomitfromtockeyword
5547+ % Don't redefine \thissection.
5548+ \else\ifx\temptype\Yappendixkeyword
5549+ \ifx\sectionlevel\seckeyword
5550+ \toks0={#1}%
5551+ \xdef\lastsectiondefs{%
5552+ \gdef\noexpand\thissectionname{\the\toks0}%
5553+ \gdef\noexpand\thissectionnum{#4}%
5554+ % \noexpand\putwordSection avoids expanding indigestible
5555+ % commands in some of the translations.
5556+ \gdef\noexpand\thissection{\noexpand\putwordSection{}
5557+ \noexpand\thissectionnum:
5558+ \noexpand\thissectionname}%
5559+ }%
5560+ \fi
5561+ \else
5562+ \ifx\sectionlevel\seckeyword
5563+ \toks0={#1}%
5564+ \xdef\lastsectiondefs{%
5565+ \gdef\noexpand\thissectionname{\the\toks0}%
5566+ \gdef\noexpand\thissectionnum{#4}%
5567+ % \noexpand\putwordSection avoids expanding indigestible
5568+ % commands in some of the translations.
5569+ \gdef\noexpand\thissection{\noexpand\putwordSection{}
5570+ \noexpand\thissectionnum:
5571+ \noexpand\thissectionname}%
5572+ }%
5573+ \fi
5574+ \fi\fi\fi
5575+ %
5576+ % Go into vertical mode. Usually we'll already be there, but we
5577+ % don't want the following whatsit to end up in a preceding paragraph
5578+ % if the document didn't happen to have a blank line.
5579+ \par
5580+ %
5581+ % Output the mark. Pass it through \safewhatsit, to take care of
5582+ % the preceding space.
5583+ \safewhatsit\domark
42505584 %
42515585 % Insert space above the heading.
42525586 \csname #2headingbreak\endcsname
42535587 %
4254- % Only insert the space after the number if we have a section number.
4255- \def\sectionlevel{#2}%
4256- \def\temptype{#3}%
5588+ % Now the second mark, after the heading break. No break points
5589+ % between here and the heading.
5590+ \let\prevsectiondefs=\lastsectiondefs
5591+ \domark
42575592 %
5593+ % Only insert the space after the number if we have a section number.
42585594 \ifx\temptype\Ynothingkeyword
42595595 \setbox0 = \hbox{}%
42605596 \def\toctype{unn}%
4261- \gdef\thissection{#1}%
5597+ \gdef\lastsection{#1}%
42625598 \else\ifx\temptype\Yomitfromtockeyword
42635599 % for @headings -- no section number, don't include in toc,
4264- % and don't redefine \thissection.
5600+ % and don't redefine \lastsection.
42655601 \setbox0 = \hbox{}%
42665602 \def\toctype{omit}%
42675603 \let\sectionlevel=\empty
42685604 \else\ifx\temptype\Yappendixkeyword
42695605 \setbox0 = \hbox{#4\enspace}%
42705606 \def\toctype{app}%
4271- \gdef\thissection{#1}%
5607+ \gdef\lastsection{#1}%
42725608 \else
42735609 \setbox0 = \hbox{#4\enspace}%
42745610 \def\toctype{num}%
4275- \gdef\thissection{#1}%
5611+ \gdef\lastsection{#1}%
42765612 \fi\fi\fi
42775613 %
4278- % Write the toc entry (before \donoderef). See comments in \chfplain.
5614+ % Write the toc entry (before \donoderef). See comments in \chapmacro.
42795615 \writetocentry{\toctype\sectionlevel}{#1}{#4}%
42805616 %
42815617 % Write the node reference (= pdf destination for pdftex).
4282- % Again, see comments in \chfplain.
5618+ % Again, see comments in \chapmacro.
42835619 \donoderef{#3}%
42845620 %
5621+ % Interline glue will be inserted when the vbox is completed.
5622+ % That glue will be a valid breakpoint for the page, since it'll be
5623+ % preceded by a whatsit (usually from the \donoderef, or from the
5624+ % \writetocentry if there was no node). We don't want to allow that
5625+ % break, since then the whatsits could end up on page n while the
5626+ % section is on page n+1, thus toc/etc. are wrong. Debian bug 276000.
5627+ \nobreak
5628+ %
42855629 % Output the actual section heading.
4286- \vbox{\hyphenpenalty=10000 \tolerance=5000 \parindent=0pt \raggedright
5630+ \vbox{\hyphenpenalty=10000 \tolerance=5000 \parindent=0pt \ptexraggedright
42875631 \hangindent=\wd0 % zero if no section number
42885632 \unhbox0 #1}%
42895633 }%
@@ -4300,13 +5644,13 @@ width0pt\relax} \fi
43005644 % discardable item.)
43015645 \vskip-\parskip
43025646 %
4303- % This \nobreak is purely so the last item on the list is a \penalty
4304- % of 10000. This is so other code, for instance \parsebodycommon, can
4305- % check for and avoid allowing breakpoints. Otherwise, it would
4306- % insert a valid breakpoint between:
5647+ % This is purely so the last item on the list is a known \penalty >
5648+ % 10000. This is so \startdefun can avoid allowing breakpoints after
5649+ % section headings. Otherwise, it would insert a valid breakpoint between:
5650+ %
43075651 % @section sec-whatever
43085652 % @deffn def-whatever
4309- \nobreak
5653+ \penalty 10001
43105654 }
43115655
43125656
@@ -4315,14 +5659,14 @@ width0pt\relax} \fi
43155659 \newwrite\tocfile
43165660
43175661 % Write an entry to the toc file, opening it if necessary.
4318-% Called from @chapter, etc.
4319-%
5662+% Called from @chapter, etc.
5663+%
43205664 % Example usage: \writetocentry{sec}{Section Name}{\the\chapno.\the\secno}
43215665 % We append the current node name (if any) and page number as additional
43225666 % arguments for the \{chap,sec,...}entry macros which will eventually
43235667 % read this. The node name is used in the pdf outlines as the
43245668 % destination to jump to.
4325-%
5669+%
43265670 % We open the .toc file for writing here instead of at @setfilename (or
43275671 % any other fixed time) so that @contents can be anywhere in the document.
43285672 % But if #1 is `omit', then we don't do anything. This is used for the
@@ -4340,11 +5684,11 @@ width0pt\relax} \fi
43405684 \fi
43415685 %
43425686 \iflinks
4343- \toks0 = {#2}%
4344- \toks2 = \expandafter{\lastnode}%
4345- \edef\temp{\write\tocfile{\realbackslash #1entry{\the\toks0}{#3}%
4346- {\the\toks2}{\noexpand\folio}}}%
4347- \temp
5687+ {\atdummies
5688+ \edef\temp{%
5689+ \write\tocfile{@#1entry{#2}{#3}{\lastnode}{\noexpand\folio}}}%
5690+ \temp
5691+ }%
43485692 \fi
43495693 \fi
43505694 %
@@ -4357,6 +5701,31 @@ width0pt\relax} \fi
43575701 \ifpdf \global\pdfmakepagedesttrue \fi
43585702 }
43595703
5704+
5705+% These characters do not print properly in the Computer Modern roman
5706+% fonts, so we must take special care. This is more or less redundant
5707+% with the Texinfo input format setup at the end of this file.
5708+%
5709+\def\activecatcodes{%
5710+ \catcode`\"=\active
5711+ \catcode`\$=\active
5712+ \catcode`\<=\active
5713+ \catcode`\>=\active
5714+ \catcode`\\=\active
5715+ \catcode`\^=\active
5716+ \catcode`\_=\active
5717+ \catcode`\|=\active
5718+ \catcode`\~=\active
5719+}
5720+
5721+
5722+% Read the toc file, which is essentially Texinfo input.
5723+\def\readtocfile{%
5724+ \setupdatafile
5725+ \activecatcodes
5726+ \input \tocreadfilename
5727+}
5728+
43605729 \newskip\contentsrightmargin \contentsrightmargin=1in
43615730 \newcount\savepageno
43625731 \newcount\lastnegativepageno \lastnegativepageno = -1
@@ -4373,29 +5742,29 @@ width0pt\relax} \fi
43735742 %
43745743 % Don't need to put `Contents' or `Short Contents' in the headline.
43755744 % It is abundantly clear what they are.
4376- \def\thischapter{}%
43775745 \chapmacro{#1}{Yomitfromtoc}{}%
43785746 %
43795747 \savepageno = \pageno
43805748 \begingroup % Set up to handle contents files properly.
4381- \catcode`\\=0 \catcode`\{=1 \catcode`\}=2 \catcode`\@=11
4382- % We can't do this, because then an actual ^ in a section
4383- % title fails, e.g., @chapter ^ -- exponentiation. --karl, 9jul97.
4384- %\catcode`\^=7 % to see ^^e4 as \"a etc. juha@piuha.ydi.vtt.fi
4385- \raggedbottom % Worry more about breakpoints than the bottom.
5749+ \raggedbottom % Worry more about breakpoints than the bottom.
43865750 \advance\hsize by -\contentsrightmargin % Don't use the full line length.
43875751 %
43885752 % Roman numerals for page numbers.
43895753 \ifnum \pageno>0 \global\pageno = \lastnegativepageno \fi
43905754 }
43915755
5756+% redefined for the two-volume lispref. We always output on
5757+% \jobname.toc even if this is redefined.
5758+%
5759+\def\tocreadfilename{\jobname.toc}
43925760
43935761 % Normal (long) toc.
5762+%
43945763 \def\contents{%
43955764 \startcontents{\putwordTOC}%
4396- \openin 1 \jobname.toc
5765+ \openin 1 \tocreadfilename\space
43975766 \ifeof 1 \else
4398- \input \jobname.toc
5767+ \readtocfile
43995768 \fi
44005769 \vfill \eject
44015770 \contentsalignmacro % in case @setchapternewpage odd is in effect
@@ -4431,9 +5800,9 @@ width0pt\relax} \fi
44315800 \let\numsubsubsecentry = \numsecentry
44325801 \let\appsubsubsecentry = \numsecentry
44335802 \let\unnsubsubsecentry = \numsecentry
4434- \openin 1 \jobname.toc
5803+ \openin 1 \tocreadfilename\space
44355804 \ifeof 1 \else
4436- \input \jobname.toc
5805+ \readtocfile
44375806 \fi
44385807 \closein 1
44395808 \vfill \eject
@@ -4453,7 +5822,7 @@ width0pt\relax} \fi
44535822 % But use \hss just in case.
44545823 % (This space doesn't include the extra space that gets added after
44555824 % the label; that gets put in by \shortchapentry above.)
4456- %
5825+ %
44575826 % We'd like to right-justify chapter numbers, but that looks strange
44585827 % with appendix letters. And right-justifying numbers and
44595828 % left-justifying letters looks strange when there is less than 10
@@ -4478,7 +5847,7 @@ width0pt\relax} \fi
44785847
44795848 % Appendices, in the main contents.
44805849 % Need the word Appendix, and a fixed-size box.
4481-%
5850+%
44825851 \def\appendixbox#1{%
44835852 % We use M since it's probably the widest letter.
44845853 \setbox0 = \hbox{\putwordAppendix{} M}%
@@ -4556,45 +5925,12 @@ width0pt\relax} \fi
45565925 \message{environments,}
45575926 % @foo ... @end foo.
45585927
4559-% @point{}, @result{}, @expansion{}, @print{}, @equiv{}.
4560-%
4561-% Since these characters are used in examples, it should be an even number of
4562-% \tt widths. Each \tt character is 1en, so two makes it 1em.
4563-%
4564-\def\point{$\star$}
4565-\def\result{\leavevmode\raise.15ex\hbox to 1em{\hfil$\Rightarrow$\hfil}}
4566-\def\expansion{\leavevmode\raise.1ex\hbox to 1em{\hfil$\mapsto$\hfil}}
4567-\def\print{\leavevmode\lower.1ex\hbox to 1em{\hfil$\dashv$\hfil}}
4568-\def\equiv{\leavevmode\lower.1ex\hbox to 1em{\hfil$\ptexequiv$\hfil}}
4569-
4570-% The @error{} command.
4571-% Adapted from the TeXbook's \boxit.
4572-%
4573-\newbox\errorbox
4574-%
4575-{\tentt \global\dimen0 = 3em}% Width of the box.
4576-\dimen2 = .55pt % Thickness of rules
4577-% The text. (`r' is open on the right, `e' somewhat less so on the left.)
4578-\setbox0 = \hbox{\kern-.75pt \tensf error\kern-1.5pt}
4579-%
4580-\setbox\errorbox=\hbox to \dimen0{\hfil
4581- \hsize = \dimen0 \advance\hsize by -5.8pt % Space to left+right.
4582- \advance\hsize by -2\dimen2 % Rules.
4583- \vbox{%
4584- \hrule height\dimen2
4585- \hbox{\vrule width\dimen2 \kern3pt % Space to left of text.
4586- \vtop{\kern2.4pt \box0 \kern2.4pt}% Space above/below.
4587- \kern3pt\vrule width\dimen2}% Space to right.
4588- \hrule height\dimen2}
4589- \hfil}
4590-%
4591-\def\error{\leavevmode\lower.7ex\copy\errorbox}
4592-
45935928 % @tex ... @end tex escapes into raw Tex temporarily.
45945929 % One exception: @ is still an escape character, so that @end tex works.
45955930 % But \@ or @@ will get a plain tex @ character.
45965931
45975932 \envdef\tex{%
5933+ \setupmarkupstyle{tex}%
45985934 \catcode `\\=0 \catcode `\{=1 \catcode `\}=2
45995935 \catcode `\$=3 \catcode `\&=4 \catcode `\#=6
46005936 \catcode `\^=7 \catcode `\_=8 \catcode `\~=\active \let~=\tie
@@ -4604,6 +5940,8 @@ width0pt\relax} \fi
46045940 \catcode `\|=\other
46055941 \catcode `\<=\other
46065942 \catcode `\>=\other
5943+ \catcode`\`=\other
5944+ \catcode`\'=\other
46075945 \escapechar=`\\
46085946 %
46095947 \let\b=\ptexb
@@ -4623,6 +5961,8 @@ width0pt\relax} \fi
46235961 \let\/=\ptexslash
46245962 \let\*=\ptexstar
46255963 \let\t=\ptext
5964+ \expandafter \let\csname top\endcsname=\ptextop % outer
5965+ \let\frenchspacing=\plainfrenchspacing
46265966 %
46275967 \def\endldots{\mathinner{\ldots\ldots\ldots\ldots}}%
46285968 \def\enddots{\relax\ifmmode\endldots\else$\mathsurround=0pt \endldots\,$\fi}%
@@ -4651,7 +5991,8 @@ width0pt\relax} \fi
46515991 % start of the next paragraph will insert \parskip.
46525992 %
46535993 \def\aboveenvbreak{{%
4654- % =10000 instead of <10000 because of a special case in \itemzzz, q.v.
5994+ % =10000 instead of <10000 because of a special case in \itemzzz and
5995+ % \sectionheading, q.v.
46555996 \ifnum \lastpenalty=10000 \else
46565997 \advance\envskipamount by \parskip
46575998 \endgraf
@@ -4667,7 +6008,8 @@ width0pt\relax} \fi
46676008
46686009 \let\afterenvbreak = \aboveenvbreak
46696010
4670-% \nonarrowing is a flag. If "set", @lisp etc don't narrow margins.
6011+% \nonarrowing is a flag. If "set", @lisp etc don't narrow margins; it will
6012+% also clear it, so that its embedded environments do the narrowing again.
46716013 \let\nonarrowing=\relax
46726014
46736015 % @cartouche ... @end cartouche: draw rectangle w/rounded corners around
@@ -4704,7 +6046,7 @@ width0pt\relax} \fi
47046046 % each corner char, and rule thickness
47056047 \normbskip=\baselineskip \normpskip=\parskip \normlskip=\lineskip
47066048 % Flag to tell @lisp, etc., not to narrow margin.
4707- \let\nonarrowing=\comment
6049+ \let\nonarrowing = t%
47086050 \vbox\bgroup
47096051 \baselineskip=0pt\parskip=0pt\lineskip=0pt
47106052 \carttop
@@ -4735,6 +6077,7 @@ width0pt\relax} \fi
47356077
47366078 % This macro is called at the beginning of all the @example variants,
47376079 % inside a group.
6080+\newdimen\nonfillparindent
47386081 \def\nonfillstart{%
47396082 \aboveenvbreak
47406083 \hfuzz = 12pt % Don't be fussy
@@ -4742,17 +6085,40 @@ width0pt\relax} \fi
47426085 \let\par = \lisppar % don't ignore blank lines
47436086 \obeylines % each line of input is a line of output
47446087 \parskip = 0pt
6088+ % Turn off paragraph indentation but redefine \indent to emulate
6089+ % the normal \indent.
6090+ \nonfillparindent=\parindent
47456091 \parindent = 0pt
6092+ \let\indent\nonfillindent
6093+ %
47466094 \emergencystretch = 0pt % don't try to avoid overfull boxes
4747- % @cartouche defines \nonarrowing to inhibit narrowing
4748- % at next level down.
47496095 \ifx\nonarrowing\relax
47506096 \advance \leftskip by \lispnarrowing
47516097 \exdentamount=\lispnarrowing
6098+ \else
6099+ \let\nonarrowing = \relax
47526100 \fi
47536101 \let\exdent=\nofillexdent
47546102 }
47556103
6104+\begingroup
6105+\obeyspaces
6106+% We want to swallow spaces (but not other tokens) after the fake
6107+% @indent in our nonfill-environments, where spaces are normally
6108+% active and set to @tie, resulting in them not being ignored after
6109+% @indent.
6110+\gdef\nonfillindent{\futurelet\temp\nonfillindentcheck}%
6111+\gdef\nonfillindentcheck{%
6112+\ifx\temp %
6113+\expandafter\nonfillindentgobble%
6114+\else%
6115+\leavevmode\nonfillindentbox%
6116+\fi%
6117+}%
6118+\endgroup
6119+\def\nonfillindentgobble#1{\nonfillindent}
6120+\def\nonfillindentbox{\hbox to \nonfillparindent{\hss}}
6121+
47566122 % If you want all examples etc. small: @set dispenvsize small.
47576123 % If you want even small examples the full size: @set dispenvsize nosmall.
47586124 % This affects the following displayed environments:
@@ -4763,12 +6129,18 @@ width0pt\relax} \fi
47636129 \let\SETdispenvsize\relax
47646130 \def\setnormaldispenv{%
47656131 \ifx\SETdispenvsize\smallword
6132+ % end paragraph for sake of leading, in case document has no blank
6133+ % line. This is redundant with what happens in \aboveenvbreak, but
6134+ % we need to do it before changing the fonts, and it's inconvenient
6135+ % to change the fonts afterward.
6136+ \ifnum \lastpenalty=10000 \else \endgraf \fi
47666137 \smallexamplefonts \rm
47676138 \fi
47686139 }
47696140 \def\setsmalldispenv{%
47706141 \ifx\SETdispenvsize\nosmallword
47716142 \else
6143+ \ifnum \lastpenalty=10000 \else \endgraf \fi
47726144 \smallexamplefonts \rm
47736145 \fi
47746146 }
@@ -4795,11 +6167,10 @@ width0pt\relax} \fi
47956167 %
47966168 \maketwodispenvs {lisp}{example}{%
47976169 \nonfillstart
4798- \tt
6170+ \tt\setupmarkupstyle{example}%
47996171 \let\kbdfont = \kbdexamplefont % Allow @kbd to do something special.
48006172 \gobble % eat return
48016173 }
4802-
48036174 % @display/@smalldisplay: same as @lisp except keep current font.
48046175 %
48056176 \makedispenv {display}{%
@@ -4834,12 +6205,36 @@ width0pt\relax} \fi
48346205 \let\Eflushright = \afterenvbreak
48356206
48366207
6208+% @raggedright does more-or-less normal line breaking but no right
6209+% justification. From plain.tex.
6210+\envdef\raggedright{%
6211+ \rightskip0pt plus2em \spaceskip.3333em \xspaceskip.5em\relax
6212+}
6213+\let\Eraggedright\par
6214+
6215+\envdef\raggedleft{%
6216+ \parindent=0pt \leftskip0pt plus2em
6217+ \spaceskip.3333em \xspaceskip.5em \parfillskip=0pt
6218+ \hbadness=10000 % Last line will usually be underfull, so turn off
6219+ % badness reporting.
6220+}
6221+\let\Eraggedleft\par
6222+
6223+\envdef\raggedcenter{%
6224+ \parindent=0pt \rightskip0pt plus1em \leftskip0pt plus1em
6225+ \spaceskip.3333em \xspaceskip.5em \parfillskip=0pt
6226+ \hbadness=10000 % Last line will usually be underfull, so turn off
6227+ % badness reporting.
6228+}
6229+\let\Eraggedcenter\par
6230+
6231+
48376232 % @quotation does normal linebreaking (hence we can't use \nonfillstart)
48386233 % and narrows the margins. We keep \parskip nonzero in general, since
48396234 % we're doing normal filling. So, when using \aboveenvbreak and
48406235 % \afterenvbreak, temporarily make \parskip 0.
48416236 %
4842-\envdef\quotation{%
6237+\def\quotationstart{%
48436238 {\parskip=0pt \aboveenvbreak}% because \aboveenvbreak inserts \parskip
48446239 \parindent=0pt
48456240 %
@@ -4848,14 +6243,26 @@ width0pt\relax} \fi
48486243 \advance\leftskip by \lispnarrowing
48496244 \advance\rightskip by \lispnarrowing
48506245 \exdentamount = \lispnarrowing
6246+ \else
48516247 \let\nonarrowing = \relax
48526248 \fi
48536249 \parsearg\quotationlabel
48546250 }
48556251
6252+\envdef\quotation{%
6253+ \setnormaldispenv
6254+ \quotationstart
6255+}
6256+
6257+\envdef\smallquotation{%
6258+ \setsmalldispenv
6259+ \quotationstart
6260+}
6261+\let\Esmallquotation = \Equotation
6262+
48566263 % We have retained a nonzero parskip for the environment, since we're
48576264 % doing normal filling.
4858-%
6265+%
48596266 \def\Equotation{%
48606267 \par
48616268 \ifx\quotationauthor\undefined\else
@@ -4888,18 +6295,16 @@ width0pt\relax} \fi
48886295 \do\ \do\\\do\{\do\}\do\$\do\&%
48896296 \do\#\do\^\do\^^K\do\_\do\^^A\do\%\do\~%
48906297 \do\<\do\>\do\|\do\@\do+\do\"%
6298+ % Don't do the quotes -- if we do, @set txicodequoteundirected and
6299+ % @set txicodequotebacktick will not have effect on @verb and
6300+ % @verbatim, and ?` and !` ligatures won't get disabled.
6301+ %\do\`\do\'%
48916302 }
48926303 %
48936304 % [Knuth] p. 380
48946305 \def\uncatcodespecials{%
48956306 \def\do##1{\catcode`##1=\other}\dospecials}
48966307 %
4897-% [Knuth] pp. 380,381,391
4898-% Disable Spanish ligatures ?` and !` of \tt font
4899-\begingroup
4900- \catcode`\`=\active\gdef`{\relax\lq}
4901-\endgroup
4902-%
49036308 % Setup for the @verb command.
49046309 %
49056310 % Eight spaces for a tab
@@ -4911,7 +6316,7 @@ width0pt\relax} \fi
49116316 \def\setupverb{%
49126317 \tt % easiest (and conventionally used) font for verbatim
49136318 \def\par{\leavevmode\endgraf}%
4914- \catcode`\`=\active
6319+ \setupmarkupstyle{verb}%
49156320 \tabeightspaces
49166321 % Respect line breaks,
49176322 % print special symbols as themselves, and
@@ -4926,6 +6331,7 @@ width0pt\relax} \fi
49266331 \newdimen\tabw \setbox0=\hbox{\tt\space} \tabw=8\wd0 % tab amount
49276332 %
49286333 \def\starttabbox{\setbox0=\hbox\bgroup}
6334+%
49296335 \begingroup
49306336 \catcode`\^^I=\active
49316337 \gdef\tabexpand{%
@@ -4939,14 +6345,16 @@ width0pt\relax} \fi
49396345 }%
49406346 }
49416347 \endgroup
6348+
6349+% start the verbatim environment.
49426350 \def\setupverbatim{%
6351+ \let\nonarrowing = t%
49436352 \nonfillstart
4944- \advance\leftskip by -\defbodyindent
49456353 % Easiest (and conventionally used) font for verbatim
49466354 \tt
49476355 \def\par{\leavevmode\egroup\box0\endgraf}%
4948- \catcode`\`=\active
49496356 \tabexpand
6357+ \setupmarkupstyle{verbatim}%
49506358 % Respect line breaks,
49516359 % print special symbols as themselves, and
49526360 % make each space count
@@ -5006,14 +6414,14 @@ width0pt\relax} \fi
50066414 {%
50076415 \makevalueexpandable
50086416 \setupverbatim
6417+ \indexnofonts % Allow `@@' and other weird things in file names.
50096418 \input #1
50106419 \afterenvbreak
50116420 }%
50126421 }
50136422
50146423 % @copying ... @end copying.
5015-% Save the text away for @insertcopying later. Many commands won't be
5016-% allowed in this context, but that's ok.
6424+% Save the text away for @insertcopying later.
50176425 %
50186426 % We save the uninterpreted tokens, rather than creating a box.
50196427 % Saving the text in a box would be much easier, but then all the
@@ -5022,84 +6430,45 @@ width0pt\relax} \fi
50226430 % file; b) letting users define the frontmatter in as flexible order as
50236431 % possible is very desirable.
50246432 %
5025-\def\copying{\begingroup
5026- % Define a command to swallow text until we reach `@end copying'.
5027- % \ is the escape char in this texinfo.tex file, so it is the
5028- % delimiter for the command; @ will be the escape char when we read
5029- % it, but that doesn't matter.
5030- \long\def\docopying##1\end copying{\gdef\copyingtext{##1}\enddocopying}%
5031- %
5032- % We must preserve ^^M's in the input file; see \insertcopying below.
5033- \catcode`\^^M = \active
5034- \docopying
5035-}
5036-
5037-% What we do to finish off the copying text.
5038-%
5039-\def\enddocopying{\endgroup\ignorespaces}
5040-
5041-% @insertcopying. Here we must play games with ^^M's. On the one hand,
5042-% we need them to delimit commands such as `@end quotation', so they
5043-% must be active. On the other hand, we certainly don't want every
5044-% end-of-line to be a \par, as would happen with the normal active
5045-% definition of ^^M. On the third hand, two ^^M's in a row should still
5046-% generate a \par.
5047-%
5048-% Our approach is to make ^^M insert a space and a penalty1 normally;
5049-% then it can also check if \lastpenalty=1. If it does, then manually
5050-% do \par.
5051-%
5052-% This messes up the normal definitions of @c[omment], so we redefine
5053-% it. Similarly for @ignore. (These commands are used in the gcc
5054-% manual for man page generation.)
5055-%
5056-% Seems pretty fragile, most line-oriented commands will presumably
5057-% fail, but for the limited use of getting the copying text (which
5058-% should be quite simple) inserted, we can hope it's ok.
5059-%
5060-{\catcode`\^^M=\active %
5061-\gdef\insertcopying{\begingroup %
5062- \parindent = 0pt % looks wrong on title page
5063- \def^^M{%
5064- \ifnum \lastpenalty=1 %
5065- \par %
5066- \else %
5067- \space \penalty 1 %
5068- \fi %
5069- }%
5070- %
5071- % Fix @c[omment] for catcode 13 ^^M's.
5072- \def\c##1^^M{\ignorespaces}%
5073- \let\comment = \c %
5074- %
5075- % Don't bother jumping through all the hoops that \doignore does, it
5076- % would be very hard since the catcodes are already set.
5077- \long\def\ignore##1\end ignore{\ignorespaces}%
5078- %
5079- \copyingtext %
5080-\endgroup}%
6433+\def\copying{\checkenv{}\begingroup\scanargctxt\docopying}
6434+\def\docopying#1@end copying{\endgroup\def\copyingtext{#1}}
6435+%
6436+\def\insertcopying{%
6437+ \begingroup
6438+ \parindent = 0pt % paragraph indentation looks wrong on title page
6439+ \scanexp\copyingtext
6440+ \endgroup
50816441 }
50826442
6443+
50836444 \message{defuns,}
50846445 % @defun etc.
50856446
50866447 \newskip\defbodyindent \defbodyindent=.4in
50876448 \newskip\defargsindent \defargsindent=50pt
50886449 \newskip\deflastargmargin \deflastargmargin=18pt
6450+\newcount\defunpenalty
50896451
50906452 % Start the processing of @deffn:
50916453 \def\startdefun{%
50926454 \ifnum\lastpenalty<10000
50936455 \medbreak
6456+ \defunpenalty=10003 % Will keep this @deffn together with the
6457+ % following @def command, see below.
50946458 \else
50956459 % If there are two @def commands in a row, we'll have a \nobreak,
50966460 % which is there to keep the function description together with its
50976461 % header. But if there's nothing but headers, we need to allow a
5098- % break somewhere. Check for penalty 10002 (inserted by
5099- % \defargscommonending) instead of 10000, since the sectioning
5100- % commands insert a \penalty10000, and we don't want to allow a break
5101- % between a section heading and a defun.
5102- \ifnum\lastpenalty=10002 \penalty2000 \fi
6462+ % break somewhere. Check specifically for penalty 10002, inserted
6463+ % by \printdefunline, instead of 10000, since the sectioning
6464+ % commands also insert a nobreak penalty, and we don't want to allow
6465+ % a break between a section heading and a defun.
6466+ %
6467+ % As a minor refinement, we avoid "club" headers by signalling
6468+ % with penalty of 10003 after the very first @deffn in the
6469+ % sequence (see above), and penalty of 10002 after any following
6470+ % @def command.
6471+ \ifnum\lastpenalty=10002 \penalty2000 \else \defunpenalty=10002 \fi
51036472 %
51046473 % Similarly, after a section heading, do not allow a break.
51056474 % But do insert the glue.
@@ -5117,7 +6486,7 @@ width0pt\relax} \fi
51176486 %
51186487 % As above, allow line break if we have multiple x headers in a row.
51196488 % It's not a great place, though.
5120- \ifnum\lastpenalty=10002 \penalty3000 \fi
6489+ \ifnum\lastpenalty=10002 \penalty3000 \else \defunpenalty=10002 \fi
51216490 %
51226491 % And now, it's time to reuse the body of the original defun:
51236492 \expandafter\gobbledefun#1%
@@ -5135,7 +6504,7 @@ width0pt\relax} \fi
51356504 \advance\rightskip by 0pt plus 1fil
51366505 \endgraf
51376506 \nobreak\vskip -\parskip
5138- \penalty 10002 % signal to \startdefun and \dodefunx
6507+ \penalty\defunpenalty % signal to \startdefun and \dodefunx
51396508 % Some of the @defun-type tags do not enable magic parentheses,
51406509 % rendering the following check redundant. But we don't optimize.
51416510 \checkparencounts
@@ -5145,7 +6514,7 @@ width0pt\relax} \fi
51456514 \def\Edefun{\endgraf\medbreak}
51466515
51476516 % \makedefun{deffn} creates \deffn, \deffnx and \Edeffn;
5148-% the only thing remainnig is to define \deffnheader.
6517+% the only thing remaining is to define \deffnheader.
51496518 %
51506519 \def\makedefun#1{%
51516520 \expandafter\let\csname E#1\endcsname = \Edefun
@@ -5258,7 +6627,7 @@ width0pt\relax} \fi
52586627 % #1 is the category, such as "Function".
52596628 % #2 is the return type, if any.
52606629 % #3 is the function name.
5261-%
6630+%
52626631 % We are followed by (but not passed) the arguments, if any.
52636632 %
52646633 \def\defname#1#2#3{%
@@ -5316,15 +6685,15 @@ width0pt\relax} \fi
53166685 % tt for the name. This is because literal text is sometimes needed in
53176686 % the argument list (groff manual), and ttsl and tt are not very
53186687 % distinguishable. Prevent hyphenation at `-' chars.
5319-%
6688+%
53206689 \def\defunargs#1{%
5321- % use sl by default (not ttsl),
6690+ % use sl by default (not ttsl),
53226691 % tt for the names.
53236692 \df \sl \hyphenchar\font=0
53246693 %
53256694 % On the other hand, if an argument has two dashes (for instance), we
53266695 % want a way to get ttsl. Let's try @var for that.
5327- \let\var=\ttslanted
6696+ \def\var##1{{\setupmarkupstyle{var}\ttslanted{##1}}}%
53286697 #1%
53296698 \sl\hyphenchar\font=45
53306699 }
@@ -5404,12 +6773,14 @@ width0pt\relax} \fi
54046773 \ifnum\parencount=0 \else \badparencount \fi
54056774 \ifnum\brackcount=0 \else \badbrackcount \fi
54066775 }
6776+% these should not use \errmessage; the glibc manual, at least, actually
6777+% has such constructs (when documenting function pointers).
54076778 \def\badparencount{%
5408- \errmessage{Unbalanced parentheses in @def}%
6779+ \message{Warning: unbalanced parentheses in @def...}%
54096780 \global\parencount=0
54106781 }
54116782 \def\badbrackcount{%
5412- \errmessage{Unbalanced square braces in @def}%
6783+ \message{Warning: unbalanced square brackets in @def...}%
54136784 \global\brackcount=0
54146785 }
54156786
@@ -5422,7 +6793,7 @@ width0pt\relax} \fi
54226793 \ifx\eTeXversion\undefined
54236794 \newwrite\macscribble
54246795 \def\scantokens#1{%
5425- \toks0={#1\endinput}%
6796+ \toks0={#1}%
54266797 \immediate\openout\macscribble=\jobname.tmp
54276798 \immediate\write\macscribble{\the\toks0}%
54286799 \immediate\closeout\macscribble
@@ -5435,32 +6806,53 @@ width0pt\relax} \fi
54356806 \newlinechar`\^^M
54366807 \let\xeatspaces\eatspaces
54376808 % Undo catcode changes of \startcontents and \doprintindex
5438- \catcode`\@=0 \catcode`\\=\other \escapechar=`\@
6809+ % When called from @insertcopying or (short)caption, we need active
6810+ % backslash to get it printed correctly. Previously, we had
6811+ % \catcode`\\=\other instead. We'll see whether a problem appears
6812+ % with macro expansion. --kasal, 19aug04
6813+ \catcode`\@=0 \catcode`\\=\active \escapechar=`\@
54396814 % ... and \example
54406815 \spaceisspace
54416816 %
54426817 % Append \endinput to make sure that TeX does not see the ending newline.
5443- %
54446818 % I've verified that it is necessary both for e-TeX and for ordinary TeX
54456819 % --kasal, 29nov03
54466820 \scantokens{#1\endinput}%
54476821 \endgroup
54486822 }
54496823
6824+\def\scanexp#1{%
6825+ \edef\temp{\noexpand\scanmacro{#1}}%
6826+ \temp
6827+}
6828+
54506829 \newcount\paramno % Count of parameters
54516830 \newtoks\macname % Macro name
54526831 \newif\ifrecursive % Is it recursive?
5453-\def\macrolist{} % List of all defined macros in the form
5454- % \do\macro1\do\macro2...
6832+
6833+% List of all defined macros in the form
6834+% \definedummyword\macro1\definedummyword\macro2...
6835+% Currently is also contains all @aliases; the list can be split
6836+% if there is a need.
6837+\def\macrolist{}
6838+
6839+% Add the macro to \macrolist
6840+\def\addtomacrolist#1{\expandafter \addtomacrolistxxx \csname#1\endcsname}
6841+\def\addtomacrolistxxx#1{%
6842+ \toks0 = \expandafter{\macrolist\definedummyword#1}%
6843+ \xdef\macrolist{\the\toks0}%
6844+}
54556845
54566846 % Utility routines.
5457-% This does \let #1 = #2, except with \csnames.
6847+% This does \let #1 = #2, with \csnames; that is,
6848+% \let \csname#1\endcsname = \csname#2\endcsname
6849+% (except of course we have to play expansion games).
6850+%
54586851 \def\cslet#1#2{%
5459-\expandafter\expandafter
5460-\expandafter\let
5461-\expandafter\expandafter
5462-\csname#1\endcsname
5463-\csname#2\endcsname}
6852+ \expandafter\let
6853+ \csname#1\expandafter\endcsname
6854+ \csname#2\endcsname
6855+}
54646856
54656857 % Trim leading and trailing spaces off a string.
54666858 % Concepts from aro-bend problem 15 (see CTAN).
@@ -5483,34 +6875,45 @@ width0pt\relax} \fi
54836875 % all characters are catcode 10, 11 or 12, except \ which is active
54846876 % (as in normal texinfo). It is necessary to change the definition of \.
54856877
6878+% Non-ASCII encodings make 8-bit characters active, so un-activate
6879+% them to avoid their expansion. Must do this non-globally, to
6880+% confine the change to the current group.
6881+
54866882 % It's necessary to have hard CRs when the macro is executed. This is
54876883 % done by making ^^M (\endlinechar) catcode 12 when reading the macro
54886884 % body, and then making it the \newlinechar in \scanmacro.
54896885
5490-\def\macrobodyctxt{%
5491- \catcode`\~=\other
6886+\def\scanctxt{%
6887+ \catcode`\"=\other
6888+ \catcode`\+=\other
6889+ \catcode`\<=\other
6890+ \catcode`\>=\other
6891+ \catcode`\@=\other
54926892 \catcode`\^=\other
54936893 \catcode`\_=\other
54946894 \catcode`\|=\other
5495- \catcode`\<=\other
5496- \catcode`\>=\other
5497- \catcode`\+=\other
6895+ \catcode`\~=\other
6896+ \ifx\declaredencoding\ascii \else \setnonasciicharscatcodenonglobal\other \fi
6897+}
6898+
6899+\def\scanargctxt{%
6900+ \scanctxt
6901+ \catcode`\\=\other
6902+ \catcode`\^^M=\other
6903+}
6904+
6905+\def\macrobodyctxt{%
6906+ \scanctxt
54986907 \catcode`\{=\other
54996908 \catcode`\}=\other
5500- \catcode`\@=\other
55016909 \catcode`\^^M=\other
5502- \usembodybackslash}
6910+ \usembodybackslash
6911+}
55036912
55046913 \def\macroargctxt{%
5505- \catcode`\~=\other
5506- \catcode`\^=\other
5507- \catcode`\_=\other
5508- \catcode`\|=\other
5509- \catcode`\<=\other
5510- \catcode`\>=\other
5511- \catcode`\+=\other
5512- \catcode`\@=\other
5513- \catcode`\\=\other}
6914+ \scanctxt
6915+ \catcode`\\=\other
6916+}
55146917
55156918 % \mbodybackslash is the definition of \ in @macro bodies.
55166919 % It maps \foo\ => \csname macarg.foo\endcsname => #N
@@ -5541,10 +6944,7 @@ width0pt\relax} \fi
55416944 \else \errmessage{Macro name \the\macname\space already defined}\fi
55426945 \global\cslet{macsave.\the\macname}{\the\macname}%
55436946 \global\expandafter\let\csname ismacro.\the\macname\endcsname=1%
5544- % Add the macroname to \macrolist
5545- \toks0 = \expandafter{\macrolist\do}%
5546- \xdef\macrolist{\the\toks0
5547- \expandafter\noexpand\csname\the\macname\endcsname}%
6947+ \addtomacrolist{\the\macname}%
55486948 \fi
55496949 \begingroup \macrobodyctxt
55506950 \ifrecursive \expandafter\parsermacbody
@@ -5558,7 +6958,7 @@ width0pt\relax} \fi
55586958 % Remove the macro name from \macrolist:
55596959 \begingroup
55606960 \expandafter\let\csname#1\endcsname \relax
5561- \let\do\unmacrodo
6961+ \let\definedummyword\unmacrodo
55626962 \xdef\macrolist{\macrolist}%
55636963 \endgroup
55646964 \else
@@ -5570,10 +6970,10 @@ width0pt\relax} \fi
55706970 % macro definitions that have been changed to \relax.
55716971 %
55726972 \def\unmacrodo#1{%
5573- \ifx#1\relax
6973+ \ifx #1\relax
55746974 % remove this
55756975 \else
5576- \noexpand\do \noexpand #1%
6976+ \noexpand\definedummyword \noexpand#1%
55776977 \fi
55786978 }
55796979
@@ -5686,16 +7086,11 @@ width0pt\relax} \fi
56867086 % {. If so it reads up to the closing }, if not, it reads the whole
56877087 % line. Whatever was read is then fed to the next control sequence
56887088 % as an argument (by \parsebrace or \parsearg)
5689-\def\braceorline#1{\let\next=#1\futurelet\nchar\braceorlinexxx}
7089+\def\braceorline#1{\let\macnamexxx=#1\futurelet\nchar\braceorlinexxx}
56907090 \def\braceorlinexxx{%
56917091 \ifx\nchar\bgroup\else
56927092 \expandafter\parsearg
5693- \fi \next}
5694-
5695-% We mant to disable all macros during \shipout so that they are not
5696-% expanded by \write.
5697-\def\turnoffmacros{\begingroup \def\do##1{\let\noexpand##1=\relax}%
5698- \edef\next{\macrolist}\expandafter\endgroup\next}
7093+ \fi \macnamexxx}
56997094
57007095
57017096 % @alias.
@@ -5706,6 +7101,7 @@ width0pt\relax} \fi
57067101 \def\aliasyyy #1=#2\relax{%
57077102 {%
57087103 \expandafter\let\obeyedspace=\empty
7104+ \addtomacrolist{#1}%
57097105 \xdef\next{\global\let\makecsname{#1}=\makecsname{#2}}%
57107106 }%
57117107 \next
@@ -5715,7 +7111,6 @@ width0pt\relax} \fi
57157111 \message{cross references,}
57167112
57177113 \newwrite\auxfile
5718-
57197114 \newif\ifhavexrefs % True if xref values are known.
57207115 \newif\ifwarnedxrefs % True if we warned once that they aren't known.
57217116
@@ -5725,15 +7120,24 @@ width0pt\relax} \fi
57257120 node \samp{\ignorespaces#1{}}}
57267121
57277122 % @node's only job in TeX is to define \lastnode, which is used in
5728-% cross-references.
5729-\parseargdef\node{\checkenv{}\nodexxx #1,\finishnodeparse}
5730-\def\nodexxx#1,#2\finishnodeparse{\gdef\lastnode{#1}}
7123+% cross-references. The @node line might or might not have commas, and
7124+% might or might not have spaces before the first comma, like:
7125+% @node foo , bar , ...
7126+% We don't want such trailing spaces in the node name.
7127+%
7128+\parseargdef\node{\checkenv{}\donode #1 ,\finishnodeparse}
7129+%
7130+% also remove a trailing comma, in case of something like this:
7131+% @node Help-Cross, , , Cross-refs
7132+\def\donode#1 ,#2\finishnodeparse{\dodonode #1,\finishnodeparse}
7133+\def\dodonode#1,#2\finishnodeparse{\gdef\lastnode{#1}}
7134+
57317135 \let\nwnode=\node
57327136 \let\lastnode=\empty
57337137
57347138 % Write a cross-reference definition for the current node. #1 is the
57357139 % type (Ynumbered, Yappendix, Ynothing).
5736-%
7140+%
57377141 \def\donoderef#1{%
57387142 \ifx\lastnode\empty\else
57397143 \setref{\lastnode}{#1}%
@@ -5751,31 +7155,29 @@ width0pt\relax} \fi
57517155
57527156 % \setref{NAME}{SNT} defines a cross-reference point NAME (a node or an
57537157 % anchor), which consists of three parts:
5754-% 1) NAME-title - the current sectioning name taken from \thissection,
7158+% 1) NAME-title - the current sectioning name taken from \lastsection,
57557159 % or the anchor name.
57567160 % 2) NAME-snt - section number and type, passed as the SNT arg, or
57577161 % empty for anchors.
57587162 % 3) NAME-pg - the page number.
5759-%
7163+%
57607164 % This is called from \donoderef, \anchor, and \dofloat. In the case of
57617165 % floats, there is an additional part, which is not written here:
57627166 % 4) NAME-lof - the text as it should appear in a @listoffloats.
5763-%
7167+%
57647168 \def\setref#1#2{%
57657169 \pdfmkdest{#1}%
57667170 \iflinks
57677171 {%
57687172 \atdummies % preserve commands, but don't expand them
5769- \turnoffactive
5770- \otherbackslash
57717173 \edef\writexrdef##1##2{%
57727174 \write\auxfile{@xrdef{#1-% #1 of \setref, expanded by the \edef
57737175 ##1}{##2}}% these are parameters of \writexrdef
57747176 }%
5775- \toks0 = \expandafter{\thissection}%
7177+ \toks0 = \expandafter{\lastsection}%
57767178 \immediate \writexrdef{title}{\the\toks0 }%
57777179 \immediate \writexrdef{snt}{\csname #2\endcsname}% \Ynumbered etc.
5778- \writexrdef{pg}{\folio}% will be written later, during \shipout
7180+ \safewhatsit{\writexrdef{pg}{\folio}}% will be written later, during \shipout
57797181 }%
57807182 \fi
57817183 }
@@ -5819,18 +7221,25 @@ width0pt\relax} \fi
58197221 %
58207222 % Make link in pdf output.
58217223 \ifpdf
5822- \leavevmode
5823- \getfilename{#4}%
5824- {\turnoffactive \otherbackslash
7224+ {\indexnofonts
7225+ \turnoffactive
7226+ % This expands tokens, so do it after making catcode changes, so _
7227+ % etc. don't get their TeX definitions.
7228+ \getfilename{#4}%
7229+ %
7230+ % See comments at \activebackslashdouble.
7231+ {\activebackslashdouble \xdef\pdfxrefdest{#1}%
7232+ \backslashparens\pdfxrefdest}%
7233+ %
7234+ \leavevmode
7235+ \startlink attr{/Border [0 0 0]}%
58257236 \ifnum\filenamelength>0
5826- \startlink attr{/Border [0 0 0]}%
5827- goto file{\the\filename.pdf} name{#1}%
7237+ goto file{\the\filename.pdf} name{\pdfxrefdest}%
58287238 \else
5829- \startlink attr{/Border [0 0 0]}%
5830- goto name{\pdfmkpgn{#1}}%
7239+ goto name{\pdfmkpgn{\pdfxrefdest}}%
58317240 \fi
58327241 }%
5833- \linkcolor
7242+ \setcolor{\linkcolor}%
58347243 \fi
58357244 %
58367245 % Float references are printed completely differently: "Figure 1.2"
@@ -5841,7 +7250,6 @@ width0pt\relax} \fi
58417250 % include an _ in the xref name, etc.
58427251 \indexnofonts
58437252 \turnoffactive
5844- \otherbackslash
58457253 \expandafter\global\expandafter\let\expandafter\Xthisreftitle
58467254 \csname XR#1-title\endcsname
58477255 }%
@@ -5849,19 +7257,19 @@ width0pt\relax} \fi
58497257 % If the user specified the print name (third arg) to the ref,
58507258 % print it instead of our usual "Figure 1.2".
58517259 \ifdim\wd0 = 0pt
5852- \refx{#1-snt}%
7260+ \refx{#1-snt}{}%
58537261 \else
58547262 \printedrefname
58557263 \fi
58567264 %
58577265 % if the user also gave the printed manual name (fifth arg), append
5858- % "in MANUALNAME".
7266+ % "in MANUALNAME".
58597267 \ifdim \wd1 > 0pt
58607268 \space \putwordin{} \cite{\printedmanual}%
58617269 \fi
58627270 \else
58637271 % node/anchor (non-float) references.
5864- %
7272+ %
58657273 % If we use \unhbox0 and \unhbox1 to print the node names, TeX does not
58667274 % insert empty discretionaries after hyphens, which means that it will
58677275 % not find a line break at a hyphen in a node names. Since some manuals
@@ -5869,14 +7277,14 @@ width0pt\relax} \fi
58697277 % is a loss. Therefore, we give the text of the node name again, so it
58707278 % is as if TeX is seeing it for the first time.
58717279 \ifdim \wd1 > 0pt
5872- \putwordsection{} ``\printedrefname'' \putwordin{} \cite{\printedmanual}%
7280+ \putwordSection{} ``\printedrefname'' \putwordin{} \cite{\printedmanual}%
58737281 \else
58747282 % _ (for example) has to be the character _ for the purposes of the
58757283 % control sequence corresponding to the node, but it has to expand
58767284 % into the usual \leavevmode...\vrule stuff for purposes of
58777285 % printing. So we \turnoffactive for the \refx-snt, back on for the
58787286 % printing, back off for the \refx-pg.
5879- {\turnoffactive \otherbackslash
7287+ {\turnoffactive
58807288 % Only output a following space if the -snt ref is nonempty; for
58817289 % @unnumbered and @anchor, it won't be.
58827290 \setbox2 = \hbox{\ignorespaces \refx{#1-snt}{}}%
@@ -5889,7 +7297,7 @@ width0pt\relax} \fi
58897297 ,\space
58907298 %
58917299 % output the `page 3'.
5892- \turnoffactive \otherbackslash \putwordpage\tie\refx{#1-pg}{}%
7300+ \turnoffactive \putwordpage\tie\refx{#1-pg}{}%
58937301 \fi
58947302 \fi
58957303 \endlink
@@ -5965,14 +7373,22 @@ width0pt\relax} \fi
59657373 % collisions). But if this is a float type, we have more work to do.
59667374 %
59677375 \def\xrdef#1#2{%
5968- \expandafter\gdef\csname XR#1\endcsname{#2}% remember this xref value.
7376+ {% The node name might contain 8-bit characters, which in our current
7377+ % implementation are changed to commands like @'e. Don't let these
7378+ % mess up the control sequence name.
7379+ \indexnofonts
7380+ \turnoffactive
7381+ \xdef\safexrefname{#1}%
7382+ }%
7383+ %
7384+ \expandafter\gdef\csname XR\safexrefname\endcsname{#2}% remember this xref
59697385 %
59707386 % Was that xref control sequence that we just defined for a float?
5971- \expandafter\iffloat\csname XR#1\endcsname
7387+ \expandafter\iffloat\csname XR\safexrefname\endcsname
59727388 % it was a float, and we have the (safe) float type in \iffloattype.
59737389 \expandafter\let\expandafter\floatlist
59747390 \csname floatlist\iffloattype\endcsname
5975- %
7391+ %
59767392 % Is this the first time we've seen this float type?
59777393 \expandafter\ifx\floatlist\relax
59787394 \toks0 = {\do}% yes, so just \do
@@ -5983,22 +7399,23 @@ width0pt\relax} \fi
59837399 %
59847400 % Remember this xref in the control sequence \floatlistFLOATTYPE,
59857401 % for later use in \listoffloats.
5986- \expandafter\xdef\csname floatlist\iffloattype\endcsname{\the\toks0{#1}}%
7402+ \expandafter\xdef\csname floatlist\iffloattype\endcsname{\the\toks0
7403+ {\safexrefname}}%
59877404 \fi
59887405 }
59897406
59907407 % Read the last existing aux file, if any. No error if none exists.
5991-%
7408+%
59927409 \def\tryauxfile{%
59937410 \openin 1 \jobname.aux
59947411 \ifeof 1 \else
5995- \readauxfile
7412+ \readdatafile{aux}%
59967413 \global\havexrefstrue
59977414 \fi
59987415 \closein 1
59997416 }
60007417
6001-\def\readauxfile{\begingroup
7418+\def\setupdatafile{%
60027419 \catcode`\^^@=\other
60037420 \catcode`\^^A=\other
60047421 \catcode`\^^B=\other
@@ -6067,11 +7484,11 @@ width0pt\relax} \fi
60677484 %
60687485 % Make the characters 128-255 be printing characters.
60697486 {%
6070- \count 1=128
7487+ \count1=128
60717488 \def\loop{%
6072- \catcode\count 1=\other
6073- \advance\count 1 by 1
6074- \ifnum \count 1<256 \loop \fi
7489+ \catcode\count1=\other
7490+ \advance\count1 by 1
7491+ \ifnum \count1<256 \loop \fi
60757492 }%
60767493 }%
60777494 %
@@ -6079,8 +7496,12 @@ width0pt\relax} \fi
60797496 \catcode`\{=1
60807497 \catcode`\}=2
60817498 \catcode`\@=0
6082- %
6083- \input \jobname.aux
7499+}
7500+
7501+\def\readdatafile#1{%
7502+\begingroup
7503+ \setupdatafile
7504+ \input\jobname.#1
60847505 \endgroup}
60857506
60867507
@@ -6166,7 +7587,7 @@ width0pt\relax} \fi
61667587 % In case a @footnote appears in a vbox, save the footnote text and create
61677588 % the real \insert just after the vbox finished. Otherwise, the insertion
61687589 % would be lost.
6169-% Similarily, if a @footnote appears inside an alignment, save the footnote
7590+% Similarly, if a @footnote appears inside an alignment, save the footnote
61707591 % text to a box and make the \insert when a row of the table is finished.
61717592 % And the same can be done for other insert classes. --kasal, 16nov03.
61727593
@@ -6270,15 +7691,19 @@ width0pt\relax} \fi
62707691 % If the image is by itself, center it.
62717692 \ifvmode
62727693 \imagevmodetrue
6273- \nobreak\bigskip
7694+ \nobreak\medskip
62747695 % Usually we'll have text after the image which will insert
62757696 % \parskip glue, so insert it here too to equalize the space
62767697 % above and below.
62777698 \nobreak\vskip\parskip
62787699 \nobreak
6279- \line\bgroup\hss
62807700 \fi
62817701 %
7702+ % Leave vertical mode so that indentation from an enclosing
7703+ % environment such as @quotation is respected. On the other hand, if
7704+ % it's at the top level, we don't want the normal paragraph indentation.
7705+ \noindent
7706+ %
62827707 % Output the image.
62837708 \ifpdf
62847709 \dopdfimage{#1}{#2}{#3}%
@@ -6289,26 +7714,29 @@ width0pt\relax} \fi
62897714 \epsfbox{#1.eps}%
62907715 \fi
62917716 %
6292- \ifimagevmode \hss \egroup \bigbreak \fi % space after the image
7717+ \ifimagevmode \medskip \fi % space after the standalone image
62937718 \endgroup}
62947719
62957720
6296-% @float FLOATTYPE,LOC ... @end float for displayed figures, tables, etc.
6297-% We don't actually implement floating yet, we just plop the float "here".
6298-% But it seemed the best name for the future.
6299-%
6300-\envparseargdef\float{\dofloat #1,,,\finish}
7721+% @float FLOATTYPE,LABEL,LOC ... @end float for displayed figures, tables,
7722+% etc. We don't actually implement floating yet, we always include the
7723+% float "here". But it seemed the best name for the future.
7724+%
7725+\envparseargdef\float{\eatcommaspace\eatcommaspace\dofloat#1, , ,\finish}
7726+
7727+% There may be a space before second and/or third parameter; delete it.
7728+\def\eatcommaspace#1, {#1,}
63017729
63027730 % #1 is the optional FLOATTYPE, the text label for this float, typically
63037731 % "Figure", "Table", "Example", etc. Can't contain commas. If omitted,
63047732 % this float will not be numbered and cannot be referred to.
6305-%
7733+%
63067734 % #2 is the optional xref label. Also must be present for the float to
63077735 % be referable.
6308-%
7736+%
63097737 % #3 is the optional positioning argument; for now, it is ignored. It
63107738 % will somehow specify the positions allowed to float to (here, top, bottom).
6311-%
7739+%
63127740 % We keep a separate counter for each FLOATTYPE, which we reset at each
63137741 % chapter-level command.
63147742 \let\resetallfloatnos=\empty
@@ -6318,8 +7746,15 @@ width0pt\relax} \fi
63187746 \let\thisshortcaption=\empty
63197747 %
63207748 % don't lose footnotes inside @float.
7749+ %
7750+ % BEWARE: when the floats start float, we have to issue warning whenever an
7751+ % insert appears inside a float which could possibly float. --kasal, 26may04
7752+ %
63217753 \startsavinginserts
63227754 %
7755+ % We can't be used inside a paragraph.
7756+ \par
7757+ %
63237758 \vtop\bgroup
63247759 \def\floattype{#1}%
63257760 \def\floatlabel{#2}%
@@ -6341,18 +7776,18 @@ width0pt\relax} \fi
63417776 \ifx\floatlabel\empty \else
63427777 % We want each FLOATTYPE to be numbered separately (Figure 1,
63437778 % Table 1, Figure 2, ...). (And if no label, no number.)
6344- %
7779+ %
63457780 \expandafter\getfloatno\csname\safefloattype floatno\endcsname
63467781 \global\advance\floatno by 1
63477782 %
63487783 {%
6349- % This magic value for \thissection is output by \setref as the
7784+ % This magic value for \lastsection is output by \setref as the
63507785 % XREFLABEL-title value. \xrefX uses it to distinguish float
63517786 % labels (which have a completely different output format) from
63527787 % node and anchor labels. And \xrdef uses it to construct the
63537788 % lists of floats.
6354- %
6355- \edef\thissection{\floatmagic=\safefloattype}%
7789+ %
7790+ \edef\lastsection{\floatmagic=\safefloattype}%
63567791 \setref{\floatlabel}{Yfloat}%
63577792 }%
63587793 \fi
@@ -6399,7 +7834,7 @@ width0pt\relax} \fi
63997834 \fi
64007835 %
64017836 % caption text.
6402- \appendtomacro\captionline\thiscaption
7837+ \appendtomacro\captionline{\scanexp\thiscaption}%
64037838 \fi
64047839 %
64057840 % If we have anything to print, print it, with space before.
@@ -6407,6 +7842,9 @@ width0pt\relax} \fi
64077842 \ifx\captionline\empty \else
64087843 \vskip.5\parskip
64097844 \captionline
7845+ %
7846+ % Space below caption.
7847+ \vskip\parskip
64107848 \fi
64117849 %
64127850 % If have an xref label, write the list of floats info. Do this
@@ -6416,38 +7854,47 @@ width0pt\relax} \fi
64167854 % \floatlabel-lof. Besides \floatident, we include the short
64177855 % caption if specified, else the full caption if specified, else nothing.
64187856 {%
6419- \atdummies \turnoffactive \otherbackslash
6420- \immediate\write\auxfile{@xrdef{\floatlabel-lof}{%
6421- \floatident
6422- \ifx\thisshortcaption\empty
6423- \ifx\thiscaption\empty \else : \thiscaption \fi
6424- \else
6425- : \thisshortcaption
6426- \fi
6427- }}%
7857+ \atdummies
7858+ %
7859+ % since we read the caption text in the macro world, where ^^M
7860+ % is turned into a normal character, we have to scan it back, so
7861+ % we don't write the literal three characters "^^M" into the aux file.
7862+ \scanexp{%
7863+ \xdef\noexpand\gtemp{%
7864+ \ifx\thisshortcaption\empty
7865+ \thiscaption
7866+ \else
7867+ \thisshortcaption
7868+ \fi
7869+ }%
7870+ }%
7871+ \immediate\write\auxfile{@xrdef{\floatlabel-lof}{\floatident
7872+ \ifx\gtemp\empty \else : \gtemp \fi}}%
64287873 }%
64297874 \fi
6430- %
6431- % Space below caption, if we printed anything.
6432- \ifx\printedsomething\empty \else \vskip\parskip \fi
64337875 \egroup % end of \vtop
7876+ %
7877+ % place the captured inserts
7878+ %
7879+ % BEWARE: when the floats start floating, we have to issue warning
7880+ % whenever an insert appears inside a float which could possibly
7881+ % float. --kasal, 26may04
7882+ %
64347883 \checkinserts
64357884 }
64367885
64377886 % Append the tokens #2 to the definition of macro #1, not expanding either.
6438-%
6439-\newtoks\appendtomacroAtoks
6440-\newtoks\appendtomacroBtoks
7887+%
64417888 \def\appendtomacro#1#2{%
6442- \appendtomacroAtoks = \expandafter{#1}%
6443- \appendtomacroBtoks = {#2}%
6444- \edef#1{\the\appendtomacroAtoks \the\appendtomacroBtoks}%
7889+ \expandafter\def\expandafter#1\expandafter{#1#2}%
64457890 }
64467891
6447-% @caption, @shortcaption are easy.
6448-%
6449-\long\def\caption#1{\checkenv\float \def\thiscaption{#1}}
6450-\def\shortcaption#1{\checkenv\float \def\thisshortcaption{#1}}
7892+% @caption, @shortcaption
7893+%
7894+\def\caption{\docaption\thiscaption}
7895+\def\shortcaption{\docaption\thisshortcaption}
7896+\def\docaption{\checkenv\float \bgroup\scanargctxt\defcaption}
7897+\def\defcaption#1#2{\egroup \def#1{#2}}
64517898
64527899 % The parameter is the control sequence identifying the counter we are
64537900 % going to use. Create it if it doesn't exist and assign it to \floatno.
@@ -6466,7 +7913,7 @@ width0pt\relax} \fi
64667913 % \setref calls this to get the XREFLABEL-snt value. We want an @xref
64677914 % to the FLOATLABEL to expand to "Figure 3.1". We call \setref when we
64687915 % first read the @float command.
6469-%
7916+%
64707917 \def\Yfloat{\floattype@tie \chaplevelprefix\the\floatno}%
64717918
64727919 % Magic string used for the XREFLABEL-title value, so \xrefX can
@@ -6475,13 +7922,13 @@ width0pt\relax} \fi
64757922
64767923 % #1 is the control sequence we are passed; we expand into a conditional
64777924 % which is true if #1 represents a float ref. That is, the magic
6478-% \thissection value which we \setref above.
6479-%
7925+% \lastsection value which we \setref above.
7926+%
64807927 \def\iffloat#1{\expandafter\doiffloat#1==\finish}
64817928 %
64827929 % #1 is (maybe) the \floatmagic string. If so, #2 will be the
64837930 % (safe) float type for this float. We set \iffloattype to #2.
6484-%
7931+%
64857932 \def\doiffloat#1=#2=#3\finish{%
64867933 \def\temp{#1}%
64877934 \def\iffloattype{#2}%
@@ -6489,7 +7936,7 @@ width0pt\relax} \fi
64897936 }
64907937
64917938 % @listoffloats FLOATTYPE - print a list of floats like a table of contents.
6492-%
7939+%
64937940 \parseargdef\listoffloats{%
64947941 \def\floattype{#1}% floattype
64957942 {%
@@ -6519,10 +7966,10 @@ width0pt\relax} \fi
65197966 % xref label, in the form LABEL-title, which is how we save it in the
65207967 % aux file. We strip off the -title and look up \XRLABEL-lof, which
65217968 % has the text we're supposed to typeset here.
6522-%
7969+%
65237970 % Figures without xref labels will not be included in the list (since
65247971 % they won't appear in the aux file).
6525-%
7972+%
65267973 \def\listoffloatsdo#1{\listoffloatsdoentry#1\finish}
65277974 \def\listoffloatsdoentry#1-title\finish{{%
65287975 % Can't fully expand XR#1-lof because it can contain anything. Just
@@ -6536,39 +7983,909 @@ width0pt\relax} \fi
65367983 \writeentry
65377984 }}
65387985
7986+
65397987 \message{localization,}
6540-% and i18n.
65417988
6542-% @documentlanguage is usually given very early, just after
6543-% @setfilename. If done too late, it may not override everything
6544-% properly. Single argument is the language abbreviation.
6545-% It would be nice if we could set up a hyphenation file here.
7989+% For single-language documents, @documentlanguage is usually given very
7990+% early, just after @documentencoding. Single argument is the language
7991+% (de) or locale (de_DE) abbreviation.
65467992 %
6547-\parseargdef\documentlanguage{%
7993+{
7994+ \catcode`\_ = \active
7995+ \globaldefs=1
7996+\parseargdef\documentlanguage{\begingroup
7997+ \let_=\normalunderscore % normal _ character for filenames
65487998 \tex % read txi-??.tex file in plain TeX.
6549- % Read the file if it exists.
7999+ % Read the file by the name they passed if it exists.
65508000 \openin 1 txi-#1.tex
65518001 \ifeof 1
6552- \errhelp = \nolanghelp
6553- \errmessage{Cannot read language file txi-#1.tex}%
8002+ \documentlanguagetrywithoutunderscore{#1_\finish}%
65548003 \else
8004+ \globaldefs = 1 % everything in the txi-LL files needs to persist
65558005 \input txi-#1.tex
65568006 \fi
65578007 \closein 1
6558- \endgroup
8008+ \endgroup % end raw TeX
8009+\endgroup}
8010+%
8011+% If they passed de_DE, and txi-de_DE.tex doesn't exist,
8012+% try txi-de.tex.
8013+%
8014+\gdef\documentlanguagetrywithoutunderscore#1_#2\finish{%
8015+ \openin 1 txi-#1.tex
8016+ \ifeof 1
8017+ \errhelp = \nolanghelp
8018+ \errmessage{Cannot read language file txi-#1.tex}%
8019+ \else
8020+ \globaldefs = 1 % everything in the txi-LL files needs to persist
8021+ \input txi-#1.tex
8022+ \fi
8023+ \closein 1
65598024 }
8025+}% end of special _ catcode
8026+%
65608027 \newhelp\nolanghelp{The given language definition file cannot be found or
6561-is empty. Maybe you need to install it? In the current directory
6562-should work if nowhere else does.}
8028+is empty. Maybe you need to install it? Putting it in the current
8029+directory should work if nowhere else does.}
65638030
8031+% This macro is called from txi-??.tex files; the first argument is the
8032+% \language name to set (without the "\lang@" prefix), the second and
8033+% third args are \{left,right}hyphenmin.
8034+%
8035+% The language names to pass are determined when the format is built.
8036+% See the etex.log file created at that time, e.g.,
8037+% /usr/local/texlive/2008/texmf-var/web2c/pdftex/etex.log.
8038+%
8039+% With TeX Live 2008, etex now includes hyphenation patterns for all
8040+% available languages. This means we can support hyphenation in
8041+% Texinfo, at least to some extent. (This still doesn't solve the
8042+% accented characters problem.)
8043+%
8044+\catcode`@=11
8045+\def\txisetlanguage#1#2#3{%
8046+ % do not set the language if the name is undefined in the current TeX.
8047+ \expandafter\ifx\csname lang@#1\endcsname \relax
8048+ \message{no patterns for #1}%
8049+ \else
8050+ \global\language = \csname lang@#1\endcsname
8051+ \fi
8052+ % but there is no harm in adjusting the hyphenmin values regardless.
8053+ \global\lefthyphenmin = #2\relax
8054+ \global\righthyphenmin = #3\relax
8055+}
65648056
6565-% @documentencoding should change something in TeX eventually, most
6566-% likely, but for now just recognize it.
6567-\let\documentencoding = \comment
8057+% Helpers for encodings.
8058+% Set the catcode of characters 128 through 255 to the specified number.
8059+%
8060+\def\setnonasciicharscatcode#1{%
8061+ \count255=128
8062+ \loop\ifnum\count255<256
8063+ \global\catcode\count255=#1\relax
8064+ \advance\count255 by 1
8065+ \repeat
8066+}
65688067
8068+\def\setnonasciicharscatcodenonglobal#1{%
8069+ \count255=128
8070+ \loop\ifnum\count255<256
8071+ \catcode\count255=#1\relax
8072+ \advance\count255 by 1
8073+ \repeat
8074+}
65698075
6570-% Page size parameters.
8076+% @documentencoding sets the definition of non-ASCII characters
8077+% according to the specified encoding.
65718078 %
8079+\parseargdef\documentencoding{%
8080+ % Encoding being declared for the document.
8081+ \def\declaredencoding{\csname #1.enc\endcsname}%
8082+ %
8083+ % Supported encodings: names converted to tokens in order to be able
8084+ % to compare them with \ifx.
8085+ \def\ascii{\csname US-ASCII.enc\endcsname}%
8086+ \def\latnine{\csname ISO-8859-15.enc\endcsname}%
8087+ \def\latone{\csname ISO-8859-1.enc\endcsname}%
8088+ \def\lattwo{\csname ISO-8859-2.enc\endcsname}%
8089+ \def\utfeight{\csname UTF-8.enc\endcsname}%
8090+ %
8091+ \ifx \declaredencoding \ascii
8092+ \asciichardefs
8093+ %
8094+ \else \ifx \declaredencoding \lattwo
8095+ \setnonasciicharscatcode\active
8096+ \lattwochardefs
8097+ %
8098+ \else \ifx \declaredencoding \latone
8099+ \setnonasciicharscatcode\active
8100+ \latonechardefs
8101+ %
8102+ \else \ifx \declaredencoding \latnine
8103+ \setnonasciicharscatcode\active
8104+ \latninechardefs
8105+ %
8106+ \else \ifx \declaredencoding \utfeight
8107+ \setnonasciicharscatcode\active
8108+ \utfeightchardefs
8109+ %
8110+ \else
8111+ \message{Unknown document encoding #1, ignoring.}%
8112+ %
8113+ \fi % utfeight
8114+ \fi % latnine
8115+ \fi % latone
8116+ \fi % lattwo
8117+ \fi % ascii
8118+}
8119+
8120+% A message to be logged when using a character that isn't available
8121+% the default font encoding (OT1).
8122+%
8123+\def\missingcharmsg#1{\message{Character missing in OT1 encoding: #1.}}
8124+
8125+% Take account of \c (plain) vs. \, (Texinfo) difference.
8126+\def\cedilla#1{\ifx\c\ptexc\c{#1}\else\,{#1}\fi}
8127+
8128+% First, make active non-ASCII characters in order for them to be
8129+% correctly categorized when TeX reads the replacement text of
8130+% macros containing the character definitions.
8131+\setnonasciicharscatcode\active
8132+%
8133+% Latin1 (ISO-8859-1) character definitions.
8134+\def\latonechardefs{%
8135+ \gdef^^a0{~}
8136+ \gdef^^a1{\exclamdown}
8137+ \gdef^^a2{\missingcharmsg{CENT SIGN}}
8138+ \gdef^^a3{{\pounds}}
8139+ \gdef^^a4{\missingcharmsg{CURRENCY SIGN}}
8140+ \gdef^^a5{\missingcharmsg{YEN SIGN}}
8141+ \gdef^^a6{\missingcharmsg{BROKEN BAR}}
8142+ \gdef^^a7{\S}
8143+ \gdef^^a8{\"{}}
8144+ \gdef^^a9{\copyright}
8145+ \gdef^^aa{\ordf}
8146+ \gdef^^ab{\guillemetleft}
8147+ \gdef^^ac{$\lnot$}
8148+ \gdef^^ad{\-}
8149+ \gdef^^ae{\registeredsymbol}
8150+ \gdef^^af{\={}}
8151+ %
8152+ \gdef^^b0{\textdegree}
8153+ \gdef^^b1{$\pm$}
8154+ \gdef^^b2{$^2$}
8155+ \gdef^^b3{$^3$}
8156+ \gdef^^b4{\'{}}
8157+ \gdef^^b5{$\mu$}
8158+ \gdef^^b6{\P}
8159+ %
8160+ \gdef^^b7{$^.$}
8161+ \gdef^^b8{\cedilla\ }
8162+ \gdef^^b9{$^1$}
8163+ \gdef^^ba{\ordm}
8164+ %
8165+ \gdef^^bb{\guilletright}
8166+ \gdef^^bc{$1\over4$}
8167+ \gdef^^bd{$1\over2$}
8168+ \gdef^^be{$3\over4$}
8169+ \gdef^^bf{\questiondown}
8170+ %
8171+ \gdef^^c0{\`A}
8172+ \gdef^^c1{\'A}
8173+ \gdef^^c2{\^A}
8174+ \gdef^^c3{\~A}
8175+ \gdef^^c4{\"A}
8176+ \gdef^^c5{\ringaccent A}
8177+ \gdef^^c6{\AE}
8178+ \gdef^^c7{\cedilla C}
8179+ \gdef^^c8{\`E}
8180+ \gdef^^c9{\'E}
8181+ \gdef^^ca{\^E}
8182+ \gdef^^cb{\"E}
8183+ \gdef^^cc{\`I}
8184+ \gdef^^cd{\'I}
8185+ \gdef^^ce{\^I}
8186+ \gdef^^cf{\"I}
8187+ %
8188+ \gdef^^d0{\DH}
8189+ \gdef^^d1{\~N}
8190+ \gdef^^d2{\`O}
8191+ \gdef^^d3{\'O}
8192+ \gdef^^d4{\^O}
8193+ \gdef^^d5{\~O}
8194+ \gdef^^d6{\"O}
8195+ \gdef^^d7{$\times$}
8196+ \gdef^^d8{\O}
8197+ \gdef^^d9{\`U}
8198+ \gdef^^da{\'U}
8199+ \gdef^^db{\^U}
8200+ \gdef^^dc{\"U}
8201+ \gdef^^dd{\'Y}
8202+ \gdef^^de{\TH}
8203+ \gdef^^df{\ss}
8204+ %
8205+ \gdef^^e0{\`a}
8206+ \gdef^^e1{\'a}
8207+ \gdef^^e2{\^a}
8208+ \gdef^^e3{\~a}
8209+ \gdef^^e4{\"a}
8210+ \gdef^^e5{\ringaccent a}
8211+ \gdef^^e6{\ae}
8212+ \gdef^^e7{\cedilla c}
8213+ \gdef^^e8{\`e}
8214+ \gdef^^e9{\'e}
8215+ \gdef^^ea{\^e}
8216+ \gdef^^eb{\"e}
8217+ \gdef^^ec{\`{\dotless i}}
8218+ \gdef^^ed{\'{\dotless i}}
8219+ \gdef^^ee{\^{\dotless i}}
8220+ \gdef^^ef{\"{\dotless i}}
8221+ %
8222+ \gdef^^f0{\dh}
8223+ \gdef^^f1{\~n}
8224+ \gdef^^f2{\`o}
8225+ \gdef^^f3{\'o}
8226+ \gdef^^f4{\^o}
8227+ \gdef^^f5{\~o}
8228+ \gdef^^f6{\"o}
8229+ \gdef^^f7{$\div$}
8230+ \gdef^^f8{\o}
8231+ \gdef^^f9{\`u}
8232+ \gdef^^fa{\'u}
8233+ \gdef^^fb{\^u}
8234+ \gdef^^fc{\"u}
8235+ \gdef^^fd{\'y}
8236+ \gdef^^fe{\th}
8237+ \gdef^^ff{\"y}
8238+}
8239+
8240+% Latin9 (ISO-8859-15) encoding character definitions.
8241+\def\latninechardefs{%
8242+ % Encoding is almost identical to Latin1.
8243+ \latonechardefs
8244+ %
8245+ \gdef^^a4{\euro}
8246+ \gdef^^a6{\v S}
8247+ \gdef^^a8{\v s}
8248+ \gdef^^b4{\v Z}
8249+ \gdef^^b8{\v z}
8250+ \gdef^^bc{\OE}
8251+ \gdef^^bd{\oe}
8252+ \gdef^^be{\"Y}
8253+}
8254+
8255+% Latin2 (ISO-8859-2) character definitions.
8256+\def\lattwochardefs{%
8257+ \gdef^^a0{~}
8258+ \gdef^^a1{\ogonek{A}}
8259+ \gdef^^a2{\u{}}
8260+ \gdef^^a3{\L}
8261+ \gdef^^a4{\missingcharmsg{CURRENCY SIGN}}
8262+ \gdef^^a5{\v L}
8263+ \gdef^^a6{\'S}
8264+ \gdef^^a7{\S}
8265+ \gdef^^a8{\"{}}
8266+ \gdef^^a9{\v S}
8267+ \gdef^^aa{\cedilla S}
8268+ \gdef^^ab{\v T}
8269+ \gdef^^ac{\'Z}
8270+ \gdef^^ad{\-}
8271+ \gdef^^ae{\v Z}
8272+ \gdef^^af{\dotaccent Z}
8273+ %
8274+ \gdef^^b0{\textdegree}
8275+ \gdef^^b1{\ogonek{a}}
8276+ \gdef^^b2{\ogonek{ }}
8277+ \gdef^^b3{\l}
8278+ \gdef^^b4{\'{}}
8279+ \gdef^^b5{\v l}
8280+ \gdef^^b6{\'s}
8281+ \gdef^^b7{\v{}}
8282+ \gdef^^b8{\cedilla\ }
8283+ \gdef^^b9{\v s}
8284+ \gdef^^ba{\cedilla s}
8285+ \gdef^^bb{\v t}
8286+ \gdef^^bc{\'z}
8287+ \gdef^^bd{\H{}}
8288+ \gdef^^be{\v z}
8289+ \gdef^^bf{\dotaccent z}
8290+ %
8291+ \gdef^^c0{\'R}
8292+ \gdef^^c1{\'A}
8293+ \gdef^^c2{\^A}
8294+ \gdef^^c3{\u A}
8295+ \gdef^^c4{\"A}
8296+ \gdef^^c5{\'L}
8297+ \gdef^^c6{\'C}
8298+ \gdef^^c7{\cedilla C}
8299+ \gdef^^c8{\v C}
8300+ \gdef^^c9{\'E}
8301+ \gdef^^ca{\ogonek{E}}
8302+ \gdef^^cb{\"E}
8303+ \gdef^^cc{\v E}
8304+ \gdef^^cd{\'I}
8305+ \gdef^^ce{\^I}
8306+ \gdef^^cf{\v D}
8307+ %
8308+ \gdef^^d0{\DH}
8309+ \gdef^^d1{\'N}
8310+ \gdef^^d2{\v N}
8311+ \gdef^^d3{\'O}
8312+ \gdef^^d4{\^O}
8313+ \gdef^^d5{\H O}
8314+ \gdef^^d6{\"O}
8315+ \gdef^^d7{$\times$}
8316+ \gdef^^d8{\v R}
8317+ \gdef^^d9{\ringaccent U}
8318+ \gdef^^da{\'U}
8319+ \gdef^^db{\H U}
8320+ \gdef^^dc{\"U}
8321+ \gdef^^dd{\'Y}
8322+ \gdef^^de{\cedilla T}
8323+ \gdef^^df{\ss}
8324+ %
8325+ \gdef^^e0{\'r}
8326+ \gdef^^e1{\'a}
8327+ \gdef^^e2{\^a}
8328+ \gdef^^e3{\u a}
8329+ \gdef^^e4{\"a}
8330+ \gdef^^e5{\'l}
8331+ \gdef^^e6{\'c}
8332+ \gdef^^e7{\cedilla c}
8333+ \gdef^^e8{\v c}
8334+ \gdef^^e9{\'e}
8335+ \gdef^^ea{\ogonek{e}}
8336+ \gdef^^eb{\"e}
8337+ \gdef^^ec{\v e}
8338+ \gdef^^ed{\'\i}
8339+ \gdef^^ee{\^\i}
8340+ \gdef^^ef{\v d}
8341+ %
8342+ \gdef^^f0{\dh}
8343+ \gdef^^f1{\'n}
8344+ \gdef^^f2{\v n}
8345+ \gdef^^f3{\'o}
8346+ \gdef^^f4{\^o}
8347+ \gdef^^f5{\H o}
8348+ \gdef^^f6{\"o}
8349+ \gdef^^f7{$\div$}
8350+ \gdef^^f8{\v r}
8351+ \gdef^^f9{\ringaccent u}
8352+ \gdef^^fa{\'u}
8353+ \gdef^^fb{\H u}
8354+ \gdef^^fc{\"u}
8355+ \gdef^^fd{\'y}
8356+ \gdef^^fe{\cedilla t}
8357+ \gdef^^ff{\dotaccent{}}
8358+}
8359+
8360+% UTF-8 character definitions.
8361+%
8362+% This code to support UTF-8 is based on LaTeX's utf8.def, with some
8363+% changes for Texinfo conventions. It is included here under the GPL by
8364+% permission from Frank Mittelbach and the LaTeX team.
8365+%
8366+\newcount\countUTFx
8367+\newcount\countUTFy
8368+\newcount\countUTFz
8369+
8370+\gdef\UTFviiiTwoOctets#1#2{\expandafter
8371+ \UTFviiiDefined\csname u8:#1\string #2\endcsname}
8372+%
8373+\gdef\UTFviiiThreeOctets#1#2#3{\expandafter
8374+ \UTFviiiDefined\csname u8:#1\string #2\string #3\endcsname}
8375+%
8376+\gdef\UTFviiiFourOctets#1#2#3#4{\expandafter
8377+ \UTFviiiDefined\csname u8:#1\string #2\string #3\string #4\endcsname}
8378+
8379+\gdef\UTFviiiDefined#1{%
8380+ \ifx #1\relax
8381+ \message{\linenumber Unicode char \string #1 not defined for Texinfo}%
8382+ \else
8383+ \expandafter #1%
8384+ \fi
8385+}
8386+
8387+\begingroup
8388+ \catcode`\~13
8389+ \catcode`\"12
8390+
8391+ \def\UTFviiiLoop{%
8392+ \global\catcode\countUTFx\active
8393+ \uccode`\~\countUTFx
8394+ \uppercase\expandafter{\UTFviiiTmp}%
8395+ \advance\countUTFx by 1
8396+ \ifnum\countUTFx < \countUTFy
8397+ \expandafter\UTFviiiLoop
8398+ \fi}
8399+
8400+ \countUTFx = "C2
8401+ \countUTFy = "E0
8402+ \def\UTFviiiTmp{%
8403+ \xdef~{\noexpand\UTFviiiTwoOctets\string~}}
8404+ \UTFviiiLoop
8405+
8406+ \countUTFx = "E0
8407+ \countUTFy = "F0
8408+ \def\UTFviiiTmp{%
8409+ \xdef~{\noexpand\UTFviiiThreeOctets\string~}}
8410+ \UTFviiiLoop
8411+
8412+ \countUTFx = "F0
8413+ \countUTFy = "F4
8414+ \def\UTFviiiTmp{%
8415+ \xdef~{\noexpand\UTFviiiFourOctets\string~}}
8416+ \UTFviiiLoop
8417+\endgroup
8418+
8419+\begingroup
8420+ \catcode`\"=12
8421+ \catcode`\<=12
8422+ \catcode`\.=12
8423+ \catcode`\,=12
8424+ \catcode`\;=12
8425+ \catcode`\!=12
8426+ \catcode`\~=13
8427+
8428+ \gdef\DeclareUnicodeCharacter#1#2{%
8429+ \countUTFz = "#1\relax
8430+ \wlog{\space\space defining Unicode char U+#1 (decimal \the\countUTFz)}%
8431+ \begingroup
8432+ \parseXMLCharref
8433+ \def\UTFviiiTwoOctets##1##2{%
8434+ \csname u8:##1\string ##2\endcsname}%
8435+ \def\UTFviiiThreeOctets##1##2##3{%
8436+ \csname u8:##1\string ##2\string ##3\endcsname}%
8437+ \def\UTFviiiFourOctets##1##2##3##4{%
8438+ \csname u8:##1\string ##2\string ##3\string ##4\endcsname}%
8439+ \expandafter\expandafter\expandafter\expandafter
8440+ \expandafter\expandafter\expandafter
8441+ \gdef\UTFviiiTmp{#2}%
8442+ \endgroup}
8443+
8444+ \gdef\parseXMLCharref{%
8445+ \ifnum\countUTFz < "A0\relax
8446+ \errhelp = \EMsimple
8447+ \errmessage{Cannot define Unicode char value < 00A0}%
8448+ \else\ifnum\countUTFz < "800\relax
8449+ \parseUTFviiiA,%
8450+ \parseUTFviiiB C\UTFviiiTwoOctets.,%
8451+ \else\ifnum\countUTFz < "10000\relax
8452+ \parseUTFviiiA;%
8453+ \parseUTFviiiA,%
8454+ \parseUTFviiiB E\UTFviiiThreeOctets.{,;}%
8455+ \else
8456+ \parseUTFviiiA;%
8457+ \parseUTFviiiA,%
8458+ \parseUTFviiiA!%
8459+ \parseUTFviiiB F\UTFviiiFourOctets.{!,;}%
8460+ \fi\fi\fi
8461+ }
8462+
8463+ \gdef\parseUTFviiiA#1{%
8464+ \countUTFx = \countUTFz
8465+ \divide\countUTFz by 64
8466+ \countUTFy = \countUTFz
8467+ \multiply\countUTFz by 64
8468+ \advance\countUTFx by -\countUTFz
8469+ \advance\countUTFx by 128
8470+ \uccode `#1\countUTFx
8471+ \countUTFz = \countUTFy}
8472+
8473+ \gdef\parseUTFviiiB#1#2#3#4{%
8474+ \advance\countUTFz by "#10\relax
8475+ \uccode `#3\countUTFz
8476+ \uppercase{\gdef\UTFviiiTmp{#2#3#4}}}
8477+\endgroup
8478+
8479+\def\utfeightchardefs{%
8480+ \DeclareUnicodeCharacter{00A0}{\tie}
8481+ \DeclareUnicodeCharacter{00A1}{\exclamdown}
8482+ \DeclareUnicodeCharacter{00A3}{\pounds}
8483+ \DeclareUnicodeCharacter{00A8}{\"{ }}
8484+ \DeclareUnicodeCharacter{00A9}{\copyright}
8485+ \DeclareUnicodeCharacter{00AA}{\ordf}
8486+ \DeclareUnicodeCharacter{00AB}{\guillemetleft}
8487+ \DeclareUnicodeCharacter{00AD}{\-}
8488+ \DeclareUnicodeCharacter{00AE}{\registeredsymbol}
8489+ \DeclareUnicodeCharacter{00AF}{\={ }}
8490+
8491+ \DeclareUnicodeCharacter{00B0}{\ringaccent{ }}
8492+ \DeclareUnicodeCharacter{00B4}{\'{ }}
8493+ \DeclareUnicodeCharacter{00B8}{\cedilla{ }}
8494+ \DeclareUnicodeCharacter{00BA}{\ordm}
8495+ \DeclareUnicodeCharacter{00BB}{\guillemetright}
8496+ \DeclareUnicodeCharacter{00BF}{\questiondown}
8497+
8498+ \DeclareUnicodeCharacter{00C0}{\`A}
8499+ \DeclareUnicodeCharacter{00C1}{\'A}
8500+ \DeclareUnicodeCharacter{00C2}{\^A}
8501+ \DeclareUnicodeCharacter{00C3}{\~A}
8502+ \DeclareUnicodeCharacter{00C4}{\"A}
8503+ \DeclareUnicodeCharacter{00C5}{\AA}
8504+ \DeclareUnicodeCharacter{00C6}{\AE}
8505+ \DeclareUnicodeCharacter{00C7}{\cedilla{C}}
8506+ \DeclareUnicodeCharacter{00C8}{\`E}
8507+ \DeclareUnicodeCharacter{00C9}{\'E}
8508+ \DeclareUnicodeCharacter{00CA}{\^E}
8509+ \DeclareUnicodeCharacter{00CB}{\"E}
8510+ \DeclareUnicodeCharacter{00CC}{\`I}
8511+ \DeclareUnicodeCharacter{00CD}{\'I}
8512+ \DeclareUnicodeCharacter{00CE}{\^I}
8513+ \DeclareUnicodeCharacter{00CF}{\"I}
8514+
8515+ \DeclareUnicodeCharacter{00D0}{\DH}
8516+ \DeclareUnicodeCharacter{00D1}{\~N}
8517+ \DeclareUnicodeCharacter{00D2}{\`O}
8518+ \DeclareUnicodeCharacter{00D3}{\'O}
8519+ \DeclareUnicodeCharacter{00D4}{\^O}
8520+ \DeclareUnicodeCharacter{00D5}{\~O}
8521+ \DeclareUnicodeCharacter{00D6}{\"O}
8522+ \DeclareUnicodeCharacter{00D8}{\O}
8523+ \DeclareUnicodeCharacter{00D9}{\`U}
8524+ \DeclareUnicodeCharacter{00DA}{\'U}
8525+ \DeclareUnicodeCharacter{00DB}{\^U}
8526+ \DeclareUnicodeCharacter{00DC}{\"U}
8527+ \DeclareUnicodeCharacter{00DD}{\'Y}
8528+ \DeclareUnicodeCharacter{00DE}{\TH}
8529+ \DeclareUnicodeCharacter{00DF}{\ss}
8530+
8531+ \DeclareUnicodeCharacter{00E0}{\`a}
8532+ \DeclareUnicodeCharacter{00E1}{\'a}
8533+ \DeclareUnicodeCharacter{00E2}{\^a}
8534+ \DeclareUnicodeCharacter{00E3}{\~a}
8535+ \DeclareUnicodeCharacter{00E4}{\"a}
8536+ \DeclareUnicodeCharacter{00E5}{\aa}
8537+ \DeclareUnicodeCharacter{00E6}{\ae}
8538+ \DeclareUnicodeCharacter{00E7}{\cedilla{c}}
8539+ \DeclareUnicodeCharacter{00E8}{\`e}
8540+ \DeclareUnicodeCharacter{00E9}{\'e}
8541+ \DeclareUnicodeCharacter{00EA}{\^e}
8542+ \DeclareUnicodeCharacter{00EB}{\"e}
8543+ \DeclareUnicodeCharacter{00EC}{\`{\dotless{i}}}
8544+ \DeclareUnicodeCharacter{00ED}{\'{\dotless{i}}}
8545+ \DeclareUnicodeCharacter{00EE}{\^{\dotless{i}}}
8546+ \DeclareUnicodeCharacter{00EF}{\"{\dotless{i}}}
8547+
8548+ \DeclareUnicodeCharacter{00F0}{\dh}
8549+ \DeclareUnicodeCharacter{00F1}{\~n}
8550+ \DeclareUnicodeCharacter{00F2}{\`o}
8551+ \DeclareUnicodeCharacter{00F3}{\'o}
8552+ \DeclareUnicodeCharacter{00F4}{\^o}
8553+ \DeclareUnicodeCharacter{00F5}{\~o}
8554+ \DeclareUnicodeCharacter{00F6}{\"o}
8555+ \DeclareUnicodeCharacter{00F8}{\o}
8556+ \DeclareUnicodeCharacter{00F9}{\`u}
8557+ \DeclareUnicodeCharacter{00FA}{\'u}
8558+ \DeclareUnicodeCharacter{00FB}{\^u}
8559+ \DeclareUnicodeCharacter{00FC}{\"u}
8560+ \DeclareUnicodeCharacter{00FD}{\'y}
8561+ \DeclareUnicodeCharacter{00FE}{\th}
8562+ \DeclareUnicodeCharacter{00FF}{\"y}
8563+
8564+ \DeclareUnicodeCharacter{0100}{\=A}
8565+ \DeclareUnicodeCharacter{0101}{\=a}
8566+ \DeclareUnicodeCharacter{0102}{\u{A}}
8567+ \DeclareUnicodeCharacter{0103}{\u{a}}
8568+ \DeclareUnicodeCharacter{0104}{\ogonek{A}}
8569+ \DeclareUnicodeCharacter{0105}{\ogonek{a}}
8570+ \DeclareUnicodeCharacter{0106}{\'C}
8571+ \DeclareUnicodeCharacter{0107}{\'c}
8572+ \DeclareUnicodeCharacter{0108}{\^C}
8573+ \DeclareUnicodeCharacter{0109}{\^c}
8574+ \DeclareUnicodeCharacter{0118}{\ogonek{E}}
8575+ \DeclareUnicodeCharacter{0119}{\ogonek{e}}
8576+ \DeclareUnicodeCharacter{010A}{\dotaccent{C}}
8577+ \DeclareUnicodeCharacter{010B}{\dotaccent{c}}
8578+ \DeclareUnicodeCharacter{010C}{\v{C}}
8579+ \DeclareUnicodeCharacter{010D}{\v{c}}
8580+ \DeclareUnicodeCharacter{010E}{\v{D}}
8581+
8582+ \DeclareUnicodeCharacter{0112}{\=E}
8583+ \DeclareUnicodeCharacter{0113}{\=e}
8584+ \DeclareUnicodeCharacter{0114}{\u{E}}
8585+ \DeclareUnicodeCharacter{0115}{\u{e}}
8586+ \DeclareUnicodeCharacter{0116}{\dotaccent{E}}
8587+ \DeclareUnicodeCharacter{0117}{\dotaccent{e}}
8588+ \DeclareUnicodeCharacter{011A}{\v{E}}
8589+ \DeclareUnicodeCharacter{011B}{\v{e}}
8590+ \DeclareUnicodeCharacter{011C}{\^G}
8591+ \DeclareUnicodeCharacter{011D}{\^g}
8592+ \DeclareUnicodeCharacter{011E}{\u{G}}
8593+ \DeclareUnicodeCharacter{011F}{\u{g}}
8594+
8595+ \DeclareUnicodeCharacter{0120}{\dotaccent{G}}
8596+ \DeclareUnicodeCharacter{0121}{\dotaccent{g}}
8597+ \DeclareUnicodeCharacter{0124}{\^H}
8598+ \DeclareUnicodeCharacter{0125}{\^h}
8599+ \DeclareUnicodeCharacter{0128}{\~I}
8600+ \DeclareUnicodeCharacter{0129}{\~{\dotless{i}}}
8601+ \DeclareUnicodeCharacter{012A}{\=I}
8602+ \DeclareUnicodeCharacter{012B}{\={\dotless{i}}}
8603+ \DeclareUnicodeCharacter{012C}{\u{I}}
8604+ \DeclareUnicodeCharacter{012D}{\u{\dotless{i}}}
8605+
8606+ \DeclareUnicodeCharacter{0130}{\dotaccent{I}}
8607+ \DeclareUnicodeCharacter{0131}{\dotless{i}}
8608+ \DeclareUnicodeCharacter{0132}{IJ}
8609+ \DeclareUnicodeCharacter{0133}{ij}
8610+ \DeclareUnicodeCharacter{0134}{\^J}
8611+ \DeclareUnicodeCharacter{0135}{\^{\dotless{j}}}
8612+ \DeclareUnicodeCharacter{0139}{\'L}
8613+ \DeclareUnicodeCharacter{013A}{\'l}
8614+
8615+ \DeclareUnicodeCharacter{0141}{\L}
8616+ \DeclareUnicodeCharacter{0142}{\l}
8617+ \DeclareUnicodeCharacter{0143}{\'N}
8618+ \DeclareUnicodeCharacter{0144}{\'n}
8619+ \DeclareUnicodeCharacter{0147}{\v{N}}
8620+ \DeclareUnicodeCharacter{0148}{\v{n}}
8621+ \DeclareUnicodeCharacter{014C}{\=O}
8622+ \DeclareUnicodeCharacter{014D}{\=o}
8623+ \DeclareUnicodeCharacter{014E}{\u{O}}
8624+ \DeclareUnicodeCharacter{014F}{\u{o}}
8625+
8626+ \DeclareUnicodeCharacter{0150}{\H{O}}
8627+ \DeclareUnicodeCharacter{0151}{\H{o}}
8628+ \DeclareUnicodeCharacter{0152}{\OE}
8629+ \DeclareUnicodeCharacter{0153}{\oe}
8630+ \DeclareUnicodeCharacter{0154}{\'R}
8631+ \DeclareUnicodeCharacter{0155}{\'r}
8632+ \DeclareUnicodeCharacter{0158}{\v{R}}
8633+ \DeclareUnicodeCharacter{0159}{\v{r}}
8634+ \DeclareUnicodeCharacter{015A}{\'S}
8635+ \DeclareUnicodeCharacter{015B}{\'s}
8636+ \DeclareUnicodeCharacter{015C}{\^S}
8637+ \DeclareUnicodeCharacter{015D}{\^s}
8638+ \DeclareUnicodeCharacter{015E}{\cedilla{S}}
8639+ \DeclareUnicodeCharacter{015F}{\cedilla{s}}
8640+
8641+ \DeclareUnicodeCharacter{0160}{\v{S}}
8642+ \DeclareUnicodeCharacter{0161}{\v{s}}
8643+ \DeclareUnicodeCharacter{0162}{\cedilla{t}}
8644+ \DeclareUnicodeCharacter{0163}{\cedilla{T}}
8645+ \DeclareUnicodeCharacter{0164}{\v{T}}
8646+
8647+ \DeclareUnicodeCharacter{0168}{\~U}
8648+ \DeclareUnicodeCharacter{0169}{\~u}
8649+ \DeclareUnicodeCharacter{016A}{\=U}
8650+ \DeclareUnicodeCharacter{016B}{\=u}
8651+ \DeclareUnicodeCharacter{016C}{\u{U}}
8652+ \DeclareUnicodeCharacter{016D}{\u{u}}
8653+ \DeclareUnicodeCharacter{016E}{\ringaccent{U}}
8654+ \DeclareUnicodeCharacter{016F}{\ringaccent{u}}
8655+
8656+ \DeclareUnicodeCharacter{0170}{\H{U}}
8657+ \DeclareUnicodeCharacter{0171}{\H{u}}
8658+ \DeclareUnicodeCharacter{0174}{\^W}
8659+ \DeclareUnicodeCharacter{0175}{\^w}
8660+ \DeclareUnicodeCharacter{0176}{\^Y}
8661+ \DeclareUnicodeCharacter{0177}{\^y}
8662+ \DeclareUnicodeCharacter{0178}{\"Y}
8663+ \DeclareUnicodeCharacter{0179}{\'Z}
8664+ \DeclareUnicodeCharacter{017A}{\'z}
8665+ \DeclareUnicodeCharacter{017B}{\dotaccent{Z}}
8666+ \DeclareUnicodeCharacter{017C}{\dotaccent{z}}
8667+ \DeclareUnicodeCharacter{017D}{\v{Z}}
8668+ \DeclareUnicodeCharacter{017E}{\v{z}}
8669+
8670+ \DeclareUnicodeCharacter{01C4}{D\v{Z}}
8671+ \DeclareUnicodeCharacter{01C5}{D\v{z}}
8672+ \DeclareUnicodeCharacter{01C6}{d\v{z}}
8673+ \DeclareUnicodeCharacter{01C7}{LJ}
8674+ \DeclareUnicodeCharacter{01C8}{Lj}
8675+ \DeclareUnicodeCharacter{01C9}{lj}
8676+ \DeclareUnicodeCharacter{01CA}{NJ}
8677+ \DeclareUnicodeCharacter{01CB}{Nj}
8678+ \DeclareUnicodeCharacter{01CC}{nj}
8679+ \DeclareUnicodeCharacter{01CD}{\v{A}}
8680+ \DeclareUnicodeCharacter{01CE}{\v{a}}
8681+ \DeclareUnicodeCharacter{01CF}{\v{I}}
8682+
8683+ \DeclareUnicodeCharacter{01D0}{\v{\dotless{i}}}
8684+ \DeclareUnicodeCharacter{01D1}{\v{O}}
8685+ \DeclareUnicodeCharacter{01D2}{\v{o}}
8686+ \DeclareUnicodeCharacter{01D3}{\v{U}}
8687+ \DeclareUnicodeCharacter{01D4}{\v{u}}
8688+
8689+ \DeclareUnicodeCharacter{01E2}{\={\AE}}
8690+ \DeclareUnicodeCharacter{01E3}{\={\ae}}
8691+ \DeclareUnicodeCharacter{01E6}{\v{G}}
8692+ \DeclareUnicodeCharacter{01E7}{\v{g}}
8693+ \DeclareUnicodeCharacter{01E8}{\v{K}}
8694+ \DeclareUnicodeCharacter{01E9}{\v{k}}
8695+
8696+ \DeclareUnicodeCharacter{01F0}{\v{\dotless{j}}}
8697+ \DeclareUnicodeCharacter{01F1}{DZ}
8698+ \DeclareUnicodeCharacter{01F2}{Dz}
8699+ \DeclareUnicodeCharacter{01F3}{dz}
8700+ \DeclareUnicodeCharacter{01F4}{\'G}
8701+ \DeclareUnicodeCharacter{01F5}{\'g}
8702+ \DeclareUnicodeCharacter{01F8}{\`N}
8703+ \DeclareUnicodeCharacter{01F9}{\`n}
8704+ \DeclareUnicodeCharacter{01FC}{\'{\AE}}
8705+ \DeclareUnicodeCharacter{01FD}{\'{\ae}}
8706+ \DeclareUnicodeCharacter{01FE}{\'{\O}}
8707+ \DeclareUnicodeCharacter{01FF}{\'{\o}}
8708+
8709+ \DeclareUnicodeCharacter{021E}{\v{H}}
8710+ \DeclareUnicodeCharacter{021F}{\v{h}}
8711+
8712+ \DeclareUnicodeCharacter{0226}{\dotaccent{A}}
8713+ \DeclareUnicodeCharacter{0227}{\dotaccent{a}}
8714+ \DeclareUnicodeCharacter{0228}{\cedilla{E}}
8715+ \DeclareUnicodeCharacter{0229}{\cedilla{e}}
8716+ \DeclareUnicodeCharacter{022E}{\dotaccent{O}}
8717+ \DeclareUnicodeCharacter{022F}{\dotaccent{o}}
8718+
8719+ \DeclareUnicodeCharacter{0232}{\=Y}
8720+ \DeclareUnicodeCharacter{0233}{\=y}
8721+ \DeclareUnicodeCharacter{0237}{\dotless{j}}
8722+
8723+ \DeclareUnicodeCharacter{02DB}{\ogonek{ }}
8724+
8725+ \DeclareUnicodeCharacter{1E02}{\dotaccent{B}}
8726+ \DeclareUnicodeCharacter{1E03}{\dotaccent{b}}
8727+ \DeclareUnicodeCharacter{1E04}{\udotaccent{B}}
8728+ \DeclareUnicodeCharacter{1E05}{\udotaccent{b}}
8729+ \DeclareUnicodeCharacter{1E06}{\ubaraccent{B}}
8730+ \DeclareUnicodeCharacter{1E07}{\ubaraccent{b}}
8731+ \DeclareUnicodeCharacter{1E0A}{\dotaccent{D}}
8732+ \DeclareUnicodeCharacter{1E0B}{\dotaccent{d}}
8733+ \DeclareUnicodeCharacter{1E0C}{\udotaccent{D}}
8734+ \DeclareUnicodeCharacter{1E0D}{\udotaccent{d}}
8735+ \DeclareUnicodeCharacter{1E0E}{\ubaraccent{D}}
8736+ \DeclareUnicodeCharacter{1E0F}{\ubaraccent{d}}
8737+
8738+ \DeclareUnicodeCharacter{1E1E}{\dotaccent{F}}
8739+ \DeclareUnicodeCharacter{1E1F}{\dotaccent{f}}
8740+
8741+ \DeclareUnicodeCharacter{1E20}{\=G}
8742+ \DeclareUnicodeCharacter{1E21}{\=g}
8743+ \DeclareUnicodeCharacter{1E22}{\dotaccent{H}}
8744+ \DeclareUnicodeCharacter{1E23}{\dotaccent{h}}
8745+ \DeclareUnicodeCharacter{1E24}{\udotaccent{H}}
8746+ \DeclareUnicodeCharacter{1E25}{\udotaccent{h}}
8747+ \DeclareUnicodeCharacter{1E26}{\"H}
8748+ \DeclareUnicodeCharacter{1E27}{\"h}
8749+
8750+ \DeclareUnicodeCharacter{1E30}{\'K}
8751+ \DeclareUnicodeCharacter{1E31}{\'k}
8752+ \DeclareUnicodeCharacter{1E32}{\udotaccent{K}}
8753+ \DeclareUnicodeCharacter{1E33}{\udotaccent{k}}
8754+ \DeclareUnicodeCharacter{1E34}{\ubaraccent{K}}
8755+ \DeclareUnicodeCharacter{1E35}{\ubaraccent{k}}
8756+ \DeclareUnicodeCharacter{1E36}{\udotaccent{L}}
8757+ \DeclareUnicodeCharacter{1E37}{\udotaccent{l}}
8758+ \DeclareUnicodeCharacter{1E3A}{\ubaraccent{L}}
8759+ \DeclareUnicodeCharacter{1E3B}{\ubaraccent{l}}
8760+ \DeclareUnicodeCharacter{1E3E}{\'M}
8761+ \DeclareUnicodeCharacter{1E3F}{\'m}
8762+
8763+ \DeclareUnicodeCharacter{1E40}{\dotaccent{M}}
8764+ \DeclareUnicodeCharacter{1E41}{\dotaccent{m}}
8765+ \DeclareUnicodeCharacter{1E42}{\udotaccent{M}}
8766+ \DeclareUnicodeCharacter{1E43}{\udotaccent{m}}
8767+ \DeclareUnicodeCharacter{1E44}{\dotaccent{N}}
8768+ \DeclareUnicodeCharacter{1E45}{\dotaccent{n}}
8769+ \DeclareUnicodeCharacter{1E46}{\udotaccent{N}}
8770+ \DeclareUnicodeCharacter{1E47}{\udotaccent{n}}
8771+ \DeclareUnicodeCharacter{1E48}{\ubaraccent{N}}
8772+ \DeclareUnicodeCharacter{1E49}{\ubaraccent{n}}
8773+
8774+ \DeclareUnicodeCharacter{1E54}{\'P}
8775+ \DeclareUnicodeCharacter{1E55}{\'p}
8776+ \DeclareUnicodeCharacter{1E56}{\dotaccent{P}}
8777+ \DeclareUnicodeCharacter{1E57}{\dotaccent{p}}
8778+ \DeclareUnicodeCharacter{1E58}{\dotaccent{R}}
8779+ \DeclareUnicodeCharacter{1E59}{\dotaccent{r}}
8780+ \DeclareUnicodeCharacter{1E5A}{\udotaccent{R}}
8781+ \DeclareUnicodeCharacter{1E5B}{\udotaccent{r}}
8782+ \DeclareUnicodeCharacter{1E5E}{\ubaraccent{R}}
8783+ \DeclareUnicodeCharacter{1E5F}{\ubaraccent{r}}
8784+
8785+ \DeclareUnicodeCharacter{1E60}{\dotaccent{S}}
8786+ \DeclareUnicodeCharacter{1E61}{\dotaccent{s}}
8787+ \DeclareUnicodeCharacter{1E62}{\udotaccent{S}}
8788+ \DeclareUnicodeCharacter{1E63}{\udotaccent{s}}
8789+ \DeclareUnicodeCharacter{1E6A}{\dotaccent{T}}
8790+ \DeclareUnicodeCharacter{1E6B}{\dotaccent{t}}
8791+ \DeclareUnicodeCharacter{1E6C}{\udotaccent{T}}
8792+ \DeclareUnicodeCharacter{1E6D}{\udotaccent{t}}
8793+ \DeclareUnicodeCharacter{1E6E}{\ubaraccent{T}}
8794+ \DeclareUnicodeCharacter{1E6F}{\ubaraccent{t}}
8795+
8796+ \DeclareUnicodeCharacter{1E7C}{\~V}
8797+ \DeclareUnicodeCharacter{1E7D}{\~v}
8798+ \DeclareUnicodeCharacter{1E7E}{\udotaccent{V}}
8799+ \DeclareUnicodeCharacter{1E7F}{\udotaccent{v}}
8800+
8801+ \DeclareUnicodeCharacter{1E80}{\`W}
8802+ \DeclareUnicodeCharacter{1E81}{\`w}
8803+ \DeclareUnicodeCharacter{1E82}{\'W}
8804+ \DeclareUnicodeCharacter{1E83}{\'w}
8805+ \DeclareUnicodeCharacter{1E84}{\"W}
8806+ \DeclareUnicodeCharacter{1E85}{\"w}
8807+ \DeclareUnicodeCharacter{1E86}{\dotaccent{W}}
8808+ \DeclareUnicodeCharacter{1E87}{\dotaccent{w}}
8809+ \DeclareUnicodeCharacter{1E88}{\udotaccent{W}}
8810+ \DeclareUnicodeCharacter{1E89}{\udotaccent{w}}
8811+ \DeclareUnicodeCharacter{1E8A}{\dotaccent{X}}
8812+ \DeclareUnicodeCharacter{1E8B}{\dotaccent{x}}
8813+ \DeclareUnicodeCharacter{1E8C}{\"X}
8814+ \DeclareUnicodeCharacter{1E8D}{\"x}
8815+ \DeclareUnicodeCharacter{1E8E}{\dotaccent{Y}}
8816+ \DeclareUnicodeCharacter{1E8F}{\dotaccent{y}}
8817+
8818+ \DeclareUnicodeCharacter{1E90}{\^Z}
8819+ \DeclareUnicodeCharacter{1E91}{\^z}
8820+ \DeclareUnicodeCharacter{1E92}{\udotaccent{Z}}
8821+ \DeclareUnicodeCharacter{1E93}{\udotaccent{z}}
8822+ \DeclareUnicodeCharacter{1E94}{\ubaraccent{Z}}
8823+ \DeclareUnicodeCharacter{1E95}{\ubaraccent{z}}
8824+ \DeclareUnicodeCharacter{1E96}{\ubaraccent{h}}
8825+ \DeclareUnicodeCharacter{1E97}{\"t}
8826+ \DeclareUnicodeCharacter{1E98}{\ringaccent{w}}
8827+ \DeclareUnicodeCharacter{1E99}{\ringaccent{y}}
8828+
8829+ \DeclareUnicodeCharacter{1EA0}{\udotaccent{A}}
8830+ \DeclareUnicodeCharacter{1EA1}{\udotaccent{a}}
8831+
8832+ \DeclareUnicodeCharacter{1EB8}{\udotaccent{E}}
8833+ \DeclareUnicodeCharacter{1EB9}{\udotaccent{e}}
8834+ \DeclareUnicodeCharacter{1EBC}{\~E}
8835+ \DeclareUnicodeCharacter{1EBD}{\~e}
8836+
8837+ \DeclareUnicodeCharacter{1ECA}{\udotaccent{I}}
8838+ \DeclareUnicodeCharacter{1ECB}{\udotaccent{i}}
8839+ \DeclareUnicodeCharacter{1ECC}{\udotaccent{O}}
8840+ \DeclareUnicodeCharacter{1ECD}{\udotaccent{o}}
8841+
8842+ \DeclareUnicodeCharacter{1EE4}{\udotaccent{U}}
8843+ \DeclareUnicodeCharacter{1EE5}{\udotaccent{u}}
8844+
8845+ \DeclareUnicodeCharacter{1EF2}{\`Y}
8846+ \DeclareUnicodeCharacter{1EF3}{\`y}
8847+ \DeclareUnicodeCharacter{1EF4}{\udotaccent{Y}}
8848+
8849+ \DeclareUnicodeCharacter{1EF8}{\~Y}
8850+ \DeclareUnicodeCharacter{1EF9}{\~y}
8851+
8852+ \DeclareUnicodeCharacter{2013}{--}
8853+ \DeclareUnicodeCharacter{2014}{---}
8854+ \DeclareUnicodeCharacter{2018}{\quoteleft}
8855+ \DeclareUnicodeCharacter{2019}{\quoteright}
8856+ \DeclareUnicodeCharacter{201A}{\quotesinglbase}
8857+ \DeclareUnicodeCharacter{201C}{\quotedblleft}
8858+ \DeclareUnicodeCharacter{201D}{\quotedblright}
8859+ \DeclareUnicodeCharacter{201E}{\quotedblbase}
8860+ \DeclareUnicodeCharacter{2022}{\bullet}
8861+ \DeclareUnicodeCharacter{2026}{\dots}
8862+ \DeclareUnicodeCharacter{2039}{\guilsinglleft}
8863+ \DeclareUnicodeCharacter{203A}{\guilsinglright}
8864+ \DeclareUnicodeCharacter{20AC}{\euro}
8865+
8866+ \DeclareUnicodeCharacter{2192}{\expansion}
8867+ \DeclareUnicodeCharacter{21D2}{\result}
8868+
8869+ \DeclareUnicodeCharacter{2212}{\minus}
8870+ \DeclareUnicodeCharacter{2217}{\point}
8871+ \DeclareUnicodeCharacter{2261}{\equiv}
8872+}% end of \utfeightchardefs
8873+
8874+
8875+% US-ASCII character definitions.
8876+\def\asciichardefs{% nothing need be done
8877+ \relax
8878+}
8879+
8880+% Make non-ASCII characters printable again for compatibility with
8881+% existing Texinfo documents that may use them, even without declaring a
8882+% document encoding.
8883+%
8884+\setnonasciicharscatcode \other
8885+
8886+
8887+\message{formatting,}
8888+
65728889 \newdimen\defaultparindent \defaultparindent = 15pt
65738890
65748891 \chapheadingskip = 15pt plus 4pt minus 2pt
@@ -6581,7 +8898,7 @@ should work if nowhere else does.}
65818898 % Don't be so finicky about underfull hboxes, either.
65828899 \hbadness = 2000
65838900
6584-% Following George Bush, just get rid of widows and orphans.
8901+% Following George Bush, get rid of widows and orphans.
65858902 \widowpenalty=10000
65868903 \clubpenalty=10000
65878904
@@ -6599,9 +8916,9 @@ should work if nowhere else does.}
65998916 \fi
66008917 }
66018918
6602-% Parameters in order: 1) textheight; 2) textwidth; 3) voffset;
6603-% 4) hoffset; 5) binding offset; 6) topskip; 7) physical page height; 8)
6604-% physical page width.
8919+% Parameters in order: 1) textheight; 2) textwidth;
8920+% 3) voffset; 4) hoffset; 5) binding offset; 6) topskip;
8921+% 7) physical page height; 8) physical page width.
66058922 %
66068923 % We also call \setleading{\textleading}, so the caller should define
66078924 % \textleading. The caller should also set \parskip.
@@ -6628,6 +8945,10 @@ should work if nowhere else does.}
66288945 \ifpdf
66298946 \pdfpageheight #7\relax
66308947 \pdfpagewidth #8\relax
8948+ % if we don't reset these, they will remain at "1 true in" of
8949+ % whatever layout pdftex was dumped with.
8950+ \pdfhorigin = 1 true in
8951+ \pdfvorigin = 1 true in
66318952 \fi
66328953 %
66338954 \setleading{\textleading}
@@ -6642,19 +8963,19 @@ should work if nowhere else does.}
66428963 \textleading = 13.2pt
66438964 %
66448965 % If page is nothing but text, make it come out even.
6645- \internalpagesizes{46\baselineskip}{6in}%
8966+ \internalpagesizes{607.2pt}{6in}% that's 46 lines
66468967 {\voffset}{.25in}%
66478968 {\bindingoffset}{36pt}%
66488969 {11in}{8.5in}%
66498970 }}
66508971
6651-% Use @smallbook to reset parameters for 7x9.5 (or so) format.
8972+% Use @smallbook to reset parameters for 7x9.25 trim size.
66528973 \def\smallbook{{\globaldefs = 1
66538974 \parskip = 2pt plus 1pt
66548975 \textleading = 12pt
66558976 %
66568977 \internalpagesizes{7.5in}{5in}%
6657- {\voffset}{.25in}%
8978+ {-.2in}{0in}%
66588979 {\bindingoffset}{16pt}%
66598980 {9.25in}{7in}%
66608981 %
@@ -6665,6 +8986,24 @@ should work if nowhere else does.}
66658986 \defbodyindent = .5cm
66668987 }}
66678988
8989+% Use @smallerbook to reset parameters for 6x9 trim size.
8990+% (Just testing, parameters still in flux.)
8991+\def\smallerbook{{\globaldefs = 1
8992+ \parskip = 1.5pt plus 1pt
8993+ \textleading = 12pt
8994+ %
8995+ \internalpagesizes{7.4in}{4.8in}%
8996+ {-.2in}{-.4in}%
8997+ {0pt}{14pt}%
8998+ {9in}{6in}%
8999+ %
9000+ \lispnarrowing = 0.25in
9001+ \tolerance = 700
9002+ \hfuzz = 1pt
9003+ \contentsrightmargin = 0pt
9004+ \defbodyindent = .4cm
9005+}}
9006+
66689007 % Use @afourpaper to print on European A4 paper.
66699008 \def\afourpaper{{\globaldefs = 1
66709009 \parskip = 3pt plus 2pt minus 1pt
@@ -6680,7 +9019,7 @@ should work if nowhere else does.}
66809019 % \global\normaloffset = -6mm
66819020 % \global\bindingoffset = 10mm
66829021 % @end tex
6683- \internalpagesizes{51\baselineskip}{160mm}
9022+ \internalpagesizes{673.2pt}{160mm}% that's 51 lines
66849023 {\voffset}{\hoffset}%
66859024 {\bindingoffset}{44pt}%
66869025 {297mm}{210mm}%
@@ -6745,7 +9084,7 @@ should work if nowhere else does.}
67459084 \parskip = 3pt plus 2pt minus 1pt
67469085 \setleading{\textleading}%
67479086 %
6748- \dimen0 = #1
9087+ \dimen0 = #1\relax
67499088 \advance\dimen0 by \voffset
67509089 %
67519090 \dimen2 = \hsize
@@ -6764,6 +9103,9 @@ should work if nowhere else does.}
67649103
67659104 \message{and turning on texinfo input format.}
67669105
9106+% DEL is a comment character, in case @c does not suffice.
9107+\catcode`\^^? = 14
9108+
67679109 % Define macros to output various characters with catcode for normal text.
67689110 \catcode`\"=\other
67699111 \catcode`\~=\other
@@ -6817,6 +9159,7 @@ should work if nowhere else does.}
68179159
68189160 \catcode`\_=\active
68199161 \def_{\ifusingtt\normalunderscore\_}
9162+\let\realunder=_
68209163 % Subroutine for the previous macro.
68219164 \def\_{\leavevmode \kern.07em \vbox{\hrule width.3em height.1ex}\kern .07em }
68229165
@@ -6839,6 +9182,13 @@ should work if nowhere else does.}
68399182 % \otherifyactive is called near the end of this file.
68409183 \def\otherifyactive{\catcode`+=\other \catcode`\_=\other}
68419184
9185+% Used sometimes to turn off (effectively) the active characters even after
9186+% parsing them.
9187+\def\turnoffactive{%
9188+ \normalturnoffactive
9189+ \otherbackslash
9190+}
9191+
68429192 \catcode`\@=0
68439193
68449194 % \backslashcurfont outputs one backslash character in current font,
@@ -6846,27 +9196,29 @@ should work if nowhere else does.}
68469196 \global\chardef\backslashcurfont=`\\
68479197 \global\let\rawbackslashxx=\backslashcurfont % let existing .??s files work
68489198
9199+% \realbackslash is an actual character `\' with catcode other, and
9200+% \doublebackslash is two of them (for the pdf outlines).
9201+{\catcode`\\=\other @gdef@realbackslash{\} @gdef@doublebackslash{\\}}
9202+
9203+% In texinfo, backslash is an active character; it prints the backslash
9204+% in fixed width font.
9205+\catcode`\\=\active
9206+@def@normalbackslash{{@tt@backslashcurfont}}
9207+% On startup, @fixbackslash assigns:
9208+% @let \ = @normalbackslash
9209+
68499210 % \rawbackslash defines an active \ to do \backslashcurfont.
68509211 % \otherbackslash defines an active \ to be a literal `\' character with
68519212 % catcode other.
6852-{\catcode`\\=\active
6853- @gdef@rawbackslash{@let\=@backslashcurfont}
6854- @gdef@otherbackslash{@let\=@realbackslash}
6855-}
6856-
6857-% \realbackslash is an actual character `\' with catcode other.
6858-{\catcode`\\=\other @gdef@realbackslash{\}}
6859-
6860-% \normalbackslash outputs one backslash in fixed width font.
6861-\def\normalbackslash{{\tt\backslashcurfont}}
9213+@gdef@rawbackslash{@let\=@backslashcurfont}
9214+@gdef@otherbackslash{@let\=@realbackslash}
68629215
6863-\catcode`\\=\active
6864-
6865-% Used sometimes to turn off (effectively) the active characters
6866-% even after parsing them.
6867-@def@turnoffactive{%
9216+% Same as @turnoffactive except outputs \ as {\tt\char`\\} instead of
9217+% the literal character `\'.
9218+%
9219+@def@normalturnoffactive{%
9220+ @let\=@normalbackslash
68689221 @let"=@normaldoublequote
6869- @let\=@realbackslash
68709222 @let~=@normaltilde
68719223 @let^=@normalcaret
68729224 @let_=@normalunderscore
@@ -6875,15 +9227,11 @@ should work if nowhere else does.}
68759227 @let>=@normalgreater
68769228 @let+=@normalplus
68779229 @let$=@normaldollar %$ font-lock fix
9230+ @markupsetuplqdefault
9231+ @markupsetuprqdefault
68789232 @unsepspaces
68799233 }
68809234
6881-% Same as @turnoffactive except outputs \ as {\tt\char`\\} instead of
6882-% the literal character `\'. (Thus, \ is not expandable when this is in
6883-% effect.)
6884-%
6885-@def@normalturnoffactive{@turnoffactive @let\=@normalbackslash}
6886-
68879235 % Make _ and + \other characters, temporarily.
68889236 % This is canceled by @fixbackslash.
68899237 @otherifyactive
@@ -6896,9 +9244,9 @@ should work if nowhere else does.}
68969244 @global@let\ = @eatinput
68979245
68989246 % On the other hand, perhaps the file did not have a `\input texinfo'. Then
6899-% the first `\{ in the file would cause an error. This macro tries to fix
9247+% the first `\' in the file would cause an error. This macro tries to fix
69009248 % that, assuming it is called before the first `\' could plausibly occur.
6901-% Also back turn on active characters that might appear in the input
9249+% Also turn back on active characters that might appear in the input
69029250 % file name, in case not using a pre-dumped format.
69039251 %
69049252 @gdef@fixbackslash{%
@@ -6915,9 +9263,21 @@ should work if nowhere else does.}
69159263 @catcode`@# = @other
69169264 @catcode`@% = @other
69179265
9266+@c Finally, make ` and ' active, so that txicodequoteundirected and
9267+@c txicodequotebacktick work right in, e.g., @w{@code{`foo'}}. If we
9268+@c don't make ` and ' active, @code will not get them as active chars.
9269+@c Do this last of all since we use ` in the previous @catcode assignments.
9270+@catcode`@'=@active
9271+@catcode`@`=@active
9272+@markupsetuplqdefault
9273+@markupsetuprqdefault
9274+
9275+@c Gnulib now utterly and painfully insists on no trailing whitespace.
9276+@c So we have to nuke it.
69189277
69199278 @c Local variables:
69209279 @c eval: (add-hook 'write-file-hooks 'time-stamp)
9280+@c eval: (add-hook 'write-file-hooks 'nuke-trailing-whitespace)
69219281 @c page-delimiter: "^\\\\message"
69229282 @c time-stamp-start: "def\\\\texinfoversion{"
69239283 @c time-stamp-format: "%:y-%02m-%02d.%02H"