@gdef@lbracecmd[\{]% @gdef@rbracecmd[\]% @endgroup

% Accents: , @.ringaccent @_udotaccent % Others are defined by plain TeX: ‘ ’ " ^ ~ = @<H. \let\, = \c \let\dotaccent = \. \def\ringaccent#1{{\accent23 #1 \let\tieaccent = \t \let\ubaraccent = \b \let\udotaccent = \d

% Other special characters: ¿ ¡ % Plain TeX defines: Å Æ Ø Œ Ł (and lowercase versions) ß. \def\questiondown{?‘ \def\exclamdown{!‘

% Dotless i and dotless j, used for accents. \def\imacro{i \def\jmacro{j \def\dotless#1{% \def\temp{#1% \ifx\temp\imacro \ptexi \else\ifx\temp\jmacro \j \else \errmessage{@dotless can be used only with i or j% \fi\fi

% Be sure we’re in horizontal mode when doing a tie, since we make space % equivalent to this in @example-like environments. Otherwise, a space % at the beginning of a line will start with \penalty – and % since \penalty is valid in vertical mode, we’d end up putting the % penalty on the vertical list instead of in the new paragraph. {\catcode‘ = 11 % Avoid using \@M directly, because that causes trouble % if the definition is written into an index file. \global\let\tiepenalty = \@M \gdef\tie{\leavevmode\penalty\tiepenalty\

% forces normal size whitespace following. \def\:{\spacefactor=1000

%
forces a line break. \def\*{\hfil\break\hbox{\ignorespaces

% . is an end-of-sentence period. \def\.{.\spacefactor=3000

% ! is an end-of-sentence bang. \def\!{!\spacefactor=3000

% ? is an end-of-sentence query. \def\?{?\spacefactor=3000

% @w prevents a word break. Without the \leavevmode, @w at the % beginning of a paragraph, when TeX is still in vertical mode, would % produce a whole line of output instead of starting the paragraph. \def\w#1{\leavevmode\hbox{#1

%

...

forces ... to be all on one page, by enclosing % it in a TeX vbox. We use \vtop instead of \vbox to construct the box % to keep its height that of a normal line. According to the rules for % \topskip (p.114 of the TeXbook), the glue inserted is % max (\topskip - \ht (first item), 0). If that height is large, % therefore, no glue is inserted, and the space between the headline and % the text is small, which looks bad. % \def\group{\begingroup \ifnum\catcode13=\active \else \errhelp = \groupinvalidhelp \errmessage{

invalid in context where filling is enabled% \fi % % The \vtop we start below produces a box with normal height and large % depth; thus, TeX puts \baselineskip glue before it, and (when the % next line of text is done) \lineskip glue after it. (See p.82 of % the TeXbook.) Thus, space below is not quite equal to space % above. But it’s pretty close. \def\Egroup{% \egroup % End the \vtop. \endgroup % End the \group. % % \vtop\bgroup % We have to put a strut on the last line in case the

is in % the midst of an example, rather than completely enclosing it. % Otherwise, the interline space between the last line of the group % and the first line afterwards is too small. But we can’t put the % strut in \Egroup, since there it would be on a line by itself. % Hence this just inserts a strut at the beginning of each line. \everypar = {\strut% % % Since we have a strut on every line, we don’t need any of TeX’s % normal interline spacing. \offinterlineskip % % OK, but now we have to do something about blank % lines in the input in @example-like environments, which normally % just turn into \lisppar, which will insert no space now that we’ve % turned off the interline space. Simplest is to make them be an % empty paragraph. \ifx\par\lisppar \edef\par{\leavevmode \par% % % Reset ^^M’s definition to new definition of \par. \obeylines \fi % % Do %

, where each end-of-line in the input causes an
    % end-of-line in the output.  We don't want the end-of-line after
    % the `
' to put extra space in the output.  Since 
    % should appear on a line by itself (according to the Texinfo
    % manual), we don't worry about eating any user text.
    \comment

%
% TeX puts in an \escapechar (i.e., `)' at the beginning of the help
% message, so this ends up printing `
can only ...'.
%
\newhelp\groupinvalidhelp{%
group can only be used in environments such as 
,^^J%
where each line of input produces a line of output.

% % forces a page break if there is not space-in-mils remaining.

\newdimen\mil  \mil=0.001in

\def\need{\parsearg\needx

% Old definition--didn't work.
%\def\needx #1{\par %
%% This method tries to make TeX break the page naturally
%% if the depth of the box does not fit.
%{\baselineskip=0pt%
%\vtop to #1\mil{\vfil\kern -#1\mil\nobreak
%\prevdepth=-1000pt
%

\def\needx#1{%
  % Ensure vertical mode, so we don't make a big box in the middle of a
  % paragraph.
  \par
  %
  % If the   \dimen0 = #1\mil
  \dimen2 = \ht\strutbox
  \advance\dimen2 by \dp\strutbox
  \ifdim\dimen0 > \dimen2
    %
    % Do a \strut just to make the height of this box be normal, so the
    % normal leading is inserted relative to the preceding line.
    % And a page break here is fine.
    \vtop to #1\mil{\strut\vfil%
    %
    % TeX does not even consider page breaks if a penalty added to the
    % main vertical list is 10000 or more.  But in order to see if the
    % empty box we just added fits on the page, we must make it consider
    % page breaks.  On the other hand, we don't want to actually break the
    % page after the empty box.  So we use a penalty of 9999.
    %
    % There is an extremely small chance that TeX will actually break the
    % page at this \penalty, if there are no other feasible breakpoints in
    % sight.  (If the user is using lots of big 
commands, which
    % almost-but-not-quite fill up a page, TeX will have a hard time doing
    % good page breaking, for example.)  However, I could not construct an
    % example where a page broke at this \penalty; if it happens in a real
    % document, then we can reconsider our strategy.
    \penalty9999
    %
    % Back up by the size of the box, whether we did a page break or not.
    \kern -#1\mil
    %
    % Do not allow a page break right after this kern.
    \nobreak
  \fi


% @br   forces paragraph break

\let\br = \par

% … output an ellipsis using the current font.
% We do .5em per period so that it has the same spacing in a typewriter
% font as three actual period characters.
%
\def\dots{%
  \leavevmode
  \hbox to 1.5em{%
    \hskip 0pt plus 0.25fil minus 0.25fil
    .\hss.\hss.%
    \hskip 0pt plus 0.5fil minus 0.5fil
  %


% ... is an end-of-sentence ellipsis.
%
\def\enddots{%
  \leavevmode
  \hbox to 2em{%
    \hskip 0pt plus 0.25fil minus 0.25fil
    .\hss.\hss.\hss.%
    \hskip 0pt plus 0.5fil minus 0.5fil
  %
  \spacefactor=3000



%     forces the start of a new page
%
\def\page{\par\vfill\supereject

% text....
% outputs text on separate line in roman font, starting at standard page margin

% This records the amount of indent in the innermost environment.
% That's how much \exdent should take out.
\newskip\exdentamount

% This defn is used inside fill environments such as 
Function.:
\def\exdent{\parsearg\exdentyyy
\def\exdentyyy #1{{\hfil\break\hbox{\kern -\exdentamount{\rm#1\hfil\break

% This defn is used inside nofill environments such as 
.
\def\nofillexdent{\parsearg\nofillexdentyyy
\def\nofillexdentyyy #1{{\advance \leftskip by -\exdentamount
\leftline{\hskip\leftskip{\rm#1

% @inmargin{WHICH}{TEXT puts TEXT in the WHICH margin next to the current
% paragraph.  For more general purposes, use the \margin insertion
% class.  WHICH is `l' or `r'.
%
\newskip\inmarginspacing \inmarginspacing=1cm
\def\strutdepth{\dp\strutbox
%
\def\doinmargin#1#2{\strut\vadjust{%
  \nobreak
  \kern-\strutdepth
  \vtop to \strutdepth{%
    \baselineskip=\strutdepth
    \vss
    % if you have multiple lines of stuff to put here, you'll need to
    % make the vbox yourself of the appropriate size.
    \ifx#1l%
      \llap{\ignorespaces #2\hskip\inmarginspacing%
    \else
      \rlap{\hskip\hsize \hskip\inmarginspacing \ignorespaces #2%
    \fi
    \null
  %

\def\inleftmargin{\doinmargin l
\def\inrightmargin{\doinmargin r
%
% @inmargin{TEXT [, RIGHT-TEXT]}
% (if RIGHT-TEXT is given, use TEXT for left page, RIGHT-TEXT for right;
% else use TEXT for both).
% 
\def\inmargin#1{\parseinmargin #1,,\finish
\def\parseinmargin#1,#2,#3\finish{% not perfect, but better than nothing.
  \setbox0 = \hbox{\ignorespaces #2% 
  \ifdim\wd0 > 0pt
    \def\lefttext{#1%  have both texts
    \def\righttext{#2%
  \else
    \def\lefttext{#1%  have only one text
    \def\righttext{#1%
  \fi
  %
  \ifodd\pageno
    \def\temp{\inrightmargin\righttext% odd page -> outside is right margin
  \else
    \def\temp{\inleftmargin\lefttext%
  \fi
  \temp


% % Allow normal characters that  we make active in the argument (a file name).
\def\include{\begingroup
  \catcode`\\=12
  \catcode`~=12
  \catcode`^=12
  \catcode`_=12
  \catcode`|=12
  \catcode`<=12
  \catcode`>=12
  \catcode`+=12
  \parsearg\includezzz
% Restore active chars for included file.
\def\includezzz#1{\endgroup\begingroup
  % Read the included file in a group so nested   \def\thisfile{#1%
  \input\thisfile
\endgroup

\def\thisfile{

%  line   outputs that line, centered

\def\center{\parsearg\centerzzz
\def\centerzzz #1{{\advance\hsize by -\leftskip
\advance\hsize by -\rightskip
\centerline{#1

% 

\def\sp{\parsearg\spxxx
\def\spxxx #1{\vskip #1\baselineskip

% % %   is another way to write a comment

\def\comment{\begingroup \catcode`\^^M=\other%
\catcode`\\=other \catcode`\{=\other \catcode`\=\other%
\commentxxx
{\catcode`\^^M=\other \gdef\commentxxx#1^^M{\endgroup

\let\c=\comment

% % We'll use ems for NCHARS, close enough.
% We cannot implement % 
\def\asisword{asis % no translation, these are keywords
\def\noneword{none
%
\def\paragraphindent{\parsearg\doparagraphindent
\def\doparagraphindent#1{%
  \def\temp{#1%
  \ifx\temp\asisword
  \else
    \ifx\temp\noneword
      \defaultparindent = 0pt
    \else
      \defaultparindent = #1em
    \fi
  \fi
  \parindent = \defaultparindent


% % We'll use ems for NCHARS like .% It seems % I preserve it to make it similar to .\def\exampleindent{\parsearg\doexampleindent
\def\doexampleindent#1{%
  \def\temp{#1%
  \ifx\temp\asisword
  \else
    \ifx\temp\noneword
      \lispnarrowing = 0pt
    \else
      \lispnarrowing = #1em
    \fi
  \fi


% @asis just yields its argument.  Used with 
%
\def\asis#1{#1

% @math outputs its argument in math mode.
% We don't use $'s directly in the definition of \math because we need
% to set catcodes according to plain TeX first, to allow for subscripts,
% superscripts, special math chars, etc.
% 
% @math does not do math typesetting in section titles, index
% entries, and other such contexts where the catcodes are set before
% @math gets a chance to work.  This could perhaps be fixed, but for now
% at least we can have real math in the main text, where it's needed most.
%
\let\implicitmath = $%$ font-lock fix
%
% One complication: _ usually means subscripts, but it could also mean
% an actual _ character, as in some_variable + 1.  So make
% _ within @math be active (mathcode "8000), and distinguish by seeing
% if the current family is \slfam, which is what @var uses.
% 
{\catcode95 = \active  % 95 = _
\gdef\mathunderscore{%
  \catcode95=\active
  \def_{\ifnum\fam=\slfam \_\else\sb\fi%

%
% Another complication: we want \\ (and @\) to output a \ character.
% FYI, plain.tex uses \\ as a temporary control sequence (why?), but
% this is not advertised and we don't care.  Texinfo does not
% otherwise define @\.
% 
% The \mathchar is class=0=ordinary, family=7=ttfam, position=5C=\.
\def\mathbackslash{\ifnum\fam=\ttfam \mathchar"075C \else\backslash \fi
%
\def\math{%
  \tex
  \mathcode`\_="8000 \mathunderscore
  \let\\ = \mathbackslash
  \implicitmath\finishmath
\def\finishmath#1{#1\implicitmath\Etex

% • and - need the same treatment as @math, just above.
\def\bullet{\implicitmath\ptexbullet\implicitmath
\def\minus{\implicitmath-\implicitmath

%  is a no-op.
\let\refill=\relax

% If working on a large document in chapters, it is convenient to
% be able to disable indexing, cross-referencing, and contents, for test runs.
% This is done with  (before %
\newif\iflinks \linkstrue % by default we want the aux files.
\let\novalidate = \linksfalse

% % So open here the files we need to have open while reading the input.
% This makes it possible to make a .fmt file for texinfo.
\def\setfilename{%
   \iflinks
     \readauxfile
   \fi % \openindices needs to do some work in any case.
   \openindices
   \fixbackslash  % Turn off hack to swallow `\input texinfo'.
   \global\let\setfilename=\comment % Ignore extra    %
   % If texinfo.cnf is present on the system, read it.
   % Useful for site-wide    % Just to be on the safe side, close the input stream before the \input.
   \openin 1 texinfo.cnf
   \ifeof1 \let\temp=\relax \else \def\temp{\input texinfo.cnf \fi
   \closein1
   \temp
   %
   \comment % Ignore the actual filename.


% Called from \setfilename.
%
\def\openindices{%
  \newindex{cp%
  \newcodeindex{fn%
  \newcodeindex{vr%
  \newcodeindex{tp%
  \newcodeindex{ky%
  \newcodeindex{pg%


% 

This document was generated on February 25, 2023 using texi2html 5.0.