diff options
| author | Paul Eggert | 2012-05-26 16:14:36 -0700 |
|---|---|---|
| committer | Paul Eggert | 2012-05-26 16:14:36 -0700 |
| commit | caf8a9b2b301aba06735d403317b75b41df59bfe (patch) | |
| tree | bfafb3cc0cf8a2f2394b4ed721e7c3d4891b78ab /doc/misc | |
| parent | fe453991eafc32a890297a2003ac532b9f579f92 (diff) | |
| download | emacs-caf8a9b2b301aba06735d403317b75b41df59bfe.tar.gz emacs-caf8a9b2b301aba06735d403317b75b41df59bfe.zip | |
Merge from gnulib.
Fixes: debbugs:11527
Diffstat (limited to 'doc/misc')
| -rw-r--r-- | doc/misc/texinfo.tex | 495 |
1 files changed, 318 insertions, 177 deletions
diff --git a/doc/misc/texinfo.tex b/doc/misc/texinfo.tex index 3298298bb9d..0f3a0960c03 100644 --- a/doc/misc/texinfo.tex +++ b/doc/misc/texinfo.tex | |||
| @@ -3,11 +3,11 @@ | |||
| 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{2011-09-23.09} | 6 | \def\texinfoversion{2012-05-16.16} |
| 7 | % | 7 | % |
| 8 | % Copyright 1985, 1986, 1988, 1990, 1991, 1992, 1993, 1994, 1995, | 8 | % Copyright 1985, 1986, 1988, 1990, 1991, 1992, 1993, 1994, 1995, |
| 9 | % 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, | 9 | % 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, |
| 10 | % 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc. | 10 | % 2007, 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc. |
| 11 | % | 11 | % |
| 12 | % This texinfo.tex file is free software: you can redistribute it and/or | 12 | % This texinfo.tex file is free software: you can redistribute it and/or |
| 13 | % modify it under the terms of the GNU General Public License as | 13 | % modify it under the terms of the GNU General Public License as |
| @@ -28,9 +28,9 @@ | |||
| 28 | % | 28 | % |
| 29 | % Please try the latest version of texinfo.tex before submitting bug | 29 | % Please try the latest version of texinfo.tex before submitting bug |
| 30 | % reports; you can get the latest version from: | 30 | % reports; you can get the latest version from: |
| 31 | % http://www.gnu.org/software/texinfo/ (the Texinfo home page), or | 31 | % http://ftp.gnu.org/gnu/texinfo/ (the Texinfo release area), or |
| 32 | % ftp://tug.org/tex/texinfo.tex | 32 | % http://ftpmirror.gnu.org/texinfo/ (same, via a mirror), or |
| 33 | % (and all CTAN mirrors, see http://www.ctan.org). | 33 | % http://www.gnu.org/software/texinfo/ (the Texinfo home page) |
| 34 | % The texinfo.tex in any given distribution could well be out | 34 | % The texinfo.tex in any given distribution could well be out |
| 35 | % of date, so if that's what you're using, please check. | 35 | % of date, so if that's what you're using, please check. |
| 36 | % | 36 | % |
| @@ -116,6 +116,7 @@ | |||
| 116 | % Set up fixed words for English if not already set. | 116 | % Set up fixed words for English if not already set. |
| 117 | \ifx\putwordAppendix\undefined \gdef\putwordAppendix{Appendix}\fi | 117 | \ifx\putwordAppendix\undefined \gdef\putwordAppendix{Appendix}\fi |
| 118 | \ifx\putwordChapter\undefined \gdef\putwordChapter{Chapter}\fi | 118 | \ifx\putwordChapter\undefined \gdef\putwordChapter{Chapter}\fi |
| 119 | \ifx\putworderror\undefined \gdef\putworderror{error}\fi | ||
| 119 | \ifx\putwordfile\undefined \gdef\putwordfile{file}\fi | 120 | \ifx\putwordfile\undefined \gdef\putwordfile{file}\fi |
| 120 | \ifx\putwordin\undefined \gdef\putwordin{in}\fi | 121 | \ifx\putwordin\undefined \gdef\putwordin{in}\fi |
| 121 | \ifx\putwordIndexIsEmpty\undefined \gdef\putwordIndexIsEmpty{(Index is empty)}\fi | 122 | \ifx\putwordIndexIsEmpty\undefined \gdef\putwordIndexIsEmpty{(Index is empty)}\fi |
| @@ -229,6 +230,13 @@ | |||
| 229 | \errorcontextlines16 | 230 | \errorcontextlines16 |
| 230 | }% | 231 | }% |
| 231 | 232 | ||
| 233 | % @errormsg{MSG}. Do the index-like expansions on MSG, but if things | ||
| 234 | % aren't perfect, it's not the end of the world, being an error message, | ||
| 235 | % after all. | ||
| 236 | % | ||
| 237 | \def\errormsg{\begingroup \indexnofonts \doerrormsg} | ||
| 238 | \def\doerrormsg#1{\errmessage{#1}} | ||
| 239 | |||
| 232 | % add check for \lastpenalty to plain's definitions. If the last thing | 240 | % add check for \lastpenalty to plain's definitions. If the last thing |
| 233 | % we did was a \nobreak, we don't want to insert more space. | 241 | % we did was a \nobreak, we don't want to insert more space. |
| 234 | % | 242 | % |
| @@ -879,7 +887,7 @@ where each line of input produces a line of output.} | |||
| 879 | \def\popthisfilestack{\errthisfilestackempty} | 887 | \def\popthisfilestack{\errthisfilestackempty} |
| 880 | \def\errthisfilestackempty{\errmessage{Internal error: | 888 | \def\errthisfilestackempty{\errmessage{Internal error: |
| 881 | the stack of filenames is empty.}} | 889 | the stack of filenames is empty.}} |
| 882 | 890 | % | |
| 883 | \def\thisfile{} | 891 | \def\thisfile{} |
| 884 | 892 | ||
| 885 | % @center line | 893 | % @center line |
| @@ -887,36 +895,46 @@ where each line of input produces a line of output.} | |||
| 887 | % | 895 | % |
| 888 | \parseargdef\center{% | 896 | \parseargdef\center{% |
| 889 | \ifhmode | 897 | \ifhmode |
| 890 | \let\next\centerH | 898 | \let\centersub\centerH |
| 891 | \else | 899 | \else |
| 892 | \let\next\centerV | 900 | \let\centersub\centerV |
| 893 | \fi | 901 | \fi |
| 894 | \next{\hfil \ignorespaces#1\unskip \hfil}% | 902 | \centersub{\hfil \ignorespaces#1\unskip \hfil}% |
| 903 | \let\centersub\relax % don't let the definition persist, just in case | ||
| 895 | } | 904 | } |
| 896 | \def\centerH#1{% | 905 | \def\centerH#1{{% |
| 897 | {% | 906 | \hfil\break |
| 898 | \hfil\break | 907 | \advance\hsize by -\leftskip |
| 899 | \advance\hsize by -\leftskip | 908 | \advance\hsize by -\rightskip |
| 900 | \advance\hsize by -\rightskip | 909 | \line{#1}% |
| 901 | \line{#1}% | 910 | \break |
| 902 | \break | 911 | }} |
| 903 | }% | 912 | % |
| 913 | \newcount\centerpenalty | ||
| 914 | \def\centerV#1{% | ||
| 915 | % The idea here is the same as in \startdefun, \cartouche, etc.: if | ||
| 916 | % @center is the first thing after a section heading, we need to wipe | ||
| 917 | % out the negative parskip inserted by \sectionheading, but still | ||
| 918 | % prevent a page break here. | ||
| 919 | \centerpenalty = \lastpenalty | ||
| 920 | \ifnum\centerpenalty>10000 \vskip\parskip \fi | ||
| 921 | \ifnum\centerpenalty>9999 \penalty\centerpenalty \fi | ||
| 922 | \line{\kern\leftskip #1\kern\rightskip}% | ||
| 904 | } | 923 | } |
| 905 | \def\centerV#1{\line{\kern\leftskip #1\kern\rightskip}} | ||
| 906 | 924 | ||
| 907 | % @sp n outputs n lines of vertical space | 925 | % @sp n outputs n lines of vertical space |
| 908 | 926 | % | |
| 909 | \parseargdef\sp{\vskip #1\baselineskip} | 927 | \parseargdef\sp{\vskip #1\baselineskip} |
| 910 | 928 | ||
| 911 | % @comment ...line which is ignored... | 929 | % @comment ...line which is ignored... |
| 912 | % @c is the same as @comment | 930 | % @c is the same as @comment |
| 913 | % @ignore ... @end ignore is another way to write a comment | 931 | % @ignore ... @end ignore is another way to write a comment |
| 914 | 932 | % | |
| 915 | \def\comment{\begingroup \catcode`\^^M=\other% | 933 | \def\comment{\begingroup \catcode`\^^M=\other% |
| 916 | \catcode`\@=\other \catcode`\{=\other \catcode`\}=\other% | 934 | \catcode`\@=\other \catcode`\{=\other \catcode`\}=\other% |
| 917 | \commentxxx} | 935 | \commentxxx} |
| 918 | {\catcode`\^^M=\other \gdef\commentxxx#1^^M{\endgroup}} | 936 | {\catcode`\^^M=\other \gdef\commentxxx#1^^M{\endgroup}} |
| 919 | 937 | % | |
| 920 | \let\c=\comment | 938 | \let\c=\comment |
| 921 | 939 | ||
| 922 | % @paragraphindent NCHARS | 940 | % @paragraphindent NCHARS |
| @@ -1089,50 +1107,24 @@ where each line of input produces a line of output.} | |||
| 1089 | % for display in the outlines, and in other places. Thus, we have to | 1107 | % for display in the outlines, and in other places. Thus, we have to |
| 1090 | % double any backslashes. Otherwise, a name like "\node" will be | 1108 | % double any backslashes. Otherwise, a name like "\node" will be |
| 1091 | % interpreted as a newline (\n), followed by o, d, e. Not good. | 1109 | % interpreted as a newline (\n), followed by o, d, e. Not good. |
| 1092 | % http://www.ntg.nl/pipermail/ntg-pdftex/2004-July/000654.html | 1110 | % |
| 1093 | % (and related messages, the final outcome is that it is up to the TeX | 1111 | % See http://www.ntg.nl/pipermail/ntg-pdftex/2004-July/000654.html and |
| 1094 | % user to double the backslashes and otherwise make the string valid, so | 1112 | % related messages. The final outcome is that it is up to the TeX user |
| 1095 | % that's what we do). | 1113 | % to double the backslashes and otherwise make the string valid, so |
| 1096 | 1114 | % that's what we do. pdftex 1.30.0 (ca.2005) introduced a primitive to | |
| 1097 | % double active backslashes. | 1115 | % do this reliably, so we use it. |
| 1098 | % | 1116 | |
| 1099 | {\catcode`\@=0 \catcode`\\=\active | 1117 | % #1 is a control sequence in which to do the replacements, |
| 1100 | @gdef@activebackslashdouble{% | 1118 | % which we \xdef. |
| 1101 | @catcode`@\=@active | 1119 | \def\txiescapepdf#1{% |
| 1102 | @let\=@doublebackslash} | 1120 | \ifx\pdfescapestring\relax |
| 1103 | } | 1121 | % No primitive available; should we give a warning or log? |
| 1104 | 1122 | % Many times it won't matter. | |
| 1105 | % To handle parens, we must adopt a different approach, since parens are | 1123 | \else |
| 1106 | % not active characters. hyperref.dtx (which has the same problem as | 1124 | % The expandable \pdfescapestring primitive escapes parentheses, |
| 1107 | % us) handles it with this amazing macro to replace tokens, with minor | 1125 | % backslashes, and other special chars. |
| 1108 | % changes for Texinfo. It is included here under the GPL by permission | 1126 | \xdef#1{\pdfescapestring{#1}}% |
| 1109 | % from the author, Heiko Oberdiek. | 1127 | \fi |
| 1110 | % | ||
| 1111 | % #1 is the tokens to replace. | ||
| 1112 | % #2 is the replacement. | ||
| 1113 | % #3 is the control sequence with the string. | ||
| 1114 | % | ||
| 1115 | \def\HyPsdSubst#1#2#3{% | ||
| 1116 | \def\HyPsdReplace##1#1##2\END{% | ||
| 1117 | ##1% | ||
| 1118 | \ifx\\##2\\% | ||
| 1119 | \else | ||
| 1120 | #2% | ||
| 1121 | \HyReturnAfterFi{% | ||
| 1122 | \HyPsdReplace##2\END | ||
| 1123 | }% | ||
| 1124 | \fi | ||
| 1125 | }% | ||
| 1126 | \xdef#3{\expandafter\HyPsdReplace#3#1\END}% | ||
| 1127 | } | ||
| 1128 | \long\def\HyReturnAfterFi#1\fi{\fi#1} | ||
| 1129 | |||
| 1130 | % #1 is a control sequence in which to do the replacements. | ||
| 1131 | \def\backslashparens#1{% | ||
| 1132 | \xdef#1{#1}% redefine it as its expansion; the definition is simply | ||
| 1133 | % \lastnode when called from \setref -> \pdfmkdest. | ||
| 1134 | \HyPsdSubst{(}{\realbackslash(}{#1}% | ||
| 1135 | \HyPsdSubst{)}{\realbackslash)}{#1}% | ||
| 1136 | } | 1128 | } |
| 1137 | 1129 | ||
| 1138 | \newhelp\nopdfimagehelp{Texinfo supports .png, .jpg, .jpeg, and .pdf images | 1130 | \newhelp\nopdfimagehelp{Texinfo supports .png, .jpg, .jpeg, and .pdf images |
| @@ -1191,32 +1183,34 @@ output) for that.)} | |||
| 1191 | % | 1183 | % |
| 1192 | % #1 is image name, #2 width (might be empty/whitespace), #3 height (ditto). | 1184 | % #1 is image name, #2 width (might be empty/whitespace), #3 height (ditto). |
| 1193 | \def\dopdfimage#1#2#3{% | 1185 | \def\dopdfimage#1#2#3{% |
| 1194 | \def\imagewidth{#2}\setbox0 = \hbox{\ignorespaces #2}% | 1186 | \def\pdfimagewidth{#2}\setbox0 = \hbox{\ignorespaces #2}% |
| 1195 | \def\imageheight{#3}\setbox2 = \hbox{\ignorespaces #3}% | 1187 | \def\pdfimageheight{#3}\setbox2 = \hbox{\ignorespaces #3}% |
| 1196 | % | 1188 | % |
| 1197 | % pdftex (and the PDF format) support .png, .jpg, .pdf (among | 1189 | % pdftex (and the PDF format) support .pdf, .png, .jpg (among |
| 1198 | % others). Let's try in that order. | 1190 | % others). Let's try in that order, PDF first since if |
| 1191 | % someone has a scalable image, presumably better to use that than a | ||
| 1192 | % bitmap. | ||
| 1199 | \let\pdfimgext=\empty | 1193 | \let\pdfimgext=\empty |
| 1200 | \begingroup | 1194 | \begingroup |
| 1201 | \openin 1 #1.png \ifeof 1 | 1195 | \openin 1 #1.pdf \ifeof 1 |
| 1202 | \openin 1 #1.jpg \ifeof 1 | 1196 | \openin 1 #1.PDF \ifeof 1 |
| 1203 | \openin 1 #1.jpeg \ifeof 1 | 1197 | \openin 1 #1.png \ifeof 1 |
| 1204 | \openin 1 #1.JPG \ifeof 1 | 1198 | \openin 1 #1.jpg \ifeof 1 |
| 1205 | \openin 1 #1.pdf \ifeof 1 | 1199 | \openin 1 #1.jpeg \ifeof 1 |
| 1206 | \openin 1 #1.PDF \ifeof 1 | 1200 | \openin 1 #1.JPG \ifeof 1 |
| 1207 | \errhelp = \nopdfimagehelp | 1201 | \errhelp = \nopdfimagehelp |
| 1208 | \errmessage{Could not find image file #1 for pdf}% | 1202 | \errmessage{Could not find image file #1 for pdf}% |
| 1209 | \else \gdef\pdfimgext{PDF}% | 1203 | \else \gdef\pdfimgext{JPG}% |
| 1210 | \fi | 1204 | \fi |
| 1211 | \else \gdef\pdfimgext{pdf}% | 1205 | \else \gdef\pdfimgext{jpeg}% |
| 1212 | \fi | 1206 | \fi |
| 1213 | \else \gdef\pdfimgext{JPG}% | 1207 | \else \gdef\pdfimgext{jpg}% |
| 1214 | \fi | 1208 | \fi |
| 1215 | \else \gdef\pdfimgext{jpeg}% | 1209 | \else \gdef\pdfimgext{png}% |
| 1216 | \fi | 1210 | \fi |
| 1217 | \else \gdef\pdfimgext{jpg}% | 1211 | \else \gdef\pdfimgext{PDF}% |
| 1218 | \fi | 1212 | \fi |
| 1219 | \else \gdef\pdfimgext{png}% | 1213 | \else \gdef\pdfimgext{pdf}% |
| 1220 | \fi | 1214 | \fi |
| 1221 | \closein 1 | 1215 | \closein 1 |
| 1222 | \endgroup | 1216 | \endgroup |
| @@ -1228,8 +1222,8 @@ output) for that.)} | |||
| 1228 | \else | 1222 | \else |
| 1229 | \immediate\pdfximage | 1223 | \immediate\pdfximage |
| 1230 | \fi | 1224 | \fi |
| 1231 | \ifdim \wd0 >0pt width \imagewidth \fi | 1225 | \ifdim \wd0 >0pt width \pdfimagewidth \fi |
| 1232 | \ifdim \wd2 >0pt height \imageheight \fi | 1226 | \ifdim \wd2 >0pt height \pdfimageheight \fi |
| 1233 | \ifnum\pdftexversion<13 | 1227 | \ifnum\pdftexversion<13 |
| 1234 | #1.\pdfimgext | 1228 | #1.\pdfimgext |
| 1235 | \else | 1229 | \else |
| @@ -1244,10 +1238,9 @@ output) for that.)} | |||
| 1244 | % such as \, aren't expanded when present in a section title. | 1238 | % such as \, aren't expanded when present in a section title. |
| 1245 | \indexnofonts | 1239 | \indexnofonts |
| 1246 | \turnoffactive | 1240 | \turnoffactive |
| 1247 | \activebackslashdouble | ||
| 1248 | \makevalueexpandable | 1241 | \makevalueexpandable |
| 1249 | \def\pdfdestname{#1}% | 1242 | \def\pdfdestname{#1}% |
| 1250 | \backslashparens\pdfdestname | 1243 | \txiescapepdf\pdfdestname |
| 1251 | \safewhatsit{\pdfdest name{\pdfdestname} xyz}% | 1244 | \safewhatsit{\pdfdest name{\pdfdestname} xyz}% |
| 1252 | }} | 1245 | }} |
| 1253 | % | 1246 | % |
| @@ -1279,28 +1272,22 @@ output) for that.)} | |||
| 1279 | % page number. We could generate a destination for the section | 1272 | % page number. We could generate a destination for the section |
| 1280 | % text in the case where a section has no node, but it doesn't | 1273 | % text in the case where a section has no node, but it doesn't |
| 1281 | % seem worth the trouble, since most documents are normally structured. | 1274 | % seem worth the trouble, since most documents are normally structured. |
| 1282 | \def\pdfoutlinedest{#3}% | 1275 | \edef\pdfoutlinedest{#3}% |
| 1283 | \ifx\pdfoutlinedest\empty | 1276 | \ifx\pdfoutlinedest\empty |
| 1284 | \def\pdfoutlinedest{#4}% | 1277 | \def\pdfoutlinedest{#4}% |
| 1285 | \else | 1278 | \else |
| 1286 | % Doubled backslashes in the name. | 1279 | \txiescapepdf\pdfoutlinedest |
| 1287 | {\activebackslashdouble \xdef\pdfoutlinedest{#3}% | ||
| 1288 | \backslashparens\pdfoutlinedest}% | ||
| 1289 | \fi | 1280 | \fi |
| 1290 | % | 1281 | % |
| 1291 | % Also double the backslashes in the display string. | 1282 | % Also escape PDF chars in the display string. |
| 1292 | {\activebackslashdouble \xdef\pdfoutlinetext{#1}% | 1283 | \edef\pdfoutlinetext{#1}% |
| 1293 | \backslashparens\pdfoutlinetext}% | 1284 | \txiescapepdf\pdfoutlinetext |
| 1294 | % | 1285 | % |
| 1295 | \pdfoutline goto name{\pdfmkpgn{\pdfoutlinedest}}#2{\pdfoutlinetext}% | 1286 | \pdfoutline goto name{\pdfmkpgn{\pdfoutlinedest}}#2{\pdfoutlinetext}% |
| 1296 | } | 1287 | } |
| 1297 | % | 1288 | % |
| 1298 | \def\pdfmakeoutlines{% | 1289 | \def\pdfmakeoutlines{% |
| 1299 | \begingroup | 1290 | \begingroup |
| 1300 | % Thanh's hack / proper braces in bookmarks | ||
| 1301 | \edef\mylbrace{\iftrue \string{\else}\fi}\let\{=\mylbrace | ||
| 1302 | \edef\myrbrace{\iffalse{\else\string}\fi}\let\}=\myrbrace | ||
| 1303 | % | ||
| 1304 | % Read toc silently, to get counts of subentries for \pdfoutline. | 1291 | % Read toc silently, to get counts of subentries for \pdfoutline. |
| 1305 | \def\partentry##1##2##3##4{}% ignore parts in the outlines | 1292 | \def\partentry##1##2##3##4{}% ignore parts in the outlines |
| 1306 | \def\numchapentry##1##2##3##4{% | 1293 | \def\numchapentry##1##2##3##4{% |
| @@ -1356,25 +1343,41 @@ output) for that.)} | |||
| 1356 | % Latin 2 (0xea) gets translated to a | character. Info from | 1343 | % Latin 2 (0xea) gets translated to a | character. Info from |
| 1357 | % Staszek Wawrykiewicz, 19 Jan 2004 04:09:24 +0100. | 1344 | % Staszek Wawrykiewicz, 19 Jan 2004 04:09:24 +0100. |
| 1358 | % | 1345 | % |
| 1359 | % xx to do this right, we have to translate 8-bit characters to | 1346 | % TODO this right, we have to translate 8-bit characters to |
| 1360 | % their "best" equivalent, based on the @documentencoding. Right | 1347 | % their "best" equivalent, based on the @documentencoding. Too |
| 1361 | % now, I guess we'll just let the pdf reader have its way. | 1348 | % much work for too little return. Just use the ASCII equivalents |
| 1349 | % we use for the index sort strings. | ||
| 1350 | % | ||
| 1362 | \indexnofonts | 1351 | \indexnofonts |
| 1363 | \setupdatafile | 1352 | \setupdatafile |
| 1353 | % We can have normal brace characters in the PDF outlines, unlike | ||
| 1354 | % Texinfo index files. So set that up. | ||
| 1355 | \def\{{\lbracecharliteral}% | ||
| 1356 | \def\}{\rbracecharliteral}% | ||
| 1364 | \catcode`\\=\active \otherbackslash | 1357 | \catcode`\\=\active \otherbackslash |
| 1365 | \input \tocreadfilename | 1358 | \input \tocreadfilename |
| 1366 | \endgroup | 1359 | \endgroup |
| 1367 | } | 1360 | } |
| 1361 | {\catcode`[=1 \catcode`]=2 | ||
| 1362 | \catcode`{=\other \catcode`}=\other | ||
| 1363 | \gdef\lbracecharliteral[{]% | ||
| 1364 | \gdef\rbracecharliteral[}]% | ||
| 1365 | ] | ||
| 1368 | % | 1366 | % |
| 1369 | \def\skipspaces#1{\def\PP{#1}\def\D{|}% | 1367 | \def\skipspaces#1{\def\PP{#1}\def\D{|}% |
| 1370 | \ifx\PP\D\let\nextsp\relax | 1368 | \ifx\PP\D\let\nextsp\relax |
| 1371 | \else\let\nextsp\skipspaces | 1369 | \else\let\nextsp\skipspaces |
| 1372 | \ifx\p\space\else\addtokens{\filename}{\PP}% | 1370 | \addtokens{\filename}{\PP}% |
| 1373 | \advance\filenamelength by 1 | 1371 | \advance\filenamelength by 1 |
| 1374 | \fi | ||
| 1375 | \fi | 1372 | \fi |
| 1376 | \nextsp} | 1373 | \nextsp} |
| 1377 | \def\getfilename#1{\filenamelength=0\expandafter\skipspaces#1|\relax} | 1374 | \def\getfilename#1{% |
| 1375 | \filenamelength=0 | ||
| 1376 | % If we don't expand the argument now, \skipspaces will get | ||
| 1377 | % snagged on things like "@value{foo}". | ||
| 1378 | \edef\temp{#1}% | ||
| 1379 | \expandafter\skipspaces\temp|\relax | ||
| 1380 | } | ||
| 1378 | \ifnum\pdftexversion < 14 | 1381 | \ifnum\pdftexversion < 14 |
| 1379 | \let \startlink \pdfannotlink | 1382 | \let \startlink \pdfannotlink |
| 1380 | \else | 1383 | \else |
| @@ -1471,9 +1474,6 @@ output) for that.)} | |||
| 1471 | \def\ttsl{\setfontstyle{ttsl}} | 1474 | \def\ttsl{\setfontstyle{ttsl}} |
| 1472 | 1475 | ||
| 1473 | 1476 | ||
| 1474 | % Default leading. | ||
| 1475 | \newdimen\textleading \textleading = 13.2pt | ||
| 1476 | |||
| 1477 | % Set the baselineskip to #1, and the lineskip and strut size | 1477 | % Set the baselineskip to #1, and the lineskip and strut size |
| 1478 | % correspondingly. There is no deep meaning behind these magic numbers | 1478 | % correspondingly. There is no deep meaning behind these magic numbers |
| 1479 | % used as factors; they just match (closely enough) what Knuth defined. | 1479 | % used as factors; they just match (closely enough) what Knuth defined. |
| @@ -1485,6 +1485,7 @@ output) for that.)} | |||
| 1485 | % can get a sort of poor man's double spacing by redefining this. | 1485 | % can get a sort of poor man's double spacing by redefining this. |
| 1486 | \def\baselinefactor{1} | 1486 | \def\baselinefactor{1} |
| 1487 | % | 1487 | % |
| 1488 | \newdimen\textleading | ||
| 1488 | \def\setleading#1{% | 1489 | \def\setleading#1{% |
| 1489 | \dimen0 = #1\relax | 1490 | \dimen0 = #1\relax |
| 1490 | \normalbaselineskip = \baselinefactor\dimen0 | 1491 | \normalbaselineskip = \baselinefactor\dimen0 |
| @@ -1757,18 +1758,24 @@ end | |||
| 1757 | \fi\fi | 1758 | \fi\fi |
| 1758 | 1759 | ||
| 1759 | 1760 | ||
| 1760 | % Set the font macro #1 to the font named #2, adding on the | 1761 | % Set the font macro #1 to the font named \fontprefix#2. |
| 1761 | % specified font prefix (normally `cm'). | ||
| 1762 | % #3 is the font's design size, #4 is a scale factor, #5 is the CMap | 1762 | % #3 is the font's design size, #4 is a scale factor, #5 is the CMap |
| 1763 | % encoding (currently only OT1, OT1IT and OT1TT are allowed, pass | 1763 | % encoding (only OT1, OT1IT and OT1TT are allowed, or empty to omit). |
| 1764 | % empty to omit). | 1764 | % Example: |
| 1765 | % #1 = \textrm | ||
| 1766 | % #2 = \rmshape | ||
| 1767 | % #3 = 10 | ||
| 1768 | % #4 = \mainmagstep | ||
| 1769 | % #5 = OT1 | ||
| 1770 | % | ||
| 1765 | \def\setfont#1#2#3#4#5{% | 1771 | \def\setfont#1#2#3#4#5{% |
| 1766 | \font#1=\fontprefix#2#3 scaled #4 | 1772 | \font#1=\fontprefix#2#3 scaled #4 |
| 1767 | \csname cmap#5\endcsname#1% | 1773 | \csname cmap#5\endcsname#1% |
| 1768 | } | 1774 | } |
| 1769 | % This is what gets called when #5 of \setfont is empty. | 1775 | % This is what gets called when #5 of \setfont is empty. |
| 1770 | \let\cmap\gobble | 1776 | \let\cmap\gobble |
| 1771 | % emacs-page end of cmaps | 1777 | % |
| 1778 | % (end of cmaps) | ||
| 1772 | 1779 | ||
| 1773 | % Use cm as the default font prefix. | 1780 | % Use cm as the default font prefix. |
| 1774 | % To specify the font prefix, you must define \fontprefix | 1781 | % To specify the font prefix, you must define \fontprefix |
| @@ -1778,7 +1785,7 @@ end | |||
| 1778 | \fi | 1785 | \fi |
| 1779 | % Support font families that don't use the same naming scheme as CM. | 1786 | % Support font families that don't use the same naming scheme as CM. |
| 1780 | \def\rmshape{r} | 1787 | \def\rmshape{r} |
| 1781 | \def\rmbshape{bx} %where the normal face is bold | 1788 | \def\rmbshape{bx} % where the normal face is bold |
| 1782 | \def\bfshape{b} | 1789 | \def\bfshape{b} |
| 1783 | \def\bxshape{bx} | 1790 | \def\bxshape{bx} |
| 1784 | \def\ttshape{tt} | 1791 | \def\ttshape{tt} |
| @@ -1793,8 +1800,7 @@ end | |||
| 1793 | \def\scshape{csc} | 1800 | \def\scshape{csc} |
| 1794 | \def\scbshape{csc} | 1801 | \def\scbshape{csc} |
| 1795 | 1802 | ||
| 1796 | % Definitions for a main text size of 11pt. This is the default in | 1803 | % Definitions for a main text size of 11pt. (The default in Texinfo.) |
| 1797 | % Texinfo. | ||
| 1798 | % | 1804 | % |
| 1799 | \def\definetextfontsizexi{% | 1805 | \def\definetextfontsizexi{% |
| 1800 | % Text fonts (11.2pt, magstep1). | 1806 | % Text fonts (11.2pt, magstep1). |
| @@ -1919,7 +1925,7 @@ end | |||
| 1919 | \textleading = 13.2pt % line spacing for 11pt CM | 1925 | \textleading = 13.2pt % line spacing for 11pt CM |
| 1920 | \textfonts % reset the current fonts | 1926 | \textfonts % reset the current fonts |
| 1921 | \rm | 1927 | \rm |
| 1922 | } % end of 11pt text font size definitions | 1928 | } % end of 11pt text font size definitions, \definetextfontsizexi |
| 1923 | 1929 | ||
| 1924 | 1930 | ||
| 1925 | % Definitions to make the main text be 10pt Computer Modern, with | 1931 | % Definitions to make the main text be 10pt Computer Modern, with |
| @@ -2051,7 +2057,7 @@ end | |||
| 2051 | \textleading = 12pt % line spacing for 10pt CM | 2057 | \textleading = 12pt % line spacing for 10pt CM |
| 2052 | \textfonts % reset the current fonts | 2058 | \textfonts % reset the current fonts |
| 2053 | \rm | 2059 | \rm |
| 2054 | } % end of 10pt text font size definitions | 2060 | } % end of 10pt text font size definitions, \definetextfontsizex |
| 2055 | 2061 | ||
| 2056 | 2062 | ||
| 2057 | % We provide the user-level command | 2063 | % We provide the user-level command |
| @@ -2372,7 +2378,9 @@ end | |||
| 2372 | \else\ifx\next-% | 2378 | \else\ifx\next-% |
| 2373 | \else\ifx\next.% | 2379 | \else\ifx\next.% |
| 2374 | \else\ptexslash | 2380 | \else\ptexslash |
| 2375 | \fi\fi\fi} | 2381 | \fi\fi\fi |
| 2382 | \aftersmartic | ||
| 2383 | } | ||
| 2376 | 2384 | ||
| 2377 | % like \smartslanted except unconditionally uses \ttsl, and no ic. | 2385 | % like \smartslanted except unconditionally uses \ttsl, and no ic. |
| 2378 | % @var is set to this for defun arguments. | 2386 | % @var is set to this for defun arguments. |
| @@ -2382,9 +2390,15 @@ end | |||
| 2382 | % ttsl for book titles, do we? | 2390 | % ttsl for book titles, do we? |
| 2383 | \def\cite#1{{\sl #1}\futurelet\next\smartitaliccorrection} | 2391 | \def\cite#1{{\sl #1}\futurelet\next\smartitaliccorrection} |
| 2384 | 2392 | ||
| 2393 | \def\aftersmartic{} | ||
| 2394 | \def\var#1{% | ||
| 2395 | \let\saveaftersmartic = \aftersmartic | ||
| 2396 | \def\aftersmartic{\null\let\aftersmartic=\saveaftersmartic}% | ||
| 2397 | \smartslanted{#1}% | ||
| 2398 | } | ||
| 2399 | |||
| 2385 | \let\i=\smartitalic | 2400 | \let\i=\smartitalic |
| 2386 | \let\slanted=\smartslanted | 2401 | \let\slanted=\smartslanted |
| 2387 | \def\var#1{\smartslanted{#1}} | ||
| 2388 | \let\dfn=\smartslanted | 2402 | \let\dfn=\smartslanted |
| 2389 | \let\emph=\smartitalic | 2403 | \let\emph=\smartitalic |
| 2390 | 2404 | ||
| @@ -2480,7 +2494,7 @@ end | |||
| 2480 | \plainfrenchspacing | 2494 | \plainfrenchspacing |
| 2481 | #1% | 2495 | #1% |
| 2482 | }% | 2496 | }% |
| 2483 | \null | 2497 | \null % reset spacefactor to 1000 |
| 2484 | } | 2498 | } |
| 2485 | 2499 | ||
| 2486 | % We *must* turn on hyphenation at `-' and `_' in @code. | 2500 | % We *must* turn on hyphenation at `-' and `_' in @code. |
| @@ -2762,6 +2776,7 @@ end | |||
| 2762 | \ifx\temp\empty \else | 2776 | \ifx\temp\empty \else |
| 2763 | \space ({\unsepspaces \ignorespaces \temp \unskip})% | 2777 | \space ({\unsepspaces \ignorespaces \temp \unskip})% |
| 2764 | \fi | 2778 | \fi |
| 2779 | \null % reset \spacefactor=1000 | ||
| 2765 | } | 2780 | } |
| 2766 | 2781 | ||
| 2767 | % @abbr for "Comput. J." and the like. | 2782 | % @abbr for "Comput. J." and the like. |
| @@ -2774,6 +2789,7 @@ end | |||
| 2774 | \ifx\temp\empty \else | 2789 | \ifx\temp\empty \else |
| 2775 | \space ({\unsepspaces \ignorespaces \temp \unskip})% | 2790 | \space ({\unsepspaces \ignorespaces \temp \unskip})% |
| 2776 | \fi | 2791 | \fi |
| 2792 | \null % reset \spacefactor=1000 | ||
| 2777 | } | 2793 | } |
| 2778 | 2794 | ||
| 2779 | % @asis just yields its argument. Used with @table, for example. | 2795 | % @asis just yields its argument. Used with @table, for example. |
| @@ -2838,20 +2854,48 @@ end | |||
| 2838 | } | 2854 | } |
| 2839 | } | 2855 | } |
| 2840 | 2856 | ||
| 2857 | % @inlinefmt{FMTNAME,PROCESSED-TEXT} and @inlineraw{FMTNAME,RAW-TEXT}. | ||
| 2858 | % Ignore unless FMTNAME == tex; then it is like @iftex and @tex, | ||
| 2859 | % except specified as a normal braced arg, so no newlines to worry about. | ||
| 2860 | % | ||
| 2861 | \def\outfmtnametex{tex} | ||
| 2862 | % | ||
| 2863 | \long\def\inlinefmt#1{\doinlinefmt #1,\finish} | ||
| 2864 | \long\def\doinlinefmt#1,#2,\finish{% | ||
| 2865 | \def\inlinefmtname{#1}% | ||
| 2866 | \ifx\inlinefmtname\outfmtnametex \ignorespaces #2\fi | ||
| 2867 | } | ||
| 2868 | % For raw, must switch into @tex before parsing the argument, to avoid | ||
| 2869 | % setting catcodes prematurely. Doing it this way means that, for | ||
| 2870 | % example, @inlineraw{html, foo{bar} gets a parse error instead of being | ||
| 2871 | % ignored. But this isn't important because if people want a literal | ||
| 2872 | % *right* brace they would have to use a command anyway, so they may as | ||
| 2873 | % well use a command to get a left brace too. We could re-use the | ||
| 2874 | % delimiter character idea from \verb, but it seems like overkill. | ||
| 2875 | % | ||
| 2876 | \long\def\inlineraw{\tex \doinlineraw} | ||
| 2877 | \long\def\doinlineraw#1{\doinlinerawtwo #1,\finish} | ||
| 2878 | \def\doinlinerawtwo#1,#2,\finish{% | ||
| 2879 | \def\inlinerawname{#1}% | ||
| 2880 | \ifx\inlinerawname\outfmtnametex \ignorespaces #2\fi | ||
| 2881 | \endgroup % close group opened by \tex. | ||
| 2882 | } | ||
| 2883 | |||
| 2841 | 2884 | ||
| 2842 | \message{glyphs,} | 2885 | \message{glyphs,} |
| 2843 | % and logos. | 2886 | % and logos. |
| 2844 | 2887 | ||
| 2845 | % @@ prints an @. | 2888 | % @@ prints an @, as does @atchar{}. |
| 2846 | \def\@{\char64 } | 2889 | \def\@{\char64 } |
| 2890 | \let\atchar=\@ | ||
| 2847 | 2891 | ||
| 2848 | % Used to generate quoted braces. Unless we're in typewriter, use | 2892 | % @{ @} @lbracechar{} @rbracechar{} all generate brace characters. |
| 2849 | % \ecfont because the CM text fonts do not have braces, and we don't | 2893 | % Unless we're in typewriter, use \ecfont because the CM text fonts do |
| 2850 | % want to switch into math. | 2894 | % not have braces, and we don't want to switch into math. |
| 2851 | \def\mylbrace{{\ifmonospace\else\ecfont\fi \char123}} | 2895 | \def\mylbrace{{\ifmonospace\else\ecfont\fi \char123}} |
| 2852 | \def\myrbrace{{\ifmonospace\else\ecfont\fi \char125}} | 2896 | \def\myrbrace{{\ifmonospace\else\ecfont\fi \char125}} |
| 2853 | \let\{=\mylbrace | 2897 | \let\{=\mylbrace \let\lbracechar=\{ |
| 2854 | \let\}=\myrbrace | 2898 | \let\}=\myrbrace \let\rbracechar=\} |
| 2855 | \begingroup | 2899 | \begingroup |
| 2856 | % Definitions to produce \{ and \} commands for indices, | 2900 | % Definitions to produce \{ and \} commands for indices, |
| 2857 | % and @{ and @} for the aux/toc files. | 2901 | % and @{ and @} for the aux/toc files. |
| @@ -2979,7 +3023,7 @@ end | |||
| 2979 | {\tentt \global\dimen0 = 3em}% Width of the box. | 3023 | {\tentt \global\dimen0 = 3em}% Width of the box. |
| 2980 | \dimen2 = .55pt % Thickness of rules | 3024 | \dimen2 = .55pt % Thickness of rules |
| 2981 | % The text. (`r' is open on the right, `e' somewhat less so on the left.) | 3025 | % The text. (`r' is open on the right, `e' somewhat less so on the left.) |
| 2982 | \setbox0 = \hbox{\kern-.75pt \reducedsf error\kern-1.5pt} | 3026 | \setbox0 = \hbox{\kern-.75pt \reducedsf \putworderror\kern-1.5pt} |
| 2983 | % | 3027 | % |
| 2984 | \setbox\errorbox=\hbox to \dimen0{\hfil | 3028 | \setbox\errorbox=\hbox to \dimen0{\hfil |
| 2985 | \hsize = \dimen0 \advance\hsize by -5.8pt % Space to left+right. | 3029 | \hsize = \dimen0 \advance\hsize by -5.8pt % Space to left+right. |
| @@ -4409,6 +4453,7 @@ end | |||
| 4409 | \definedummyword\guillemetright | 4453 | \definedummyword\guillemetright |
| 4410 | \definedummyword\guilsinglleft | 4454 | \definedummyword\guilsinglleft |
| 4411 | \definedummyword\guilsinglright | 4455 | \definedummyword\guilsinglright |
| 4456 | \definedummyword\lbracechar | ||
| 4412 | \definedummyword\leq | 4457 | \definedummyword\leq |
| 4413 | \definedummyword\minus | 4458 | \definedummyword\minus |
| 4414 | \definedummyword\ogonek | 4459 | \definedummyword\ogonek |
| @@ -4421,6 +4466,7 @@ end | |||
| 4421 | \definedummyword\quoteleft | 4466 | \definedummyword\quoteleft |
| 4422 | \definedummyword\quoteright | 4467 | \definedummyword\quoteright |
| 4423 | \definedummyword\quotesinglbase | 4468 | \definedummyword\quotesinglbase |
| 4469 | \definedummyword\rbracechar | ||
| 4424 | \definedummyword\result | 4470 | \definedummyword\result |
| 4425 | \definedummyword\textdegree | 4471 | \definedummyword\textdegree |
| 4426 | % | 4472 | % |
| @@ -4472,7 +4518,9 @@ end | |||
| 4472 | \definedummyword\t | 4518 | \definedummyword\t |
| 4473 | % | 4519 | % |
| 4474 | % Commands that take arguments. | 4520 | % Commands that take arguments. |
| 4521 | \definedummyword\abbr | ||
| 4475 | \definedummyword\acronym | 4522 | \definedummyword\acronym |
| 4523 | \definedummyword\anchor | ||
| 4476 | \definedummyword\cite | 4524 | \definedummyword\cite |
| 4477 | \definedummyword\code | 4525 | \definedummyword\code |
| 4478 | \definedummyword\command | 4526 | \definedummyword\command |
| @@ -4482,7 +4530,9 @@ end | |||
| 4482 | \definedummyword\emph | 4530 | \definedummyword\emph |
| 4483 | \definedummyword\env | 4531 | \definedummyword\env |
| 4484 | \definedummyword\file | 4532 | \definedummyword\file |
| 4533 | \definedummyword\image | ||
| 4485 | \definedummyword\indicateurl | 4534 | \definedummyword\indicateurl |
| 4535 | \definedummyword\inforef | ||
| 4486 | \definedummyword\kbd | 4536 | \definedummyword\kbd |
| 4487 | \definedummyword\key | 4537 | \definedummyword\key |
| 4488 | \definedummyword\math | 4538 | \definedummyword\math |
| @@ -4529,7 +4579,10 @@ end | |||
| 4529 | % content at all. So for index sorting, we map @{ and @} to strings | 4579 | % content at all. So for index sorting, we map @{ and @} to strings |
| 4530 | % starting with |, since that ASCII character is between ASCII { and }. | 4580 | % starting with |, since that ASCII character is between ASCII { and }. |
| 4531 | \def\{{|a}% | 4581 | \def\{{|a}% |
| 4582 | \def\lbracechar{|a}% | ||
| 4583 | % | ||
| 4532 | \def\}{|b}% | 4584 | \def\}{|b}% |
| 4585 | \def\rbracechar{|b}% | ||
| 4533 | % | 4586 | % |
| 4534 | % Non-English letters. | 4587 | % Non-English letters. |
| 4535 | \def\AA{AA}% | 4588 | \def\AA{AA}% |
| @@ -4705,10 +4758,9 @@ end | |||
| 4705 | % | 4758 | % |
| 4706 | % ..., ready, GO: | 4759 | % ..., ready, GO: |
| 4707 | % | 4760 | % |
| 4708 | \def\safewhatsit#1{% | 4761 | \def\safewhatsit#1{\ifhmode |
| 4709 | \ifhmode | ||
| 4710 | #1% | 4762 | #1% |
| 4711 | \else | 4763 | \else |
| 4712 | % \lastskip and \lastpenalty cannot both be nonzero simultaneously. | 4764 | % \lastskip and \lastpenalty cannot both be nonzero simultaneously. |
| 4713 | \whatsitskip = \lastskip | 4765 | \whatsitskip = \lastskip |
| 4714 | \edef\lastskipmacro{\the\lastskip}% | 4766 | \edef\lastskipmacro{\the\lastskip}% |
| @@ -4732,7 +4784,6 @@ end | |||
| 4732 | % to re-insert the same penalty (values >10000 are used for various | 4784 | % to re-insert the same penalty (values >10000 are used for various |
| 4733 | % signals); since we just inserted a non-discardable item, any | 4785 | % signals); since we just inserted a non-discardable item, any |
| 4734 | % following glue (such as a \parskip) would be a breakpoint. For example: | 4786 | % following glue (such as a \parskip) would be a breakpoint. For example: |
| 4735 | % | ||
| 4736 | % @deffn deffn-whatever | 4787 | % @deffn deffn-whatever |
| 4737 | % @vindex index-whatever | 4788 | % @vindex index-whatever |
| 4738 | % Description. | 4789 | % Description. |
| @@ -4745,8 +4796,7 @@ end | |||
| 4745 | % (the whatsit from the \write), so we must insert a \nobreak. | 4796 | % (the whatsit from the \write), so we must insert a \nobreak. |
| 4746 | \nobreak\vskip\whatsitskip | 4797 | \nobreak\vskip\whatsitskip |
| 4747 | \fi | 4798 | \fi |
| 4748 | \fi | 4799 | \fi} |
| 4749 | } | ||
| 4750 | 4800 | ||
| 4751 | % The index entry written in the file actually looks like | 4801 | % The index entry written in the file actually looks like |
| 4752 | % \entry {sortstring}{page}{topic} | 4802 | % \entry {sortstring}{page}{topic} |
| @@ -5849,14 +5899,15 @@ end | |||
| 5849 | % | 5899 | % |
| 5850 | % We'll almost certainly start a paragraph next, so don't let that | 5900 | % We'll almost certainly start a paragraph next, so don't let that |
| 5851 | % glue accumulate. (Not a breakpoint because it's preceded by a | 5901 | % glue accumulate. (Not a breakpoint because it's preceded by a |
| 5852 | % discardable item.) | 5902 | % discardable item.) However, when a paragraph is not started next |
| 5903 | % (\startdefun, \cartouche, \center, etc.), this needs to be wiped out | ||
| 5904 | % or the negative glue will cause weirdly wrong output, typically | ||
| 5905 | % obscuring the section heading with something else. | ||
| 5853 | \vskip-\parskip | 5906 | \vskip-\parskip |
| 5854 | % | 5907 | % |
| 5855 | % This is purely so the last item on the list is a known \penalty > | 5908 | % This is so the last item on the main vertical list is a known |
| 5856 | % 10000. This is so \startdefun can avoid allowing breakpoints after | 5909 | % \penalty > 10000, so \startdefun, etc., can recognize the situation |
| 5857 | % section headings. Otherwise, it would insert a valid breakpoint between: | 5910 | % and do the needful. |
| 5858 | % @section sec-whatever | ||
| 5859 | % @deffn def-whatever | ||
| 5860 | \penalty 10001 | 5911 | \penalty 10001 |
| 5861 | } | 5912 | } |
| 5862 | 5913 | ||
| @@ -6276,7 +6327,7 @@ end | |||
| 6276 | % If this cartouche directly follows a sectioning command, we need the | 6327 | % If this cartouche directly follows a sectioning command, we need the |
| 6277 | % \parskip glue (backspaced over by default) or the cartouche can | 6328 | % \parskip glue (backspaced over by default) or the cartouche can |
| 6278 | % collide with the section heading. | 6329 | % collide with the section heading. |
| 6279 | \ifnum\lastpenalty>10000 \vskip\parskip \fi | 6330 | \ifnum\lastpenalty>10000 \vskip\parskip \penalty\lastpenalty \fi |
| 6280 | % | 6331 | % |
| 6281 | \vbox\bgroup | 6332 | \vbox\bgroup |
| 6282 | \baselineskip=0pt\parskip=0pt\lineskip=0pt | 6333 | \baselineskip=0pt\parskip=0pt\lineskip=0pt |
| @@ -7766,7 +7817,7 @@ end | |||
| 7766 | \fi\fi | 7817 | \fi\fi |
| 7767 | } | 7818 | } |
| 7768 | 7819 | ||
| 7769 | 7820 | % | |
| 7770 | % @xref, @pxref, and @ref generate cross-references. For \xrefX, #1 is | 7821 | % @xref, @pxref, and @ref generate cross-references. For \xrefX, #1 is |
| 7771 | % the node name, #2 the name of the Info cross-reference, #3 the printed | 7822 | % the node name, #2 the name of the Info cross-reference, #3 the printed |
| 7772 | % node name, #4 the name of the Info file, #5 the name of the printed | 7823 | % node name, #4 the name of the Info file, #5 the name of the printed |
| @@ -7775,26 +7826,41 @@ end | |||
| 7775 | \def\pxref#1{\putwordsee{} \xrefX[#1,,,,,,,]} | 7826 | \def\pxref#1{\putwordsee{} \xrefX[#1,,,,,,,]} |
| 7776 | \def\xref#1{\putwordSee{} \xrefX[#1,,,,,,,]} | 7827 | \def\xref#1{\putwordSee{} \xrefX[#1,,,,,,,]} |
| 7777 | \def\ref#1{\xrefX[#1,,,,,,,]} | 7828 | \def\ref#1{\xrefX[#1,,,,,,,]} |
| 7829 | % | ||
| 7830 | \newbox\toprefbox | ||
| 7831 | \newbox\printedrefnamebox | ||
| 7832 | \newbox\infofilenamebox | ||
| 7833 | \newbox\printedmanualbox | ||
| 7834 | % | ||
| 7778 | \def\xrefX[#1,#2,#3,#4,#5,#6]{\begingroup | 7835 | \def\xrefX[#1,#2,#3,#4,#5,#6]{\begingroup |
| 7779 | \unsepspaces | 7836 | \unsepspaces |
| 7780 | \def\printedmanual{\ignorespaces #5}% | 7837 | % |
| 7838 | % Get args without leading/trailing spaces. | ||
| 7781 | \def\printedrefname{\ignorespaces #3}% | 7839 | \def\printedrefname{\ignorespaces #3}% |
| 7782 | \setbox1=\hbox{\printedmanual\unskip}% | 7840 | \setbox\printedrefnamebox = \hbox{\printedrefname\unskip}% |
| 7783 | \setbox0=\hbox{\printedrefname\unskip}% | 7841 | % |
| 7784 | \ifdim \wd0 = 0pt | 7842 | \def\infofilename{\ignorespaces #4}% |
| 7843 | \setbox\infofilenamebox = \hbox{\infofilename\unskip}% | ||
| 7844 | % | ||
| 7845 | \def\printedmanual{\ignorespaces #5}% | ||
| 7846 | \setbox\printedmanualbox = \hbox{\printedmanual\unskip}% | ||
| 7847 | % | ||
| 7848 | % If the printed reference name (arg #3) was not explicitly given in | ||
| 7849 | % the @xref, figure out what we want to use. | ||
| 7850 | \ifdim \wd\printedrefnamebox = 0pt | ||
| 7785 | % No printed node name was explicitly given. | 7851 | % No printed node name was explicitly given. |
| 7786 | \expandafter\ifx\csname SETxref-automatic-section-title\endcsname \relax | 7852 | \expandafter\ifx\csname SETxref-automatic-section-title\endcsname \relax |
| 7787 | % Use the node name inside the square brackets. | 7853 | % Not auto section-title: use node name inside the square brackets. |
| 7788 | \def\printedrefname{\ignorespaces #1}% | 7854 | \def\printedrefname{\ignorespaces #1}% |
| 7789 | \else | 7855 | \else |
| 7790 | % Use the actual chapter/section title appear inside | 7856 | % Auto section-title: use chapter/section title inside |
| 7791 | % the square brackets. Use the real section title if we have it. | 7857 | % the square brackets if we have it. |
| 7792 | \ifdim \wd1 > 0pt | 7858 | \ifdim \wd\printedmanualbox > 0pt |
| 7793 | % It is in another manual, so we don't have it. | 7859 | % It is in another manual, so we don't have it; use node name. |
| 7794 | \def\printedrefname{\ignorespaces #1}% | 7860 | \def\printedrefname{\ignorespaces #1}% |
| 7795 | \else | 7861 | \else |
| 7796 | \ifhavexrefs | 7862 | \ifhavexrefs |
| 7797 | % We know the real title if we have the xref values. | 7863 | % We (should) know the real title if we have the xref values. |
| 7798 | \def\printedrefname{\refx{#1-title}{}}% | 7864 | \def\printedrefname{\refx{#1-title}{}}% |
| 7799 | \else | 7865 | \else |
| 7800 | % Otherwise just copy the Info node name. | 7866 | % Otherwise just copy the Info node name. |
| @@ -7808,13 +7874,20 @@ end | |||
| 7808 | \ifpdf | 7874 | \ifpdf |
| 7809 | {\indexnofonts | 7875 | {\indexnofonts |
| 7810 | \turnoffactive | 7876 | \turnoffactive |
| 7877 | \makevalueexpandable | ||
| 7811 | % This expands tokens, so do it after making catcode changes, so _ | 7878 | % This expands tokens, so do it after making catcode changes, so _ |
| 7812 | % etc. don't get their TeX definitions. | 7879 | % etc. don't get their TeX definitions. This ignores all spaces in |
| 7880 | % #4, including (wrongly) those in the middle of the filename. | ||
| 7813 | \getfilename{#4}% | 7881 | \getfilename{#4}% |
| 7814 | % | 7882 | % |
| 7815 | % See comments at \activebackslashdouble. | 7883 | % This (wrongly) does not take account of leading or trailing |
| 7816 | {\activebackslashdouble \xdef\pdfxrefdest{#1}% | 7884 | % spaces in #1, which should be ignored. |
| 7817 | \backslashparens\pdfxrefdest}% | 7885 | \edef\pdfxrefdest{#1}% |
| 7886 | \ifx\pdfxrefdest\empty | ||
| 7887 | \def\pdfxrefdest{Top}% no empty targets | ||
| 7888 | \else | ||
| 7889 | \txiescapepdf\pdfxrefdest % escape PDF special chars | ||
| 7890 | \fi | ||
| 7818 | % | 7891 | % |
| 7819 | \leavevmode | 7892 | \leavevmode |
| 7820 | \startlink attr{/Border [0 0 0]}% | 7893 | \startlink attr{/Border [0 0 0]}% |
| @@ -7841,29 +7914,42 @@ end | |||
| 7841 | \iffloat\Xthisreftitle | 7914 | \iffloat\Xthisreftitle |
| 7842 | % If the user specified the print name (third arg) to the ref, | 7915 | % If the user specified the print name (third arg) to the ref, |
| 7843 | % print it instead of our usual "Figure 1.2". | 7916 | % print it instead of our usual "Figure 1.2". |
| 7844 | \ifdim\wd0 = 0pt | 7917 | \ifdim\wd\printedrefnamebox = 0pt |
| 7845 | \refx{#1-snt}{}% | 7918 | \refx{#1-snt}{}% |
| 7846 | \else | 7919 | \else |
| 7847 | \printedrefname | 7920 | \printedrefname |
| 7848 | \fi | 7921 | \fi |
| 7849 | % | 7922 | % |
| 7850 | % if the user also gave the printed manual name (fifth arg), append | 7923 | % If the user also gave the printed manual name (fifth arg), append |
| 7851 | % "in MANUALNAME". | 7924 | % "in MANUALNAME". |
| 7852 | \ifdim \wd1 > 0pt | 7925 | \ifdim \wd\printedmanualbox > 0pt |
| 7853 | \space \putwordin{} \cite{\printedmanual}% | 7926 | \space \putwordin{} \cite{\printedmanual}% |
| 7854 | \fi | 7927 | \fi |
| 7855 | \else | 7928 | \else |
| 7856 | % node/anchor (non-float) references. | 7929 | % node/anchor (non-float) references. |
| 7930 | % | ||
| 7931 | % If we use \unhbox to print the node names, TeX does not insert | ||
| 7932 | % empty discretionaries after hyphens, which means that it will not | ||
| 7933 | % find a line break at a hyphen in a node names. Since some manuals | ||
| 7934 | % are best written with fairly long node names, containing hyphens, | ||
| 7935 | % this is a loss. Therefore, we give the text of the node name | ||
| 7936 | % again, so it is as if TeX is seeing it for the first time. | ||
| 7937 | % | ||
| 7938 | \ifdim \wd\printedmanualbox > 0pt | ||
| 7939 | % Cross-manual reference with a printed manual name. | ||
| 7940 | % | ||
| 7941 | \crossmanualxref{\cite{\printedmanual\unskip}}% | ||
| 7942 | % | ||
| 7943 | \else\ifdim \wd\infofilenamebox > 0pt | ||
| 7944 | % Cross-manual reference with only an info filename (arg 4), no | ||
| 7945 | % printed manual name (arg 5). This is essentially the same as | ||
| 7946 | % the case above; we output the filename, since we have nothing else. | ||
| 7947 | % | ||
| 7948 | \crossmanualxref{\code{\infofilename\unskip}}% | ||
| 7857 | % | 7949 | % |
| 7858 | % If we use \unhbox0 and \unhbox1 to print the node names, TeX does not | ||
| 7859 | % insert empty discretionaries after hyphens, which means that it will | ||
| 7860 | % not find a line break at a hyphen in a node names. Since some manuals | ||
| 7861 | % are best written with fairly long node names, containing hyphens, this | ||
| 7862 | % is a loss. Therefore, we give the text of the node name again, so it | ||
| 7863 | % is as if TeX is seeing it for the first time. | ||
| 7864 | \ifdim \wd1 > 0pt | ||
| 7865 | \putwordSection{} ``\printedrefname'' \putwordin{} \cite{\printedmanual}% | ||
| 7866 | \else | 7950 | \else |
| 7951 | % Reference within this manual. | ||
| 7952 | % | ||
| 7867 | % _ (for example) has to be the character _ for the purposes of the | 7953 | % _ (for example) has to be the character _ for the purposes of the |
| 7868 | % control sequence corresponding to the node, but it has to expand | 7954 | % control sequence corresponding to the node, but it has to expand |
| 7869 | % into the usual \leavevmode...\vrule stuff for purposes of | 7955 | % into the usual \leavevmode...\vrule stuff for purposes of |
| @@ -7875,7 +7961,7 @@ end | |||
| 7875 | \setbox2 = \hbox{\ignorespaces \refx{#1-snt}{}}% | 7961 | \setbox2 = \hbox{\ignorespaces \refx{#1-snt}{}}% |
| 7876 | \ifdim \wd2 > 0pt \refx{#1-snt}\space\fi | 7962 | \ifdim \wd2 > 0pt \refx{#1-snt}\space\fi |
| 7877 | }% | 7963 | }% |
| 7878 | % output the `[mynode]' via a macro so it can be overridden. | 7964 | % output the `[mynode]' via the macro below so it can be overridden. |
| 7879 | \xrefprintnodename\printedrefname | 7965 | \xrefprintnodename\printedrefname |
| 7880 | % | 7966 | % |
| 7881 | % But we always want a comma and a space: | 7967 | % But we always want a comma and a space: |
| @@ -7883,11 +7969,37 @@ end | |||
| 7883 | % | 7969 | % |
| 7884 | % output the `page 3'. | 7970 | % output the `page 3'. |
| 7885 | \turnoffactive \putwordpage\tie\refx{#1-pg}{}% | 7971 | \turnoffactive \putwordpage\tie\refx{#1-pg}{}% |
| 7886 | \fi | 7972 | \fi\fi |
| 7887 | \fi | 7973 | \fi |
| 7888 | \endlink | 7974 | \endlink |
| 7889 | \endgroup} | 7975 | \endgroup} |
| 7890 | 7976 | ||
| 7977 | % Output a cross-manual xref to #1. Used just above (twice). | ||
| 7978 | % | ||
| 7979 | % Only include the text "Section ``foo'' in" if the foo is neither | ||
| 7980 | % missing or Top. Thus, @xref{,,,foo,The Foo Manual} outputs simply | ||
| 7981 | % "see The Foo Manual", the idea being to refer to the whole manual. | ||
| 7982 | % | ||
| 7983 | % But, this being TeX, we can't easily compare our node name against the | ||
| 7984 | % string "Top" while ignoring the possible spaces before and after in | ||
| 7985 | % the input. By adding the arbitrary 7sp below, we make it much less | ||
| 7986 | % likely that a real node name would have the same width as "Top" (e.g., | ||
| 7987 | % in a monospaced font). Hopefully it will never happen in practice. | ||
| 7988 | % | ||
| 7989 | % For the same basic reason, we retypeset the "Top" at every | ||
| 7990 | % reference, since the current font is indeterminate. | ||
| 7991 | % | ||
| 7992 | \def\crossmanualxref#1{% | ||
| 7993 | \setbox\toprefbox = \hbox{Top\kern7sp}% | ||
| 7994 | \setbox2 = \hbox{\ignorespaces \printedrefname \unskip \kern7sp}% | ||
| 7995 | \ifdim \wd2 > 7sp % nonempty? | ||
| 7996 | \ifdim \wd2 = \wd\toprefbox \else % same as Top? | ||
| 7997 | \putwordSection{} ``\printedrefname'' \putwordin{}\space | ||
| 7998 | \fi | ||
| 7999 | \fi | ||
| 8000 | #1% | ||
| 8001 | } | ||
| 8002 | |||
| 7891 | % This macro is called from \xrefX for the `[nodename]' part of xref | 8003 | % This macro is called from \xrefX for the `[nodename]' part of xref |
| 7892 | % output. It's a separate macro only so it can be changed more easily, | 8004 | % output. It's a separate macro only so it can be changed more easily, |
| 7893 | % since square brackets don't work well in some documents. Particularly | 8005 | % since square brackets don't work well in some documents. Particularly |
| @@ -8103,7 +8215,7 @@ end | |||
| 8103 | % space to prevent strange expansion errors.) | 8215 | % space to prevent strange expansion errors.) |
| 8104 | \def\supereject{\par\penalty -20000\footnoteno =0 } | 8216 | \def\supereject{\par\penalty -20000\footnoteno =0 } |
| 8105 | 8217 | ||
| 8106 | % @footnotestyle is meaningful for info output only. | 8218 | % @footnotestyle is meaningful for Info output only. |
| 8107 | \let\footnotestyle=\comment | 8219 | \let\footnotestyle=\comment |
| 8108 | 8220 | ||
| 8109 | {\catcode `\@=11 | 8221 | {\catcode `\@=11 |
| @@ -8166,6 +8278,8 @@ end | |||
| 8166 | % expands into a box, it must come within the paragraph, lest it | 8278 | % expands into a box, it must come within the paragraph, lest it |
| 8167 | % provide a place where TeX can split the footnote. | 8279 | % provide a place where TeX can split the footnote. |
| 8168 | \footstrut | 8280 | \footstrut |
| 8281 | % | ||
| 8282 | % Invoke rest of plain TeX footnote routine. | ||
| 8169 | \futurelet\next\fo@t | 8283 | \futurelet\next\fo@t |
| 8170 | } | 8284 | } |
| 8171 | }%end \catcode `\@=11 | 8285 | }%end \catcode `\@=11 |
| @@ -8253,7 +8367,7 @@ end | |||
| 8253 | it from ftp://tug.org/tex/epsf.tex.} | 8367 | it from ftp://tug.org/tex/epsf.tex.} |
| 8254 | % | 8368 | % |
| 8255 | \def\image#1{% | 8369 | \def\image#1{% |
| 8256 | \ifx\epsfbox\thisiundefined | 8370 | \ifx\epsfbox\thisisundefined |
| 8257 | \ifwarnednoepsf \else | 8371 | \ifwarnednoepsf \else |
| 8258 | \errhelp = \noepsfhelp | 8372 | \errhelp = \noepsfhelp |
| 8259 | \errmessage{epsf.tex not found, images will be ignored}% | 8373 | \errmessage{epsf.tex not found, images will be ignored}% |
| @@ -8277,6 +8391,13 @@ end | |||
| 8277 | % If the image is by itself, center it. | 8391 | % If the image is by itself, center it. |
| 8278 | \ifvmode | 8392 | \ifvmode |
| 8279 | \imagevmodetrue | 8393 | \imagevmodetrue |
| 8394 | \else \ifx\centersub\centerV | ||
| 8395 | % for @center @image, we need a vbox so we can have our vertical space | ||
| 8396 | \imagevmodetrue | ||
| 8397 | \vbox\bgroup % vbox has better behavior than vtop herev | ||
| 8398 | \fi\fi | ||
| 8399 | % | ||
| 8400 | \ifimagevmode | ||
| 8280 | \nobreak\medskip | 8401 | \nobreak\medskip |
| 8281 | % Usually we'll have text after the image which will insert | 8402 | % Usually we'll have text after the image which will insert |
| 8282 | % \parskip glue, so insert it here too to equalize the space | 8403 | % \parskip glue, so insert it here too to equalize the space |
| @@ -8286,9 +8407,13 @@ end | |||
| 8286 | \fi | 8407 | \fi |
| 8287 | % | 8408 | % |
| 8288 | % Leave vertical mode so that indentation from an enclosing | 8409 | % Leave vertical mode so that indentation from an enclosing |
| 8289 | % environment such as @quotation is respected. On the other hand, if | 8410 | % environment such as @quotation is respected. |
| 8290 | % it's at the top level, we don't want the normal paragraph indentation. | 8411 | % However, if we're at the top level, we don't want the |
| 8291 | \noindent | 8412 | % normal paragraph indentation. |
| 8413 | % On the other hand, if we are in the case of @center @image, we don't | ||
| 8414 | % want to start a paragraph, which will create a hsize-width box and | ||
| 8415 | % eradicate the centering. | ||
| 8416 | \ifx\centersub\centerV\else \noindent \fi | ||
| 8292 | % | 8417 | % |
| 8293 | % Output the image. | 8418 | % Output the image. |
| 8294 | \ifpdf | 8419 | \ifpdf |
| @@ -8300,7 +8425,10 @@ end | |||
| 8300 | \epsfbox{#1.eps}% | 8425 | \epsfbox{#1.eps}% |
| 8301 | \fi | 8426 | \fi |
| 8302 | % | 8427 | % |
| 8303 | \ifimagevmode \medskip \fi % space after the standalone image | 8428 | \ifimagevmode |
| 8429 | \medskip % space after a standalone image | ||
| 8430 | \fi | ||
| 8431 | \ifx\centersub\centerV \egroup \fi | ||
| 8304 | \endgroup} | 8432 | \endgroup} |
| 8305 | 8433 | ||
| 8306 | 8434 | ||
| @@ -9781,14 +9909,24 @@ directory should work if nowhere else does.} | |||
| 9781 | 9909 | ||
| 9782 | % In texinfo, backslash is an active character; it prints the backslash | 9910 | % In texinfo, backslash is an active character; it prints the backslash |
| 9783 | % in fixed width font. | 9911 | % in fixed width font. |
| 9784 | \catcode`\\=\active | 9912 | \catcode`\\=\active % @ for escape char from now on. |
| 9785 | @def@normalbackslash{{@tt@backslashcurfont}} | 9913 | |
| 9914 | % The story here is that in math mode, the \char of \backslashcurfont | ||
| 9915 | % ends up printing the roman \ from the math symbol font (because \char | ||
| 9916 | % in math mode uses the \mathcode, and plain.tex sets | ||
| 9917 | % \mathcode`\\="026E). It seems better for @backslashchar{} to always | ||
| 9918 | % print a typewriter backslash, hence we use an explicit \mathchar, | ||
| 9919 | % which is the decimal equivalent of "715c (class 7, e.g., use \fam; | ||
| 9920 | % ignored family value; char position "5C). We can't use " for the | ||
| 9921 | % usual hex value because it has already been made active. | ||
| 9922 | @def@normalbackslash{{@tt @ifmmode @mathchar29020 @else @backslashcurfont @fi}} | ||
| 9923 | @let@backslashchar = @normalbackslash % @backslashchar{} is for user documents. | ||
| 9924 | |||
| 9786 | % On startup, @fixbackslash assigns: | 9925 | % On startup, @fixbackslash assigns: |
| 9787 | % @let \ = @normalbackslash | 9926 | % @let \ = @normalbackslash |
| 9788 | |||
| 9789 | % \rawbackslash defines an active \ to do \backslashcurfont. | 9927 | % \rawbackslash defines an active \ to do \backslashcurfont. |
| 9790 | % \otherbackslash defines an active \ to be a literal `\' character with | 9928 | % \otherbackslash defines an active \ to be a literal `\' character with |
| 9791 | % catcode other. | 9929 | % catcode other. We switch back and forth between these. |
| 9792 | @gdef@rawbackslash{@let\=@backslashcurfont} | 9930 | @gdef@rawbackslash{@let\=@backslashcurfont} |
| 9793 | @gdef@otherbackslash{@let\=@realbackslash} | 9931 | @gdef@otherbackslash{@let\=@realbackslash} |
| 9794 | 9932 | ||
| @@ -9844,10 +9982,13 @@ directory should work if nowhere else does.} | |||
| 9844 | @def@normalslash{/} | 9982 | @def@normalslash{/} |
| 9845 | 9983 | ||
| 9846 | % These look ok in all fonts, so just make them not special. | 9984 | % These look ok in all fonts, so just make them not special. |
| 9985 | % @hashchar{} gets its own user-level command, because of #line. | ||
| 9847 | @catcode`@& = @other @def@normalamp{&} | 9986 | @catcode`@& = @other @def@normalamp{&} |
| 9848 | @catcode`@# = @other @def@normalhash{#} | 9987 | @catcode`@# = @other @def@normalhash{#} |
| 9849 | @catcode`@% = @other @def@normalpercent{%} | 9988 | @catcode`@% = @other @def@normalpercent{%} |
| 9850 | 9989 | ||
| 9990 | @let @hashchar = @normalhash | ||
| 9991 | |||
| 9851 | @c Finally, make ` and ' active, so that txicodequoteundirected and | 9992 | @c Finally, make ` and ' active, so that txicodequoteundirected and |
| 9852 | @c txicodequotebacktick work right in, e.g., @w{@code{`foo'}}. If we | 9993 | @c txicodequotebacktick work right in, e.g., @w{@code{`foo'}}. If we |
| 9853 | @c don't make ` and ' active, @code will not get them as active chars. | 9994 | @c don't make ` and ' active, @code will not get them as active chars. |