diff options
author | Norbert Preining <norbert@preining.info> | 2019-09-02 13:46:59 +0900 |
---|---|---|
committer | Norbert Preining <norbert@preining.info> | 2019-09-02 13:46:59 +0900 |
commit | e0c6872cf40896c7be36b11dcc744620f10adf1d (patch) | |
tree | 60335e10d2f4354b0674ec22d7b53f0f8abee672 /macros/latex/contrib/dateiliste |
Initial commit
Diffstat (limited to 'macros/latex/contrib/dateiliste')
-rw-r--r-- | macros/latex/contrib/dateiliste/README | 255 | ||||
-rw-r--r-- | macros/latex/contrib/dateiliste/README-de | 26 | ||||
-rw-r--r-- | macros/latex/contrib/dateiliste/README-en | 113 | ||||
-rw-r--r-- | macros/latex/contrib/dateiliste/README-eo | 115 | ||||
-rw-r--r-- | macros/latex/contrib/dateiliste/dateiliste.dtx | 1915 | ||||
-rw-r--r-- | macros/latex/contrib/dateiliste/dateiliste.ins | 79 | ||||
-rw-r--r-- | macros/latex/contrib/dateiliste/dateiliste.pdf | bin | 0 -> 262917 bytes |
7 files changed, 2503 insertions, 0 deletions
diff --git a/macros/latex/contrib/dateiliste/README b/macros/latex/contrib/dateiliste/README new file mode 100644 index 0000000000..3b075fea01 --- /dev/null +++ b/macros/latex/contrib/dateiliste/README @@ -0,0 +1,255 @@ +This README is for version: + 2012/10/13 v0.6 % +---------------- +([de] unten - [eo] sube) +---------------- +[en] +LaTeX-package 'dateiliste' - include list of used files +(like \listfiles) in the document, and related features. + +Author: Paul Ebermann <Paul-Ebermann@gmx.de> +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{$<>Id$}{short description} + + (without '<>' [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 <filename> + +(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[<section command>] + + 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 <> 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}". +---------------- +[de] +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 +(-> 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. +---------------- +[eo] +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' + (-> 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{$<>Id$}{mallonga priskribo} + + en via dosiero, forprenu la '<>', 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 <dosiernomo> + 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[<section command>] + + 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}". diff --git a/macros/latex/contrib/dateiliste/README-de b/macros/latex/contrib/dateiliste/README-de new file mode 100644 index 0000000000..7cf4a40273 --- /dev/null +++ b/macros/latex/contrib/dateiliste/README-de @@ -0,0 +1,26 @@ +Dieses README ist für Version: + 2012/10/13 v0.6 % +---------------- +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 +(-> 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. diff --git a/macros/latex/contrib/dateiliste/README-en b/macros/latex/contrib/dateiliste/README-en new file mode 100644 index 0000000000..fec817c92b --- /dev/null +++ b/macros/latex/contrib/dateiliste/README-en @@ -0,0 +1,113 @@ +This README is for version: + 2012/10/13 v0.6 % +---------------- +LaTeX-package 'dateiliste' - include list of used files +(like \listfiles) in the document, and related features. + +Author: Paul Ebermann <Paul-Ebermann@gmx.de> +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{$<>Id$}{short description} + + (without '<>' [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 <filename> + +(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[<section command>] + + 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 <> 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}". diff --git a/macros/latex/contrib/dateiliste/README-eo b/macros/latex/contrib/dateiliste/README-eo new file mode 100644 index 0000000000..9f2dd54ec1 --- /dev/null +++ b/macros/latex/contrib/dateiliste/README-eo @@ -0,0 +1,115 @@ +Tiu README (legumin) estas por versio: + 2012/10/13 v0.6 % +---------------- +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' + (-> 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{$<>Id$}{mallonga priskribo} + + en via dosiero, forprenu la '<>', 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 <dosiernomo> + 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[<section command>] + + 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}". diff --git a/macros/latex/contrib/dateiliste/dateiliste.dtx b/macros/latex/contrib/dateiliste/dateiliste.dtx new file mode 100644 index 0000000000..c42a1b064a --- /dev/null +++ b/macros/latex/contrib/dateiliste/dateiliste.dtx @@ -0,0 +1,1915 @@ +% \iffalse meta-comment -*- coding: utf-8 -*- +%<*package|driver> +%% (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. +%</package|driver> +% \fi +% +% \ProvideFileInfos{$Id$} +% {Dokumentation fuer dateiliste.sty } +% +% \iffalse +%<*driver> +\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-&-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} +%</driver> +% +%<readme|en>This README is for version: +%<eo>Tiu README (legumin) estas por versio: +%<de>Dieses README ist für Version: +%<package>\NeedsTeXFormat{LaTeX2e}[2003/12/01] +%<package>\ProvidesPackage{dateiliste}[% +% +% +%<package|readme|en|de|eo> 2012/10/13 v0.6 % +% +% +%<package> Ausgabe der Dateiliste (PE)] +%<readme|en|de|eo>---------------- +% +% Hier noch der Inhalt der Readme-Datei. +%<*readme> +([de] unten - [eo] sube) +---------------- +[en] +%</readme> +%<*en|readme> +LaTeX-package 'dateiliste' - include list of used files +(like \listfiles) in the document, and related features. + +Author: Paul Ebermann <Paul-Ebermann@gmx.de> +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{$<>Id$}{short description} + + (without '<>' [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 <filename> + +(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[<section command>] + + 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 <> 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}". +%</en|readme> +%<*readme> +---------------- +[de] +%</readme> +%<*de|readme> +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 +(-> 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. +%</de|readme> +%<*readme> +---------------- +[eo] +%</readme> +%<*eo|readme> +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' + (-> 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{$<>Id$}{mallonga priskribo} + + en via dosiero, forprenu la '<>', 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 <dosiernomo> + 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[<section command>] + + 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}". +%</eo|readme> +% +% \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 \& +% 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 \~} +% \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} +%<*package> +% \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 '>{\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>{% + \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&% + \if@dateiliste@showpages + \string\textbf{\pageName} & + \fi + \string\textbf{\dateName} & + \string\textbf{\verName} & + \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 '&' 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& % +% \end{macrocode} +% \ldots\ dann die Seitennummer (falls wir diese überhaupt anzeigen wollen) +% \begin{macrocode} + \if@dateiliste@showpages + \dateiliste@filepage + \space& % + \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 '&' 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 '&', 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 & ##2 & + % \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\&% alignment tab (4) - & + \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} +%<*escape-original> +% \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 '%<*escape-original>'-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 +}% +%</escape-original> +% \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 % +%</package> +% \end{macrocode} +% +% \Finale +%\endinput +% +%<*müll> + + +%%% Folgendes ist nur für meinen Editor. +%%% +%%% Local Variables: +%%% mode: latex +%%% TeX-master: t +%%% End: +%</müll> diff --git a/macros/latex/contrib/dateiliste/dateiliste.ins b/macros/latex/contrib/dateiliste/dateiliste.ins new file mode 100644 index 0000000000..79b1f41b72 --- /dev/null +++ b/macros/latex/contrib/dateiliste/dateiliste.ins @@ -0,0 +1,79 @@ +%% +%% (C) 2002-2006 Paul Ebermann - Installationsdatei zu dateiliste.dtx +%% +%% Der vollstndige Urheberrechtshinweis befindet sich +%% am Begin von dateiliste.dtx. +%% +%% Ich gebe keine Garantie irgendeiner Art. +%% + +\input docstrip.tex + +\askonceonly + + +% Die Readme-Dateien generieren wir vor dem Festlegen von \usedir, +% damit sie nicht in das selbe Verzeichnis im texmf-Baum gesteckt +% werden. +\generate{% + \usepreamble\empty + \usepostamble\empty + \file{dateiliste.README}{\from{dateiliste.dtx}{readme}}% + \file{dateiliste.README-en}{\from{dateiliste.dtx}{en}}% + \file{dateiliste.README-de}{\from{dateiliste.dtx}{de}}% + \file{dateiliste.README-eo}{\from{dateiliste.dtx}{eo}}% + } + + + +\usedir{tex/latex/paul} + +\Msg{**********************************************************} +\Msg{* Ich werde Dateien in \showdirectory{tex/latex/paul} } +\Msg{* installieren. Bitte stellen Sie sicher, } +\Msg{* dass dieses Verzeichnis vorhanden ist. } +\Msg{* } + +%% der folgende Text wird in jeder generierten +%% Datei am Anfang eingefgt. +\preamble + + ,--------------------------------------------------. + | Das ist eine generierte Datei. | + | | + | (c) 2006 Paul Ebermann. | + '--------------------------------------------------' +\endpreamble + + +\generate{\file{dateiliste.sty}{\from{dateiliste.dtx}{package}}} + + + +\Msg{#######################} +\Msg{# } +\Msg{# Um die Installation zu beenden, } +\Msg{# mssen Sie die folgenden Dateien } +\Msg{# in Ihrem TeX-Suchbaum unterbringen: } +\Msg{# } +\Msg{# dateiliste.sty } +\Msg{# } +\Msg{# Um eine Dokumentation zu erzeugen, } +\Msg{# benutzen Sie } +\Msg{# } +\Msg{# latex dateiliste.dtx } +\Msg{# } +\Msg{# Viel Spa } +\Msg{# Paul Ebermann } +\Msg{# } +\Msg{#######################} + +\endbatchfile + + +%%% Folgendes ist nur fr meinen Editor. +%%% +%%% Local Variables: +%%% mode: latex +%%% TeX-master: t +%%% End: diff --git a/macros/latex/contrib/dateiliste/dateiliste.pdf b/macros/latex/contrib/dateiliste/dateiliste.pdf Binary files differnew file mode 100644 index 0000000000..2d8f462ee9 --- /dev/null +++ b/macros/latex/contrib/dateiliste/dateiliste.pdf |