Drop a duplicated line
[latex2e.git] / trunk / base / ltmiscen.dtx
blobd923e5330f740525d6e1bc4bf857ccc8093a1e80
1 % \iffalse meta-comment
3 % Copyright 1993-2014
4 % The LaTeX3 Project and any individual authors listed elsewhere
5 % in this file.
7 % This file is part of the LaTeX base system.
8 % -------------------------------------------
10 % It may be distributed and/or modified under the
11 % conditions of the LaTeX Project Public License, either version 1.3c
12 % of this license or (at your option) any later version.
13 % The latest version of this license is in
14 %    http://www.latex-project.org/lppl.txt
15 % and version 1.3c or later is part of all distributions of LaTeX
16 % version 2005/12/01 or later.
18 % This file has the LPPL maintenance status "maintained".
20 % The list of all files belonging to the LaTeX base distribution is
21 % given in the file `manifest.txt'. See also `legal.txt' for additional
22 % information.
24 % The list of derived (unpacked) files belonging to the distribution
25 % and covered by LPPL is defined by the unpacking scripts (with
26 % extension .ins) which are part of the distribution.
28 % \fi
29 % \iffalse
30 %%% From File: ltmiscen.dtx
32 %<*driver>
33 % \fi
34 \ProvidesFile{ltmiscen.dtx}
35              [2014/09/29 v1.1l LaTeX Kernel (Misc. Environments)]
36 % \iffalse
37 \documentclass{ltxdoc}
38 \GetFileInfo{ltmiscen.dtx}
39 \title{\filename}
40 \date{\filedate}
41  \author{%
42   Johannes Braams\and
43   David Carlisle\and
44   Alan Jeffrey\and
45   Leslie Lamport\and
46   Frank Mittelbach\and
47   Chris Rowley\and
48   Rainer Sch\"opf}
50 \begin{document}
51  \MaintainedByLaTeXTeam{latex}
52  \maketitle
53  \DocInput{\filename}
54 \end{document}
55 %</driver>
56 % \fi
58 % \CheckSum{457}
60 % \changes{v1.0c}{1994/03/28}{Improve Documentation}
61 % \changes{v1.0d}{1994/03/29}{Remove counter macros to ltcntlen}
62 % \changes{v1.0g}{1994/05/02}{Changed 91 to 1991 and moved some bits}
63 % \changes{v1.0i}{1994/05/05}{Removed braces from ifnextchar and
64 % ifstar arguments}
65 % \changes{v1.0m}{1994/05/20}{Use new warning commands}
66 % \changes{v1.0n}{1994/05/21}{Use new error commands}
67 % \changes{v1.0s}{1994/10/14}{Move math to other file}
68 % \changes{v1.0v}{1994/11/17}
69 %         {\cs{@tempa} to \cs{reserved@a}}
70 % \changes{v1.0x}{1995/04/22}{Removed extra def of \cs{@gobble}}
71 % \changes{v1.0z}{1995/07/13}{Improve Documentation}
72 % \changes{v1.1c}{1996/04/22}{Improve Documentation}
73 % \changes{v1.1d}{1996/06/03}{Move setting of verbatim font and
74 %         \cs{@noligs}.}
75 % \changes{v1.1g}{1998/08/17}{(RmS) Minor documentation fixes.}
77 % \section{Miscellaneous Environments}
78 %  This section implements the basic environment mechanism, and also
79 % a few specific environments including |document|, The math
80 % environments and related commands, the `flushing' environments,
81 % (|center|, |flushleft|, |flushright|), and |verbatim|.
83 % \StopEventually{}
85 %    \begin{macrocode}
86 %<*2ekernel>
87 \message{environments,}
88 %    \end{macrocode}
90 % \subsection{Environments}
92 %  |\begin{foo}| and |\end{foo}| are used to delimit environment |foo|.
94 %  |\begin{foo}| starts a group and calls |\foo| if it is defined,
95 %  otherwise it does nothing.
97 % |\end{foo}| checks to see that it matches the
98 %  corresponding |\begin| and if so, it calls |\endfoo| and does an
99 %  |\endgroup|.  Otherwise, |\end{foo}| does nothing.
101 %  If |\end{foo}| needs to ignore blanks after it, then |\endfoo| should
102 %  globally set the |@ignore| switch true with |\@ignoretrue|
103 %  (this will automatically be global).
106 %  NOTE: |\@@end| is defined to be the |\end| command of \TeX82.
108 %  |\enddocument| is the user's command for ending the manuscript file.
110 %  |\stop| is a panic button --- to end \TeX\ in the middle.
112 % \begin{oldcomments}
113 % \enddocument ==
114 %   BEGIN
115 %    \@checkend{document}   %% checks for unmatched \begin
116 %    \clearpage
117 %    \begingroup
118 %      if @filesw = true
119 %        then  close file @mainaux
120 %              if G@refundefined = true
121 %               then LaTeX Warning: 'There are undefined references.' fi
122 %              if @multiplelabels = true
123 %                then LaTeX Warning:
124 %                    'One or more label(s) multiply defined.'
125 %                else
126 %                \@setckpt {ARG1}{ARG2} == null
127 %                \newlabel{LABEL}{VAL} ==
128 %                    BEGIN
129 %                      \reserved@a == VAL
130 %                      if def(\reserved@a) = def(\r@LABEL)
131 %                        else @tempswa := true          fi
132 %                    END
133 %                \bibcite{LABEL}{VAL} == null
134 %                    BEGIN
135 %                      \reserved@a == VAL
136 %                      if def(\reserved@a) = def(\g@LABEL)
137 %                        else @tempswa := true          fi
138 %                    END
139 %                @tempswa := false
140 %                make @ a letter
141 %                \input \jobname.AUX
142 %                if @tempswa = true
143 %                  then LaTeX Warning: 'Label may have changed.
144 %                                  Rerun to get cross-references right.'
145 %       fi     fi     fi
146 %    \endgroup
147 %    finish up
148 %   END
150 %  \@writefile{EXT}{ENTRY} ==
151 %      if tf@EXT undefined
152 %        else \write\tf@EXT{ENTRY}
153 %      fi
154 % \end{oldcomments}
156 % \begin{macro}{\@currenvir}
157 %    The name of the current environment.  Initialized to
158 %    \texttt{document} to so that |\end{document}| works correctly.
159 %    \begin{macrocode}
160 \def\@currenvir{document}
161 %    \end{macrocode}
162 % \end{macro}
164 % \begin{macro}{\if@ignore}
165 % \begin{macro}{\@ignoretrue}
166 % \begin{macro}{\@ignorefalse}
167 % \changes{v1.1e}{1996/07/26}{put \cs{global} into definition}
168 %    \begin{macrocode}
169 \def\@ignorefalse{\global\let\if@ignore\iffalse}
170 \def\@ignoretrue {\global\let\if@ignore\iftrue}
171 \@ignorefalse
172 %    \end{macrocode}
173 % \end{macro}
174 % \end{macro}
175 % \end{macro}
178 % \begin{macro}{\ignorespacesafterend}
179 % \changes{v1.1e}{1996/07/26}{user level macro added}
180 %    \begin{macrocode}
181 \let\ignorespacesafterend\@ignoretrue
182 %    \end{macrocode}
183 % \end{macro}
185 %  \begin{macro}{\enddocument}
186 % \changes{LaTeX2.09}{1993/08/03}
187 %         {Changed redefinition of \cs{global} to redefinition
188 %               of \cs{@setckpt}.}
189 % \changes{LaTeX2.09}{1993/09/08}
190 %         {Added warning in case of undefined references.}%
191 % \changes{v0.9e}{1993/12/09}{Hook added}
192 %    \begin{macrocode}
193 \def\enddocument{%
194 %    \end{macrocode}
195 %    The |\end{document}| hook is executed first. If necessary it can
196 %    contain a |\clearpage| to output dangling floats first. In this
197 %    position it can also contain something like |\end{foo}| so that
198 %    the whole document effectively starts and ends with some special
199 %    environment. However, this must be used with care, eg if two
200 %    applications would use this without knowledge of each other the
201 %    order of the environments will be wrong after all.
202 %    |\AtEndDocument| is redefined
203 %    at this point so that and such commands that get into the hook do
204 %    not chase their tail\ldots
205 % \changes{v1.0y}{1995/04/27}{\cs{@checkend} moved after hook}
206 % \changes{v1.0z}{1995/07/13}{Set \cs{@setckpt} to \cs{@gobbletwo}
207 %                    instead of defining it by hand}
208 % \changes{v1.1i}{2000/05/19}
209 %            {Reset \cs{AtEndDocument} for latex/3060}
210 %    \begin{macrocode}
211    \let\AtEndDocument\@firstofone
212    \@enddocumenthook
213    \@checkend{document}%
214    \clearpage
215    \begingroup
216      \if@filesw
217        \immediate\closeout\@mainaux
218        \let\@setckpt\@gobbletwo
219        \let\@newl@bel\@testdef
220 %    \end{macrocode}
221 % \changes{v1.0z}{1995/07/13}{Shorten redefinition of \cs{bibcite} and
222 %          \cs{newlabel}}
223 %    The previous line is equiv to setting
224 %\begin{verbatim}
225 %       \def\newlabel{\@testdef r}%
226 %       \def\bibcite{\@testdef b}%
227 %\end{verbatim}
228 % \changes{v1.1k}{2010/08/17}{Use braces around \cs{input} arg (pr/4124)}
229 % \changes{v1.1l}{2010/08/17}{Change of plan: use \cs{@@input} instead
230 %                             (pr/4124)}
231 %    We use |\@@input| to load the \texttt{.aux} file, so that it doesn't
232 %    show up in the list of files produced by |\listfiles|.
233 %    \begin{macrocode}
234        \@tempswafalse
235        \makeatletter \@@input\jobname.aux
236      \fi
237 %    \end{macrocode}
238 % \changes{v1.0w}{1994/11/30}
239 %         {(DPC) Use \cs{@dofilelist}}
240 %    \begin{macrocode}
241      \@dofilelist
242 %    \end{macrocode}
243 %    First we check for font size substitution bigger than
244 %    |\fontsubfuzz|. The |\relax| is necessary because this is a macro
245 %    not a register.
246 % \changes{v1.0w}{1994/11/30}
247 %         {(DPC) Do warnings even for \cs{nofiles}}
248 %    \begin{macrocode}
249      \ifdim \font@submax >\fontsubfuzz\relax
250 %    \end{macrocode}
251 %    In case you wonder about the |\@gobbletwo| inside the message
252 %    below, this is a horrible hack to remove the tokens |\on@line.|
253 %    that are added by |\@font@warning| at the end.
254 % \changes{v1.1j}{2000/07/11}{Fix typo in warning}
255 %    \begin{macrocode}
256        \@font@warning{Size substitutions with differences\MessageBreak
257                   up to \font@submax\space have occurred.\@gobbletwo}%
258      \fi
259 %    \end{macrocode}
260 %    The macro |\@defaultsubs| is initially |\relax| but gets redefined
261 %    to produce
262 %    a warning if there have been some default font substitutions.
263 % \changes{v1.0z}{1995/07/13}{Use \cs{@defaultsubs} instead of switch}
264 %    \begin{macrocode}
265      \@defaultsubs
266 %    \end{macrocode}
267 %    The macro |\@refundefined| is initially |\relax| but gets redefined
268 %    to produce a warning if there are undefined refs.
269 % \changes{v1.1b}{1995/10/24}{Use \cs{@refundefined} instead of switch}
270 %    \begin{macrocode}
271      \@refundefined
272 %    \end{macrocode}
273 %    If a label is defined more than once, |\@tempswa| will always be
274 %    true and thus produce a ``Label(s) may \ldots'' warning. But
275 %    since a rerun will not solve that problem (unless one uses a
276 %    package like \texttt{varioref} that generates labels on the fly),
277 %    we suppress this message.
278 % \changes{v1.0e}{1994/04/20}{Changed logic for producing
279 %                             warning messages}
280 % \changes{v1.1b}{1995/10/24}{Changed logic for producing
281 %                             warning messages and removed switch}
282 %    \begin{macrocode}
283      \if@filesw
284        \ifx \@multiplelabels \relax
285          \if@tempswa
286            \@latex@warning@no@line{Label(s) may have changed.
287                Rerun to get cross-references right}%
288          \fi
289        \else
290          \@multiplelabels
291        \fi
292      \fi
293    \endgroup
294    \deadcycles\z@\@@end}
295 %    \end{macrocode}
296 %  \end{macro}
298 % \begin{macro}{\@testdef}
299 %    \begin{macrocode}
300 \def\@testdef #1#2#3{%
301   \def\reserved@a{#3}\expandafter \ifx \csname #1@#2\endcsname
302  \reserved@a  \else \@tempswatrue \fi}
303 %    \end{macrocode}
304 %  \end{macro}
307 % \begin{macro}{\@writefile}
308 % \changes{v1.0l}{1994/05/20}{Added correct setting of \cs{protect}.}
309 % \changes{v1.0t}{1994/11/04}{Removed setting of \cs{protect}. ASAJ.}
310 % \changes{v1.0z}{1995/07/13}{Added missing percent and use \cs{relax}
311 %  in the THEN case}
312 %    \begin{macrocode}
313 \long\def\@writefile#1#2{%
314   \@ifundefined{tf@#1}\relax
315     {\@temptokena{#2}%
316      \immediate\write\csname tf@#1\endcsname{\the\@temptokena}%
317     }%
319 %    \end{macrocode}
320 %  \end{macro}
322 % \begin{macro}{\stop}
323 %    \begin{macrocode}
324 \def\stop{\clearpage\deadcycles\z@\let\par\@@par\@@end}
325 %    \end{macrocode}
326 %  \end{macro}
329 % \begin{oldcomments}
331 %    \begin{macrocode}
332 \everypar{\@nodocument} %% To get an error if text appears before the
333 \nullfont               %% \begin{document}
334 %    \end{macrocode}
336 % \begin, \end, and \@checkend changed so \end{document} will catch
337 % an unmatched \begin.  Changed 24 May 89 as suggested by
338 % Frank Mittelbach and Rainer Sch\"opf.
340 % \begin{NAME} ==
341 %  BEGIN
342 %    IF \NAME undefined  THEN  \reserved@a == BEGIN report error END
343 %                        ELSE  \reserved@a ==
344 %                                   (\@currenvir :=L NAME) \NAME
345 %    FI
346 %    @ignore :=G F      %% Added 30 Nov 88
347 %    \begingroup
348 %    \@endpe := F
349 %    \@currenvir :=L NAME
350 %    \NAME
351 %  END
353 % \end{NAME} ==
354 %  BEGIN
355 %   \endNAME
356 %   \@checkend{NAME}
357 %   \endgroup
358 %   IF @endpe = T              %% @endpe set True by \@endparenv
359 %     THEN \@doendpe           %% \@doendpe redefines \par and \everypar
360 %                              %% to suppress paragraph indentation in
361 %   FI                         %% immediately following text
362 %   IF @ignore = T
363 %     THEN @ignore :=G F
364 %          \ignorespaces
365 %   FI
366 %  END
368 % \@checkend{NAME} ==
369 %  BEGIN
370 %   IF \@currenvir = NAME
371 %     ELSE \@badend{NAME}
372 %   FI
373 %  END
375 % \end{oldcomments}
378 % \begin{macro}{\begin}
379 % \changes{LaTeX2.09}{1992/03/18}{Changed \cs{@ignoretrue} to
380 %               \cs{@ignorefalse} (as documented)}
381 % \changes{LaTeX2.09}{1992/08/24}{Added code to \cs{begin} to
382 %      remember line number. Used by \cs{@badend} to display
383 %      position of non-matching \cs{begin}.}
384 % \changes{v1.1e}{1996/07/26}{remove \cs{global} before \cs{@ignore...}}
385 %    \begin{macrocode}
386 \def\begin#1{%
387   \@ifundefined{#1}%
388     {\def\reserved@a{\@latex@error{Environment #1 undefined}\@eha}}%
389     {\def\reserved@a{\def\@currenvir{#1}%
390      \edef\@currenvline{\on@line}%
391      \csname #1\endcsname}}%
392   \@ignorefalse
393   \begingroup\@endpefalse\reserved@a}
394 %    \end{macrocode}
395 %  \end{macro}
397 %  \begin{macro}{\end}
398 % \changes{v1.1e}{1996/07/26}{remove \cs{global} before \cs{@ignore...}}
399 %    \begin{macrocode}
400 \def\end#1{%
401   \csname end#1\endcsname\@checkend{#1}%
402   \expandafter\endgroup\if@endpe\@doendpe\fi
403   \if@ignore\@ignorefalse\ignorespaces\fi}
404 %    \end{macrocode}
405 %  \end{macro}
407 %  \begin{macro}{\@checkend}
408 %    \begin{macrocode}
409 \def\@checkend#1{\def\reserved@a{#1}\ifx
410       \reserved@a\@currenvir \else\@badend{#1}\fi}
411 %    \end{macrocode}
412 %  \end{macro}
414 %  \begin{macro}{\@currenvline}
415 %    We do need a default value for |\@currenvline| on top-level since
416 %    the document environment cancels the brace group. This means that
417 %    a mismatch with |\begin|\allowbreak|{document}| will not produce
418 %    a line number. Thus the outer default must be |\@empty| or we
419 %    will end up with two spaces.
420 % \changes{v1.0q}{1994/05/24}{Use \cs{@empty} as outer default}
421 %    \begin{macrocode}
422 \let\@currenvline\@empty
423 %    \end{macrocode}
424 %  \end{macro}
427 % \subsection{Center, Flushright, Flushleft}
429 %    \begin{macrocode}
430 \message{center,}
431 %    \end{macrocode}
433 % \begin{oldcomments}
435 % \center, \flushright and \flushleft set
436 %   \rightskip = 0pt or \@flushglue (as appropriate)
437 %   \leftskip  = 0pt or \@flushglue (as appropriate)
438 %   \parindent = 0pt
439 %   \parfillskip   = 0pt. (except \flushleft)
440 %   \\         == \par \vskip -\parskip
441 %   \\[LENGTH] == \\ \vskip LENGTH
442 %   \\*        == \par \penalty 10000 \vskip -\parskip
443 %   \\*[LEN]   == \\* \vskip LENGTH
445 % They invoke the trivlist environment to handle vertical spacing before
446 % and after them.
448 % \centering, \raggedright and \raggedleft are the declaration analogs
449 % of the above.
451 % \raggedright has a more universal effect, however.  It sets
452 % \@rightskip := flushglue.  Every environment, like the list
453 % environments,
454 % that set \rightskip to its 'normal' value set it to \@rightskip
456 % \end{oldcomments}
458 % \begin{macro}{\@centercr}
459 % \changes{v1.0h}{1994/05/03}{\cs{@badcrerr} replaced by \cs{@nolnerr}}
460 % \changes{v1.0z}{1995/07/13}{Use \cs{nobreak}}
461 %    \begin{macrocode}
462 \def\@centercr{\ifhmode \unskip\else \@nolnerr\fi
463        \par\@ifstar{\nobreak\@xcentercr}\@xcentercr}
464 %    \end{macrocode}
465 % \end{macro}
467 % \begin{macro}{\@xcentercr}
468 %    \begin{macrocode}
469 \def\@xcentercr{\addvspace{-\parskip}\@ifnextchar
470     [\@icentercr\ignorespaces}
471 %    \end{macrocode}
472 % \end{macro}
474 % \begin{macro}{\@icentercr}
475 %    \begin{macrocode}
476 \def\@icentercr[#1]{\vskip #1\ignorespaces}
477 %    \end{macrocode}
478 % \end{macro}
481 % \begin{environment}{center}
482 % \changes{v0.9h}{1993/12/13}{Removed optional argument of \cs{item}}
483 % \changes{v1.0u}{1994/11/12}{Changed end macro to \cs{def}: safer and
484 % consistent}
485 %    We use |\relax| to prevent |\item| scanning too far.
486 %    \begin{macrocode}
487 \def\center{\trivlist \centering\item\relax}
488 %    \end{macrocode}
490 %    \begin{macrocode}
491 \def\endcenter{\endtrivlist}
492 %    \end{macrocode}
493 % \end{environment}
495 % \begin{macro}{\centering}
496 %    \begin{macrocode}
497 \def\centering{%
498   \let\\\@centercr
499   \rightskip\@flushglue\leftskip\@flushglue
500   \parindent\z@\parfillskip\z@skip}
501 %    \end{macrocode}
502 % \end{macro}
504 % \begin{macro}{\@rightskip}
505 %    \begin{macrocode}
506 \newskip\@rightskip \@rightskip \z@skip
507 %    \end{macrocode}
508 % \end{macro}
510 % \begin{environment}{flushleft}
511 % \changes{v0.9h}{1993/12/13}{Removed optional argument of \cs{item}}
512 % \changes{v1.0u}{1994/11/12}{Changed end macro to \cs{def}: safer and
513 % consistent}
514 %    We use |\relax| to prevent |\item| scanning too far.
515 %    \begin{macrocode}
516 \def\flushleft{\trivlist \raggedright\item\relax}
517 %    \end{macrocode}
519 %    \begin{macrocode}
520 \def\endflushleft{\endtrivlist}
521 %    \end{macrocode}
522 % \end{environment}
524 % \begin{macro}{\raggedright}
525 %    \begin{macrocode}
526 \def\raggedright{%
527   \let\\\@centercr\@rightskip\@flushglue \rightskip\@rightskip
528   \leftskip\z@skip
529   \parindent\z@}
530 %    \end{macrocode}
531 % \end{macro}
533 % \begin{environment}{flushright}
534 % \changes{v0.9h}{1993/12/13}{Removed optional argument of \cs{item}}
535 % \changes{v1.0u}{1994/11/12}{Changed end macro to \cs{def}: safer and
536 % consistent}
537 %    We use |\relax| to prevent |\item| scanning too far.
538 %    \begin{macrocode}
539 \def\flushright{\trivlist \raggedleft\item\relax}
540 %    \end{macrocode}
542 %    \begin{macrocode}
543 \def\endflushright{\endtrivlist}
544 %    \end{macrocode}
545 % \end{environment}
547 % \begin{macro}{\raggedleft}
548 %    \begin{macrocode}
549 \def\raggedleft{%
550   \let\\\@centercr
551   \rightskip\z@skip\leftskip\@flushglue
552   \parindent\z@\parfillskip\z@skip}
553 %    \end{macrocode}
554 % \end{macro}
556 %    \begin{macrocode}
557 \message{verbatim,}
558 %    \end{macrocode}
560 % \subsection{Verbatim}
563 %  The verbatim environment uses the fixed-width |\ttfamily| font, turns
564 %  blanks into spaces, starts a new line for each carriage return (or
565 %  sequence of consecutive carriage returns), and interprets
566 %  \emph{every} character literally.
567 %  I.e., all special characters |\, {, $|, etc.
568 %   are |\catcode|'d to 'other'.
570 % The command |\verb| produces in-line verbatim text, where the argument
571 % is delimited by any pair of characters.  E.g., |\verb #...#| takes
572 %  `|...|' as its argument, and sets it verbatim in |\ttfamily| font.
574 %  The *-variants of these commands are the same, except that spaces
575 %  print as the \TeX{}book's space character instead of as blank spaces.
577 %  \begin{macro}{\@vobeyspaces}
578 %    \begin{macrocode}
579 {\catcode`\ =\active%
580 \gdef\@vobeyspaces{\catcode`\ \active\let \@xobeysp}}
581 %    \end{macrocode}
582 % \end{macro}
584 %  \begin{macro}{\@xobeysp}
585 % \changes{v1.0z}{1995/07/13}{Use \cs{nobreak}}
586 % \changes{v1.1f}{1996/09/28}{Moved to ltspace.dtx}
587 % \end{macro}
590 %  \begin{macro}{\@xverbatim}
591 %  \begin{macro}{\@sxverbatim}
592 %    \begin{macrocode}
593 \begingroup \catcode `|=0 \catcode `[= 1
594 \catcode`]=2 \catcode `\{=12 \catcode `\}=12
595 \catcode`\\=12 |gdef|@xverbatim#1\end{verbatim}[#1|end[verbatim]]
596 |gdef|@sxverbatim#1\end{verbatim*}[#1|end[verbatim*]]
597 |endgroup
598 %    \end{macrocode}
599 % \end{macro}
600 % \end{macro}
602 %  \begin{macro}{\@verbatim}
603 % \changes{LaTeX2.09}{1991/07/24}{Added \cs{penalty}\cs{interlinepenalty}
604 %               to definition of \cs{par} so that \cs{samepage} works}
605 % \changes{v0.9h}{1993/12/13}{Removed optional argument of \cs{item}}
606 %    Real start of verbatim environment
607 %    We use |\relax| to prevent |\item| scanning too far.
608 % \changes{v0.9p}{1994/01/18}
609 %         {Add \cs{global}\cs{@inlabelfalse}}
610 % \changes{v1.0b}{1994/03/16}
611 %         {Remove \cs{global}\cs{@inlabelfalse} again.}
612 %    \begin{macrocode}
613 \def\@verbatim{\trivlist \item\relax
614   \if@minipage\else\vskip\parskip\fi
615   \leftskip\@totalleftmargin\rightskip\z@skip
616   \parindent\z@\parfillskip\@flushglue\parskip\z@skip
617 %    \end{macrocode}
618 % \changes{LaTeX2.09}{1991/08/26}{\cs{@@par} added}
619 %    Added |\@@par| to clear possible |\parshape| definition
620 %    from a surrounding list (the verbatim guru says).
621 % \changes{v0.9p}{1994/01/18}
622 %         {Only add \cs{penalty} if in hmode}
623 %    \begin{macrocode}
624   \@@par
625   \@tempswafalse
626   \def\par{%
627     \if@tempswa
628 %    \end{macrocode}
629 %    A |\leavevmode| added: needed if, for example, a blank verbatim
630 %    line is the first thing in a list item (wow!).
631 % \changes{v1.0f}{1994/04/29}{\cs{leavevmode} added}
632 %    \begin{macrocode}
633       \leavevmode \null \@@par\penalty\interlinepenalty
634     \else
635       \@tempswatrue
636       \ifhmode\@@par\penalty\interlinepenalty\fi
637     \fi}%
638 %    \end{macrocode}
639 %    To allow customization we hide the font used in a separate macro.
640 %  \changes{v0.9a}{1993/11/21}{use \cs{verbatim@font} instead of \cs{tt}}
641 %  \changes{v0.9h}{1993/12/13}{Readded \cs{@noligs}}
642 %  \changes{v1.1d}{1996/06/03}{Exchanged the following two code lines
643 %           so that \cs{dospecials} cannot reset the category code
644 %           of characters handled by \cs{@noligs}.}
645 %  \changes{v1.1h}{2000/01/07}{Disable hyphenation even if the font allows it.}
646 %    \begin{macrocode}
647   \let\do\@makeother \dospecials
648   \obeylines \verbatim@font \@noligs
649   \hyphenchar\font\m@ne
650 %    \end{macrocode}
651 %    To avoid a breakpoint after the labels box, we remove the penalty
652 %    put there by the list macros: another use of |\unpenalty|!
653 % \changes{v1.0f}{1994/04/29}{Change to \cs{everypar} added}
654 %    \begin{macrocode}
655   \everypar \expandafter{\the\everypar \unpenalty}%
657 %    \end{macrocode}
658 %  \end{macro}
660 %  \begin{macro}{\verbatim}
661 %  \begin{macro}{\endverbatim}
662 %    (RmS 93/09/19) Protected against `missing item' error message
663 %               triggered by empty verbatim environment.
664 %    \begin{macrocode}
665 \def\verbatim{\@verbatim \frenchspacing\@vobeyspaces \@xverbatim}
666 \def\endverbatim{\if@newlist \leavevmode\fi\endtrivlist}
667 %    \end{macrocode}
668 %  \end{macro}
669 %  \end{macro}
671 %  \begin{macro}{\verbatim@font}
672 % \changes{v0.9a}{1993/11/21}{Macro added}
673 %    Macro to select the font  used for verbatim typesetting.
674 %    It also does other work if necessary for the font used.
675 % \changes{v0.9s}{1994/01/21}{Removed unnecessary category code
676 %                            hackery.}
677 %    \begin{macrocode}
678 \def\verbatim@font{\normalfont\ttfamily}
679 %    \end{macrocode}
680 %  \end{macro}
683 %  \begin{environment}{verbatim*}
684 %    \begin{macrocode}
685 \@namedef{verbatim*}{\@verbatim\@sxverbatim}
686 \expandafter\let\csname endverbatim*\endcsname =\endverbatim
687 %    \end{macrocode}
688 %  \end{environment}
690 %  \begin{macro}{\@makeother}
691 %    \begin{macrocode}
692 \def\@makeother#1{\catcode`#112\relax}
693 %    \end{macrocode}
694 %  \end{macro}
696 % \begin{macro}{\verb@balance@group}
697 % \changes{LaTeX2.09}{1993/09/07}
698 %     {(RmS) Changed definition of \cs{verb} so that it detects a
699 %              missing second delimiter.}
700 %    \begin{macrocode}
701 \let\verb@balance@group\@empty
702 %    \end{macrocode}
703 %  \end{macro}
705 % \begin{macro}{\verb@egroup}
706 %    \begin{macrocode}
707 \def\verb@egroup{\global\let\verb@balance@group\@empty\egroup}
708 %    \end{macrocode}
709 %  \end{macro}
711 % \begin{macro}{\verb@eol@error}
712 %    \begin{macrocode}
713 \begingroup
714   \obeylines%
715   \gdef\verb@eol@error{\obeylines%
716     \def^^M{\verb@egroup\@latex@error{%
717             \noexpand\verb ended by end of line}\@ehc}}%
718 \endgroup
719 %    \end{macrocode}
720 % \end{macro}
722 %  \begin{macro}{\verb}
723 % \changes{LaTeX2.09}{1992/08/24}
724 %         {Changed \cs{verb} and \cs{@sverb} to work correctly
725 %            in math mode}
726 % \changes{v0.9a}{1993/11/21}{Use \cs{verbatim@font} instead of
727 %                             \cs{tt}.}
728 % \changes{v1.1a}{1995/09/19}{Put \cs{@noligs} after
729 %                    \cs{verbatim@font} where it belongs.}
730 %    Typesetting a small piece verbatim.
731 %  \changes{v1.1d}{1996/06/03}{Put setting of verbatim font after
732 %           \cs{dospecials}
733 %           so that \cs{dospecials} cannot reset the category code
734 %           of characters handled by \cs{@noligs}.}
735 %    \begin{macrocode}
736 \def\verb{\relax\ifmmode\hbox\else\leavevmode\null\fi
737   \bgroup
738     \verb@eol@error \let\do\@makeother \dospecials
739     \verbatim@font\@noligs
740     \@ifstar\@sverb\@verb}
741 %    \end{macrocode}
742 %  \end{macro}
745 % \begin{macro}{\@sverb}
746 % \changes{v1.0j}{1994/05/10}{Slight change in error message text.}
747 % Definitions of |\@sverb| and |\@verb| changed so |\verb+ foo+|
748 % does not lose leading blanks when it comes at the beginning of a line.
749 % Change made 24 May 89. Suggested by Frank Mittelbach and Rainer
750 % Sch\"opf.
752 %    \begin{macrocode}
753 \def\@sverb#1{%
754   \catcode`#1\active
755   \lccode`\~`#1%
756   \gdef\verb@balance@group{\verb@egroup
757      \@latex@error{\noexpand\verb illegal in command argument}\@ehc}%
758   \aftergroup\verb@balance@group
759   \lowercase{\let~\verb@egroup}}%
760 %    \end{macrocode}
761 % \end{macro}
763 % \begin{macro}{\@verb}
764 %    \begin{macrocode}
765 \def\@verb{\@vobeyspaces \frenchspacing \@sverb}
766 %    \end{macrocode}
767 % \end{macro}
769 %  \begin{macro}{\verbatim@nolig@list}
770 % \changes{LaTeX2.09}{1993/09/03}
771 %         {Replaced \cs{@noligs} by extensible list}
772 %    \begin{macrocode}
773 \def\verbatim@nolig@list{\do\`\do\<\do\>\do\,\do\'\do\-}
774 %    \end{macrocode}
775 %  \end{macro}
777 %  \begin{macro}{\do@noligs}
778 %    \begin{macrocode}
779 \def\do@noligs#1{%
780   \catcode`#1\active
781   \begingroup
782      \lccode`\~`#1\relax
783      \lowercase{\endgroup\def~{\leavevmode\kern\z@\char`#1}}}
784 %    \end{macrocode}
785 %  \end{macro}
787 %  \begin{macro}{\@noligs}
788 %    To stay compatible with packages that use |\@noligs| we keep it.
789 % \changes{v0.9h}{1993/12/13}{Readded \cs{@noligs}}
790 %    \begin{macrocode}
791 \def\@noligs{\let\do\do@noligs \verbatim@nolig@list}
792 %    \end{macrocode}
793 %  \end{macro}
795 % \changes{v0.9i}{1993/12/16}{\cs{literal} added}
796 % \changes{v1.0r}{1994/05/26/16}{\cs{literal} removed}
797 %    \begin{macrocode}
798 %</2ekernel>
799 %    \end{macrocode}
801 % \Finale