% \iffalse meta-comment
%
% Copyright 1993 1994 1995 1996 1997
% The LaTeX3 Project and any individual authors listed elsewhere
% in this file.
%
% For further copyright information, and conditions for modification
% and distribution, see the file legal.txt, and any other copyright
% notices 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.
%
% For error reports concerning UNCHANGED versions of this file no
% more than one year old, see bugs.txt.
%
% Please do not request updates from us directly. Primary
% distribution is through the CTAN archives.
%
%
% IMPORTANT COPYRIGHT NOTICE:
%
% You are NOT ALLOWED to distribute this file alone.
%
% You are allowed to distribute this file under the condition that it
% is distributed together with all the files listed in manifest.txt.
%
% If you receive only some of these files from someone, complain!
%
%
% Permission is granted to copy this file to another file with a
% clearly different name and to customize the declarations in that
% copy to serve the needs of your installation, provided that you
% comply with the conditions in the file legal.txt.
%
% However, NO PERMISSION is granted to produce or to distribute a
% modified version of this file under its original name.
%
% You are NOT ALLOWED to change this file.
%
%
%
% \fi
% \iffalse
%%% From File: ltmiscen.dtx
%
%<*driver>
% \fi
\ProvidesFile{ltmiscen.dtx}
[1996/09/28 v1.1f 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{451}
%
% \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}}
% \changes{v1.0x}{1995/04/22}{Removed extra def of \cs{@gobble}}
% \changes{v1.0z}{1995/07/13}{Improve Documentation}
% \changes{v1.1c}{1996/04/22}{Improve Documentation}
% \changes{v1.1d}{1996/06/03}{Move setting of verbatim font and
% \cs{@noligs}.}
%
% \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{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 |\@ignoretrue|
% (this will automatically be global).
%
%
% 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.
%
% \begin{oldcomments}
% \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
% \end{oldcomments}
%
% \begin{macro}{\@currenvir}
% The name of the current environment. Initialized to
% \texttt{document} to so that |\end{document}| works correctly.
% \begin{macrocode}
\def\@currenvir{document}
% \end{macrocode}
% \end{macro}
%
% \begin{macro}{\if@ignore}
% \begin{macro}{\@ignoretrue}
% \begin{macro}{\@ignorefalse}
% \changes{v1.1e}{1996/07/26}{put \cs{global} into definition}
% \begin{macrocode}
\def\@ignorefalse{\global\let\if@ignore\iffalse}
\def\@ignoretrue {\global\let\if@ignore\iftrue}
\@ignorefalse
% \end{macrocode}
% \end{macro}
% \end{macro}
% \end{macro}
%
%
% \begin{macro}{\ignorespacesafterend}
% \changes{v1.1e}{1996/07/26}{user level macro added}
% \begin{macrocode}
\let\ignorespacesafterend\@ignoretrue
% \end{macrocode}
% \end{macro}
%
% \begin{macro}{\enddocument}
% \changes{LaTeX2.09}{1993/08/03}
% {Changed redefinition of \cs{global} to redefinition
% of \cs{@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{%
% \end{macrocode}
% The |\end{document}| hook is executed first. If necessary it can
% contain a |\clearpage| to output dangling floats first. In this
% position it can also contain something like |\end{foo}| so that
% the whole document effectively starts and ends with some special
% environment. However, this must be used with care, eg if two
% applications would use this without knowledge of each other the
% order of the environments will be wrong after all.
% \changes{v1.0y}{1995/04/27}{\cmd{@checkend} moved after hook}
% \changes{v1.0z}{1995/07/13}{Set \cs{@setckpt} to \cs{@gobbletwo}
% instead of defining it by hand}
% \begin{macrocode}
\@enddocumenthook
\@checkend{document}%
\clearpage
\begingroup
\if@filesw
\immediate\closeout\@mainaux
\let\@setckpt\@gobbletwo
\let\@newl@bel\@testdef
% \end{macrocode}
% \changes{v1.0z}{1995/07/13}{Sorten redefinition of \cs{bibcite} and
% \cs{newlabel}}
% The previous line is equiv to setting
%\begin{verbatim}
% \def\newlabel{\@testdef r}%
% \def\bibcite{\@testdef b}%
%\end{verbatim}
% \begin{macrocode}
\@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
% \end{macrocode}
% The macro |\@defaultsubs| is initially |\relax| but gets redefined
% to produce
% a warning if there have been some default font substitutions.
% \changes{v1.0z}{1995/07/13}{Use \cs{\@defaultsubs} instead of switch}
% \begin{macrocode}
\@defaultsubs
% \end{macrocode}
% The macro |\@refundefined| is initially |\relax| but gets redefined
% to produce a warning if there are undefined refs.
% \changes{v1.1b}{1995/10/24}{Use \cs{\@refundefined} instead of switch}
% \begin{macrocode}
\@refundefined
% \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}
% \changes{v1.1b}{1995/10/24}{Changed logic for producing
% warning messages and removed switch}
% \begin{macrocode}
\if@filesw
\ifx \@multiplelabels \relax
\if@tempswa
\@latex@warning@no@line{Label(s) may have changed.
Rerun to get cross-references right}%
\fi
\else
\@multiplelabels
\fi
\fi
\endgroup
\deadcycles\z@\@@end}
% \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@testdef}
% \begin{macrocode}
\def\@testdef #1#2#3{%
\def\reserved@a{#3}\expandafter \ifx \csname #1@#2\endcsname
\reserved@a \else \@tempswatrue \fi}
% \end{macrocode}
% \end{macro}
%
%
% \begin{macro}{\@writefile}
% \changes{v1.0l}{1994/05/20}{Added correct setting of \cs{protect}.}
% \changes{v1.0t}{1994/11/04}{Removed setting of \cs{protect}. ASAJ.}
% \changes{v1.0z}{1995/07/13}{Added missing percent and use \cs{relax}
% in the THEN case}
% \begin{macrocode}
\long\def\@writefile#1#2{%
\@ifundefined{tf@#1}\relax
{\@temptokena{#2}%
\immediate\write\csname tf@#1\endcsname{\the\@temptokena}%
}%
}
% \end{macrocode}
% \end{macro}
%
% \begin{macro}{\stop}
% \begin{macrocode}
\def\stop{\clearpage\deadcycles\z@\let\par\@@par\@@end}
% \end{macrocode}
% \end{macro}
%
%
% \begin{oldcomments}
%
% \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
%
% \end{oldcomments}
%
%
% \begin{macro}{\begin}
% \changes{LaTeX2.09}{1992/03/18}{Changed \cs{@ignoretrue} to
% \cs{@ignorefalse} (as documented)}
% \changes{LaTeX2.09}{1992/08/24}{Added code to \cs{begin} to
% remember line number. Used by \cs{@badend} to display
% position of non-matching \cs{begin}.}
% \changes{v1.1e}{1996/07/26}{remove \cs{global} before \cs{@ignore...}}
% \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}}%
\@ignorefalse
\begingroup\@endpefalse\reserved@a}
% \end{macrocode}
% \end{macro}
%
% \begin{macro}{\end}
% \changes{v1.1e}{1996/07/26}{remove \cs{global} before \cs{@ignore...}}
% \begin{macrocode}
\def\end#1{%
\csname end#1\endcsname\@checkend{#1}%
\expandafter\endgroup\if@endpe\@doendpe\fi
\if@ignore\@ignorefalse\ignorespaces\fi}
% \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@checkend}
% \begin{macrocode}
\def\@checkend#1{\def\reserved@a{#1}\ifx
\reserved@a\@currenvir \else\@badend{#1}\fi}
% \end{macrocode}
% \end{macro}
%
% \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 \cs{@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
%
% \end{oldcomments}
%
% \begin{macro}{\@centercr}
% \changes{v1.0h}{1994/05/03}{\cs{@badcrerr} replaced by \cs{@nolnerr}}
% \changes{v1.0z}{1995/07/13}{Use \cs{nobreak}}
% \begin{macrocode}
\def\@centercr{\ifhmode \unskip\else \@nolnerr\fi
\par\@ifstar{\nobreak\@xcentercr}\@xcentercr}
% \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@xcentercr}
% \begin{macrocode}
\def\@xcentercr{\addvspace{-\parskip}\@ifnextchar
[\@icentercr\ignorespaces}
% \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@icentercr}
% \begin{macrocode}
\def\@icentercr[#1]{\vskip #1\ignorespaces}
% \end{macrocode}
% \end{macro}
%
%
% \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}
% \end{macrocode}
%
% \begin{macrocode}
\def\endcenter{\endtrivlist}
% \end{macrocode}
% \end{environment}
%
% \begin{macro}{\centering}
% \begin{macrocode}
\def\centering{%
\let\\\@centercr
\rightskip\@flushglue\leftskip\@flushglue
\parindent\z@\parfillskip\z@skip}
% \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@rightskip}
% \begin{macrocode}
\newskip\@rightskip \@rightskip \z@skip
% \end{macrocode}
% \end{macro}
%
% \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}
% \end{macrocode}
%
% \begin{macrocode}
\def\endflushleft{\endtrivlist}
% \end{macrocode}
% \end{environment}
%
% \begin{macro}{\raggedright}
% \begin{macrocode}
\def\raggedright{%
\let\\\@centercr\@rightskip\@flushglue \rightskip\@rightskip
\leftskip\z@skip
\parindent\z@}
% \end{macrocode}
% \end{macro}
%
% \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}
% \end{macrocode}
%
% \begin{macrocode}
\def\endflushright{\endtrivlist}
% \end{macrocode}
% \end{environment}
%
% \begin{macro}{\raggedleft}
% \begin{macrocode}
\def\raggedleft{%
\let\\\@centercr
\rightskip\z@skip\leftskip\@flushglue
\parindent\z@\parfillskip\z@skip}
% \end{macrocode}
% \end{macro}
%
% \begin{macrocode}
\message{verbatim,}
% \end{macrocode}
%
% \subsection{Verbatim}
%
%
% 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
% \emph{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 are the same, except that spaces
% print as the \TeX{}book's space character instead of as blank spaces.
%
% \begin{macro}{\@vobeyspaces}
% \begin{macrocode}
{\catcode`\ =\active%
\gdef\@vobeyspaces{\catcode`\ \active\let \@xobeysp}}
% \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@xobeysp}
% \changes{v1.0z}{1995/07/13}{Use \cs{nobreak}}
% \changes{v1.1f}{1996/09/28}{Moved to ltspace.dtx}
% \end{macro}
%
%
% \begin{macro}{\@xverbatim}
% \begin{macro}{\@sxverbatim}
% \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}
% \end{macro}
% \end{macro}
%
% \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 \cs{global}\cs{@inlabelfalse}}
% \changes{v1.0b}{1994/03/16}
% {Remove \cs{global}\cs{@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}{\cs{@@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 \cs{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}{\cs{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}
% \changes{v1.1d}{1996/06/03}{Exchanged the following two code lines
% so that \cs{dospecials} cannot reset the category code
% of characters handled by \cs{@noligs}.}
% \begin{macrocode}
\let\do\@makeother \dospecials
\obeylines \verbatim@font \@noligs
% \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 \cs{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{environment}{verbatim*}
% \begin{macrocode}
\@namedef{verbatim*}{\@verbatim\@sxverbatim}
\expandafter\let\csname endverbatim*\endcsname =\endverbatim
% \end{macrocode}
% \end{environment}
%
% \begin{macro}{\@makeother}
% \begin{macrocode}
\def\@makeother#1{\catcode`#112\relax}
% \end{macrocode}
% \end{macro}
%
% \begin{macro}{\verb@balance@group}
% \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
% \end{macrocode}
% \end{macro}
%
% \begin{macro}{\verb@egroup}
% \begin{macrocode}
\def\verb@egroup{\global\let\verb@balance@group\@empty\egroup}
% \end{macrocode}
% \end{macro}
%
% \begin{macro}{\verb@eol@error}
% \begin{macrocode}
\begingroup
\obeylines%
\gdef\verb@eol@error{\obeylines%
\def^^M{\verb@egroup\@latex@error{%
\noexpand\verb ended by end of line}\@ehc}}%
\endgroup
% \end{macrocode}
% \end{macro}
%
% \begin{macro}{\verb}
% \changes{LaTeX2.09}{1992/08/24}
% {Changed \cs{verb} and \cs{@sverb} to work correctly
% in math mode}
% \changes{v0.9a}{1993/11/21}{Use \cs{verbatim@font} instead of
% \cs{tt}.}
% \changes{v1.1a}{1995/09/19}{Put \cs{@noligs} after
% \cs{verbatim@font} where it belongs.}
% Typesetting a small piece verbatim.
% \changes{v1.1d}{1996/06/03}{Put setting of verbatim font after
% \cs{dospecials}
% so that \cs{dospecials} cannot reset the category code
% of characters handled by \cs{@noligs}.}
% \begin{macrocode}
\def\verb{\relax\ifmmode\hbox\else\leavevmode\null\fi
\bgroup
\verb@eol@error \let\do\@makeother \dospecials
\verbatim@font\@noligs
\@ifstar\@sverb\@verb}
% \end{macrocode}
% \end{macro}
%
%
% \begin{macro}{\@sverb}
% \changes{v1.0j}{1994/05/10}{Slight change in error message text.}
% 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{macro}
%
% \begin{macro}{\@verb}
% \begin{macrocode}
\def\@verb{\@vobeyspaces \frenchspacing \@sverb}
% \end{macrocode}
% \end{macro}
%
% \begin{macro}{\verbatim@nolig@list}
% \changes{LaTeX2.09}{1993/09/03}
% {Replaced \cs{@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 \cs{@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
%
|