<html><head><meta name="color-scheme" content="light dark"></head><body><pre style="word-wrap: break-word; white-space: pre-wrap;">% \iffalse meta-comment   -*- coding: utf-8 -*-
%&lt;*package|driver&gt;
%%  (C) 2006, 2009, 2012 Paul Ebermann (Hauptautor)
%%  (C) 2006 Rolf Niepraschk (einiges an Code gespendet)
%%
%%   Package dateiliste - Zur Ausgabe der Liste der Dateien im Dokument.
%%
%%   Die Datei dateiliste.dtx sowie die dazugehÃ¶rige
%%   dateiliste.ins sowie die damit generierte
%%   dateiliste.sty stehen unter der
%%   "LaTeX Project Public License" (LPPL, zu finden
%%   unter http://www.latex-project.org/lppl/, sowie
%%   auch in den meisten TeX-Distributionen in
%%   texmf/docs/latex/base/lppl*.txt), Version 1.3b oder
%%   spÃ¤ter (nach Wahl des Verwenders).
%%
%%   Der 'maintenance-status' ist (zur Zeit) 'maintained'.
%%   
%%   Das heiÃŸt in etwa, die Dateien dÃ¼rfen frei vertrieben werden,
%%   bei Ã„nderungen (durch andere Personen als Paul Ebermann)
%%   ist aber der Name der Datei zu Ã¤ndern.
%&lt;/package|driver&gt;
% \fi
%
% \ProvideFileInfos{$Id$}
% {Dokumentation fuer dateiliste.sty }
%
% \iffalse
%&lt;*driver&gt;
\documentclass[draft%
   ]%
  {ltxdoc}
%\PassOptionsToPackage{utf8}{inputenc}
\usepackage[utf8]{pauldoc}[2009/11/03]

% dox liefert uns die MÃ¶glichkeit, Package-Optionen als
% solche zu dokumentieren.
\usepackage{dox}[2009/09/28]
\doxitem{Option}{option}{Optionen}

\usepackage[showpages, svn]{dateiliste}
\usepackage{enumerate}
\begin{filecontents}{test_datei}
% Dies ist nur ein Test.
\ProvidesFile{test_datei.tex}[2006/09/19 v0.0 Eine \csname @secondoftwo\expandafter\endcsname\string\%-$-Beis^p_iel-3-&amp;-Datei ##$
mit \string{Test\string} und noch einer Gruppe. ]
\end{filecontents}
\errorcontextlines=20
\listfiles
%\input{test_datei}
%\inputencoding{utf8}
\begin{document}
   \input{test_datei.tex}
   \DocInput{dateiliste.dtx}
\errorcontextlines=20
\tracingmacros=2
\tracingcommands=2
\end{document}
%&lt;/driver&gt;
%
%&lt;readme|en&gt;This README is for version:
%&lt;eo&gt;Tiu README (legumin) estas por versio:
%&lt;de&gt;Dieses README ist fÃ¼r Version:
%&lt;package&gt;\NeedsTeXFormat{LaTeX2e}[2003/12/01]
%&lt;package&gt;\ProvidesPackage{dateiliste}[%
%
%
%&lt;package|readme|en|de|eo&gt;      2012/10/13 v0.6 %
%
%
%&lt;package&gt;      Ausgabe der Dateiliste (PE)]
%&lt;readme|en|de|eo&gt;----------------
%
% Hier noch der Inhalt der Readme-Datei.
%&lt;*readme&gt;
([de] unten - [eo] sube)
----------------
[en]
%&lt;/readme&gt;
%&lt;*en|readme&gt;
LaTeX-package 'dateiliste' - include list of used files
(like \listfiles) in the document, and related features.

