summaryrefslogtreecommitdiff
path: root/macros/plain/contrib/misc/verbatim.tex
blob: e4b0b0fe7a1fa9511823819c80dc3dad147aff43 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
% -*- Mode: TeX -*-

\ifx\thisfileis\anUndefinedMacro\input maybeload \fi

\thisfileis{<eb.tex.texlocal>verbatim} % abort loading if we're already loaded

\input redefine

% This file provides a way of defining new verbatim environments, which is
% otherwise difficult.  The '\newverbatimenvironment' declaration is just like
% the '\newenvironment' declaration except that the stuff in between \begin{foo}
% and \end{foo} is read with the special syntax of verbatim mode.
%

\makeatletter

% First, dispatch depending on whether there is an optional argument.

\def\newverbatimenvironment#1{\@ifnextchar
     [{\@new@v@env{#1}}{\@new@v@env{#1}[0]}}

% In the definition of \@new@v@env, the easy part (definition of \endFOO) comes
% first.  The definition of \FOOVERBATIM is harder, and finally \FOO is defined
% to have \verb@syntax\FOOVERBATIM at the end of its expansion.

\def\@new@v@env#1[#2]#3#4{\expandafter\def\csname end#1\endcsname{#4}\relax
   \expandafter\def@verbatim\csname #1VERBATIM\endcsname{#1}{##1\end{#1}}\relax
   \expandafter\newcommand\csname #1\endcsname
       [#2]{#3\verb@syntax\csname #1VERBATIM\endcsname}}

% Define verbatim syntax.

\def\verb@syntax{\obeylines\tt\let\do\@makeother\dospecials\frenchspacing\@vobeyspaces}

% Finally, an auxiliary function to define a macro whose argument is delimited
% by \end{foo} in special syntax, \def@verbatim{\CS}{foo}{...body...}.

\begingroup \catcode `|=0 \catcode `[= 1
\catcode`]=2 \catcode `\{=12 \catcode `\}=12
\catcode`\\=12 |gdef|def@verbatim#1#2#3[|def#1##1\end{#2}[#3]]
|endgroup

\makeatletter