@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
\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.