Author:  Paul Ebermann &lt;Paul-Ebermann@gmx.de&gt;
License: LPPL 1.3b or later, author-maintained
         (see http://www.latex-project.org/lppl/).

All Documentation (other than this file) is in german.

The typesetting of the documentation needs 'pauldoc' (from the
same author).
Additionally you'll need the packages 'ltxtable', 'tabularx',
'longtable' and 'rcsinfo'.

The package comes as .dtx + .ins.
Run "latex dateiliste.ins" to create the style file and the
README-files (and maybe put them to texmf/tex/latex/paul/, if
your docstrip is configured accordingly), (after that and
maybe updating your TeX hash) run "latex dateiliste.dtx"
(some times) to create the documentation.

 Usage
-------
The package has three main features, which can
be used independently, but together are specially
useful.

(1) automatic version infos:

  If you use a version control system like RCS, CVS, Subversion
  for your LaTeX source files, you may use the Id tag to generate
  the date and version number for the version string in \listfiles.
  Use

    \ProvideFileInfos{$&lt;&gt;Id$}{short description}

  (without '&lt;&gt;' [0]) in your file, and do a 'cvs commit' (or
  'svn commit'). In the svn case, use the package-option 'svn'
  (or 'subversion') to indicate the parsing format to the
  package, and tell Subversion to expand Id:
     svn propset svn:keywords Id &lt;filename&gt;

(2) include main file:

  Normally the "main" file (given on the command
  line to LaTeX) does not appear in the list given
  by \listfiles. This is changed by the package for
  the case that the file has the name \jobname.tex.

  (More precisely, the package adds \jobname.tex
   iff this file exists and it not can be determinded[1]
   to be already in the file list [2].)

  This is enabled by default and may be disabled
  using the package option 'noaddmain'.
  The macro
    \mainFileToList
  may also be invoked manually to add the main file.

(3) include file list also in the (dvi) result

  You can use the command

    \printFileList[&lt;section command&gt;]

  to include a pretty-printed version of the
  file list as a section (by default \section*,
  any sectioning command may be given as an
  optional argument).

  You also have to use \listfiles in the
  document preamble (otherwise you'll only get
  an error message).

  The table only appears from the second LaTeX-run,
  from the third one is complete, and may need some
  more runs to align correctly.

  The title, preamble and table headers may be localized
  with babel - translations for 'english', 'german',
  'ngerman' and 'esperanto' are included.
  If you need something else or don't use babel, you have
  to redefine the following macros:

  \fileListName     - title ("List of Files")
  \fileListPreamble - preamble (typeset before the table)
  \fileNameName     - table header "file name"
  \dateName         - table header "date"
  \verName          - table header "version"
  \descriptionName  - table header "description"

-----
[0] The &lt;&gt; are inserted here to avoid Subversion
    expanding this line. If someone has an idea how
    to have this in plain format in the README (maybe
    with some complicated magic in the .dtx and/or .ins),
    please contact me.
[1] this determination can be configured with
    the package options
    nocat12 - does only work with eTeX, else
       may give double entry 
    cat12 - works also without eTeX, but may
       have some side effects to other macro
       packages, since it converts \@filelist
       to cat 12.
    The default setting works like cat12 on non-eTeX
    and like nocat12 on eTeX.

[2] this may occur when you invoke
    LaTeX with "\input{mainfile.tex}".
%&lt;/en|readme&gt;
%&lt;*readme&gt;
----------------
[de]
%&lt;/readme&gt;
%&lt;*de|readme&gt;
LaTeX-Paket 'dateiliste' - Liste der verwendeten Dateien im Dokument
und verwandte Funktionen.

Autor:  Paul Ebermann (Paul-Ebermann@gmx.de).
Lizenz: LPPL 1.3b oder spÃ¤ter, mit Maintenance-Status
        "author-maintained". Siehe http://www.latex-project.org/lppl/.

Geschrieben fÃ¼r den eigenen Gebrauch
(-&gt; http://www.math.hu-berlin.de/~ebermann/alg-script/),
aber  vielleicht ist es auch fÃ¼r andere von Nutzen.

Zum Setzen der Dokumentation wird das Paket 'pauldoc'
(vom selben Autor) benÃ¶tigt.

Das Paket kommt als .dtx + .ins.
Mit "latex dateiliste.ins" wird die .sty-Datei erstellt (und
eventuell gleich nach texmf/tex/latex/paul/ installiert,
wenn docstrip entsprechend eingerichtet ist), mit
latex dateiliste.dtx kann (danach und eventuell nach einer
Aktualisierung der TeX-Dateidatenbank) die Dokumentation neu
erstellt werden.

Zur Verwendung siehe dateiliste.pdf.
%&lt;/de|readme&gt;
%&lt;*readme&gt;
----------------
[eo]
%&lt;/readme&gt;
%&lt;*eo|readme&gt;
LaTeX-pakaÄµo 'dateiliste' - VariaÄµo de \DeclareRobustCommand,
kiu antaÅ­e elprovas, Ä‰u la nomo jam ekzistas.

AÅ­toro:  PaÅ­lo Ebermann (Paul-Ebermann@gmx.de).
Licenzo: LPPL 1.3, 'author-maintained'
         (-&gt; http://www.latex-project.org/lppl/).

Kreitaj por propra uzo, sed eble iom de Äi ankaÅ­
uzeblas por aliaj.

La dokumentaro (escepte tiu Ä‰i dosiero) estas nur en la germana
lingvo.

La pakaÄµo bezonas la pakaÄµojn 'ltxtable', 'longtable',
'tabularx' kaj 'rcsinfo'.
Por krei la dokumentadon vi krome bezonas 'pauldoc' (de la sama aÅ­toro).

La pakaÄµo venas en .dtx + .ins.
Voku "latex dateiliste.ins" por krei la .sty-dosieron (kaj
eble meti Äin al texmf/tex/latex/paul/, se via docstrip estis
konfigurita laÅ­e), voku "latex dateiliste.dtx" por rekrei
la dokumentaron.

 Uzado
-------

La pakaÄµo konsistas el tri Ä‰efaj bonaÄµoj, kiujn
oni povas uzi sendepende, sed kune ili estas speciale
utile.


(1) AÅ­tomataj versio-informoj.

  Se vi uzas versio-kontrolan sistemon kiel Subversion aÅ­
  CVS/RCS, vi povas uzi tion por aÅ­tomate generi la daton
  kaj versi-numeron por la listo kreita de \listfiles
  (kaj la listo de (3).)
  Uzu

    \ProvideFileInfos{$&lt;&gt;Id$}{mallonga priskribo}

  en via dosiero, forprenu la '&lt;&gt;', kaj faru 'svn commit' aÅ­
  'cvs commit'. (CVS aÅ­ SVN tiam enmetos informojn, kiun
  \ProvideFileInfos uzos.)
  En la Subversion-kazo necesas antaÅ­e informi Subversion
  pri tio, ke vi volas anstataÅ­i 'Id' per alia afero:
     svn propset svn:keywords Id &lt;dosiernomo&gt;
  AnkaÅ­ necesas uzi la pakaÄµ-opcion 'svn' aÅ­ 'subversion',
  kiel tie:
     \usepackage[svn]{dateiliste}
  

(2) Aldono de Ä‰efa dosiero

  Kutime la Ä‰efa dosiero (kiun vi donis en la
  latex-voko) ne aperas en la listo kreita de
  \listfiles. Tion la pakaÄµo ÅanÄas, se tiu
  dosiero havas la nomfinaÄµon .tex

  (Pli precize, la pakaÄµo aldonas '\jobname.tex',
   se tiu dosiero ekzistas, kaj se ne eblas eltrovi[1],
   ke la dosiero estas jam en la listo[2].)

  Tiu aldonado estas kutime Åaltita, sed eblas
  malÅalti Äin per la pakaÄµ-opcio 'noaddmain'.
  Tiam ankaÅ­ eblas voki
    \mainFileToList
  por fari tion.

(3) Enmetu la dosierliston en la rezulton

  Vi povas uzi la komandon

    \printFileList[&lt;section command&gt;]

  por enmeti bele formatitan version de la
  dosierlisto kiel sekcio (kutime '\section*',
  sed vi povas uzi iun ajn sekci-komandon kiel
  opcia argumento) en la dokumenton.

  Vi krome devas uzi \listfiles en la komenca
  parto de la dokumento (antaÅ­ \begin{document}),
  alikaze vi nur ricevos erarmesaÄon.

  La tabelo nur aperos ekde la dua LaTeX-voko, kaj
  eble bezonos kelkajn pliajn por aspekti Äuste.

  Eblas traduki la titolon de la sekcio, la antaÅ­tekston
  kaj la tabelkapoj helpe de la babel-pakaÄµo - tradukojn
  por 'english', 'german', 'ngerman' kaj 'esperanto' la
  pakaÄµo jam enhavas.
  Se vi bezonas aliajn lingvojn aÅ­ ne uzas 'babel',
  redifinu la sekvajn makroojn:

  \fileListName     - titolo ("Listo de dosieroj")
  \fileListPreamble - antaÅ­teksto (printita inter titolo
                       kaj tabelo)
  \fileNameName     - tabelkapo "dosiernomo"
  \dateName         - tabelkapo "dato"
  \verName          - tabelkapo "versio"
  \descriptionName  - tabelkapo "priskribo"

-----
[1] Tiun determinadon vi povas konfiguri per la
    pakaÄµ-opcioj:
     nocat12 - nur funkcias se vi uzas eTeX, alikaze
       eble la cxef-dosiero aperos dufoje.
     cat12 - funkcias kun aÅ­ sen eTeX, konvertante
       la enhavon de \@filelist al kategorio 12.
    Se vi neniun de tiuj opcioj donas, Äi laboras
    kiel 'nocat12' en eTeX kaj kiel 'cat12' en ne-eTeX.

[2] Tio povas okazi ekzemple, se vi invokas
    LaTeX kun "\input{mainfile.tex}".
%&lt;/eo|readme&gt;
%
% \fi
% \CheckSum{0}
%
% \changes{v0.0}{2006/03/23}{Erste Fassung}
% \changes{v0.1a}{2006/04/05}{Kleine Ã„nderungen der Dokumentation.}
% \changes{v0.2}{2006/04/19}{README-Dateien werden jetzt auch aus
%                            der .dtx-Datei generiert.}
% \changes{v0.5}{2009/11/01}{Umstellung der Dokumentation auf Unicode.}
%
% \GetFileInfo{dateiliste.sty}
%
%
% \title{Das \pack{dateiliste}-Package -- Liste der verwendeten Dateien im Dokument\thanks{%
% Dieses Dokument gehÃ¶rt zu \pack{dateiliste}~\fileversion,
% vom~\filedate.}}
% \author{Paul Ebermann\thanks{E-Mail: \texttt{Paul-Ebermann@gmx.de}}
%         \thanks{Rolf Niepraschk (\texttt{Rolf.Niepraschk@ptb.de})
%                 hat das Package \pack{printfilelist}
%                 geschrieben und mir geschickt, dessen Code bildete
%                 die Basis
%                 fÃ¼r \cs{printFileList}. FÃ¼r den jetztigen Code
%                 (insbesondere dessen Fehler) bin ich (Paul) aber
%                 selbst verantwortlich.}}
%
% \maketitle
%
%  \begin{abstract}
%    Dieses Paket implementiert einige Befehle, um den
%    Ãœberblick Ã¼ber Versionen und Ã„nderungsdaten von \LaTeX-Quelltexten
%    zu behalten: Automatische Versionsinfos aus dem Versionskontrollsystem
%    (CVS/RCS oder Subversion), Hauptdatei in der Dateiliste,
%    Inklusion der Dateiliste als Tabelle im Dokument.
%  \end{abstract}
%
% \tableofcontents
%
%
% \section{Benutzerdokumentation der Befehle}
%
%  Die drei Teile \emph{automatische Versionsinfos} (mittels
%  '\ProvideFileInfos'), \emph{Hauptdatei in der Dateiliste}
%  (mittels '\mainFileToList' bzw. der 'addmain'-Package-Option)
%  und \emph{Dateilisten-Ausgabe} (mittels 'printFileList')
%  sind unabhÃ¤ngig voneinander nutzbar, aber die ersten beiden
%  Features werden durch das letzte erst richtig nÃ¼tzlich,
%  und damit das letzte eine vernÃ¼nftige Ausgabe hat, sind
%  die ersten beiden hilfreich.
%  Daher also alles in einem Package.
%
% \subsection{README in Englisch, Deutsch und Esperanto}
%
%  Eine README-Datei mit einer KurzÃ¼bersicht des Paketes auf
%  Englisch, Deutsch und Esperanto (sowie einzel-Dateien fÃ¼r
%  diese Sprachen) kann ebenfalls mit \pack{docstrip}
%  aus der dtx-Datei generiert werden, die beiliegende Datei
%  'dateiliste.ins' tut dies neben der Generierung der
% '.sty'-Datei.
%
% \subsection{Automatische Versionsinfos}
%
%
%  \noindent\DescribeMacro{\ProvideFileInfos}\marg{id-string}\marg{kurzbeschreibung}
%
%  Ã„ndert die Informationen fÃ¼r die Datei, in der es aufgerufen
%  wurde (bzw. fÃ¼gt neue hinzu).
%
%  \meta{kurzbeschreibung} sollte eine kurze Beschreibung der Funktion/des
%   Inhaltes der Datei sein, optimalerweise nur ASCII-Zeichen.
%
%  \meta{id-string} sollte ein String sein, der (im RCS-Modus) wie
%  \begin{quote}
%  '$''Id: dateiliste.dtx,v 4.1 2009/10/31 19:58:13 epaul Exp $'
%  \end{quote}
%  oder (im Subversion-Modus) wie
%  \begin{quote}
%  '$Id$'
%  \end{quote}
%  aussieht. Diesen lÃ¤sst man am besten von seinem Versionskontrollsystem
%  produzieren -- dieses Paket unterstÃ¼tzt die Syntax von
%  RCS und CVS (RCS-Modus) sowie die Syntax von Subversion (svn).
%
%  Der Modus kann durch Paket-Optionen ausgewÃ¤hlt werden:
%  \begin{itemize}
%  \item \DescribeOption{rcs}\DescribeOption{cvs}
%    Die Option 'rcs' oder 'cvs' wÃ¤hlt den RCS-Modus aus, in dem
%    das Datum mit '/' getrennt wird, der Dateiname von ',v' gefolgt
%    wird, am Ende ein Status gezeigt wird (meist 'Exp'), und die
%    Versionsnommer eine mit '.' getrennte Zahlenfolge ist. (Es kann
%    auÃŸerdem noch der Nutzername desjenigen enthalten sein, der eine
%    Sperre auf diese Datei hÃ¤lt.)
%  \item \DescribeOption{subversion}\DescribeOption{svn}
%    Die Option 'svn' oder 'subversion' wÃ¤hlt den Subversion-Modus
%    aus, in dem der Dateiname ohne Zusatz auftaucht, Datum und Uhrzeit
%    im ISO-8601-Format mit Zeitzonenanzeiger 'Z' dargestellt werden,
%    und die Versionsnummer nur eine Zahl ist.
%  \end{itemize}
% 
%  Aus KompatibilitÃ¤tsgrÃ¼nden zu frÃ¼heren Versionen
%  dieses Paketes (vor 0.5) ist der Default-Modus (d.h. wenn keine
%  dieser Optionen angegeben wurde) 'rcs'.
%
% Wir schreiben also etwas wie
%\begin{quote}
%  '\ProvideFileInfos{$''Id$}{Algebraische Geometrie I}'
%\end{quote}
%  in unsere Datei (Ã¼blicherweise ziemlich am Anfang) und rufen dann
%  'cvs commit' bzw. 'svn commit' auf -- dadurch werden von CVS bzw.
%  Subversion die passenden Informationen in unsere Arbeitskopie
%  eingefÃ¼llt. (Bei Subversion muss vorher
%  die Keyword-Ersetzung eingeschaltet werden, etwa mit
%  \begin{quote}
%    'svn propset svn:keywords Id '\meta{dateiname},
%  \end{quote}
%  bei CVS muss man nur darauf achten, sie nicht abzuschalten.)
%  Analoges geschieht auch beim Checkout.
%
%  Das Makro sorgt dann dafÃ¼r, dass in der durch '\listfiles' sowie
%  auch der durch '\printFileList' (siehe Abschnitt
%   \ref{describe:printfilelist})
%  erzeugten Liste die richtigen Daten (d.h. das Commit-Datum und die
%  RCS/CVS/SVN-Versionsnummer) stehen.
%
%  Dies ist besonders nÃ¼tzlich, wenn man ein Dokument hat, welches
%  sich aus mehreren Quelltextdateien zusammensetzt, welche Ã¼blicherweise
%  dann auch nicht immer gleichzeitig bearbeitet werden.
%
%  \subsection{Hauptdatei in der Dateiliste}
%
%  \DescribeMacro{\mainFileToList}
%  FÃ¼gt die Haupt-Datei (\meta{jobname}'.tex') am Anfang der Dateiliste
%  ein, falls sie existiert. Zuvor wird versucht, ein etwaiges Vorkommen
%  dieses Namens in der Liste aus dieser zu entfernen.
%  (Ein solches Vorkommen kann nur dann sein, wenn die Haupt-Datei mit
%  '\input{...}' geladen wurde, anstatt einfach so den Namen auf der
%  Kommandozeile anzugeben, oder wenn die Hauptdatei sich selbst noch
%  einmal einliest, wie in diesem Dokument.)
%
%  \DescribeOption{cat12}
%  Die interne Funktionsweise (und damit etwaige Nebenwirkungen)
%  hÃ¤ngt davon ab, ob eine der
%  Package-Optionen 'cat12' oder 'nocat12' \DescribeOption{nocat12}
%  gegeben wurde:
%  \begin{itemize}
%    \item Mit Option 'cat12' wird die interne Liste der geladenen Dateien
%       in Kategorie-12-Zeichen (d.h. other) umgewandelt, um den eventuell
%       dort schon vorhandenen Namen der Hauptdatei zu lÃ¶schen. Dies kann
%       Nebenwirkungen auf andere Pakete haben, wenn diese ebenfalls diese
%       Liste verarbeiten und dabei auf die Kategorien der Zeichen
%       angewiesen sind.
%    \item Mit Option 'nocat12' funktioniert es bei Verwendung von \eTeX\
%      auch ohne die eben geschilderte Umwandlung, bei \TeX\ ist das nicht
%      mÃ¶glich und es wird einfach so der Dateiname eingefÃ¼gt -- mit dem
%      Effekt, dass er eventuell doppelt auftaucht.
%    \item Ohne diese Optionen wird bei Verwendung von \eTeX\ die
%      nebenwirkungsfreie Variante, ohne \eTeX\ die Kategorie-12-Variante
%      gewÃ¤hlt.
%  \end{itemize}
%  Details dazu sind im Implementationsteil nachzulesen.
%
%  Dieses Makro wird automatisch am Ende des
%  Dokumentes ausgefÃ¼hrt, falls nicht die Package-Option 'noaddmain'
%  \DescribeOption{noaddmain} gesetzt wurde.
%  Mit 'addmain' \DescribeOption{addmain} kann das Vorgabe-Verhalten
%  erzwungen werden.
%
%  \subsection{Dateilisten-Ausgabe}\label{describe:printfilelist}
%  \noindent\DescribeMacro{\printFileList}\oarg{gliederung}
%
%  FÃ¼gt an der aktuellen Stelle eine Liste der im aktuellen Dokument
%  verwendeten Dateien (ohne die Haupt-Datei) ein.
%  \meta{gliederung} ist ein Gliederungsbefehl (wie '\section',
%  '\chapter' etc., Vorgabewert ist '\section*' (fÃ¼r einen
%  unnummerierten Abschnitt).
%
%  Damit eine Liste ausgegeben wird, muss in der PrÃ¤ambel des Dokumentes
%  ein '\listfiles' auftauchen. (Andernfalls gibt '\printFileList' nur
%  eine Warnung auf der Konsole aus und tut sonst nichts.)
%
%  Die Liste selbst ist erst ab dem zweiten \LaTeX-Lauf im Dokument zu
%  sehen (und enthÃ¤lt ab dem dritten Lauf dann auch die Dateilisten-Datei).
%
%  \DescribeOption{showpages}\DescribeOption{noshowpages}
%  Die Liste wird als 4- oder 5-spaltige Tabelle gesetzt: Falls die
%  Option 'showpages' Ã¼bergeben wurde, ist auch die Seitennummer, die
%  zum Ladezeitpunkt der Datei aktuell war, enthalten ($0$ fÃ¼r alle
%  Dateien, die in der PrÃ¤ambel geladen wurden), mit 'noshowpages'
%  fehlt diese Spalte. ('showpages' ist der Vorgabewert.)
%
%
%  Falls das Paket \pack{babel} vor oder nach diesem Paket geladen wird,
%  sind die SpaltenÃ¼berschriften, die Gliederung sowie die PrÃ¤ambel auch
%  Ã¼bersetzbar -- zur Zeit werden von diesem Paket die Sprachoptionen
%  'english', 'german', 'ngerman' und 'esperanto' unterstÃ¼tzt. Wer weitere
%  Ãœbersetzungen beisteuern will, melde sich bei mir.
%
%  Ansonsten \DescribeMacro{\fileListName}\DescribeMacro{\fileListPreamble}
%  \DescribeMacro{\fileNameName}\DescribeMacro{\dateName}
%  \DescribeMacro{\verName}\DescribeMacro{\descriptionName} kann
%  durch Neudefinition der Befehle
%  '\fileListName' (Ãœberschrift), '\fileListPreamble' (einleitender Text,
%  normalerweise mit FuÃŸnote),
%  sowie '\fileNameName', '\dateName', '\verName' und '\descriptionName'
%  (Tabellenkopf) der Inhalt der statischen Texte verÃ¤ndert werden.
%  (Auch das wirkt sich erst im folgenden \LaTeX-Lauf aus.)
%
%  Im folgenden mal ein Beispiel aus diesem Dokument, erzeugt mit:
%\begin{verbatim}
%  \printFileList[\subsubsection]
%\end{verbatim}
%
%  \printFileList[\subsubsection]
%
%  \subsection{AbhÃ¤ngigkeiten}
%
%  FÃ¼r die Funktion des Paketes sind die Pakete \pack{rcsinfo}
%  (JÃ¼rgen Vollmer) im RCS-Modus bzw. \pack{svninfo} (Achim D. Bruckner)
%  im Subversion-Modus und  \pack{ltxtable} -- damit auch \pack{tabularx},
%  \pack{longtable} (alle drei von David Carlisle) und  \pack{array}
%  (Frank Mittelbach) -- notwendig. \pack{babel}
%  (Johannes Braams) wird, falls ebenfalls geladen, auch genutzt.
%
%  Falls das Paket \pack{pauldoc} (von mir) ebenfalls geladen wird,
%  werden einige spezielle Anpassungen getroffen.
%
%  FÃ¼r das Setzen der Doku ist auÃŸerdem \pack{pauldoc} (von mir) und
%  \pack{dox} (von Didier Verna) notwendig.
%
%  FÃ¼r die korrekte Erkennung, dass der Name der Hauptdatei schon in
%  der Liste der geladenen Dateien auftaucht, ist der primitive
%  \eTeX-Befehl '\scantokens' notwendig -- falls kein \eTeX\ verwendet
%  wird, kann eine nicht-Erkennung (und damit am Ende das
%  doppelte Auftauchen der Haupt-Datei) vorkommen. Details dazu bei
%  der Diskussion der Optionen 'cat12' und 'nocat12', sowie im
%  Implementations-Teil.
%
%  \subsection{Wunschliste}
% 
%  Ein paar Ideen, die ich gerne mal umsetzen mÃ¶chte, aber noch nicht dazu
%  gekommen bin:
%
%  \begin{itemize}
%  \item eine Option, um die Datumsdarstellung in der Dateiliste auf
%    das ISO-Format (YYYY-MM-DD) umzustellen.
%  \item eine Option, um das 'v' in den Versionsnummern wegzulassen.
%  \item eine MÃ¶glichkeit, doppelt geladene Dateien in der Liste nicht
%    doppelt aufzufÃ¼hren.  (Das kann etwa passieren, wenn man mitten im 
%    Dokument die Eingabe-Kodierung wechselt.)
%  \item eine MÃ¶glichkeit, die Liste zu filtern, und z.B. nur '.tex'-Dateien
%    aufzunehmen. Das kÃ¶nnte z.B. nÃ¼tzlich sein, wenn man nur die
%    "`Inhalts-Dateien"' eines zusammengesetzen Dokumentes auffÃ¼hren will,
%    nicht aber alle verwendeten Package-Dateien.
%  \item Falls eine Versionsnummer fehlt, sollte das erkannt werden, und
%    die Spalte leergelassen werden, anstatt den Beschreibungs-Text in die
%    Versionsspalte zu setzen.
%  \end{itemize}
%
% \StopEventually{\PrintChanges\PrintIndex}
%
% \makeatother
% \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     \&amp;
%   Acute accent  \'     Left paren    \(     Right paren   \)
%   Asterisk      \*     Plus          \+     Comma         \,
%   Minus         \-     Point         \.     Solidus       \/
%   Colon         \:     Semicolon     \;     Less than     \&lt;
%   Equals        \=     Greater than  \&gt;     Question mark \?
%   Commercial at \@     Left bracket  \[     Backslash     \\
%   Right bracket \]     Circumflex    \^     Underscore    \_
%   Grave accent  \`     Left brace    \{     Vertical bar  \|
%   Right brace   \}     Tilde         \~}
%  \makeatletter
%
%  \DoNotIndex{\',\@currname,\^,\begin,\end,\begingroup,\endgroup,
%              \csname,\endcsname,\day,\def,\DeclareOption,\do,
%              \edef,\else,\endinput,\expandafter,\fi,\footnote,
%              \IfFileExists,\ifx,\immediate,\LaTeX,\let,\makeatletter,
%              \makeatother,\month,\newcommand,\newif,\newwrite,
%              \protect,\relax,\renewcommand,\space,\string,\textbf,
%              \the,\two@digits,\u,\write,\xdef,\year}
%
% ^^A damit Seitennummern und Zeilennummern im
% ^^A Index nicht durcheinanderkommen.
%
%  \setcounter{CodelineNo}{99}
%
% \section{Implementation}
%
%    \begin{macrocode}
%&lt;*package&gt;
%    \end{macrocode}
%
%  \subsection{Optionen}
%  \changes{v0.1}{2006/04/02}{Optionen \texttt{addmain} und \texttt{noaddmain} hinzugefÃ¼gt.}
%  \begin{option}{addmain}
%  \begin{option}{noaddmain}
%  \begin{macro}{\if@dateiliste@addMain}
%  Wir merken uns die ausgewÃ¤hlte Option in einem '\if'. 
%    \begin{macrocode}
\newif\if@dateiliste@addMain
\DeclareOption{addmain} {%
   \@dateiliste@addMaintrue
}
\DeclareOption{noaddmain} {%
   \@dateiliste@addMainfalse
}
%    \end{macrocode}
%  \end{macro}
%  \end{option}
%  \end{option}
%
%  \begin{option}{cat12}
%  \begin{option}{nocat12}
%  \begin{macro}{\if@dateiliste@catxii}
%  \begin{macro}{\if@dateiliste@nocatxii}
%  \changes{v0.2}{2006/04/19}{Optionen 'cat12' und 'nocat12' hinzugefÃ¼gt.}
%  Das gleiche gilt fÃ¼r 'cat12'/'nocat12' -- allerdings haben wir hier
%  zwei '\if's, da es auch noch die MÃ¶glichkeit gibt, keine der beiden
%  Optionen auszuwÃ¤hlen.
%    \begin{macrocode}
\newif\if@dateiliste@catxii \@dateiliste@catxiifalse
\newif\if@dateiliste@nocatxii \@dateiliste@nocatxiifalse
\DeclareOption{cat12} {%
   \@dateiliste@catxiitrue
}
\DeclareOption{nocat12} {%
   \@dateiliste@nocatxiitrue
}
%    \end{macrocode}
%  \end{macro}
%  \end{macro}
%  \end{option}
%  \end{option}
%  \begin{option}{showpages}
%  \begin{option}{noshowpages}
%  \begin{macro}{\if@dateiliste@showpages}
%    Eine weiteres Optionspaar betrifft die Anzeige der Seitennummern
%    in der Dateiliste.
%    \begin{macrocode}
\newif\if@dateiliste@showpages \@dateiliste@showpagesfalse
\DeclareOption{showpages} {%
  \@dateiliste@showpagestrue
}
\DeclareOption{noshowpages} {%
  \@dateiliste@showpagesfalse
}
%    \end{macrocode}
%  \end{macro}
%  \end{option}
%  \end{option}
%
% \changes{v0.5}{2009/10/31}{Optionen fÃ¼r Subversion-UnterstÃ¼tzung}
%  \begin{option}{svn}
%  \begin{option}{subversion}
%  \begin{option}{rcs}
%  \begin{option}{cvs}
%  \begin{macro}{\if@dateiliste@subversion}
%  Das vierte Optionspaar: 'svn' (mit Alias 'subversion') fÃ¼r
%  Subversion-'Id's, 'rcs' (mit Alias 'cvs') fÃ¼r CVS/RCS-'Id's.
%  Diese unterscheiden sich vor allem im Format der Datumsangaben.
%  (Hier merken wir uns nur die Optionen, die Arbeit geschieht in
%   Abschnitt \ref{versionsnummern}.
%    \begin{macrocode}
\newif\if@dateiliste@subversion \@dateiliste@subversionfalse
\DeclareOption{svn} {%
  \@dateiliste@subversiontrue
}
\DeclareOption{subversion} {%
  \@dateiliste@subversiontrue
}
\DeclareOption{cvs} {%
  \@dateiliste@subversionfalse
}
\DeclareOption{rcs} {%
  \@dateiliste@subversionfalse
}
%    \end{macrocode}
%  \end{macro}
%  \end{option}
%  \end{option}
%  \end{option}
%  \end{option}
%  Die Standard-Optionen sind 'addmain', 'showpages' und 'rcs'.
%    \begin{macrocode}
\ExecuteOptions{addmain}
\ExecuteOptions{showpages}
\ExecuteOptions{rcs}
\ProcessOptions
%    \end{macrocode}
%
%  \subsection{Seitenzahlen in die Dateiliste}
%  \label{showpages}
%  \begin{macro}{\@addtofilelist}
%    Falls nicht die Option 'noshowpages' angegeben wurde,
%    merken wir uns die Seitennummern aller eingebundenen
%    Dateien. Dazu definieren wir '\@addtofilelist' neu, um
%    neben dem HinzufÃ¼gen des Namens zur Dateiliste auch die
%    jeweilige Seitennummer in einem eigenen Makro zu merken.
%    \begin{macrocode}
   \if@dateiliste@showpages
     \CheckCommand*{\@addtofilelist}[1]{\xdef\@filelist{\@filelist,#1}}
     \renewcommand*{\@addtofilelist}[1]{%
       \expandafter\xdef%
       \csname dateiliste@page@#1\endcsname%
       {\thepage}%
       \xdef\@filelist{\@filelist,#1}%
   }
   \fi
%    \end{macrocode}
%  \changes{v0.5}{2009/11/03}{Seitenzahlen fÃ¼r PrÃ¤ambel-Dateien jetzt 0}
%  Damit die Seitennummern fÃ¼r in der PrÃ¤ambel geladene Pakete etc.
%  alle 0 sind, setzen wir die Seitenzahl jetzt auf 0, und bei Beginn
%  des Dokumentes wieder auf 1.
%    \begin{macrocode}
\setcounter{page}{0}
\AtBeginDocument{\stepcounter{page}}
%    \end{macrocode}
%  \end{macro}
%
% \subsection{Aktuelle Versionsnummern in der Dateiliste}
%  \label{versionsnummern}
%  Wir wollen in der durch '\ProvideFileInfo'
%  provozierten Ausgabe automatisch sinnvolle Infos haben, mit
%  Daten, die von unserem Versionskontrollsystem eingefÃ¼llt
%  werden. Zur Zeit unterstÃ¼tzen wir das Format von CVS und RCS
%  (schon seit Version 0.0) und das Format von Subversion (seit
%  Version 0.5).
%
%  \subsubsection{Subversion-Modus}
%  Die Fallunterscheidung funktioniert mit diesem '\if@...', welches
%  durch Paket-Optionen initialisiert wurde.
%    \begin{macrocode}
\if@dateiliste@subversion
%    \end{macrocode}
% 
%  Im Subversion-Modus laden wir  \pack{svninfo}.
%
%  Wir verwenden die Parameter 'nofancy', weil sonst die FuÃŸzeile
%  umgestellt wird, und 'notoday', weil sonst das aktuelle Datum
%  umgestellt wird. 'final' verhindert, dass die FuÃŸzeile geÃ¤ndert
%  wird (wir brauchen die Infos ja nur fÃ¼r unsere Dateiliste).
%  \changes{v0.5}{2009/10/31}{\pack{svninfo} statt \pack{rcsinfo}, falls
%     wir im Subversion-Modus sind.}
%    \begin{macrocode}
\RequirePackage[nofancy, notoday, final]{svninfo}[2006/05/11]
%    \end{macrocode}
%
%  \begin{macro}{\ProvideFileInfos}\noindent\marg{id-string}\marg{kurzbeschreibung}
%
%   \changes{v0.5}{2009/11/01}{Neuimplementation fÃ¼r Subversion.}
%
%    \begin{macrocode}
\newcommand*{\ProvideFileInfos}[2] {%  
%    \end{macrocode}
%  ZunÃ¤chst lassen wir '\svnInfo' den \meta{id-string} analysieren.
%  Dies definiert (unter anderem) die Makros '\svnInfoFile' (der
%  Dateiname), '\svnInfoDay', '\svnInfoMonth' und '\svnInfoYear' (Datum)
%  und '\svnInfoRevision' (die Revisionsnummer, in der die Datei das
%  letzte mal geÃ¤ndert wurde).
%
%  Das Leerzeichen nach dem '#1' ist notwendig, damit '\svnInfo'
%  erkennt, wo der \meta{id-string} aufhÃ¶rt -- in der Definition steht
%  da nÃ¤mlich ein Leerzeichen am Ende der Parameterliste.
%    \begin{macrocode}
   \svnInfo #1 %
%    \end{macrocode}
%  
%  Dann rufen wir '\ProvidesFile' aus dem \LaTeX-Kernel auf.
%    \begin{macrocode}
   \ProvidesFile%
%    \end{macrocode}
%  Als erster Parameter wird der Dateiname Ã¼bergeben, der von '\svnInfo'
%  ermittelt wurde.
%    \begin{macrocode}
   {\svnInfoFile}%
%    \end{macrocode}
%  Dann das, wofÃ¼r wir das ganze eigentlich machen: Das Datum (im
%  Format YYYY/MM/DD, weil das von den \LaTeX-Paketen auch
%  so gemacht wird), ein Leerzeichen, dann die Versionsnummer
%  (mit einem 'v' davor). SchlieÃŸlich hÃ¤ngen wir noch
%  \meta{kurzbeschreibung} an.
%    \begin{macrocode}
   [\svnInfoYear/\svnInfoMonth/\svnInfoDay\space
     v\svnInfoRevision\space #2]%
%    \end{macrocode}
%   '\ProvidesFile' definiert damit jetzt ein Makro ('\ver@'\meta{dateiname})
%   mit diesem Text als Inhalt, welches spÃ¤ter von '\@dofilelist' (und
%   unserem '\@writefilelist') verwendet wird.
%
%   AuÃŸer dem Versionsstring wollen wir uns (falls dies per Package-Option
%   eingeschaltet wurde) noch die Seitennummer
%   merken, bei der die Datei anfing -- das macht '\addtofilelist',
%   welches in Abschnitt \ref{showpages} definiert wurde, und von
%   '\ProvidesFile' aufgerufen wird.
%    \begin{macrocode}
}
%    \end{macrocode}
%  \end{macro}
%
%  \subsubsection{RCS-Modus}
%
%    \begin{macrocode}
\else%  \if@dateiliste@subversion
%    \end{macrocode}
%
% Im RCS-Modus laden wir das Paket \pack{rcsinfo}.
%
%  Wir verwenden die Parameter 'nofancy', weil sonst die FuÃŸzeile
%  umgestellt wird, und 'notoday', weil sonst das aktuelle Datum
%  umgestellt wird.
%  \changes{v0.1}{2006/03/30}{\pack{rcsinfo} nun mit \texttt{notoday}-Parameter.}
%    \begin{macrocode}
\RequirePackage[nofancy, notoday]{rcsinfo}
%    \end{macrocode}
%
%  \begin{macro}{\ProvideFileInfos}\noindent\marg{id-string}\marg{kurzbeschreibung}
%
%
%    \begin{macrocode}
\newcommand*{\ProvideFileInfos}[2] {%  
%    \end{macrocode}
%  ZunÃ¤chst lassen wir '\rcsInfo' den \meta{id-string} analysieren. Dies definiert
%  (unter anderem) die Makros '\rcsInfoFile' (der Dateiname), '\rcsInfoDate'
%  (Datum, im 'YYYY/MM/DD'-Format) und '\rcsInfoRevision' (die Versionsnummer).
%
%  Das Leerzeichen nach dem '#1' ist notwendig, damit '\rcsInfo' erkennt, wo
%  der \meta{id-string} aufhÃ¶rt - in der Definition steht da nÃ¤mlich ein Leerzeichen
%  am Ende der Parameterliste.
%    \begin{macrocode}
   \rcsInfo #1 %
%    \end{macrocode}
%  Dann rufen wir '\ProvidesFile' aus dem \LaTeX-Kernel auf.
%    \begin{macrocode}
   \ProvidesFile%
%    \end{macrocode}
%  Als erster Parameter wird der Dateiname Ã¼bergeben, der von '\rcsInfo' ermittelt wurde.
%  Mittels '\expandafter\@firstofone' entfernen wir dabei noch das von '\rcsInfo' (zumindest
%  in meiner Version) eingebaute Leerzeichen am Anfang
%  (welches ja einen anderen Namen ergibt und damit verhindern wÃ¼rde, dass die Information der
%   richtigen Datei zugeschrieben wird).
%    \begin{macrocode}
   {\expandafter\@firstofone\rcsInfoFile}%
%    \end{macrocode}
%  Dann das, wofÃ¼r wir das ganze eigentlich machen: Das Datum, ein
%  Leerzeichen, dann die Versionsnummer (mit einem 'v' davor). SchlieÃŸlich
% hÃ¤ngen wir noch \meta{kurzbeschreibung} an.
%    \begin{macrocode}
   [\rcsInfoDate\space v\rcsInfoRevision\space #2]%
%    \end{macrocode}
%  '\ProvidesFile' definiert jetzt ein Makro ('\ver@'\meta{dateiname}) mit
%   diesem Text als Inhalt, welches spÃ¤ter von '\@dofilelist' (und
%   unserem '\@writefilelist') verwendet wird.
%   AuÃŸer dem Versionsstring wollen wir uns (falls dies per Package-Option
%   eingeschaltet wurde) noch die Seitennummer
%   merken, bei der die Datei anfing.
%    \begin{macrocode}
}
\fi%  \if@dateiliste@subversion
%    \end{macrocode}
%  \end{macro}
%
%  \subsection{Dateiliste}
%   
%   \changes{v0.1}{2006/03/31}{\pack{ltxtable} verwendet.}
%   Da die Liste ziemlich lang (lÃ¤nger als eine Seite) werden kann, verwende
%   ich \pack{longtable} statt der eingebauten (oder der von \pack{array} verbesserten)
%   'tabular'-Umgebung. Und damit
%   ich in der letzten Spalte nicht die Breite fest einstellen muss, sondern
%   einfach die restliche Breite (abhÃ¤ngig von Seitenbreite und der Breite der
%   anderen Spalten, welche ja abhÃ¤ngig vom Inhalt ist) nehmen kann, lade
%   ich \pack{ltxtable},  welches \pack{longtable} mit \pack{tabularx} kreuzt
%   (und beide Pakete auch lÃ¤dt).
%
%    \begin{macrocode}
\RequirePackage{ltxtable}
%    \end{macrocode}
%
%
%  \begin{macro}{\dateiliste@preInclude}
%  \changes{v0.1}{2006/03/31}{Neu}
%  \begin{macro}{\dateiliste@postInclude}
%  \changes{v0.1}{2006/03/31}{Neu}
%   Diese beiden Macros werden vor bzw. nach dem
%   Laden (und setzen) der Dateiliste aufgerufen.
%   Sie sorgen dafÃ¼r, dass \verb+'+ innerhalb der Liste
%   nicht mehr in den Verbatim-Mode schaltet, wie das
%   von \pack{pauldoc} eingestellt wird.
%   Deswegen werden sie auch nur dann so definiert, wenn
%   \pack{pauldoc} geladen wurde. (Und weil '\@ifpackageloaded'
%   nur in der PrÃ¤ambel erlaubt ist, mÃ¼ssen wir die beiden
%   Befehle schon zu Beginn des Dokumentes definieren, anstatt
%   einfach die Abfrage dann zu machen, wenn es gebraucht
%   wird.)
%    \begin{macrocode}
\AtBeginDocument{%
   \@ifpackageloaded{pauldoc}{%
      \newcommand*{\dateiliste@preInclude}{\DeleteShortVerb{\'}}%
      \newcommand*{\dateiliste@postInclude}{\MakeShortVerb{\'}}%
   }{%
      \newcommand*{\dateiliste@preInclude}{\relax}%
      \newcommand*{\dateiliste@postInclude}{\relax}%
   }%
}%
%    \end{macrocode}
%   Die beiden Makros kann man sich auch selbst umdefinieren,
%   falls andere Pakete InkompatibilitÃ¤ten ergeben.
%  \end{macro}
%  \end{macro}
%
%  \subsubsection{Ausgabe der Liste}
%
%  \begin{macro}{\printFileList}\noindent\oarg{gliederung}
% \changes{v0.1}{2006/04/02}{Fast komplett neue Implementation,
%                            entsprechend auch anderes Ergebnis.}
%
%  Der Vorgabewert fÃ¼r \meta{gliederung} ist '\section*',
%  also ein unnummerierter Abschnitt.
%    \begin{macrocode}
\newcommand*{\printFileList}[1][\section*] {% \printFileList
%    \end{macrocode}
%  ZunÃ¤chst Ã¼berprÃ¼fen wir, ob '\listfiles' in der PrÃ¤ambel gegeben
%  wurde. Dies zeigt sich darin, dass das Kommando '\dofilelist'
%  definiert ist. Andernfalls gibt es eine Warnung, und wir machen
%  nichts.
%    \begin{macrocode}
   \@ifundefined{@dofilelist}
   {%
      \PackageWarning{dateiliste}
      {
         \protect\printFileList\space works only if
         \protect\listfiles\space is given in the preamble.
      }
   }%
   {%                      else (\@ifundefined{@dofilelist})
%    \end{macrocode}
%  Andernfalls beginnen wir einen neuen Abschnitt (oder ein Kapitel oder was auch immer mit
%  \meta{gliederung} festgelegt wurde), mit Namen '\fileListName' und einem Label,
%  falls man mal von wo anders darauf verweisen mÃ¶chte.
%  Danach kommt etwas beschreibender Text in '\fileListPreamble'.
%    \begin{macrocode}
      #1{\fileListName}\label{sec:filelist}%
      \fileListPreamble
%    \end{macrocode}
%   In der Datei \meta{jobname}'.filelist' befindet sich nach dem ersten
%   \LaTeX-Lauf der Inhalt der Tabelle (siehe unten). Wir Ã¼berprÃ¼fen zunÃ¤chst,
%    ob die Datei schon existiert.
%    \begin{macrocode}
      \IfFileExists{\jobname.filelist}{%
%    \end{macrocode}
%   \begin{macro}{\dateiliste@addtofilelist}
%  \changes{v0.1}{2006/03/31}{Neu}
%   \begin{macro}{\@addtofilelist}
%  \changes{v0.1}{2006/03/31}{neu: Umdefinition.}
%   Falls ja, dann definieren wir zunÃ¤chst '\@addtofilelist' um,
%   da '\LTXtable' die Datei \meta{jobname}'.filelist' mehrfach einliest, wir
%   aber nur einen Eintrag in der Dateiliste haben wollen.
%   Wir verwenden nicht einfach '\@gobble', um in dem Fall, dass
%   durch das Setzen der Datei weitere Dateien (Schriften etc.)
%   geladen werden, diese doch aufzunehmen. (Wir vergleichen also
%   den Dateinamen mit dem unserer Dateinamens-Datei, und rufen
%   im Fall der NichtÃ¼bereinstimmung das Original-'\@addtofilelist' auf.)
%    \begin{macrocode}
         \let \dateiliste@addtofilelist = \@addtofilelist
         \def\@addtofilelist####1{%
            \edef\dateiliste@tempa{####1}%
            \edef\dateiliste@tempb{\jobname.filelist}\relax%
            \ifx\dateiliste@tempa\dateiliste@tempb
              \relax
            \else
              \dateiliste@addtofilelist{####1}
            \fi
         }%
%    \end{macrocode}
%   \end{macro}
%   \end{macro}
%   '\dateiliste@preInclude' schaltet \verb+'+ als verbatim-Char ab (und
%   das Makro '\dateiliste@postInclude' schaltet es nachher wieder an),
%   falls \pack{pauldoc} geladen wurde (ansonsten  tun sie nichts, falls
%   nicht von jemand anders neudefiniert). Die
%   Datei selbst wird mittels '\LTXtable' geladen.
%    \begin{macrocode}
         \dateiliste@preInclude
         \LTXtable{\linewidth}{\jobname.filelist}%
         \dateiliste@postInclude
%    \end{macrocode}
%  Danach stellen wir '\@addtofilelist' wieder her und
%  fÃ¼gen unsere Dateilisten-Datei auch hinzu.
%    \begin{macrocode}
         \let \@addtofilelist = \dateiliste@addtofilelist
         \@addtofilelist{\jobname.filelist}%
      }
%    \end{macrocode}
%    Falls \meta{jobname}'.filelist' nicht vorhanden war, geben
%    wir einen Hinweistext aus, dass man \LaTeX\ noch einmal
%    laufen lassen soll.
%    \begin{macrocode}
      {%
         \AtEndDocument{\PackageWarning{dateiliste}{
            Run LaTeX again to include the File list.
         }}%
      }%
%    \end{macrocode}
%
%
%  \subsubsection{Erstellen der Liste}
%
%  Jetzt noch ein paar Befehle, um die Listen-Datei zu generieren \ldots
%  (Wir sind immer noch innerhalb von '\printFileList', das alles passiert
%  also nur, wenn dieser Befehl aufgerufen wird.)
%
%  Am Ende des Dokumentes -- d.h., wenn die Dateiliste vollstÃ¤ndig gesammelt
%  wurde -- schreiben wir sie -- mit den passenden Formatierungsanweisungen --
%   in eine Datei.
%  (Das ganze in einer Gruppe, damit nichts kaputtgeht, und temporÃ¤re Makros
%   nachher wieder freigegeben werden.)
%    \begin{macrocode}
      \AtEndDocument{%
         \begingroup
         \@writefilelist
         \endgroup
      }%
%    \end{macrocode}
%  \begin{macro}{\@writefilelist}
%  Eine Variante von '\@dofilelist', die den Inhalt -- als Tabellenzeilen -- in
%  die Datei \meta{jobname}'.filelist' schreibt.
%    \begin{macrocode}
      \newcommand*{\@writefilelist}{%  \@writefilelist
         \newwrite\dateiliste@file
         \immediate\openout\dateiliste@file = \jobname.filelist
%    \end{macrocode}
%  ZunÃ¤chst schreiben wir eine '\ProvidesFile'-Anweisung mit dem aktuellen Datum
%  in die '.filelist'-Datei. (Das hat den Effekt, dass diese Datei selbst auch
%  in der Liste erscheint.)
%    \begin{macrocode}
         \edef\dateiliste@today{%
            \the\year/\two@digits{\the\month}/\two@digits{\the\day}}%
         \immediate\write\dateiliste@file{%
            \string\ProvidesFile{\jobname.filelist}%
            [\dateiliste@today\space --- automatically %
            generated filelist]%
         }%
%    \end{macrocode}
%  Die eigentliche Liste wird in einer 'longtable' gesetzt.
%  Diese soll drei linksbÃ¼ndig gesetzte Spalten ('l') und dann
%  eine mit einem Absatz ('X' -- mittels \pack{ltxtable} aus \pack{tabularx}
%  importiert), welche den restlichen Platz ausfÃ¼llt, enthalten.
%  Damit die letzte Spalte linksbÃ¼ndig (statt Blocksatz) wird, verwenden
%  wir '&gt;{\raggedright\arraybackslash}' als Modifikator.\footnote{wie im \LaTeX-Begleiter,
%  zweite Auflage, Beispiel 5-3-2 vorgeschlagen.}
%  \changes{v0.3}{2006/05/10}{jetzt auch die letzte Spalte linksbÃ¼ndig -- das sieht
%   besser aus.}
%    \begin{macrocode}
         \if@dateiliste@showpages
         \def\@tempa{lrll}
         \else
         \def\@tempa{lll}
         \fi
         \immediate\write\dateiliste@file{%
            \string\LTleft=0pt%
            \string\LTright=0pt%
            \string\begin{longtable}{\@tempa&gt;{%
                  \string\raggedright\string\arraybackslash}X}%
%    \end{macrocode}
%  Die Ãœberschrift -- aus Ã¼bersetzbaren Textteilen, siehe unten, bestehend --
% wiederholt sich auf jeder Seite (deswegen '\endhead' anstatt '\\').
%    \begin{macrocode}
               \string\textbf{\fileNameName} \expandafter&amp;%
               \if@dateiliste@showpages
               \string\textbf{\pageName} &amp;
               \fi
               \string\textbf{\dateName} &amp;
               \string\textbf{\verName} &amp;
               \string\textbf{\descriptionName}
               \string\endhead%
            }%
%    \end{macrocode}
%  Jetzt kommt die Schleife mit den einzelnen Dateien.
%  Das ist zum GroÃŸteil abgekupfert von '\@dofilelist' aus
%  dem \LaTeX-Kernel ('ltfiles.dtx'), welches die Liste zum
%  Terminal ausgibt.
%    \begin{macrocode}
         \@for\@currname:=\@filelist\do{%  \@for
%    \end{macrocode}
%  ZunÃ¤chst bestimmen wir den genauen Dateinamen -- d.h. wir hÃ¤ngen,
%  falls nÃ¶tig, ein '.tex' an. AuÃŸerdem finden wir den zugehÃ¶rigen
%  Versions-String heraus.
%    \begin{macrocode}
            \filename@parse\@currname%
            \edef\dateiliste@filename{%
               \filename@base.%
               \ifx\filename@ext\relax tex\else\filename@ext\fi}%
            \expandafter\let\expandafter\dateiliste@fileversion%
            \csname ver@\dateiliste@filename\endcsname%
%    \end{macrocode}
%  Das Makro '\dateiliste@page@'\meta{name} enthÃ¤lt die Seitennummer
%  der Datei \meta{name}. Falls es nicht definiert ist, wurde sie
%  vor dem \pack{dateiliste}-Package geladen, also vor der ersten Seite.
%  \changes{v0.5}{2009/11/03}{undefinierte Seitenzahlen auf 0 statt 1}
%  Wir merken uns das Ergebnis in '\dateiliste@filepage'.
%    \begin{macrocode}
            \if@dateiliste@showpages
            \@ifundefined{dateiliste@page@\@currname}
            {%
              \def\dateiliste@filepage{0}%
            }{%
              \expandafter\let\expandafter\dateiliste@filepage%
              \csname dateiliste@page@\@currname\endcsname%
            }%
            \fi
%    \end{macrocode}
%  Jetzt schreiben wir, durch '&amp;' getrennt, die einzelnen Felder raus.
%  De facto merken wir uns zuerst alles mittels '\edef' in der Variable
%  '\dateiliste@zeile'.
%
%  ZunÃ¤chst der Dateiname (dabei durch den Filter '\dateiliste@escapeii'
%  geschickt, um z.B. '_' unschÃ¤dlich zu machen), \ldots
%  \changes{v0.5}{2009/11/03}{Dateinamen werden jetzt fÃ¼r die Liste escaped.}
%    \begin{macrocode}
            \edef\dateiliste@zeile{%
                \expandafter\dateiliste@escapeii\expandafter{%
                  \dateiliste@filename
                }
              \space&amp; %
%    \end{macrocode}
%  \ldots\ dann die Seitennummer (falls wir diese Ã¼berhaupt anzeigen wollen)
%    \begin{macrocode}
              \if@dateiliste@showpages
              \dateiliste@filepage
              \space&amp; %
              \fi
%    \end{macrocode}
%  \ldots\ dann entweder ein "`---"' (falls kein Versions-String gegeben
%  wurde), \dots
%    \begin{macrocode}
               \ifx\dateiliste@fileversion\relax
               ---
               \else
%    \end{macrocode}
%  \ldots\ oder der Versionsstring selbst, an den ersten beiden Leerzeichen
%  durch '&amp;' getrennt. DafÃ¼r verfÃ¼ttern wir das expandierte
%  '\dateiliste@fileversion' (also den Versionsstring)
%  an '\dateiliste@parse@ver'. (FÃ¼r den Fall, dass da nicht genug
%  Leerzeichen drin sind, sind am Ende noch ein paar '{}' mit Leerzeichen
%  dazwischen -- die werden ja spÃ¤ter nicht ausgegeben.)
%    \begin{macrocode}
               \expandafter\dateiliste@parse@ver
               \dateiliste@fileversion{} {} {} \dateiliste@parse@ver
               \fi
%    \end{macrocode}
%   Und jetzt noch ein '\\', um die Tabellenzeile zu beenden.
%    \begin{macrocode}
               \string\\}%   \edef
%    \end{macrocode}
%    Jetzt haben wir alles in '\dateiliste@zeile' gesammelt, und kÃ¶nnen
%    es gebÃ¼ndelt ausgeben:
%    \begin{macrocode}
             \immediate\write\dateiliste@file{%
               \dateiliste@zeile
             }%  
         }%  \@for
%    \end{macrocode}
%   Nach der Schleife beenden wir die Tabelle und schlieÃŸen
%   dann die Datei wieder.
%    \begin{macrocode}
      \immediate\write\dateiliste@file{\string\end{longtable}}
         \immediate\closeout\dateiliste@file
      }%
