% 
% \iffalse
%
% Copyright (C) 1997 2002 2008 2011 by
%    Robin Fairbairns <rf10@cam.ac.uk>
%
% This work may be distributed and/or modified under the
% conditions of the LaTeX Project Public License, either
% version 1.3c of this license or (at your option) any later
% version. The latest version of this license is in
%    http://www.latex-project.org/lppl.txt
% and version 1.3c or later is part of all distributions of
% LaTeX version 2005/12/01 or later.
%
% This work has the LPPL maintenance status `maintained'.
%
% The current maintainer of this work is Robin Fairbairns.
%
% This work consists of the source files moreverb.dtx,
%                                        moreverb.ins
%                  and the derived files moreverb.sty,
%                                        moreverb.pdf
%
% RCS information:
%
% $Id: moreverb.dtx,v 1.12 2011/04/18 19:03:28 rf10 Exp rf10 $
%
% \section{Initially: identify the package}
%
% We use the same body for the \cs{ProvidesFile} as for the
% \cs{ProvidesPackage} command.
%
%    \begin{macrocode}
\NeedsTeXFormat{LaTeX2e}
%<*dtx>
\ProvidesFile{moreverb.dtx}
%</dtx>
%<moreverb>\ProvidesPackage{moreverb}
        [2008/06/03 v2.3a
%<moreverb>    `more' verbatim facilities%
%<*dtx>
               moreverb source file%
%</dtx>
                   ]
