35 |
% ftp://tug.org/tex/texinfo.tex |
% ftp://tug.org/tex/texinfo.tex |
36 |
% (and all CTAN mirrors, see http://www.ctan.org), |
% (and all CTAN mirrors, see http://www.ctan.org), |
37 |
% and /home/gd/gnu/doc/texinfo.tex on the GNU machines. |
% and /home/gd/gnu/doc/texinfo.tex on the GNU machines. |
38 |
% |
% |
39 |
% The texinfo.tex in any given Texinfo distribution could well be out |
% The texinfo.tex in any given Texinfo distribution could well be out |
40 |
% of date, so if that's what you're using, please check. |
% of date, so if that's what you're using, please check. |
41 |
% |
% |
42 |
% Texinfo has a small home page at http://texinfo.org/ and also |
% Texinfo has a small home page at http://texinfo.org/ and also |
43 |
% http://www.gnu.org/software/texinfo. |
% http://www.gnu.org/software/texinfo. |
44 |
% |
% |
175 |
|
|
176 |
% add check for \lastpenalty to plain's definitions. If the last thing |
% add check for \lastpenalty to plain's definitions. If the last thing |
177 |
% we did was a \nobreak, we don't want to insert more space. |
% we did was a \nobreak, we don't want to insert more space. |
178 |
% |
% |
179 |
\def\smallbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\smallskipamount |
\def\smallbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\smallskipamount |
180 |
\removelastskip\penalty-50\smallskip\fi\fi} |
\removelastskip\penalty-50\smallskip\fi\fi} |
181 |
\def\medbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\medskipamount |
\def\medbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\medskipamount |
730 |
% @inmargin{TEXT [, RIGHT-TEXT]} |
% @inmargin{TEXT [, RIGHT-TEXT]} |
731 |
% (if RIGHT-TEXT is given, use TEXT for left page, RIGHT-TEXT for right; |
% (if RIGHT-TEXT is given, use TEXT for left page, RIGHT-TEXT for right; |
732 |
% else use TEXT for both). |
% else use TEXT for both). |
733 |
% |
% |
734 |
\def\inmargin#1{\parseinmargin #1,,\finish} |
\def\inmargin#1{\parseinmargin #1,,\finish} |
735 |
\def\parseinmargin#1,#2,#3\finish{% not perfect, but better than nothing. |
\def\parseinmargin#1,#2,#3\finish{% not perfect, but better than nothing. |
736 |
\setbox0 = \hbox{\ignorespaces #2}% |
\setbox0 = \hbox{\ignorespaces #2}% |
737 |
\ifdim\wd0 > 0pt |
\ifdim\wd0 > 0pt |
738 |
\def\lefttext{#1}% have both texts |
\def\lefttext{#1}% have both texts |
739 |
\def\righttext{#2}% |
\def\righttext{#2}% |
797 |
% @paragraphindent NCHARS |
% @paragraphindent NCHARS |
798 |
% We'll use ems for NCHARS, close enough. |
% We'll use ems for NCHARS, close enough. |
799 |
% We cannot implement @paragraphindent asis, though. |
% We cannot implement @paragraphindent asis, though. |
800 |
% |
% |
801 |
\def\asisword{asis} % no translation, these are keywords |
\def\asisword{asis} % no translation, these are keywords |
802 |
\def\noneword{none} |
\def\noneword{none} |
803 |
% |
% |
840 |
% We don't use $'s directly in the definition of \math because we need |
% We don't use $'s directly in the definition of \math because we need |
841 |
% to set catcodes according to plain TeX first, to allow for subscripts, |
% to set catcodes according to plain TeX first, to allow for subscripts, |
842 |
% superscripts, special math chars, etc. |
% superscripts, special math chars, etc. |
843 |
% |
% |
844 |
% @math does not do math typesetting in section titles, index |
% @math does not do math typesetting in section titles, index |
845 |
% entries, and other such contexts where the catcodes are set before |
% entries, and other such contexts where the catcodes are set before |
846 |
% @math gets a chance to work. This could perhaps be fixed, but for now |
% @math gets a chance to work. This could perhaps be fixed, but for now |
852 |
% an actual _ character, as in @math{@var{some_variable} + 1}. So make |
% an actual _ character, as in @math{@var{some_variable} + 1}. So make |
853 |
% _ within @math be active (mathcode "8000), and distinguish by seeing |
% _ within @math be active (mathcode "8000), and distinguish by seeing |
854 |
% if the current family is \slfam, which is what @var uses. |
% if the current family is \slfam, which is what @var uses. |
855 |
% |
% |
856 |
{\catcode95 = \active % 95 = _ |
{\catcode95 = \active % 95 = _ |
857 |
\gdef\mathunderscore{% |
\gdef\mathunderscore{% |
858 |
\catcode95=\active |
\catcode95=\active |
863 |
% FYI, plain.tex uses \\ as a temporary control sequence (why?), but |
% FYI, plain.tex uses \\ as a temporary control sequence (why?), but |
864 |
% this is not advertised and we don't care. Texinfo does not |
% this is not advertised and we don't care. Texinfo does not |
865 |
% otherwise define @\. |
% otherwise define @\. |
866 |
% |
% |
867 |
% The \mathchar is class=0=ordinary, family=7=ttfam, position=5C=\. |
% The \mathchar is class=0=ordinary, family=7=ttfam, position=5C=\. |
868 |
\def\mathbackslash{\ifnum\fam=\ttfam \mathchar"075C \else\backslash \fi} |
\def\mathbackslash{\ifnum\fam=\ttfam \mathchar"075C \else\backslash \fi} |
869 |
% |
% |
986 |
\def\pdfmakeoutlines{{% |
\def\pdfmakeoutlines{{% |
987 |
\openin 1 \jobname.toc |
\openin 1 \jobname.toc |
988 |
\ifeof 1\else\begingroup |
\ifeof 1\else\begingroup |
989 |
\closein 1 |
\closein 1 |
990 |
\indexnofonts |
\indexnofonts |
991 |
\def\tt{} |
\def\tt{} |
992 |
\let\_ = \normalunderscore |
\let\_ = \normalunderscore |
993 |
% Thanh's hack / proper braces in bookmarks |
% Thanh's hack / proper braces in bookmarks |
994 |
\edef\mylbrace{\iftrue \string{\else}\fi}\let\{=\mylbrace |
\edef\mylbrace{\iftrue \string{\else}\fi}\let\{=\mylbrace |
995 |
\edef\myrbrace{\iffalse{\else\string}\fi}\let\}=\myrbrace |
\edef\myrbrace{\iffalse{\else\string}\fi}\let\}=\myrbrace |
996 |
% |
% |
1032 |
\let\nextmakelinks=\makelinks |
\let\nextmakelinks=\makelinks |
1033 |
\ifnum\lnkcount>0,\fi |
\ifnum\lnkcount>0,\fi |
1034 |
\picknum{#1}% |
\picknum{#1}% |
1035 |
\startlink attr{/Border [0 0 0]} |
\startlink attr{/Border [0 0 0]} |
1036 |
goto name{\pdfmkpgn{\the\pgn}}% |
goto name{\pdfmkpgn{\the\pgn}}% |
1037 |
\linkcolor #1% |
\linkcolor #1% |
1038 |
\advance\lnkcount by 1% |
\advance\lnkcount by 1% |
1087 |
\ifx\first0\adn0 |
\ifx\first0\adn0 |
1088 |
\else\ifx\first1\adn1 \else\ifx\first2\adn2 \else\ifx\first3\adn3 |
\else\ifx\first1\adn1 \else\ifx\first2\adn2 \else\ifx\first3\adn3 |
1089 |
\else\ifx\first4\adn4 \else\ifx\first5\adn5 \else\ifx\first6\adn6 |
\else\ifx\first4\adn4 \else\ifx\first5\adn5 \else\ifx\first6\adn6 |
1090 |
\else\ifx\first7\adn7 \else\ifx\first8\adn8 \else\ifx\first9\adn9 |
\else\ifx\first7\adn7 \else\ifx\first8\adn8 \else\ifx\first9\adn9 |
1091 |
\else |
\else |
1092 |
\ifnum0=\countA\else\makelink\fi |
\ifnum0=\countA\else\makelink\fi |
1093 |
\ifx\first.\let\next=\done\else |
\ifx\first.\let\next=\done\else |
1521 |
|
|
1522 |
% rms does not like angle brackets --karl, 17may97. |
% rms does not like angle brackets --karl, 17may97. |
1523 |
% So now @email is just like @uref, unless we are pdf. |
% So now @email is just like @uref, unless we are pdf. |
1524 |
% |
% |
1525 |
%\def\email#1{\angleleft{\tt #1}\angleright} |
%\def\email#1{\angleleft{\tt #1}\angleright} |
1526 |
\ifpdf |
\ifpdf |
1527 |
\def\email#1{\doemail#1,,\finish} |
\def\email#1{\doemail#1,,\finish} |
2742 |
|
|
2743 |
% @synindex foo bar makes index foo feed into index bar. |
% @synindex foo bar makes index foo feed into index bar. |
2744 |
% Do this instead of @defindex foo if you don't want it as a separate index. |
% Do this instead of @defindex foo if you don't want it as a separate index. |
2745 |
% |
% |
2746 |
% @syncodeindex foo bar similar, but put all entries made for index foo |
% @syncodeindex foo bar similar, but put all entries made for index foo |
2747 |
% inside @code. |
% inside @code. |
2748 |
% |
% |
2749 |
\def\synindex#1 #2 {\dosynindex\doindex{#1}{#2}} |
\def\synindex#1 #2 {\dosynindex\doindex{#1}{#2}} |
2750 |
\def\syncodeindex#1 #2 {\dosynindex\docodeindex{#1}{#2}} |
\def\syncodeindex#1 #2 {\dosynindex\docodeindex{#1}{#2}} |
2751 |
|
|
2787 |
% Take care of texinfo commands likely to appear in an index entry. |
% Take care of texinfo commands likely to appear in an index entry. |
2788 |
% (Must be a way to avoid doing expansion at all, and thus not have to |
% (Must be a way to avoid doing expansion at all, and thus not have to |
2789 |
% laboriously list every single command here.) |
% laboriously list every single command here.) |
2790 |
% |
% |
2791 |
\def\indexdummies{% |
\def\indexdummies{% |
2792 |
\def\ { }% |
\def\ { }% |
2793 |
\def\@{@}% change to @@ when we switch to @ as escape char in aux files. |
\def\@{@}% change to @@ when we switch to @ as escape char in aux files. |
2794 |
% Need these in case \tex is in effect and \{ is a \delimiter again. |
% Need these in case \tex is in effect and \{ is a \delimiter again. |
2795 |
% But can't use \lbracecmd and \rbracecmd because texindex assumes |
% But can't use \lbracecmd and \rbracecmd because texindex assumes |
2796 |
% braces and backslashes are used only as delimiters. |
% braces and backslashes are used only as delimiters. |
2797 |
\let\{ = \mylbrace |
\let\{ = \mylbrace |
2798 |
\let\} = \myrbrace |
\let\} = \myrbrace |
2799 |
\def\_{{\realbackslash _}}% |
\def\_{{\realbackslash _}}% |
3348 |
\wd0=\hsize \wd2=\hsize |
\wd0=\hsize \wd2=\hsize |
3349 |
\hbox to\pagewidth{\box0\hfil\box2}% |
\hbox to\pagewidth{\box0\hfil\box2}% |
3350 |
} |
} |
3351 |
% |
% |
3352 |
% All done with double columns. |
% All done with double columns. |
3353 |
\def\enddoublecolumns{% |
\def\enddoublecolumns{% |
3354 |
\output = {% |
\output = {% |
4149 |
% @foo ... @end foo. |
% @foo ... @end foo. |
4150 |
|
|
4151 |
% @point{}, @result{}, @expansion{}, @print{}, @equiv{}. |
% @point{}, @result{}, @expansion{}, @print{}, @equiv{}. |
4152 |
% |
% |
4153 |
% Since these characters are used in examples, it should be an even number of |
% Since these characters are used in examples, it should be an even number of |
4154 |
% \tt widths. Each \tt character is 1en, so two makes it 1em. |
% \tt widths. Each \tt character is 1en, so two makes it 1em. |
4155 |
% |
% |
4161 |
|
|
4162 |
% The @error{} command. |
% The @error{} command. |
4163 |
% Adapted from the TeXbook's \boxit. |
% Adapted from the TeXbook's \boxit. |
4164 |
% |
% |
4165 |
\newbox\errorbox |
\newbox\errorbox |
4166 |
% |
% |
4167 |
{\tentt \global\dimen0 = 3em}% Width of the box. |
{\tentt \global\dimen0 = 3em}% Width of the box. |
4469 |
|
|
4470 |
|
|
4471 |
% LaTeX-like @verbatim...@end verbatim and @verb{<char>...<char>} |
% LaTeX-like @verbatim...@end verbatim and @verb{<char>...<char>} |
4472 |
% If we want to allow any <char> as delimiter, |
% If we want to allow any <char> as delimiter, |
4473 |
% 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: |
4474 |
% `@verbx...x' would look like the '@verbx' command. --janneke@gnu.org |
% `@verbx...x' would look like the '@verbx' command. --janneke@gnu.org |
4475 |
% |
% |
4543 |
\everypar{\starttabbox}% |
\everypar{\starttabbox}% |
4544 |
} |
} |
4545 |
|
|
4546 |
% Do the @verb magic: verbatim text is quoted by unique |
% Do the @verb magic: verbatim text is quoted by unique |
4547 |
% delimiter characters. Before first delimiter expect a |
% delimiter characters. Before first delimiter expect a |
4548 |
% right brace, after last delimiter expect closing brace: |
% right brace, after last delimiter expect closing brace: |
4549 |
% |
% |
4550 |
% \def\doverb'{'<char>#1<char>'}'{#1} |
% \def\doverb'{'<char>#1<char>'}'{#1} |
4563 |
% |
% |
4564 |
% \def\doverbatim#1@end verbatim{#1} |
% \def\doverbatim#1@end verbatim{#1} |
4565 |
% |
% |
4566 |
% For Texinfo it's a lot easier than for LaTeX, |
% For Texinfo it's a lot easier than for LaTeX, |
4567 |
% because texinfo's \verbatim doesn't stop at '\end{verbatim}': |
% because texinfo's \verbatim doesn't stop at '\end{verbatim}': |
4568 |
% we need not redefine '\', '{' and '}' |
% we need not redefine '\', '{' and '}' |
4569 |
% |
% |
4621 |
|
|
4622 |
% @copying ... @end copying. |
% @copying ... @end copying. |
4623 |
% Save the text away for @insertcopying later. |
% Save the text away for @insertcopying later. |
4624 |
% |
% |
4625 |
\newbox\copyingbox |
\newbox\copyingbox |
4626 |
% |
% |
4627 |
\def\copying{\begingroup |
\def\copying{\begingroup |
4631 |
} |
} |
4632 |
|
|
4633 |
% @insertcopying. |
% @insertcopying. |
4634 |
% |
% |
4635 |
\def\insertcopying{\unvcopy\copyingbox} |
\def\insertcopying{\unvcopy\copyingbox} |
4636 |
|
|
4637 |
|
|
4734 |
% #1 is the \E... control sequence to end the definition (which we define). |
% #1 is the \E... control sequence to end the definition (which we define). |
4735 |
% #2 is the \...x control sequence (which our caller defines). |
% #2 is the \...x control sequence (which our caller defines). |
4736 |
% #3 is the control sequence to process the header, such as \defunheader. |
% #3 is the control sequence to process the header, such as \defunheader. |
4737 |
% |
% |
4738 |
\def\parsebodycommon#1#2#3{% |
\def\parsebodycommon#1#2#3{% |
4739 |
\begingroup\inENV |
\begingroup\inENV |
4740 |
% If there are two @def commands in a row, we'll have a \nobreak, |
% If there are two @def commands in a row, we'll have a \nobreak, |
4791 |
% to account for this both in the \...x definition and in parsing the |
% to account for this both in the \...x definition and in parsing the |
4792 |
% input at hand. Thus also need a control sequence (passed as #5) for |
% input at hand. Thus also need a control sequence (passed as #5) for |
4793 |
% the \E... definition to assign the category name to. |
% the \E... definition to assign the category name to. |
4794 |
% |
% |
4795 |
\def\deftypeopparsebody#1#2#3#4#5 #6 {% |
\def\deftypeopparsebody#1#2#3#4#5 #6 {% |
4796 |
\parsebodycommon{#1}{#2}{#3}% |
\parsebodycommon{#1}{#2}{#3}% |
4797 |
\def#2##1 ##2 ##3 {% |
\def#2##1 ##2 ##3 {% |
5148 |
|
|
5149 |
% These definitions are used if you use @defunx (etc.) |
% These definitions are used if you use @defunx (etc.) |
5150 |
% anywhere other than immediately after a @defun or @defunx. |
% anywhere other than immediately after a @defun or @defunx. |
5151 |
% |
% |
5152 |
\def\defcvx#1 {\errmessage{@defcvx in invalid context}} |
\def\defcvx#1 {\errmessage{@defcvx in invalid context}} |
5153 |
\def\deffnx#1 {\errmessage{@deffnx in invalid context}} |
\def\deffnx#1 {\errmessage{@deffnx in invalid context}} |
5154 |
\def\defivarx#1 {\errmessage{@defivarx in invalid context}} |
\def\defivarx#1 {\errmessage{@defivarx in invalid context}} |
5949 |
\nobreak\bigskip |
\nobreak\bigskip |
5950 |
% Usually we'll have text after the image which will insert |
% Usually we'll have text after the image which will insert |
5951 |
% \parskip glue, so insert it here too to equalize the space |
% \parskip glue, so insert it here too to equalize the space |
5952 |
% above and below. |
% above and below. |
5953 |
\nobreak\vskip\parskip |
\nobreak\vskip\parskip |
5954 |
\nobreak |
\nobreak |
5955 |
\line\bgroup\hss |
\line\bgroup\hss |
6065 |
} |
} |
6066 |
|
|
6067 |
% Use `small' versions. |
% Use `small' versions. |
6068 |
% |
% |
6069 |
\def\smallenvironments{% |
\def\smallenvironments{% |
6070 |
\let\smalldisplay = \smalldisplayx |
\let\smalldisplay = \smalldisplayx |
6071 |
\let\smallexample = \smalllispx |
\let\smallexample = \smalllispx |
6322 |
% Say @foo, not \foo, in error messages. |
% Say @foo, not \foo, in error messages. |
6323 |
@escapechar = `@@ |
@escapechar = `@@ |
6324 |
|
|
6325 |
% These look ok in all fonts, so just make them not special. |
% These look ok in all fonts, so just make them not special. |
6326 |
@catcode`@& = @other |
@catcode`@& = @other |
6327 |
@catcode`@# = @other |
@catcode`@# = @other |
6328 |
@catcode`@% = @other |
@catcode`@% = @other |