%    \end{macrocode}
%  \end{macro}
%
%  \begin{macro}{\dateiliste@parse@ver}\meta{datum}\textvisiblespace\meta{version}\textvisiblespace\meta{rest}'\dateiliste@parse@ver'
%
%    \changes{v0.1}{2006/03/31}{Neu}
%    Dieses Makro nimmt zwei durch Leerzeichen getrennte Parameter, und
%    gibt sie, mit zusÃ¤tzlichen '&amp;', wieder zurÃ¼ck. Das letzte StÃ¼ck
%    wird noch gefiltert, damit '\bla' kein Problem bildet.
%
%    TODO: Gelegentlich fehlt die Versionsnummer. Damit dann nicht der Anfang
%    des folgenden Textes (wie 'hyperref' bei hyperref.cfg oder 'package'
%    bei pst-node.sty) erscheint, sollte noch eine Abfrage hinein, ob '##2'
%    mit 'v' oder einer Ziffer beginnt. Andernfalls sollte alles in der
%    dritten Spalte angezeigt werden. (Leider noch nicht
%    implementiert.)
%    \changes{v0.5}{2009/11/03}{Escapen des Beschreibungs-Textes.}
%
%    \begin{macrocode}
      \def\dateiliste@parse@ver##1 ##2 ##3\dateiliste@parse@ver{%
        ##1 &amp; ##2 &amp;
        % \dateiliste@general@escape{##3}{\@backslashchar}%
        % {\string\textbackslash{}}%
        \dateiliste@escapeii{##3}%
        \relax
      }%
%    \end{macrocode}
%  \end{macro}
%  Damit ist der else-Teil und auch das ganze Makro '\printFileList' zu Ende.
%    \begin{macrocode}
   }% 
}%  
%    \end{macrocode}
%  \end{macro}
%
%  \subsubsection{Escapen gefÃ¤hrlicher Makros und Zeichen}
%  \label{escape}
%
%  Ein Problem, welches mir durch Otto Schindler und Jens Goldhammer
%  (unabhÃ¤ngig voneinander) mitgeteilt wurde: EnthÃ¤lt der Dateiname
%  oder die Kurzbeschreibung nicht direkt von LaTeX verarbeitbare Zeichen
%  (im Dateinamen sind z.B. '_', in der Kurzbeschreibung z.B.
%  Makronamen Ã¼blich), gibt es Probleme. (Offensichtlich muss man
%  bei Makronamen sich etwas anstrengen, um sie da rein zu bekommen, aber
%  es geht.)
%
%  Wir mÃ¼ssen also diese Zeichen vor dem Rausschreiben ersetzen.
%
%  Ein (nicht fertiggestellter) Ansatz ist in Abschnitt \ref{alt-ersetzung}
%  zu finden. Hier ein anderer Ansatz, der prinzipiell zu funktionieren
%  scheint.
%
%  
%  \begin{macro}{\dateiliste@escapeii}\marg{text}
%
%    Geht \meta{text} tokenweise durch und maskiert alles, was gefÃ¤hrlich
%    werden kÃ¶nnte.
%
%    ZunÃ¤chst Ã¼bergeben wir die ganze Zeichenkette an das nÃ¤chste Makro,
%    mit einigen im echten Text wohl nicht vorkommenden Begrenzern.
%    \begin{macrocode}
\newcommand*{\dateiliste@escapeii}[1]{%
  \dateiliste@escape@@ii#1\@nil. \@@nil\@@
}%
%    \end{macrocode}
%  \end{macro}
%
%  Da ein mit '#1#2' definiertes Makro (um einzelne Token abzutrennen)
%  Leerzeichen zwischen Makro-Parametern einfach verschluckt,
%  mÃ¼ssen wir zunÃ¤chst eine Wort-Trennung vornehmen -- dafÃ¼r dieses Makro.
%  \begin{macro}{\dateiliste@escape@@ii}
%    \meta{wort}\textvisiblespace\meta{rest}'\@@'
%    
%    Wir geben das erste \meta{wort} an das nÃ¤chste Makro
%    ('\dateiliste@escape@ii') weiter und arbeiten dann rekursiv
%    auf \meta{rest}.
%
%    '#2' ist das erste Token von \meta{rest} -- ist
%    das '\@@nil', so haben wir das letzte Wort erreicht, denn das
%    Leerzeichen ist jenes, das von '\dateiliste@escapeii' hinter '\@nil.'
%    eingefÃ¼gt wurde. Das ist dann also unsere Abbruchbedingung, wir mÃ¼ssen
%    nur noch \meta{wort} abarbeiten.
%
%    Ansonsten geben wir nach dem ersten Wort ein Leerzeichen aus
%    (ein solches hatten wir ja zwischen \meta{wort} und \meta{rest}), und
%    rufen uns selbst mit \meta{rest} auf.
%    
%    \begin{macrocode}
\def\dateiliste@escape@@ii#1 #2#3\@@{%
  \ifx\@@nil#2
    % nur ein Wort, und das '\@nil' ist schon in '#1' drin.
    \afterfi{%
      \dateiliste@escape@ii#1\@@%
    }%
  \else
    %Rekursion
    \afterfi{%
      \dateiliste@escape@ii#1\@nil\@@%
      \space%
      \dateiliste@escape@@ii#2#3\@@%
    }%
  \fi
}%
%    \end{macrocode}
%  \end{macro}
%
%  \begin{macro}{\dateiliste@escapeii}\meta{token}\meta{rest}'\@@'
%
%    Maskiert \meta{token} (per Ãœbergabe an '\dateiliste@escapetoken'),
%    und arbeitet danach rekursiv mit \meta{rest}.
%
%    Irgendwo in \meta{rest} taucht ein '\@nil' auf -- wenn wir bei dem
%    angekommen sind, sind wir fertig.
%    
%    Das '\@empty' ist notwendig, falls ein leerer Parameter (also '{}')
%    als '#1' Ã¼bergeben wurde, da ansonsten '\@nil' mit '\else' verglichen
%    wird (und der '\else'-Teil also nicht ausgefÃ¼hrt wird). So wird in
%    diesem Fall '\@nil' mit '\@empty' verglichen (falsch), und der
%    else-Teil tritt ein.
%    
%    \begin{macrocode}
\def\dateiliste@escape@ii#1#2\@@{%
  \ifx#1\@nil
    \@empty
  \else
    \afterfi{%
      \dateiliste@escapetoken{#1}%
      \dateiliste@escape@ii#2\@@
    }%
  \fi
}%
%    \end{macrocode}
%  \end{macro}
%
%  \begin{macro}{\dateiliste@escapetoken}\marg{token}
%    
%    Dieses Makro maskiert ein einzelnes Token fÃ¼r
%    die Ausgabe in eine Datei und nachheriges
%    Wiedereinlesen in die Tabelle.
%    
%    \begin{macrocode}
\newcommand*{\dateiliste@escapetoken}[1] {%
%    \end{macrocode}
%      ZunÃ¤chst der Test, ob \meta{token} zufÃ¤lligerweise die leere
%      Zeichenkette ist. Falls ja, vergleicht das '\ifx' nicht
%      etwa '#1' mit '\@empty', sondern '\@empty' mit '\@empty',
%      und wir machen gar nichts (weil gleich danach das '\else' kommt).
%    \begin{macrocode}
    \ifx#1\@empty\@empty
    \else
%    \end{macrocode}
%      Ansonsten versuchen wir herauszufinden, ob \meta{token} eine
%      Kontrollsequenz o.Ã¤. ist -- dann verwendet '\ifcat' die Kategorie
%      16 (das ist keine der normalen Kategorien), wie auch bei '\relax'.
%
%      In diesem Fall geben wir '\string' und eine String-Darstellung der
%      Kontrollsequenz aus, wodurch diese nach dem Einlesen angezeigt
%      (und nicht interpretiert) wird.
%    \begin{macrocode}
    \ifcat\noexpand\relax
          \noexpand#1%
      \string\string\string#1%
    \else
%    \end{macrocode}
%    Ansonsten haben wir es mit einem einzelnen Zeichen zu tun.
%
%    Wir Ã¼berprÃ¼fen, welchen '\catcode' das Zeichen hÃ¤tte, wenn
%    es jetzt eingelesen wÃ¼rde. Hoffentlich ist das der gleiche,
%    der auch beim Einlesen der Dateiliste eingestellt ist, und zumindest
%    fÃ¼r 0-9 und 14 auch die normalen Zeichen. Wenn nicht, dann hat jemand
%    schon gewaltig die Catcodes verbogen, und ist selbst schuld.
%
%    (Es ist leider nicht wirklich mÃ¶glich, die Fallunterscheidung
%    direkt danach zu machen, welchen Catcode das Zeichen nun hat, auÃŸer
%    durch Vergleiche mit anderen Zeichen -- und das setzt wieder vorraus,
%    dass diese Zeichen noch ihre Original-Codes haben.)
%
%    \begin{macrocode}
    \ifcase \catcode\expandafter`#1 %
      \string\textbackslash\space% (kann nur mit Tricks vorkommen) - \
      \or\string\{% dito - {
      \or\string\}% dito - }
      \or\string\$% math shift (3) - $
      \or\string\&amp;% alignment tab (4) - &amp;
      \or(Kategorie 5)% end of line
      \or\string\#% parameter (6) - sollte nicht vorkommen
      \or\string\^{ }% superscript (7)
      \or\string\_% subscript (8)
      \or(Kategorie 9 - ignored)%  (9) - sollte nicht vorkommen
      \or#1% space (10)
      \or#1% letter (11)
      \or#1% other (12)
      \or\string\string\string#1% active -- sollte auch normalerweise
      %                          nicht vorkommen.
      \or\%% comment (14) (dafÃ¼r muss man auch etwas tricksen)
      \or(Kategorie 15 - invalid)% (15 - sollte nicht vorkommen)
      \else(andere Kategorie)%  (und da es eigentlich nur
      %                          Kategorien 0-15 gibt, auch das nicht.)
    \fi%  (\ifcase)
    \fi%  (\ifcat)
    \fi%  (\ifx)
}%
%    \end{macrocode}
%  \end{macro}
%
%  
%  Hier noch ein Hilfs-Makro, geklaut\footnote{Ich habe absichtlich nur
%    dieses Makro hier kopiert, anstatt das \pack{gmutils}-Paket einzubinden,
%    denn \pack{gmutils} fÃ¼hrt auch noch einige Redefinitionen in ganz
%    anderen Bereichen durch, die ich nicht brauche bzw. haben will.}
%  aus \pack{gmutils}\footnote{von Grzegorz Murzynowski, auf CTAN unter
%    '/macros/contrib/gmutils'.}:
%  \begin{macro}\afterfi\marg{cmd}
%
%    FÃ¼hrt \meta{cmd} nach dem nÃ¤chsten '\fi' aus -- alles dazwischen
%    wird Ã¼bersprungen.
%    Damit kann man zu tiefe '\if'-Verschachtelungen im Falle einer
%    Rekursion vermeiden.
%    
%    Achtung: es geht hier wirklich um das lexikalisch nÃ¤chste '\fi',
%    auch wenn das eigentlich zu einem dazwischen kommenden '\if' gehÃ¶rt.
%    In unserem Fall kommen solche pathologischen FÃ¤lle nicht vor -- falls
%    doch, verwende man analog definierte '\afteriffifi' etc. -- ich verweise
%    auf die Dokumentation von \pack{gmutils}.
%     
%    \begin{macrocode}
\long\def\afterfi#1#2\fi{%
  \fi#1%
}
%    \end{macrocode}
%  \end{macro}
%
%  \begin{macro}{\@@nil}
%  \begin{macro}{\@nil}
%  \begin{macro}{\@@}
%  Damit die '\ifx'-Vergleiche bei den Escape-Funktionen funktionieren, mÃ¼ssen
%  diese drei Makros unterschiedlich definiert sein. Der exakte Wert ist nicht
%  wichtig, da sie ja nie wirklich expandiert werden (sollten).
%    \begin{macrocode}
\newcommand*\@@nil{\@@nil}%
\newcommand*\@nil{\@nil}%
\newcommand*\@@{\@@}%
%    \end{macrocode}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%
%  \subsubsection{Alternatives Escapen}
%  \label{alt-ersetzung}
%    \begin{macrocode}
%&lt;*escape-original&gt;
%    \end{macrocode}
%
%  \begin{macro}{\dateiliste@general@escape}\marg{text}\marg{suche}\marg{ersetze}
%   Dieses Makro kÃ¶nnte (wenn es denn funktionieren wÃ¼rde) von
%   '\@writefilelist' innerhalb eines '\edef' oder '\write' aufgerufen
%   werden, um gefÃ¤hrliche Zeichen zu escapen, so dass sie nach dem Einlesen
%   im Dokument anzeigbar sind. Da es innerhalb des '\edef' sitzt, muss
%   es expandierbar sein, darf also kein '\def' etc. enthalten.
%   (Aha, da ist das Problem.)
%   
%  Zwei AnsÃ¤tze:
%  \begin{enumerate}
%  \item Wir versuchen, unser '\dateiliste@general@escape' expandierbar
%    zu machen.
%  \item Wir bauen die API um, so dass es nicht zu seinem Ergebnis expandiert,
%    sondern dieses in einem (expandierbaren) Makro ablegt. Entsprechend muss
%    es dann \emph{vor} dem '\write' aufgerufen werden, und das Ergebnis-Makro
%    wird dann an das '\write' verfÃ¼ttert.
%  \end{enumerate}
%  Der erste Ansatz wurde etwas abgewandelt als '\dateiliste@escapeii'
%  in Abschnitt \ref{escape} umgesetzt, und ist auch der, welcher jetzt
%  verwendet wird.
%
%  Hier der erste Versuch, implementiert als einfache Ersetzungsfunktion.
%  Durch den '%&lt;*escape-original&gt;'-Abschnitt wird er nicht in die Package-Datei
%  aufgenommen. (Es wÃ¤re zusÃ¤tzlich dazu auch noch eine entsprechende Ã„nderung
%  in '\dateiliste@parse@ver' sowie in '\@writefilelist' notwendig.)
%
%
%    \begin{macrocode}
\newcommand*{\dateiliste@general@escape}[3]{
  \relax
  \begingroup
  \def\dateiliste@suche{#2}%  -- dumme Fehlermeldung:
  % ! Undefined control sequence. -- warum?
  \def\dateiliste@ersetzung{#3}%
  \dateiliste@general@escape@#1\@nil\@@%
  \endgroup
}%
\def\dateiliste@gobbletoAt#1\@@{}%
\def\dateiliste@general@escape@#1#2\@@{%
  \ifx#1\@nil
  \expandafter\dateiliste@gobbletoAt
  \else
  \dateiliste@general@escape@token{#1}%
  \expandafter\dateiliste@general@escape@
  \fi
  #2\@@%
}%
\newcommand*{\dateiliste@general@escape@token}[1]{%
%  \if#3\space
%  \space%
%  \else
  \if \datailiste@suche#1%
  \dateiliste@ersetzung%
  \else
  #1%
  \fi
%  \fi
}%
%&lt;/escape-original&gt;
%    \end{macrocode}
%  \end{macro}
%
%
%  \subsubsection{Anpassbare Texte und Ãœbersetzungen}
%  \begin{macro}{\fileListPreamble}
%  \changes{v0.1}{2006/03/31}{Neu}
%  \begin{macro}{\fileListName}
%  \begin{macro}{\fileNameName}
%  \changes{v0.1}{2006/03/31}{Neu}
%  \begin{macro}{\dateName}
%  \changes{v0.1}{2006/03/31}{Neu}
%  \begin{macro}{\verName}
%  \changes{v0.1}{2006/03/31}{Neu}
%  \begin{macro}{\descriptionName}
%  \changes{v0.1}{2006/03/31}{Neu}
%  Einige Namen fÃ¼r Ã¼bersetzbare Texte -- standardmÃ¤ÃŸig auf Englisch.
%    \begin{macrocode}
\newcommand*\fileListPreamble{
   Here is the list of all files used during the run of \LaTeX{}
   which produced this document. \footnote{More precisely, it is
      the list of files used one \LaTeX-run before the one which
      produced this document, but after some runs the list should
      stabilize.}
}
\newcommand*\fileListName{List of Files}
\newcommand*\fileNameName{file name}
\newcommand*\pageName{page}
\newcommand*\dateName{release date}
\newcommand*\verName{version}
\newcommand*\descriptionName{description}
%    \end{macrocode}
%   \begin{macro}{\dateiliste@babel}
%   \changes{v0.6}{2012/10/13}{Zeilenenden in den \cs{addto}\cs{extras...} auskommentiert, die zu
%      Ã¼berflÃ¼ssigen Leerzeichen in Headings fÃ¼hrten. Siehe \texttt{http://tex.} \texttt{stackexchange.com/q/75533}.}
%  Hier noch gleich ein paar Ãœbersetzungen.
%  Wir definieren hier ein einmal-Makro, welches
%  fÃ¼r mehrere Sprachen\footnote{Genauer: genau fÃ¼r die Sprachen, welche ich soweit
%  beherrsche, dass ich diese Texte Ã¼bersetzen konnte.} zum jeweiligen Initialisierungsmakro
%  Neudefinitionen dieser fÃ¼nf Befehle hinzufÃ¼gt.
%    \begin{macrocode}
\newcommand*{\dateiliste@babel}{
%    \end{macrocode}
%  ZunÃ¤chst Englisch - das sollte das gleiche wie die Standard-Einstellungen sein.
%    \begin{macrocode}
   \addto{\extrasenglish}{%
      \renewcommand*\fileListPreamble{%
         Here is the list of all files used during the run of \LaTeX{}
         which produced this document.\footnote{More precisely, it is
            the list of files used one \LaTeX-run before the one which
            produced this document, but after some runs the list
            should stabilize.}%
      }%
      \renewcommand*\fileListName{List of Files}%
      \renewcommand*\fileNameName{file name}%
      \renewcommand*\pageName{page}%
      \renewcommand*\dateName{release date}%
      \renewcommand*\verName{ver.}%
      \renewcommand*\descriptionName{description}%
   }%
%    \end{macrocode}
%  Deutsch mit neuer Rechtschreibung.
% \changes{v0.4}{2009/10/26}{Kodierung der deutschen Umlaute
%        in der \cs{fileListPreamble} per \cs{"}, damit das
%        Paket auch mit utf8-kodierten Dateien funktioniert.
%        Dank an Michael Niedermair fÃ¼r den Bugreport.}
%    \begin{macrocode}
   \addto{\extrasgerman}{%
      \renewcommand*\fileListPreamble{%
         Hier die Liste aller Dateien, die w\"ahrend des \LaTeX-Laufes,
         welcher dieses Dokument erzeugte, verwendet wurden.
         \footnote{genauer: Es ist die Liste aller Dokumente, die 
            einen \LaTeX-Lauf fr\"uher verwendet wurden. Aber nach
            einigen L\"aufen sollte sich die Liste stabilisieren.}%
      }%
      \renewcommand*\fileListName{Liste der Dateinamen}%
      \renewcommand*\fileNameName{Dateiname}%
      \renewcommand*\pageName{\llap{Se}ite}%
      \renewcommand*\dateName{Datum}%
      \renewcommand*\verName{Ver.}%
      \renewcommand*\descriptionName{Beschreibung}%
   }%
%    \end{macrocode}
%  Deutsch mit alter Rechtschreibung: ist das gleiche (hier tauchen
%  keine FÃ¤lle mit Ã„nderungen auf.)
%    \begin{macrocode}
   \addto{\extrasngerman}{%
      \renewcommand*\fileListPreamble{%
         Hier die Liste aller Dateien, die w\"ahrend des \LaTeX-Laufes,
         welcher dieses Dokument erzeugte, verwendet wurden.
         \footnote{genauer: Es ist die Liste aller Dokumente, die 
            einen \LaTeX-Lauf fr\"uher verwendet wurden. Aber nach
            einigen L\"aufen sollte sich die Liste stabilisieren.}%
      }%
      \renewcommand*\fileListName{Liste der Dateinamen}%
      \renewcommand*\fileNameName{Dateiname}%
      \renewcommand*\pageName{Seite}%
      \renewcommand*\dateName{Datum}%
      \renewcommand*\verName{Ver.}%
      \renewcommand*\descriptionName{Beschreibung}%
   }%
%    \end{macrocode}
%  FÃ¼r die Verwender der Internationalen Sprache (siehe 'www.esperanto.de'):
%    \begin{macrocode}
   \addto{\extrasesperanto}{%
      \renewcommand*\fileListPreamble{%
         Jen listo de \^ciuj dosieroj, kiuj estis uzitaj dum
         la \LaTeX-rulo, kiu produktis tiun \^ci dokumenton.
         \footnote{Pli precize: estas la listo de dosieroj uzitaj
            unu rulon anta\u{u} tiu, kiu produktis tiun \^ci
            dokumenton. Sed kutime post kelkaj ruloj la listo
            devus stabili\^gi.}%
      }%
      \renewcommand*\fileListName{Listo de dosieroj}%
      \renewcommand*\fileNameName{dosiernomo}%
      \renewcommand*\pageName{pa\^go}%
      \renewcommand*\dateName{dato}%
      \renewcommand*\verName{versio}%
      \renewcommand*\descriptionName{priskribo}%
   }%
%    \end{macrocode}
%  Am Ende der AusfÃ¼hrung von '\dateiliste@babel' vernichtet der Befehl sich
%  selbst. Das spart etwas Speicher, und sorgt dafÃ¼r, dass er nicht versehentlich
%  mehrfach ausgefÃ¼hrt wird (auch wenn das wohl nicht schÃ¤dlich wÃ¤re).
%    \begin{macrocode}
   \let \dateiliste@babel = \relax%
}%
%    \end{macrocode}
%  \end{macro}
%  Wir untersuchen jetzt, ob \pack{babel} schon geladen wurde.
%  Diese Fallunterscheidung ist notwendig, weil der Code von
%  '\dateiliste@babel' zwar das Paket benÃ¶tigt (also nach ihm
%  ausgefÃ¼hrt werden sollte), aber nicht einfach direkt mit '\AtBeginDocument'
%  ans Ende geschoben werden sollte, da er (falls \pack{babel} schon vor
%  diesem Paket geladen wurde) dort nach dem \pack{babel}-Code (der die
%  Sprache auswÃ¤hlt) kommen wÃ¼rde, und damit mehr nichts bewirkt.
%
%  Falls \pack{babel} jetzt schon geladen wurde, \ldots
%    \begin{macrocode}
\@ifpackageloaded{babel}
{%
%    \end{macrocode}
%   \ldots informieren wir es sofort Ã¼ber die neuen Namen, die beim
%   Sprachwechsel bitte angepasst werden sollten.
%    \begin{macrocode}
   \dateiliste@babel%
}%
%    \end{macrocode}
%   Ansonsten verschieben wir das zum Beginn des Dokumentes (und machen
%   das auch dann nur, wenn \pack{babel} inzwischen geladen wurde --
%   ansonsten ist das ganze ja Ã¼berflÃ¼ssig, und '\addto' gibt es auch
%   nicht, also kÃ¶nnen wir dann '\dateiliste@babel' vernichten).
%    \begin{macrocode}
{%
   \AtBeginDocument{%
      \@ifpackageloaded{babel}{%
         \dateiliste@babel%
      }{%
         \let \dateiliste@babel = \relax
      }%
   }%
}%
%    \end{macrocode}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%
%  \subsection{Hauptdatei in die Dateiliste}
%  \begin{macro}{\mainFileToList}
%    \changes{v0.6}{2012/10/13}{Wir geben eine Warnung aus anstatt einer Endlosschleife,
%        wenn \cs{@filelist} undefiniert ist. Danke an Markus Kohm, Matthias Kospiech
%        und Andrew Swann fÃ¼r Bugreport and Analyse, siehe auch
%        \texttt{http://tex.stackexchange.} \texttt{com/q/75533/3335}.}
%    \changes{v0.1}{2006/04/02}{Neu}
%    \changes{v0.2}{2006/04/19}{MÃ¶gliche Erkennung des Dateinamens jetzt
%      auch ohne \eTeX}
%    Hier unser Nutzer-Makro fÃ¼r die Inklusion der Hauptdatei
%    in die Dateiliste.
%    \begin{macrocode}
\newcommand*{\mainFileToList}{%  \mainFileToList
%    \end{macrocode}
%    Falls die Dateiliste (d.h. das Makro '\@filelist') nicht definiert ist,
%    geben wir eine Warnung aus, und tun nichts weiter. (Ohne das wÃ¼rde es
%    in dem Fall eine Endlosschleife/-rekursion geben, wenn wir versuchen, aus
%    dieser Liste etwas zu entfernen.)
%    \begin{macrocode}
  \@ifundefined{@filelist}{%
      \PackageWarning{dateiliste}%
      {%
         ^^J
         \protect\mainFileToList\space (i.e. using the {dateiliste}
            package withouth^^J
         the [noaddmain] option) works only if \protect\listfiles\space
            is given^^J
         in the preamble.^^J
      }%
  }{%
%    \end{macrocode}
%    ZunÃ¤chst sehen wir nach, ob es eine Datei mit Namen \meta{jobname}'.tex'
%    gibt. 
%    \begin{macrocode}
   \IfFileExists{\jobname.tex} {%
      \begingroup
%    \end{macrocode}
%   Falls ja, dann ist das hÃ¶chstwahrscheinlich die Haupt-Datei des
%   Dokumentes\footnote{Andernfalls hat entweder jemand '\jobname' manipuliert,
%     oder die Hauptdatei ist eine Datei, die nicht auf '.tex' endet,
%     etwa \meta{jobname}'.dtx' -- in dem Fall sollte man eigentlich keine Datei
%     \meta{jobname}'.tex' daneben haben. Ansonsten ist es wohl zumutbar, die
%     Option 'noaddmainfile' anzugeben.
%   }, und taucht wahrscheinlich -- nÃ¤mlich, wenn sie auf der
%   Kommandozeile oder mit '\input '\meta{jobname}'.tex' anstatt
%   '\input{'\meta{jobname}'.tex}' geladen wurde -- nicht in der Dateiliste
%   auf. 
%
%   Das Problem an der Erkennung des letzten Falles (\LaTeX-'\input{}') ist,
%   dass '\jobname' die Zeichen (auch die Buchstaben) in
%   Kategorie 12 (\emph{other}) liefert anstatt in der natÃ¼rlichen Kategorie
%   (d.h. Buchstaben in 11 = \emph{letter}) (wie die Dateien, deren Name
%   irgendwo im Quelltext auftaucht und dann in '\@filelist' landet).
%
%   Ich habe drei MÃ¶glichkeiten gefunden, damit umzugehen:
%   \begin{enumerate}[(1)]
%    \item Wir wandeln '\@filelist' komplett in Kategorie-12-Zeichen um.
%       \footnote{Den Tipp, wie das geht, habe ich zufÃ¤llig beim DurchstÃ¶bern
%         der UK-\TeX-FAQ gefunden:
%         \texttt{http://www.tex.ac.uk/cgi-bin/texfaq2html?label=compjobnam}}
%    \item Wir wandeln '\jobname' (bzw. die Buchstaben darin) in ihre
%      "`richtige"' Kategorie (11 fÃ¼r Buchstaben) um.
%    \item Wir ignorieren das Problem und leben damit, dass eventuell der
%      Dateiname doppelt auftaucht.
%   \end{enumerate}
%
%   Variante (2) funktioniert leider nur bei Verwendung von \eTeX, (1)
%   hat den Nachteil, dass anschlieÃŸend '\@filelist' komplett aus
%   Kategorie-12-Zeichen besteht, was eventuell zu Problemen mit anderen
%   Paketen fÃ¼hrt, welche ebenfalls diese Liste verarbeiten und auf deren
%   Catcodes angewiesen sind.
%
%   Daher haben ich zwei Paket-Optionen hinzugefÃ¼gt, welche eine entsprechende
%   Auswahl ermÃ¶glichen:
%   \begin{description}
%     \item[Standardvorgehen:] Falls \eTeX\ verwendet wurde, nimm (2),
%       fÃ¼r \TeX\ nimm (1). (Die Unterscheidung lÃ¤uft dabei natÃ¼rlich nicht
%       Ã¼ber die Existenz von \eTeX, sondern Ã¼ber die Existenz von
%       '\scantokens', der beÃ¶tigten Kontrollsequenz.)
%     \item[Mit Option \texttt{nocat12}:] \DescribeOption{nocat12}
%       Falls \eTeX\ verwendet wurde, nimm (2), sonst (3).
%     \item[Mit Option \texttt{cat12}:] \DescribeOption{cat12}
%       Nimm immer (1).
%   \end{description}
%   Vor Version 0.2 gab es nur das Verhalten, welches jetzt 'nocat12' entspricht.)
%
%   \begin{macro}{\dateiliste@catxii@transform}
%   Hier die Implementation fÃ¼r (1). Wir wandeln auch das '.tex' in Kategorie 12 um,
%   mittels '\meaning' (mit '\strip@prefix' entfernen wir etwas Text, der vor der
%   Makrodefinition steht)
%    \begin{macrocode}
      \newcommand*{\dateiliste@catxii@transform}%
      {
         \edef\dateiliste@mainfile{\jobname.tex}%
         \edef\dateiliste@mainfile{%
            \expandafter\strip@prefix\meaning\dateiliste@mainfile
         }%
%    \end{macrocode}
%   Jetzt das gleiche fÃ¼r '\@filelist'.
%    \begin{macrocode}
         \edef\@filelist{\expandafter\strip@prefix\meaning\@filelist}%
      }%
