3 |
% Load plain if necessary, i.e., if running under initex. |
% Load plain if necessary, i.e., if running under initex. |
4 |
\expandafter\ifx\csname fmtname\endcsname\relax\input plain\fi |
\expandafter\ifx\csname fmtname\endcsname\relax\input plain\fi |
5 |
% |
% |
6 |
\def\texinfoversion{2003-05-04.08} |
\def\texinfoversion{2003-07-28.08} |
7 |
% |
% |
8 |
% Copyright (C) 1985, 1986, 1988, 1990, 1991, 1992, 1993, 1994, 1995, |
% Copyright (C) 1985, 1986, 1988, 1990, 1991, 1992, 1993, 1994, 1995, |
9 |
% 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc. |
% 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc. |
887 |
|
|
888 |
% @firstparagraphindent WORD |
% @firstparagraphindent WORD |
889 |
% If WORD is `none', then suppress indentation of the first paragraph |
% If WORD is `none', then suppress indentation of the first paragraph |
890 |
% after a section heading. If WORD is `insert', then do indentat such |
% after a section heading. If WORD is `insert', then do indent at such |
891 |
% paragraphs. |
% paragraphs. |
892 |
% |
% |
893 |
% The paragraph indentation is suppressed or not by calling |
% The paragraph indentation is suppressed or not by calling |
894 |
% \suppressfirstparagraphindent, which the sectioning commands do. We |
% \suppressfirstparagraphindent, which the sectioning commands do. |
895 |
% switch the definition of this back and forth according to WORD. By |
% We switch the definition of this back and forth according to WORD. |
896 |
% default, we suppress indentation. |
% By default, we suppress indentation. |
897 |
% |
% |
898 |
\def\suppressfirstparagraphindent{\dosuppressfirstparagraphindent} |
\def\suppressfirstparagraphindent{\dosuppressfirstparagraphindent} |
899 |
\newdimen\currentparindent |
\newdimen\currentparindent |
2524 |
% Prevent errors for section commands. |
% Prevent errors for section commands. |
2525 |
% Used in @ignore and in failing conditionals. |
% Used in @ignore and in failing conditionals. |
2526 |
\def\ignoresections{% |
\def\ignoresections{% |
|
\let\chapter=\relax |
|
|
\let\unnumbered=\relax |
|
|
\let\top=\relax |
|
|
\let\unnumberedsec=\relax |
|
|
\let\unnumberedsection=\relax |
|
|
\let\unnumberedsubsec=\relax |
|
|
\let\unnumberedsubsection=\relax |
|
|
\let\unnumberedsubsubsec=\relax |
|
|
\let\unnumberedsubsubsection=\relax |
|
|
\let\section=\relax |
|
|
\let\subsec=\relax |
|
|
\let\subsubsec=\relax |
|
|
\let\subsection=\relax |
|
|
\let\subsubsection=\relax |
|
2527 |
\let\appendix=\relax |
\let\appendix=\relax |
2528 |
\let\appendixsec=\relax |
\let\appendixsec=\relax |
2529 |
\let\appendixsection=\relax |
\let\appendixsection=\relax |
2531 |
\let\appendixsubsection=\relax |
\let\appendixsubsection=\relax |
2532 |
\let\appendixsubsubsec=\relax |
\let\appendixsubsubsec=\relax |
2533 |
\let\appendixsubsubsection=\relax |
\let\appendixsubsubsection=\relax |
2534 |
|
%\let\begin=\relax |
2535 |
|
%\let\bye=\relax |
2536 |
|
\let\centerchap=\relax |
2537 |
|
\let\chapter=\relax |
2538 |
\let\contents=\relax |
\let\contents=\relax |
2539 |
|
\let\section=\relax |
2540 |
\let\smallbook=\relax |
\let\smallbook=\relax |
2541 |
|
\let\subsec=\relax |
2542 |
|
\let\subsection=\relax |
2543 |
|
\let\subsubsec=\relax |
2544 |
|
\let\subsubsection=\relax |
2545 |
\let\titlepage=\relax |
\let\titlepage=\relax |
2546 |
} |
\let\top=\relax |
2547 |
|
\let\unnumbered=\relax |
2548 |
% Used in nested conditionals, where we have to parse the Texinfo source |
\let\unnumberedsec=\relax |
2549 |
% and so want to turn off most commands, in case they are used |
\let\unnumberedsection=\relax |
2550 |
% incorrectly. |
\let\unnumberedsubsec=\relax |
2551 |
% |
\let\unnumberedsubsection=\relax |
2552 |
% We use \empty instead of \relax for the @def... commands, so that \end |
\let\unnumberedsubsubsec=\relax |
2553 |
% doesn't throw an error. For instance: |
\let\unnumberedsubsubsection=\relax |
|
% @ignore |
|
|
% @deffn ... |
|
|
% @end deffn |
|
|
% @end ignore |
|
|
% |
|
|
% The @end deffn is going to get expanded, because we're trying to allow |
|
|
% nested conditionals. But we don't want to expand the actual @deffn, |
|
|
% since it might be syntactically correct and intended to be ignored. |
|
|
% Since \end checks for \relax, using \empty does not cause an error. |
|
|
% |
|
|
\def\ignoremorecommands{% |
|
|
\let\defcodeindex = \relax |
|
|
\let\defcv = \empty |
|
|
\let\defcvx = \empty |
|
|
\let\Edefcv = \empty |
|
|
\let\deffn = \empty |
|
|
\let\deffnx = \empty |
|
|
\let\Edeffn = \empty |
|
|
\let\defindex = \relax |
|
|
\let\defivar = \empty |
|
|
\let\defivarx = \empty |
|
|
\let\Edefivar = \empty |
|
|
\let\defmac = \empty |
|
|
\let\defmacx = \empty |
|
|
\let\Edefmac = \empty |
|
|
\let\defmethod = \empty |
|
|
\let\defmethodx = \empty |
|
|
\let\Edefmethod = \empty |
|
|
\let\defop = \empty |
|
|
\let\defopx = \empty |
|
|
\let\Edefop = \empty |
|
|
\let\defopt = \empty |
|
|
\let\defoptx = \empty |
|
|
\let\Edefopt = \empty |
|
|
\let\defspec = \empty |
|
|
\let\defspecx = \empty |
|
|
\let\Edefspec = \empty |
|
|
\let\deftp = \empty |
|
|
\let\deftpx = \empty |
|
|
\let\Edeftp = \empty |
|
|
\let\deftypefn = \empty |
|
|
\let\deftypefnx = \empty |
|
|
\let\Edeftypefn = \empty |
|
|
\let\deftypefun = \empty |
|
|
\let\deftypefunx = \empty |
|
|
\let\Edeftypefun = \empty |
|
|
\let\deftypeivar = \empty |
|
|
\let\deftypeivarx = \empty |
|
|
\let\Edeftypeivar = \empty |
|
|
\let\deftypemethod = \empty |
|
|
\let\deftypemethodx = \empty |
|
|
\let\Edeftypemethod = \empty |
|
|
\let\deftypeop = \empty |
|
|
\let\deftypeopx = \empty |
|
|
\let\Edeftypeop = \empty |
|
|
\let\deftypevar = \empty |
|
|
\let\deftypevarx = \empty |
|
|
\let\Edeftypevar = \empty |
|
|
\let\deftypevr = \empty |
|
|
\let\deftypevrx = \empty |
|
|
\let\Edeftypevr = \empty |
|
|
\let\defun = \empty |
|
|
\let\defunx = \empty |
|
|
\let\Edefun = \empty |
|
|
\let\defvar = \empty |
|
|
\let\defvarx = \empty |
|
|
\let\Edefvar = \empty |
|
|
\let\defvr = \empty |
|
|
\let\defvrx = \empty |
|
|
\let\Edefvr = \empty |
|
|
\let\clear = \relax |
|
|
\let\down = \relax |
|
|
\let\evenfooting = \relax |
|
|
\let\evenheading = \relax |
|
|
\let\everyfooting = \relax |
|
|
\let\everyheading = \relax |
|
|
\let\headings = \relax |
|
|
\let\include = \relax |
|
|
\let\item = \relax |
|
|
\let\lowersections = \relax |
|
|
\let\oddfooting = \relax |
|
|
\let\oddheading = \relax |
|
|
\let\printindex = \relax |
|
|
\let\pxref = \relax |
|
|
\let\raisesections = \relax |
|
|
\let\ref = \relax |
|
|
\let\set = \relax |
|
|
\let\setchapternewpage = \relax |
|
|
\let\setchapterstyle = \relax |
|
|
\let\settitle = \relax |
|
|
\let\up = \relax |
|
|
\let\verbatiminclude = \relax |
|
|
\let\xref = \relax |
|
2554 |
} |
} |
2555 |
|
|
2556 |
% Ignore @ignore, @ifhtml, @ifinfo, and the like. |
% Ignore @ignore, @ifhtml, @ifinfo, and the like. |
2572 |
% which this file should belong to. Ignore this in TeX. |
% which this file should belong to. Ignore this in TeX. |
2573 |
\let\dircategory = \comment |
\let\dircategory = \comment |
2574 |
|
|
2575 |
% Ignore text until a line `@end #1'. |
% Ignore text until a line `@end #1', keeping track of nested conditionals. |
2576 |
% |
% |
2577 |
|
% A count to remember the depth of nesting. |
2578 |
|
\newcount\doignorecount \doignorecount = 0 |
2579 |
|
|
2580 |
\def\doignore#1{\begingroup |
\def\doignore#1{\begingroup |
2581 |
% Don't complain about control sequences we have declared \outer. |
% Don't complain about control sequences we have declared \outer. |
2582 |
\ignoresections |
\ignoresections |
2583 |
% |
% |
|
% Define a command to swallow text until we reach `@end #1'. |
|
|
% This @ is a catcode 12 token (that is the normal catcode of @ in |
|
|
% this texinfo.tex file). We change the catcode of @ below to match. |
|
|
\long\def\doignoretext##1@end #1{\enddoignore}% |
|
|
% |
|
2584 |
% Make sure that spaces turn into tokens that match what \doignoretext wants. |
% Make sure that spaces turn into tokens that match what \doignoretext wants. |
2585 |
\catcode\spaceChar = 10 |
\catcode\spaceChar = 10 |
2586 |
% |
% |
2587 |
% Ignore braces, too, so mismatched braces don't cause trouble. |
% Ignore braces, so mismatched braces don't cause trouble. |
2588 |
\catcode`\{ = 9 |
\catcode`\{ = 9 |
2589 |
\catcode`\} = 9 |
\catcode`\} = 9 |
2590 |
% |
% |
2591 |
% We must not have @c interpreted as a control sequence. |
% Count number of #1's that we've seen. |
2592 |
\catcode`\@ = 12 |
\doignorecount = 0 |
2593 |
% |
% |
2594 |
\def\ignoreword{#1}% |
% Swallow text until we reach the matching `@end #1'. |
2595 |
\ifx\ignoreword\documentdescriptionword |
\expandafter \dodoignore \csname#1\endcsname {#1}% |
|
% The c kludge breaks documentdescription, since |
|
|
% `documentdescription' contains a `c'. Means not everything will |
|
|
% be ignored inside @documentdescription, but oh well... |
|
|
\else |
|
|
% Make the letter c a comment character so that the rest of the line |
|
|
% will be ignored. This way, the document can have (for example) |
|
|
% @c @end ifinfo |
|
|
% and the @end ifinfo will be properly ignored. |
|
|
% (We've just changed @ to catcode 12.) |
|
|
\catcode`\c = 14 |
|
|
\fi |
|
|
% |
|
|
% And now expand the command defined above. |
|
|
\doignoretext |
|
|
} |
|
|
|
|
|
% What we do to finish off ignored text. |
|
|
% |
|
|
\def\enddoignore{\endgroup\ignorespaces}% |
|
|
|
|
|
\newif\ifwarnedobs\warnedobsfalse |
|
|
\def\obstexwarn{% |
|
|
\ifwarnedobs\relax\else |
|
|
% We need to warn folks that they may have trouble with TeX 3.0. |
|
|
% This uses \immediate\write16 rather than \message to get newlines. |
|
|
\immediate\write16{} |
|
|
\immediate\write16{WARNING: for users of Unix TeX 3.0!} |
|
|
\immediate\write16{This manual trips a bug in TeX version 3.0 (tex hangs).} |
|
|
\immediate\write16{If you are running another version of TeX, relax.} |
|
|
\immediate\write16{If you are running Unix TeX 3.0, kill this TeX process.} |
|
|
\immediate\write16{ Then upgrade your TeX installation if you can.} |
|
|
\immediate\write16{ (See ftp://ftp.gnu.org/non-gnu/TeX.README.)} |
|
|
\immediate\write16{If you are stuck with version 3.0, run the} |
|
|
\immediate\write16{ script ``tex3patch'' from the Texinfo distribution} |
|
|
\immediate\write16{ to use a workaround.} |
|
|
\immediate\write16{} |
|
|
\global\warnedobstrue |
|
|
\fi |
|
2596 |
} |
} |
2597 |
|
|
2598 |
% **In TeX 3.0, setting text in \nullfont hangs tex. For a |
{ \catcode`@=11 % We want to use \ST@P which cannot appear in texinfo source. |
2599 |
% workaround (which requires the file ``dummy.tfm'' to be installed), |
\obeylines % |
2600 |
% uncomment the following line: |
% |
2601 |
%%%%%\font\nullfont=dummy\let\obstexwarn=\relax |
\gdef\dodoignore#1#2{% |
2602 |
|
% #1 contains, e.g., \ifinfo, a.k.a. @ifinfo. |
2603 |
% Ignore text, except that we keep track of conditional commands for |
% #2 contains the string `ifinfo'. |
|
% purposes of nesting, up to an `@end #1' command. |
|
|
% |
|
|
\def\nestedignore#1{% |
|
|
\obstexwarn |
|
|
% We must actually expand the ignored text to look for the @end |
|
|
% command, so that nested ignore constructs work. Thus, we put the |
|
|
% text into a \vbox and then do nothing with the result. To minimize |
|
|
% the chance of memory overflow, we follow the approach outlined on |
|
|
% page 401 of the TeXbook. |
|
|
% |
|
|
\setbox0 = \vbox\bgroup |
|
|
% Don't complain about control sequences we have declared \outer. |
|
|
\ignoresections |
|
|
% |
|
|
% Define `@end #1' to end the box, which will in turn undefine the |
|
|
% @end command again. |
|
|
\expandafter\def\csname E#1\endcsname{\egroup\ignorespaces}% |
|
|
% |
|
|
% We are going to be parsing Texinfo commands. Most cause no |
|
|
% trouble when they are used incorrectly, but some commands do |
|
|
% complicated argument parsing or otherwise get confused, so we |
|
|
% undefine them. |
|
|
% |
|
|
% We can't do anything about stray @-signs, unfortunately; |
|
|
% they'll produce `undefined control sequence' errors. |
|
|
\ignoremorecommands |
|
|
% |
|
|
% Set the current font to be \nullfont, a TeX primitive, and define |
|
|
% all the font commands to also use \nullfont. We don't use |
|
|
% dummy.tfm, as suggested in the TeXbook, because some sites |
|
|
% might not have that installed. Therefore, math mode will still |
|
|
% produce output, but that should be an extremely small amount of |
|
|
% stuff compared to the main input. |
|
|
% |
|
|
\nullfont |
|
|
\let\tenrm=\nullfont \let\tenit=\nullfont \let\tensl=\nullfont |
|
|
\let\tenbf=\nullfont \let\tentt=\nullfont \let\smallcaps=\nullfont |
|
|
\let\tensf=\nullfont |
|
|
% Similarly for index fonts. |
|
|
\let\smallrm=\nullfont \let\smallit=\nullfont \let\smallsl=\nullfont |
|
|
\let\smallbf=\nullfont \let\smalltt=\nullfont \let\smallsc=\nullfont |
|
|
\let\smallsf=\nullfont |
|
|
% Similarly for smallexample fonts. |
|
|
\let\smallerrm=\nullfont \let\smallerit=\nullfont \let\smallersl=\nullfont |
|
|
\let\smallerbf=\nullfont \let\smallertt=\nullfont \let\smallersc=\nullfont |
|
|
\let\smallersf=\nullfont |
|
|
% |
|
|
% Don't complain when characters are missing from the fonts. |
|
|
\tracinglostchars = 0 |
|
|
% |
|
|
% Don't bother to do space factor calculations. |
|
|
\frenchspacing |
|
|
% |
|
|
% Don't report underfull hboxes. |
|
|
\hbadness = 10000 |
|
2604 |
% |
% |
2605 |
% Do minimal line-breaking. |
% Define a command to find the next `@end #2', which must be on a line |
2606 |
\pretolerance = 10000 |
% by itself. |
2607 |
|
\long\def\doignoretext##1^^M\end #2{\doignoretextyyy##1^^M#1\ST@P}% |
2608 |
|
% And this command to find another #1 command, at the beginning of a |
2609 |
|
% line. (Otherwise, we would consider a line `@c @ifset', for |
2610 |
|
% example, to count as an @ifset for nesting.) |
2611 |
|
\long\def\doignoretextyyy##1^^M#1##2\ST@P{\doignoreyyy{##2}\ST@P}% |
2612 |
% |
% |
2613 |
% Do not execute instructions in @tex. |
% And now expand that command. |
2614 |
\def\tex{\doignore{tex}}% |
\obeylines % |
2615 |
% Do not execute macro definitions. |
\doignoretext ^^M% |
2616 |
% `c' is a comment character, so the word `macro' will get cut off. |
}% |
2617 |
\def\macro{\doignore{ma}}% |
} |
2618 |
|
|
2619 |
|
\def\doignoreyyy#1{% |
2620 |
|
\def\temp{#1}% |
2621 |
|
\ifx\temp\empty % Nothing found. |
2622 |
|
\let\next\doignoretextzzz |
2623 |
|
\else % Found a nested condition, ... |
2624 |
|
\advance\doignorecount by 1 |
2625 |
|
\let\next\doignoretextyyy % ..., look for another. |
2626 |
|
% If we're here, #1 ends with \ifinfo (for example). |
2627 |
|
\fi |
2628 |
|
\next #1% the token \ST@P is present just after this macro. |
2629 |
|
} |
2630 |
|
|
2631 |
|
% We have to swallow the remaining "\ST@P". |
2632 |
|
% |
2633 |
|
\def\doignoretextzzz#1{% |
2634 |
|
\ifnum\doignorecount = 0 % We have just found the outermost @end. |
2635 |
|
\let\next\enddoignore |
2636 |
|
\else % Still inside a nested condition. |
2637 |
|
\advance\doignorecount by -1 |
2638 |
|
\let\next\doignoretext % Look for the next @end. |
2639 |
|
\fi |
2640 |
|
\next |
2641 |
} |
} |
2642 |
|
|
2643 |
|
% Finish off ignored text. |
2644 |
|
\def\enddoignore{\endgroup\ignorespaces} |
2645 |
|
|
2646 |
|
|
2647 |
% @set VAR sets the variable VAR to an empty value. |
% @set VAR sets the variable VAR to an empty value. |
2648 |
% @set VAR REST-OF-LINE sets VAR to the value REST-OF-LINE. |
% @set VAR REST-OF-LINE sets VAR to the value REST-OF-LINE. |
2649 |
% |
% |
2720 |
\next |
\next |
2721 |
} |
} |
2722 |
\def\ifsetsucceed{\conditionalsucceed{ifset}} |
\def\ifsetsucceed{\conditionalsucceed{ifset}} |
2723 |
\def\ifsetfail{\nestedignore{ifset}} |
\def\ifsetfail{\doignore{ifset}} |
2724 |
\defineunmatchedend{ifset} |
\defineunmatchedend{ifset} |
2725 |
|
|
2726 |
% @ifclear VAR ... @end ifclear reads the `...' iff VAR has never been |
% @ifclear VAR ... @end ifclear reads the `...' iff VAR has never been |
2736 |
\next |
\next |
2737 |
} |
} |
2738 |
\def\ifclearsucceed{\conditionalsucceed{ifclear}} |
\def\ifclearsucceed{\conditionalsucceed{ifclear}} |
2739 |
\def\ifclearfail{\nestedignore{ifclear}} |
\def\ifclearfail{\doignore{ifclear}} |
2740 |
\defineunmatchedend{ifclear} |
\defineunmatchedend{ifclear} |
2741 |
|
|
2742 |
% @iftex, @ifnothtml, @ifnotinfo, @ifnotplaintext always succeed; we |
% @iftex, @ifnothtml, @ifnotinfo, @ifnotplaintext always succeed; we |
3862 |
% if justification is not attempted. Hence \raggedright. |
% if justification is not attempted. Hence \raggedright. |
3863 |
|
|
3864 |
|
|
3865 |
\def\majorheading{\parsearg\majorheadingzzz} |
\def\majorheading{% |
|
\def\majorheadingzzz #1{% |
|
3866 |
{\advance\chapheadingskip by 10pt \chapbreak }% |
{\advance\chapheadingskip by 10pt \chapbreak }% |
3867 |
{\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000 |
\parsearg\chapheadingzzz |
3868 |
\parindent=0pt\raggedright |
} |
|
\rm #1\hfill}}\bigskip \par\penalty 200} |
|
3869 |
|
|
3870 |
\def\chapheading{\parsearg\chapheadingzzz} |
\def\chapheading{\chapbreak \parsearg\chapheadingzzz} |
3871 |
\def\chapheadingzzz #1{\chapbreak % |
\def\chapheadingzzz #1{% |
3872 |
{\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000 |
{\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000 |
3873 |
\parindent=0pt\raggedright |
\parindent=0pt\raggedright |
3874 |
\rm #1\hfill}}\bigskip \par\penalty 200} |
\rm #1\hfill}}% |
3875 |
|
\bigskip \par\penalty 200\relax |
3876 |
|
\suppressfirstparagraphindent |
3877 |
|
} |
3878 |
|
|
3879 |
% @heading, @subheading, @subsubheading. |
% @heading, @subheading, @subsubheading. |
3880 |
\def\heading{\parsearg\plainsecheading} |
\def\heading{\parsearg\doheading} |
3881 |
\def\subheading{\parsearg\plainsubsecheading} |
\def\subheading{\parsearg\dosubheading} |
3882 |
\def\subsubheading{\parsearg\plainsubsubsecheading} |
\def\subsubheading{\parsearg\dosubsubheading} |
3883 |
|
\def\doheading#1{\plainsecheading{#1}\suppressfirstparagraphindent} |
3884 |
|
\def\dosubheading#1{\plainsubsecheading{#1}\suppressfirstparagraphindent} |
3885 |
|
\def\dosubsubheading#1{\plainsubsubsecheading{#1}\suppressfirstparagraphindent} |
3886 |
|
|
3887 |
% These macros generate a chapter, section, etc. heading only |
% These macros generate a chapter, section, etc. heading only |
3888 |
% (including whitespace, linebreaking, etc. around it), |
% (including whitespace, linebreaking, etc. around it), |
6020 |
\closein 1 |
\closein 1 |
6021 |
\input \jobname.aux |
\input \jobname.aux |
6022 |
\global\havexrefstrue |
\global\havexrefstrue |
|
\global\warnedobstrue |
|
6023 |
\fi |
\fi |
6024 |
% Open the new aux file. TeX will close it automatically at exit. |
% Open the new aux file. TeX will close it automatically at exit. |
6025 |
\openout\auxfile=\jobname.aux |
\openout\auxfile=\jobname.aux |