version 1.1.1.3, 2012/10/09 09:22:28
|
version 1.1.1.4, 2013/07/21 23:54:38
|
Line 3
|
Line 3
|
% Load plain if necessary, i.e., if running under initex. |
% Load plain if necessary, i.e., if running under initex. |
\expandafter\ifx\csname fmtname\endcsname\relax\input plain\fi |
\expandafter\ifx\csname fmtname\endcsname\relax\input plain\fi |
% |
% |
\def\texinfoversion{2012-03-11.15} | \def\texinfoversion{2012-11-08.11} |
% |
% |
% Copyright 1985, 1986, 1988, 1990, 1991, 1992, 1993, 1994, 1995, |
% Copyright 1985, 1986, 1988, 1990, 1991, 1992, 1993, 1994, 1995, |
% 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, |
% 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, |
Line 28
|
Line 28
|
% |
% |
% Please try the latest version of texinfo.tex before submitting bug |
% Please try the latest version of texinfo.tex before submitting bug |
% reports; you can get the latest version from: |
% reports; you can get the latest version from: |
% http://www.gnu.org/software/texinfo/ (the Texinfo home page), or | % http://ftp.gnu.org/gnu/texinfo/ (the Texinfo release area), or |
% ftp://tug.org/tex/texinfo.tex | % http://ftpmirror.gnu.org/texinfo/ (same, via a mirror), or |
% (and all CTAN mirrors, see http://www.ctan.org). | % http://www.gnu.org/software/texinfo/ (the Texinfo home page) |
% The texinfo.tex in any given distribution could well be out |
% The texinfo.tex in any given distribution could well be out |
% of date, so if that's what you're using, please check. |
% of date, so if that's what you're using, please check. |
% |
% |
Line 594
|
Line 594
|
\def\:{\spacefactor=1000 } |
\def\:{\spacefactor=1000 } |
|
|
% @* forces a line break. |
% @* forces a line break. |
\def\*{\hfil\break\hbox{}\ignorespaces} | \def\*{\unskip\hfil\break\hbox{}\ignorespaces} |
|
|
% @/ allows a line break. |
% @/ allows a line break. |
\let\/=\allowbreak |
\let\/=\allowbreak |
Line 1117 where each line of input produces a line of output.}
|
Line 1117 where each line of input produces a line of output.}
|
% #1 is a control sequence in which to do the replacements, |
% #1 is a control sequence in which to do the replacements, |
% which we \xdef. |
% which we \xdef. |
\def\txiescapepdf#1{% |
\def\txiescapepdf#1{% |
\ifx\pdfescapestring\relax | \ifx\pdfescapestring\thisisundefined |
% No primitive available; should we give a warning or log? |
% No primitive available; should we give a warning or log? |
% Many times it won't matter. |
% Many times it won't matter. |
\else |
\else |
Line 1367 output) for that.)}
|
Line 1367 output) for that.)}
|
\def\skipspaces#1{\def\PP{#1}\def\D{|}% |
\def\skipspaces#1{\def\PP{#1}\def\D{|}% |
\ifx\PP\D\let\nextsp\relax |
\ifx\PP\D\let\nextsp\relax |
\else\let\nextsp\skipspaces |
\else\let\nextsp\skipspaces |
\ifx\p\space\else\addtokens{\filename}{\PP}% | \addtokens{\filename}{\PP}% |
\advance\filenamelength by 1 | \advance\filenamelength by 1 |
\fi | |
\fi |
\fi |
\nextsp} |
\nextsp} |
\def\getfilename#1{% |
\def\getfilename#1{% |
Line 1475 output) for that.)}
|
Line 1474 output) for that.)}
|
\def\ttsl{\setfontstyle{ttsl}} |
\def\ttsl{\setfontstyle{ttsl}} |
|
|
|
|
% Default leading. |
|
\newdimen\textleading \textleading = 13.2pt |
|
|
|
% Set the baselineskip to #1, and the lineskip and strut size |
% Set the baselineskip to #1, and the lineskip and strut size |
% correspondingly. There is no deep meaning behind these magic numbers |
% correspondingly. There is no deep meaning behind these magic numbers |
% used as factors; they just match (closely enough) what Knuth defined. |
% used as factors; they just match (closely enough) what Knuth defined. |
Line 1489 output) for that.)}
|
Line 1485 output) for that.)}
|
% can get a sort of poor man's double spacing by redefining this. |
% can get a sort of poor man's double spacing by redefining this. |
\def\baselinefactor{1} |
\def\baselinefactor{1} |
% |
% |
|
\newdimen\textleading |
\def\setleading#1{% |
\def\setleading#1{% |
\dimen0 = #1\relax |
\dimen0 = #1\relax |
\normalbaselineskip = \baselinefactor\dimen0 |
\normalbaselineskip = \baselinefactor\dimen0 |
Line 1761 end
|
Line 1758 end
|
\fi\fi |
\fi\fi |
|
|
|
|
% Set the font macro #1 to the font named #2, adding on the | % Set the font macro #1 to the font named \fontprefix#2. |
% specified font prefix (normally `cm'). | |
% #3 is the font's design size, #4 is a scale factor, #5 is the CMap |
% #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 | % encoding (only OT1, OT1IT and OT1TT are allowed, or empty to omit). |
% empty to omit). | % Example: |
| % #1 = \textrm |
| % #2 = \rmshape |
| % #3 = 10 |
| % #4 = \mainmagstep |
| % #5 = OT1 |
| % |
\def\setfont#1#2#3#4#5{% |
\def\setfont#1#2#3#4#5{% |
\font#1=\fontprefix#2#3 scaled #4 |
\font#1=\fontprefix#2#3 scaled #4 |
\csname cmap#5\endcsname#1% |
\csname cmap#5\endcsname#1% |
} |
} |
% This is what gets called when #5 of \setfont is empty. |
% This is what gets called when #5 of \setfont is empty. |
\let\cmap\gobble |
\let\cmap\gobble |
% emacs-page end of cmaps | % |
| % (end of cmaps) |
|
|
% Use cm as the default font prefix. |
% Use cm as the default font prefix. |
% To specify the font prefix, you must define \fontprefix |
% To specify the font prefix, you must define \fontprefix |
Line 1782 end
|
Line 1785 end
|
\fi |
\fi |
% Support font families that don't use the same naming scheme as CM. |
% Support font families that don't use the same naming scheme as CM. |
\def\rmshape{r} |
\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\bfshape{b} |
\def\bxshape{bx} |
\def\bxshape{bx} |
\def\ttshape{tt} |
\def\ttshape{tt} |
Line 1797 end
|
Line 1800 end
|
\def\scshape{csc} |
\def\scshape{csc} |
\def\scbshape{csc} |
\def\scbshape{csc} |
|
|
% Definitions for a main text size of 11pt. This is the default in | % Definitions for a main text size of 11pt. (The default in Texinfo.) |
% Texinfo. | |
% |
% |
\def\definetextfontsizexi{% |
\def\definetextfontsizexi{% |
% Text fonts (11.2pt, magstep1). |
% Text fonts (11.2pt, magstep1). |
Line 1923 end
|
Line 1925 end
|
\textleading = 13.2pt % line spacing for 11pt CM |
\textleading = 13.2pt % line spacing for 11pt CM |
\textfonts % reset the current fonts |
\textfonts % reset the current fonts |
\rm |
\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 |
% Definitions to make the main text be 10pt Computer Modern, with |
Line 2055 end
|
Line 2057 end
|
\textleading = 12pt % line spacing for 10pt CM |
\textleading = 12pt % line spacing for 10pt CM |
\textfonts % reset the current fonts |
\textfonts % reset the current fonts |
\rm |
\rm |
} % end of 10pt text font size definitions | } % end of 10pt text font size definitions, \definetextfontsizex |
|
|
|
|
% We provide the user-level command |
% We provide the user-level command |
Line 2270 end
|
Line 2272 end
|
|
|
\gdef\markupsetcodequoteleft{\let`\codequoteleft} |
\gdef\markupsetcodequoteleft{\let`\codequoteleft} |
\gdef\markupsetcodequoteright{\let'\codequoteright} |
\gdef\markupsetcodequoteright{\let'\codequoteright} |
|
|
\gdef\markupsetnoligaturesquoteleft{\let`\noligaturesquoteleft} |
|
} |
} |
|
|
\let\markupsetuplqcode \markupsetcodequoteleft |
\let\markupsetuplqcode \markupsetcodequoteleft |
Line 2280 end
|
Line 2280 end
|
\let\markupsetuplqexample \markupsetcodequoteleft |
\let\markupsetuplqexample \markupsetcodequoteleft |
\let\markupsetuprqexample \markupsetcodequoteright |
\let\markupsetuprqexample \markupsetcodequoteright |
% |
% |
|
\let\markupsetuplqkbd \markupsetcodequoteleft |
|
\let\markupsetuprqkbd \markupsetcodequoteright |
|
% |
\let\markupsetuplqsamp \markupsetcodequoteleft |
\let\markupsetuplqsamp \markupsetcodequoteleft |
\let\markupsetuprqsamp \markupsetcodequoteright |
\let\markupsetuprqsamp \markupsetcodequoteright |
% |
% |
Line 2289 end
|
Line 2292 end
|
\let\markupsetuplqverbatim \markupsetcodequoteleft |
\let\markupsetuplqverbatim \markupsetcodequoteleft |
\let\markupsetuprqverbatim \markupsetcodequoteright |
\let\markupsetuprqverbatim \markupsetcodequoteright |
|
|
\let\markupsetuplqkbd \markupsetnoligaturesquoteleft |
|
|
|
% Allow an option to not use regular directed right quote/apostrophe |
% Allow an option to not use regular directed right quote/apostrophe |
% (char 0x27), but instead the undirected quote from cmtt (char 0x0d). |
% (char 0x27), but instead the undirected quote from cmtt (char 0x0d). |
% The undirected quote is ugly, so don't make it the default, but it |
% The undirected quote is ugly, so don't make it the default, but it |
Line 2380 end
|
Line 2381 end
|
\aftersmartic |
\aftersmartic |
} |
} |
|
|
% like \smartslanted except unconditionally uses \ttsl, and no ic. | % Unconditional use \ttsl, and no ic. @var is set to this for defuns. |
% @var is set to this for defun arguments. | |
\def\ttslanted#1{{\ttsl #1}} |
\def\ttslanted#1{{\ttsl #1}} |
|
|
% @cite is like \smartslanted except unconditionally use \sl. We never want |
% @cite is like \smartslanted except unconditionally use \sl. We never want |
Line 2446 end
|
Line 2446 end
|
% @samp. |
% @samp. |
\def\samp#1{{\setupmarkupstyle{samp}\lq\tclose{#1}\rq\null}} |
\def\samp#1{{\setupmarkupstyle{samp}\lq\tclose{#1}\rq\null}} |
|
|
% definition of @key that produces a lozenge. Doesn't adjust to text size. | % @indicateurl is \samp, that is, with quotes. |
%\setfont\keyrm\rmshape{8}{1000}{OT1} | \let\indicateurl=\samp |
%\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 | % @code (and similar) prints in typewriter, but with spaces the same |
% monospace, don't change it; that way, we respect @kbdinputstyle. But | % size as normal in the surrounding text, without hyphenation, etc. |
% if it isn't monospace, then use \tt. | % This is a subroutine for that. |
% | |
\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 | |
| |
% @code is a modification of @t, | |
% which makes spaces the same size as normal in the surrounding text. | |
\def\tclose#1{% |
\def\tclose#1{% |
{% |
{% |
% Change normal interword space to be same as for the current font. |
% Change normal interword space to be same as for the current font. |
Line 2498 end
|
Line 2476 end
|
% We *must* turn on hyphenation at `-' and `_' in @code. |
% We *must* turn on hyphenation at `-' and `_' in @code. |
% Otherwise, it is too hard to avoid overfull hboxes |
% Otherwise, it is too hard to avoid overfull hboxes |
% in the Emacs manual, the Library manual, etc. |
% in the Emacs manual, the Library manual, etc. |
| % |
% Unfortunately, TeX uses one parameter (\hyphenchar) to control |
% Unfortunately, TeX uses one parameter (\hyphenchar) to control |
% both hyphenation at - and hyphenation within words. |
% both hyphenation at - and hyphenation within words. |
% We must therefore turn them both off (\tclose does that) |
% We must therefore turn them both off (\tclose does that) |
Line 2562 end
|
Line 2540 end
|
\fi\fi |
\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) |
% @uref (abbreviation for `urlref') takes an optional (comma-separated) |
% second argument specifying the text to display and an optional third |
% 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 |
% arg as text to display instead of (rather than in addition to) the url |
Line 2708 end
|
Line 2693 end
|
\let\email=\uref |
\let\email=\uref |
\fi |
\fi |
|
|
% @kbd is like @code, except that if the argument is just one @key command, |
|
% then @kbd has no effect. |
|
\def\kbd#1{{\setupmarkupstyle{kbd}\def\look{#1}\expandafter\kbdfoo\look??\par}} |
|
|
|
% @kbdinputstyle -- arg is `distinct' (@kbd uses slanted tty font always), |
% @kbdinputstyle -- arg is `distinct' (@kbd uses slanted tty font always), |
% `example' (@kbd uses ttsl only inside of @example and friends), |
% `example' (@kbd uses ttsl only inside of @example and friends), |
% or `code' (@kbd uses normal tty font always). |
% or `code' (@kbd uses normal tty font always). |
Line 2735 end
|
Line 2716 end
|
% Default is `distinct'. |
% Default is `distinct'. |
\kbdinputstyle distinct |
\kbdinputstyle distinct |
|
|
|
% @kbd is like @code, except that if the argument is just one @key command, |
|
% then @kbd has no effect. |
|
\def\kbd#1{{\def\look{#1}\expandafter\kbdsub\look??\par}} |
|
|
\def\xkey{\key} |
\def\xkey{\key} |
\def\kbdfoo#1#2#3\par{\def\one{#1}\def\three{#3}\def\threex{??}% | \def\kbdsub#1#2#3\par{% |
\ifx\one\xkey\ifx\threex\three \key{#2}% | \def\one{#1}\def\three{#3}\def\threex{??}% |
\else{\tclose{\kbdfont\setupmarkupstyle{kbd}\look}}\fi | \ifx\one\xkey\ifx\threex\three \key{#2}% |
\else{\tclose{\kbdfont\setupmarkupstyle{kbd}\look}}\fi} | \else{\tclose{\kbdfont\setupmarkupstyle{kbd}\look}}\fi |
| \else{\tclose{\kbdfont\setupmarkupstyle{kbd}\look}}\fi |
| } |
|
|
% For @indicateurl, @env, @command quotes seem unnecessary, so use \code. | % definition of @key that produces a lozenge. Doesn't adjust to text size. |
\let\indicateurl=\code | %\setfont\keyrm\rmshape{8}{1000}{OT1} |
\let\env=\code | %\font\keysy=cmsy9 |
\let\command=\code | %\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 ...} |
% @clicksequence{File @click{} Open ...} |
\def\clicksequence#1{\begingroup #1\endgroup} |
\def\clicksequence#1{\begingroup #1\endgroup} |
|
|
Line 2852 end
|
Line 2853 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}. |
% @inlinefmt{FMTNAME,PROCESSED-TEXT} and @inlineraw{FMTNAME,RAW-TEXT}. |
% Ignore unless FMTNAME == tex; then it is like @iftex and @tex, |
% Ignore unless FMTNAME == tex; then it is like @iftex and @tex, |
% except specified as a normal braced arg, so no newlines to worry about. |
% except specified as a normal braced arg, so no newlines to worry about. |
Line 3142 end
|
Line 3146 end
|
% hopefully nobody will notice/care. |
% hopefully nobody will notice/care. |
\edef\ecsize{\csname\curfontsize ecsize\endcsname}% |
\edef\ecsize{\csname\curfontsize ecsize\endcsname}% |
\edef\nominalsize{\csname\curfontsize nominalsize\endcsname}% |
\edef\nominalsize{\csname\curfontsize nominalsize\endcsname}% |
\ifx\curfontstyle\bfstylename | \ifmonospace |
% bold: | % typewriter: |
\font\thisecfont = ecb\ifusingit{i}{x}\ecsize \space at \nominalsize | \font\thisecfont = ectt\ecsize \space at \nominalsize |
\else |
\else |
% regular: | \ifx\curfontstyle\bfstylename |
\font\thisecfont = ec\ifusingit{ti}{rm}\ecsize \space at \nominalsize | % 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 |
\fi |
\thisecfont |
\thisecfont |
} |
} |
Line 3260 end
|
Line 3269 end
|
\finishedtitlepagetrue |
\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: |
% Macros to be used within @titlepage: |
|
|
\let\subtitlerm=\tenrm |
\let\subtitlerm=\tenrm |
Line 3267 end
|
Line 3290 end
|
|
|
\parseargdef\title{% |
\parseargdef\title{% |
\checkenv\titlepage |
\checkenv\titlepage |
\leftline{\titlefonts\rmisbold #1} | \vbox{\titlefonts \raggedtitlesettings #1\par}% |
% print a rule at the page bottom also. |
% print a rule at the page bottom also. |
\finishedtitlepagefalse |
\finishedtitlepagefalse |
\vskip4pt \hrule height 4pt width \hsize \vskip4pt |
\vskip4pt \hrule height 4pt width \hsize \vskip4pt |
Line 4204 end
|
Line 4227 end
|
} |
} |
\def\ifsetfail{\doignore{ifset}} |
\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. |
% defined with @set, or has been undefined with @clear. |
% |
% |
% The `\else' inside the `\doifset' parameter is a trick to reuse the |
% The `\else' inside the `\doifset' parameter is a trick to reuse the |
Line 4215 end
|
Line 4238 end
|
\def\ifclear{\parsearg{\doifset{\else \let\next=\ifclearfail}}} |
\def\ifclear{\parsearg{\doifset{\else \let\next=\ifclearfail}}} |
\def\ifclearfail{\doignore{ifclear}} |
\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 ... handled 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 |
% @dircategory CATEGORY -- specify a category of the dir file |
% which this file should belong to. Ignore this in TeX. |
% which this file should belong to. Ignore this in TeX. |
\let\dircategory=\comment |
\let\dircategory=\comment |
Line 4451 end
|
Line 4503 end
|
\definedummyword\guillemetright |
\definedummyword\guillemetright |
\definedummyword\guilsinglleft |
\definedummyword\guilsinglleft |
\definedummyword\guilsinglright |
\definedummyword\guilsinglright |
|
\definedummyword\lbracechar |
\definedummyword\leq |
\definedummyword\leq |
\definedummyword\minus |
\definedummyword\minus |
\definedummyword\ogonek |
\definedummyword\ogonek |
Line 4463 end
|
Line 4516 end
|
\definedummyword\quoteleft |
\definedummyword\quoteleft |
\definedummyword\quoteright |
\definedummyword\quoteright |
\definedummyword\quotesinglbase |
\definedummyword\quotesinglbase |
|
\definedummyword\rbracechar |
\definedummyword\result |
\definedummyword\result |
\definedummyword\textdegree |
\definedummyword\textdegree |
% |
% |
Line 4514 end
|
Line 4568 end
|
\definedummyword\t |
\definedummyword\t |
% |
% |
% Commands that take arguments. |
% Commands that take arguments. |
|
\definedummyword\abbr |
\definedummyword\acronym |
\definedummyword\acronym |
\definedummyword\anchor |
\definedummyword\anchor |
\definedummyword\cite |
\definedummyword\cite |
Line 4525 end
|
Line 4580 end
|
\definedummyword\emph |
\definedummyword\emph |
\definedummyword\env |
\definedummyword\env |
\definedummyword\file |
\definedummyword\file |
|
\definedummyword\image |
\definedummyword\indicateurl |
\definedummyword\indicateurl |
|
\definedummyword\inforef |
\definedummyword\kbd |
\definedummyword\kbd |
\definedummyword\key |
\definedummyword\key |
\definedummyword\math |
\definedummyword\math |
Line 4572 end
|
Line 4629 end
|
% content at all. So for index sorting, we map @{ and @} to strings |
% content at all. So for index sorting, we map @{ and @} to strings |
% starting with |, since that ASCII character is between ASCII { and }. |
% starting with |, since that ASCII character is between ASCII { and }. |
\def\{{|a}% |
\def\{{|a}% |
|
\def\lbracechar{|a}% |
|
% |
\def\}{|b}% |
\def\}{|b}% |
|
\def\rbracechar{|b}% |
% |
% |
% Non-English letters. |
% Non-English letters. |
\def\AA{AA}% |
\def\AA{AA}% |
Line 5533 end
|
Line 5593 end
|
|
|
% Define @majorheading, @heading and @subheading |
% 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{% |
\def\majorheading{% |
{\advance\chapheadingskip by 10pt \chapbreak }% |
{\advance\chapheadingskip by 10pt \chapbreak }% |
\parsearg\chapheadingzzz |
\parsearg\chapheadingzzz |
Line 5548 end
|
Line 5600 end
|
|
|
\def\chapheading{\chapbreak \parsearg\chapheadingzzz} |
\def\chapheading{\chapbreak \parsearg\chapheadingzzz} |
\def\chapheadingzzz#1{% |
\def\chapheadingzzz#1{% |
{\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000 | \vbox{\chapfonts \raggedtitlesettings #1\par}% |
\parindent=0pt\ptexraggedright | \nobreak\bigskip \nobreak |
\rmisbold #1\hfill}}% | |
\bigskip \par\penalty 200\relax | |
\suppressfirstparagraphindent |
\suppressfirstparagraphindent |
} |
} |
|
|
Line 5710 end
|
Line 5760 end
|
% |
% |
% Typeset the actual heading. |
% Typeset the actual heading. |
\nobreak % Avoid page breaks at the interline glue. |
\nobreak % Avoid page breaks at the interline glue. |
\vbox{\hyphenpenalty=10000 \tolerance=5000 \parindent=0pt \ptexraggedright | \vbox{\raggedtitlesettings \hangindent=\wd0 \centerparametersmaybe |
\hangindent=\wd0 \centerparametersmaybe | |
\unhbox0 #1\par}% |
\unhbox0 #1\par}% |
}% |
}% |
\nobreak\bigskip % no page break after a chapter title |
\nobreak\bigskip % no page break after a chapter title |
Line 5733 end
|
Line 5782 end
|
\def\setchapterstyle #1 {\csname CHAPF#1\endcsname} |
\def\setchapterstyle #1 {\csname CHAPF#1\endcsname} |
% |
% |
\def\unnchfopen #1{% |
\def\unnchfopen #1{% |
\chapoddpage {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000 | \chapoddpage |
\parindent=0pt\ptexraggedright | \vbox{\chapfonts \raggedtitlesettings #1\par}% |
\rmisbold #1\hfill}}\bigskip \par\nobreak | \nobreak\bigskip\nobreak |
} |
} |
\def\chfopen #1#2{\chapoddpage {\chapfonts |
\def\chfopen #1#2{\chapoddpage {\chapfonts |
\vbox to 3in{\vfil \hbox to\hsize{\hfil #2} \hbox to\hsize{\hfil #1} \vfil}}% |
\vbox to 3in{\vfil \hbox to\hsize{\hfil #2} \hbox to\hsize{\hfil #1} \vfil}}% |
\par\penalty 5000 % |
\par\penalty 5000 % |
} |
} |
\def\centerchfopen #1{% |
\def\centerchfopen #1{% |
\chapoddpage {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000 | \chapoddpage |
\parindent=0pt | \vbox{\chapfonts \raggedtitlesettings \hfill #1\hfill}% |
\hfill {\rmisbold #1}\hfill}}\bigskip \par\nobreak | \nobreak\bigskip \nobreak |
} |
} |
\def\CHAPFopen{% |
\def\CHAPFopen{% |
\global\let\chapmacro=\chfopen |
\global\let\chapmacro=\chfopen |
Line 6510 end
|
Line 6559 end
|
\makedispenvdef{quotation}{\quotationstart} |
\makedispenvdef{quotation}{\quotationstart} |
% |
% |
\def\quotationstart{% |
\def\quotationstart{% |
{\parskip=0pt \aboveenvbreak}% because \aboveenvbreak inserts \parskip | \indentedblockstart % same as \indentedblock, but increase right margin too. |
\parindent=0pt | |
% | |
% @cartouche defines \nonarrowing to inhibit narrowing at next level down. | |
\ifx\nonarrowing\relax |
\ifx\nonarrowing\relax |
\advance\leftskip by \lispnarrowing |
|
\advance\rightskip by \lispnarrowing |
\advance\rightskip by \lispnarrowing |
\exdentamount = \lispnarrowing |
|
\else |
|
\let\nonarrowing = \relax |
|
\fi |
\fi |
\parsearg\quotationlabel |
\parsearg\quotationlabel |
} |
} |
Line 6545 end
|
Line 6587 end
|
\fi |
\fi |
} |
} |
|
|
|
% @indentedblock is like @quotation, but indents only on the left and |
|
% has no optional argument. |
|
% |
|
\makedispenvdef{indentedblock}{\indentedblockstart} |
|
% |
|
\def\indentedblockstart{% |
|
{\parskip=0pt \aboveenvbreak}% because \aboveenvbreak inserts \parskip |
|
\parindent=0pt |
|
% |
|
% @cartouche defines \nonarrowing to inhibit narrowing at next level down. |
|
\ifx\nonarrowing\relax |
|
\advance\leftskip by \lispnarrowing |
|
\exdentamount = \lispnarrowing |
|
\else |
|
\let\nonarrowing = \relax |
|
\fi |
|
} |
|
|
|
% Keep a nonzero parskip for the environment, since we're doing normal filling. |
|
% |
|
\def\Eindentedblock{% |
|
\par |
|
{\parskip=0pt \afterenvbreak}% |
|
} |
|
\def\Esmallindentedblock{\Eindentedblock} |
|
|
|
|
% LaTeX-like @verbatim...@end verbatim and @verb{<char>...<char>} |
% LaTeX-like @verbatim...@end verbatim and @verb{<char>...<char>} |
% If we want to allow any <char> as delimiter, |
% If we want to allow any <char> as delimiter, |
% we need the curly braces so that makeinfo sees the @verb command, eg: |
% we need the curly braces so that makeinfo sees the @verb command, eg: |
Line 7023 end
|
Line 7091 end
|
\df \sl \hyphenchar\font=0 |
\df \sl \hyphenchar\font=0 |
% |
% |
% On the other hand, if an argument has two dashes (for instance), we |
% On the other hand, if an argument has two dashes (for instance), we |
% want a way to get ttsl. Let's try @var for that. | % want a way to get ttsl. We used to recommend @var for that, so |
| % leave the code in, but it's strange for @var to lead to typewriter. |
| % Nowadays we recommend @code, since the difference between a ttsl hyphen |
| % and a tt hyphen is pretty tiny. @code also disables ?` !`. |
\def\var##1{{\setupmarkupstyle{var}\ttslanted{##1}}}% |
\def\var##1{{\setupmarkupstyle{var}\ttslanted{##1}}}% |
#1% |
#1% |
\sl\hyphenchar\font=45 |
\sl\hyphenchar\font=45 |
Line 7807 end
|
Line 7878 end
|
\fi\fi |
\fi\fi |
} |
} |
|
|
| % |
% @xref, @pxref, and @ref generate cross-references. For \xrefX, #1 is |
% @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 |
% 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 |
% node name, #4 the name of the Info file, #5 the name of the printed |
Line 7817 end
|
Line 7888 end
|
\def\xref#1{\putwordSee{} \xrefX[#1,,,,,,,]} |
\def\xref#1{\putwordSee{} \xrefX[#1,,,,,,,]} |
\def\ref#1{\xrefX[#1,,,,,,,]} |
\def\ref#1{\xrefX[#1,,,,,,,]} |
% |
% |
\newbox\topbox | \newbox\toprefbox |
\newbox\printedrefnamebox |
\newbox\printedrefnamebox |
|
\newbox\infofilenamebox |
\newbox\printedmanualbox |
\newbox\printedmanualbox |
% |
% |
\def\xrefX[#1,#2,#3,#4,#5,#6]{\begingroup |
\def\xrefX[#1,#2,#3,#4,#5,#6]{\begingroup |
\unsepspaces |
\unsepspaces |
% |
% |
|
% Get args without leading/trailing spaces. |
\def\printedrefname{\ignorespaces #3}% |
\def\printedrefname{\ignorespaces #3}% |
\setbox\printedrefnamebox = \hbox{\printedrefname\unskip}% |
\setbox\printedrefnamebox = \hbox{\printedrefname\unskip}% |
% |
% |
|
\def\infofilename{\ignorespaces #4}% |
|
\setbox\infofilenamebox = \hbox{\infofilename\unskip}% |
|
% |
\def\printedmanual{\ignorespaces #5}% |
\def\printedmanual{\ignorespaces #5}% |
\setbox\printedmanualbox = \hbox{\printedmanual\unskip}% |
\setbox\printedmanualbox = \hbox{\printedmanual\unskip}% |
% |
% |
Line 7861 end
|
Line 7937 end
|
\turnoffactive |
\turnoffactive |
\makevalueexpandable |
\makevalueexpandable |
% This expands tokens, so do it after making catcode changes, so _ |
% 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}% |
\getfilename{#4}% |
% |
% |
|
% This (wrongly) does not take account of leading or trailing |
|
% spaces in #1, which should be ignored. |
\edef\pdfxrefdest{#1}% |
\edef\pdfxrefdest{#1}% |
\txiescapepdf\pdfxrefdest | \ifx\pdfxrefdest\empty |
| \def\pdfxrefdest{Top}% no empty targets |
| \else |
| \txiescapepdf\pdfxrefdest % escape PDF special chars |
| \fi |
% |
% |
\leavevmode |
\leavevmode |
\startlink attr{/Border [0 0 0]}% |
\startlink attr{/Border [0 0 0]}% |
Line 7898 end
|
Line 7981 end
|
\printedrefname |
\printedrefname |
\fi |
\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". |
% "in MANUALNAME". |
\ifdim \wd\printedmanualbox > 0pt |
\ifdim \wd\printedmanualbox > 0pt |
\space \putwordin{} \cite{\printedmanual}% |
\space \putwordin{} \cite{\printedmanual}% |
Line 7913 end
|
Line 7996 end
|
% this is a loss. Therefore, we give the text of the node name |
% 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. |
% 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 |
\ifdim \wd\printedmanualbox > 0pt |
% What is the 7sp about? The idea is that we also want to omit | % Cross-manual reference with a printed manual name. |
% 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. | |
% |
% |
% For the same basic reason, we retypeset the "Top" at every | \crossmanualxref{\cite{\printedmanual\unskip}}% |
% reference, since the current font is indeterminate. | % |
| \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}% | \crossmanualxref{\code{\infofilename\unskip}}% |
\setbox2 = \hbox{\ignorespaces \printedrefname \unskip \kern7sp}% | % |
\ifdim \wd2 > 7sp | |
\ifdim \wd2 = \wd\topbox \else | |
\putwordSection{} ``\printedrefname'' \putwordin{}\space | |
\fi | |
\fi | |
\cite{\printedmanual}% | |
\else |
\else |
% Reference in this manual. | % Reference within this manual. |
% |
% |
% _ (for example) has to be the character _ for the purposes of the |
% _ (for example) has to be the character _ for the purposes of the |
% control sequence corresponding to the node, but it has to expand |
% control sequence corresponding to the node, but it has to expand |
Line 7959 end
|
Line 8030 end
|
% |
% |
% output the `page 3'. |
% output the `page 3'. |
\turnoffactive \putwordpage\tie\refx{#1-pg}{}% |
\turnoffactive \putwordpage\tie\refx{#1-pg}{}% |
\fi | \fi\fi |
\fi |
\fi |
\endlink |
\endlink |
\endgroup} |
\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 |
% 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, |
% output. It's a separate macro only so it can be changed more easily, |