aboutsummaryrefslogtreecommitdiffstats
path: root/doc
diff options
context:
space:
mode:
authorPaul Eggert2025-04-19 12:18:28 -0700
committerPaul Eggert2025-04-19 19:31:25 -0700
commit71ee484cac3e0e5b68f006b4cca81c13ca6ce11e (patch)
tree21476621d11357283ad30c8b2bcec2871e604ba1 /doc
parent30335bb73483fce9d4204f1e18618fe777d0f45e (diff)
downloademacs-71ee484cac3e0e5b68f006b4cca81c13ca6ce11e.tar.gz
emacs-71ee484cac3e0e5b68f006b4cca81c13ca6ce11e.zip
Update from Gnulib by running admin/merge-gnulib
Diffstat (limited to 'doc')
-rw-r--r--doc/misc/texinfo.tex409
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