%    \end{macrocode}
% Code to compile the thing using LaTeX2e
%
%<*driver>
\documentclass{ltxdoc}
%
\setcounter{errorcontextlines}{999}
%
\GetFileInfo{moreverb.dtx}
%
% The definition of \star in ltxdoc.cls is useless (bug report
% LaTeX/2117).  \env is something I would like to have -- I'm
% not sure this definition is entirely kosher (in any case, why aren't
% all these things in doc.sty?)
%
\renewcommand\star{\texttt{*}}
\DeclareRobustCommand\env[1]{\cs{begin\char`\{#1\char`\}}}
%
\begin{document}
 \title{Das \textsf{moreverb} Paket\thanks{Diese Datei
        hat die Versionnummer \fileversion, letzte
        \"Uberarbeitung \filedate}}
    \author{Robin Fairbairns (\small\texttt{rf10@cam.ac.uk})\\
            nach\\
            Angus Duggan, Rainer Sch\"opf and Victor
	    Eijkhout\footnote{\"Ubersetzt von \textbf{Matthias Biniok} (FSU
	    Jena),
	    September 2011.}}
 \date{\the\year-\ifnum\month<10 0\fi\the\month
                -\ifnum\day  <10 0\fi\the\day}
 \maketitle
 \tableofcontents
 \DocInput{moreverb-DE.dtx}
\end{document}
%</driver>
%
% \fi
%
% \CheckSum{402}
%
% \section{Dieses Paket}
%
% Dieses Paket nutzt die Ausstattung des \textsf{verbatim}
% Pakets der \LaTeXe{}-\emph{tools}-Distribution, um eine Anzahl
% von Dingen zur Verf\"ugung zu stellen, die in der Entwicklung des Pakets
% als unn\"otig abgelehnt wurden. (Dennoch geh\"ort der Tabulator-Erweiterungs-Code
% dieses Pakets zu einem der FAQs von |comp.text.tex|)
%
% Das Paket stellt Dinge dreier breiter Gebiete zur Verf\"ugung:
% \begin{itemize}
% \item Tabulator-Erweiterung und \"Ahnliches,
% \item Zeilennummerierung,
% \item Sonstiges: wortw\"ortlich in eine Datei schreiben (z.\,B. f\"ur
%   sp\"ateres Wiedereinsetzen), und das 'Verpacken'.
% \end{itemize}
%
% \subsection{Tabulator-Erweiterung}
%
% Das Paket erm\"oglicht Ihnen, die voraussichtliche Breite der Tabulation
% festzulegen und erlaubt das Einbinden von Dateien, die Tabulatoren enthalten.
%
% \DescribeEnv{verbatimtab}
%
% \env{verbatimtab}\oarg{Tab-Breite}
% gibt dessen K\"orper\footnote{Mit K\"orper ist immer der Rumpf des Befehls gemeint.} wortw\"ortlich wieder, 
% wobei die Tabulatoren die Gr\"o\ss e der gegeben Breite haben (der Standardwert ist 8).
%
% \DescribeMacro{\verbatimtabinput}
%
% \cs{verbatimtabinput}\oarg{Tab-Breite}\marg{Datei-Name}
% ist die Datei-Einbindungsversion der \texttt{verbatimtab}-Umgebung.
%
% \DescribeMacro{\verbatimtabsize}
%
% Die Gr\"o\ss e des Tabulators wird in \cs{verbatimtabsize} gespeichert und dauert
% zwischen den Benutzungen der Umgebungen an.  (Das hei\ss t, dass ein optionales Argument an
% einem Element auch alle nachfolgenden Elemente betrifft.)
%
% \noindent Um den Wert durch etwas anderes als durch Benutzung eines 
% optionalen Arguments zu ersetzen, schreibt man:
%
% \cs{renewcommand}\cs{verbatimtabsize}|{|\meta{Wert}\cs{relax}|}|
%
% Es gibt keine Versprechungen hinsichtlich der gebotenen Leistung, wenn Sie das 
% \cs{relax} weglassen!
%
% \subsection{Zeilennummerierung}
%
% Zeilennummerierung ist oft bei der Abbildung von Code-Beispielen n\"utzlich
% (dies ist n\"otig f\"ur diejenigen von uns, die solche Code-Schnipsel nicht
% versch\"onigen wollen).
%
% \DescribeEnv{listing}
%
% \env{listing}\oarg{Intervall}\marg{Startzeile} nummeriert die Zeilen 
% des K\"orpers. Das Argument \meta{Startzeile} gibt die Startzeile an.
% Das optionale Argument \meta{Intervall} legt die Anzahl der Zeilen
% zwischen den nummerierten Zeilen fest: Das hei\ss t, jede Zeile mit der
% Nummer \(=0\pmod{\mbox{\meta{Intervall}}}\) wird nummeriert.
% (Au\ss erdem wird Zeilennummer 1 immer nummeriert.)  Der
% Standardwert von \meta{Intervall} ist 1 (d.\,h., es wird jede Zeile
% nummeriert).
%
% \DescribeEnv{listingcont}
%
% \env{listingcont} f\"ahrt dort fort, wo der letzte Eintrag aufgeh\"ort hat.
%
% Der Stil, in dem das Label gesetzt ist, kann f\"ur eine der beiden Umgebungen ver\"andert werden, 
% durch Neudefinierung von \cs{listinglabel}.  Beide Umgebungen
% erweitern auch Tabulatoren.
%
% '\star'-Versionen von beiden Listing-Umgebungen werden angeboten;
% diese machen die gew\"ohnlichen |verbatim*| Dinge mit ausgegebenen Leerzeichen wie
% '\verb*| |', aber erweitern keine Tabulatoren.
%
% \DescribeMacro{listinginput}
%
% \cs{listinginput}\oarg{Intervall}\marg{Startzeile}\marg{Dateiname}
% ist eine Listing-Version zum Schreiben in eine Datei. Es gibt keine '\star'-Form.
%
% \subsection{Sonstiges}
%
% \DescribeEnv{verbatimwrite}
%
% \env{verbatimwrite}\marg{Dateiname} schreibt allen Text seines K\"orpers in eine Datei, 
% dessen Name als Argument \"ubergeben wird.
%
% \DescribeEnv{boxedverbatim}
%
% \env{boxedverbatim} legt den Inhalt einer verbatim-Umgebung in
% einer Rahmenbox ab.  Wenn man versucht, dies auf eine 'naive' Weise zu tun, wird man sehen, 
% dass die verbatim-Zeilen alle so breit werden, wie die Breite der Seite, 
% sodass die Box h\"aufig sehr schlecht zum Text passt, den sie 
% umgibt.
%
% \DescribeEnv{verbatimcmd}
%
% Die |verbatimcmd| Umgebung wurde von der \LaTeX2.09 und
% fr\"uheren \LaTeXe{} Versionen dieses Paketes angeboten. Jedoch werden dessen F\"ahigkeiten nun von
% |alltt| zur Verf\"ugung gestellt, das im \textsf{alltt}-Paket definiert ist,
% welches jetzt Teil der \LaTeX{} Grunddistribution ist, daher wurde
% |verbatimcmd| zur\"uckgezogen.
%
% \StopEventually{}
%
% \section{Der Code des Pakets}
%
%    \begin{macrocode}
%<*moreverb>
%    \end{macrocode}
%
% \subsection{Initial-Code}
%
%  L\"adt das \textsf{verbatim}-Paket, falls es noch nicht geladen ist.
%
%    \begin{macrocode}
\@ifundefined{verbatim@processline}{\RequirePackage{verbatim}}{}
%    \end{macrocode}
%
% \subsection{In eine Datei schreiben}
%
% \begin{environment}{verbatimwrite}
% \env{verbatimwrite}\marg{Dateiname} schreibt den gesamten Text im K\"orper in eine Datei,
% der Name der Datei wird als Argument \"ubergeben. (Dieser Code wurde
% von Rainer Sch\"opf geschrieben.)
%
% Beachten Sie, dass der Code bei erstmaliger Benutzung seinen eigenen Output-Stream erzeugt.
% (Dies ist eine Sparma\ss nahme; wenn der Benutzer
% \env{verbatimwrite} nie benutzt, wird auch kein \cs{write}-Stream erzeugt. Ein gegenw\"artiger problematischer
% Benutzungsfall taucht in tex.sx auf \dots)
%
%    \begin{macrocode}
\def\verbatimwrite#1{%
  \@ifundefined{verbatim@out}{\newwrite\verbatim@out}{}%
  \@bsphack
  \immediate\openout \verbatim@out #1
  \let\do\@makeother\dospecials
  \catcode`\^^M\active \catcode`\^^I=12
  \def\verbatim@processline{%
    \immediate\write\verbatim@out
      {\the\verbatim@line}}%
  \verbatim@start}
