% \iffalse meta-comment
%
% Copyright 1994 the LaTeX3 project and the individual authors.
% All rights reserved. For further copyright information see the file
% legal.txt, and any other copyright indicated in this file.
% 
% This file is part of the LaTeX2e system.
% ----------------------------------------
% 
%  This system is distributed in the hope that it will be useful,
%  but WITHOUT ANY WARRANTY; without even the implied warranty of
%  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
% 
% 
% IMPORTANT NOTICE:
% 
% For error reports in case of UNCHANGED versions see bugs.txt.
% 
% Please do not request updates from us directly.  Distribution is
% done through Mail-Servers and TeX organizations.
% 
% You are not allowed to change this file.
% 
% You are allowed to distribute this file under the condition that
% it is distributed together with all files mentioned in manifest.txt.
% 
% If you receive only some of these files from someone, complain!
% 
% You are NOT ALLOWED to distribute this file alone.  You are NOT
% ALLOWED to take money for the distribution or use of either this
% file or a changed version, except for a nominal charge for copying
% etc.
% \fi
% \iffalse
%%% File: ltmiscen
%
%<*driver>
% \fi
\ProvidesFile{ltmiscen.dtx}
             [1994/11/30 v1.0w LaTeX Kernel (Misc. Environments)]
% \iffalse
\documentclass{ltxdoc}
\GetFileInfo{ltmiscen.dtx}
\title{\filename}
\date{\filedate}
 \author{%
  Johannes Braams\and
  David Carlisle\and
  Alan Jeffrey\and
  Leslie Lamport\and
  Frank Mittelbach\and
  Chris Rowley\and
  Rainer Sch\"opf}

\begin{document}
\maketitle
 \DocInput{\filename}
\end{document}
%</driver>
% \fi
%
% \CheckSum{482}
%
% \changes{v1.0c}{1994/03/28}{Improve Documentation}
% \changes{v1.0d}{1994/03/29}{Remove counter macros to ltcntlen}
% \changes{v1.0g}{1994/05/02}{Changed 91 to 1991 and moved some bits}
% \changes{v1.0i}{1994/05/05}{Removed braces from ifnextchar and
% ifstar arguments}
% \changes{v1.0m}{1994/05/20}{Use new warning commands}
% \changes{v1.0n}{1994/05/21}{Use new error commands}
% \changes{v1.0s}{1994/10/14}{Move math to other file}
% \changes{v1.0v}{1994/11/17}
%         {\cs{@tempa} to \cs{reserved@a}}
%
% \section{Miscellaneous Environments}
%  This section implements the basic environment mechanism, and also 
% a few specific environments including |document|, The math
% environments and related commands, the `flushing' environments,
% (|center|, |flushleft|, |flushright|), and |verbatim|.
%
% \StopEventually{}
%
%    \begin{macrocode}
%<*2ekernel>
\message{environments,}
%    \end{macrocode}
%
% \subsection{Environments}
%
% \begin{oldcomments}
%  \begin{foo} and \end{foo} are used to delimit environment foo.
%  \begin{foo} starts a group and calls \foo if it is defined, otherwise
%  it does nothing.  \end{foo} checks to see that it matches the
%  corresponding \begin and if so, it calls \endfoo and does an
%  \endgroup.  Otherwise, \end{foo} does nothing.
%
%  If \end{foo} needs to ignore blanks after it, then \endfoo should
%  globally set the @ignore switch true with \global\@ignoretrue.
%
%  \@currenvir : the name of the current environment.  Initialized to
%                'document' to make \end{document} work right.
%
%  \@preamblecmds : a list of commands that can be used only in the
%                   preamble (before the \begin{document}), in the
%                   form  \do \CMDA \do \CMDB ... .   These commands
%                   are redefined to \@notprerr by \begin{document}
%                   to save space.  They include the following:
%                       \document \documentstyle \@documentstyle
%                       \@options \@preamblecmds \@optionlist
%                       \@optionfiles \nofiles \includeonly \makeindex
%                       \makeglossary
%                   The document style can add any other commands to
%                   this list by
%                      \def\do{\noexpand\do\noexpand}
%                      \edef\@preamblecmds{\@preamblecmds \do ...}
%
%  NOTE: \@@end is defined to be the \end command of TeX82.
%
%  \enddocument is the user's command for ending the manuscript file.
%
%  \stop is a panic button -- to end TeX in the middle.
%
% \enddocument ==
%   BEGIN
%    \@checkend{document}   %% checks for unmatched \begin
%    \clearpage
%    \begingroup
%      if @filesw = true
%        then  close file @mainaux
%              if G@refundefined = true
%               then LaTeX Warning: 'There are undefined references.' fi
%              if @multiplelabels = true
%                then LaTeX Warning: 
%                    'One or more label(s) multiply defined.'
%                else
%                \@setckpt {ARG1}{ARG2} == null
%                \newlabel{LABEL}{VAL} ==
%                    BEGIN
%                      \reserved@a == VAL
%                      if def(\reserved@a) = def(\r@LABEL)
%                        else @tempswa := true          fi
%                    END
%                \bibcite{LABEL}{VAL} == null
%                    BEGIN
%                      \reserved@a == VAL
%                      if def(\reserved@a) = def(\g@LABEL)
%                        else @tempswa := true          fi
%                    END
%                @tempswa := false
%                make @ a letter
%                \input \jobname.AUX
%                if @tempswa = true
%                  then LaTeX Warning: 'Label may have changed.
%                                  Rerun to get cross-references right.'
%       fi     fi     fi
%    \endgroup
%    finish up
%   END
%
%  \@writefile{EXT}{ENTRY} ==
%      if tf@EXT undefined
%        else \write\tf@EXT{ENTRY}
%      fi
%
%    \begin{macrocode}
\def\@currenvir{document}
%    \end{macrocode}
%
%    \begin{macrocode}
\@onlypreamble\document 
\@onlypreamble\documentstyle 
\@onlypreamble\@documentstyle
   
\@onlypreamble\@options 
\@onlypreamble\@preamblecmds 
\@onlypreamble\@optionlist 
\@onlypreamble\@optionfiles
   
\@onlypreamble\nofiles 
\@onlypreamble\includeonly 
\@onlypreamble\makeindex 
\@onlypreamble\makeglossary
%    \end{macrocode}
%
%    \begin{macrocode}
\newif\if@ignore
%    \end{macrocode}
%
% \end{oldcomments}
%
%  \begin{macro}{\enddocument}
% \changes{LaTeX2.09}{1993/08/03}
%         {Changed redefinition of \cmd\global to redefinition
%               of \cmd{\@setckpt}.}
% \changes{LaTeX2.09}{1993/09/08}
%         {Added warning in case of undefined references.}%    
% \changes{v0.9e}{1993/12/09}{Hook added}
%    \begin{macrocode}
\def\enddocument{%
   \@checkend{document}%
%    \end{macrocode}
%    The |\end{document}| hook is executed first. If necessary it can
%    contain a |\clearpage| to output dangling floats first.
%    \begin{macrocode}
   \@enddocumenthook
   \clearpage
   \begingroup
     \if@filesw
       \immediate\closeout\@mainaux
       \def\@setckpt##1##2{}%
       \def\newlabel{\@testdef r}%
       \def\bibcite{\@testdef b}%
       \@tempswafalse 
       \makeatletter \input\jobname.aux
     \fi
%    \end{macrocode}
% \changes{v1.0w}{1994/11/30}
%         {(DPC) Use \cs{@dofilelist}}
%    \begin{macrocode}
     \@dofilelist
%    \end{macrocode}
%    First we check for font size substitution bigger than
%    |\fontsubfuzz|. The |\relax| is necessary because this is a macro
%    not a register.
% \changes{v1.0w}{1994/11/30}
%         {(DPC) Do warnings even for \cs{nofiles}}
%    \begin{macrocode}
     \ifdim \font@submax >\fontsubfuzz\relax
%    \end{macrocode}
%    In case you wonder about the |\@gobbletwo| inside the message
%    below, this is a horrible hack to remove the tokens |\on@line.|
%    that are added by |\@font@warning| at the end.
%    \begin{macrocode}
       \@font@warning{Size substitutions with differences\MessageBreak
                  up to \font@submax\space have occured.\@gobbletwo}%
     \fi
     \ifG@defaultsubs
       \@font@warning{Some font shapes were not available, defaults 
                     substituted.\@gobbletwo}%
     \fi
     \ifG@refundefined
       \@latex@warning@no@line{There were undefined references}%
     \fi
%    \end{macrocode}
%    If a label is defined more than once, |\@tempswa| will always be
%    true and thus produce a ``Label(s) may \ldots'' warning. But
%    since a rerun will not solve that problem (unless one uses a
%    package like \texttt{varioref} that generates labels on the fly),
%    we suppress this message.
% \changes{v1.0e}{1994/04/20}{Changed logic for producing 
%                             warning messages}
%    \begin{macrocode}
     \if@filesw
       \if@multiplelabels
         \@latex@warning@no@line{There were multiply-defined labels}%
       \else
         \if@tempswa 
           \@latex@warning@no@line{Label(s) may have changed.  
               Rerun to get cross-references right}%
         \fi
       \fi
     \fi
   \endgroup
   \deadcycles\z@\@@end}
%    \end{macrocode}
%  \end{macro}
%
% \begin{oldcomments}
%    \begin{macrocode}
\def\@testdef #1#2#3{%
  \def\reserved@a{#3}\expandafter \ifx \csname #1@#2\endcsname
 \reserved@a  \else \@tempswatrue \fi}
%    \end{macrocode}
%
% \changes{v1.0l}{1994/05/20}{Added correct setting of \cs{protect}.}
% \changes{v1.0t}{1994/11/04}{Removed setting of \cs{protect}. ASAJ.}
%
%    \begin{macrocode}
\long\def\@writefile#1#2{%
  \@ifundefined{tf@#1}{}%
    {\@temptokena{#2}
     \immediate\write\csname tf@#1\endcsname{\the\@temptokena}%
    }%
}
% \long added 8 Feb 90, as suggested by Chris Rowley
%    \end{macrocode}
%
%    \begin{macrocode}
\def\stop{\clearpage\deadcycles\z@\let\par\@@par\@@end}
%    \end{macrocode}
%
%    \begin{macrocode}
\everypar{\@nodocument} %% To get an error if text appears before the
\nullfont               %% \begin{document}
%    \end{macrocode}
%
% \begin, \end, and \@checkend changed so \end{document} will catch
% an unmatched \begin.  Changed 24 May 89 as suggested by
% Frank Mittelbach and Rainer Sch\"opf.
%
% \begin{NAME} ==
%  BEGIN
%    IF \NAME undefined  THEN  \reserved@a == BEGIN report error END
%                        ELSE  \reserved@a ==  
%                                   (\@currenvir :=L NAME) \NAME
%    FI
%    @ignore :=G F      %% Added 30 Nov 88
%    \begingroup
%    \@endpe := F
%    \@currenvir :=L NAME
%    \NAME
%  END
%
% \end{NAME} ==
%  BEGIN
%   \endNAME
%   \@checkend{NAME}
%   \endgroup
%   IF @endpe = T              %% @endpe set True by \@endparenv
%     THEN \@doendpe           %% \@doendpe redefines \par and \everypar
%                              %% to suppress paragraph indentation in
%   FI                         %% immediately following text
%   IF @ignore = T
%     THEN @ignore :=G F
%          \ignorespaces
%   FI
%  END
%
% \@checkend{NAME} ==
%  BEGIN
%   IF \@currenvir = NAME
%     ELSE \@badend{NAME}
%   FI
%  END
%
% RmS 92/03/18: changed \@ignoretrue to \@ignorefalse (as documented)
% RmS 92/08/24: added code to \begin to remember line number. Used by
%               \@badend to display position of non-matching \begin.
%    \begin{macrocode}
\def\begin#1{%
  \@ifundefined{#1}%
    {\def\reserved@a{\@latex@error{Environment #1 undefined}\@eha}}%
    {\def\reserved@a{\def\@currenvir{#1}%
     \edef\@currenvline{\on@line}%
     \csname #1\endcsname}}%
  \global\@ignorefalse %% \global...added 2 May 90
  \begingroup\@endpefalse\reserved@a}
%    \end{macrocode}
%
%    \begin{macrocode}
\def\end#1{%
  \csname end#1\endcsname\@checkend{#1}%
  \expandafter\endgroup\if@endpe\@doendpe\fi
  \if@ignore\global\@ignorefalse\ignorespaces\fi}
%    \end{macrocode}
%
%    \begin{macrocode}
\def\@checkend#1{\def\reserved@a{#1}\ifx
      \reserved@a\@currenvir \else\@badend{#1}\fi}
%    \end{macrocode}
% \end{oldcomments}
%
%  \begin{macro}{\@currenvline}
%    We do need a default value for |\@currenvline| on top-level since
%    the document environment cancels the brace group. This means that
%    a missmatch with |\begin|\allowbreak|{document}| will not produce
%    a line number. Thus the outer default must be |\@empty| or we
%    will end up with two spaces.
% \changes{v1.0q}{1994/05/24}{Use \cmd\@empty as outer default}
%    \begin{macrocode}
\let\@currenvline\empty
%    \end{macrocode}
%  \end{macro}
%
%
%
% \subsection{Center, Flushright, Flushleft}
%
%    \begin{macrocode}
\message{center,}
%    \end{macrocode}
%
% \begin{oldcomments}
%
% \center, \flushright and \flushleft set
%   \rightskip = 0pt or \@flushglue (as appropriate)
%   \leftskip  = 0pt or \@flushglue (as appropriate)
%   \parindent = 0pt
%   \parfillskip   = 0pt. (except \flushleft)
%   \\         == \par \vskip -\parskip
%   \\[LENGTH] == \\ \vskip LENGTH
%   \\*        == \par \penalty 10000 \vskip -\parskip
%   \\*[LEN]   == \\* \vskip LENGTH
%
% They invoke the trivlist environment to handle vertical spacing before
% and after them.
%
% \centering, \raggedright and \raggedleft are the declaration analogs
% of the above.
%
% \raggedright has a more universal effect, however.  It sets
% \@rightskip := flushglue.  Every environment, like the list
% environments, 
% that set \rightskip to its 'normal' value set it to \@rightskip
% \changes{v1.0h}{1994/05/03}{\cmd\@badcrerr replaced by \cmd\@nolnerr}
%    \begin{macrocode}
\def\@centercr{\ifhmode \unskip\else \@nolnerr\fi
       \par\@ifstar{\penalty \@M\@xcentercr}\@xcentercr}
%    \end{macrocode}
%
%    \begin{macrocode}
\def\@xcentercr{\addvspace{-\parskip}\@ifnextchar
    [\@icentercr\ignorespaces}
%    \end{macrocode}
%
%    \begin{macrocode}
\def\@icentercr[#1]{\vskip #1\ignorespaces}
%    \end{macrocode}
%
% \end{oldcomments}
%
% \begin{environment}{center}
% \changes{v0.9h}{1993/12/13}{Removed optional argument of \cs{item}}
% \changes{v1.0u}{1994/11/12}{Changed end macro to \cs{def}: safer and
% consistent}
%    We use |\relax| to prevent |\item| scanning too far.
%    \begin{macrocode}
\def\center{\trivlist \centering\item\relax}
\def\centering{\let\\\@centercr\rightskip\@flushglue\leftskip\@flushglue
\parindent\z@\parfillskip\z@skip}
\def\endcenter{\endtrivlist}
%    \end{macrocode}
% \end{environment}
%
%    \begin{macrocode}
\newskip\@rightskip \@rightskip \z@skip
%    \end{macrocode}
%
% \begin{environment}{flushleft}
% \changes{v0.9h}{1993/12/13}{Removed optional argument of \cs{item}}
% \changes{v1.0u}{1994/11/12}{Changed end macro to \cs{def}: safer and
% consistent}
%    We use |\relax| to prevent |\item| scanning too far.
%    \begin{macrocode}
\def\flushleft{\trivlist \raggedright\item\relax}
\def\raggedright{%
  \let\\\@centercr\@rightskip\@flushglue \rightskip\@rightskip
  \leftskip\z@skip
  \parindent\z@}
\def\endflushleft{\endtrivlist}
%    \end{macrocode}
% \end{environment}
%
% \begin{environment}{flushright}
% \changes{v0.9h}{1993/12/13}{Removed optional argument of \cs{item}}
% \changes{v1.0u}{1994/11/12}{Changed end macro to \cs{def}: safer and
% consistent}
%    We use |\relax| to prevent |\item| scanning too far.
%    \begin{macrocode}
\def\flushright{\trivlist \raggedleft\item\relax}
\def\raggedleft{\let\\\@centercr\rightskip\z@skip\leftskip\@flushglue
  \parindent\z@\parfillskip\z@skip}
\def\endflushright{\endtrivlist}
%    \end{macrocode}
% \end{environment}
%
%    \begin{macrocode}
\message{verbatim,}
%    \end{macrocode}
%
% \subsection{Verbatim}
%
% \begin{oldcomments}
%
%  The verbatim environment uses the fixed-width \ttfamily font, turns
%  blanks into spaces, starts a new line for each carrige return (or
%  sequence of consecutive carriage returns), and interprets EVERY
%  character literally. 
%  I.e., all special characters \, {, $, etc. are \catcode'd to 'other'.
%
%  The command \verb produces in-line verbatim text, where the argument
%  is delimited by any pair of characters.  E.g., \verb #...# takes
%  '...' as its argument, and sets it verbatim in \ttfamily font.
%
%  The *-variants of these commands is the same, except that spaces
%  print as the TeXbook's space character instead of as blank spaces.
%    \begin{macrocode}
{\catcode`\^^M=13 \gdef\@gobblecr{\@ifnextchar
\@gobble\ignorespaces}}
%    \end{macrocode}
%
%    \begin{macrocode}
{\catcode`\ =\active%
\gdef\@vobeyspaces{\catcode`\ \active\let \@xobeysp}}
%    \end{macrocode}
%
% Definition of \@xobeysp chaned on 19 Nov 86 from
% \def\@xobeysp{\leavevmode{} }
% to prevent line breaks at spaces.  Change suggested by
% Nelson Beebe
%
%    \begin{macrocode}
\def\@xobeysp{\leavevmode\penalty10000\ }
%    \end{macrocode}
%
%    \begin{macrocode}
\begingroup \catcode `|=0 \catcode `[= 1
\catcode`]=2 \catcode `\{=12 \catcode `\}=12
\catcode`\\=12 |gdef|@xverbatim#1\end{verbatim}[#1|end[verbatim]]
|gdef|@sxverbatim#1\end{verbatim*}[#1|end[verbatim*]]
|endgroup
%    \end{macrocode}
%
% \@sverbatim obsolete -- removed 24 May 89, as suggested by
% Rainer Sch\"opf and Frank Mittelbach
% \def\@sverbatim{\obeyspaces\@verbatim}
%    \begin{macrocode}
\def\@gobble#1{}
%    \end{macrocode}
%
% \end{oldcomments}
%
%  \begin{macro}{\@verbatim}
% \changes{LaTeX2.09}{1991/07/24}{Added `penalty`interlinepenalty 
%               to definition of `par so that `samepage works}
% \changes{v0.9h}{1993/12/13}{Removed optional argument of `item}
%    Real start of verbatim environment
%    We use |\relax| to prevent |\item| scanning too far.
% \changes{v0.9p}{1994/01/18}
%         {Add \cmd\global\cmd{\@inlabelfalse}}
% \changes{v1.0b}{1994/03/16}
%         {Remove \cmd\global\cmd{\@inlabelfalse} again.}
%    \begin{macrocode}
\def\@verbatim{\trivlist \item\relax 
  \if@minipage\else\vskip\parskip\fi
  \leftskip\@totalleftmargin\rightskip\z@skip
  \parindent\z@\parfillskip\@flushglue\parskip\z@skip
%    \end{macrocode}
% \changes{LaTeX2.09}{1991/08/26}{\cmd{\@@par} added}
%    Added |\@@par| to clear possible |\parshape| definition
%    from a surrounding list (the verbatim guru says).
% \changes{v0.9p}{1994/01/18}
%         {Only add \cmd\penalty if in hmode}
%    \begin{macrocode}
  \@@par
  \@tempswafalse 
  \def\par{%
    \if@tempswa
%    \end{macrocode}
%    A |\leavevmode| added: needed if, for example, a blank verbatim
%    line is the first thing in a list item (wow!).
% \changes{v1.0f}{1994/04/29}{\cmd\leavevmode added}
%    \begin{macrocode}
      \leavevmode \null \@@par\penalty\interlinepenalty
    \else
      \@tempswatrue
      \ifhmode\@@par\penalty\interlinepenalty\fi
    \fi}%
%    \end{macrocode}
%    To allow customization we hide the font used in a separate macro.
%  \changes{v0.9a}{1993/11/21}{use `verbatim@font instead of `tt}
%  \changes{v0.9h}{1993/12/13}{Readded `@noligs}
%    \begin{macrocode}
  \obeylines \verbatim@font \@noligs
  \let\do\@makeother \dospecials
%    \end{macrocode}
%    To avoid a breakpoint after the labels box, we remove the penalty
%    put there by the list macros: another use of |\unpenalty|!
% \changes{v1.0f}{1994/04/29}{Change to \cmd\everypar added}
%    \begin{macrocode}
  \everypar \expandafter{\the\everypar \unpenalty}%
}
%    \end{macrocode}
%  \end{macro}
%  
%  \begin{macro}{\verbatim}
%  \begin{macro}{\endverbatim}
%    (RmS 93/09/19) Protected against `missing item' error message
%               triggered by empty verbatim environment.
%    \begin{macrocode}
\def\verbatim{\@verbatim \frenchspacing\@vobeyspaces \@xverbatim}
\def\endverbatim{\if@newlist \leavevmode\fi\endtrivlist}
%    \end{macrocode}
%  \end{macro}
%  \end{macro}
%
%  \begin{macro}{\verbatim@font}
% \changes{v0.9a}{1993/11/21}{Macro added}
%    Macro to select the font  used for verbatim typesetting.
%    It also does other work if necessary for the font used.
% \changes{v0.9s}{1994/01/21}{Removed unnecessary category code 
%                            hackery.}
%    \begin{macrocode}
\def\verbatim@font{\normalfont\ttfamily}
%    \end{macrocode}
%  \end{macro}
%
%
%    \begin{macrocode}
\@namedef{verbatim*}{\@verbatim\@sxverbatim}
\expandafter\let\csname endverbatim*\endcsname =\endverbatim
%    \end{macrocode}
%
%    \begin{macrocode}
\def\@makeother#1{\catcode`#1=12\relax}
%    \end{macrocode}
%
% \changes{LaTeX2.09}{1993/09/07}
%     {(RmS) Changed definition of \cs{verb} so that it detects a
%              missing second delimiter.}
%    \begin{macrocode}
\let\verb@balance@group\@empty

\def\verb@egroup{\global\let\verb@balance@group\@empty\egroup}

\begingroup
  \obeylines%
  \gdef\verb@eol@error{\obeylines%
    \def^^M{\verb@egroup\@latex@error{%
            \noexpand\verb ended by end of line}\@ehc}}%
\endgroup
%    \end{macrocode}
%
%  \begin{macro}{\verb}
% \changes{LaTeX2.09}{1992/08/24}
%         {Changed \cmd\verb and \cmd{\@sverb} to work correctly 
%            in math mode}
% \changes{v0.9a}{1993/11/21}{use `verbatim@font instead of `tt}
%    Typesetting a small piece verbatim.
%    \begin{macrocode}
\def\verb{\relax\ifmmode\hbox\else\leavevmode\null\fi
  \bgroup \@noligs
    \verbatim@font \verb@eol@error \let\do\@makeother \dospecials
    \@ifstar\@sverb\@verb}
%    \end{macrocode}
%  \end{macro}
%
%
% \changes{v1.0j}{1994/05/10}{Slight change in error message text.}
% \begin{oldcomments}
% Definitions of \@sverb and \@verb changed so \verb+ foo+  does not
% lose leading blanks when it comes at the beginning of a line.
% Change made 24 May 89. Suggested by Frank Mittelbach and Rainer
% Sch\"opf. 
%
%    \begin{macrocode}
\def\@sverb#1{%
  \catcode`#1\active
  \lccode`\~`#1%
  \gdef\verb@balance@group{\verb@egroup
     \@latex@error{\noexpand\verb illegal in command argument}\@ehc}%
  \aftergroup\verb@balance@group
  \lowercase{\let~\verb@egroup}}%
%    \end{macrocode}
%
% \end{oldcomments}
%
%    \begin{macrocode}
\def\@verb{\@vobeyspaces \frenchspacing \@sverb}
%    \end{macrocode}
%
%  \begin{macro}{\verbatim@nolig@list}
%    
% \changes{LaTeX2.09}{1993/09/03}
%         {Replaced \cmd{\@noligs} by extensible list}
%    \begin{macrocode}
\def\verbatim@nolig@list{\do\`\do\<\do\>\do\,\do\'\do\-}
%    \end{macrocode}
%  \end{macro}
%
%  \begin{macro}{\do@noligs}
%    
%    \begin{macrocode}
\def\do@noligs#1{%
  \catcode`#1\active
  \begingroup
     \lccode`\~=`#1\relax
     \lowercase{\endgroup\def~{\leavevmode\kern\z@\char`#1}}}
%    \end{macrocode}
%  \end{macro}
%
%  \begin{macro}{\@noligs}
%    To stay compatible with packages that use |\@noligs| we keep it.
% \changes{v0.9h}{1993/12/13}{Readded \cmd{\@noligs}}
%    \begin{macrocode}
\def\@noligs{\let\do\do@noligs \verbatim@nolig@list}
%    \end{macrocode}
%  \end{macro}
%
% \changes{v0.9i}{1993/12/16}{\cs{literal} added}
% \changes{v1.0r}{1994/05/26/16}{\cs{literal} removed}
%    \begin{macrocode}
%</2ekernel>
%    \end{macrocode}
%
% \Finale
%
