home *** CD-ROM | disk | FTP | other *** search
- %% TeX macros to handle latexinfo files
- %% \include{ 5 page GNU copyleft here }
- % Copyright (C) 1985, 1986 Richard M. Stallman
- % Copyleft (0) 1988, 1989 Michael E. Clarkson
-
- \def\latexinfoversion{1.2}
- \message{Loading Latexinfo package [Version \latexinfoversion]:}
- \message{}
-
- \setcounter{tocdepth}{2}
- \setcounter{secnumdepth}{3}
-
- \def\oddfoot#1{\def\@oddfoot{#1}}
- \def\evenfoot#1{\def\@evenfoot{#1}}
-
- % Save some parts of plain tex whose names we will redefine.
-
- \let\ptexlbrace=\{
- \let\ptexrbrace=\}
- \let\ptexdot=\.
- \let\ptexstar=\*
- \let\ptexend=\end
- \let\ptexbullet=\bullet
- \let\ptexb=\b
- \let\ptexc=\c
- \let\ptexi=\i
- \let\ptext=\t
- \let\ptexl=\l
- \let\ptexL=\L
- \def\pline{\hbox to\hsize}
- \def\pleftline#1{\pline{#1\hss}}
- \def\prightline#1{\pline{\hss#1}}
-
- \def\centerline#1{\pline{\hss#1\hss}}
-
- \def\tie{\penalty 10000\ } % Save plain tex definition of ~.
-
- \let\normal=\normalsize
-
- \message{Basics,}
- \chardef\other=12
-
- \hyphenation{ap-pen-dix}
- \hyphenation{mini-buf-fer mini-buf-fers}
-
- % Parse an argument, then pass it to #1.
- % The argument can be delimited with [...] or with "..." or braces
- % or it can be a whole line.
- % #1 should be a macro which expects
- % an ordinary undelimited TeX argument.
-
- \def\parsearg #1{\let\next=#1\begingroup\obeylines\futurelet\temp\parseargx}
-
- \def\parseargx{%
- \ifx \obeyedspace\temp \aftergroup\parseargdiscardspace \else%
- \aftergroup \parseargline %
- \fi \endgroup}
-
- {\obeyspaces %
- \gdef\parseargdiscardspace {\begingroup\obeylines\futurelet\temp\parseargx}}
-
- \gdef\obeyedspace{\ }
-
- \def\parseargline{\begingroup \obeylines \parsearglinex}
- {\obeylines %
- \gdef\parsearglinex #1^^M{\endgroup \next {#1}}}
-
- \def\flushcr{\ifx\par\lisppar \def\next##1{}\else \let\next=\relax \fi \next}
-
- % Single-spacing is done by various environments.
-
- \newskip\singlespaceskip
- \singlespaceskip = \baselineskip
- \def\singlespace{%
- {\advance \baselineskip by -\singlespaceskip
- \kern \baselineskip}%
- \baselineskip=\singlespaceskip
- }
-
- \def\arrow{$\rightarrow$}
-
- % Used to generate quoted braces.
-
- \def\mylbrace {{\tt \char '173}}
- \def\myrbrace {{\tt \char '175}}
- \let\{=\mylbrace
- \let\}=\myrbrace
-
- % \: forces normal size whitespace following.
- \def\:{\spacefactor=1000 }
-
- % \* forces a line break.
- \def\*{\hfil\break}
-
- % \. is an end-of-sentence period.
- \def\.{.\spacefactor=3000 }
-
- % \w prevents a word break
- \def\w#1{\hbox{#1}}
-
- % \br forces paragraph break
-
- \let\br = \par
-
- % \dots{} output some dots
-
- \def\dots{$\ldots$}
-
- % \page forces the start of a new page
- %\def\page{\clearpage}
-
- % \exdent text....
- % outputs text on separate line in roman font, starting at standard page margin
-
- \def\exdent{\errmessage{@exdent in filled text}}
- % \lisp, etc, define \exdent locally from \internalexdent
-
- {\obeyspaces
- \gdef\internalexdent{\parsearg\exdentzzz}}
-
- \def\exdentzzz #1{{\advance \leftskip by -\lispnarrowing
- \advance \hsize by -\leftskip
- \advance \hsize by -\rightskip
- \leftline{{\rm#1}}}}
-
- % \sp n outputs n lines of vertical space
- \def\sp#1{\par\vskip #1\baselineskip\relax}
-
- % \comment ...line which is ignored...
- % \c is the same as @comment
- % \begin{ignore} ... \end{ignore} is another way to write a comment
- \def\comment{\parsearg \commentxxx}
-
- \def\commentxxx #1{}
-
- \let\c=\comment
-
- % Some texinfo constructs that are trivial in tex
- \newenvironment{iftex}{}{}
-
- \catcode`@=11
-
- \message{menus,}
- {\catcode`\^^M=13 \gdef\@gobblecr{\@ifnextchar
- {\@gobble}{\ignorespaces}}}
-
- \chardef\active=13
-
- {\catcode`\ =\active\gdef\@vobeyspaces{\catcode`\ \active \let \@xobeysp}}
-
- \begingroup \catcode `|=0 \catcode `[= 1
- \catcode`]=2 \catcode `\{=12 \catcode `\}=12
- \catcode`\\=12
- |gdef|@xmenu#1\end{menu}[|end[menu]]
- |gdef|@xifinfo#1\end{ifinfo}[|end[ifinfo]]
- |gdef|@xignore#1\end{ignore}[|end[ignore]]
- |endgroup
-
- \def\@menu{\begingroup
- \@tempswafalse
- \def\par{\if@tempswa\hbox{}\fi\@tempswatrue\@@par}
- \obeylines \let\do\@makeother \dospecials}
-
- \def\menu{\@menu\@xmenu }
- \let\endmenu=\endgroup
- \def\ifinfo{\@menu\@xifinfo }
- \let\endifinfo=\endgroup
- \def\ignore{\@menu\@xignore }
- \let\endignore=\endgroup
-
- \def\node{\parsearg\nodezzz}
- \def\nodezzz#1{\nodexxx [#1,]}
- \def\nodexxx[#1,#2]{\gdef\lastnode{#1}}
- %\def\node#1#2#3#4{\gdef\lastnode{#1}}
- \let\lastnode=\relax
-
-
- \let\refill=\relax
-
- \let\setfilename=\comment
-
- \def\inforef #1{\inforefzzz #1,,,,**}
- \def\inforefzzz #1,#2,#3,#4**{See Info file \file{\losespace#3{}}, node `\losespace#1{}'}
- \def\losespace #1{#1}
-
- \message{fonts,}
-
- % Font-change commands.
-
- \def\li{\sf}
-
- %% Add scribe-like font environments, plus \l for inline lisp (usually sans
- %% serif) and \ii for TeX italic
-
- \def\i#1{{\sl #1}}
- \let\var=\i
- \let\dfn=\i
- \let\emph=\i
-
- \def\b#1{{\bf #1}}
- \let\strong=\b
-
- \def\t#1{{\tt \rawbackslash #1}\null}
- \let\ttfont=\t
- \let\kbd=\t
- \let\code=\t
- \def\samp#1{`{\tt \rawbackslash #1}'\null}
- \def\key#1{{\tt \uppercase{#1}}\null}
- \def\ctrl#1{$\uparrow${\tt #1}}
-
- \let\file=\samp
-
- \def\l#1{{\li #1}\null}
-
- \def\r#1{{\rm #1}}
- \def\s#1{{\sc #1}}
- \def\ii#1{{\it #1}}
-
- \def\bullet{$\ptexbullet$}
- \def\labelitemi{$\ptexbullet$}
-
- \def\minus{$-$}
-
- % Make altmode in file print out right
-
- \catcode `\^^[=\active \def^^[{$\diamondsuit$}
-
- \message{indexing,}
- % Index generation facilities
-
- % Define the texinfo user-accessible indexing commands for backwrds
- % compatability.
-
- \def\findex{\fnindex}
- \def\kindex{\kyindex}
- \def\cindex{\cpindex}
- \def\vindex{\vrindex}
- \def\tindex{\tpindex}
- \def\pindex{\pgindex}
- \def\cindex{\cpindex}
-
-
- % \newindex {foo} defines an index named foo.
- % It automatically defines \fooindex such that
- % \fooindex ...rest of line... puts an entry in the index foo.
- % It also defines \fooindfile to be the number of the output channel for
- % the file that accumulates this index. The file's extension is foo.
- % The name of an index should be no more than 2 characters long
- % for the sake of vms.
-
- \def\newindex#1{\csname newindex#1\endcsname}
-
- % Yes I know this could be done shorter, but safer??
-
- \def\newindexcp{\if@filesw \newwrite\@cpindexfile
- \immediate\openout\@cpindexfile=\jobname.cp
- \def\cpindex{\@bsphack\begingroup
- \def\protect####1{\string####1\space}\@sanitize
- \@wrindex\@cpindexfile}%
- \def\cpsubindex{\@bsphack\begingroup
- \def\protect####1{\string####1\space}\@sanitize
- \@wrsubindex\@cpindexfile}%
- \def\cpindexbold{\@bsphack\begingroup
- \def\protect####1{\string####1\space}\@sanitize
- \@wrindexbold\@cpindexfile}
- \typeout{Writing concepts index file \jobname.cp }%
- \fi}
-
- \def\cpindex{\@bsphack\begingroup \@sanitize\@index}
- \def\cpsubindex{\@bsphack\begingroup \@sanitize\@index}
- \def\cpindexbold{\@bsphack\begingroup \@sanitize\@index}
-
- \def\@wrindex#1#2{\let\thepage\relax
- \xdef\@gtempa{\write#1{\string \entry{#2}{\thepage}{#2}}}\endgroup\@gtempa
- \if@nobreak \ifvmode\nobreak\fi\fi\@esphack}
-
- \def\@wrindexbold#1#2{\let\thepage\relax \let\bf\relax
- \xdef\@gtempa{\write#1{\string \entry{#2}{\b{\thepage}}{#2}}}\endgroup\@gtempa
- \if@nobreak \ifvmode\nobreak\fi\fi\@esphack}
-
- \def\@wrsubindex#1#2#3{\let\thepage\relax
- \xdef\@gtempa{\write#1{\string \entry{#2 #3}{\thepage}{#2}{#3}}}\endgroup%
- \@gtempa
- \if@nobreak \ifvmode\nobreak\fi\fi\@esphack}
-
- \def\@index#1{\endgroup\@esphack}
-
- \def\pgindex{\@bsphack\begingroup \@sanitize\@index}
- \def\newindexpg{\if@filesw \newwrite\@pgindexfile
- \immediate\openout\@pgindexfile=\jobname.pg
- \def\pgindex{\@bsphack\begingroup
- \def\protect####1{\string####1\space}\@sanitize
- \@wrindex\@pgindexfile}\typeout{Writing index file \jobname.pg }\fi}
-
- \def\newindexvr{\if@filesw \newwrite\@vrindexfile
- \immediate\openout\@vrindexfile=\jobname.vr
- \def\vrindex{\@bsphack\begingroup
- \def\protect####1{\string####1\space}\@sanitize
- \@wrindex\@vrindexfile}
- \def\vrindexbold{\@bsphack\begingroup
- \def\protect####1{\string####1\space}\@sanitize
- \@wrindexbold\@vrindexfile}
- \typeout{Writing variable index file \jobname.vr }\fi}
-
- \def\vrindex{\@bsphack\begingroup \@sanitize\@index}
- \def\vrindexbold{\@bsphack\begingroup \@sanitize\@index}
-
- \def\newindextp{\if@filesw \newwrite\@tpindexfile
- \immediate\openout\@tpindexfile=\jobname.tp
- \def\tpindex{\@bsphack\begingroup
- \def\protect####1{\string####1\space}\@sanitize
- \@wrindex\@tpindexfile}
- \typeout{Writing datatype index file \jobname.tp }\fi}
-
- \def\tpindex{\@bsphack\begingroup \@sanitize\@index}
-
- \def\newindexky{\if@filesw \newwrite\@kyindexfile
- \immediate\openout\@kyindexfile=\jobname.ky
- \def\kyindex{\@bsphack\begingroup
- \def\protect####1{\string####1\space}\@sanitize
- \@wrindex\@kyindexfile}\typeout{Writing key index file \jobname.ky }\fi}
-
- \def\kyindex{\@bsphack\begingroup \@sanitize\@index}
-
- \def\newindexfn{\if@filesw \newwrite\@fnindexfile
- \immediate\openout\@fnindexfile=\jobname.fn
- \def\fnindex{\@bsphack\begingroup
- \def\protect####1{\string####1\space}\@sanitize
- \@wrindex\@fnindexfile}
- \def\fnindexbold{\@bsphack\begingroup
- \def\protect####1{\string####1\space}\@sanitize
- \@wrindexbold\@fnindexfile}
- \typeout{Writing function index file \jobname.fn }\fi}
-
- \def\fnindex{\@bsphack\begingroup \@sanitize\@index}
-
-
- % \synindex{foo}{bar} makes index foo feed into index bar.
- \def\synindex#1#2{\expandafter\xdef \csname @#1index\endcsname{%
- \noexpand\csname @#2index\endcsname}%
- \expandafter \chardef \csname @#1indfile\endcsname=\csname @#2indfile\endcsname}
-
-
- % Define the macros used in formatting output of the sorted index material.
- % This is what you call to cause a particular index to get printed.
- % Write
- % \section*{Function Index}
- % \printindex{fn}
-
- \newskip\secondaryindent
- \secondaryindent=0.5cm
-
- %\catcode`\%=\other\catcode`\&=\other\catcode`\#=\other
- %\catcode`\@=\other\catcode`\$=\other\catcode`\_=\other
- %\catcode`\~=\other\catcode`\^=\other
- %\tex %
- %\catcode`\%=\other\catcode`\&=\other\catcode`\#=\other
- %\catcode`\@=\other\catcode`\$=\other\catcode`\_=\other
- %\catcode`\~=\other\catcode`\^=\other
-
- \def\printindex#1{
- \def\indexbackslash{\rawbackslashxx}
- \tolerance=9500 \advance\baselineskip -1pt
- \openin 1 \jobname.#1s
- \ifeof 1 \else \closein 1 \input \jobname.#1s
- \fi
- }
-
- % These macros are used by the sorted index file itself.
- % Change them to control the appearance of the index.
-
- \def\Dotsbox{\hbox to 1em{\hss.\hss}} % Used by index macros
-
- \def\initial#1{%
- {\bigbreak\pline{\large\bf#1\hfill}\kern 2pt\penalty3000}}
-
- \def\entry #1#2{
- {\parfillskip=0in \parskip=0in \parindent=0in \small
- \hangindent=1in \hangafter=1%
- \noindent\hbox{#1}\leaders\Dotsbox\hskip 0pt plus 1filll\relax #2\par
- }}
-
- \def\primary #1{\pline{\small#1\hfil}}
-
- \def\secondary #1#2{
- {\parfillskip=0in \parskip=0in \small
- \hangindent =1in \hangafter=1
- \noindent\hskip\secondaryindent\hbox{#1}\leaders\Dotsbox\hskip 0pt plus 1filll#2\par
- }}
-
- %%% Args are the skip and penalty (usually negative)
- \def\dobreak#1#2{\par\ifdim\lastskip<#1\removelastskip\penalty#2\vskip#1\fi}
-
- \message{environments,}
-
- % \begin{tex} ... \end{tex} escapes into raw Tex temporarily.
-
- \def\tex{\begingroup
- \catcode `\\=0 \catcode `\{=1 \catcode `\}=2
- \catcode `\$=3 \catcode `\&=4 \catcode `\#=6
- \catcode `\^=7 \catcode `\_=8 \catcode `\~=13 \let~=\tie
- \catcode `\%=14
- \catcode`\"=12
- \catcode`\|=12
- \catcode`\<=12
- \catcode`\>=12
-
- \let\{=\ptexlbrace
- \let\}=\ptexrbrace
- \let\.=\ptexdot
- \let\*=\ptexstar
- \let\bullet=\ptexbullet
- \let\b=\ptexb \let\c=\ptexc \let\i=\ptexi \let\t=\ptext \let\l=\ptexl
- \let\L=\ptexL
-
- \let\endtex=\endgroup}
-
- % Define \lisp ... \endlisp.
- % \lisp does a \begingroup so it can rebind things,
- % including the definition of \endlisp (which normally is erroneous).
-
- % Amount to narrow the margins by for \lisp.
- \newskip\lispnarrowing \lispnarrowing=\parindent
-
- % This is the definition that ^M gets inside \lisp
- % phr: changed space to \null, to avoid overfull hbox problems.
- {\obeyspaces%
- \gdef\lisppar{\null\endgraf}}
-
- % Cause \obeyspaces to make each Space cause a word-separation
- % rather than the default which is that it acts punctuation.
- % This is because space in tt font looks funny.
- {\obeyspaces %
- \gdef\sepspaces{\def {\ }}}
-
- \newskip\aboveenvskipamount \aboveenvskipamount= 0pt
- \def\aboveenvbreak{{\advance\aboveenvskipamount by \parskip
- \endgraf \ifdim\lastskip<\aboveenvskipamount
- \removelastskip \penalty-50 \vskip\aboveenvskipamount \fi}}
-
- \def\afterenvbreak{\endgraf \ifdim\lastskip<\aboveenvskipamount
- \removelastskip \penalty-50 \vskip\aboveenvskipamount \fi}
-
- \newenvironment{example}{\aboveenvbreak
- \hfuzz=12truept % Don't be fussy
- \sepspaces % Make spaces be word-separators rather than space tokens.
- \singlespace % Single space lines
- % The following causes blank lines not to be ignored
- % by adding a space to the end of each line.
- \let\par=\lisppar
- \parskip=0pt \advance \rightskip by \lispnarrowing
- \advance \leftskip by \lispnarrowing
- \parindent=0pt
- \let\exdent=\internalexdent
- \obeyspaces \obeylines \tt \rawbackslash \bgroup\samepage
- \def\next##1{}\next}{\egroup\afterenvbreak}
-
- %same is the same as an enclosed \samepage
- \newenvironment{same}{\bgroup\samepage}{\egroup}
-
- % This is \begin{display}; same as \begin{lisp} except use roman font.
-
- \newenvironment{display}{\aboveenvbreak
- % Make spaces be word-separators rather than space tokens.
- \sepspaces %
- % Single space lines
- \singlespace %
- % The following causes blank lines not to be ignored
- % by adding a space to the end of each line.
- \let\par=\lisppar
- \parskip=0pt \advance \rightskip by \lispnarrowing
- \advance \leftskip by \lispnarrowing
- \parindent=0pt
- \let\exdent=\internalexdent
- \obeyspaces \obeylines
- \def\next##1{}\next}{\afterenvbreak}
-
- % This is \format; same as \lisp except use roman font and don't narrow margins
-
- \newenvironment{format}{\aboveenvbreak
- % Make spaces be word-separators rather than space tokens.
- \sepspaces %
- \singlespace %
- % The following causes blank lines not to be ignored
- % by adding a space to the end of each line.
- \let\par=\lisppar
- \parskip=0pt \parindent=0pt
- \obeyspaces \obeylines
- \def\next##1{}\next}{\afterenvbreak}
-
- \message{cross reference,}
- % Define cross-reference macros
-
- % \xref and \pxref generate cross references to specified points.
-
- \def\pxref #1{see \xrefX [#1,,,,,,,]}
- \def\xref #1{See \xrefX [#1,,,,,,,]}
-
- %\def\xrefX [#1,#2,#3,#4,#5,#6]{section \ref{#1} [%
- %{\setbox0=\hbox{\losespace#3{}}%
- %\ifdim \wd0 =0pt \losespace#1{}\else\unhbox0\fi}],
- %page\tie \pageref{#1}}
-
- \def\xrefX [#1,#2,#3,#4,#5,#6]{%
- \setbox1=\hbox{\i{\losespace#5{}}}%
- \setbox0=\hbox{\losespace#3{}}%
- \ifdim \wd0 =0pt \setbox0=\hbox{\losespace#1{}}\fi%
- \ifdim \wd1 >0pt%
- section \unhbox0{} in \unhbox1%
- \else%
- \ref{#1} [\unhbox0], page\tie \pageref{#1}%
- \fi }
-
- \message{sectioning,}
- % Define chapters, sections, etc.
-
- \def\@chapter[#1]#2{\ifnum \c@secnumdepth >\m@ne
- \refstepcounter{chapter}
- \ifx\lastnode\relax\else\label{\lastnode}\fi
- \let\lastnode=\relax
- \typeout{\@chapapp\space\thechapter.}
- \addcontentsline{toc}{chapter}{\protect
- \numberline{\thechapter}#1}\else
- \addcontentsline{toc}{chapter}{#1}\fi
- \chaptermark{#1}
- \addtocontents{lof}{\protect\addvspace{10pt}}
- \addtocontents{lot}{\protect\addvspace{10pt}} \if@twocolumn
- \@topnewpage[\@makechapterhead{#2}]
- \else \@makechapterhead{#2}
- \@afterheading \fi}
- \def\@schapter#1{\if@twocolumn \@topnewpage[\@makeschapterhead{#1}]
- \else \@makeschapterhead{#1}
- \@afterheading\fi}
-
- \def\@sect#1#2#3#4#5#6[#7]#8{\ifnum #2>\c@secnumdepth
- \def\@svsec{}\else
- \refstepcounter{#1}
- \ifx\lastnode\relax\else\label{\lastnode}\fi
- \let\lastnode=\relax
- \edef\@svsec{\csname the#1\endcsname\hskip 1em }\fi
- \@tempskipa #5\relax
- \ifdim \@tempskipa>\z@
- \begingroup #6\relax
- \@hangfrom{\hskip #3\relax\@svsec}{\interlinepenalty \@M #8\par}
- \endgroup
- \csname #1mark\endcsname{#7}\addcontentsline
- {toc}{#1}{\ifnum #2>\c@secnumdepth \else
- \protect\numberline{\csname the#1\endcsname}\fi
- #7}\else
- \def\@svsechd{#6\hskip #3\@svsec #8\csname #1mark\endcsname
- {#7}\addcontentsline
- {toc}{#1}{\ifnum #2>\c@secnumdepth \else
- \protect\numberline{\csname the#1\endcsname}\fi
- #7}}\fi
- \@xsect{#5}}
-
- \def\smallbook{
- \global\lispnarrowing = 0.3in
- \global\baselineskip 12pt
- \global\parskip 3pt plus 1pt
- \global\hsize = 5in
- \global\doublecolumnhsize=2.4in \global\doublecolumnvsize=15.0in
- \global\vsize=7.5in
- \global\tolerance=700
- \global\hfuzz=1pt
-
- \global\pagewidth=\hsize
- \global\pageheight=\vsize
- \global\font\ninett=cmtt9
-
- \global\let\smalllisp=\smalllispx
- \global\let\smallexample=\smalllispx
- \global\def\Esmallexample{\Esmalllisp}
- }
-
- %% For a final copy, take out the rectangles
- %% that mark overfull boxes (in case you have decided
- %% that the text looks ok even though it passes the margin).
- \def\finalout{\overfullrule=0pt}
-
- \message{and turning on texinfo input format.}
-
- {\catcode`\@=0
-
- % \rawbackslashxx output one backslash character in current font
- {\catcode`\\=\other
- @gdef@rawbackslashxx{\}}
-
- % \rawbackslash redefines \ as input to do \rawbackslashxx.
- {\catcode`\\=\active
- @gdef@rawbackslash{@let\=@rawbackslashxx }}
- }
-
- % \back outputs one backslash in fixed width font.
- \gdef\back{\tt\rawbackslashxx\ignorespaces}
-
- \def\document{\endgroup
- \@colht\textheight \@colroom\textheight \vsize\textheight
- \columnwidth\textwidth \@clubpenalty\clubpenalty
- \if@twocolumn \advance\columnwidth -\columnsep
- \divide\columnwidth\tw@ \hsize\columnwidth \@firstcolumntrue
- \fi
- \hsize\columnwidth \linewidth\hsize
- \begingroup\@floatplacement\@dblfloatplacement
- \makeatletter\let\@writefile\@gobbletwo
- \@input{\jobname.aux}\endgroup
- \if@filesw \immediate\openout\@mainaux=\jobname.aux
- \immediate\write\@mainaux{\relax}\fi
- \def\do##1{\let ##1\@notprerr}
- \@preamblecmds
- \let\do\noexpand
- \@normalsize\everypar{}\nospecials}
-
-
- % Here is a list of the characters that have been specially catcoded:
- \def\dosomespecials{\do\$\do\&\do\#\do\%\do\~\do\^}
-
- {\catcode`\"=\active
- \catcode`\>=\active
- \catcode`\<=\active
- \catcode`\_=\active
- \gdef\nospecials{
- \catcode`\"=\active
- \gdef\activedoublequote{{\tt \char '042}}
- \let"=\activedoublequote
- \catcode`\>=\active
- \gdef\activegtr{{\tt \char '076}}
- \let>=\activegtr
- \catcode`\<=\active
- \gdef\activeless{{\tt \char '074}}
- \let<=\activeless
- \catcode`\_=\active
- \gdef\activeunderscore{{\tt \char '137}}
- \let_=\activeunderscore
- \@noligs\let\do\@makeother \dosomespecials}
- }
-