%    \end{macrocode}
%    \begin{macrocode}
\def\endverbatimwrite{%
  \immediate\closeout\verbatim@out
  \@esphack}
%    \end{macrocode}
% \end{environment}
%
% \subsection{Tabulator-Erweiterung}
%
% Wir definieren ein paar zus\"atzliche Makros und Z\"ahler f\"ur erweiternde Tabulatoren.
% Sie werden von den |listing|- und |verbatimtab|-Umgebungen verwendet.
%
%    \begin{macrocode}
\newcount\tab@position \newcount\tab@size
%    \end{macrocode}
%
% \cs{verbatimtabsize} ist gew\"ohnlich ein Z\"ahler, doch das scheint mir
% \"ubertrieben (\LaTeX{} benutzt einfach zu viele Z\"ahler\dots).
%
%    \begin{macrocode}
\def\verbatimtabsize{8\relax}
%    \end{macrocode}
%
% \begin{macro}{\@xobeytab}
%
% \cs{@xobeytab} f\"ugt genug Leerzeichen ein, um uns zum n\"achsten  
% symbolischen Tabulatoren-Ende zu bringen.
%    \begin{macrocode}
\def\@xobeytab{%
  \loop
    \toks@\expandafter{\the\toks@\@xobeysp}%
    \advance\tab@position-1
  \ifnum\tab@position>0 \repeat
}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@vobeytabs}
% \cs{@vobeytabs} initialisiert die Benutzung von \cs{@xobeytab}. 
% Muss innerhalb einer Gruppe ausgef\"uhrt werden, da es nicht in die weite Welt entweichen darf.
%
%    \begin{macrocode}
\begingroup
  \catcode`\^^I=\active
  \gdef\@vobeytabs{\catcode`\^^I\active\let^^I\@xobeytab}%
