|
|
@@ -3,7 +3,7 @@
|
|
|
% Load plain if necessary, i.e., if running under initex.
|
|
|
\expandafter\ifx\csname fmtname\endcsname\relax\input plain\fi
|
|
|
%
|
|
|
-\def\texinfoversion{2012-03-11.15}
|
|
|
+\def\texinfoversion{2012-09-05.06}
|
|
|
%
|
|
|
% Copyright 1985, 1986, 1988, 1990, 1991, 1992, 1993, 1994, 1995,
|
|
|
% 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
|
|
|
@@ -28,9 +28,9 @@
|
|
|
%
|
|
|
% Please try the latest version of texinfo.tex before submitting bug
|
|
|
% reports; you can get the latest version from:
|
|
|
-% http://www.gnu.org/software/texinfo/ (the Texinfo home page), or
|
|
|
-% ftp://tug.org/tex/texinfo.tex
|
|
|
-% (and all CTAN mirrors, see http://www.ctan.org).
|
|
|
+% http://ftp.gnu.org/gnu/texinfo/ (the Texinfo release area), or
|
|
|
+% http://ftpmirror.gnu.org/texinfo/ (same, via a mirror), or
|
|
|
+% http://www.gnu.org/software/texinfo/ (the Texinfo home page)
|
|
|
% The texinfo.tex in any given distribution could well be out
|
|
|
% of date, so if that's what you're using, please check.
|
|
|
%
|
|
|
@@ -594,7 +594,7 @@
|
|
|
\def\:{\spacefactor=1000 }
|
|
|
|
|
|
% @* forces a line break.
|
|
|
-\def\*{\hfil\break\hbox{}\ignorespaces}
|
|
|
+\def\*{\unskip\hfil\break\hbox{}\ignorespaces}
|
|
|
|
|
|
% @/ allows a line break.
|
|
|
\let\/=\allowbreak
|
|
|
@@ -1117,7 +1117,7 @@ where each line of input produces a line of output.}
|
|
|
% #1 is a control sequence in which to do the replacements,
|
|
|
% which we \xdef.
|
|
|
\def\txiescapepdf#1{%
|
|
|
- \ifx\pdfescapestring\relax
|
|
|
+ \ifx\pdfescapestring\thisisundefined
|
|
|
% No primitive available; should we give a warning or log?
|
|
|
% Many times it won't matter.
|
|
|
\else
|
|
|
@@ -1367,9 +1367,8 @@ output) for that.)}
|
|
|
\def\skipspaces#1{\def\PP{#1}\def\D{|}%
|
|
|
\ifx\PP\D\let\nextsp\relax
|
|
|
\else\let\nextsp\skipspaces
|
|
|
- \ifx\p\space\else\addtokens{\filename}{\PP}%
|
|
|
- \advance\filenamelength by 1
|
|
|
- \fi
|
|
|
+ \addtokens{\filename}{\PP}%
|
|
|
+ \advance\filenamelength by 1
|
|
|
\fi
|
|
|
\nextsp}
|
|
|
\def\getfilename#1{%
|
|
|
@@ -1475,9 +1474,6 @@ output) for that.)}
|
|
|
\def\ttsl{\setfontstyle{ttsl}}
|
|
|
|
|
|
|
|
|
-% Default leading.
|
|
|
-\newdimen\textleading \textleading = 13.2pt
|
|
|
-
|
|
|
% Set the baselineskip to #1, and the lineskip and strut size
|
|
|
% correspondingly. There is no deep meaning behind these magic numbers
|
|
|
% used as factors; they just match (closely enough) what Knuth defined.
|
|
|
@@ -1489,6 +1485,7 @@ output) for that.)}
|
|
|
% can get a sort of poor man's double spacing by redefining this.
|
|
|
\def\baselinefactor{1}
|
|
|
%
|
|
|
+\newdimen\textleading
|
|
|
\def\setleading#1{%
|
|
|
\dimen0 = #1\relax
|
|
|
\normalbaselineskip = \baselinefactor\dimen0
|
|
|
@@ -1761,18 +1758,24 @@ end
|
|
|
\fi\fi
|
|
|
|
|
|
|
|
|
-% Set the font macro #1 to the font named #2, adding on the
|
|
|
-% specified font prefix (normally `cm').
|
|
|
+% Set the font macro #1 to the font named \fontprefix#2.
|
|
|
% #3 is the font's design size, #4 is a scale factor, #5 is the CMap
|
|
|
-% encoding (currently only OT1, OT1IT and OT1TT are allowed, pass
|
|
|
-% empty to omit).
|
|
|
+% encoding (only OT1, OT1IT and OT1TT are allowed, or empty to omit).
|
|
|
+% Example:
|
|
|
+% #1 = \textrm
|
|
|
+% #2 = \rmshape
|
|
|
+% #3 = 10
|
|
|
+% #4 = \mainmagstep
|
|
|
+% #5 = OT1
|
|
|
+%
|
|
|
\def\setfont#1#2#3#4#5{%
|
|
|
\font#1=\fontprefix#2#3 scaled #4
|
|
|
\csname cmap#5\endcsname#1%
|
|
|
}
|
|
|
% This is what gets called when #5 of \setfont is empty.
|
|
|
\let\cmap\gobble
|
|
|
-% emacs-page end of cmaps
|
|
|
+%
|
|
|
+% (end of cmaps)
|
|
|
|
|
|
% Use cm as the default font prefix.
|
|
|
% To specify the font prefix, you must define \fontprefix
|
|
|
@@ -1782,7 +1785,7 @@ end
|
|
|
\fi
|
|
|
% Support font families that don't use the same naming scheme as CM.
|
|
|
\def\rmshape{r}
|
|
|
-\def\rmbshape{bx} %where the normal face is bold
|
|
|
+\def\rmbshape{bx} % where the normal face is bold
|
|
|
\def\bfshape{b}
|
|
|
\def\bxshape{bx}
|
|
|
\def\ttshape{tt}
|
|
|
@@ -1797,8 +1800,7 @@ end
|
|
|
\def\scshape{csc}
|
|
|
\def\scbshape{csc}
|
|
|
|
|
|
-% Definitions for a main text size of 11pt. This is the default in
|
|
|
-% Texinfo.
|
|
|
+% Definitions for a main text size of 11pt. (The default in Texinfo.)
|
|
|
%
|
|
|
\def\definetextfontsizexi{%
|
|
|
% Text fonts (11.2pt, magstep1).
|
|
|
@@ -1923,7 +1925,7 @@ end
|
|
|
\textleading = 13.2pt % line spacing for 11pt CM
|
|
|
\textfonts % reset the current fonts
|
|
|
\rm
|
|
|
-} % end of 11pt text font size definitions
|
|
|
+} % end of 11pt text font size definitions, \definetextfontsizexi
|
|
|
|
|
|
|
|
|
% Definitions to make the main text be 10pt Computer Modern, with
|
|
|
@@ -2055,7 +2057,7 @@ end
|
|
|
\textleading = 12pt % line spacing for 10pt CM
|
|
|
\textfonts % reset the current fonts
|
|
|
\rm
|
|
|
-} % end of 10pt text font size definitions
|
|
|
+} % end of 10pt text font size definitions, \definetextfontsizex
|
|
|
|
|
|
|
|
|
% We provide the user-level command
|
|
|
@@ -2446,34 +2448,12 @@ end
|
|
|
% @samp.
|
|
|
\def\samp#1{{\setupmarkupstyle{samp}\lq\tclose{#1}\rq\null}}
|
|
|
|
|
|
-% definition of @key that produces a lozenge. Doesn't adjust to text size.
|
|
|
-%\setfont\keyrm\rmshape{8}{1000}{OT1}
|
|
|
-%\font\keysy=cmsy9
|
|
|
-%\def\key#1{{\keyrm\textfont2=\keysy \leavevmode\hbox{%
|
|
|
-% \raise0.4pt\hbox{\angleleft}\kern-.08em\vtop{%
|
|
|
-% \vbox{\hrule\kern-0.4pt
|
|
|
-% \hbox{\raise0.4pt\hbox{\vphantom{\angleleft}}#1}}%
|
|
|
-% \kern-0.4pt\hrule}%
|
|
|
-% \kern-.06em\raise0.4pt\hbox{\angleright}}}}
|
|
|
-
|
|
|
-% definition of @key with no lozenge. If the current font is already
|
|
|
-% monospace, don't change it; that way, we respect @kbdinputstyle. But
|
|
|
-% if it isn't monospace, then use \tt.
|
|
|
-%
|
|
|
-\def\key#1{{\setupmarkupstyle{key}%
|
|
|
- \nohyphenation
|
|
|
- \ifmonospace\else\tt\fi
|
|
|
- #1}\null}
|
|
|
-
|
|
|
-% ctrl is no longer a Texinfo command.
|
|
|
-\def\ctrl #1{{\tt \rawbackslash \hat}#1}
|
|
|
-
|
|
|
-% @file, @option are the same as @samp.
|
|
|
-\let\file=\samp
|
|
|
-\let\option=\samp
|
|
|
+% @indicateurl is \samp, that is, with quotes.
|
|
|
+\let\indicateurl=\samp
|
|
|
|
|
|
-% @code is a modification of @t,
|
|
|
-% which makes spaces the same size as normal in the surrounding text.
|
|
|
+% @code (and similar) prints in typewriter, but with spaces the same
|
|
|
+% size as normal in the surrounding text, without hyphenation, etc.
|
|
|
+% This is a subroutine for that.
|
|
|
\def\tclose#1{%
|
|
|
{%
|
|
|
% Change normal interword space to be same as for the current font.
|
|
|
@@ -2498,7 +2478,7 @@ end
|
|
|
% We *must* turn on hyphenation at `-' and `_' in @code.
|
|
|
% Otherwise, it is too hard to avoid overfull hboxes
|
|
|
% in the Emacs manual, the Library manual, etc.
|
|
|
-
|
|
|
+%
|
|
|
% Unfortunately, TeX uses one parameter (\hyphenchar) to control
|
|
|
% both hyphenation at - and hyphenation within words.
|
|
|
% We must therefore turn them both off (\tclose does that)
|
|
|
@@ -2562,6 +2542,13 @@ end
|
|
|
\fi\fi
|
|
|
}
|
|
|
|
|
|
+% For @command, @env, @file, @option quotes seem unnecessary,
|
|
|
+% so use \code rather than \samp.
|
|
|
+\let\command=\code
|
|
|
+\let\env=\code
|
|
|
+\let\file=\code
|
|
|
+\let\option=\code
|
|
|
+
|
|
|
% @uref (abbreviation for `urlref') takes an optional (comma-separated)
|
|
|
% second argument specifying the text to display and an optional third
|
|
|
% arg as text to display instead of (rather than in addition to) the url
|
|
|
@@ -2741,10 +2728,24 @@ end
|
|
|
\else{\tclose{\kbdfont\setupmarkupstyle{kbd}\look}}\fi
|
|
|
\else{\tclose{\kbdfont\setupmarkupstyle{kbd}\look}}\fi}
|
|
|
|
|
|
-% For @indicateurl, @env, @command quotes seem unnecessary, so use \code.
|
|
|
-\let\indicateurl=\code
|
|
|
-\let\env=\code
|
|
|
-\let\command=\code
|
|
|
+% definition of @key that produces a lozenge. Doesn't adjust to text size.
|
|
|
+%\setfont\keyrm\rmshape{8}{1000}{OT1}
|
|
|
+%\font\keysy=cmsy9
|
|
|
+%\def\key#1{{\keyrm\textfont2=\keysy \leavevmode\hbox{%
|
|
|
+% \raise0.4pt\hbox{\angleleft}\kern-.08em\vtop{%
|
|
|
+% \vbox{\hrule\kern-0.4pt
|
|
|
+% \hbox{\raise0.4pt\hbox{\vphantom{\angleleft}}#1}}%
|
|
|
+% \kern-0.4pt\hrule}%
|
|
|
+% \kern-.06em\raise0.4pt\hbox{\angleright}}}}
|
|
|
+
|
|
|
+% definition of @key with no lozenge. If the current font is already
|
|
|
+% monospace, don't change it; that way, we respect @kbdinputstyle. But
|
|
|
+% if it isn't monospace, then use \tt.
|
|
|
+%
|
|
|
+\def\key#1{{\setupmarkupstyle{key}%
|
|
|
+ \nohyphenation
|
|
|
+ \ifmonospace\else\tt\fi
|
|
|
+ #1}\null}
|
|
|
|
|
|
% @clicksequence{File @click{} Open ...}
|
|
|
\def\clicksequence#1{\begingroup #1\endgroup}
|
|
|
@@ -2852,6 +2853,9 @@ end
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+% ctrl is no longer a Texinfo command, but leave this definition for fun.
|
|
|
+\def\ctrl #1{{\tt \rawbackslash \hat}#1}
|
|
|
+
|
|
|
% @inlinefmt{FMTNAME,PROCESSED-TEXT} and @inlineraw{FMTNAME,RAW-TEXT}.
|
|
|
% Ignore unless FMTNAME == tex; then it is like @iftex and @tex,
|
|
|
% except specified as a normal braced arg, so no newlines to worry about.
|
|
|
@@ -3142,12 +3146,17 @@ end
|
|
|
% hopefully nobody will notice/care.
|
|
|
\edef\ecsize{\csname\curfontsize ecsize\endcsname}%
|
|
|
\edef\nominalsize{\csname\curfontsize nominalsize\endcsname}%
|
|
|
- \ifx\curfontstyle\bfstylename
|
|
|
- % bold:
|
|
|
- \font\thisecfont = ecb\ifusingit{i}{x}\ecsize \space at \nominalsize
|
|
|
+ \ifmonospace
|
|
|
+ % typewriter:
|
|
|
+ \font\thisecfont = ectt\ecsize \space at \nominalsize
|
|
|
\else
|
|
|
- % regular:
|
|
|
- \font\thisecfont = ec\ifusingit{ti}{rm}\ecsize \space at \nominalsize
|
|
|
+ \ifx\curfontstyle\bfstylename
|
|
|
+ % bold:
|
|
|
+ \font\thisecfont = ecb\ifusingit{i}{x}\ecsize \space at \nominalsize
|
|
|
+ \else
|
|
|
+ % regular:
|
|
|
+ \font\thisecfont = ec\ifusingit{ti}{rm}\ecsize \space at \nominalsize
|
|
|
+ \fi
|
|
|
\fi
|
|
|
\thisecfont
|
|
|
}
|
|
|
@@ -3260,6 +3269,20 @@ end
|
|
|
\finishedtitlepagetrue
|
|
|
}
|
|
|
|
|
|
+% Settings used for typesetting titles: no hyphenation, no indentation,
|
|
|
+% don't worry much about spacing, ragged right. This should be used
|
|
|
+% inside a \vbox, and fonts need to be set appropriately first. Because
|
|
|
+% it is always used for titles, nothing else, we call \rmisbold. \par
|
|
|
+% should be specified before the end of the \vbox, since a vbox is a group.
|
|
|
+%
|
|
|
+\def\raggedtitlesettings{%
|
|
|
+ \rmisbold
|
|
|
+ \hyphenpenalty=10000
|
|
|
+ \parindent=0pt
|
|
|
+ \tolerance=5000
|
|
|
+ \ptexraggedright
|
|
|
+}
|
|
|
+
|
|
|
% Macros to be used within @titlepage:
|
|
|
|
|
|
\let\subtitlerm=\tenrm
|
|
|
@@ -3267,7 +3290,7 @@ end
|
|
|
|
|
|
\parseargdef\title{%
|
|
|
\checkenv\titlepage
|
|
|
- \leftline{\titlefonts\rmisbold #1}
|
|
|
+ \vbox{\titlefonts \raggedtitlesettings #1\par}%
|
|
|
% print a rule at the page bottom also.
|
|
|
\finishedtitlepagefalse
|
|
|
\vskip4pt \hrule height 4pt width \hsize \vskip4pt
|
|
|
@@ -4204,7 +4227,7 @@ end
|
|
|
}
|
|
|
\def\ifsetfail{\doignore{ifset}}
|
|
|
|
|
|
-% @ifclear VAR ... @end ifclear reads the `...' iff VAR has never been
|
|
|
+% @ifclear VAR ... @end executes the `...' iff VAR has never been
|
|
|
% defined with @set, or has been undefined with @clear.
|
|
|
%
|
|
|
% The `\else' inside the `\doifset' parameter is a trick to reuse the
|
|
|
@@ -4215,6 +4238,35 @@ end
|
|
|
\def\ifclear{\parsearg{\doifset{\else \let\next=\ifclearfail}}}
|
|
|
\def\ifclearfail{\doignore{ifclear}}
|
|
|
|
|
|
+% @ifcommandisdefined CMD ... @end executes the `...' if CMD (written
|
|
|
+% without the @) is in fact defined. We can only feasibly check at the
|
|
|
+% TeX level, so something like `mathcode' is going to considered
|
|
|
+% defined even though it is not a Texinfo command.
|
|
|
+%
|
|
|
+\makecond{ifcommanddefined}
|
|
|
+\def\ifcommanddefined{\parsearg{\doifcmddefined{\let\next=\ifcmddefinedfail}}}
|
|
|
+%
|
|
|
+\def\doifcmddefined#1#2{{%
|
|
|
+ \makevalueexpandable
|
|
|
+ \let\next=\empty
|
|
|
+ \expandafter\ifx\csname #2\endcsname\relax
|
|
|
+ #1% If not defined, \let\next as above.
|
|
|
+ \fi
|
|
|
+ \expandafter
|
|
|
+ }\next
|
|
|
+}
|
|
|
+\def\ifcmddefinedfail{\doignore{ifcommanddefined}}
|
|
|
+
|
|
|
+% @ifcommandnotdefined CMD ... handlded similar to @ifclear above.
|
|
|
+\makecond{ifcommandnotdefined}
|
|
|
+\def\ifcommandnotdefined{%
|
|
|
+ \parsearg{\doifcmddefined{\else \let\next=\ifcmdnotdefinedfail}}}
|
|
|
+\def\ifcmdnotdefinedfail{\doignore{ifcommandnotdefined}}
|
|
|
+
|
|
|
+% Set the `txicommandconditionals' variable, so documents have a way to
|
|
|
+% test if the @ifcommand...defined conditionals are available.
|
|
|
+\set txicommandconditionals
|
|
|
+
|
|
|
% @dircategory CATEGORY -- specify a category of the dir file
|
|
|
% which this file should belong to. Ignore this in TeX.
|
|
|
\let\dircategory=\comment
|
|
|
@@ -4451,6 +4503,7 @@ end
|
|
|
\definedummyword\guillemetright
|
|
|
\definedummyword\guilsinglleft
|
|
|
\definedummyword\guilsinglright
|
|
|
+ \definedummyword\lbracechar
|
|
|
\definedummyword\leq
|
|
|
\definedummyword\minus
|
|
|
\definedummyword\ogonek
|
|
|
@@ -4463,6 +4516,7 @@ end
|
|
|
\definedummyword\quoteleft
|
|
|
\definedummyword\quoteright
|
|
|
\definedummyword\quotesinglbase
|
|
|
+ \definedummyword\rbracechar
|
|
|
\definedummyword\result
|
|
|
\definedummyword\textdegree
|
|
|
%
|
|
|
@@ -4514,6 +4568,7 @@ end
|
|
|
\definedummyword\t
|
|
|
%
|
|
|
% Commands that take arguments.
|
|
|
+ \definedummyword\abbr
|
|
|
\definedummyword\acronym
|
|
|
\definedummyword\anchor
|
|
|
\definedummyword\cite
|
|
|
@@ -4525,7 +4580,9 @@ end
|
|
|
\definedummyword\emph
|
|
|
\definedummyword\env
|
|
|
\definedummyword\file
|
|
|
+ \definedummyword\image
|
|
|
\definedummyword\indicateurl
|
|
|
+ \definedummyword\inforef
|
|
|
\definedummyword\kbd
|
|
|
\definedummyword\key
|
|
|
\definedummyword\math
|
|
|
@@ -4572,7 +4629,10 @@ end
|
|
|
% content at all. So for index sorting, we map @{ and @} to strings
|
|
|
% starting with |, since that ASCII character is between ASCII { and }.
|
|
|
\def\{{|a}%
|
|
|
+ \def\lbracechar{|a}%
|
|
|
+ %
|
|
|
\def\}{|b}%
|
|
|
+ \def\rbracechar{|b}%
|
|
|
%
|
|
|
% Non-English letters.
|
|
|
\def\AA{AA}%
|
|
|
@@ -5533,14 +5593,6 @@ end
|
|
|
|
|
|
% Define @majorheading, @heading and @subheading
|
|
|
|
|
|
-% NOTE on use of \vbox for chapter headings, section headings, and such:
|
|
|
-% 1) We use \vbox rather than the earlier \line to permit
|
|
|
-% overlong headings to fold.
|
|
|
-% 2) \hyphenpenalty is set to 10000 because hyphenation in a
|
|
|
-% heading is obnoxious; this forbids it.
|
|
|
-% 3) Likewise, headings look best if no \parindent is used, and
|
|
|
-% if justification is not attempted. Hence \raggedright.
|
|
|
-
|
|
|
\def\majorheading{%
|
|
|
{\advance\chapheadingskip by 10pt \chapbreak }%
|
|
|
\parsearg\chapheadingzzz
|
|
|
@@ -5548,10 +5600,8 @@ end
|
|
|
|
|
|
\def\chapheading{\chapbreak \parsearg\chapheadingzzz}
|
|
|
\def\chapheadingzzz#1{%
|
|
|
- {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000
|
|
|
- \parindent=0pt\ptexraggedright
|
|
|
- \rmisbold #1\hfill}}%
|
|
|
- \bigskip \par\penalty 200\relax
|
|
|
+ \vbox{\chapfonts \raggedtitlesettings #1\par}%
|
|
|
+ \nobreak\bigskip \nobreak
|
|
|
\suppressfirstparagraphindent
|
|
|
}
|
|
|
|
|
|
@@ -5710,8 +5760,7 @@ end
|
|
|
%
|
|
|
% Typeset the actual heading.
|
|
|
\nobreak % Avoid page breaks at the interline glue.
|
|
|
- \vbox{\hyphenpenalty=10000 \tolerance=5000 \parindent=0pt \ptexraggedright
|
|
|
- \hangindent=\wd0 \centerparametersmaybe
|
|
|
+ \vbox{\raggedtitlesettings \hangindent=\wd0 \centerparametersmaybe
|
|
|
\unhbox0 #1\par}%
|
|
|
}%
|
|
|
\nobreak\bigskip % no page break after a chapter title
|
|
|
@@ -5733,18 +5782,18 @@ end
|
|
|
\def\setchapterstyle #1 {\csname CHAPF#1\endcsname}
|
|
|
%
|
|
|
\def\unnchfopen #1{%
|
|
|
-\chapoddpage {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000
|
|
|
- \parindent=0pt\ptexraggedright
|
|
|
- \rmisbold #1\hfill}}\bigskip \par\nobreak
|
|
|
+ \chapoddpage
|
|
|
+ \vbox{\chapfonts \raggedtitlesettings #1\par}%
|
|
|
+ \nobreak\bigskip\nobreak
|
|
|
}
|
|
|
\def\chfopen #1#2{\chapoddpage {\chapfonts
|
|
|
\vbox to 3in{\vfil \hbox to\hsize{\hfil #2} \hbox to\hsize{\hfil #1} \vfil}}%
|
|
|
\par\penalty 5000 %
|
|
|
}
|
|
|
\def\centerchfopen #1{%
|
|
|
-\chapoddpage {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000
|
|
|
- \parindent=0pt
|
|
|
- \hfill {\rmisbold #1}\hfill}}\bigskip \par\nobreak
|
|
|
+ \chapoddpage
|
|
|
+ \vbox{\chapfonts \raggedtitlesettings \hfill #1\hfill}%
|
|
|
+ \nobreak\bigskip \nobreak
|
|
|
}
|
|
|
\def\CHAPFopen{%
|
|
|
\global\let\chapmacro=\chfopen
|
|
|
@@ -7807,7 +7856,7 @@ end
|
|
|
\fi\fi
|
|
|
}
|
|
|
|
|
|
-
|
|
|
+%
|
|
|
% @xref, @pxref, and @ref generate cross-references. For \xrefX, #1 is
|
|
|
% the node name, #2 the name of the Info cross-reference, #3 the printed
|
|
|
% node name, #4 the name of the Info file, #5 the name of the printed
|
|
|
@@ -7817,16 +7866,21 @@ end
|
|
|
\def\xref#1{\putwordSee{} \xrefX[#1,,,,,,,]}
|
|
|
\def\ref#1{\xrefX[#1,,,,,,,]}
|
|
|
%
|
|
|
-\newbox\topbox
|
|
|
+\newbox\toprefbox
|
|
|
\newbox\printedrefnamebox
|
|
|
+\newbox\infofilenamebox
|
|
|
\newbox\printedmanualbox
|
|
|
%
|
|
|
\def\xrefX[#1,#2,#3,#4,#5,#6]{\begingroup
|
|
|
\unsepspaces
|
|
|
%
|
|
|
+ % Get args without leading/trailing spaces.
|
|
|
\def\printedrefname{\ignorespaces #3}%
|
|
|
\setbox\printedrefnamebox = \hbox{\printedrefname\unskip}%
|
|
|
%
|
|
|
+ \def\infofilename{\ignorespaces #4}%
|
|
|
+ \setbox\infofilenamebox = \hbox{\infofilename\unskip}%
|
|
|
+ %
|
|
|
\def\printedmanual{\ignorespaces #5}%
|
|
|
\setbox\printedmanualbox = \hbox{\printedmanual\unskip}%
|
|
|
%
|
|
|
@@ -7861,11 +7915,18 @@ end
|
|
|
\turnoffactive
|
|
|
\makevalueexpandable
|
|
|
% This expands tokens, so do it after making catcode changes, so _
|
|
|
- % etc. don't get their TeX definitions.
|
|
|
+ % etc. don't get their TeX definitions. This ignores all spaces in
|
|
|
+ % #4, including (wrongly) those in the middle of the filename.
|
|
|
\getfilename{#4}%
|
|
|
%
|
|
|
+ % This (wrongly) does not take account of leading or trailing
|
|
|
+ % spaces in #1, which should be ignored.
|
|
|
\edef\pdfxrefdest{#1}%
|
|
|
- \txiescapepdf\pdfxrefdest
|
|
|
+ \ifx\pdfxrefdest\empty
|
|
|
+ \def\pdfxrefdest{Top}% no empty targets
|
|
|
+ \else
|
|
|
+ \txiescapepdf\pdfxrefdest % escape PDF special chars
|
|
|
+ \fi
|
|
|
%
|
|
|
\leavevmode
|
|
|
\startlink attr{/Border [0 0 0]}%
|
|
|
@@ -7898,7 +7959,7 @@ end
|
|
|
\printedrefname
|
|
|
\fi
|
|
|
%
|
|
|
- % if the user also gave the printed manual name (fifth arg), append
|
|
|
+ % If the user also gave the printed manual name (fifth arg), append
|
|
|
% "in MANUALNAME".
|
|
|
\ifdim \wd\printedmanualbox > 0pt
|
|
|
\space \putwordin{} \cite{\printedmanual}%
|
|
|
@@ -7913,32 +7974,20 @@ end
|
|
|
% this is a loss. Therefore, we give the text of the node name
|
|
|
% again, so it is as if TeX is seeing it for the first time.
|
|
|
%
|
|
|
- % Cross-manual reference. Only include the "Section ``foo'' in" if
|
|
|
- % the foo is neither missing or Top. Thus, @xref{,,,foo,The Foo Manual}
|
|
|
- % outputs simply "see The Foo Manual".
|
|
|
\ifdim \wd\printedmanualbox > 0pt
|
|
|
- % What is the 7sp about? The idea is that we also want to omit
|
|
|
- % the Section part if we would be printing "Top", since they are
|
|
|
- % clearly trying to refer to the whole manual. But, this being
|
|
|
- % TeX, we can't easily compare strings while ignoring the possible
|
|
|
- % spaces before and after in the input. By adding the arbitrary
|
|
|
- % 7sp, we make it much less likely that a real node name would
|
|
|
- % happen to have the same width as "Top" (e.g., in a monospaced font).
|
|
|
- % I hope it will never happen in practice.
|
|
|
+ % Cross-manual reference with a printed manual name.
|
|
|
%
|
|
|
- % For the same basic reason, we retypeset the "Top" at every
|
|
|
- % reference, since the current font is indeterminate.
|
|
|
+ \crossmanualxref{\cite{\printedmanual\unskip}}%
|
|
|
+ %
|
|
|
+ \else\ifdim \wd\infofilenamebox > 0pt
|
|
|
+ % Cross-manual reference with only an info filename (arg 4), no
|
|
|
+ % printed manual name (arg 5). This is essentially the same as
|
|
|
+ % the case above; we output the filename, since we have nothing else.
|
|
|
%
|
|
|
- \setbox\topbox = \hbox{Top\kern7sp}%
|
|
|
- \setbox2 = \hbox{\ignorespaces \printedrefname \unskip \kern7sp}%
|
|
|
- \ifdim \wd2 > 7sp
|
|
|
- \ifdim \wd2 = \wd\topbox \else
|
|
|
- \putwordSection{} ``\printedrefname'' \putwordin{}\space
|
|
|
- \fi
|
|
|
- \fi
|
|
|
- \cite{\printedmanual}%
|
|
|
+ \crossmanualxref{\code{\infofilename\unskip}}%
|
|
|
+ %
|
|
|
\else
|
|
|
- % Reference in this manual.
|
|
|
+ % Reference within this manual.
|
|
|
%
|
|
|
% _ (for example) has to be the character _ for the purposes of the
|
|
|
% control sequence corresponding to the node, but it has to expand
|
|
|
@@ -7959,11 +8008,37 @@ end
|
|
|
%
|
|
|
% output the `page 3'.
|
|
|
\turnoffactive \putwordpage\tie\refx{#1-pg}{}%
|
|
|
- \fi
|
|
|
+ \fi\fi
|
|
|
\fi
|
|
|
\endlink
|
|
|
\endgroup}
|
|
|
|
|
|
+% Output a cross-manual xref to #1. Used just above (twice).
|
|
|
+%
|
|
|
+% Only include the text "Section ``foo'' in" if the foo is neither
|
|
|
+% missing or Top. Thus, @xref{,,,foo,The Foo Manual} outputs simply
|
|
|
+% "see The Foo Manual", the idea being to refer to the whole manual.
|
|
|
+%
|
|
|
+% But, this being TeX, we can't easily compare our node name against the
|
|
|
+% string "Top" while ignoring the possible spaces before and after in
|
|
|
+% the input. By adding the arbitrary 7sp below, we make it much less
|
|
|
+% likely that a real node name would have the same width as "Top" (e.g.,
|
|
|
+% in a monospaced font). Hopefully it will never happen in practice.
|
|
|
+%
|
|
|
+% For the same basic reason, we retypeset the "Top" at every
|
|
|
+% reference, since the current font is indeterminate.
|
|
|
+%
|
|
|
+\def\crossmanualxref#1{%
|
|
|
+ \setbox\toprefbox = \hbox{Top\kern7sp}%
|
|
|
+ \setbox2 = \hbox{\ignorespaces \printedrefname \unskip \kern7sp}%
|
|
|
+ \ifdim \wd2 > 7sp % nonempty?
|
|
|
+ \ifdim \wd2 = \wd\toprefbox \else % same as Top?
|
|
|
+ \putwordSection{} ``\printedrefname'' \putwordin{}\space
|
|
|
+ \fi
|
|
|
+ \fi
|
|
|
+ #1%
|
|
|
+}
|
|
|
+
|
|
|
% This macro is called from \xrefX for the `[nodename]' part of xref
|
|
|
% output. It's a separate macro only so it can be changed more easily,
|
|
|
% since square brackets don't work well in some documents. Particularly
|