修訂 | f8d5f06c976e44090f37a706c6a57456916df59b (tree) |
---|---|
時間 | 2009-04-21 21:36:46 |
作者 | Joseph Myers <joseph@code...> |
Commiter | Joseph Myers |
* texinfo/texinfo.tex: Update to version 2009-03-28.05.
@@ -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 | + | |
1 | 5 | 2009-04-17 Ben Elliston <bje@au.ibm.com> |
2 | 6 | |
3 | 7 | * config.sub, config.guess: Update from upstream sources. |
@@ -3,16 +3,16 @@ | ||
3 | 3 | % Load plain if necessary, i.e., if running under initex. |
4 | 4 | \expandafter\ifx\csname fmtname\endcsname\relax\input plain\fi |
5 | 5 | % |
6 | -\def\texinfoversion{2004-02-19.09} | |
6 | +\def\texinfoversion{2009-03-28.05} | |
7 | 7 | % |
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. | |
11 | 11 | % |
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 | |
13 | 13 | % 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. | |
16 | 16 | % |
17 | 17 | % This texinfo.tex file is distributed in the hope that it will be |
18 | 18 | % useful, but WITHOUT ANY WARRANTY; without even the implied warranty |
@@ -20,14 +20,12 @@ | ||
20 | 20 | % General Public License for more details. |
21 | 21 | % |
22 | 22 | % 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/>. | |
26 | 24 | % |
27 | 25 | % As a special exception, when this file is read by TeX when processing |
28 | 26 | % a Texinfo source document, you may use the result without |
29 | 27 | % restriction. (This has been our intent since Texinfo was invented.) |
30 | -% | |
28 | +% | |
31 | 29 | % Please try the latest version of texinfo.tex before submitting bug |
32 | 30 | % reports; you can get the latest version from: |
33 | 31 | % http://www.gnu.org/software/texinfo/ (the Texinfo home page), or |
@@ -55,7 +53,7 @@ | ||
55 | 53 | % It is possible to adapt texinfo.tex for other languages, to some |
56 | 54 | % extent. You can get the existing language-specific files from the |
57 | 55 | % full Texinfo distribution. |
58 | -% | |
56 | +% | |
59 | 57 | % The GNU Texinfo home page is http://www.gnu.org/software/texinfo. |
60 | 58 | |
61 | 59 |
@@ -67,7 +65,7 @@ | ||
67 | 65 | \everyjob{\message{[Texinfo version \texinfoversion]}% |
68 | 66 | \catcode`+=\active \catcode`\_=\active} |
69 | 67 | |
70 | -\message{Basics,} | |
68 | + | |
71 | 69 | \chardef\other=12 |
72 | 70 | |
73 | 71 | % We never want plain's \outer definition of \+ in Texinfo. |
@@ -89,15 +87,20 @@ | ||
89 | 87 | \let\ptexhat=^ |
90 | 88 | \let\ptexi=\i |
91 | 89 | \let\ptexindent=\indent |
92 | -\let\ptexnoindent=\noindent | |
93 | 90 | \let\ptexinsert=\insert |
94 | 91 | \let\ptexlbrace=\{ |
95 | 92 | \let\ptexless=< |
93 | +\let\ptexnewwrite\newwrite | |
94 | +\let\ptexnoindent=\noindent | |
96 | 95 | \let\ptexplus=+ |
97 | 96 | \let\ptexrbrace=\} |
98 | 97 | \let\ptexslash=\/ |
99 | 98 | \let\ptexstar=\* |
100 | 99 | \let\ptext=\t |
100 | +\let\ptextop=\top | |
101 | +{\catcode`\'=\active | |
102 | +\global\let\ptexquoteright'}% Math-mode def from plain.tex. | |
103 | +\let\ptexraggedright=\raggedright | |
101 | 104 | |
102 | 105 | % If this character appears in an error message or help string, it |
103 | 106 | % starts a new line in the output. |
@@ -152,20 +155,22 @@ | ||
152 | 155 | \ifx\putwordDefopt\undefined \gdef\putwordDefopt{User Option}\fi |
153 | 156 | \ifx\putwordDeffunc\undefined \gdef\putwordDeffunc{Function}\fi |
154 | 157 | |
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. | |
157 | 163 | \chardef\colonChar = `\: |
158 | 164 | \chardef\commaChar = `\, |
165 | +\chardef\dashChar = `\- | |
159 | 166 | \chardef\dotChar = `\. |
160 | 167 | \chardef\exclamChar= `\! |
168 | +\chardef\lquoteChar= `\` | |
161 | 169 | \chardef\questChar = `\? |
170 | +\chardef\rquoteChar= `\' | |
162 | 171 | \chardef\semiChar = `\; |
163 | 172 | \chardef\underChar = `\_ |
164 | 173 | |
165 | -\chardef\spaceChar = `\ % | |
166 | -\chardef\spacecat = 10 | |
167 | -\def\spaceisspace{\catcode\spaceChar=\spacecat} | |
168 | - | |
169 | 174 | % Ignore a token. |
170 | 175 | % |
171 | 176 | \def\gobble#1{} |
@@ -175,10 +180,12 @@ | ||
175 | 180 | |
176 | 181 | % Hyphenation fixes. |
177 | 182 | \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 | |
179 | 185 | data-base data-bases eshell fall-ing half-way long-est man-u-script |
180 | 186 | 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 | |
182 | 189 | stand-alone strong-est time-stamp time-stamps which-ever white-space |
183 | 190 | wide-spread wrap-around |
184 | 191 | } |
@@ -274,6 +281,50 @@ | ||
274 | 281 | \newdimen\cornerthick \cornerthick=.3pt |
275 | 282 | \newdimen\topandbottommargin \topandbottommargin=.75in |
276 | 283 | |
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 | + | |
277 | 328 | % Main output routine. |
278 | 329 | \chardef\PAGE = 255 |
279 | 330 | \output = {\onepageout{\pagecontents\PAGE}} |
@@ -291,7 +342,9 @@ | ||
291 | 342 | % |
292 | 343 | % Do this outside of the \shipout so @code etc. will be expanded in |
293 | 344 | % the headline as they should be, not taken literally (outputting ''code). |
345 | + \ifodd\pageno \getoddheadingmarks \else \getevenheadingmarks \fi | |
294 | 346 | \setbox\headlinebox = \vbox{\let\hsize=\pagewidth \makeheadline}% |
347 | + \ifodd\pageno \getoddfootingmarks \else \getevenfootingmarks \fi | |
295 | 348 | \setbox\footlinebox = \vbox{\let\hsize=\pagewidth \makefootline}% |
296 | 349 | % |
297 | 350 | {% |
@@ -299,10 +352,14 @@ | ||
299 | 352 | % take effect in \write's, yet the group defined by the \vbox ends |
300 | 353 | % before the \shipout runs. |
301 | 354 | % |
302 | - \escapechar = `\\ % use backslash in output files. | |
303 | 355 | \indexdummies % don't expand commands in the output. |
304 | 356 | \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} | |
306 | 363 | \shipout\vbox{% |
307 | 364 | % Do this early so pdf references go to the beginning of the page. |
308 | 365 | \ifpdfmakepagedest \pdfdest name{\the\pageno} xyz\fi |
@@ -330,9 +387,9 @@ | ||
330 | 387 | \pagebody{#1}% |
331 | 388 | \ifdim\ht\footlinebox > 0pt |
332 | 389 | % 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.) | |
334 | 391 | % The \baselineskip=24pt in plain's \makefootline has no effect. |
335 | - \vskip 2\baselineskip | |
392 | + \vskip 24pt | |
336 | 393 | \unvbox\footlinebox |
337 | 394 | \fi |
338 | 395 | % |
@@ -353,7 +410,7 @@ | ||
353 | 410 | \egroup % \vbox from first cropmarks clause |
354 | 411 | \fi |
355 | 412 | }% end of \shipout\vbox |
356 | - }% end of group with \normalturnoffactive | |
413 | + }% end of group with \indexdummies | |
357 | 414 | \advancepageno |
358 | 415 | \ifnum\outputpenalty>-20000 \else\dosupereject\fi |
359 | 416 | } |
@@ -366,7 +423,7 @@ | ||
366 | 423 | % marginal hacks, juha@viisa.uucp (Juha Takala) |
367 | 424 | \ifvoid\margin\else % marginal info is present |
368 | 425 | \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 | |
370 | 427 | \ifvoid\footins\else\vskip\skip\footins\footnoterule \unvbox\footins\fi |
371 | 428 | \ifr@ggedbottom \kern-\dimen@ \vfil \fi} |
372 | 429 | } |
@@ -388,7 +445,7 @@ | ||
388 | 445 | % |
389 | 446 | \def\parsearg{\parseargusing{}} |
390 | 447 | \def\parseargusing#1#2{% |
391 | - \def\next{#2}% | |
448 | + \def\argtorun{#2}% | |
392 | 449 | \begingroup |
393 | 450 | \obeylines |
394 | 451 | \spaceisspace |
@@ -407,7 +464,7 @@ | ||
407 | 464 | \def\argremovecomment#1\comment#2\ArgTerm{\argremovec #1\c\ArgTerm} |
408 | 465 | \def\argremovec#1\c#2\ArgTerm{\argcheckspaces#1\^^M\ArgTerm} |
409 | 466 | |
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. | |
411 | 468 | % |
412 | 469 | % \argremovec might leave us with trailing space, e.g., |
413 | 470 | % @end itemize @c foo |
@@ -419,8 +476,7 @@ | ||
419 | 476 | \def\argcheckspacesY#1\^^M#2\^^M#3\ArgTerm{% |
420 | 477 | \def\temp{#3}% |
421 | 478 | \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: | |
424 | 480 | \let\temp\finishparsearg |
425 | 481 | \else |
426 | 482 | \let\temp\argcheckspaces |
@@ -432,14 +488,14 @@ | ||
432 | 488 | % If a _delimited_ argument is enclosed in braces, they get stripped; so |
433 | 489 | % to get _exactly_ the rest of the line, we had to prevent such situation. |
434 | 490 | % 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 | |
437 | 493 | % either the null string, or it ends with \^^M---thus there is no danger |
438 | 494 | % that a pair of braces would be stripped. |
439 | 495 | % |
440 | 496 | % But first, we have to remove the trailing space token. |
441 | 497 | % |
442 | -\def\finishparsearg#1 \ArgTerm{\expandafter\next\expandafter{#1}} | |
498 | +\def\finishparsearg#1 \ArgTerm{\expandafter\argtorun\expandafter{#1}} | |
443 | 499 | |
444 | 500 | % \parseargdef\foo{...} |
445 | 501 | % is roughly equivalent to |
@@ -479,23 +535,23 @@ | ||
479 | 535 | \def\flushcr{\ifx\par\lisppar \def\next##1{}\else \let\next=\relax \fi \next} |
480 | 536 | |
481 | 537 | % Define the framework for environments in texinfo.tex. It's used like this: |
482 | -% | |
538 | +% | |
483 | 539 | % \envdef\foo{...} |
484 | 540 | % \def\Efoo{...} |
485 | -% | |
541 | +% | |
486 | 542 | % It's the responsibility of \envdef to insert \begingroup before the |
487 | 543 | % actual body; @end closes the group after calling \Efoo. \envdef also |
488 | 544 | % defines \thisenv, so the current environment is known; @end checks |
489 | 545 | % whether the environment name matches. The \checkenv macro can also be |
490 | 546 | % used to check whether the current environment is the one expected. |
491 | -% | |
547 | +% | |
492 | 548 | % 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 | |
494 | 550 | % implementation of @end takes care not to call \endgroup in this |
495 | 551 | % special case.) |
496 | 552 | |
497 | 553 | |
498 | -% At runtime, environments start with this: | |
554 | +% At run-time, environments start with this: | |
499 | 555 | \def\startenvironment#1{\begingroup\def\thisenv{#1}} |
500 | 556 | % initialize |
501 | 557 | \let\thisenv\empty |
@@ -513,7 +569,7 @@ | ||
513 | 569 | \fi |
514 | 570 | } |
515 | 571 | |
516 | -% Evironment mismatch, #1 expected: | |
572 | +% Environment mismatch, #1 expected: | |
517 | 573 | \def\badenverr{% |
518 | 574 | \errhelp = \EMsimple |
519 | 575 | \errmessage{This command can appear only \inenvironment\temp, |
@@ -563,7 +619,7 @@ | ||
563 | 619 | \let\}=\myrbrace |
564 | 620 | \begingroup |
565 | 621 | % Definitions to produce \{ and \} commands for indices, |
566 | - % and @{ and @} for the aux file. | |
622 | + % and @{ and @} for the aux/toc files. | |
567 | 623 | \catcode`\{ = \other \catcode`\} = \other |
568 | 624 | \catcode`\[ = 1 \catcode`\] = 2 |
569 | 625 | \catcode`\! = 0 \catcode`\\ = \other |
@@ -597,23 +653,23 @@ | ||
597 | 653 | \def\jmacro{j} |
598 | 654 | \def\dotless#1{% |
599 | 655 | \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 | |
602 | 658 | \else \errmessage{@dotless can be used only with i or j}% |
603 | 659 | \fi\fi |
604 | 660 | } |
605 | 661 | |
606 | 662 | % The \TeX{} logo, as in plain, but resetting the spacing so that a |
607 | 663 | % 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 } | |
610 | 666 | |
611 | 667 | % @LaTeX{} logo. Not quite the same results as the definition in |
612 | 668 | % latex.ltx, since we use a different font for the raised A; it's most |
613 | 669 | % convenient for us to use an explicitly smaller font, rather than using |
614 | 670 | % the \scriptstyle font (since we don't reset \scriptstyle and |
615 | 671 | % \scriptscriptstyle). |
616 | -% | |
672 | +% | |
617 | 673 | \def\LaTeX{% |
618 | 674 | L\kern-.36em |
619 | 675 | {\setbox0=\hbox{T}% |
@@ -644,13 +700,28 @@ | ||
644 | 700 | \let\/=\allowbreak |
645 | 701 | |
646 | 702 | % @. is an end-of-sentence period. |
647 | -\def\.{.\spacefactor=3000 } | |
703 | +\def\.{.\spacefactor=\endofsentencespacefactor\space} | |
648 | 704 | |
649 | 705 | % @! is an end-of-sentence bang. |
650 | -\def\!{!\spacefactor=3000 } | |
706 | +\def\!{!\spacefactor=\endofsentencespacefactor\space} | |
651 | 707 | |
652 | 708 | % @? 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 | +} | |
654 | 725 | |
655 | 726 | % @w prevents a word break. Without the \leavevmode, @w at the |
656 | 727 | % 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.} | ||
849 | 920 | \temp |
850 | 921 | } |
851 | 922 | |
852 | -% @include file insert text of that file as input. | |
923 | +% @include FILE -- \input text of FILE. | |
853 | 924 | % |
854 | 925 | \def\include{\parseargusing\filenamecatcodes\includezzz} |
855 | 926 | \def\includezzz#1{% |
856 | 927 | \pushthisfilestack |
857 | 928 | \def\thisfile{#1}% |
858 | 929 | {% |
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. | |
861 | 937 | \expandafter |
862 | 938 | }\temp |
863 | 939 | \popthisfilestack |
@@ -872,6 +948,8 @@ where each line of input produces a line of output.} | ||
872 | 948 | \catcode`>=\other |
873 | 949 | \catcode`+=\other |
874 | 950 | \catcode`-=\other |
951 | + \catcode`\`=\other | |
952 | + \catcode`\'=\other | |
875 | 953 | } |
876 | 954 | |
877 | 955 | \def\pushthisfilestack{% |
@@ -1028,9 +1106,9 @@ where each line of input produces a line of output.} | ||
1028 | 1106 | % _ active, and distinguish by seeing if the current family is \slfam, |
1029 | 1107 | % which is what @var uses. |
1030 | 1108 | { |
1031 | - \catcode\underChar = \active | |
1109 | + \catcode`\_ = \active | |
1032 | 1110 | \gdef\mathunderscore{% |
1033 | - \catcode\underChar=\active | |
1111 | + \catcode`\_=\active | |
1034 | 1112 | \def_{\ifnum\fam=\slfam \_\else\sb\fi}% |
1035 | 1113 | } |
1036 | 1114 | } |
@@ -1047,6 +1125,16 @@ where each line of input produces a line of output.} | ||
1047 | 1125 | \mathunderscore |
1048 | 1126 | \let\\ = \mathbackslash |
1049 | 1127 | \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 | |
1050 | 1138 | $\finishmath |
1051 | 1139 | } |
1052 | 1140 | \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.} | ||
1060 | 1148 | \catcode`< = \active |
1061 | 1149 | \catcode`> = \active |
1062 | 1150 | \catcode`+ = \active |
1151 | + \catcode`' = \active | |
1063 | 1152 | \gdef\mathactive{% |
1064 | 1153 | \let^ = \ptexhat |
1065 | 1154 | \let< = \ptexless |
1066 | 1155 | \let> = \ptexgtr |
1067 | 1156 | \let+ = \ptexplus |
1157 | + \let' = \ptexquoteright | |
1068 | 1158 | } |
1069 | 1159 | } |
1070 | 1160 | |
1071 | -% @bullet and @minus need the same treatment as @math, just above. | |
1161 | +% Some math mode symbols. | |
1072 | 1162 | \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} | |
1074 | 1166 | |
1075 | 1167 | % @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. | |
1078 | 1172 | % |
1079 | 1173 | \def\dots{% |
1080 | 1174 | \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 | |
1085 | 1186 | }% |
1086 | 1187 | } |
1087 | 1188 |
@@ -1089,12 +1190,12 @@ where each line of input produces a line of output.} | ||
1089 | 1190 | % |
1090 | 1191 | \def\enddots{% |
1091 | 1192 | \dots |
1092 | - \spacefactor=3000 | |
1193 | + \spacefactor=\endofsentencespacefactor | |
1093 | 1194 | } |
1094 | 1195 | |
1095 | 1196 | % @comma{} is so commas can be inserted into text without messing up |
1096 | 1197 | % Texinfo's parsing. |
1097 | -% | |
1198 | +% | |
1098 | 1199 | \let\comma = , |
1099 | 1200 | |
1100 | 1201 | % @refill is a no-op. |
@@ -1160,48 +1261,192 @@ where each line of input produces a line of output.} | ||
1160 | 1261 | \newif\ifpdf |
1161 | 1262 | \newif\ifpdfmakepagedest |
1162 | 1263 | |
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. | |
1163 | 1267 | \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 | |
1170 | 1268 | \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). | |
1175 | 1380 | \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 | |
1179 | 1412 | % included twice. (Version 3.14159-pre-1.0-unofficial-20010704.) |
1180 | 1413 | \ifnum\pdftexversion < 14 |
1181 | 1414 | \immediate\pdfimage |
1182 | 1415 | \else |
1183 | 1416 | \immediate\pdfximage |
1184 | 1417 | \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 | |
1187 | 1420 | \ifnum\pdftexversion<13 |
1188 | - #1.pdf% | |
1421 | + #1.\pdfimgext | |
1189 | 1422 | \else |
1190 | - {#1.pdf}% | |
1423 | + {#1.\pdfimgext}% | |
1191 | 1424 | \fi |
1192 | 1425 | \ifnum\pdftexversion < 14 \else |
1193 | 1426 | \pdfrefximage \pdflastximage |
1194 | 1427 | \fi} |
1428 | + % | |
1195 | 1429 | \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}% | |
1201 | 1439 | }} |
1440 | + % | |
1441 | + % used to mark target names; must be expandable. | |
1202 | 1442 | \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 | + % | |
1205 | 1450 | % Adding outlines to PDF; macros for calculating structure of outlines |
1206 | 1451 | % come from Petr Olsak |
1207 | 1452 | \def\expnumber#1{\expandafter\ifx\csname#1\endcsname\relax 0% |
@@ -1210,20 +1455,31 @@ where each line of input produces a line of output.} | ||
1210 | 1455 | \advance\tempnum by 1 |
1211 | 1456 | \expandafter\xdef\csname#1\endcsname{\the\tempnum}} |
1212 | 1457 | % |
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 | + % | |
1218 | 1464 | \def\dopdfoutline#1#2#3#4{% |
1219 | 1465 | % Generate a link to the node text if that exists; else, use the |
1220 | 1466 | % page number. We could generate a destination for the section |
1221 | 1467 | % 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. | |
1223 | 1469 | \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}% | |
1225 | 1481 | % |
1226 | - \pdfoutline goto name{\pdfmkpgn{\pdfoutlinedest}}#2{#1}% | |
1482 | + \pdfoutline goto name{\pdfmkpgn{\pdfoutlinedest}}#2{\pdfoutlinetext}% | |
1227 | 1483 | } |
1228 | 1484 | % |
1229 | 1485 | \def\pdfmakeoutlines{% |
@@ -1235,13 +1491,13 @@ where each line of input produces a line of output.} | ||
1235 | 1491 | % Read toc silently, to get counts of subentries for \pdfoutline. |
1236 | 1492 | \def\numchapentry##1##2##3##4{% |
1237 | 1493 | \def\thischapnum{##2}% |
1238 | - \let\thissecnum\empty | |
1239 | - \let\thissubsecnum\empty | |
1494 | + \def\thissecnum{0}% | |
1495 | + \def\thissubsecnum{0}% | |
1240 | 1496 | }% |
1241 | 1497 | \def\numsecentry##1##2##3##4{% |
1242 | 1498 | \advancenumber{chap\thischapnum}% |
1243 | 1499 | \def\thissecnum{##2}% |
1244 | - \let\thissubsecnum\empty | |
1500 | + \def\thissubsecnum{0}% | |
1245 | 1501 | }% |
1246 | 1502 | \def\numsubsecentry##1##2##3##4{% |
1247 | 1503 | \advancenumber{sec\thissecnum}% |
@@ -1250,9 +1506,9 @@ where each line of input produces a line of output.} | ||
1250 | 1506 | \def\numsubsubsecentry##1##2##3##4{% |
1251 | 1507 | \advancenumber{subsec\thissubsecnum}% |
1252 | 1508 | }% |
1253 | - \let\thischapnum\empty | |
1254 | - \let\thissecnum\empty | |
1255 | - \let\thissubsecnum\empty | |
1509 | + \def\thischapnum{0}% | |
1510 | + \def\thissecnum{0}% | |
1511 | + \def\thissubsecnum{0}% | |
1256 | 1512 | % |
1257 | 1513 | % use \def rather than \let here because we redefine \chapentry et |
1258 | 1514 | % al. a second time, below. |
@@ -1264,12 +1520,12 @@ where each line of input produces a line of output.} | ||
1264 | 1520 | \def\unnsecentry{\numsecentry}% |
1265 | 1521 | \def\unnsubsecentry{\numsubsecentry}% |
1266 | 1522 | \def\unnsubsubsecentry{\numsubsubsecentry}% |
1267 | - \input \jobname.toc | |
1523 | + \readdatafile{toc}% | |
1268 | 1524 | % |
1269 | 1525 | % Read toc second time, this time actually producing the outlines. |
1270 | 1526 | % The `-' means take the \expnumber as the absolute number of |
1271 | 1527 | % subentries, which we calculated on our first read of the .toc above. |
1272 | - % | |
1528 | + % | |
1273 | 1529 | % We use the node names as the destinations. |
1274 | 1530 | \def\numchapentry##1##2##3##4{% |
1275 | 1531 | \dopdfoutline{##1}{count-\expnumber{chap##2}}{##3}{##4}}% |
@@ -1285,46 +1541,17 @@ where each line of input produces a line of output.} | ||
1285 | 1541 | % since the encoding is unknown. For example, the eogonek from |
1286 | 1542 | % Latin 2 (0xea) gets translated to a | character. Info from |
1287 | 1543 | % Staszek Wawrykiewicz, 19 Jan 2004 04:09:24 +0100. |
1288 | - % | |
1544 | + % | |
1289 | 1545 | % xx to do this right, we have to translate 8-bit characters to |
1290 | 1546 | % their "best" equivalent, based on the @documentencoding. Right |
1291 | 1547 | % now, I guess we'll just let the pdf reader have its way. |
1292 | 1548 | \indexnofonts |
1293 | - \turnoffactive | |
1294 | - \input \jobname.toc | |
1549 | + \setupdatafile | |
1550 | + \catcode`\\=\active \otherbackslash | |
1551 | + \input \tocreadfilename | |
1295 | 1552 | \endgroup |
1296 | 1553 | } |
1297 | 1554 | % |
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,} | |
1328 | 1555 | \def\skipspaces#1{\def\PP{#1}\def\D{|}% |
1329 | 1556 | \ifx\PP\D\let\nextsp\relax |
1330 | 1557 | \else\let\nextsp\skipspaces |
@@ -1339,11 +1566,23 @@ where each line of input produces a line of output.} | ||
1339 | 1566 | \else |
1340 | 1567 | \let \startlink \pdfstartlink |
1341 | 1568 | \fi |
1569 | + % make a live url in pdf output. | |
1342 | 1570 | \def\pdfurl#1{% |
1343 | 1571 | \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 | |
1345 | 1580 | \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}% | |
1347 | 1586 | \startlink attr{/Border [0 0 0]}% |
1348 | 1587 | user{/Subtype /Link /A << /S /URI /URI (#1) >>}% |
1349 | 1588 | \endgroup} |
@@ -1370,9 +1609,17 @@ where each line of input produces a line of output.} | ||
1370 | 1609 | {\noexpand\pdflink{\the\toksC}}\toksC={}\global\countA=0} |
1371 | 1610 | \def\pdflink#1{% |
1372 | 1611 | \startlink attr{/Border [0 0 0]} goto name{\pdfmkpgn{#1}} |
1373 | - \linkcolor #1\endlink} | |
1612 | + \setcolor{\linkcolor}#1\endlink} | |
1374 | 1613 | \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 | |
1376 | 1623 | |
1377 | 1624 | |
1378 | 1625 | \message{fonts,} |
@@ -1380,22 +1627,26 @@ where each line of input produces a line of output.} | ||
1380 | 1627 | % Change the current font style to #1, remembering it in \curfontstyle. |
1381 | 1628 | % For now, we do not accumulate font styles: @b{@i{foo}} prints foo in |
1382 | 1629 | % italics, not bold italics. |
1383 | -% | |
1630 | +% | |
1384 | 1631 | \def\setfontstyle#1{% |
1385 | 1632 | \def\curfontstyle{#1}% not as a control sequence, because we are \edef'd. |
1386 | 1633 | \csname ten#1\endcsname % change the current font |
1387 | 1634 | } |
1388 | 1635 | |
1389 | 1636 | % Select #1 fonts with the current style. |
1390 | -% | |
1637 | +% | |
1391 | 1638 | \def\selectfonts#1{\csname #1fonts\endcsname \csname\curfontstyle\endcsname} |
1392 | 1639 | |
1393 | 1640 | \def\rm{\fam=0 \setfontstyle{rm}} |
1394 | 1641 | \def\it{\fam=\itfam \setfontstyle{it}} |
1395 | 1642 | \def\sl{\fam=\slfam \setfontstyle{sl}} |
1396 | -\def\bf{\fam=\bffam \setfontstyle{bf}} | |
1643 | +\def\bf{\fam=\bffam \setfontstyle{bf}}\def\bfstylename{bf} | |
1397 | 1644 | \def\tt{\fam=\ttfam \setfontstyle{tt}} |
1398 | 1645 | |
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 | + | |
1399 | 1650 | % Texinfo sort of supports the sans serif font style, which plain TeX does not. |
1400 | 1651 | % So we set up a \sf. |
1401 | 1652 | \newfam\sffam |
@@ -1405,6 +1656,7 @@ where each line of input produces a line of output.} | ||
1405 | 1656 | % We don't need math for this font style. |
1406 | 1657 | \def\ttsl{\setfontstyle{ttsl}} |
1407 | 1658 | |
1659 | + | |
1408 | 1660 | % Default leading. |
1409 | 1661 | \newdimen\textleading \textleading = 13.2pt |
1410 | 1662 |
@@ -1416,8 +1668,12 @@ where each line of input produces a line of output.} | ||
1416 | 1668 | \def\strutheightpercent{.70833} |
1417 | 1669 | \def\strutdepthpercent {.29167} |
1418 | 1670 | % |
1671 | +% can get a sort of poor man's double spacing by redefining this. | |
1672 | +\def\baselinefactor{1} | |
1673 | +% | |
1419 | 1674 | \def\setleading#1{% |
1420 | - \normalbaselineskip = #1\relax | |
1675 | + \dimen0 = #1\relax | |
1676 | + \normalbaselineskip = \baselinefactor\dimen0 | |
1421 | 1677 | \normallineskip = \lineskipfactor\normalbaselineskip |
1422 | 1678 | \normalbaselines |
1423 | 1679 | \setbox\strutbox =\hbox{% |
@@ -1426,10 +1682,279 @@ where each line of input produces a line of output.} | ||
1426 | 1682 | }% |
1427 | 1683 | } |
1428 | 1684 | |
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 | + | |
1429 | 1946 | % Set the font macro #1 to the font named #2, adding on the |
1430 | 1947 | % 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 | |
1433 | 1958 | |
1434 | 1959 | % Use cm as the default font prefix. |
1435 | 1960 | % To specify the font prefix, you must define \fontprefix |
@@ -1454,118 +1979,293 @@ where each line of input produces a line of output.} | ||
1454 | 1979 | \def\scshape{csc} |
1455 | 1980 | \def\scbshape{csc} |
1456 | 1981 | |
1982 | +% Definitions for a main text size of 11pt. This is the default in | |
1983 | +% Texinfo. | |
1984 | +% | |
1985 | +\def\definetextfontsizexi{% | |
1457 | 1986 | % 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} | |
1475 | 1997 | \font\texti=cmmi10 scaled \mainmagstep |
1476 | 1998 | \font\textsy=cmsy10 scaled \mainmagstep |
1999 | +\def\textecsize{1095} | |
1477 | 2000 | |
1478 | 2001 | % 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} | |
1482 | 2005 | \def\df{\let\tentt=\deftt \let\tenbf = \defbf \let\tenttsl=\defttsl \bf} |
1483 | 2006 | |
1484 | 2007 | % 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} | |
1493 | 2017 | \font\smalli=cmmi9 |
1494 | 2018 | \font\smallsy=cmsy9 |
2019 | +\def\smallecsize{0900} | |
1495 | 2020 | |
1496 | 2021 | % 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} | |
1505 | 2031 | \font\smalleri=cmmi8 |
1506 | 2032 | \font\smallersy=cmsy8 |
2033 | +\def\smallerecsize{0800} | |
1507 | 2034 | |
1508 | 2035 | % 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} | |
1515 | 2043 | \let\titlebf=\titlerm |
1516 | -\setfont\titlesc\scbshape{10}{\magstep4} | |
2044 | +\setfont\titlesc\scbshape{10}{\magstep4}{OT1} | |
1517 | 2045 | \font\titlei=cmmi12 scaled \magstep3 |
1518 | 2046 | \font\titlesy=cmsy10 scaled \magstep4 |
1519 | -\def\authorrm{\secrm} | |
1520 | -\def\authortt{\sectt} | |
2047 | +\def\titleecsize{2074} | |
1521 | 2048 | |
1522 | 2049 | % 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} | |
1529 | 2057 | \let\chapbf=\chaprm |
1530 | -\setfont\chapsc\scbshape{10}{\magstep3} | |
2058 | +\setfont\chapsc\scbshape{10}{\magstep3}{OT1} | |
1531 | 2059 | \font\chapi=cmmi12 scaled \magstep2 |
1532 | 2060 | \font\chapsy=cmsy10 scaled \magstep3 |
2061 | +\def\chapecsize{1728} | |
1533 | 2062 | |
1534 | 2063 | % 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} | |
1541 | 2071 | \let\secbf\secrm |
1542 | -\setfont\secsc\scbshape{10}{\magstep2} | |
2072 | +\setfont\secsc\scbshape{10}{\magstep2}{OT1} | |
1543 | 2073 | \font\seci=cmmi12 scaled \magstep1 |
1544 | 2074 | \font\secsy=cmsy10 scaled \magstep2 |
2075 | +\def\sececsize{1440} | |
1545 | 2076 | |
1546 | 2077 | % 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} | |
1553 | 2085 | \let\ssecbf\ssecrm |
1554 | -\setfont\ssecsc\scbshape{10}{1315} | |
2086 | +\setfont\ssecsc\scbshape{10}{1315}{OT1} | |
1555 | 2087 | \font\sseci=cmmi12 scaled \magstephalf |
1556 | 2088 | \font\ssecsy=cmsy10 scaled 1315 |
2089 | +\def\ssececsize{1200} | |
1557 | 2090 | |
1558 | 2091 | % 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} | |
1567 | 2101 | \font\reducedi=cmmi10 |
1568 | 2102 | \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 | + | |
1569 | 2269 | |
1570 | 2270 | % In order for the font changes to affect most math symbols and letters, |
1571 | 2271 | % 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.} | ||
1583 | 2283 | % of just \STYLE. We do this because \STYLE needs to also set the |
1584 | 2284 | % current \fam for math mode. Our \STYLE (e.g., \rm) commands hardwire |
1585 | 2285 | % \tenSTYLE to set the current font. |
1586 | -% | |
2286 | +% | |
1587 | 2287 | % Each font-changing command also sets the names \lsize (one size lower) |
1588 | 2288 | % and \lllsize (three sizes lower). These relative commands are used in |
1589 | 2289 | % the LaTeX logo and acronyms. |
1590 | -% | |
2290 | +% | |
1591 | 2291 | % This all needs generalizing, badly. |
1592 | -% | |
2292 | +% | |
1593 | 2293 | \def\textfonts{% |
1594 | 2294 | \let\tenrm=\textrm \let\tenit=\textit \let\tensl=\textsl |
1595 | 2295 | \let\tenbf=\textbf \let\tentt=\texttt \let\smallcaps=\textsc |
1596 | 2296 | \let\tensf=\textsf \let\teni=\texti \let\tensy=\textsy |
1597 | 2297 | \let\tenttsl=\textttsl |
2298 | + \def\curfontsize{text}% | |
1598 | 2299 | \def\lsize{reduced}\def\lllsize{smaller}% |
1599 | 2300 | \resetmathfonts \setleading{\textleading}} |
1600 | 2301 | \def\titlefonts{% |
@@ -1602,13 +2303,16 @@ where each line of input produces a line of output.} | ||
1602 | 2303 | \let\tenbf=\titlebf \let\tentt=\titlett \let\smallcaps=\titlesc |
1603 | 2304 | \let\tensf=\titlesf \let\teni=\titlei \let\tensy=\titlesy |
1604 | 2305 | \let\tenttsl=\titlettsl |
2306 | + \def\curfontsize{title}% | |
1605 | 2307 | \def\lsize{chap}\def\lllsize{subsec}% |
1606 | 2308 | \resetmathfonts \setleading{25pt}} |
1607 | -\def\titlefont#1{{\titlefonts\rm #1}} | |
2309 | +\def\titlefont#1{{\titlefonts\rmisbold #1}} | |
1608 | 2310 | \def\chapfonts{% |
1609 | 2311 | \let\tenrm=\chaprm \let\tenit=\chapit \let\tensl=\chapsl |
1610 | 2312 | \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}% | |
1612 | 2316 | \def\lsize{sec}\def\lllsize{text}% |
1613 | 2317 | \resetmathfonts \setleading{19pt}} |
1614 | 2318 | \def\secfonts{% |
@@ -1616,6 +2320,7 @@ where each line of input produces a line of output.} | ||
1616 | 2320 | \let\tenbf=\secbf \let\tentt=\sectt \let\smallcaps=\secsc |
1617 | 2321 | \let\tensf=\secsf \let\teni=\seci \let\tensy=\secsy |
1618 | 2322 | \let\tenttsl=\secttsl |
2323 | + \def\curfontsize{sec}% | |
1619 | 2324 | \def\lsize{subsec}\def\lllsize{reduced}% |
1620 | 2325 | \resetmathfonts \setleading{16pt}} |
1621 | 2326 | \def\subsecfonts{% |
@@ -1623,6 +2328,7 @@ where each line of input produces a line of output.} | ||
1623 | 2328 | \let\tenbf=\ssecbf \let\tentt=\ssectt \let\smallcaps=\ssecsc |
1624 | 2329 | \let\tensf=\ssecsf \let\teni=\sseci \let\tensy=\ssecsy |
1625 | 2330 | \let\tenttsl=\ssecttsl |
2331 | + \def\curfontsize{ssec}% | |
1626 | 2332 | \def\lsize{text}\def\lllsize{small}% |
1627 | 2333 | \resetmathfonts \setleading{15pt}} |
1628 | 2334 | \let\subsubsecfonts = \subsecfonts |
@@ -1631,6 +2337,7 @@ where each line of input produces a line of output.} | ||
1631 | 2337 | \let\tenbf=\reducedbf \let\tentt=\reducedtt \let\reducedcaps=\reducedsc |
1632 | 2338 | \let\tensf=\reducedsf \let\teni=\reducedi \let\tensy=\reducedsy |
1633 | 2339 | \let\tenttsl=\reducedttsl |
2340 | + \def\curfontsize{reduced}% | |
1634 | 2341 | \def\lsize{small}\def\lllsize{smaller}% |
1635 | 2342 | \resetmathfonts \setleading{10.5pt}} |
1636 | 2343 | \def\smallfonts{% |
@@ -1638,6 +2345,7 @@ where each line of input produces a line of output.} | ||
1638 | 2345 | \let\tenbf=\smallbf \let\tentt=\smalltt \let\smallcaps=\smallsc |
1639 | 2346 | \let\tensf=\smallsf \let\teni=\smalli \let\tensy=\smallsy |
1640 | 2347 | \let\tenttsl=\smallttsl |
2348 | + \def\curfontsize{small}% | |
1641 | 2349 | \def\lsize{smaller}\def\lllsize{smaller}% |
1642 | 2350 | \resetmathfonts \setleading{10.5pt}} |
1643 | 2351 | \def\smallerfonts{% |
@@ -1645,9 +2353,20 @@ where each line of input produces a line of output.} | ||
1645 | 2353 | \let\tenbf=\smallerbf \let\tentt=\smallertt \let\smallcaps=\smallersc |
1646 | 2354 | \let\tensf=\smallersf \let\teni=\smalleri \let\tensy=\smallersy |
1647 | 2355 | \let\tenttsl=\smallerttsl |
2356 | + \def\curfontsize{smaller}% | |
1648 | 2357 | \def\lsize{smaller}\def\lllsize{smaller}% |
1649 | 2358 | \resetmathfonts \setleading{9.5pt}} |
1650 | 2359 | |
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 | + | |
1651 | 2370 | % Set the fonts to use with the @small... environments. |
1652 | 2371 | \let\smallexamplefonts = \smallfonts |
1653 | 2372 |
@@ -1661,28 +2380,128 @@ where each line of input produces a line of output.} | ||
1661 | 2380 | % |
1662 | 2381 | % By the way, for comparison, here's what fits with @example (10pt): |
1663 | 2382 | % 8.5x11=71 smallbook=60 a4=75 a5=58 |
1664 | -% | |
1665 | -% I wish the USA used A4 paper. | |
1666 | 2383 | % --karl, 24jan03. |
1667 | 2384 | |
1668 | - | |
1669 | 2385 | % Set up the default fonts, so we can use them for creating boxes. |
1670 | 2386 | % |
1671 | -\textfonts \rm | |
2387 | +\definetextfontsizexi | |
1672 | 2388 | |
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} | |
1676 | 2501 | |
1677 | 2502 | % Count depth in font-changes, for error checks |
1678 | 2503 | \newcount\fontdepth \fontdepth=0 |
1679 | 2504 | |
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 | - | |
1686 | 2505 | %% Add scribe-like font environments, plus @l for inline lisp (usually sans |
1687 | 2506 | %% serif) and @ii for TeX italic |
1688 | 2507 |
@@ -1697,18 +2516,28 @@ where each line of input produces a line of output.} | ||
1697 | 2516 | % @var is set to this for defun arguments. |
1698 | 2517 | \def\ttslanted#1{{\ttsl #1}\futurelet\next\smartitalicx} |
1699 | 2518 | |
1700 | -% like \smartslanted except unconditionally use \sl. We never want | |
2519 | +% @cite is like \smartslanted except unconditionally use \sl. We never want | |
1701 | 2520 | % ttsl for book titles, do we? |
1702 | 2521 | \def\cite#1{{\sl #1}\futurelet\next\smartitalicx} |
1703 | 2522 | |
1704 | 2523 | \let\i=\smartitalic |
1705 | -\let\var=\smartslanted | |
2524 | +\let\slanted=\smartslanted | |
2525 | +\def\var#1{{\setupmarkupstyle{var}\smartslanted{#1}}} | |
1706 | 2526 | \let\dfn=\smartslanted |
1707 | 2527 | \let\emph=\smartitalic |
1708 | 2528 | |
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. | |
1709 | 2535 | \def\b#1{{\bf #1}} |
1710 | 2536 | \let\strong=\b |
1711 | 2537 | |
2538 | +% @sansserif, explicit sans. | |
2539 | +\def\sansserif#1{{\sf #1}} | |
2540 | + | |
1712 | 2541 | % We can't just use \exhyphenpenalty, because that only has effect at |
1713 | 2542 | % the end of a paragraph. Restore normal hyphenation at the end of the |
1714 | 2543 | % group within which \nohyphenation is presumably called. |
@@ -1721,27 +2550,48 @@ where each line of input produces a line of output.} | ||
1721 | 2550 | % sometimes \x has an active definition that messes things up. |
1722 | 2551 | % |
1723 | 2552 | \catcode`@=11 |
1724 | - \def\frenchspacing{% | |
2553 | + \def\plainfrenchspacing{% | |
1725 | 2554 | \sfcode\dotChar =\@m \sfcode\questChar=\@m \sfcode\exclamChar=\@m |
1726 | 2555 | \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 | |
1727 | 2562 | } |
1728 | 2563 | \catcode`@=\other |
2564 | +\def\endofsentencespacefactor{3000}% default | |
1729 | 2565 | |
2566 | +% @t, explicit typewriter. | |
1730 | 2567 | \def\t#1{% |
1731 | - {\tt \rawbackslash \frenchspacing #1}% | |
2568 | + {\tt \rawbackslash \plainfrenchspacing #1}% | |
1732 | 2569 | \null |
1733 | 2570 | } |
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. | |
1745 | 2595 | \def\ctrl #1{{\tt \rawbackslash \hat}#1} |
1746 | 2596 | |
1747 | 2597 | % @file, @option are the same as @samp. |
@@ -1765,7 +2615,7 @@ where each line of input produces a line of output.} | ||
1765 | 2615 | \nohyphenation |
1766 | 2616 | % |
1767 | 2617 | \rawbackslash |
1768 | - \frenchspacing | |
2618 | + \plainfrenchspacing | |
1769 | 2619 | #1% |
1770 | 2620 | }% |
1771 | 2621 | \null |
@@ -1781,12 +2631,21 @@ where each line of input produces a line of output.} | ||
1781 | 2631 | % and arrange explicitly to hyphenate at a dash. |
1782 | 2632 | % -- rms. |
1783 | 2633 | { |
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 | |
1786 | 2637 | % |
1787 | 2638 | \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 | |
1790 | 2649 | \codex |
1791 | 2650 | } |
1792 | 2651 | } |
@@ -1806,43 +2665,73 @@ where each line of input produces a line of output.} | ||
1806 | 2665 | } |
1807 | 2666 | \def\codex #1{\tclose{#1}\endgroup} |
1808 | 2667 | |
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 | + | |
1809 | 2690 | % @kbd is like @code, except that if the argument is just one @key command, |
1810 | 2691 | % then @kbd has no effect. |
2692 | +\def\kbd#1{{\setupmarkupstyle{kbd}\def\look{#1}\expandafter\kbdfoo\look??\par}} | |
1811 | 2693 | |
1812 | 2694 | % @kbdinputstyle -- arg is `distinct' (@kbd uses slanted tty font always), |
1813 | 2695 | % `example' (@kbd uses ttsl only inside of @example and friends), |
1814 | 2696 | % or `code' (@kbd uses normal tty font always). |
1815 | 2697 | \parseargdef\kbdinputstyle{% |
1816 | - \def\arg{#1}% | |
1817 | - \ifx\arg\worddistinct | |
2698 | + \def\txiarg{#1}% | |
2699 | + \ifx\txiarg\worddistinct | |
1818 | 2700 | \gdef\kbdexamplefont{\ttsl}\gdef\kbdfont{\ttsl}% |
1819 | - \else\ifx\arg\wordexample | |
2701 | + \else\ifx\txiarg\wordexample | |
1820 | 2702 | \gdef\kbdexamplefont{\ttsl}\gdef\kbdfont{\tt}% |
1821 | - \else\ifx\arg\wordcode | |
2703 | + \else\ifx\txiarg\wordcode | |
1822 | 2704 | \gdef\kbdexamplefont{\tt}\gdef\kbdfont{\tt}% |
1823 | 2705 | \else |
1824 | 2706 | \errhelp = \EMsimple |
1825 | - \errmessage{Unknown @kbdinputstyle option `\arg'}% | |
2707 | + \errmessage{Unknown @kbdinputstyle option `\txiarg'}% | |
1826 | 2708 | \fi\fi\fi |
1827 | 2709 | } |
1828 | 2710 | \def\worddistinct{distinct} |
1829 | 2711 | \def\wordexample{example} |
1830 | 2712 | \def\wordcode{code} |
1831 | 2713 | |
1832 | -% Default is `distinct.' | |
2714 | +% Default is `distinct'. | |
1833 | 2715 | \kbdinputstyle distinct |
1834 | 2716 | |
1835 | 2717 | \def\xkey{\key} |
1836 | 2718 | \def\kbdfoo#1#2#3\par{\def\one{#1}\def\three{#3}\def\threex{??}% |
1837 | 2719 | \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} | |
1840 | 2722 | |
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 | |
1843 | 2725 | \let\env=\code |
1844 | 2726 | \let\command=\code |
1845 | 2727 | |
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 | + | |
1846 | 2735 | % @uref (abbreviation for `urlref') takes an optional (comma-separated) |
1847 | 2736 | % second argument specifying the text to display and an optional third |
1848 | 2737 | % 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.} | ||
1871 | 2760 | \endlink |
1872 | 2761 | \endgroup} |
1873 | 2762 | |
2763 | +% @url synonym for @uref, since that's how everyone uses it. | |
2764 | +% | |
2765 | +\let\url=\uref | |
2766 | + | |
1874 | 2767 | % rms does not like angle brackets --karl, 17may97. |
1875 | 2768 | % So now @email is just like @uref, unless we are pdf. |
1876 | 2769 | % |
@@ -1888,30 +2781,20 @@ where each line of input produces a line of output.} | ||
1888 | 2781 | \let\email=\uref |
1889 | 2782 | \fi |
1890 | 2783 | |
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 | - | |
1898 | 2784 | % Typeset a dimension, e.g., `in' or `pt'. The only reason for the |
1899 | 2785 | % argument is to make the input look right: @dmn{pt} instead of @dmn{}pt. |
1900 | 2786 | % |
1901 | 2787 | \def\dmn#1{\thinspace #1} |
1902 | 2788 | |
1903 | -\def\kbd#1{\def\look{#1}\expandafter\kbdfoo\look??\par} | |
1904 | - | |
1905 | 2789 | % @l was never documented to mean ``switch to the Lisp font'', |
1906 | 2790 | % and it is not used as such in any manual I can find. We need it for |
1907 | 2791 | % Polish suppressed-l. --karl, 22sep96. |
1908 | 2792 | %\def\l#1{{\li #1}\null} |
1909 | 2793 | |
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 | +% | |
1915 | 2798 | \def\acronym#1{\doacronym #1,,\finish} |
1916 | 2799 | \def\doacronym#1,#2,#3\finish{% |
1917 | 2800 | {\selectfonts\lsize #1}% |
@@ -1921,10 +2804,172 @@ where each line of input produces a line of output.} | ||
1921 | 2804 | \fi |
1922 | 2805 | } |
1923 | 2806 | |
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 | +% | |
1926 | 2859 | \def\pounds{{\it\$}} |
1927 | 2860 | |
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 | + | |
1928 | 2973 | % @registeredsymbol - R in a circle. The font for the R should really |
1929 | 2974 | % be smaller yet, but lllsize is the best we can do for now. |
1930 | 2975 | % Adapted from the plain.tex definition of \copyright. |
@@ -1935,6 +2980,24 @@ where each line of input produces a line of output.} | ||
1935 | 2980 | }$% |
1936 | 2981 | } |
1937 | 2982 | |
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 | + | |
1938 | 3001 | |
1939 | 3002 | \message{page headings,} |
1940 | 3003 |
@@ -2019,12 +3082,9 @@ where each line of input produces a line of output.} | ||
2019 | 3082 | \let\subtitlerm=\tenrm |
2020 | 3083 | \def\subtitlefont{\subtitlerm \normalbaselineskip = 13pt \normalbaselines} |
2021 | 3084 | |
2022 | -\def\authorfont{\authorrm \normalbaselineskip = 16pt \normalbaselines | |
2023 | - \let\tt=\authortt} | |
2024 | - | |
2025 | 3085 | \parseargdef\title{% |
2026 | 3086 | \checkenv\titlepage |
2027 | - \leftline{\titlefonts\rm #1} | |
3087 | + \leftline{\titlefonts\rmisbold #1} | |
2028 | 3088 | % print a rule at the page bottom also. |
2029 | 3089 | \finishedtitlepagefalse |
2030 | 3090 | \vskip4pt \hrule height 4pt width \hsize \vskip4pt |
@@ -2037,7 +3097,7 @@ where each line of input produces a line of output.} | ||
2037 | 3097 | |
2038 | 3098 | % @author should come last, but may come many times. |
2039 | 3099 | % It can also be used inside @quotation. |
2040 | -% | |
3100 | +% | |
2041 | 3101 | \parseargdef\author{% |
2042 | 3102 | \def\temp{\quotation}% |
2043 | 3103 | \ifx\thisenv\temp |
@@ -2045,7 +3105,7 @@ where each line of input produces a line of output.} | ||
2045 | 3105 | \else |
2046 | 3106 | \checkenv\titlepage |
2047 | 3107 | \ifseenauthor\else \vskip 0pt plus 1filll \seenauthortrue \fi |
2048 | - {\authorfont \leftline{#1}}% | |
3108 | + {\secfonts\rmisbold \leftline{#1}}% | |
2049 | 3109 | \fi |
2050 | 3110 | } |
2051 | 3111 |
@@ -2098,12 +3158,39 @@ where each line of input produces a line of output.} | ||
2098 | 3158 | % |
2099 | 3159 | % Leave some space for the footline. Hopefully ok to assume |
2100 | 3160 | % @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 | |
2103 | 3163 | } |
2104 | 3164 | |
2105 | 3165 | \parseargdef\everyfooting{\oddfootingxxx{#1}\evenfootingxxx{#1}} |
2106 | 3166 | |
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 | |
2107 | 3194 | |
2108 | 3195 | % @headings double turns headings on for double-sided printing. |
2109 | 3196 | % @headings single turns headings on for single-sided printing. |
@@ -2240,17 +3327,13 @@ where each line of input produces a line of output.} | ||
2240 | 3327 | % \parskip glue -- logically it's part of the @item we just started. |
2241 | 3328 | \nobreak \vskip-\parskip |
2242 | 3329 | % |
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 | + % | |
2254 | 3337 | \penalty 10001 |
2255 | 3338 | \endgroup |
2256 | 3339 | \itemxneedsnegativevskipfalse |
@@ -2276,15 +3359,26 @@ where each line of input produces a line of output.} | ||
2276 | 3359 | % @table, @ftable, @vtable. |
2277 | 3360 | \envdef\table{% |
2278 | 3361 | \let\itemindex\gobble |
2279 | - \tablex | |
3362 | + \tablecheck{table}% | |
2280 | 3363 | } |
2281 | 3364 | \envdef\ftable{% |
2282 | 3365 | \def\itemindex ##1{\doind {fn}{\code{##1}}}% |
2283 | - \tablex | |
3366 | + \tablecheck{ftable}% | |
2284 | 3367 | } |
2285 | 3368 | \envdef\vtable{% |
2286 | 3369 | \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 | |
2288 | 3382 | } |
2289 | 3383 | \def\tablex#1{% |
2290 | 3384 | \def\itemindicate{#1}% |
@@ -2333,9 +3427,18 @@ where each line of input produces a line of output.} | ||
2333 | 3427 | \parindent=0pt |
2334 | 3428 | \parskip=\smallskipamount |
2335 | 3429 | \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. | |
2336 | 3436 | \def\itemcontents{#1}% |
3437 | + \setbox0 = \hbox{\itemcontents}% | |
3438 | + % | |
2337 | 3439 | % @itemize with no arg is equivalent to @itemize @bullet. |
2338 | 3440 | \ifx\itemcontents\empty\def\itemcontents{\bullet}\fi |
3441 | + % | |
2339 | 3442 | \let\item=\itemizeitem |
2340 | 3443 | } |
2341 | 3444 |
@@ -2356,6 +3459,7 @@ where each line of input produces a line of output.} | ||
2356 | 3459 | \ifnum\lastpenalty<10000 \parskip=0in \fi |
2357 | 3460 | \noindent |
2358 | 3461 | \hbox to 0pt{\hss \itemcontents \kern\itemmargin}% |
3462 | + % | |
2359 | 3463 | \vadjust{\penalty 1200}}% not good to break after first line of item. |
2360 | 3464 | \flushcr |
2361 | 3465 | } |
@@ -2537,7 +3641,7 @@ where each line of input produces a line of output.} | ||
2537 | 3641 | |
2538 | 3642 | % #1 is the @columnfraction, usually a decimal number like .5, but might |
2539 | 3643 | % be just 1. We just use it, whatever it is. |
2540 | -% | |
3644 | +% | |
2541 | 3645 | \def\pickupwholefraction#1 {% |
2542 | 3646 | \global\advance\colcount by 1 |
2543 | 3647 | \expandafter\xdef\csname col\the\colcount\endcsname{#1\hsize}% |
@@ -2577,12 +3681,19 @@ where each line of input produces a line of output.} | ||
2577 | 3681 | % |
2578 | 3682 | % @headitem starts a heading row, which we typeset in bold. |
2579 | 3683 | % 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 | +}% | |
2582 | 3693 | % |
2583 | 3694 | % A \tab used to include \hskip1sp. But then the space in a template |
2584 | 3695 | % 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. | |
2586 | 3697 | % --karl, nathan@acm.org, 20apr99. |
2587 | 3698 | \def\tab{\checkenv\multitable &\the\everytab}% |
2588 | 3699 |
@@ -2595,7 +3706,10 @@ where each line of input produces a line of output.} | ||
2595 | 3706 | \startsavinginserts |
2596 | 3707 | % |
2597 | 3708 | % @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}% | |
2599 | 3713 | % |
2600 | 3714 | \tolerance=9500 |
2601 | 3715 | \hbadness=9500 |
@@ -2680,19 +3794,17 @@ where each line of input produces a line of output.} | ||
2680 | 3794 | \global\setpercentfalse |
2681 | 3795 | } |
2682 | 3796 | |
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. | |
2686 | 3804 | \ifdim\multitablelinespace=0pt |
2687 | 3805 | \setbox0=\vbox{X}\global\multitablelinespace=\the\baselineskip |
2688 | 3806 | \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 | |
2696 | 3808 | %% Test to see if parskip is larger than space between lines of |
2697 | 3809 | %% table. If not, do nothing. |
2698 | 3810 | %% If so, set to same dimension as multitablelinespace. |
@@ -2750,6 +3862,7 @@ width0pt\relax} \fi | ||
2750 | 3862 | |
2751 | 3863 | \def\doignore#1{\begingroup |
2752 | 3864 | % Scan in ``verbatim'' mode: |
3865 | + \obeylines | |
2753 | 3866 | \catcode`\@ = \other |
2754 | 3867 | \catcode`\{ = \other |
2755 | 3868 | \catcode`\} = \other |
@@ -2761,25 +3874,25 @@ width0pt\relax} \fi | ||
2761 | 3874 | \doignorecount = 0 |
2762 | 3875 | % |
2763 | 3876 | % Swallow text until we reach the matching `@end #1'. |
2764 | - \dodoignore {#1}% | |
3877 | + \dodoignore{#1}% | |
2765 | 3878 | } |
2766 | 3879 | |
2767 | 3880 | { \catcode`_=11 % We want to use \_STOP_ which cannot appear in texinfo source. |
2768 | 3881 | \obeylines % |
2769 | 3882 | % |
2770 | 3883 | \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_}% | |
2772 | 3889 | % |
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_}% | |
2776 | 3890 | % And this command to find another #1 command, at the beginning of a |
2777 | 3891 | % line. (Otherwise, we would consider a line `@c @ifset', for |
2778 | 3892 | % example, to count as an @ifset for nesting.) |
2779 | 3893 | \long\def\doignoretextyyy##1^^M@#1##2\_STOP_{\doignoreyyy{##2}\_STOP_}% |
2780 | 3894 | % |
2781 | 3895 | % And now expand that command. |
2782 | - \obeylines % | |
2783 | 3896 | \doignoretext ^^M% |
2784 | 3897 | }% |
2785 | 3898 | } |
@@ -2797,7 +3910,7 @@ width0pt\relax} \fi | ||
2797 | 3910 | } |
2798 | 3911 | |
2799 | 3912 | % We have to swallow the remaining "\_STOP_". |
2800 | -% | |
3913 | +% | |
2801 | 3914 | \def\doignoretextzzz#1{% |
2802 | 3915 | \ifnum\doignorecount = 0 % We have just found the outermost @end. |
2803 | 3916 | \let\next\enddoignore |
@@ -2809,7 +3922,12 @@ width0pt\relax} \fi | ||
2809 | 3922 | } |
2810 | 3923 | |
2811 | 3924 | % 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 | +} | |
2813 | 3931 | |
2814 | 3932 | |
2815 | 3933 | % @set VAR sets the variable VAR to an empty value. |
@@ -2922,9 +4040,8 @@ width0pt\relax} \fi | ||
2922 | 4040 | % Index generation facilities |
2923 | 4041 | |
2924 | 4042 | % 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}} | |
2928 | 4045 | |
2929 | 4046 | % \newindex {foo} defines an index named foo. |
2930 | 4047 | % It automatically defines \fooindex such that |
@@ -2975,11 +4092,11 @@ width0pt\relax} \fi | ||
2975 | 4092 | \def\dosynindex#1#2#3{% |
2976 | 4093 | % Only do \closeout if we haven't already done it, else we'll end up |
2977 | 4094 | % closing the target index. |
2978 | - \expandafter \ifx\csname donesynindex#2\endcsname \undefined | |
4095 | + \expandafter \ifx\csname donesynindex#2\endcsname \relax | |
2979 | 4096 | % The \closeout helps reduce unnecessary open files; the limit on the |
2980 | 4097 | % Acorn RISC OS is a mere 16 files. |
2981 | 4098 | \expandafter\closeout\csname#2indfile\endcsname |
2982 | - \expandafter\let\csname\donesynindex#2\endcsname = 1 | |
4099 | + \expandafter\let\csname donesynindex#2\endcsname = 1 | |
2983 | 4100 | \fi |
2984 | 4101 | % redefine \fooindfile: |
2985 | 4102 | \expandafter\let\expandafter\temp\expandafter=\csname#3indfile\endcsname |
@@ -3010,41 +4127,50 @@ width0pt\relax} \fi | ||
3010 | 4127 | % we have to laboriously prevent expansion for those that we don't. |
3011 | 4128 | % |
3012 | 4129 | \def\indexdummies{% |
4130 | + \escapechar = `\\ % use backslash in output files. | |
3013 | 4131 | \def\@{@}% change to @@ when we switch to @ as escape char in index files. |
3014 | 4132 | \def\ {\realbackslash\space }% |
4133 | + % | |
3015 | 4134 | % Need these in case \tex is in effect and \{ is a \delimiter again. |
3016 | 4135 | % But can't use \lbracecmd and \rbracecmd because texindex assumes |
3017 | 4136 | % braces and backslashes are used only as delimiters. |
3018 | 4137 | \let\{ = \mylbrace |
3019 | 4138 | \let\} = \myrbrace |
3020 | 4139 | % |
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. | |
3026 | 4149 | % |
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 | |
3029 | 4157 | % |
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. | |
3033 | 4159 | % |
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 | |
3040 | 4165 | % |
3041 | 4166 | % Do the redefinitions. |
3042 | 4167 | \commondummies |
3043 | 4168 | } |
3044 | 4169 | |
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. | |
3048 | 4174 | % |
3049 | 4175 | \def\atdummies{% |
3050 | 4176 | \def\@{@@}% |
@@ -3052,144 +4178,168 @@ width0pt\relax} \fi | ||
3052 | 4178 | \let\{ = \lbraceatcmd |
3053 | 4179 | \let\} = \rbraceatcmd |
3054 | 4180 | % |
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 | - % | |
3063 | 4181 | % Do the redefinitions. |
3064 | 4182 | \commondummies |
4183 | + \otherbackslash | |
3065 | 4184 | } |
3066 | 4185 | |
3067 | -% Called from \indexdummies and \atdummies. \definedummyword and | |
3068 | -% \definedummyletter must be defined first. | |
4186 | +% Called from \indexdummies and \atdummies. | |
3069 | 4187 | % |
3070 | 4188 | \def\commondummies{% |
3071 | 4189 | % |
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 | |
3073 | 4206 | % |
3074 | 4207 | \commondummiesnofonts |
3075 | 4208 | % |
3076 | - \definedummyletter{_}% | |
4209 | + \definedummyletter\_% | |
3077 | 4210 | % |
3078 | 4211 | % 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 | |
3094 | 4231 | % |
3095 | 4232 | % 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 | |
3107 | 4244 | % |
3108 | 4245 | % 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 | |
3122 | 4278 | % |
3123 | 4279 | % Handle some cases of @value -- where it does not contain any |
3124 | 4280 | % (non-fully-expandable) commands. |
3125 | 4281 | \makevalueexpandable |
3126 | - % | |
3127 | - % Normal spaces, not active ones. | |
3128 | - \unsepspaces | |
3129 | - % | |
3130 | - % No macro expansion. | |
3131 | - \turnoffmacros | |
3132 | 4282 | } |
3133 | 4283 | |
3134 | 4284 | % \commondummiesnofonts: common to \commondummies and \indexnofonts. |
3135 | 4285 | % |
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 | |
3193 | 4343 | } |
3194 | 4344 | |
3195 | 4345 | % \indexnofonts is used when outputting the strings to sort the index |
@@ -3198,10 +4348,12 @@ width0pt\relax} \fi | ||
3198 | 4348 | % would be for a given command (usually its argument). |
3199 | 4349 | % |
3200 | 4350 | \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 | |
3205 | 4357 | % |
3206 | 4358 | \commondummiesnofonts |
3207 | 4359 | % |
@@ -3218,19 +4370,23 @@ width0pt\relax} \fi | ||
3218 | 4370 | % Non-English letters. |
3219 | 4371 | \def\AA{AA}% |
3220 | 4372 | \def\AE{AE}% |
4373 | + \def\DH{DZZ}% | |
3221 | 4374 | \def\L{L}% |
3222 | 4375 | \def\OE{OE}% |
3223 | 4376 | \def\O{O}% |
4377 | + \def\TH{ZZZ}% | |
3224 | 4378 | \def\aa{aa}% |
3225 | 4379 | \def\ae{ae}% |
4380 | + \def\dh{dzz}% | |
4381 | + \def\exclamdown{!}% | |
3226 | 4382 | \def\l{l}% |
3227 | 4383 | \def\oe{oe}% |
3228 | - \def\o{o}% | |
3229 | - \def\ss{ss}% | |
3230 | - \def\exclamdown{!}% | |
3231 | - \def\questiondown{?}% | |
3232 | 4384 | \def\ordf{a}% |
3233 | 4385 | \def\ordm{o}% |
4386 | + \def\o{o}% | |
4387 | + \def\questiondown{?}% | |
4388 | + \def\ss{ss}% | |
4389 | + \def\th{zzz}% | |
3234 | 4390 | % |
3235 | 4391 | \def\LaTeX{LaTeX}% |
3236 | 4392 | \def\TeX{TeX}% |
@@ -3238,18 +4394,43 @@ width0pt\relax} \fi | ||
3238 | 4394 | % Assorted special characters. |
3239 | 4395 | % (The following {} will end up in the sort string, but that's ok.) |
3240 | 4396 | \def\bullet{bullet}% |
4397 | + \def\comma{,}% | |
3241 | 4398 | \def\copyright{copyright}% |
3242 | 4399 | \def\registeredsymbol{R}% |
3243 | 4400 | \def\dots{...}% |
3244 | 4401 | \def\enddots{...}% |
3245 | 4402 | \def\equiv{==}% |
3246 | 4403 | \def\error{error}% |
4404 | + \def\euro{euro}% | |
4405 | + \def\guillemetleft{<<}% | |
4406 | + \def\guillemetright{>>}% | |
4407 | + \def\guilsinglleft{<}% | |
4408 | + \def\guilsinglright{>}% | |
3247 | 4409 | \def\expansion{==>}% |
3248 | 4410 | \def\minus{-}% |
3249 | 4411 | \def\pounds{pounds}% |
3250 | 4412 | \def\point{.}% |
3251 | 4413 | \def\print{-|}% |
4414 | + \def\quotedblbase{"}% | |
4415 | + \def\quotedblleft{"}% | |
4416 | + \def\quotedblright{"}% | |
4417 | + \def\quoteleft{`}% | |
4418 | + \def\quoteright{'}% | |
4419 | + \def\quotesinglbase{,}% | |
3252 | 4420 | \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 | |
3253 | 4434 | } |
3254 | 4435 | |
3255 | 4436 | \let\indexbackslash=0 %overridden during \printindex. |
@@ -3277,11 +4458,7 @@ width0pt\relax} \fi | ||
3277 | 4458 | % |
3278 | 4459 | \edef\writeto{\csname#1indfile\endcsname}% |
3279 | 4460 | % |
3280 | - \ifvmode | |
3281 | - \dosubindsanitize | |
3282 | - \else | |
3283 | - \dosubindwrite | |
3284 | - \fi | |
4461 | + \safewhatsit\dosubindwrite | |
3285 | 4462 | }% |
3286 | 4463 | \fi |
3287 | 4464 | } |
@@ -3296,7 +4473,6 @@ width0pt\relax} \fi | ||
3296 | 4473 | % |
3297 | 4474 | % Remember, we are within a group. |
3298 | 4475 | \indexdummies % Must do this here, since \bf, etc expand at this stage |
3299 | - \escapechar=`\\ | |
3300 | 4476 | \def\backslashcurfont{\indexbackslash}% \indexbackslash isn't defined now |
3301 | 4477 | % so it will be output as is; and it will print as backslash. |
3302 | 4478 | % |
@@ -3319,13 +4495,13 @@ width0pt\relax} \fi | ||
3319 | 4495 | \temp |
3320 | 4496 | } |
3321 | 4497 | |
3322 | -% Take care of unwanted page breaks: | |
4498 | +% Take care of unwanted page breaks/skips around a whatsit: | |
3323 | 4499 | % |
3324 | 4500 | % If a skip is the last thing on the list now, preserve it |
3325 | 4501 | % by backing up by \lastskip, doing the \write, then inserting |
3326 | 4502 | % 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: | |
3329 | 4505 | % @end defun |
3330 | 4506 | % @tindex whatever |
3331 | 4507 | % @defun ... |
@@ -3349,44 +4525,52 @@ width0pt\relax} \fi | ||
3349 | 4525 | % |
3350 | 4526 | \edef\zeroskipmacro{\expandafter\the\csname z@skip\endcsname} |
3351 | 4527 | % |
4528 | +\newskip\whatsitskip | |
4529 | +\newcount\whatsitpenalty | |
4530 | +% | |
3352 | 4531 | % ..., ready, GO: |
3353 | 4532 | % |
3354 | -\def\dosubindsanitize{% | |
4533 | +\def\safewhatsit#1{% | |
4534 | +\ifhmode | |
4535 | + #1% | |
4536 | +\else | |
3355 | 4537 | % \lastskip and \lastpenalty cannot both be nonzero simultaneously. |
3356 | - \skip0 = \lastskip | |
4538 | + \whatsitskip = \lastskip | |
3357 | 4539 | \edef\lastskipmacro{\the\lastskip}% |
3358 | - \count255 = \lastpenalty | |
4540 | + \whatsitpenalty = \lastpenalty | |
3359 | 4541 | % |
3360 | 4542 | % If \lastskip is nonzero, that means the last item was a |
3361 | 4543 | % 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 | |
3363 | 4545 | % non-discardable item, therefore it is not a potential |
3364 | 4546 | % breakpoint, therefore no \nobreak needed. |
3365 | 4547 | \ifx\lastskipmacro\zeroskipmacro |
3366 | 4548 | \else |
3367 | - \vskip-\skip0 | |
4549 | + \vskip-\whatsitskip | |
3368 | 4550 | \fi |
3369 | 4551 | % |
3370 | - \dosubindwrite | |
4552 | + #1% | |
3371 | 4553 | % |
3372 | 4554 | \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 | + % | |
3378 | 4561 | % @deffn deffn-whatever |
3379 | 4562 | % @vindex index-whatever |
3380 | 4563 | % Description. |
3381 | 4564 | % would allow a break between the index-whatever whatsit |
3382 | 4565 | % and the "Description." paragraph. |
3383 | - \ifnum\count255>9999 \nobreak \fi | |
4566 | + \ifnum\whatsitpenalty>9999 \penalty\whatsitpenalty \fi | |
3384 | 4567 | \else |
3385 | 4568 | % On the other hand, if we had a nonzero \lastskip, |
3386 | 4569 | % this make-up glue would be preceded by a non-discardable item |
3387 | 4570 | % (the whatsit from the \write), so we must insert a \nobreak. |
3388 | - \nobreak\vskip\skip0 | |
4571 | + \nobreak\vskip\whatsitskip | |
3389 | 4572 | \fi |
4573 | +\fi | |
3390 | 4574 | } |
3391 | 4575 | |
3392 | 4576 | % The index entry written in the file actually looks like |
@@ -3429,6 +4613,7 @@ width0pt\relax} \fi | ||
3429 | 4613 | % |
3430 | 4614 | \smallfonts \rm |
3431 | 4615 | \tolerance = 9500 |
4616 | + \plainfrenchspacing | |
3432 | 4617 | \everypar = {}% don't want the \kern\-parindent from indentation suppression. |
3433 | 4618 | % |
3434 | 4619 | % See if the index file exists and is nonempty. |
@@ -3478,7 +4663,10 @@ width0pt\relax} \fi | ||
3478 | 4663 | \removelastskip |
3479 | 4664 | % |
3480 | 4665 | % 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 | |
3482 | 4670 | % |
3483 | 4671 | % Typeset the initial. Making this add up to a whole number of |
3484 | 4672 | % baselineskips increases the chance of the dots lining up from column |
@@ -3488,10 +4676,9 @@ width0pt\relax} \fi | ||
3488 | 4676 | % No shrink because it confuses \balancecolumns. |
3489 | 4677 | \vskip 1.67\baselineskip plus .5\baselineskip |
3490 | 4678 | \leftline{\secbf #1}% |
3491 | - \vskip .33\baselineskip plus .1\baselineskip | |
3492 | - % | |
3493 | 4679 | % Do our best not to break after the initial. |
3494 | 4680 | \nobreak |
4681 | + \vskip .33\baselineskip plus .1\baselineskip | |
3495 | 4682 | }} |
3496 | 4683 | |
3497 | 4684 | % \entry typesets a paragraph consisting of the text (#1), dot leaders, and |
@@ -3500,10 +4687,10 @@ width0pt\relax} \fi | ||
3500 | 4687 | % |
3501 | 4688 | % A straightforward implementation would start like this: |
3502 | 4689 | % \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 | |
3504 | 4691 | % @code, which sets - active. This problem was fixed by a kludge--- |
3505 | 4692 | % ``-'' was active throughout whole index, but this isn't really right. |
3506 | -% | |
4693 | +% | |
3507 | 4694 | % The right solution is to prevent \entry from swallowing the whole text. |
3508 | 4695 | % --kasal, 21nov03 |
3509 | 4696 | \def\entry{% |
@@ -3556,11 +4743,8 @@ width0pt\relax} \fi | ||
3556 | 4743 | % The following is kludged to not output a line of dots in the index if |
3557 | 4744 | % there are no page numbers. The next person who breaks this will be |
3558 | 4745 | % 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 | |
3564 | 4748 | \ % |
3565 | 4749 | \else |
3566 | 4750 | % |
@@ -3584,9 +4768,9 @@ width0pt\relax} \fi | ||
3584 | 4768 | \endgroup |
3585 | 4769 | } |
3586 | 4770 | |
3587 | -% Like \dotfill except takes at least 1 em. | |
4771 | +% Like plain.tex's \dotfill, except uses up at least 1 em. | |
3588 | 4772 | \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} | |
3590 | 4774 | |
3591 | 4775 | \def\primary #1{\line{#1\hfil}} |
3592 | 4776 |
@@ -3696,6 +4880,34 @@ width0pt\relax} \fi | ||
3696 | 4880 | % |
3697 | 4881 | % All done with double columns. |
3698 | 4882 | \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 | + % | |
3699 | 4911 | \output = {% |
3700 | 4912 | % Split the last of the double-column material. Leave it on the |
3701 | 4913 | % current page, no automatic page break. |
@@ -3769,7 +4981,7 @@ width0pt\relax} \fi | ||
3769 | 4981 | % We do the following ugly conditional instead of the above simple |
3770 | 4982 | % construct for the sake of pdftex, which needs the actual |
3771 | 4983 | % letter in the expansion, not just typeset. |
3772 | -% | |
4984 | +% | |
3773 | 4985 | \def\appendixletter{% |
3774 | 4986 | \ifnum\appendixno=`A A% |
3775 | 4987 | \else\ifnum\appendixno=`B B% |
@@ -3805,11 +5017,15 @@ width0pt\relax} \fi | ||
3805 | 5017 | \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi |
3806 | 5018 | \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi} |
3807 | 5019 | |
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. | |
3811 | 5023 | \def\thischapter{} |
5024 | +\def\thischapternum{} | |
5025 | +\def\thischaptername{} | |
3812 | 5026 | \def\thissection{} |
5027 | +\def\thissectionnum{} | |
5028 | +\def\thissectionname{} | |
3813 | 5029 | |
3814 | 5030 | \newcount\absseclevel % used to calculate proper heading level |
3815 | 5031 | \newcount\secbase\secbase=0 % @raisesections/@lowersections modify this count |
@@ -3822,60 +5038,95 @@ width0pt\relax} \fi | ||
3822 | 5038 | \def\lowersections{\global\advance\secbase by 1} |
3823 | 5039 | \let\down=\lowersections % original BFox name |
3824 | 5040 | |
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 | |
3834 | 5063 | \else |
3835 | - \ifnum \absseclevel<0 \chapterzzz{#2}% | |
3836 | - \else \numberedsubsubseczzz{#2}% | |
5064 | + \ifnum \absseclevel > 3 | |
5065 | + \absseclevel = 3 | |
3837 | 5066 | \fi |
3838 | 5067 | \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 | |
3849 | 5074 | \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 | |
3852 | 5088 | \fi |
3853 | 5089 | \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 | |
3864 | 5098 | \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 | |
3867 | 5113 | \fi |
3868 | 5114 | \fi |
3869 | 5115 | \suppressfirstparagraphindent |
3870 | 5116 | } |
3871 | 5117 | |
5118 | +% an interface: | |
5119 | +\def\numhead{\genhead N} | |
5120 | +\def\apphead{\genhead A} | |
5121 | +\def\unnmhead{\genhead U} | |
5122 | + | |
3872 | 5123 | % @chapter, @appendix, @unnumbered. Increment top-level counter, reset |
3873 | 5124 | % all lower-level sectioning counters to zero. |
3874 | -% | |
5125 | +% | |
3875 | 5126 | % Also set \chaplevelprefix, which we prepend to @float sequence numbers |
3876 | 5127 | % (e.g., figures), q.v. By default (before any chapter), that is empty. |
3877 | 5128 | \let\chaplevelprefix = \empty |
3878 | -% | |
5129 | +% | |
3879 | 5130 | \outer\parseargdef\chapter{\numhead0{#1}} % normally numhead0 calls chapterzzz |
3880 | 5131 | \def\chapterzzz#1{% |
3881 | 5132 | % section resetting is \global in case the chapter is in a group, such |
@@ -3887,7 +5138,9 @@ width0pt\relax} \fi | ||
3887 | 5138 | \gdef\chaplevelprefix{\the\chapno.}% |
3888 | 5139 | \resetallfloatnos |
3889 | 5140 | % |
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}% | |
3891 | 5144 | % |
3892 | 5145 | % Write the actual heading. |
3893 | 5146 | \chapmacro{#1}{Ynumbered}{\the\chapno}% |
@@ -3898,15 +5151,17 @@ width0pt\relax} \fi | ||
3898 | 5151 | \global\let\subsubsection = \numberedsubsubsec |
3899 | 5152 | } |
3900 | 5153 | |
3901 | -\outer\parseargdef\appendix{\apphead0{#1}} % normally apphead0 calls appendixzzz | |
5154 | +\outer\parseargdef\appendix{\apphead0{#1}} % normally calls appendixzzz | |
5155 | +% | |
3902 | 5156 | \def\appendixzzz#1{% |
3903 | 5157 | \global\secno=0 \global\subsecno=0 \global\subsubsecno=0 |
3904 | 5158 | \global\advance\appendixno by 1 |
3905 | 5159 | \gdef\chaplevelprefix{\appendixletter.}% |
3906 | 5160 | \resetallfloatnos |
3907 | 5161 | % |
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}% | |
3910 | 5165 | % |
3911 | 5166 | \chapmacro{#1}{Yappendix}{\appendixletter}% |
3912 | 5167 | % |
@@ -3915,9 +5170,6 @@ width0pt\relax} \fi | ||
3915 | 5170 | \global\let\subsubsection = \appendixsubsubsec |
3916 | 5171 | } |
3917 | 5172 | |
3918 | -% @centerchap is like @unnumbered, but the heading is centered. | |
3919 | -\outer\parseargdef\centerchap{{\unnumberedyyy{#1}}} | |
3920 | - | |
3921 | 5173 | \outer\parseargdef\unnumbered{\unnmhead0{#1}} % normally unnmhead0 calls unnumberedzzz |
3922 | 5174 | \def\unnumberedzzz#1{% |
3923 | 5175 | \global\secno=0 \global\subsecno=0 \global\subsubsecno=0 |
@@ -3948,6 +5200,16 @@ width0pt\relax} \fi | ||
3948 | 5200 | \global\let\subsubsection = \unnumberedsubsubsec |
3949 | 5201 | } |
3950 | 5202 | |
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 | + | |
3951 | 5213 | % @top is like @unnumbered. |
3952 | 5214 | \let\top\unnumbered |
3953 | 5215 |
@@ -4014,24 +5276,6 @@ width0pt\relax} \fi | ||
4014 | 5276 | {\the\unnumberedno.\the\secno.\the\subsecno.\the\subsubsecno}% |
4015 | 5277 | } |
4016 | 5278 | |
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 | - | |
4035 | 5279 | % These macros control what the section commands do, according |
4036 | 5280 | % to what kind of chapter we are in (ordinary, appendix, or unnumbered). |
4037 | 5281 | % Define them by default for a numbered chapter. |
@@ -4049,7 +5293,6 @@ width0pt\relax} \fi | ||
4049 | 5293 | % 3) Likewise, headings look best if no \parindent is used, and |
4050 | 5294 | % if justification is not attempted. Hence \raggedright. |
4051 | 5295 | |
4052 | - | |
4053 | 5296 | \def\majorheading{% |
4054 | 5297 | {\advance\chapheadingskip by 10pt \chapbreak }% |
4055 | 5298 | \parsearg\chapheadingzzz |
@@ -4058,8 +5301,8 @@ width0pt\relax} \fi | ||
4058 | 5301 | \def\chapheading{\chapbreak \parsearg\chapheadingzzz} |
4059 | 5302 | \def\chapheadingzzz#1{% |
4060 | 5303 | {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000 |
4061 | - \parindent=0pt\raggedright | |
4062 | - \rm #1\hfill}}% | |
5304 | + \parindent=0pt\ptexraggedright | |
5305 | + \rmisbold #1\hfill}}% | |
4063 | 5306 | \bigskip \par\penalty 200\relax |
4064 | 5307 | \suppressfirstparagraphindent |
4065 | 5308 | } |
@@ -4079,8 +5322,6 @@ width0pt\relax} \fi | ||
4079 | 5322 | %%% Args are the skip and penalty (usually negative) |
4080 | 5323 | \def\dobreak#1#2{\par\ifdim\lastskip<#1\removelastskip\penalty#2\vskip#1\fi} |
4081 | 5324 | |
4082 | -\def\setchapterstyle #1 {\csname CHAPF#1\endcsname} | |
4083 | - | |
4084 | 5325 | %%% Define plain chapter starts, and page on/off switching for it |
4085 | 5326 | % Parameter controlling skip before chapter headings (if needed) |
4086 | 5327 |
@@ -4088,7 +5329,20 @@ width0pt\relax} \fi | ||
4088 | 5329 | |
4089 | 5330 | \def\chapbreak{\dobreak \chapheadingskip {-4000}} |
4090 | 5331 | \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 | +} | |
4092 | 5346 | |
4093 | 5347 | \def\setchapternewpage #1 {\csname CHAPPAG#1\endcsname} |
4094 | 5348 |
@@ -4111,56 +5365,89 @@ width0pt\relax} \fi | ||
4111 | 5365 | |
4112 | 5366 | \CHAPPAGon |
4113 | 5367 | |
4114 | -\def\CHAPFplain{% | |
4115 | -\global\let\chapmacro=\chfplain | |
4116 | -\global\let\centerchapmacro=\centerchfplain} | |
4117 | - | |
4118 | -% Normal chapter opening. | |
4119 | -% | |
5368 | +% Chapter opening. | |
5369 | +% | |
4120 | 5370 | % #1 is the text, #2 is the section type (Ynumbered, Ynothing, |
4121 | 5371 | % Yappendix, Yomitfromtoc), #3 the chapter number. |
4122 | -% | |
5372 | +% | |
4123 | 5373 | % To test against our argument. |
4124 | 5374 | \def\Ynothingkeyword{Ynothing} |
4125 | 5375 | \def\Yomitfromtockeyword{Yomitfromtoc} |
4126 | 5376 | \def\Yappendixkeyword{Yappendix} |
4127 | 5377 | % |
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. | |
4129 | 5421 | \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 | + % | |
4130 | 5429 | {% |
4131 | - \chapfonts \rm | |
5430 | + \chapfonts \rmisbold | |
4132 | 5431 | % |
4133 | - % Have to define \thissection before calling \donoderef, because the | |
5432 | + % Have to define \lastsection before calling \donoderef, because the | |
4134 | 5433 | % xref code eventually uses it. On the other hand, it has to be called |
4135 | 5434 | % after \pchapsepmacro, or the headline will change too soon. |
4136 | - \gdef\thissection{#1}% | |
4137 | - \gdef\thischaptername{#1}% | |
5435 | + \gdef\lastsection{#1}% | |
4138 | 5436 | % |
4139 | 5437 | % Only insert the separating space if we have a chapter/appendix |
4140 | 5438 | % number, and don't print the unnumbered ``number''. |
4141 | - \def\temptype{#2}% | |
4142 | 5439 | \ifx\temptype\Ynothingkeyword |
4143 | 5440 | \setbox0 = \hbox{}% |
4144 | 5441 | \def\toctype{unnchap}% |
4145 | - \def\thischapter{#1}% | |
4146 | 5442 | \else\ifx\temptype\Yomitfromtockeyword |
4147 | 5443 | \setbox0 = \hbox{}% contents like unnumbered, but no toc entry |
4148 | 5444 | \def\toctype{omit}% |
4149 | - \xdef\thischapter{}% | |
4150 | 5445 | \else\ifx\temptype\Yappendixkeyword |
4151 | 5446 | \setbox0 = \hbox{\putwordAppendix{} #3\enspace}% |
4152 | 5447 | \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}% | |
4159 | 5448 | \else |
4160 | 5449 | \setbox0 = \hbox{#3\enspace}% |
4161 | 5450 | \def\toctype{numchap}% |
4162 | - \xdef\thischapter{\putwordChapter{} \the\chapno: | |
4163 | - \noexpand\thischaptername}% | |
4164 | 5451 | \fi\fi\fi |
4165 | 5452 | % |
4166 | 5453 | % Write the toc entry for this chapter. Must come before the |
@@ -4176,7 +5463,8 @@ width0pt\relax} \fi | ||
4176 | 5463 | \donoderef{#2}% |
4177 | 5464 | % |
4178 | 5465 | % 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 | |
4180 | 5468 | \hangindent=\wd0 \centerparametersmaybe |
4181 | 5469 | \unhbox0 #1\par}% |
4182 | 5470 | }% |
@@ -4186,45 +5474,40 @@ width0pt\relax} \fi | ||
4186 | 5474 | |
4187 | 5475 | % @centerchap -- centered and unnumbered. |
4188 | 5476 | \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 | +} | |
4197 | 5482 | |
4198 | -\CHAPFplain % The default | |
4199 | 5483 | |
4200 | 5484 | % I don't think this chapter style is supported any more, so I'm not |
4201 | 5485 | % updating it with the new noderef stuff. We'll see. --karl, 11aug03. |
4202 | -% | |
5486 | +% | |
5487 | +\def\setchapterstyle #1 {\csname CHAPF#1\endcsname} | |
5488 | +% | |
4203 | 5489 | \def\unnchfopen #1{% |
4204 | 5490 | \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 | |
4207 | 5493 | } |
4208 | - | |
4209 | 5494 | \def\chfopen #1#2{\chapoddpage {\chapfonts |
4210 | 5495 | \vbox to 3in{\vfil \hbox to\hsize{\hfil #2} \hbox to\hsize{\hfil #1} \vfil}}% |
4211 | 5496 | \par\penalty 5000 % |
4212 | 5497 | } |
4213 | - | |
4214 | 5498 | \def\centerchfopen #1{% |
4215 | 5499 | \chapoddpage {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000 |
4216 | 5500 | \parindent=0pt |
4217 | - \hfill {\rm #1}\hfill}}\bigskip \par\nobreak | |
5501 | + \hfill {\rmisbold #1}\hfill}}\bigskip \par\nobreak | |
4218 | 5502 | } |
4219 | - | |
4220 | 5503 | \def\CHAPFopen{% |
4221 | -\global\let\chapmacro=\chfopen | |
4222 | -\global\let\centerchapmacro=\centerchfopen} | |
5504 | + \global\let\chapmacro=\chfopen | |
5505 | + \global\let\centerchapmacro=\centerchfopen} | |
4223 | 5506 | |
4224 | 5507 | |
4225 | 5508 | % Section titles. These macros combine the section number parts and |
4226 | 5509 | % call the generic \sectionheading to do the printing. |
4227 | -% | |
5510 | +% | |
4228 | 5511 | \newskip\secheadingskip |
4229 | 5512 | \def\secheadingbreak{\dobreak \secheadingskip{-1000}} |
4230 | 5513 |
@@ -4238,52 +5521,113 @@ width0pt\relax} \fi | ||
4238 | 5521 | |
4239 | 5522 | |
4240 | 5523 | % Print any size, any type, section title. |
4241 | -% | |
5524 | +% | |
4242 | 5525 | % #1 is the text, #2 is the section level (sec/subsec/subsubsec), #3 is |
4243 | 5526 | % the section type for xrefs (Ynumbered, Ynothing, Yappendix), #4 is the |
4244 | 5527 | % section number. |
4245 | -% | |
5528 | +% | |
5529 | +\def\seckeyword{sec} | |
5530 | +% | |
4246 | 5531 | \def\sectionheading#1#2#3#4{% |
4247 | 5532 | {% |
4248 | 5533 | % 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 | |
4250 | 5584 | % |
4251 | 5585 | % Insert space above the heading. |
4252 | 5586 | \csname #2headingbreak\endcsname |
4253 | 5587 | % |
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 | |
4257 | 5592 | % |
5593 | + % Only insert the space after the number if we have a section number. | |
4258 | 5594 | \ifx\temptype\Ynothingkeyword |
4259 | 5595 | \setbox0 = \hbox{}% |
4260 | 5596 | \def\toctype{unn}% |
4261 | - \gdef\thissection{#1}% | |
5597 | + \gdef\lastsection{#1}% | |
4262 | 5598 | \else\ifx\temptype\Yomitfromtockeyword |
4263 | 5599 | % for @headings -- no section number, don't include in toc, |
4264 | - % and don't redefine \thissection. | |
5600 | + % and don't redefine \lastsection. | |
4265 | 5601 | \setbox0 = \hbox{}% |
4266 | 5602 | \def\toctype{omit}% |
4267 | 5603 | \let\sectionlevel=\empty |
4268 | 5604 | \else\ifx\temptype\Yappendixkeyword |
4269 | 5605 | \setbox0 = \hbox{#4\enspace}% |
4270 | 5606 | \def\toctype{app}% |
4271 | - \gdef\thissection{#1}% | |
5607 | + \gdef\lastsection{#1}% | |
4272 | 5608 | \else |
4273 | 5609 | \setbox0 = \hbox{#4\enspace}% |
4274 | 5610 | \def\toctype{num}% |
4275 | - \gdef\thissection{#1}% | |
5611 | + \gdef\lastsection{#1}% | |
4276 | 5612 | \fi\fi\fi |
4277 | 5613 | % |
4278 | - % Write the toc entry (before \donoderef). See comments in \chfplain. | |
5614 | + % Write the toc entry (before \donoderef). See comments in \chapmacro. | |
4279 | 5615 | \writetocentry{\toctype\sectionlevel}{#1}{#4}% |
4280 | 5616 | % |
4281 | 5617 | % Write the node reference (= pdf destination for pdftex). |
4282 | - % Again, see comments in \chfplain. | |
5618 | + % Again, see comments in \chapmacro. | |
4283 | 5619 | \donoderef{#3}% |
4284 | 5620 | % |
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 | + % | |
4285 | 5629 | % Output the actual section heading. |
4286 | - \vbox{\hyphenpenalty=10000 \tolerance=5000 \parindent=0pt \raggedright | |
5630 | + \vbox{\hyphenpenalty=10000 \tolerance=5000 \parindent=0pt \ptexraggedright | |
4287 | 5631 | \hangindent=\wd0 % zero if no section number |
4288 | 5632 | \unhbox0 #1}% |
4289 | 5633 | }% |
@@ -4300,13 +5644,13 @@ width0pt\relax} \fi | ||
4300 | 5644 | % discardable item.) |
4301 | 5645 | \vskip-\parskip |
4302 | 5646 | % |
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 | + % | |
4307 | 5651 | % @section sec-whatever |
4308 | 5652 | % @deffn def-whatever |
4309 | - \nobreak | |
5653 | + \penalty 10001 | |
4310 | 5654 | } |
4311 | 5655 | |
4312 | 5656 |
@@ -4315,14 +5659,14 @@ width0pt\relax} \fi | ||
4315 | 5659 | \newwrite\tocfile |
4316 | 5660 | |
4317 | 5661 | % Write an entry to the toc file, opening it if necessary. |
4318 | -% Called from @chapter, etc. | |
4319 | -% | |
5662 | +% Called from @chapter, etc. | |
5663 | +% | |
4320 | 5664 | % Example usage: \writetocentry{sec}{Section Name}{\the\chapno.\the\secno} |
4321 | 5665 | % We append the current node name (if any) and page number as additional |
4322 | 5666 | % arguments for the \{chap,sec,...}entry macros which will eventually |
4323 | 5667 | % read this. The node name is used in the pdf outlines as the |
4324 | 5668 | % destination to jump to. |
4325 | -% | |
5669 | +% | |
4326 | 5670 | % We open the .toc file for writing here instead of at @setfilename (or |
4327 | 5671 | % any other fixed time) so that @contents can be anywhere in the document. |
4328 | 5672 | % But if #1 is `omit', then we don't do anything. This is used for the |
@@ -4340,11 +5684,11 @@ width0pt\relax} \fi | ||
4340 | 5684 | \fi |
4341 | 5685 | % |
4342 | 5686 | \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 | + }% | |
4348 | 5692 | \fi |
4349 | 5693 | \fi |
4350 | 5694 | % |
@@ -4357,6 +5701,31 @@ width0pt\relax} \fi | ||
4357 | 5701 | \ifpdf \global\pdfmakepagedesttrue \fi |
4358 | 5702 | } |
4359 | 5703 | |
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 | + | |
4360 | 5729 | \newskip\contentsrightmargin \contentsrightmargin=1in |
4361 | 5730 | \newcount\savepageno |
4362 | 5731 | \newcount\lastnegativepageno \lastnegativepageno = -1 |
@@ -4373,29 +5742,29 @@ width0pt\relax} \fi | ||
4373 | 5742 | % |
4374 | 5743 | % Don't need to put `Contents' or `Short Contents' in the headline. |
4375 | 5744 | % It is abundantly clear what they are. |
4376 | - \def\thischapter{}% | |
4377 | 5745 | \chapmacro{#1}{Yomitfromtoc}{}% |
4378 | 5746 | % |
4379 | 5747 | \savepageno = \pageno |
4380 | 5748 | \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. | |
4386 | 5750 | \advance\hsize by -\contentsrightmargin % Don't use the full line length. |
4387 | 5751 | % |
4388 | 5752 | % Roman numerals for page numbers. |
4389 | 5753 | \ifnum \pageno>0 \global\pageno = \lastnegativepageno \fi |
4390 | 5754 | } |
4391 | 5755 | |
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} | |
4392 | 5760 | |
4393 | 5761 | % Normal (long) toc. |
5762 | +% | |
4394 | 5763 | \def\contents{% |
4395 | 5764 | \startcontents{\putwordTOC}% |
4396 | - \openin 1 \jobname.toc | |
5765 | + \openin 1 \tocreadfilename\space | |
4397 | 5766 | \ifeof 1 \else |
4398 | - \input \jobname.toc | |
5767 | + \readtocfile | |
4399 | 5768 | \fi |
4400 | 5769 | \vfill \eject |
4401 | 5770 | \contentsalignmacro % in case @setchapternewpage odd is in effect |
@@ -4431,9 +5800,9 @@ width0pt\relax} \fi | ||
4431 | 5800 | \let\numsubsubsecentry = \numsecentry |
4432 | 5801 | \let\appsubsubsecentry = \numsecentry |
4433 | 5802 | \let\unnsubsubsecentry = \numsecentry |
4434 | - \openin 1 \jobname.toc | |
5803 | + \openin 1 \tocreadfilename\space | |
4435 | 5804 | \ifeof 1 \else |
4436 | - \input \jobname.toc | |
5805 | + \readtocfile | |
4437 | 5806 | \fi |
4438 | 5807 | \closein 1 |
4439 | 5808 | \vfill \eject |
@@ -4453,7 +5822,7 @@ width0pt\relax} \fi | ||
4453 | 5822 | % But use \hss just in case. |
4454 | 5823 | % (This space doesn't include the extra space that gets added after |
4455 | 5824 | % the label; that gets put in by \shortchapentry above.) |
4456 | - % | |
5825 | + % | |
4457 | 5826 | % We'd like to right-justify chapter numbers, but that looks strange |
4458 | 5827 | % with appendix letters. And right-justifying numbers and |
4459 | 5828 | % left-justifying letters looks strange when there is less than 10 |
@@ -4478,7 +5847,7 @@ width0pt\relax} \fi | ||
4478 | 5847 | |
4479 | 5848 | % Appendices, in the main contents. |
4480 | 5849 | % Need the word Appendix, and a fixed-size box. |
4481 | -% | |
5850 | +% | |
4482 | 5851 | \def\appendixbox#1{% |
4483 | 5852 | % We use M since it's probably the widest letter. |
4484 | 5853 | \setbox0 = \hbox{\putwordAppendix{} M}% |
@@ -4556,45 +5925,12 @@ width0pt\relax} \fi | ||
4556 | 5925 | \message{environments,} |
4557 | 5926 | % @foo ... @end foo. |
4558 | 5927 | |
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 | - | |
4593 | 5928 | % @tex ... @end tex escapes into raw Tex temporarily. |
4594 | 5929 | % One exception: @ is still an escape character, so that @end tex works. |
4595 | 5930 | % But \@ or @@ will get a plain tex @ character. |
4596 | 5931 | |
4597 | 5932 | \envdef\tex{% |
5933 | + \setupmarkupstyle{tex}% | |
4598 | 5934 | \catcode `\\=0 \catcode `\{=1 \catcode `\}=2 |
4599 | 5935 | \catcode `\$=3 \catcode `\&=4 \catcode `\#=6 |
4600 | 5936 | \catcode `\^=7 \catcode `\_=8 \catcode `\~=\active \let~=\tie |
@@ -4604,6 +5940,8 @@ width0pt\relax} \fi | ||
4604 | 5940 | \catcode `\|=\other |
4605 | 5941 | \catcode `\<=\other |
4606 | 5942 | \catcode `\>=\other |
5943 | + \catcode`\`=\other | |
5944 | + \catcode`\'=\other | |
4607 | 5945 | \escapechar=`\\ |
4608 | 5946 | % |
4609 | 5947 | \let\b=\ptexb |
@@ -4623,6 +5961,8 @@ width0pt\relax} \fi | ||
4623 | 5961 | \let\/=\ptexslash |
4624 | 5962 | \let\*=\ptexstar |
4625 | 5963 | \let\t=\ptext |
5964 | + \expandafter \let\csname top\endcsname=\ptextop % outer | |
5965 | + \let\frenchspacing=\plainfrenchspacing | |
4626 | 5966 | % |
4627 | 5967 | \def\endldots{\mathinner{\ldots\ldots\ldots\ldots}}% |
4628 | 5968 | \def\enddots{\relax\ifmmode\endldots\else$\mathsurround=0pt \endldots\,$\fi}% |
@@ -4651,7 +5991,8 @@ width0pt\relax} \fi | ||
4651 | 5991 | % start of the next paragraph will insert \parskip. |
4652 | 5992 | % |
4653 | 5993 | \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. | |
4655 | 5996 | \ifnum \lastpenalty=10000 \else |
4656 | 5997 | \advance\envskipamount by \parskip |
4657 | 5998 | \endgraf |
@@ -4667,7 +6008,8 @@ width0pt\relax} \fi | ||
4667 | 6008 | |
4668 | 6009 | \let\afterenvbreak = \aboveenvbreak |
4669 | 6010 | |
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. | |
4671 | 6013 | \let\nonarrowing=\relax |
4672 | 6014 | |
4673 | 6015 | % @cartouche ... @end cartouche: draw rectangle w/rounded corners around |
@@ -4704,7 +6046,7 @@ width0pt\relax} \fi | ||
4704 | 6046 | % each corner char, and rule thickness |
4705 | 6047 | \normbskip=\baselineskip \normpskip=\parskip \normlskip=\lineskip |
4706 | 6048 | % Flag to tell @lisp, etc., not to narrow margin. |
4707 | - \let\nonarrowing=\comment | |
6049 | + \let\nonarrowing = t% | |
4708 | 6050 | \vbox\bgroup |
4709 | 6051 | \baselineskip=0pt\parskip=0pt\lineskip=0pt |
4710 | 6052 | \carttop |
@@ -4735,6 +6077,7 @@ width0pt\relax} \fi | ||
4735 | 6077 | |
4736 | 6078 | % This macro is called at the beginning of all the @example variants, |
4737 | 6079 | % inside a group. |
6080 | +\newdimen\nonfillparindent | |
4738 | 6081 | \def\nonfillstart{% |
4739 | 6082 | \aboveenvbreak |
4740 | 6083 | \hfuzz = 12pt % Don't be fussy |
@@ -4742,17 +6085,40 @@ width0pt\relax} \fi | ||
4742 | 6085 | \let\par = \lisppar % don't ignore blank lines |
4743 | 6086 | \obeylines % each line of input is a line of output |
4744 | 6087 | \parskip = 0pt |
6088 | + % Turn off paragraph indentation but redefine \indent to emulate | |
6089 | + % the normal \indent. | |
6090 | + \nonfillparindent=\parindent | |
4745 | 6091 | \parindent = 0pt |
6092 | + \let\indent\nonfillindent | |
6093 | + % | |
4746 | 6094 | \emergencystretch = 0pt % don't try to avoid overfull boxes |
4747 | - % @cartouche defines \nonarrowing to inhibit narrowing | |
4748 | - % at next level down. | |
4749 | 6095 | \ifx\nonarrowing\relax |
4750 | 6096 | \advance \leftskip by \lispnarrowing |
4751 | 6097 | \exdentamount=\lispnarrowing |
6098 | + \else | |
6099 | + \let\nonarrowing = \relax | |
4752 | 6100 | \fi |
4753 | 6101 | \let\exdent=\nofillexdent |
4754 | 6102 | } |
4755 | 6103 | |
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 | + | |
4756 | 6122 | % If you want all examples etc. small: @set dispenvsize small. |
4757 | 6123 | % If you want even small examples the full size: @set dispenvsize nosmall. |
4758 | 6124 | % This affects the following displayed environments: |
@@ -4763,12 +6129,18 @@ width0pt\relax} \fi | ||
4763 | 6129 | \let\SETdispenvsize\relax |
4764 | 6130 | \def\setnormaldispenv{% |
4765 | 6131 | \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 | |
4766 | 6137 | \smallexamplefonts \rm |
4767 | 6138 | \fi |
4768 | 6139 | } |
4769 | 6140 | \def\setsmalldispenv{% |
4770 | 6141 | \ifx\SETdispenvsize\nosmallword |
4771 | 6142 | \else |
6143 | + \ifnum \lastpenalty=10000 \else \endgraf \fi | |
4772 | 6144 | \smallexamplefonts \rm |
4773 | 6145 | \fi |
4774 | 6146 | } |
@@ -4795,11 +6167,10 @@ width0pt\relax} \fi | ||
4795 | 6167 | % |
4796 | 6168 | \maketwodispenvs {lisp}{example}{% |
4797 | 6169 | \nonfillstart |
4798 | - \tt | |
6170 | + \tt\setupmarkupstyle{example}% | |
4799 | 6171 | \let\kbdfont = \kbdexamplefont % Allow @kbd to do something special. |
4800 | 6172 | \gobble % eat return |
4801 | 6173 | } |
4802 | - | |
4803 | 6174 | % @display/@smalldisplay: same as @lisp except keep current font. |
4804 | 6175 | % |
4805 | 6176 | \makedispenv {display}{% |
@@ -4834,12 +6205,36 @@ width0pt\relax} \fi | ||
4834 | 6205 | \let\Eflushright = \afterenvbreak |
4835 | 6206 | |
4836 | 6207 | |
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 | + | |
4837 | 6232 | % @quotation does normal linebreaking (hence we can't use \nonfillstart) |
4838 | 6233 | % and narrows the margins. We keep \parskip nonzero in general, since |
4839 | 6234 | % we're doing normal filling. So, when using \aboveenvbreak and |
4840 | 6235 | % \afterenvbreak, temporarily make \parskip 0. |
4841 | 6236 | % |
4842 | -\envdef\quotation{% | |
6237 | +\def\quotationstart{% | |
4843 | 6238 | {\parskip=0pt \aboveenvbreak}% because \aboveenvbreak inserts \parskip |
4844 | 6239 | \parindent=0pt |
4845 | 6240 | % |
@@ -4848,14 +6243,26 @@ width0pt\relax} \fi | ||
4848 | 6243 | \advance\leftskip by \lispnarrowing |
4849 | 6244 | \advance\rightskip by \lispnarrowing |
4850 | 6245 | \exdentamount = \lispnarrowing |
6246 | + \else | |
4851 | 6247 | \let\nonarrowing = \relax |
4852 | 6248 | \fi |
4853 | 6249 | \parsearg\quotationlabel |
4854 | 6250 | } |
4855 | 6251 | |
6252 | +\envdef\quotation{% | |
6253 | + \setnormaldispenv | |
6254 | + \quotationstart | |
6255 | +} | |
6256 | + | |
6257 | +\envdef\smallquotation{% | |
6258 | + \setsmalldispenv | |
6259 | + \quotationstart | |
6260 | +} | |
6261 | +\let\Esmallquotation = \Equotation | |
6262 | + | |
4856 | 6263 | % We have retained a nonzero parskip for the environment, since we're |
4857 | 6264 | % doing normal filling. |
4858 | -% | |
6265 | +% | |
4859 | 6266 | \def\Equotation{% |
4860 | 6267 | \par |
4861 | 6268 | \ifx\quotationauthor\undefined\else |
@@ -4888,18 +6295,16 @@ width0pt\relax} \fi | ||
4888 | 6295 | \do\ \do\\\do\{\do\}\do\$\do\&% |
4889 | 6296 | \do\#\do\^\do\^^K\do\_\do\^^A\do\%\do\~% |
4890 | 6297 | \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\'% | |
4891 | 6302 | } |
4892 | 6303 | % |
4893 | 6304 | % [Knuth] p. 380 |
4894 | 6305 | \def\uncatcodespecials{% |
4895 | 6306 | \def\do##1{\catcode`##1=\other}\dospecials} |
4896 | 6307 | % |
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 | -% | |
4903 | 6308 | % Setup for the @verb command. |
4904 | 6309 | % |
4905 | 6310 | % Eight spaces for a tab |
@@ -4911,7 +6316,7 @@ width0pt\relax} \fi | ||
4911 | 6316 | \def\setupverb{% |
4912 | 6317 | \tt % easiest (and conventionally used) font for verbatim |
4913 | 6318 | \def\par{\leavevmode\endgraf}% |
4914 | - \catcode`\`=\active | |
6319 | + \setupmarkupstyle{verb}% | |
4915 | 6320 | \tabeightspaces |
4916 | 6321 | % Respect line breaks, |
4917 | 6322 | % print special symbols as themselves, and |
@@ -4926,6 +6331,7 @@ width0pt\relax} \fi | ||
4926 | 6331 | \newdimen\tabw \setbox0=\hbox{\tt\space} \tabw=8\wd0 % tab amount |
4927 | 6332 | % |
4928 | 6333 | \def\starttabbox{\setbox0=\hbox\bgroup} |
6334 | +% | |
4929 | 6335 | \begingroup |
4930 | 6336 | \catcode`\^^I=\active |
4931 | 6337 | \gdef\tabexpand{% |
@@ -4939,14 +6345,16 @@ width0pt\relax} \fi | ||
4939 | 6345 | }% |
4940 | 6346 | } |
4941 | 6347 | \endgroup |
6348 | + | |
6349 | +% start the verbatim environment. | |
4942 | 6350 | \def\setupverbatim{% |
6351 | + \let\nonarrowing = t% | |
4943 | 6352 | \nonfillstart |
4944 | - \advance\leftskip by -\defbodyindent | |
4945 | 6353 | % Easiest (and conventionally used) font for verbatim |
4946 | 6354 | \tt |
4947 | 6355 | \def\par{\leavevmode\egroup\box0\endgraf}% |
4948 | - \catcode`\`=\active | |
4949 | 6356 | \tabexpand |
6357 | + \setupmarkupstyle{verbatim}% | |
4950 | 6358 | % Respect line breaks, |
4951 | 6359 | % print special symbols as themselves, and |
4952 | 6360 | % make each space count |
@@ -5006,14 +6414,14 @@ width0pt\relax} \fi | ||
5006 | 6414 | {% |
5007 | 6415 | \makevalueexpandable |
5008 | 6416 | \setupverbatim |
6417 | + \indexnofonts % Allow `@@' and other weird things in file names. | |
5009 | 6418 | \input #1 |
5010 | 6419 | \afterenvbreak |
5011 | 6420 | }% |
5012 | 6421 | } |
5013 | 6422 | |
5014 | 6423 | % @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. | |
5017 | 6425 | % |
5018 | 6426 | % We save the uninterpreted tokens, rather than creating a box. |
5019 | 6427 | % Saving the text in a box would be much easier, but then all the |
@@ -5022,84 +6430,45 @@ width0pt\relax} \fi | ||
5022 | 6430 | % file; b) letting users define the frontmatter in as flexible order as |
5023 | 6431 | % possible is very desirable. |
5024 | 6432 | % |
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 | |
5081 | 6441 | } |
5082 | 6442 | |
6443 | + | |
5083 | 6444 | \message{defuns,} |
5084 | 6445 | % @defun etc. |
5085 | 6446 | |
5086 | 6447 | \newskip\defbodyindent \defbodyindent=.4in |
5087 | 6448 | \newskip\defargsindent \defargsindent=50pt |
5088 | 6449 | \newskip\deflastargmargin \deflastargmargin=18pt |
6450 | +\newcount\defunpenalty | |
5089 | 6451 | |
5090 | 6452 | % Start the processing of @deffn: |
5091 | 6453 | \def\startdefun{% |
5092 | 6454 | \ifnum\lastpenalty<10000 |
5093 | 6455 | \medbreak |
6456 | + \defunpenalty=10003 % Will keep this @deffn together with the | |
6457 | + % following @def command, see below. | |
5094 | 6458 | \else |
5095 | 6459 | % If there are two @def commands in a row, we'll have a \nobreak, |
5096 | 6460 | % which is there to keep the function description together with its |
5097 | 6461 | % 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 | |
5103 | 6472 | % |
5104 | 6473 | % Similarly, after a section heading, do not allow a break. |
5105 | 6474 | % But do insert the glue. |
@@ -5117,7 +6486,7 @@ width0pt\relax} \fi | ||
5117 | 6486 | % |
5118 | 6487 | % As above, allow line break if we have multiple x headers in a row. |
5119 | 6488 | % It's not a great place, though. |
5120 | - \ifnum\lastpenalty=10002 \penalty3000 \fi | |
6489 | + \ifnum\lastpenalty=10002 \penalty3000 \else \defunpenalty=10002 \fi | |
5121 | 6490 | % |
5122 | 6491 | % And now, it's time to reuse the body of the original defun: |
5123 | 6492 | \expandafter\gobbledefun#1% |
@@ -5135,7 +6504,7 @@ width0pt\relax} \fi | ||
5135 | 6504 | \advance\rightskip by 0pt plus 1fil |
5136 | 6505 | \endgraf |
5137 | 6506 | \nobreak\vskip -\parskip |
5138 | - \penalty 10002 % signal to \startdefun and \dodefunx | |
6507 | + \penalty\defunpenalty % signal to \startdefun and \dodefunx | |
5139 | 6508 | % Some of the @defun-type tags do not enable magic parentheses, |
5140 | 6509 | % rendering the following check redundant. But we don't optimize. |
5141 | 6510 | \checkparencounts |
@@ -5145,7 +6514,7 @@ width0pt\relax} \fi | ||
5145 | 6514 | \def\Edefun{\endgraf\medbreak} |
5146 | 6515 | |
5147 | 6516 | % \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. | |
5149 | 6518 | % |
5150 | 6519 | \def\makedefun#1{% |
5151 | 6520 | \expandafter\let\csname E#1\endcsname = \Edefun |
@@ -5258,7 +6627,7 @@ width0pt\relax} \fi | ||
5258 | 6627 | % #1 is the category, such as "Function". |
5259 | 6628 | % #2 is the return type, if any. |
5260 | 6629 | % #3 is the function name. |
5261 | -% | |
6630 | +% | |
5262 | 6631 | % We are followed by (but not passed) the arguments, if any. |
5263 | 6632 | % |
5264 | 6633 | \def\defname#1#2#3{% |
@@ -5316,15 +6685,15 @@ width0pt\relax} \fi | ||
5316 | 6685 | % tt for the name. This is because literal text is sometimes needed in |
5317 | 6686 | % the argument list (groff manual), and ttsl and tt are not very |
5318 | 6687 | % distinguishable. Prevent hyphenation at `-' chars. |
5319 | -% | |
6688 | +% | |
5320 | 6689 | \def\defunargs#1{% |
5321 | - % use sl by default (not ttsl), | |
6690 | + % use sl by default (not ttsl), | |
5322 | 6691 | % tt for the names. |
5323 | 6692 | \df \sl \hyphenchar\font=0 |
5324 | 6693 | % |
5325 | 6694 | % On the other hand, if an argument has two dashes (for instance), we |
5326 | 6695 | % want a way to get ttsl. Let's try @var for that. |
5327 | - \let\var=\ttslanted | |
6696 | + \def\var##1{{\setupmarkupstyle{var}\ttslanted{##1}}}% | |
5328 | 6697 | #1% |
5329 | 6698 | \sl\hyphenchar\font=45 |
5330 | 6699 | } |
@@ -5404,12 +6773,14 @@ width0pt\relax} \fi | ||
5404 | 6773 | \ifnum\parencount=0 \else \badparencount \fi |
5405 | 6774 | \ifnum\brackcount=0 \else \badbrackcount \fi |
5406 | 6775 | } |
6776 | +% these should not use \errmessage; the glibc manual, at least, actually | |
6777 | +% has such constructs (when documenting function pointers). | |
5407 | 6778 | \def\badparencount{% |
5408 | - \errmessage{Unbalanced parentheses in @def}% | |
6779 | + \message{Warning: unbalanced parentheses in @def...}% | |
5409 | 6780 | \global\parencount=0 |
5410 | 6781 | } |
5411 | 6782 | \def\badbrackcount{% |
5412 | - \errmessage{Unbalanced square braces in @def}% | |
6783 | + \message{Warning: unbalanced square brackets in @def...}% | |
5413 | 6784 | \global\brackcount=0 |
5414 | 6785 | } |
5415 | 6786 |
@@ -5422,7 +6793,7 @@ width0pt\relax} \fi | ||
5422 | 6793 | \ifx\eTeXversion\undefined |
5423 | 6794 | \newwrite\macscribble |
5424 | 6795 | \def\scantokens#1{% |
5425 | - \toks0={#1\endinput}% | |
6796 | + \toks0={#1}% | |
5426 | 6797 | \immediate\openout\macscribble=\jobname.tmp |
5427 | 6798 | \immediate\write\macscribble{\the\toks0}% |
5428 | 6799 | \immediate\closeout\macscribble |
@@ -5435,32 +6806,53 @@ width0pt\relax} \fi | ||
5435 | 6806 | \newlinechar`\^^M |
5436 | 6807 | \let\xeatspaces\eatspaces |
5437 | 6808 | % 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=`\@ | |
5439 | 6814 | % ... and \example |
5440 | 6815 | \spaceisspace |
5441 | 6816 | % |
5442 | 6817 | % Append \endinput to make sure that TeX does not see the ending newline. |
5443 | - % | |
5444 | 6818 | % I've verified that it is necessary both for e-TeX and for ordinary TeX |
5445 | 6819 | % --kasal, 29nov03 |
5446 | 6820 | \scantokens{#1\endinput}% |
5447 | 6821 | \endgroup |
5448 | 6822 | } |
5449 | 6823 | |
6824 | +\def\scanexp#1{% | |
6825 | + \edef\temp{\noexpand\scanmacro{#1}}% | |
6826 | + \temp | |
6827 | +} | |
6828 | + | |
5450 | 6829 | \newcount\paramno % Count of parameters |
5451 | 6830 | \newtoks\macname % Macro name |
5452 | 6831 | \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 | +} | |
5455 | 6845 | |
5456 | 6846 | % 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 | +% | |
5458 | 6851 | \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 | +} | |
5464 | 6856 | |
5465 | 6857 | % Trim leading and trailing spaces off a string. |
5466 | 6858 | % Concepts from aro-bend problem 15 (see CTAN). |
@@ -5483,34 +6875,45 @@ width0pt\relax} \fi | ||
5483 | 6875 | % all characters are catcode 10, 11 or 12, except \ which is active |
5484 | 6876 | % (as in normal texinfo). It is necessary to change the definition of \. |
5485 | 6877 | |
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 | + | |
5486 | 6882 | % It's necessary to have hard CRs when the macro is executed. This is |
5487 | 6883 | % done by making ^^M (\endlinechar) catcode 12 when reading the macro |
5488 | 6884 | % body, and then making it the \newlinechar in \scanmacro. |
5489 | 6885 | |
5490 | -\def\macrobodyctxt{% | |
5491 | - \catcode`\~=\other | |
6886 | +\def\scanctxt{% | |
6887 | + \catcode`\"=\other | |
6888 | + \catcode`\+=\other | |
6889 | + \catcode`\<=\other | |
6890 | + \catcode`\>=\other | |
6891 | + \catcode`\@=\other | |
5492 | 6892 | \catcode`\^=\other |
5493 | 6893 | \catcode`\_=\other |
5494 | 6894 | \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 | |
5498 | 6907 | \catcode`\{=\other |
5499 | 6908 | \catcode`\}=\other |
5500 | - \catcode`\@=\other | |
5501 | 6909 | \catcode`\^^M=\other |
5502 | - \usembodybackslash} | |
6910 | + \usembodybackslash | |
6911 | +} | |
5503 | 6912 | |
5504 | 6913 | \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 | +} | |
5514 | 6917 | |
5515 | 6918 | % \mbodybackslash is the definition of \ in @macro bodies. |
5516 | 6919 | % It maps \foo\ => \csname macarg.foo\endcsname => #N |
@@ -5541,10 +6944,7 @@ width0pt\relax} \fi | ||
5541 | 6944 | \else \errmessage{Macro name \the\macname\space already defined}\fi |
5542 | 6945 | \global\cslet{macsave.\the\macname}{\the\macname}% |
5543 | 6946 | \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}% | |
5548 | 6948 | \fi |
5549 | 6949 | \begingroup \macrobodyctxt |
5550 | 6950 | \ifrecursive \expandafter\parsermacbody |
@@ -5558,7 +6958,7 @@ width0pt\relax} \fi | ||
5558 | 6958 | % Remove the macro name from \macrolist: |
5559 | 6959 | \begingroup |
5560 | 6960 | \expandafter\let\csname#1\endcsname \relax |
5561 | - \let\do\unmacrodo | |
6961 | + \let\definedummyword\unmacrodo | |
5562 | 6962 | \xdef\macrolist{\macrolist}% |
5563 | 6963 | \endgroup |
5564 | 6964 | \else |
@@ -5570,10 +6970,10 @@ width0pt\relax} \fi | ||
5570 | 6970 | % macro definitions that have been changed to \relax. |
5571 | 6971 | % |
5572 | 6972 | \def\unmacrodo#1{% |
5573 | - \ifx#1\relax | |
6973 | + \ifx #1\relax | |
5574 | 6974 | % remove this |
5575 | 6975 | \else |
5576 | - \noexpand\do \noexpand #1% | |
6976 | + \noexpand\definedummyword \noexpand#1% | |
5577 | 6977 | \fi |
5578 | 6978 | } |
5579 | 6979 |
@@ -5686,16 +7086,11 @@ width0pt\relax} \fi | ||
5686 | 7086 | % {. If so it reads up to the closing }, if not, it reads the whole |
5687 | 7087 | % line. Whatever was read is then fed to the next control sequence |
5688 | 7088 | % 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} | |
5690 | 7090 | \def\braceorlinexxx{% |
5691 | 7091 | \ifx\nchar\bgroup\else |
5692 | 7092 | \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} | |
5699 | 7094 | |
5700 | 7095 | |
5701 | 7096 | % @alias. |
@@ -5706,6 +7101,7 @@ width0pt\relax} \fi | ||
5706 | 7101 | \def\aliasyyy #1=#2\relax{% |
5707 | 7102 | {% |
5708 | 7103 | \expandafter\let\obeyedspace=\empty |
7104 | + \addtomacrolist{#1}% | |
5709 | 7105 | \xdef\next{\global\let\makecsname{#1}=\makecsname{#2}}% |
5710 | 7106 | }% |
5711 | 7107 | \next |
@@ -5715,7 +7111,6 @@ width0pt\relax} \fi | ||
5715 | 7111 | \message{cross references,} |
5716 | 7112 | |
5717 | 7113 | \newwrite\auxfile |
5718 | - | |
5719 | 7114 | \newif\ifhavexrefs % True if xref values are known. |
5720 | 7115 | \newif\ifwarnedxrefs % True if we warned once that they aren't known. |
5721 | 7116 |
@@ -5725,15 +7120,24 @@ width0pt\relax} \fi | ||
5725 | 7120 | node \samp{\ignorespaces#1{}}} |
5726 | 7121 | |
5727 | 7122 | % @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 | + | |
5731 | 7135 | \let\nwnode=\node |
5732 | 7136 | \let\lastnode=\empty |
5733 | 7137 | |
5734 | 7138 | % Write a cross-reference definition for the current node. #1 is the |
5735 | 7139 | % type (Ynumbered, Yappendix, Ynothing). |
5736 | -% | |
7140 | +% | |
5737 | 7141 | \def\donoderef#1{% |
5738 | 7142 | \ifx\lastnode\empty\else |
5739 | 7143 | \setref{\lastnode}{#1}% |
@@ -5751,31 +7155,29 @@ width0pt\relax} \fi | ||
5751 | 7155 | |
5752 | 7156 | % \setref{NAME}{SNT} defines a cross-reference point NAME (a node or an |
5753 | 7157 | % 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, | |
5755 | 7159 | % or the anchor name. |
5756 | 7160 | % 2) NAME-snt - section number and type, passed as the SNT arg, or |
5757 | 7161 | % empty for anchors. |
5758 | 7162 | % 3) NAME-pg - the page number. |
5759 | -% | |
7163 | +% | |
5760 | 7164 | % This is called from \donoderef, \anchor, and \dofloat. In the case of |
5761 | 7165 | % floats, there is an additional part, which is not written here: |
5762 | 7166 | % 4) NAME-lof - the text as it should appear in a @listoffloats. |
5763 | -% | |
7167 | +% | |
5764 | 7168 | \def\setref#1#2{% |
5765 | 7169 | \pdfmkdest{#1}% |
5766 | 7170 | \iflinks |
5767 | 7171 | {% |
5768 | 7172 | \atdummies % preserve commands, but don't expand them |
5769 | - \turnoffactive | |
5770 | - \otherbackslash | |
5771 | 7173 | \edef\writexrdef##1##2{% |
5772 | 7174 | \write\auxfile{@xrdef{#1-% #1 of \setref, expanded by the \edef |
5773 | 7175 | ##1}{##2}}% these are parameters of \writexrdef |
5774 | 7176 | }% |
5775 | - \toks0 = \expandafter{\thissection}% | |
7177 | + \toks0 = \expandafter{\lastsection}% | |
5776 | 7178 | \immediate \writexrdef{title}{\the\toks0 }% |
5777 | 7179 | \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 | |
5779 | 7181 | }% |
5780 | 7182 | \fi |
5781 | 7183 | } |
@@ -5819,18 +7221,25 @@ width0pt\relax} \fi | ||
5819 | 7221 | % |
5820 | 7222 | % Make link in pdf output. |
5821 | 7223 | \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]}% | |
5825 | 7236 | \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}% | |
5828 | 7238 | \else |
5829 | - \startlink attr{/Border [0 0 0]}% | |
5830 | - goto name{\pdfmkpgn{#1}}% | |
7239 | + goto name{\pdfmkpgn{\pdfxrefdest}}% | |
5831 | 7240 | \fi |
5832 | 7241 | }% |
5833 | - \linkcolor | |
7242 | + \setcolor{\linkcolor}% | |
5834 | 7243 | \fi |
5835 | 7244 | % |
5836 | 7245 | % Float references are printed completely differently: "Figure 1.2" |
@@ -5841,7 +7250,6 @@ width0pt\relax} \fi | ||
5841 | 7250 | % include an _ in the xref name, etc. |
5842 | 7251 | \indexnofonts |
5843 | 7252 | \turnoffactive |
5844 | - \otherbackslash | |
5845 | 7253 | \expandafter\global\expandafter\let\expandafter\Xthisreftitle |
5846 | 7254 | \csname XR#1-title\endcsname |
5847 | 7255 | }% |
@@ -5849,19 +7257,19 @@ width0pt\relax} \fi | ||
5849 | 7257 | % If the user specified the print name (third arg) to the ref, |
5850 | 7258 | % print it instead of our usual "Figure 1.2". |
5851 | 7259 | \ifdim\wd0 = 0pt |
5852 | - \refx{#1-snt}% | |
7260 | + \refx{#1-snt}{}% | |
5853 | 7261 | \else |
5854 | 7262 | \printedrefname |
5855 | 7263 | \fi |
5856 | 7264 | % |
5857 | 7265 | % if the user also gave the printed manual name (fifth arg), append |
5858 | - % "in MANUALNAME". | |
7266 | + % "in MANUALNAME". | |
5859 | 7267 | \ifdim \wd1 > 0pt |
5860 | 7268 | \space \putwordin{} \cite{\printedmanual}% |
5861 | 7269 | \fi |
5862 | 7270 | \else |
5863 | 7271 | % node/anchor (non-float) references. |
5864 | - % | |
7272 | + % | |
5865 | 7273 | % If we use \unhbox0 and \unhbox1 to print the node names, TeX does not |
5866 | 7274 | % insert empty discretionaries after hyphens, which means that it will |
5867 | 7275 | % not find a line break at a hyphen in a node names. Since some manuals |
@@ -5869,14 +7277,14 @@ width0pt\relax} \fi | ||
5869 | 7277 | % is a loss. Therefore, we give the text of the node name again, so it |
5870 | 7278 | % is as if TeX is seeing it for the first time. |
5871 | 7279 | \ifdim \wd1 > 0pt |
5872 | - \putwordsection{} ``\printedrefname'' \putwordin{} \cite{\printedmanual}% | |
7280 | + \putwordSection{} ``\printedrefname'' \putwordin{} \cite{\printedmanual}% | |
5873 | 7281 | \else |
5874 | 7282 | % _ (for example) has to be the character _ for the purposes of the |
5875 | 7283 | % control sequence corresponding to the node, but it has to expand |
5876 | 7284 | % into the usual \leavevmode...\vrule stuff for purposes of |
5877 | 7285 | % printing. So we \turnoffactive for the \refx-snt, back on for the |
5878 | 7286 | % printing, back off for the \refx-pg. |
5879 | - {\turnoffactive \otherbackslash | |
7287 | + {\turnoffactive | |
5880 | 7288 | % Only output a following space if the -snt ref is nonempty; for |
5881 | 7289 | % @unnumbered and @anchor, it won't be. |
5882 | 7290 | \setbox2 = \hbox{\ignorespaces \refx{#1-snt}{}}% |
@@ -5889,7 +7297,7 @@ width0pt\relax} \fi | ||
5889 | 7297 | ,\space |
5890 | 7298 | % |
5891 | 7299 | % output the `page 3'. |
5892 | - \turnoffactive \otherbackslash \putwordpage\tie\refx{#1-pg}{}% | |
7300 | + \turnoffactive \putwordpage\tie\refx{#1-pg}{}% | |
5893 | 7301 | \fi |
5894 | 7302 | \fi |
5895 | 7303 | \endlink |
@@ -5965,14 +7373,22 @@ width0pt\relax} \fi | ||
5965 | 7373 | % collisions). But if this is a float type, we have more work to do. |
5966 | 7374 | % |
5967 | 7375 | \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 | |
5969 | 7385 | % |
5970 | 7386 | % 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 | |
5972 | 7388 | % it was a float, and we have the (safe) float type in \iffloattype. |
5973 | 7389 | \expandafter\let\expandafter\floatlist |
5974 | 7390 | \csname floatlist\iffloattype\endcsname |
5975 | - % | |
7391 | + % | |
5976 | 7392 | % Is this the first time we've seen this float type? |
5977 | 7393 | \expandafter\ifx\floatlist\relax |
5978 | 7394 | \toks0 = {\do}% yes, so just \do |
@@ -5983,22 +7399,23 @@ width0pt\relax} \fi | ||
5983 | 7399 | % |
5984 | 7400 | % Remember this xref in the control sequence \floatlistFLOATTYPE, |
5985 | 7401 | % 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}}% | |
5987 | 7404 | \fi |
5988 | 7405 | } |
5989 | 7406 | |
5990 | 7407 | % Read the last existing aux file, if any. No error if none exists. |
5991 | -% | |
7408 | +% | |
5992 | 7409 | \def\tryauxfile{% |
5993 | 7410 | \openin 1 \jobname.aux |
5994 | 7411 | \ifeof 1 \else |
5995 | - \readauxfile | |
7412 | + \readdatafile{aux}% | |
5996 | 7413 | \global\havexrefstrue |
5997 | 7414 | \fi |
5998 | 7415 | \closein 1 |
5999 | 7416 | } |
6000 | 7417 | |
6001 | -\def\readauxfile{\begingroup | |
7418 | +\def\setupdatafile{% | |
6002 | 7419 | \catcode`\^^@=\other |
6003 | 7420 | \catcode`\^^A=\other |
6004 | 7421 | \catcode`\^^B=\other |
@@ -6067,11 +7484,11 @@ width0pt\relax} \fi | ||
6067 | 7484 | % |
6068 | 7485 | % Make the characters 128-255 be printing characters. |
6069 | 7486 | {% |
6070 | - \count 1=128 | |
7487 | + \count1=128 | |
6071 | 7488 | \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 | |
6075 | 7492 | }% |
6076 | 7493 | }% |
6077 | 7494 | % |
@@ -6079,8 +7496,12 @@ width0pt\relax} \fi | ||
6079 | 7496 | \catcode`\{=1 |
6080 | 7497 | \catcode`\}=2 |
6081 | 7498 | \catcode`\@=0 |
6082 | - % | |
6083 | - \input \jobname.aux | |
7499 | +} | |
7500 | + | |
7501 | +\def\readdatafile#1{% | |
7502 | +\begingroup | |
7503 | + \setupdatafile | |
7504 | + \input\jobname.#1 | |
6084 | 7505 | \endgroup} |
6085 | 7506 | |
6086 | 7507 |
@@ -6166,7 +7587,7 @@ width0pt\relax} \fi | ||
6166 | 7587 | % In case a @footnote appears in a vbox, save the footnote text and create |
6167 | 7588 | % the real \insert just after the vbox finished. Otherwise, the insertion |
6168 | 7589 | % 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 | |
6170 | 7591 | % text to a box and make the \insert when a row of the table is finished. |
6171 | 7592 | % And the same can be done for other insert classes. --kasal, 16nov03. |
6172 | 7593 |
@@ -6270,15 +7691,19 @@ width0pt\relax} \fi | ||
6270 | 7691 | % If the image is by itself, center it. |
6271 | 7692 | \ifvmode |
6272 | 7693 | \imagevmodetrue |
6273 | - \nobreak\bigskip | |
7694 | + \nobreak\medskip | |
6274 | 7695 | % Usually we'll have text after the image which will insert |
6275 | 7696 | % \parskip glue, so insert it here too to equalize the space |
6276 | 7697 | % above and below. |
6277 | 7698 | \nobreak\vskip\parskip |
6278 | 7699 | \nobreak |
6279 | - \line\bgroup\hss | |
6280 | 7700 | \fi |
6281 | 7701 | % |
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 | + % | |
6282 | 7707 | % Output the image. |
6283 | 7708 | \ifpdf |
6284 | 7709 | \dopdfimage{#1}{#2}{#3}% |
@@ -6289,26 +7714,29 @@ width0pt\relax} \fi | ||
6289 | 7714 | \epsfbox{#1.eps}% |
6290 | 7715 | \fi |
6291 | 7716 | % |
6292 | - \ifimagevmode \hss \egroup \bigbreak \fi % space after the image | |
7717 | + \ifimagevmode \medskip \fi % space after the standalone image | |
6293 | 7718 | \endgroup} |
6294 | 7719 | |
6295 | 7720 | |
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,} | |
6301 | 7729 | |
6302 | 7730 | % #1 is the optional FLOATTYPE, the text label for this float, typically |
6303 | 7731 | % "Figure", "Table", "Example", etc. Can't contain commas. If omitted, |
6304 | 7732 | % this float will not be numbered and cannot be referred to. |
6305 | -% | |
7733 | +% | |
6306 | 7734 | % #2 is the optional xref label. Also must be present for the float to |
6307 | 7735 | % be referable. |
6308 | -% | |
7736 | +% | |
6309 | 7737 | % #3 is the optional positioning argument; for now, it is ignored. It |
6310 | 7738 | % will somehow specify the positions allowed to float to (here, top, bottom). |
6311 | -% | |
7739 | +% | |
6312 | 7740 | % We keep a separate counter for each FLOATTYPE, which we reset at each |
6313 | 7741 | % chapter-level command. |
6314 | 7742 | \let\resetallfloatnos=\empty |
@@ -6318,8 +7746,15 @@ width0pt\relax} \fi | ||
6318 | 7746 | \let\thisshortcaption=\empty |
6319 | 7747 | % |
6320 | 7748 | % 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 | + % | |
6321 | 7753 | \startsavinginserts |
6322 | 7754 | % |
7755 | + % We can't be used inside a paragraph. | |
7756 | + \par | |
7757 | + % | |
6323 | 7758 | \vtop\bgroup |
6324 | 7759 | \def\floattype{#1}% |
6325 | 7760 | \def\floatlabel{#2}% |
@@ -6341,18 +7776,18 @@ width0pt\relax} \fi | ||
6341 | 7776 | \ifx\floatlabel\empty \else |
6342 | 7777 | % We want each FLOATTYPE to be numbered separately (Figure 1, |
6343 | 7778 | % Table 1, Figure 2, ...). (And if no label, no number.) |
6344 | - % | |
7779 | + % | |
6345 | 7780 | \expandafter\getfloatno\csname\safefloattype floatno\endcsname |
6346 | 7781 | \global\advance\floatno by 1 |
6347 | 7782 | % |
6348 | 7783 | {% |
6349 | - % This magic value for \thissection is output by \setref as the | |
7784 | + % This magic value for \lastsection is output by \setref as the | |
6350 | 7785 | % XREFLABEL-title value. \xrefX uses it to distinguish float |
6351 | 7786 | % labels (which have a completely different output format) from |
6352 | 7787 | % node and anchor labels. And \xrdef uses it to construct the |
6353 | 7788 | % lists of floats. |
6354 | - % | |
6355 | - \edef\thissection{\floatmagic=\safefloattype}% | |
7789 | + % | |
7790 | + \edef\lastsection{\floatmagic=\safefloattype}% | |
6356 | 7791 | \setref{\floatlabel}{Yfloat}% |
6357 | 7792 | }% |
6358 | 7793 | \fi |
@@ -6399,7 +7834,7 @@ width0pt\relax} \fi | ||
6399 | 7834 | \fi |
6400 | 7835 | % |
6401 | 7836 | % caption text. |
6402 | - \appendtomacro\captionline\thiscaption | |
7837 | + \appendtomacro\captionline{\scanexp\thiscaption}% | |
6403 | 7838 | \fi |
6404 | 7839 | % |
6405 | 7840 | % If we have anything to print, print it, with space before. |
@@ -6407,6 +7842,9 @@ width0pt\relax} \fi | ||
6407 | 7842 | \ifx\captionline\empty \else |
6408 | 7843 | \vskip.5\parskip |
6409 | 7844 | \captionline |
7845 | + % | |
7846 | + % Space below caption. | |
7847 | + \vskip\parskip | |
6410 | 7848 | \fi |
6411 | 7849 | % |
6412 | 7850 | % If have an xref label, write the list of floats info. Do this |
@@ -6416,38 +7854,47 @@ width0pt\relax} \fi | ||
6416 | 7854 | % \floatlabel-lof. Besides \floatident, we include the short |
6417 | 7855 | % caption if specified, else the full caption if specified, else nothing. |
6418 | 7856 | {% |
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}}% | |
6428 | 7873 | }% |
6429 | 7874 | \fi |
6430 | - % | |
6431 | - % Space below caption, if we printed anything. | |
6432 | - \ifx\printedsomething\empty \else \vskip\parskip \fi | |
6433 | 7875 | \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 | + % | |
6434 | 7883 | \checkinserts |
6435 | 7884 | } |
6436 | 7885 | |
6437 | 7886 | % Append the tokens #2 to the definition of macro #1, not expanding either. |
6438 | -% | |
6439 | -\newtoks\appendtomacroAtoks | |
6440 | -\newtoks\appendtomacroBtoks | |
7887 | +% | |
6441 | 7888 | \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}% | |
6445 | 7890 | } |
6446 | 7891 | |
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}} | |
6451 | 7898 | |
6452 | 7899 | % The parameter is the control sequence identifying the counter we are |
6453 | 7900 | % going to use. Create it if it doesn't exist and assign it to \floatno. |
@@ -6466,7 +7913,7 @@ width0pt\relax} \fi | ||
6466 | 7913 | % \setref calls this to get the XREFLABEL-snt value. We want an @xref |
6467 | 7914 | % to the FLOATLABEL to expand to "Figure 3.1". We call \setref when we |
6468 | 7915 | % first read the @float command. |
6469 | -% | |
7916 | +% | |
6470 | 7917 | \def\Yfloat{\floattype@tie \chaplevelprefix\the\floatno}% |
6471 | 7918 | |
6472 | 7919 | % Magic string used for the XREFLABEL-title value, so \xrefX can |
@@ -6475,13 +7922,13 @@ width0pt\relax} \fi | ||
6475 | 7922 | |
6476 | 7923 | % #1 is the control sequence we are passed; we expand into a conditional |
6477 | 7924 | % 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 | +% | |
6480 | 7927 | \def\iffloat#1{\expandafter\doiffloat#1==\finish} |
6481 | 7928 | % |
6482 | 7929 | % #1 is (maybe) the \floatmagic string. If so, #2 will be the |
6483 | 7930 | % (safe) float type for this float. We set \iffloattype to #2. |
6484 | -% | |
7931 | +% | |
6485 | 7932 | \def\doiffloat#1=#2=#3\finish{% |
6486 | 7933 | \def\temp{#1}% |
6487 | 7934 | \def\iffloattype{#2}% |
@@ -6489,7 +7936,7 @@ width0pt\relax} \fi | ||
6489 | 7936 | } |
6490 | 7937 | |
6491 | 7938 | % @listoffloats FLOATTYPE - print a list of floats like a table of contents. |
6492 | -% | |
7939 | +% | |
6493 | 7940 | \parseargdef\listoffloats{% |
6494 | 7941 | \def\floattype{#1}% floattype |
6495 | 7942 | {% |
@@ -6519,10 +7966,10 @@ width0pt\relax} \fi | ||
6519 | 7966 | % xref label, in the form LABEL-title, which is how we save it in the |
6520 | 7967 | % aux file. We strip off the -title and look up \XRLABEL-lof, which |
6521 | 7968 | % has the text we're supposed to typeset here. |
6522 | -% | |
7969 | +% | |
6523 | 7970 | % Figures without xref labels will not be included in the list (since |
6524 | 7971 | % they won't appear in the aux file). |
6525 | -% | |
7972 | +% | |
6526 | 7973 | \def\listoffloatsdo#1{\listoffloatsdoentry#1\finish} |
6527 | 7974 | \def\listoffloatsdoentry#1-title\finish{{% |
6528 | 7975 | % Can't fully expand XR#1-lof because it can contain anything. Just |
@@ -6536,39 +7983,909 @@ width0pt\relax} \fi | ||
6536 | 7983 | \writeentry |
6537 | 7984 | }} |
6538 | 7985 | |
7986 | + | |
6539 | 7987 | \message{localization,} |
6540 | -% and i18n. | |
6541 | 7988 | |
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. | |
6546 | 7992 | % |
6547 | -\parseargdef\documentlanguage{% | |
7993 | +{ | |
7994 | + \catcode`\_ = \active | |
7995 | + \globaldefs=1 | |
7996 | +\parseargdef\documentlanguage{\begingroup | |
7997 | + \let_=\normalunderscore % normal _ character for filenames | |
6548 | 7998 | \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. | |
6550 | 8000 | \openin 1 txi-#1.tex |
6551 | 8001 | \ifeof 1 |
6552 | - \errhelp = \nolanghelp | |
6553 | - \errmessage{Cannot read language file txi-#1.tex}% | |
8002 | + \documentlanguagetrywithoutunderscore{#1_\finish}% | |
6554 | 8003 | \else |
8004 | + \globaldefs = 1 % everything in the txi-LL files needs to persist | |
6555 | 8005 | \input txi-#1.tex |
6556 | 8006 | \fi |
6557 | 8007 | \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 | |
6559 | 8024 | } |
8025 | +}% end of special _ catcode | |
8026 | +% | |
6560 | 8027 | \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.} | |
6563 | 8030 | |
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 | +} | |
6564 | 8056 | |
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 | +} | |
6568 | 8067 | |
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 | +} | |
6569 | 8075 | |
6570 | -% Page size parameters. | |
8076 | +% @documentencoding sets the definition of non-ASCII characters | |
8077 | +% according to the specified encoding. | |
6571 | 8078 | % |
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 | + | |
6572 | 8889 | \newdimen\defaultparindent \defaultparindent = 15pt |
6573 | 8890 | |
6574 | 8891 | \chapheadingskip = 15pt plus 4pt minus 2pt |
@@ -6581,7 +8898,7 @@ should work if nowhere else does.} | ||
6581 | 8898 | % Don't be so finicky about underfull hboxes, either. |
6582 | 8899 | \hbadness = 2000 |
6583 | 8900 | |
6584 | -% Following George Bush, just get rid of widows and orphans. | |
8901 | +% Following George Bush, get rid of widows and orphans. | |
6585 | 8902 | \widowpenalty=10000 |
6586 | 8903 | \clubpenalty=10000 |
6587 | 8904 |
@@ -6599,9 +8916,9 @@ should work if nowhere else does.} | ||
6599 | 8916 | \fi |
6600 | 8917 | } |
6601 | 8918 | |
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. | |
6605 | 8922 | % |
6606 | 8923 | % We also call \setleading{\textleading}, so the caller should define |
6607 | 8924 | % \textleading. The caller should also set \parskip. |
@@ -6628,6 +8945,10 @@ should work if nowhere else does.} | ||
6628 | 8945 | \ifpdf |
6629 | 8946 | \pdfpageheight #7\relax |
6630 | 8947 | \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 | |
6631 | 8952 | \fi |
6632 | 8953 | % |
6633 | 8954 | \setleading{\textleading} |
@@ -6642,19 +8963,19 @@ should work if nowhere else does.} | ||
6642 | 8963 | \textleading = 13.2pt |
6643 | 8964 | % |
6644 | 8965 | % 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 | |
6646 | 8967 | {\voffset}{.25in}% |
6647 | 8968 | {\bindingoffset}{36pt}% |
6648 | 8969 | {11in}{8.5in}% |
6649 | 8970 | }} |
6650 | 8971 | |
6651 | -% Use @smallbook to reset parameters for 7x9.5 (or so) format. | |
8972 | +% Use @smallbook to reset parameters for 7x9.25 trim size. | |
6652 | 8973 | \def\smallbook{{\globaldefs = 1 |
6653 | 8974 | \parskip = 2pt plus 1pt |
6654 | 8975 | \textleading = 12pt |
6655 | 8976 | % |
6656 | 8977 | \internalpagesizes{7.5in}{5in}% |
6657 | - {\voffset}{.25in}% | |
8978 | + {-.2in}{0in}% | |
6658 | 8979 | {\bindingoffset}{16pt}% |
6659 | 8980 | {9.25in}{7in}% |
6660 | 8981 | % |
@@ -6665,6 +8986,24 @@ should work if nowhere else does.} | ||
6665 | 8986 | \defbodyindent = .5cm |
6666 | 8987 | }} |
6667 | 8988 | |
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 | + | |
6668 | 9007 | % Use @afourpaper to print on European A4 paper. |
6669 | 9008 | \def\afourpaper{{\globaldefs = 1 |
6670 | 9009 | \parskip = 3pt plus 2pt minus 1pt |
@@ -6680,7 +9019,7 @@ should work if nowhere else does.} | ||
6680 | 9019 | % \global\normaloffset = -6mm |
6681 | 9020 | % \global\bindingoffset = 10mm |
6682 | 9021 | % @end tex |
6683 | - \internalpagesizes{51\baselineskip}{160mm} | |
9022 | + \internalpagesizes{673.2pt}{160mm}% that's 51 lines | |
6684 | 9023 | {\voffset}{\hoffset}% |
6685 | 9024 | {\bindingoffset}{44pt}% |
6686 | 9025 | {297mm}{210mm}% |
@@ -6745,7 +9084,7 @@ should work if nowhere else does.} | ||
6745 | 9084 | \parskip = 3pt plus 2pt minus 1pt |
6746 | 9085 | \setleading{\textleading}% |
6747 | 9086 | % |
6748 | - \dimen0 = #1 | |
9087 | + \dimen0 = #1\relax | |
6749 | 9088 | \advance\dimen0 by \voffset |
6750 | 9089 | % |
6751 | 9090 | \dimen2 = \hsize |
@@ -6764,6 +9103,9 @@ should work if nowhere else does.} | ||
6764 | 9103 | |
6765 | 9104 | \message{and turning on texinfo input format.} |
6766 | 9105 | |
9106 | +% DEL is a comment character, in case @c does not suffice. | |
9107 | +\catcode`\^^? = 14 | |
9108 | + | |
6767 | 9109 | % Define macros to output various characters with catcode for normal text. |
6768 | 9110 | \catcode`\"=\other |
6769 | 9111 | \catcode`\~=\other |
@@ -6817,6 +9159,7 @@ should work if nowhere else does.} | ||
6817 | 9159 | |
6818 | 9160 | \catcode`\_=\active |
6819 | 9161 | \def_{\ifusingtt\normalunderscore\_} |
9162 | +\let\realunder=_ | |
6820 | 9163 | % Subroutine for the previous macro. |
6821 | 9164 | \def\_{\leavevmode \kern.07em \vbox{\hrule width.3em height.1ex}\kern .07em } |
6822 | 9165 |
@@ -6839,6 +9182,13 @@ should work if nowhere else does.} | ||
6839 | 9182 | % \otherifyactive is called near the end of this file. |
6840 | 9183 | \def\otherifyactive{\catcode`+=\other \catcode`\_=\other} |
6841 | 9184 | |
9185 | +% Used sometimes to turn off (effectively) the active characters even after | |
9186 | +% parsing them. | |
9187 | +\def\turnoffactive{% | |
9188 | + \normalturnoffactive | |
9189 | + \otherbackslash | |
9190 | +} | |
9191 | + | |
6842 | 9192 | \catcode`\@=0 |
6843 | 9193 | |
6844 | 9194 | % \backslashcurfont outputs one backslash character in current font, |
@@ -6846,27 +9196,29 @@ should work if nowhere else does.} | ||
6846 | 9196 | \global\chardef\backslashcurfont=`\\ |
6847 | 9197 | \global\let\rawbackslashxx=\backslashcurfont % let existing .??s files work |
6848 | 9198 | |
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 | + | |
6849 | 9210 | % \rawbackslash defines an active \ to do \backslashcurfont. |
6850 | 9211 | % \otherbackslash defines an active \ to be a literal `\' character with |
6851 | 9212 | % 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} | |
6862 | 9215 | |
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 | |
6868 | 9221 | @let"=@normaldoublequote |
6869 | - @let\=@realbackslash | |
6870 | 9222 | @let~=@normaltilde |
6871 | 9223 | @let^=@normalcaret |
6872 | 9224 | @let_=@normalunderscore |
@@ -6875,15 +9227,11 @@ should work if nowhere else does.} | ||
6875 | 9227 | @let>=@normalgreater |
6876 | 9228 | @let+=@normalplus |
6877 | 9229 | @let$=@normaldollar %$ font-lock fix |
9230 | + @markupsetuplqdefault | |
9231 | + @markupsetuprqdefault | |
6878 | 9232 | @unsepspaces |
6879 | 9233 | } |
6880 | 9234 | |
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 | - | |
6887 | 9235 | % Make _ and + \other characters, temporarily. |
6888 | 9236 | % This is canceled by @fixbackslash. |
6889 | 9237 | @otherifyactive |
@@ -6896,9 +9244,9 @@ should work if nowhere else does.} | ||
6896 | 9244 | @global@let\ = @eatinput |
6897 | 9245 | |
6898 | 9246 | % 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 | |
6900 | 9248 | % 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 | |
6902 | 9250 | % file name, in case not using a pre-dumped format. |
6903 | 9251 | % |
6904 | 9252 | @gdef@fixbackslash{% |
@@ -6915,9 +9263,21 @@ should work if nowhere else does.} | ||
6915 | 9263 | @catcode`@# = @other |
6916 | 9264 | @catcode`@% = @other |
6917 | 9265 | |
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. | |
6918 | 9277 | |
6919 | 9278 | @c Local variables: |
6920 | 9279 | @c eval: (add-hook 'write-file-hooks 'time-stamp) |
9280 | +@c eval: (add-hook 'write-file-hooks 'nuke-trailing-whitespace) | |
6921 | 9281 | @c page-delimiter: "^\\\\message" |
6922 | 9282 | @c time-stamp-start: "def\\\\texinfoversion{" |
6923 | 9283 | @c time-stamp-format: "%:y-%02m-%02d.%02H" |