\endgroup
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\verbatim@tabexpand}
% \cs{verbatim@tabexpand}\meta{body of line}\cs{@nil} verarbeitet jeden Buchstaben einer Zeile
% durch Endrekursion, z\"ahlt die Buchstaben und
% jongliert ein bisschen, wenn ein Tab auftritt. (Was gew\"ohnlich 
% 'line imaging' genannt wird\dots)
%
%    \begin{macrocode}
\def\verbatim@tabexpand#1{%
  \ifx#1\@nil
%   \showthe\toks@
    \the\toks@
    \expandafter\par
  \else
    \ifx#1\@xobeytab
      \@xobeytab
    \else
%    \end{macrocode}
%
% Wir k\"onnen \cs{@xobeysp} gefahrlos in das Token-Register tun, da es
% genau das macht, was wir brauchen.
%    \begin{macrocode}
      \toks@\expandafter{\the\toks@#1}%
      \advance\tab@position\m@ne
    \fi
    \ifnum\tab@position=0 \tab@position\tab@size \fi
    \expandafter\verbatim@tabexpand
  \fi
}
%    \end{macrocode}
% \end{macro}
%
% \begin{environment}{listing}
% \env{listing}\oarg{Intervall}\marg{Startzeile}
% 
% Definiert eine verbatim-Umgebung mit nummerierten Zeilen; das optionale Argument
% \meta{Intervall} legt die Anzahl der Zeilen zwischen den nummerierten
% Zeilen fest, und das Argument \meta{Startzeile} gibt die Startzeile an.
%
% \begin{environment}{listingcont}
% \env{listingcont}
%
% F\"ahrt dort fort, wo die Auflistung aufh\"ort. Der Stil, in dem das Label gesetzt ist, kann durch 
% Neudefinierung von \cs{listinglabel} ver\"andert werden. 
%
% '\star'-Versionen beider Umgebungen werden angeboten.
%
% \begin{macro}{\listing@line}
% \cs{listing@line} enth\"alt die aktuelle Zeilennummer; der Standardwert
% ist 1, also kann man |listingcont| fr\"ohlich in einem Dokument benutzen, 
% wenn nur ein Stream von w\"ortlichem Text geschrieben wird.
%
%    \begin{macrocode}
\newcount\listing@line \listing@line=1
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\listing@step}
% \cs{listing@step} ist ein anderer Fall, bei dem ein Z\"ahler gewohnt verwendet wird, ohne von sehr 
% offensichtlichem Nutzen zu sein,
% aber ein wertvolles Z\"ahlerregister aufbraucht.
% Auch hier ist der Wert modal; das hintere \cs{relax} ist notwendig.
%
%    \begin{macrocode}
\def\listing@step{1\relax}
%    \end{macrocode}
% \end{macro}
%    
% Das Hinzuf\"ugen einer \cs{hbox} vor der Zeile verursacht einen
% Zeilenumbruch, also mache ich schnell 
% dieses Geschw\"atz,\footnote{Das
% Personalpronomen war in den Kommentaren der Originalversion
%   dieses Pakets vorhanden; ich wei\ss\ nicht, auf wen es sich bezieht
%   ~--- RF} um die Linien sch\"on ausgerichtet zu bekommen.
% Ich habe wahrscheinlich einige offensichtliche Gr\"unde vergessen, weshalb \cs{hbox}es nicht funktionieren.
% \footnote{Der Grund
% ist, dass \cs{hbox} im vertikalen Modus einen kompletten Paragraphen aus eigener Kraft herstellt;
%  dieses Problem k\"onnte im Laufe der Zeit behandelt werden, 
%  aber momentan\dots}.
%
%    \begin{macrocode}
\def\listinglabel#1{\llap{\small\rmfamily\the#1}\hskip\listingoffset\relax}
\def\thelisting@line{%
  \setbox0\hbox{\listinglabel\listing@line}%
  \@tempcnta=\listing@line
  \divide\@tempcnta\listing@step \multiply\@tempcnta\listing@step
  \ifnum\listing@line=\@ne
    \unhbox0
  \else
    \ifnum\@tempcnta=\listing@line
      \unhbox0
    \else
      \hskip\wd0
    \fi
  \fi}
