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
|