diff options
| author | Paul Eggert | 2025-04-19 12:18:28 -0700 |
|---|---|---|
| committer | Paul Eggert | 2025-04-19 19:31:25 -0700 |
| commit | 71ee484cac3e0e5b68f006b4cca81c13ca6ce11e (patch) | |
| tree | 21476621d11357283ad30c8b2bcec2871e604ba1 /doc/misc | |
| parent | 30335bb73483fce9d4204f1e18618fe777d0f45e (diff) | |
| download | emacs-71ee484cac3e0e5b68f006b4cca81c13ca6ce11e.tar.gz emacs-71ee484cac3e0e5b68f006b4cca81c13ca6ce11e.zip | |
Update from Gnulib by running admin/merge-gnulib
Diffstat (limited to 'doc/misc')
| -rw-r--r-- | doc/misc/texinfo.tex | 409 |
1 files changed, 231 insertions, 178 deletions
diff --git a/doc/misc/texinfo.tex b/doc/misc/texinfo.tex index faad184e345..3ebea93cb1d 100644 --- a/doc/misc/texinfo.tex +++ b/doc/misc/texinfo.tex | |||
| @@ -3,7 +3,7 @@ | |||
| 3 | % Load plain if necessary, i.e., if running under initex. | 3 | % Load plain if necessary, i.e., if running under initex. |
| 4 | \expandafter\ifx\csname fmtname\endcsname\relax\input plain\fi | 4 | \expandafter\ifx\csname fmtname\endcsname\relax\input plain\fi |
| 5 | % | 5 | % |
| 6 | \def\texinfoversion{2025-01-31.21} | 6 | \def\texinfoversion{2025-03-22.08} |
| 7 | % | 7 | % |
| 8 | % Copyright 1985, 1986, 1988, 1990-2025 Free Software Foundation, Inc. | 8 | % Copyright 1985, 1986, 1988, 1990-2025 Free Software Foundation, Inc. |
| 9 | % | 9 | % |
| @@ -287,7 +287,6 @@ | |||
| 287 | % Avoid "undefined control sequence" errors. | 287 | % Avoid "undefined control sequence" errors. |
| 288 | \def\currentchapterdefs{} | 288 | \def\currentchapterdefs{} |
| 289 | \def\currentsectiondefs{} | 289 | \def\currentsectiondefs{} |
| 290 | \def\currentsection{} | ||
| 291 | \def\prevchapterdefs{} | 290 | \def\prevchapterdefs{} |
| 292 | \def\prevsectiondefs{} | 291 | \def\prevsectiondefs{} |
| 293 | \def\currentcolordefs{} | 292 | \def\currentcolordefs{} |
| @@ -980,18 +979,51 @@ where each line of input produces a line of output.} | |||
| 980 | \newif\ifpdf | 979 | \newif\ifpdf |
| 981 | \newif\ifpdfmakepagedest | 980 | \newif\ifpdfmakepagedest |
| 982 | 981 | ||
| 982 | % when pdftex is run in dvi mode, \pdfoutput is defined (so \pdfoutput=1 | ||
| 983 | % can be set). So we test for \relax and 0 as well as being undefined. | ||
| 984 | \ifx\pdfoutput\thisisundefined | ||
| 985 | \else | ||
| 986 | \ifx\pdfoutput\relax | ||
| 987 | \else | ||
| 988 | \ifcase\pdfoutput | ||
| 989 | \else | ||
| 990 | \pdftrue | ||
| 991 | \fi | ||
| 992 | \fi | ||
| 993 | \fi | ||
| 994 | |||
| 995 | \newif\ifxetex | ||
| 996 | \ifx\XeTeXrevision\thisisundefined\else | ||
| 997 | \xetextrue | ||
| 998 | \fi | ||
| 999 | |||
| 983 | \newif\ifluatex | 1000 | \newif\ifluatex |
| 984 | \ifx\luatexversion\thisisundefined\else | 1001 | \ifx\luatexversion\thisisundefined\else |
| 985 | \luatextrue | 1002 | \luatextrue |
| 1003 | \ifnum\luatexversion>84 | ||
| 1004 | \pdftrue | ||
| 1005 | \fi | ||
| 986 | \fi | 1006 | \fi |
| 987 | 1007 | ||
| 1008 | \newif\ifpdforxetex | ||
| 1009 | \ifpdf | ||
| 1010 | \pdforxetextrue | ||
| 1011 | \fi | ||
| 1012 | \ifxetex | ||
| 1013 | \pdforxetextrue | ||
| 1014 | \fi | ||
| 1015 | |||
| 1016 | |||
| 1017 | |||
| 1018 | % Whether to use non-ASCII bytes in internal link targets. Presently this | ||
| 1019 | % is almost always on. | ||
| 1020 | \newif\iftxiuseunicodedestname | ||
| 1021 | \txiuseunicodedestnametrue | ||
| 1022 | |||
| 988 | % | 1023 | % |
| 989 | % For LuaTeX | 1024 | % For LuaTeX |
| 990 | % | 1025 | % |
| 991 | 1026 | ||
| 992 | \newif\iftxiuseunicodedestname | ||
| 993 | \txiuseunicodedestnamefalse % For pdfTeX etc. | ||
| 994 | |||
| 995 | \ifluatex | 1027 | \ifluatex |
| 996 | % Use Unicode destination names | 1028 | % Use Unicode destination names |
| 997 | \txiuseunicodedestnametrue | 1029 | \txiuseunicodedestnametrue |
| @@ -1045,7 +1077,7 @@ where each line of input produces a line of output.} | |||
| 1045 | % | 1077 | % |
| 1046 | \endgroup | 1078 | \endgroup |
| 1047 | \def\pdfescapestring#1{\directlua{PDFescstr('\luaescapestring{#1}')}} | 1079 | \def\pdfescapestring#1{\directlua{PDFescstr('\luaescapestring{#1}')}} |
| 1048 | \ifnum\luatexversion>84 | 1080 | \ifpdf |
| 1049 | % For LuaTeX >= 0.85 | 1081 | % For LuaTeX >= 0.85 |
| 1050 | \def\pdfdest{\pdfextension dest} | 1082 | \def\pdfdest{\pdfextension dest} |
| 1051 | \let\pdfoutput\outputmode | 1083 | \let\pdfoutput\outputmode |
| @@ -1068,33 +1100,6 @@ where each line of input produces a line of output.} | |||
| 1068 | \fi | 1100 | \fi |
| 1069 | \fi | 1101 | \fi |
| 1070 | 1102 | ||
| 1071 | % when pdftex is run in dvi mode, \pdfoutput is defined (so \pdfoutput=1 | ||
| 1072 | % can be set). So we test for \relax and 0 as well as being undefined. | ||
| 1073 | \ifx\pdfoutput\thisisundefined | ||
| 1074 | \else | ||
| 1075 | \ifx\pdfoutput\relax | ||
| 1076 | \else | ||
| 1077 | \ifcase\pdfoutput | ||
| 1078 | \else | ||
| 1079 | \pdftrue | ||
| 1080 | \fi | ||
| 1081 | \fi | ||
| 1082 | \fi | ||
| 1083 | |||
| 1084 | \newif\ifxetex | ||
| 1085 | \ifx\XeTeXrevision\thisisundefined\else | ||
| 1086 | \xetextrue | ||
| 1087 | \fi | ||
| 1088 | |||
| 1089 | \newif\ifpdforxetex | ||
| 1090 | \pdforxetexfalse | ||
| 1091 | \ifpdf | ||
| 1092 | \pdforxetextrue | ||
| 1093 | \fi | ||
| 1094 | \ifxetex | ||
| 1095 | \pdforxetextrue | ||
| 1096 | \fi | ||
| 1097 | |||
| 1098 | 1103 | ||
| 1099 | % Output page labels information. | 1104 | % Output page labels information. |
| 1100 | % See PDF reference v.1.7 p.594, section 8.3.1. | 1105 | % See PDF reference v.1.7 p.594, section 8.3.1. |
| @@ -1388,9 +1393,6 @@ output) for that.)} | |||
| 1388 | \safewhatsit{\pdfdest name{\pdfdestname} xyz}% | 1393 | \safewhatsit{\pdfdest name{\pdfdestname} xyz}% |
| 1389 | } | 1394 | } |
| 1390 | % | 1395 | % |
| 1391 | % used to mark target names; must be expandable. | ||
| 1392 | \def\pdfmkpgn#1{#1} | ||
| 1393 | % | ||
| 1394 | % Adding outlines to PDF; macros for calculating structure of outlines | 1396 | % Adding outlines to PDF; macros for calculating structure of outlines |
| 1395 | % come from Petr Olsak | 1397 | % come from Petr Olsak |
| 1396 | \def\expnumber#1{\expandafter\ifx\csname#1\endcsname\relax 0% | 1398 | \def\expnumber#1{\expandafter\ifx\csname#1\endcsname\relax 0% |
| @@ -1416,7 +1418,7 @@ output) for that.)} | |||
| 1416 | \def\pdfdestname{#4}% | 1418 | \def\pdfdestname{#4}% |
| 1417 | \fi | 1419 | \fi |
| 1418 | % | 1420 | % |
| 1419 | \pdfoutline goto name{\pdfmkpgn{\pdfdestname}}#2{\pdfoutlinetext}% | 1421 | \pdfoutline goto name{\pdfdestname}#2{\pdfoutlinetext}% |
| 1420 | } | 1422 | } |
| 1421 | % | 1423 | % |
| 1422 | \def\pdfmakeoutlines{% | 1424 | \def\pdfmakeoutlines{% |
| @@ -1427,15 +1429,18 @@ output) for that.)} | |||
| 1427 | \def\thischapnum{##2}% | 1429 | \def\thischapnum{##2}% |
| 1428 | \def\thissecnum{0}% | 1430 | \def\thissecnum{0}% |
| 1429 | \def\thissubsecnum{0}% | 1431 | \def\thissubsecnum{0}% |
| 1432 | \def\indexlastsec{chap\thischapnum}% | ||
| 1430 | }% | 1433 | }% |
| 1431 | \def\numsecentry##1##2##3##4{% | 1434 | \def\numsecentry##1##2##3##4{% |
| 1432 | \advancenumber{chap\thischapnum}% | 1435 | \advancenumber{chap\thischapnum}% |
| 1433 | \def\thissecnum{##2}% | 1436 | \def\thissecnum{##2}% |
| 1434 | \def\thissubsecnum{0}% | 1437 | \def\thissubsecnum{0}% |
| 1438 | \def\indexlastsec{sec\thissecnum}% | ||
| 1435 | }% | 1439 | }% |
| 1436 | \def\numsubsecentry##1##2##3##4{% | 1440 | \def\numsubsecentry##1##2##3##4{% |
| 1437 | \advancenumber{sec\thissecnum}% | 1441 | \advancenumber{sec\thissecnum}% |
| 1438 | \def\thissubsecnum{##2}% | 1442 | \def\thissubsecnum{##2}% |
| 1443 | \def\indexlastsec{subsec\thissecnum}% | ||
| 1439 | }% | 1444 | }% |
| 1440 | \def\numsubsubsecentry##1##2##3##4{% | 1445 | \def\numsubsubsecentry##1##2##3##4{% |
| 1441 | \advancenumber{subsec\thissubsecnum}% | 1446 | \advancenumber{subsec\thissubsecnum}% |
| @@ -1443,7 +1448,13 @@ output) for that.)} | |||
| 1443 | \def\thischapnum{0}% | 1448 | \def\thischapnum{0}% |
| 1444 | \def\thissecnum{0}% | 1449 | \def\thissecnum{0}% |
| 1445 | \def\thissubsecnum{0}% | 1450 | \def\thissubsecnum{0}% |
| 1451 | \let\indexlastsec\empty | ||
| 1446 | % | 1452 | % |
| 1453 | % Index initials are subsidiary to whatever sectioning command just | ||
| 1454 | % occurred, usually @appendix or @chapter but occasionally a lower level. | ||
| 1455 | \def\idxinitialentry##1##2##3##4{% | ||
| 1456 | \expandafter\advancenumber\expandafter{\indexlastsec}% | ||
| 1457 | }% | ||
| 1447 | % use \def rather than \let here because we redefine \chapentry et | 1458 | % use \def rather than \let here because we redefine \chapentry et |
| 1448 | % al. a second time, below. | 1459 | % al. a second time, below. |
| 1449 | \def\appentry{\numchapentry}% | 1460 | \def\appentry{\numchapentry}% |
| @@ -1455,9 +1466,6 @@ output) for that.)} | |||
| 1455 | \def\unnsubsecentry{\numsubsecentry}% | 1466 | \def\unnsubsecentry{\numsubsecentry}% |
| 1456 | \def\unnsubsubsecentry{\numsubsubsecentry}% | 1467 | \def\unnsubsubsecentry{\numsubsubsecentry}% |
| 1457 | % | 1468 | % |
| 1458 | % Treat index initials like @section. Note that this is the wrong | ||
| 1459 | % level if the index is not at the level of @appendix or @chapter. | ||
| 1460 | \def\idxinitialentry{\numsecentry}% | ||
| 1461 | \readdatafile{toc}% | 1469 | \readdatafile{toc}% |
| 1462 | % | 1470 | % |
| 1463 | % Read toc second time, this time actually producing the outlines. | 1471 | % Read toc second time, this time actually producing the outlines. |
| @@ -1482,18 +1490,6 @@ output) for that.)} | |||
| 1482 | \def\idxinitialentry##1##2##3##4{% | 1490 | \def\idxinitialentry##1##2##3##4{% |
| 1483 | \dopdfoutline{##1}{}{idx.##1.##2}{##4}}% | 1491 | \dopdfoutline{##1}{}{idx.##1.##2}{##4}}% |
| 1484 | % | 1492 | % |
| 1485 | % PDF outlines are displayed using system fonts, instead of | ||
| 1486 | % document fonts. Therefore we cannot use special characters, | ||
| 1487 | % since the encoding is unknown. For example, the eogonek from | ||
| 1488 | % Latin 2 (0xea) gets translated to a | character. Info from | ||
| 1489 | % Staszek Wawrykiewicz, 19 Jan 2004 04:09:24 +0100. | ||
| 1490 | % | ||
| 1491 | % TODO this right, we have to translate 8-bit characters to | ||
| 1492 | % their "best" equivalent, based on the @documentencoding. Too | ||
| 1493 | % much work for too little return. Just use the ASCII equivalents | ||
| 1494 | % we use for the index sort strings. | ||
| 1495 | % | ||
| 1496 | \indexnofonts | ||
| 1497 | \ifnodeseen\else \dopdfoutlinecontents \fi % for @contents at beginning | 1493 | \ifnodeseen\else \dopdfoutlinecontents \fi % for @contents at beginning |
| 1498 | \setupdatafile | 1494 | \setupdatafile |
| 1499 | % We can have normal brace characters in the PDF outlines, unlike | 1495 | % We can have normal brace characters in the PDF outlines, unlike |
| @@ -1501,9 +1497,9 @@ output) for that.)} | |||
| 1501 | \def\{{\lbracecharliteral}% | 1497 | \def\{{\lbracecharliteral}% |
| 1502 | \def\}{\rbracecharliteral}% | 1498 | \def\}{\rbracecharliteral}% |
| 1503 | \catcode`\\=\active \otherbackslash | 1499 | \catcode`\\=\active \otherbackslash |
| 1504 | \input \tocreadfilename | 1500 | \input \tocreadfilename\relax |
| 1501 | \ifnodeseen \dopdfoutlinecontents \fi % for @contents at end | ||
| 1505 | \endgroup | 1502 | \endgroup |
| 1506 | \ifnodeseen \dopdfoutlinecontents \fi % for @contents at end | ||
| 1507 | } | 1503 | } |
| 1508 | \def\dopdfoutlinecontents{% | 1504 | \def\dopdfoutlinecontents{% |
| 1509 | \expandafter\dopdfoutline\expandafter{\putwordTOC}{}{txi.CONTENTS}{}% | 1505 | \expandafter\dopdfoutline\expandafter{\putwordTOC}{}{txi.CONTENTS}{}% |
| @@ -1541,7 +1537,7 @@ output) for that.)} | |||
| 1541 | % | 1537 | % |
| 1542 | \def\pdflink#1{\pdflinkpage{#1}{#1}}% | 1538 | \def\pdflink#1{\pdflinkpage{#1}{#1}}% |
| 1543 | \def\pdflinkpage#1#2{% | 1539 | \def\pdflinkpage#1#2{% |
| 1544 | \startlink attr{/Border [0 0 0]} goto name{\pdfmkpgn{#1}} | 1540 | \startlink attr{/Border [0 0 0]} goto name{#1} |
| 1545 | \setcolor{\linkcolor}#2\endlink} | 1541 | \setcolor{\linkcolor}#2\endlink} |
| 1546 | \else | 1542 | \else |
| 1547 | % non-pdf mode | 1543 | % non-pdf mode |
| @@ -1644,18 +1640,20 @@ output) for that.)} | |||
| 1644 | % horizontal space being required in the PDF viewer. | 1640 | % horizontal space being required in the PDF viewer. |
| 1645 | \def\partentry##1##2##3##4{}% ignore parts in the outlines | 1641 | \def\partentry##1##2##3##4{}% ignore parts in the outlines |
| 1646 | \def\numchapentry##1##2##3##4{% | 1642 | \def\numchapentry##1##2##3##4{% |
| 1647 | \dopdfoutline{##2 ##1}{1}{##3}{##4}}% | 1643 | \dopdfoutline{##2 ##1}{1}{##3}{##4}% |
| 1644 | \def\indexseclevel{2}}% | ||
| 1648 | \def\numsecentry##1##2##3##4{% | 1645 | \def\numsecentry##1##2##3##4{% |
| 1649 | \dopdfoutline{##1}{2}{##3}{##4}}% | 1646 | \dopdfoutline{##1}{2}{##3}{##4}% |
| 1647 | \def\indexseclevel{3}}% | ||
| 1650 | \def\numsubsecentry##1##2##3##4{% | 1648 | \def\numsubsecentry##1##2##3##4{% |
| 1651 | \dopdfoutline{##1}{3}{##3}{##4}}% | 1649 | \dopdfoutline{##1}{3}{##3}{##4}% |
| 1650 | \def\indexseclevel{4}}% | ||
| 1652 | \def\numsubsubsecentry##1##2##3##4{% | 1651 | \def\numsubsubsecentry##1##2##3##4{% |
| 1653 | \dopdfoutline{##1}{4}{##3}{##4}}% | 1652 | \dopdfoutline{##1}{4}{##3}{##4}% |
| 1653 | \def\indexseclevel{5}}% | ||
| 1654 | % | 1654 | % |
| 1655 | % Note this is at the wrong level unless the index is in an @appendix | ||
| 1656 | % or @chapter. | ||
| 1657 | \def\idxinitialentry##1##2##3##4{% | 1655 | \def\idxinitialentry##1##2##3##4{% |
| 1658 | \dopdfoutline{##1}{2}{idx.##1.##2}{##4}}% | 1656 | \dopdfoutline{##1}{\indexseclevel}{idx.##1.##2}{##4}}% |
| 1659 | % | 1657 | % |
| 1660 | \let\appentry\numchapentry% | 1658 | \let\appentry\numchapentry% |
| 1661 | \let\appsecentry\numsecentry% | 1659 | \let\appsecentry\numsecentry% |
| @@ -1680,7 +1678,9 @@ output) for that.)} | |||
| 1680 | \def\{{\lbracecharliteral}% | 1678 | \def\{{\lbracecharliteral}% |
| 1681 | \def\}{\rbracecharliteral}% | 1679 | \def\}{\rbracecharliteral}% |
| 1682 | \catcode`\\=\active \otherbackslash | 1680 | \catcode`\\=\active \otherbackslash |
| 1681 | \xetexpreauxfile | ||
| 1683 | \input \tocreadfilename\relax | 1682 | \input \tocreadfilename\relax |
| 1683 | \xetexpostauxfile | ||
| 1684 | \ifnodeseen \dopdfoutlinecontents \fi % for @contents at end | 1684 | \ifnodeseen \dopdfoutlinecontents \fi % for @contents at end |
| 1685 | \endgroup | 1685 | \endgroup |
| 1686 | } | 1686 | } |
| @@ -5177,8 +5177,8 @@ $$% | |||
| 5177 | % | 5177 | % |
| 5178 | \uccode`\1=`\{ \uppercase{\def\{{1}}% | 5178 | \uccode`\1=`\{ \uppercase{\def\{{1}}% |
| 5179 | \uccode`\1=`\} \uppercase{\def\}{1}}% | 5179 | \uccode`\1=`\} \uppercase{\def\}{1}}% |
| 5180 | \let\lbracechar\{% | 5180 | \def\lbracechar##1{\{}% |
| 5181 | \let\rbracechar\}% | 5181 | \def\rbracechar##1{\}}% |
| 5182 | % | 5182 | % |
| 5183 | % | 5183 | % |
| 5184 | % We need to get rid of all macros, leaving only the arguments (if present). | 5184 | % We need to get rid of all macros, leaving only the arguments (if present). |
| @@ -5523,6 +5523,8 @@ $$% | |||
| 5523 | \tolerance = 9500 | 5523 | \tolerance = 9500 |
| 5524 | \plainfrenchspacing | 5524 | \plainfrenchspacing |
| 5525 | \everypar = {}% don't want the \kern\-parindent from indentation suppression. | 5525 | \everypar = {}% don't want the \kern\-parindent from indentation suppression. |
| 5526 | \let\entry\indexentry | ||
| 5527 | \ifxetex\xetexpreauxfile\fi | ||
| 5526 | % | 5528 | % |
| 5527 | % See comment in \requireopenindexfile. | 5529 | % See comment in \requireopenindexfile. |
| 5528 | \def\indexname{#1}\ifx\indexname\indexisfl\def\indexname{f1}\fi | 5530 | \def\indexname{#1}\ifx\indexname\indexisfl\def\indexname{f1}\fi |
| @@ -5548,6 +5550,7 @@ $$% | |||
| 5548 | \fi | 5550 | \fi |
| 5549 | \fi | 5551 | \fi |
| 5550 | \closein 1 | 5552 | \closein 1 |
| 5553 | \ifxetex\xetexpostauxfile\fi | ||
| 5551 | \endgroup} | 5554 | \endgroup} |
| 5552 | 5555 | ||
| 5553 | % Checked in @bye | 5556 | % Checked in @bye |
| @@ -5583,7 +5586,9 @@ might help (with 'rm \jobname.?? \jobname.??s')% | |||
| 5583 | }% | 5586 | }% |
| 5584 | \else | 5587 | \else |
| 5585 | \begindoublecolumns | 5588 | \begindoublecolumns |
| 5589 | \ifxetex\xetexpreauxfile\fi | ||
| 5586 | \input \jobname.\indexname s | 5590 | \input \jobname.\indexname s |
| 5591 | \ifxetex\xetexpostauxfile\fi | ||
| 5587 | \enddoublecolumns | 5592 | \enddoublecolumns |
| 5588 | \fi | 5593 | \fi |
| 5589 | }{% | 5594 | }{% |
| @@ -5594,11 +5599,39 @@ might help (with 'rm \jobname.?? \jobname.??s')% | |||
| 5594 | % should work because we (hopefully) don't otherwise use @ in index files. | 5599 | % should work because we (hopefully) don't otherwise use @ in index files. |
| 5595 | %\catcode`\@=12\relax | 5600 | %\catcode`\@=12\relax |
| 5596 | \catcode`\@=0\relax | 5601 | \catcode`\@=0\relax |
| 5602 | \ifxetex\xetexpreauxfile\fi | ||
| 5597 | \input \jobname.\indexname s | 5603 | \input \jobname.\indexname s |
| 5604 | \ifxetex\xetexpostauxfile\fi | ||
| 5598 | \enddoublecolumns | 5605 | \enddoublecolumns |
| 5599 | }% | 5606 | }% |
| 5600 | } | 5607 | } |
| 5601 | 5608 | ||
| 5609 | \def\indexentry#1#2{% | ||
| 5610 | \let\entrypagetarget\empty | ||
| 5611 | \ifpdforxetex | ||
| 5612 | % only link the index text to the page if no comma appears in the | ||
| 5613 | % list of pages, i.e. there is only one page | ||
| 5614 | \checkpagelistcomma{#2}\pagelistcomma | ||
| 5615 | \expandafter\ifcase\pagelistcomma | ||
| 5616 | \def\entrypagetarget{#2}% | ||
| 5617 | \fi | ||
| 5618 | \fi% | ||
| 5619 | \entryinternal{#1}{#2}% | ||
| 5620 | } | ||
| 5621 | |||
| 5622 | \def\checkpagelistcomma#1#2{% | ||
| 5623 | \checkpagelistcommaxx#2#1,\finish | ||
| 5624 | } | ||
| 5625 | \def\checkpagelistcommaxx#1#2,#3\finish{% | ||
| 5626 | \def\tmp{#3}% | ||
| 5627 | \ifx\tmp\empty | ||
| 5628 | \def#1{0\relax} | ||
| 5629 | \else | ||
| 5630 | \def#1{1\relax} | ||
| 5631 | \fi | ||
| 5632 | } | ||
| 5633 | |||
| 5634 | |||
| 5602 | % These macros are used by the sorted index file itself. | 5635 | % These macros are used by the sorted index file itself. |
| 5603 | % Change them to control the appearance of the index. | 5636 | % Change them to control the appearance of the index. |
| 5604 | 5637 | ||
| @@ -5673,18 +5706,14 @@ might help (with 'rm \jobname.?? \jobname.??s')% | |||
| 5673 | \def\doindexinitialentry#1{% | 5706 | \def\doindexinitialentry#1{% |
| 5674 | \ifpdforxetex | 5707 | \ifpdforxetex |
| 5675 | \global\advance\idxinitialno by 1 | 5708 | \global\advance\idxinitialno by 1 |
| 5676 | \def\indexlbrace{\{} | 5709 | \def\indexlbrace{\{}% |
| 5677 | \def\indexrbrace{\}} | 5710 | \def\indexrbrace{\}}% |
| 5678 | \def\indexbackslash{\realbackslash} | 5711 | \def\indexbackslash{\realbackslash}% |
| 5679 | \def\indexatchar{\@} | 5712 | \def\indexatchar{\@}% |
| 5680 | \writetocentry{idxinitial}{\asis #1}{IDX\the\idxinitialno}% | 5713 | \writetocentry{idxinitial}{\asis #1}{IDX\the\idxinitialno}% |
| 5681 | % The @asis removes a pair of braces around e.g. {@indexatchar} that | 5714 | % The @asis removes a pair of braces around e.g. {@indexatchar} that |
| 5682 | % are output by texindex. | 5715 | % are output by texindex. |
| 5683 | % | 5716 | % |
| 5684 | \vbox to 0pt{}% | ||
| 5685 | % This vbox fixes the \pdfdest location for double column formatting. | ||
| 5686 | % Without it, the \pdfdest is output above topskip glue at the top | ||
| 5687 | % of a column as this glue is not added until the first box. | ||
| 5688 | \pdfmkdest{idx.\asis #1.IDX\the\idxinitialno}% | 5717 | \pdfmkdest{idx.\asis #1.IDX\the\idxinitialno}% |
| 5689 | \fi | 5718 | \fi |
| 5690 | } | 5719 | } |
| @@ -5704,16 +5733,18 @@ might help (with 'rm \jobname.?? \jobname.??s')% | |||
| 5704 | \newdimen\entrycontskip | 5733 | \newdimen\entrycontskip |
| 5705 | \entrycontskip=1em | 5734 | \entrycontskip=1em |
| 5706 | 5735 | ||
| 5707 | % for PDF output, whether to make the text of the entry a link to the page | 5736 | % for PDF output, whether to make the text of the entry a link to the section. |
| 5708 | % number. set for @contents and @shortcontents where there is only one | 5737 | % set for @contents and @shortcontents. |
| 5709 | % page number. | ||
| 5710 | \newif\iflinkentrytext | 5738 | \newif\iflinkentrytext |
| 5711 | 5739 | ||
| 5712 | % \entry typesets a paragraph consisting of the text (#1), dot leaders, and | 5740 | % \entryinternal typesets a paragraph consisting of the text (#1), dot |
| 5713 | % then page number (#2) flushed to the right margin. It is used for index | 5741 | % leaders, and then page number (#2) flushed to the right margin. It is |
| 5714 | % and table of contents entries. The paragraph is indented by \leftskip. | 5742 | % used for index and table of contents entries. The paragraph is indented |
| 5715 | % If \tocnodetarget is set, link text to the referenced node. | 5743 | % by \leftskip. |
| 5716 | \def\entry{% | 5744 | % For PDF output, if \linkentrytexttrue and \tocnodetarget is set, link text |
| 5745 | % to the referenced node. Else if \entrypagetarget is set, link text to the | ||
| 5746 | % page. | ||
| 5747 | \def\entryinternal{% | ||
| 5717 | \begingroup | 5748 | \begingroup |
| 5718 | % | 5749 | % |
| 5719 | % Start a new paragraph if necessary, so our assignments below can't | 5750 | % Start a new paragraph if necessary, so our assignments below can't |
| @@ -5761,7 +5792,11 @@ might help (with 'rm \jobname.?? \jobname.??s')% | |||
| 5761 | \endlink | 5792 | \endlink |
| 5762 | \fi | 5793 | \fi |
| 5763 | \else | 5794 | \else |
| 5764 | \unhbox\boxA | 5795 | \ifx\entrypagetarget\empty |
| 5796 | \unhbox\boxA | ||
| 5797 | \else | ||
| 5798 | \pdflinkpage{\entrypagetarget}{\unhbox\boxA}% | ||
| 5799 | \fi | ||
| 5765 | \fi | 5800 | \fi |
| 5766 | \else | 5801 | \else |
| 5767 | \unhbox\boxA | 5802 | \unhbox\boxA |
| @@ -6433,6 +6468,10 @@ might help (with 'rm \jobname.?? \jobname.??s')% | |||
| 6433 | \parseargdef\subsubheading{\sectionheading{#1}{subsubsec}{Yomitfromtoc}{} | 6468 | \parseargdef\subsubheading{\sectionheading{#1}{subsubsec}{Yomitfromtoc}{} |
| 6434 | \suppressfirstparagraphindent} | 6469 | \suppressfirstparagraphindent} |
| 6435 | 6470 | ||
| 6471 | % @xrefname - give text with printed name for linking to node and allow | ||
| 6472 | % referencing node, but do not print any heading. | ||
| 6473 | \parseargdef\xrefname{\donoderef{Yomitfromtoc}{#1}}% | ||
| 6474 | |||
| 6436 | % These macros generate a chapter, section, etc. heading only | 6475 | % These macros generate a chapter, section, etc. heading only |
| 6437 | % (including whitespace, linebreaking, etc. around it), | 6476 | % (including whitespace, linebreaking, etc. around it), |
| 6438 | % given all the information in convenient, parsed form. | 6477 | % given all the information in convenient, parsed form. |
| @@ -6554,11 +6593,6 @@ might help (with 'rm \jobname.?? \jobname.??s')% | |||
| 6554 | \chapfonts \rm | 6593 | \chapfonts \rm |
| 6555 | \let\footnote=\errfootnoteheading % give better error message | 6594 | \let\footnote=\errfootnoteheading % give better error message |
| 6556 | % | 6595 | % |
| 6557 | % Have to define \currentsection before calling \donoderef, because the | ||
| 6558 | % xref code eventually uses it. On the other hand, it has to be called | ||
| 6559 | % after \pchapsepmacro, or the headline will change too soon. | ||
| 6560 | \gdef\currentsection{#1}% | ||
| 6561 | % | ||
| 6562 | % Only insert the separating space if we have a chapter/appendix | 6596 | % Only insert the separating space if we have a chapter/appendix |
| 6563 | % number, and don't print the unnumbered ``number''. | 6597 | % number, and don't print the unnumbered ``number''. |
| 6564 | \ifx\temptype\Ynothingkeyword | 6598 | \ifx\temptype\Ynothingkeyword |
| @@ -6585,7 +6619,7 @@ might help (with 'rm \jobname.?? \jobname.??s')% | |||
| 6585 | % been typeset. If the destination for the pdf outline is after the | 6619 | % been typeset. If the destination for the pdf outline is after the |
| 6586 | % text, then jumping from the outline may wind up with the text not | 6620 | % text, then jumping from the outline may wind up with the text not |
| 6587 | % being visible, for instance under high magnification. | 6621 | % being visible, for instance under high magnification. |
| 6588 | \donoderef{#2}% | 6622 | \donoderef{#2}{#1}% |
| 6589 | % | 6623 | % |
| 6590 | % Typeset the actual heading. | 6624 | % Typeset the actual heading. |
| 6591 | \nobreak % Avoid page breaks at the interline glue. | 6625 | \nobreak % Avoid page breaks at the interline glue. |
| @@ -6701,21 +6735,17 @@ might help (with 'rm \jobname.?? \jobname.??s')% | |||
| 6701 | \ifx\temptype\Ynothingkeyword | 6735 | \ifx\temptype\Ynothingkeyword |
| 6702 | \setbox0 = \hbox{}% | 6736 | \setbox0 = \hbox{}% |
| 6703 | \def\toctype{unn}% | 6737 | \def\toctype{unn}% |
| 6704 | \gdef\currentsection{#1}% | ||
| 6705 | \else\ifx\temptype\Yomitfromtockeyword | 6738 | \else\ifx\temptype\Yomitfromtockeyword |
| 6706 | % for @headings -- no section number, don't include in toc, | 6739 | % for @headings -- no section number, don't include in toc. |
| 6707 | % and don't redefine \currentsection. | ||
| 6708 | \setbox0 = \hbox{}% | 6740 | \setbox0 = \hbox{}% |
| 6709 | \def\toctype{omit}% | 6741 | \def\toctype{omit}% |
| 6710 | \let\sectionlevel=\empty | 6742 | \let\sectionlevel=\empty |
| 6711 | \else\ifx\temptype\Yappendixkeyword | 6743 | \else\ifx\temptype\Yappendixkeyword |
| 6712 | \setbox0 = \hbox{#4\enspace}% | 6744 | \setbox0 = \hbox{#4\enspace}% |
| 6713 | \def\toctype{app}% | 6745 | \def\toctype{app}% |
| 6714 | \gdef\currentsection{#1}% | ||
| 6715 | \else | 6746 | \else |
| 6716 | \setbox0 = \hbox{#4\enspace}% | 6747 | \setbox0 = \hbox{#4\enspace}% |
| 6717 | \def\toctype{num}% | 6748 | \def\toctype{num}% |
| 6718 | \gdef\currentsection{#1}% | ||
| 6719 | \fi\fi\fi | 6749 | \fi\fi\fi |
| 6720 | % | 6750 | % |
| 6721 | % Write the toc entry (before \donoderef). See comments in \chapmacro. | 6751 | % Write the toc entry (before \donoderef). See comments in \chapmacro. |
| @@ -6723,7 +6753,7 @@ might help (with 'rm \jobname.?? \jobname.??s')% | |||
| 6723 | % | 6753 | % |
| 6724 | % Write the node reference (= pdf destination for pdftex). | 6754 | % Write the node reference (= pdf destination for pdftex). |
| 6725 | % Again, see comments in \chapmacro. | 6755 | % Again, see comments in \chapmacro. |
| 6726 | \donoderef{#3}% | 6756 | \donoderef{#3}{#1}% |
| 6727 | % | 6757 | % |
| 6728 | % Interline glue will be inserted when the vbox is completed. | 6758 | % Interline glue will be inserted when the vbox is completed. |
| 6729 | % That glue will be a valid breakpoint for the page, since it'll be | 6759 | % That glue will be a valid breakpoint for the page, since it'll be |
| @@ -6955,6 +6985,7 @@ might help (with 'rm \jobname.?? \jobname.??s')% | |||
| 6955 | % | 6985 | % |
| 6956 | \def\contents{% | 6986 | \def\contents{% |
| 6957 | \startcontents{\putwordTOC}{\contentsmkdest}% | 6987 | \startcontents{\putwordTOC}{\contentsmkdest}% |
| 6988 | \ifxetex\xetexpreauxfile\fi | ||
| 6958 | \openin 1 \tocreadfilename\space | 6989 | \openin 1 \tocreadfilename\space |
| 6959 | \ifeof 1 \else | 6990 | \ifeof 1 \else |
| 6960 | \findsecnowidths | 6991 | \findsecnowidths |
| @@ -6966,6 +6997,7 @@ might help (with 'rm \jobname.?? \jobname.??s')% | |||
| 6966 | \pdfmakeoutlines | 6997 | \pdfmakeoutlines |
| 6967 | \fi | 6998 | \fi |
| 6968 | \closein 1 | 6999 | \closein 1 |
| 7000 | \ifxetex\xetexpostauxfile\fi | ||
| 6969 | \endgroup | 7001 | \endgroup |
| 6970 | \contentsendroman | 7002 | \contentsendroman |
| 6971 | } | 7003 | } |
| @@ -6999,11 +7031,13 @@ might help (with 'rm \jobname.?? \jobname.??s')% | |||
| 6999 | \let\numsubsubsecentry = \numsecentry | 7031 | \let\numsubsubsecentry = \numsecentry |
| 7000 | \let\appsubsubsecentry = \numsecentry | 7032 | \let\appsubsubsecentry = \numsecentry |
| 7001 | \let\unnsubsubsecentry = \numsecentry | 7033 | \let\unnsubsubsecentry = \numsecentry |
| 7034 | \ifxetex\xetexpreauxfile\fi | ||
| 7002 | \openin 1 \tocreadfilename\space | 7035 | \openin 1 \tocreadfilename\space |
| 7003 | \ifeof 1 \else | 7036 | \ifeof 1 \else |
| 7004 | \readtocfile | 7037 | \readtocfile |
| 7005 | \fi | 7038 | \fi |
| 7006 | \closein 1 | 7039 | \closein 1 |
| 7040 | \ifxetex\xetexpostauxfile\fi | ||
| 7007 | \vfill \eject | 7041 | \vfill \eject |
| 7008 | \contentsalignmacro % in case @setchapternewpage odd is in effect | 7042 | \contentsalignmacro % in case @setchapternewpage odd is in effect |
| 7009 | \endgroup | 7043 | \endgroup |
| @@ -7167,6 +7201,7 @@ might help (with 'rm \jobname.?? \jobname.??s')% | |||
| 7167 | \extrasecnoskip=0pt | 7201 | \extrasecnoskip=0pt |
| 7168 | 7202 | ||
| 7169 | \let\tocnodetarget\empty | 7203 | \let\tocnodetarget\empty |
| 7204 | \let\entrypagetarget\empty | ||
| 7170 | 7205 | ||
| 7171 | % \tocentry{TITLE}{SEC NO}{NODE}{PAGE} | 7206 | % \tocentry{TITLE}{SEC NO}{NODE}{PAGE} |
| 7172 | % | 7207 | % |
| @@ -7174,7 +7209,7 @@ might help (with 'rm \jobname.?? \jobname.??s')% | |||
| 7174 | \def\tocnodetarget{#3}% | 7209 | \def\tocnodetarget{#3}% |
| 7175 | \def\secno{#2}% | 7210 | \def\secno{#2}% |
| 7176 | \ifx\empty\secno | 7211 | \ifx\empty\secno |
| 7177 | \entry{#1}{#4}% | 7212 | \entryinternal{#1}{#4}% |
| 7178 | \else | 7213 | \else |
| 7179 | \ifdim 0pt=\secnowidth | 7214 | \ifdim 0pt=\secnowidth |
| 7180 | \setbox0=\hbox{#2\hskip\labelspace\hskip\extrasecnoskip}% | 7215 | \setbox0=\hbox{#2\hskip\labelspace\hskip\extrasecnoskip}% |
| @@ -7185,7 +7220,7 @@ might help (with 'rm \jobname.?? \jobname.??s')% | |||
| 7185 | #2\hskip\labelspace\hskip\extrasecnoskip\hfill}% | 7220 | #2\hskip\labelspace\hskip\extrasecnoskip\hfill}% |
| 7186 | \fi | 7221 | \fi |
| 7187 | \entrycontskip=\wd0 | 7222 | \entrycontskip=\wd0 |
| 7188 | \entry{\box0 #1}{#4}% | 7223 | \entryinternal{\box0 #1}{#4}% |
| 7189 | \fi | 7224 | \fi |
| 7190 | } | 7225 | } |
| 7191 | \newdimen\labelspace | 7226 | \newdimen\labelspace |
| @@ -8170,18 +8205,11 @@ might help (with 'rm \jobname.?? \jobname.??s')% | |||
| 8170 | } | 8205 | } |
| 8171 | \fi | 8206 | \fi |
| 8172 | 8207 | ||
| 8173 | \let\E=\expandafter | ||
| 8174 | |||
| 8175 | % Used at the time of macro expansion. | 8208 | % Used at the time of macro expansion. |
| 8176 | % Argument is macro body with arguments substituted | 8209 | % Argument is macro body with arguments substituted |
| 8177 | \def\scanmacro#1{% | 8210 | \def\scanmacro#1{% |
| 8178 | \newlinechar`\^^M | 8211 | \newlinechar`\^^M |
| 8179 | % expand the expansion of \eatleadingcr twice to maybe remove a leading | 8212 | \def\xeatspaces##1{\eatleadingcrthen\eatspaces{##1}}% |
| 8180 | % newline (and \else and \fi tokens), then call \eatspaces on the result. | ||
| 8181 | \def\xeatspaces##1{% | ||
| 8182 | \E\E\E\E\E\E\E\eatspaces\E\E\E\E\E\E\E{\eatleadingcr##1% | ||
| 8183 | }}% | ||
| 8184 | \def\xempty##1{}% | ||
| 8185 | % | 8213 | % |
| 8186 | % Process the macro body under the current catcode regime. | 8214 | % Process the macro body under the current catcode regime. |
| 8187 | \scantokens{#1@comment}% | 8215 | \scantokens{#1@comment}% |
| @@ -8234,10 +8262,12 @@ might help (with 'rm \jobname.?? \jobname.??s')% | |||
| 8234 | \unbrace{\gdef\trim@@@ #1 } #2@{#1} | 8262 | \unbrace{\gdef\trim@@@ #1 } #2@{#1} |
| 8235 | } | 8263 | } |
| 8236 | 8264 | ||
| 8237 | {\catcode`\^^M=\other% | 8265 | % Trim a single leading ^^M off a string, then call #1 |
| 8238 | \gdef\eatleadingcr#1{\if\noexpand#1\noexpand^^M\else\E#1\fi}}% | 8266 | {\catcode`\^^M=\active \catcode`\Q=3% |
| 8239 | % Warning: this won't work for a delimited argument | 8267 | \gdef\eatleadingcrthen #1#2{\eatlcra #1Q#2Q^^MQ}% |
| 8240 | % or for an empty argument | 8268 | \gdef\eatlcra #1#2Q^^M{\eatlcrb #1#2Q}% |
| 8269 | \gdef\eatlcrb #1Q#2Q#3Q{#1{#2}}% | ||
| 8270 | } | ||
| 8241 | 8271 | ||
| 8242 | % Trim a single trailing ^^M off a string. | 8272 | % Trim a single trailing ^^M off a string. |
| 8243 | {\catcode`\^^M=\other \catcode`\Q=3% | 8273 | {\catcode`\^^M=\other \catcode`\Q=3% |
| @@ -8373,6 +8403,10 @@ might help (with 'rm \jobname.?? \jobname.??s')% | |||
| 8373 | % <parameter list> is #, then the preceding argument is delimited by | 8403 | % <parameter list> is #, then the preceding argument is delimited by |
| 8374 | % an opening brace, and that opening brace is not consumed. | 8404 | % an opening brace, and that opening brace is not consumed. |
| 8375 | 8405 | ||
| 8406 | % Make @ a letter, so that we can make private-to-Texinfo macro names. | ||
| 8407 | \edef\texiatcatcode{\the\catcode`\@} | ||
| 8408 | \catcode `@=11\relax | ||
| 8409 | |||
| 8376 | % Parse the optional {params} list to @macro or @rmacro. | 8410 | % Parse the optional {params} list to @macro or @rmacro. |
| 8377 | % Set \paramno to the number of arguments, | 8411 | % Set \paramno to the number of arguments, |
| 8378 | % and \paramlist to a parameter text for the macro (e.g. #1,#2,#3 for a | 8412 | % and \paramlist to a parameter text for the macro (e.g. #1,#2,#3 for a |
| @@ -8385,14 +8419,13 @@ might help (with 'rm \jobname.?? \jobname.??s')% | |||
| 8385 | % That gets used by \mbodybackslash (above). | 8419 | % That gets used by \mbodybackslash (above). |
| 8386 | % | 8420 | % |
| 8387 | % If there are 10 or more arguments, a different technique is used: see | 8421 | % If there are 10 or more arguments, a different technique is used: see |
| 8388 | % \parsemmanyargdef. | 8422 | % \parsemmanyargdef@@. |
| 8389 | % | 8423 | % |
| 8390 | \def\parsemargdef#1;{% | 8424 | \def\parsemargdef#1;{% |
| 8391 | \paramno=0\def\paramlist{}% | 8425 | \paramno=0\def\paramlist{}% |
| 8392 | \let\hash\relax | 8426 | \let\hash\relax |
| 8393 | % \hash is redefined to `#' later to get it into definitions | 8427 | % \hash is redefined to `#' later to get it into definitions |
| 8394 | \let\xeatspaces\relax | 8428 | \let\xeatspaces\relax |
| 8395 | \let\xempty\relax | ||
| 8396 | \parsemargdefxxx#1,;,% | 8429 | \parsemargdefxxx#1,;,% |
| 8397 | \ifnum\paramno<10\relax\else | 8430 | \ifnum\paramno<10\relax\else |
| 8398 | \paramno0\relax | 8431 | \paramno0\relax |
| @@ -8404,11 +8437,9 @@ might help (with 'rm \jobname.?? \jobname.??s')% | |||
| 8404 | \else \let\next=\parsemargdefxxx | 8437 | \else \let\next=\parsemargdefxxx |
| 8405 | \advance\paramno by 1 | 8438 | \advance\paramno by 1 |
| 8406 | \expandafter\edef\csname macarg.\eatspaces{#1}\endcsname | 8439 | \expandafter\edef\csname macarg.\eatspaces{#1}\endcsname |
| 8407 | {\xeatspaces{\hash\the\paramno\noexpand\xempty{}}}% | 8440 | {\xeatspaces{\hash\the\paramno}}% |
| 8408 | \edef\paramlist{\paramlist\hash\the\paramno,}% | 8441 | \edef\paramlist{\paramlist\hash\the\paramno,}% |
| 8409 | \fi\next} | 8442 | \fi\next} |
| 8410 | % the \xempty{} is to give \eatleadingcr an argument in the case of an | ||
| 8411 | % empty macro argument. | ||
| 8412 | 8443 | ||
| 8413 | % \parsemacbody, \parsermacbody | 8444 | % \parsemacbody, \parsermacbody |
| 8414 | % | 8445 | % |
| @@ -8419,14 +8450,12 @@ might help (with 'rm \jobname.?? \jobname.??s')% | |||
| 8419 | % body to be transformed. | 8450 | % body to be transformed. |
| 8420 | % Set \macrobody to the body of the macro, and call \macrodef. | 8451 | % Set \macrobody to the body of the macro, and call \macrodef. |
| 8421 | % | 8452 | % |
| 8453 | \catcode `\@\texiatcatcode | ||
| 8422 | {\catcode`\ =\other\long\gdef\parsemacbody#1@end macro{% | 8454 | {\catcode`\ =\other\long\gdef\parsemacbody#1@end macro{% |
| 8423 | \xdef\macrobody{\eatcr{#1}}\endgroup\macrodef}}% | 8455 | \xdef\macrobody{\eatcr{#1}}\endgroup\macrodef}}% |
| 8424 | {\catcode`\ =\other\long\gdef\parsermacbody#1@end rmacro{% | 8456 | {\catcode`\ =\other\long\gdef\parsermacbody#1@end rmacro{% |
| 8425 | \xdef\macrobody{\eatcr{#1}}\endgroup\macrodef}}% | 8457 | \xdef\macrobody{\eatcr{#1}}\endgroup\macrodef}}% |
| 8426 | 8458 | \catcode `\@=11\relax | |
| 8427 | % Make @ a letter, so that we can make private-to-Texinfo macro names. | ||
| 8428 | \edef\texiatcatcode{\the\catcode`\@} | ||
| 8429 | \catcode `@=11\relax | ||
| 8430 | 8459 | ||
| 8431 | %%%%%%%%%%%%%% Code for > 10 arguments only %%%%%%%%%%%%%%%%%% | 8460 | %%%%%%%%%%%%%% Code for > 10 arguments only %%%%%%%%%%%%%%%%%% |
| 8432 | 8461 | ||
| @@ -8687,15 +8716,13 @@ might help (with 'rm \jobname.?? \jobname.??s')% | |||
| 8687 | \noexpand\expandafter | 8716 | \noexpand\expandafter |
| 8688 | \expandafter\noexpand\csname\the\macname @@\endcsname}% | 8717 | \expandafter\noexpand\csname\the\macname @@\endcsname}% |
| 8689 | \expandafter\xdef\csname\the\macname @@\endcsname##1{% | 8718 | \expandafter\xdef\csname\the\macname @@\endcsname##1{% |
| 8690 | \noexpand\passargtomacro | 8719 | \noexpand\passargtomacro |
| 8691 | \expandafter\noexpand\csname\the\macname @@@\endcsname{##1,}}% | 8720 | \expandafter\noexpand\csname\the\macname @@@\endcsname{##1,}}% |
| 8692 | \expandafter\xdef\csname\the\macname @@@\endcsname##1{% | 8721 | \expandafter\xdef\csname\the\macname @@@\endcsname##1{% |
| 8693 | \expandafter\noexpand\csname\the\macname @@@@\endcsname ##1}% | 8722 | \expandafter\noexpand\csname\the\macname @@@@\endcsname ##1}% |
| 8694 | \expandafter\expandafter | 8723 | \expandaftergroup{\expandafter\xdef\csname\the\macname @@@@\endcsname}% |
| 8695 | \expandafter\xdef | 8724 | \paramlist{% |
| 8696 | \expandafter\expandafter | 8725 | \endgroup\noexpand\scanmacro{\macrobody}}% |
| 8697 | \csname\the\macname @@@@\endcsname\paramlist{% | ||
| 8698 | \endgroup\noexpand\scanmacro{\macrobody}}% | ||
| 8699 | \else % 10 or more: | 8726 | \else % 10 or more: |
| 8700 | \expandafter\xdef\csname\the\macname\endcsname{% | 8727 | \expandafter\xdef\csname\the\macname\endcsname{% |
| 8701 | \noexpand\getargvals@{\the\macname}{\argl}% | 8728 | \noexpand\getargvals@{\the\macname}{\argl}% |
| @@ -8707,6 +8734,16 @@ might help (with 'rm \jobname.?? \jobname.??s')% | |||
| 8707 | 8734 | ||
| 8708 | \catcode `\@\texiatcatcode\relax % end private-to-Texinfo catcodes | 8735 | \catcode `\@\texiatcatcode\relax % end private-to-Texinfo catcodes |
| 8709 | 8736 | ||
| 8737 | % utility definition to avoid excessive use of \expandafter. call | ||
| 8738 | % as \expandaftergroup{CONTENT}\WORD to expand \WORD exactly once and remove | ||
| 8739 | % braces around CONTENT. | ||
| 8740 | \def\expandaftergroup#1#2{% | ||
| 8741 | \expandafter\expandaftergroupx\expandafter{#2}{#1}% | ||
| 8742 | } | ||
| 8743 | \def\expandaftergroupx#1#2{% | ||
| 8744 | #2#1% | ||
| 8745 | } | ||
| 8746 | |||
| 8710 | \def\norecurse#1{\bgroup\cslet{#1}{macsave.#1}} | 8747 | \def\norecurse#1{\bgroup\cslet{#1}{macsave.#1}} |
| 8711 | 8748 | ||
| 8712 | 8749 | ||
| @@ -8876,9 +8913,8 @@ might help (with 'rm \jobname.?? \jobname.??s')% | |||
| 8876 | \expandafter\noexpand | 8913 | \expandafter\noexpand |
| 8877 | \csname\the\macname @@@\endcsname##1\noexpand\endlinemacro | 8914 | \csname\the\macname @@@\endcsname##1\noexpand\endlinemacro |
| 8878 | } | 8915 | } |
| 8879 | \expandafter\expandafter | 8916 | \expandaftergroup{\expandafter\xdef\csname\the\macname @@@\endcsname}% |
| 8880 | \expandafter\xdef | 8917 | \paramlist{% |
| 8881 | \expandafter\expandafter\csname\the\macname @@@\endcsname\paramlist{% | ||
| 8882 | \newlinechar=13 % split \macrobody into lines | 8918 | \newlinechar=13 % split \macrobody into lines |
| 8883 | \noexpand\scantokens{\macrobody}% | 8919 | \noexpand\scantokens{\macrobody}% |
| 8884 | } | 8920 | } |
| @@ -8953,11 +8989,11 @@ might help (with 'rm \jobname.?? \jobname.??s')% | |||
| 8953 | \let\lastnode=\empty | 8989 | \let\lastnode=\empty |
| 8954 | 8990 | ||
| 8955 | % Write a cross-reference definition for the current node. #1 is the | 8991 | % Write a cross-reference definition for the current node. #1 is the |
| 8956 | % type (Ynumbered, Yappendix, Ynothing). | 8992 | % type (Ynumbered, Yappendix, Ynothing). #2 is the section title. |
| 8957 | % | 8993 | % |
| 8958 | \def\donoderef#1{% | 8994 | \def\donoderef#1#2{% |
| 8959 | \ifx\lastnode\empty\else | 8995 | \ifx\lastnode\empty\else |
| 8960 | \setref{\lastnode}{#1}% | 8996 | \setref{\lastnode}{#1}{#2}% |
| 8961 | \global\let\lastnode=\empty | 8997 | \global\let\lastnode=\empty |
| 8962 | \setnodeseenonce | 8998 | \setnodeseenonce |
| 8963 | \fi | 8999 | \fi |
| @@ -8978,21 +9014,28 @@ might help (with 'rm \jobname.?? \jobname.??s')% | |||
| 8978 | % | 9014 | % |
| 8979 | \def\savesf{\relax \ifhmode \savesfregister=\spacefactor \fi} | 9015 | \def\savesf{\relax \ifhmode \savesfregister=\spacefactor \fi} |
| 8980 | \def\restoresf{\relax \ifhmode \spacefactor=\savesfregister \fi} | 9016 | \def\restoresf{\relax \ifhmode \spacefactor=\savesfregister \fi} |
| 8981 | \def\anchor#1{\savesf \setref{#1}{Ynothing}\restoresf \ignorespaces} | 9017 | \def\anchor#1{% |
| 8982 | 9018 | \savesf \setref{#1}{Yanchor}{#1}\restoresf \ignorespaces | |
| 8983 | % \setref{NAME}{SNT} defines a cross-reference point NAME (a node or an | 9019 | } |
| 8984 | % anchor), which consists of three parts: | 9020 | |
| 8985 | % 1) NAME-title - the current sectioning name taken from \currentsection, | 9021 | % @namedanchor{NAME, XREFNAME} -- define xref target at arbitrary point |
| 8986 | % or the anchor name. | 9022 | % with label text for cross-references to it. |
| 8987 | % 2) NAME-snt - section number and type, passed as the SNT arg, or | 9023 | \def\namedanchor#1{\donamedanchor#1\finish}% |
| 8988 | % empty for anchors. | 9024 | \def\donamedanchor#1,#2\finish{% |
| 9025 | \savesf \setref{#1}{Yanchor}{\ignorespaces #2\unskip}\restoresf \ignorespaces | ||
| 9026 | } | ||
| 9027 | |||
| 9028 | % \setref{NAME}{SNT}{TITLE} defines a cross-reference point NAME (a node | ||
| 9029 | % or an anchor), which consists of three parts: | ||
| 9030 | % 1) NAME-title - the current sectioning name | ||
| 9031 | % 2) NAME-snt - section number and type, passed as the SNT arg. | ||
| 8989 | % 3) NAME-pg - the page number. | 9032 | % 3) NAME-pg - the page number. |
| 8990 | % | 9033 | % |
| 8991 | % This is called from \donoderef, \anchor, and \dofloat. In the case of | 9034 | % This is called from \donoderef, \anchor, and \dofloat. In the case of |
| 8992 | % floats, there is an additional part, which is not written here: | 9035 | % floats, there is an additional part, which is not written here: |
| 8993 | % 4) NAME-lof - the text as it should appear in a @listoffloats. | 9036 | % 4) NAME-lof - the text as it should appear in a @listoffloats. |
| 8994 | % | 9037 | % |
| 8995 | \def\setref#1#2{% | 9038 | \def\setref#1#2#3{% |
| 8996 | \pdfmkdest{#1}% | 9039 | \pdfmkdest{#1}% |
| 8997 | \iflinks | 9040 | \iflinks |
| 8998 | {% | 9041 | {% |
| @@ -9004,7 +9047,7 @@ might help (with 'rm \jobname.?? \jobname.??s')% | |||
| 9004 | \write\auxfile{@xrdef{#1-% #1 of \setref, expanded by the \edef | 9047 | \write\auxfile{@xrdef{#1-% #1 of \setref, expanded by the \edef |
| 9005 | ##1}{##2}}% these are parameters of \writexrdef | 9048 | ##1}{##2}}% these are parameters of \writexrdef |
| 9006 | }% | 9049 | }% |
| 9007 | \toks0 = \expandafter{\currentsection}% | 9050 | \toks0 = {#3}% |
| 9008 | \immediate \writexrdef{title}{\the\toks0 }% | 9051 | \immediate \writexrdef{title}{\the\toks0 }% |
| 9009 | \immediate \writexrdef{snt}{\csname #2\endcsname}% \Ynumbered etc. | 9052 | \immediate \writexrdef{snt}{\csname #2\endcsname}% \Ynumbered etc. |
| 9010 | \safewhatsit{\writexrdef{pg}{\folio}}% will be written later, at \shipout | 9053 | \safewhatsit{\writexrdef{pg}{\folio}}% will be written later, at \shipout |
| @@ -9058,15 +9101,7 @@ might help (with 'rm \jobname.?? \jobname.??s')% | |||
| 9058 | \setbox\infofilenamebox = \hbox{\infofilename\unskip}% | 9101 | \setbox\infofilenamebox = \hbox{\infofilename\unskip}% |
| 9059 | % | 9102 | % |
| 9060 | \startxreflink{#1}{#4}% | 9103 | \startxreflink{#1}{#4}% |
| 9061 | {% | 9104 | \getrefx{#1-title}\Xthisreftitle |
| 9062 | % Have to otherify everything special to allow the \csname to | ||
| 9063 | % include an _ in the xref name, etc. | ||
| 9064 | \indexnofonts | ||
| 9065 | \turnoffactive | ||
| 9066 | \def\value##1{##1}% | ||
| 9067 | \expandafter\global\expandafter\let\expandafter\Xthisreftitle | ||
| 9068 | \csname XR#1-title\endcsname | ||
| 9069 | }% | ||
| 9070 | % | 9105 | % |
| 9071 | % Float references are printed completely differently: "Figure 1.2" | 9106 | % Float references are printed completely differently: "Figure 1.2" |
| 9072 | % instead of "[somenode], p.3". \iffloat distinguishes them by | 9107 | % instead of "[somenode], p.3". \iffloat distinguishes them by |
| @@ -9099,21 +9134,23 @@ might help (with 'rm \jobname.?? \jobname.??s')% | |||
| 9099 | % Cross-manual reference with a printed manual name. | 9134 | % Cross-manual reference with a printed manual name. |
| 9100 | % | 9135 | % |
| 9101 | \crossmanualxref{\cite{\printedmanual\unskip}}% | 9136 | \crossmanualxref{\cite{\printedmanual\unskip}}% |
| 9102 | % | ||
| 9103 | \else\ifdim \wd\infofilenamebox > 0pt | 9137 | \else\ifdim \wd\infofilenamebox > 0pt |
| 9104 | % Cross-manual reference with only an info filename (arg 4), no | 9138 | % Cross-manual reference with only an info filename (arg 4), no |
| 9105 | % printed manual name (arg 5). This is essentially the same as | 9139 | % printed manual name (arg 5). This is essentially the same as |
| 9106 | % the case above; we output the filename, since we have nothing else. | 9140 | % the case above; we output the filename, since we have nothing else. |
| 9107 | % | 9141 | % |
| 9108 | \crossmanualxref{\code{\infofilename\unskip}}% | 9142 | \crossmanualxref{\code{\infofilename\unskip}}% |
| 9109 | % | ||
| 9110 | \else | 9143 | \else |
| 9111 | % Reference within this manual. | 9144 | % Reference within this manual. |
| 9112 | % | 9145 | % |
| 9113 | % Only output a following space if the -snt ref is nonempty, as the ref | 9146 | % Only output a following space if the -snt ref is nonempty, as is |
| 9114 | % will be empty for @unnumbered and @anchor. | 9147 | % the case for @unnumbered and @anchor. |
| 9115 | \setbox2 = \hbox{\ignorespaces \refx{#1-snt}}% | 9148 | \getrefx{#1-snt}\tmp |
| 9116 | \ifdim \wd2 > 0pt \refx{#1-snt}\space\fi | 9149 | \ifx\tmp\empty\else |
| 9150 | \ifx\tmp\Yanchor\else | ||
| 9151 | \tmp\space | ||
| 9152 | \fi | ||
| 9153 | \fi | ||
| 9117 | % | 9154 | % |
| 9118 | % output the `[mynode]' via the macro below so it can be overridden. | 9155 | % output the `[mynode]' via the macro below so it can be overridden. |
| 9119 | \xrefprintnodename\printedrefname | 9156 | \xrefprintnodename\printedrefname |
| @@ -9169,7 +9206,7 @@ might help (with 'rm \jobname.?? \jobname.??s')% | |||
| 9169 | \else | 9206 | \else |
| 9170 | % Otherwise just copy the Info node name. | 9207 | % Otherwise just copy the Info node name. |
| 9171 | \def\printedrefname{\ignorespaces #1}% | 9208 | \def\printedrefname{\ignorespaces #1}% |
| 9172 | \fi% | 9209 | \fi |
| 9173 | \fi | 9210 | \fi |
| 9174 | \fi | 9211 | \fi |
| 9175 | \fi | 9212 | \fi |
| @@ -9201,7 +9238,7 @@ might help (with 'rm \jobname.?? \jobname.??s')% | |||
| 9201 | \ifnum\filenamelength>0 | 9238 | \ifnum\filenamelength>0 |
| 9202 | goto file{\the\filename.pdf} name{\pdfdestname}% | 9239 | goto file{\the\filename.pdf} name{\pdfdestname}% |
| 9203 | \else | 9240 | \else |
| 9204 | goto name{\pdfmkpgn{\pdfdestname}}% | 9241 | goto name{\pdfdestname}% |
| 9205 | \fi | 9242 | \fi |
| 9206 | \else % XeTeX | 9243 | \else % XeTeX |
| 9207 | \ifnum\filenamelength>0 | 9244 | \ifnum\filenamelength>0 |
| @@ -9281,6 +9318,7 @@ might help (with 'rm \jobname.?? \jobname.??s')% | |||
| 9281 | % | 9318 | % |
| 9282 | \def\Ynothing{} | 9319 | \def\Ynothing{} |
| 9283 | \def\Yomitfromtoc{} | 9320 | \def\Yomitfromtoc{} |
| 9321 | \def\Yanchor{\isanchor} \let\isanchor\relax | ||
| 9284 | \def\Ynumbered{% | 9322 | \def\Ynumbered{% |
| 9285 | \ifnum\secno=0 | 9323 | \ifnum\secno=0 |
| 9286 | \putwordChapter@tie \the\chapno | 9324 | \putwordChapter@tie \the\chapno |
| @@ -9307,14 +9345,7 @@ might help (with 'rm \jobname.?? \jobname.??s')% | |||
| 9307 | 9345 | ||
| 9308 | % \refx{NAME} - reference a cross-reference string named NAME. | 9346 | % \refx{NAME} - reference a cross-reference string named NAME. |
| 9309 | \def\refx#1{% | 9347 | \def\refx#1{% |
| 9310 | \requireauxfile | 9348 | \getrefx{#1}\thisrefX |
| 9311 | {% | ||
| 9312 | \indexnofonts | ||
| 9313 | \turnoffactive | ||
| 9314 | \def\value##1{##1}% | ||
| 9315 | \expandafter\global\expandafter\let\expandafter\thisrefX | ||
| 9316 | \csname XR#1\endcsname | ||
| 9317 | }% | ||
| 9318 | \ifx\thisrefX\relax | 9349 | \ifx\thisrefX\relax |
| 9319 | % If not defined, say something at least. | 9350 | % If not defined, say something at least. |
| 9320 | \angleleft un\-de\-fined\angleright | 9351 | \angleleft un\-de\-fined\angleright |
| @@ -9335,6 +9366,17 @@ might help (with 'rm \jobname.?? \jobname.??s')% | |||
| 9335 | \fi | 9366 | \fi |
| 9336 | } | 9367 | } |
| 9337 | 9368 | ||
| 9369 | % Set #2 to xref string #1 | ||
| 9370 | \def\getrefx#1#2{% | ||
| 9371 | \requireauxfile | ||
| 9372 | {% | ||
| 9373 | \indexnofonts | ||
| 9374 | \turnoffactive | ||
| 9375 | \def\value##1{##1}% | ||
| 9376 | \expandafter\global\expandafter\let\expandafter#2\csname XR#1\endcsname | ||
| 9377 | }% | ||
| 9378 | } | ||
| 9379 | |||
| 9338 | % This is the macro invoked by entries in the aux file. Define a control | 9380 | % This is the macro invoked by entries in the aux file. Define a control |
| 9339 | % sequence for a cross-reference target (we prepend XR to the control sequence | 9381 | % sequence for a cross-reference target (we prepend XR to the control sequence |
| 9340 | % name to avoid collisions). The value is the page number. If this is a float | 9382 | % name to avoid collisions). The value is the page number. If this is a float |
| @@ -9399,12 +9441,14 @@ might help (with 'rm \jobname.?? \jobname.??s')% | |||
| 9399 | % Read the last existing aux file, if any. No error if none exists. | 9441 | % Read the last existing aux file, if any. No error if none exists. |
| 9400 | % | 9442 | % |
| 9401 | \def\tryauxfile{% | 9443 | \def\tryauxfile{% |
| 9444 | \ifxetex\xetexpreauxfile\fi | ||
| 9402 | \openin 1 \jobname.aux | 9445 | \openin 1 \jobname.aux |
| 9403 | \ifeof 1 \else | 9446 | \ifeof 1 \else |
| 9404 | \readdatafile{aux}% | 9447 | \readdatafile{aux}% |
| 9405 | \global\havexrefstrue | 9448 | \global\havexrefstrue |
| 9406 | \fi | 9449 | \fi |
| 9407 | \closein 1 | 9450 | \closein 1 |
| 9451 | \ifxetex\xetexpostauxfile\fi | ||
| 9408 | } | 9452 | } |
| 9409 | 9453 | ||
| 9410 | \def\setupdatafile{% | 9454 | \def\setupdatafile{% |
| @@ -9790,14 +9834,15 @@ might help (with 'rm \jobname.?? \jobname.??s')% | |||
| 9790 | \global\advance\floatno by 1 | 9834 | \global\advance\floatno by 1 |
| 9791 | % | 9835 | % |
| 9792 | {% | 9836 | {% |
| 9793 | % This magic value for \currentsection is output by \setref as the | 9837 | % This magic value for the third argument of \setref is output as |
| 9794 | % XREFLABEL-title value. \xrefX uses it to distinguish float | 9838 | % the XREFLABEL-title value. \xrefX uses it to distinguish float |
| 9795 | % labels (which have a completely different output format) from | 9839 | % labels (which have a completely different output format) from |
| 9796 | % node and anchor labels. And \xrdef uses it to construct the | 9840 | % node and anchor labels. And \xrdef uses it to construct the |
| 9797 | % lists of floats. | 9841 | % lists of floats. |
| 9798 | % | 9842 | % |
| 9799 | \edef\currentsection{\floatmagic=\safefloattype}% | 9843 | \edef\tmp{\noexpand\setref{\floatlabel}{Yfloat}% |
| 9800 | \setref{\floatlabel}{Yfloat}% | 9844 | {\floatmagic=\safefloattype}}% |
| 9845 | \tmp | ||
| 9801 | }% | 9846 | }% |
| 9802 | \fi | 9847 | \fi |
| 9803 | % | 9848 | % |
| @@ -9919,7 +9964,7 @@ might help (with 'rm \jobname.?? \jobname.??s')% | |||
| 9919 | 9964 | ||
| 9920 | % #1 is the control sequence we are passed; we expand into a conditional | 9965 | % #1 is the control sequence we are passed; we expand into a conditional |
| 9921 | % which is true if #1 represents a float ref. That is, the magic | 9966 | % which is true if #1 represents a float ref. That is, the magic |
| 9922 | % \currentsection value which we \setref above. | 9967 | % value which we passed to \setref above. |
| 9923 | % | 9968 | % |
| 9924 | \def\iffloat#1{\expandafter\doiffloat#1==\finish} | 9969 | \def\iffloat#1{\expandafter\doiffloat#1==\finish} |
| 9925 | % | 9970 | % |
| @@ -9976,6 +10021,7 @@ might help (with 'rm \jobname.?? \jobname.??s')% | |||
| 9976 | \toksA = \expandafter{\csname XR#1-lof\endcsname}% | 10021 | \toksA = \expandafter{\csname XR#1-lof\endcsname}% |
| 9977 | % | 10022 | % |
| 9978 | % use the same \entry macro we use to generate the TOC and index. | 10023 | % use the same \entry macro we use to generate the TOC and index. |
| 10024 | \let\entry\entryinternal | ||
| 9979 | \edef\writeentry{\noexpand\entry{\the\toksA}{\csname XR#1-pg\endcsname}}% | 10025 | \edef\writeentry{\noexpand\entry{\the\toksA}{\csname XR#1-pg\endcsname}}% |
| 9980 | \writeentry | 10026 | \writeentry |
| 9981 | }} | 10027 | }} |
| @@ -10071,17 +10117,24 @@ directory should work if nowhere else does.} | |||
| 10071 | \fi | 10117 | \fi |
| 10072 | \fi | 10118 | \fi |
| 10073 | 10119 | ||
| 10120 | \let\xetexpreauxfile\relax | ||
| 10121 | \let\xetexpostauxfile\relax | ||
| 10122 | |||
| 10074 | % Set I/O by bytes instead of UTF-8 sequence for XeTeX and LuaTex | 10123 | % Set I/O by bytes instead of UTF-8 sequence for XeTeX and LuaTex |
| 10075 | % for non-UTF-8 (byte-wise) encodings. | 10124 | % for non-UTF-8 (byte-wise) encodings. |
| 10076 | % | 10125 | % |
| 10077 | \def\setbytewiseio{% | 10126 | \def\setbytewiseio{% |
| 10078 | \ifxetex | 10127 | \ifxetex |
| 10079 | \XeTeXdefaultencoding "bytes" % For subsequent files to be read | 10128 | % For document root file |
| 10080 | \XeTeXinputencoding "bytes" % For document root file | 10129 | \XeTeXinputencoding "bytes" |
| 10081 | % Unfortunately, there seems to be no corresponding XeTeX command for | 10130 | % |
| 10082 | % output encoding. This is a problem for auxiliary index and TOC files. | 10131 | % Setting for subsequent files to be read with @include. |
| 10083 | % The only solution would be perhaps to write out @U{...} sequences in | 10132 | \XeTeXdefaultencoding "bytes" |
| 10084 | % place of non-ASCII characters. | 10133 | % |
| 10134 | % Use UTF-8 for reading auxiliary index and TOC files, which are | ||
| 10135 | % always output in UTF-8 with XeTeX. | ||
| 10136 | \def\xetexpreauxfile{\XeTeXdefaultencoding "UTF-8"}% | ||
| 10137 | \def\xetexpostauxfile{\XeTeXdefaultencoding "bytes"}% | ||
| 10085 | \fi | 10138 | \fi |
| 10086 | 10139 | ||
| 10087 | \ifluatex | 10140 | \ifluatex |
| @@ -10713,12 +10766,12 @@ directory should work if nowhere else does.} | |||
| 10713 | 10766 | ||
| 10714 | % Suppress ligature creation from adjacent characters. | 10767 | % Suppress ligature creation from adjacent characters. |
| 10715 | \ifluatex | 10768 | \ifluatex |
| 10716 | \def\nolig{{}} | ||
| 10717 | \else | ||
| 10718 | % Braces do not suppress ligature creation in LuaTeX, e.g. in of{}fice | 10769 | % Braces do not suppress ligature creation in LuaTeX, e.g. in of{}fice |
| 10719 | % to suppress the "ff" ligature. Using a kern appears to be the only | 10770 | % to suppress the "ff" ligature. Using a kern appears to be the only |
| 10720 | % workaround. | 10771 | % workaround. |
| 10721 | \def\nolig{\kern0pt{}} | 10772 | \def\nolig{\kern0pt{}} |
| 10773 | \else | ||
| 10774 | \def\nolig{{}} | ||
| 10722 | \fi | 10775 | \fi |
| 10723 | 10776 | ||
| 10724 | % https://en.wikipedia.org/wiki/Plane_(Unicode)#Basic_M | 10777 | % https://en.wikipedia.org/wiki/Plane_(Unicode)#Basic_M |