%    \end{macrocode}
%
% \begin{macro}{\listingoffset}
% \cs{listingoffset} ist die Trennung zwischen der Zeilennummer und der aktuellen Zeile; der Standardwert 
% ist \verb|1.5em|.
%    \begin{macrocode}
\providecommand\listingoffset{1.5em}
%    \end{macrocode}
% \end{macro}
%
% Benutzen Sie einfach \cs{listing}, um die Parameter einzulesen und um 
% dann \cs{listingcont} zu benutzen.
%
%    \begin{macrocode}
\newcommand\listing[2][1]{%
  \global\listing@line=#2\relax
  \gdef\listing@step{#1\relax}
  \listingcont}
%    \end{macrocode}
%
% \cs{listingcont} ist das funktionale Ende der zwei Umgebungen.
%
%    \begin{macrocode}
\def\listingcont{%
  \tab@size=\verbatimtabsize
  \def\verbatim@processline{\tab@position\tab@size
    \thelisting@line \global\advance\listing@line1
    \toks@{}%
    \expandafter\verbatim@tabexpand\the\verbatim@line\@nil}%
  \@verbatim\frenchspacing\@vobeyspaces\@vobeytabs\verbatim@start}
%    \end{macrocode}
%
% Nichts Besonderes am Ende der zwei Umgebungen.
%
%    \begin{macrocode}
\let\endlisting=\endtrivlist
\let\endlistingcont=\endtrivlist
%    \end{macrocode}
%
% Jetzt dasselbe Geschw\"atz f\"ur die '\verb+*+' Versionen.
%
%    \begin{macrocode}
\expandafter\newcommand\csname listing*\endcsname[2][1]{%
  \global\listing@line=#2\relax
  \gdef\listing@step{#1\relax}
  \csname listingcont*\endcsname}
\@namedef{listingcont*}{%
  \def\verbatim@processline{%
    \thelisting@line \global\advance\listing@line1
    \the\verbatim@line\par}%
  \@verbatim\verbatim@start}
%    \end{macrocode}
%
% Nur ein bisschen \"Arger in den Namensdefinitionen am Ende der
% Umgebungen.
%
%    \begin{macrocode}
\expandafter\let\csname endlisting*\endcsname\endtrivlist
\expandafter\let\csname endlistingcont*\endcsname\endtrivlist
%    \end{macrocode}
% \end{environment}
% \end{environment}
%
% \begin{macro}{listinginput}
% \cs{listinginput}\oarg{Intervall}\marg{Startzeile}\marg{Dateiname}
% ist eine Version von listing zum Schreiben in eine Datei.
%
%    \begin{macrocode}
\def\listinginput{%
   \@ifnextchar[%]
     {\@listinginput}%
     {\@listinginput[1]}}
\begingroup
  \catcode`\~=\active \lccode`\~=`\^^M \lccode`\N=`\N
  \lowercase{\endgroup
    \def\@listinginput[#1]#2#3{\begingroup
      \global\listing@line=#2
      \gdef\listing@step{#1\relax}
      \tab@size=\verbatimtabsize
      \def\verbatim@processline{\tab@position\tab@size
        \thelisting@line \global\advance\listing@line1
        \toks@{}%
        \expandafter\verbatim@tabexpand\the\verbatim@line\@nil}%
      \@verbatim\frenchspacing\@vobeyspaces\@vobeytabs
      \def\verbatim@addtoline##1~{%
        \verbatim@line\expandafter{\the\verbatim@line##1}}%
      \openin\verbatim@in@stream=#3
      \ifeof\verbatim@in@stream
        \PackageWarning{moreverb}{No file #3.}%
      \else
        \do@verbatimtabinput
        \closein\verbatim@in@stream
      \fi
      \endtrivlist\endgroup
    \@doendpe
  }%
}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{verbatimcmd}
% \texttt{verbatimcmd} war eine verbatim-Umgebung mit Ausnahme der
% Escape- und Gruppierungselemente \verb+\+, \verb+{+, \verb+}+.
% Das ist (err) genau die Spezifikation der \texttt{alltt}
% Umgebung, und es ist im \textsf{alltt} Paket, welches jetzt Teil der
% Grunddistribution ist.
%    \begin{macrocode}
\def\verbatimcmd{%
  \PackageError{moreverb}{The verbatimcmd environment is obsolete}%
                         {Use alltt (from the LaTeX required package
                           alltt) in place of verbatimcmd}%
}
\let\endverbatimcmd\relax
%    \end{macrocode}
% \end{macro}
%
% \begin{environment}{boxedverbatim}
% \texttt{boxedverbatim} legt den Inhalt einer verbatim-Umgebung in
% einer Rahmenbox ab. 
%
% (Geschrieben von Victor Eijkhout.)
%
% \noindent Fehlerbehebung:
% \begin{itemize}
% \item David Carlisle 1995-12-28, Besch\"aftigung mit Platzthemen (iirc)
% \item Moretn H\o gholm 2008-06-01, Positionierung von Rahmen in Listen
% \end{itemize}
%
% Zuerst redefiniert man 'processline', um nur eine Zeile, so breit wie
% die nat\"urliche Breite der Zeile, herzustellen.
%
%    \begin{macrocode}
\def\boxedverbatim{%
  \def\verbatim@processline{%
    {\setbox0=\hbox{\the\verbatim@line}%
    \hsize=\wd0 \the\verbatim@line\par}}%
%    \end{macrocode}
%
% Nun speichert man den verbatim-Code in einer Box.
%
%    \begin{macrocode}
  \@minipagetrue           % DPC
  \@tempswatrue            % DPC
  \@totalleftmargin\z@     % MH
  \setbox0=\vbox\bgroup \verbatim
}
%    \end{macrocode}
%
% Am Ende der Umgebung, m\"ussen wir (umm) die Resultate einfach in
% einen Rahmen stecken.
%
%    \begin{macrocode}
\def\endboxedverbatim{%
  \endverbatim
  \unskip\setbox0=\lastbox % DPC
%    \end{macrocode}
%
% Jetzt ist alles in der Box, also k\"onnen wir sie schlie\ss en\dots
%    \begin{macrocode}
  \egroup
%    \end{macrocode}
%
% Um den Code zum Zentrieren zu \"andern, ben\"otigt die n\"achste Zeile 
% eine Stelle zum Schnippeln.
%    \begin{macrocode}
  \fbox{\box0}%
}
%    \end{macrocode}
% \end{environment}
%
% \begin{environment}{verbatimtab}
% \env{verbatimtab}\oarg{tab width}
% ist eine verbatim-Umgebung, welche Tabulatoren erweitert; das optionale
% Argument legt den Abstand zwischen den Tab-Stops fest.
%
% Das Ausf\"uhren von \cs{obeylines}, bevor man sich das optionale Argument ansieht, verhindert eine leere
% erste Zeile der Umgebung, die ein \cs{par}
% Zeichen wird (dieser Fehler wurde von Werner Lemberg berichtet).
%    \begin{macrocode}
\newenvironment{verbatimtab}{\obeylines\@verbatimtab}{\endtrivlist}
%    \end{macrocode}
%
% Dies verarbeitet das optionale Argument von |verbatimtab|, sodass wir uns 
% nun von den gef\"urchteten \cs{par} Zeichen gesch\"utzt haben:
%    \begin{macrocode}
\newcommand\@verbatimtab[1][\verbatimtabsize]{%
  \do@verbatimtab{#1}{%
     \@verbatim\frenchspacing\@vobeyspaces\@vobeytabs\verbatim@start}%
}
%    \end{macrocode}
% \end{environment}
%
% \begin{macro}{\do@verbatimtab}
%
% Stellt eine Umgebung f\"ur Tabulatoren bereit; \verb+#1+ ist der Wert der Tabulator-Gr\"o\ss e
% (in der Regel, urspr\"unglich ein optionales Argument), \verb+#2+ sind die 'Start-Kommandos', die 
% ausgef\"uhrt werden sollen, 
% sobald eine passende Definition von
% \cs{verbatim@processline} eingef\"uhrt wurde:
%    \begin{macrocode}
\def\do@verbatimtab#1#2{%
  \tab@size=#1
  \def\verbatim@processline{\tab@position\tab@size
    \toks@{}%
    \expandafter\verbatim@tabexpand\the\verbatim@line\@nil}%
  #2%
}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\verbatimtabinput}
% \cs{verbatimtabinput}\oarg{Tab-Breite}\marg{Dateiname}
% ist die Version der \texttt{verbatimtab}-Umgebung zum Schreiben in eine Datei.
%
% Wir benutzen den Input-Stream der vom \textsf{verbatim}-Paket erworben wurde; wir ben\"otigen es schließlich 
% zum Laden.
% (Man muss zugeben, dass der Name des Streams nicht wirklich
% Teil der definierten Schnittstelle des Pakets ist,
% aber auf der anderen Seite gibt es keine besondere Wahrscheinlichkeit,
% dass es sich jemals \"andern wird.)
%
% Wir benutzen (urspr\"unglich) keine ausgefallenen Eigenschaften von \cs{newcommand}, da die Definition
% innerhalb einer Gruppe war,
% und damit global. Also \dots\
% 'traditioneller' Code, um einen Befehl mit einem optionalen Argument
% anzubieten (was wahrscheinlich nicht mehr n\"otig ist):
%
%    \begin{macrocode}
\def\verbatimtabinput{%
   \@ifnextchar[%]
     {\@verbatimtabinput}%
     {\@verbatimtabinput[\verbatimtabsize]}}
\begingroup
\catcode`\~=\active \lccode`\~=`\^^M \lccode`\N=`\N
\lowercase{\endgroup
  \def\@verbatimtabinput[#1]#2{\begingroup
    \do@verbatimtab{#1}{%
      \@verbatim\frenchspacing\@vobeyspaces\@vobeytabs}%
    \def\verbatim@addtoline##1~{%
      \verbatim@line\expandafter{\the\verbatim@line##1}}%
    \openin\verbatim@in@stream=#2
    \ifeof\verbatim@in@stream
      \PackageWarning{moreverb}{No file #2.}
    \else
      \@addtofilelist{#2}%
      \do@verbatimtabinput
      \closein\verbatim@in@stream
    \fi
  \endtrivlist\endgroup\@doendpe}%
}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\do@verbatimtabinput}
% Ausgeschriebene Schleife (Endrekursion) zum Lesen der Datei:
%    \begin{macrocode}
\def\do@verbatimtabinput{%
  \read\verbatim@in@stream to \verbtab@line
  \ifeof\verbatim@in@stream
  \else
    \expandafter\verbatim@addtoline\verbtab@line
    \verbatim@processline
    \verbatim@startline
    \expandafter\do@verbatimtabinput
  \fi
}
%</moreverb>
%    \end{macrocode}
% \end{macro}
%
% \Finale
%
\endinput
%
%% \CharacterTable
%%  {Upper-case    \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
%%   Lower-case    \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
%%   Digits        \0\1\2\3\4\5\6\7\8\9
%%   Exclamation   \!     Double quote  \"     Hash (number) \#
%%   Dollar        \$     Percent       \%     Ampersand     \&
%%   Acute accent  \'     Left paren    \(     Right paren   \)
%%   Asterisk      \*     Plus          \+     Comma         \,
%%   Minus         \-     Point         \.     Solidus       \/
%%   Colon         \:     Semicolon     \;     Less than     \<
%%   Equals        \=     Greater than  \>     Question mark \?
%%   Commercial at \@     Left bracket  \[     Backslash     \\
%%   Right bracket \]     Circumflex    \^     Underscore    \_
%%   Grave accent  \`     Left brace    \{     Vertical bar  \|
%%   Right brace   \}     Tilde         \~}