%    \end{macrocode}
%   \end{macro}
%   \begin{macro}{\dateiliste@scantoken@tr}
%   Hier die Implementation fÃ¼r (2) mit '\scantokens':
%   In \eTeX\ gibt es dagegen den '\scantokens'-Befehl, welcher
%   es ermÃ¶glicht, im Speicher von \TeX\ vorliegende Token neu aus
%   einer Pseudo-Datei einzulesen. Wenn
%   er definiert ist (nur dann wird dieses Makro aufgerufen), rufen wir ihn
%   hier auf -- mit einigen '\expandafter', um nur den '\jobname' vor
%   der '\scantokens'-AusfÃ¼hrung zu expandieren, und nicht die Token
%   '\edef\dateiliste@mainfile{' und '.tex}' drumherum.
%   '\scantokens' bekommt also die Zeichen \par
%   '\makeatletter\edef\dateiliste@mainfile{'\meta{jobname}'.tex}\makeatother'\par
%   \noindent zu lesen.
%
%   Das '\edef' wird dann also mit Kategorie-11-Buchstaben (also "`richtigen"')
%   im Dateinamen ausgefÃ¼hrt. (Das '\makeatletter' und '\makeatother' ist
%   notwendig, um das '@' auch als Buchstabe zuzulassen und somit '\dateiliste@mainfile'
%   als einzelnen Makronamen anzusehen. Zu dem Zeitpunkt, zu dem '\scantokens'
%   ausgefÃ¼hrt wird, sind ja die Dokumenten-Catcodes in Kraft, nicht die einer
%    Package-Datei.)
%    \begin{macrocode}
      \newcommand*{\dateiliste@scantoken@tr}%
      {%
         \scantokens
         \expandafter{%
            \expandafter\makeatletter
            \expandafter\edef
            \expandafter\dateiliste@mainfile
            \expandafter{%
               \jobname
               .tex}%
            \makeatother
         }%
      }%
%    \end{macrocode}
%   \end{macro}
%   Hier jetzt die groÃŸe Fallunterscheidung:
%    \begin{macrocode}
      \if@dateiliste@catxii
        \dateiliste@catxii@transform
      \else
        \@ifundefined{scantokens}%
        {%
          \if@dateiliste@nocatxii
%    \end{macrocode}
%  Das ist die Implementation fÃ¼r (3): wir merken uns den Dateinamen einfach
%  so. Das geht wahrscheinlich schief, wenn nicht noch irgend ein anderes
%  Makropaket eingreift, und wir kÃ¶nnen \meta{jobname}'.tex' nicht aus der
%  Liste entfernen.
%    \begin{macrocode}
            \edef\dateiliste@mainfile{\jobname.tex}%
          \else
            \dateiliste@catxii@transform
          \fi
        }%
        {%
          \dateiliste@scantoken@tr
        }%
      \fi
%    \end{macrocode}
%   Jetzt haben wir in '\dateiliste@mainfile' den Namen der Hauptdatei,
%   auch (je nach Optionen und \eTeX-VerfÃ¼gbarkeit) '@filelist' vorbereitet.
% 
%   Wir kÃ¶nnen nun mit '\@removeelement' (aus dem \LaTeX-Kernel)
%   das Vorkommen von \meta{jobname}'.tex' entfernen (falls der Name dort vorhanden
%   ist -- wahrscheinlich nicht).
%    \begin{macrocode}
      \@expandtwoargs\@removeelement{\dateiliste@mainfile}%
      \@filelist\@filelist
%    \end{macrocode}
%   AnschlieÃŸend fÃ¼gen wir den Dateinamen an den \emph{Anfang} der Liste an.
%    \begin{macrocode}
      \xdef\@filelist{%
         \dateiliste@mainfile,\@filelist
      }%
      \endgroup
%    \end{macrocode}
%   Falls \meta{jobname}'.tex' nicht existiert, ist dies sicher nicht
%   die Hauptdatei. Dann haben wir es entweder mit einer '.dtx'-Datei
%   zu tun (die sowieso durch das doppelte Einlesen noch einmal auftaucht),
%   oder irgendeinen anderen Fall, den ich nicht vorhersehen kann. Also
%   machen wir dann nichts.
%    \begin{macrocode}
   }{%
      \relax
   }%
  }%
}%
%    \end{macrocode}
%  \end{macro}
%
%  Am Ende des Dokumentes (aber noch vor dem Aufruf von '\@writefilelist', der von
%  '\printFileList' hinzugefÃ¼gt wird) rufen wir, sofern die passende
%  Option gesetzt war, das eben definierte Makro auf.
%    \begin{macrocode}
\if@dateiliste@addMain
  \AtEndDocument{\mainFileToList}
\fi
%    \end{macrocode}
%
% \subsection{Schluss}
%    \begin{macrocode}
\endinput %
%&lt;/package&gt;
%    \end{macrocode}
%
% \Finale
%\endinput
%
%&lt;*mÃ¼ll&gt;


%%% Folgendes ist nur fÃ¼r meinen Editor.
%%%
%%% Local Variables:
%%% mode: latex
%%% TeX-master: t
%%% End:
%&lt;/mÃ¼ll&gt;
</pre></body></html>