Überarbeitungsverlauf[Zurück]
Klicke auf Einblenden/Ausblenden von Überarbeitungen 12

07 Feb '20, 12:38

saputello's gravatar image

saputello
11.1k174365

LaTeX hat selbst keine Dateisystemoperationen. Man muss also Umwege gehen, um die Dateien eines Verzeichnisses zu ermitteln. Hier einmal ein Beispiel, wie das unter Linux oder Windows und vermutlich auch MacOS mit Hilfe von [`shellesc`](http://ctan.org/pkg/shellesc) aussehen kann. \documentclass{article} \usepackage{ifplatform} \usepackage{ifthen} \usepackage{shellesc} \usepackage{shellesc}% Wird eigentlich schon von ifplatform geladen. \newcounter{ct}% den brauchen wir später auf jeden Fall % Aber, erst einmal generiere ich ein paar Dateien lediglich zu Demozwecken. % Der Teil wird natürlich nur benötigt, wenn man wie ich noch keine Dateien zum Testen hat. \setcounter{ct}{2010} \makeatletter \whiledo{\value{ct}<2016}{% \@for \dummyfilename:=A,B,C,Doof\do{% \immediate\openout\@mainaux \arabic{ct}\dummyfilename Haupttermin.tex \immediate\write\@mainaux{Das ist Datei \arabic{ct}\dummyfilename Haupttermin.tex.}% \immediate\closeout\@mainaux }% \stepcounter{ct}% } \makeatother % Ab hier braucht man es auch, wenn man bereits echte Testdateien hat. % Jetzt löschen und initialisieren wir mal eben die temporäre Datei für die Dateiliste. \makeatletter \immediate\openout\@mainaux \jobname-files.dat \immediate\write\@mainaux{Filename} \immediate\closeout\@mainaux \makeatother % Jetzt verwenden wir \write18, um unter Windows oder Linux UNTER LINUX die Dateiliste zu erzeugen \setcounter{ct}{2000} \whiledo{\value{ct} < 2015}{% \ifwindows \ShellEscape{dir /b \arabic{ct}*Haupttermin.tex >>\jobname-files.dat}% wird unter Windows verwendet \else \ShellEscape{ls -1 \arabic{ct}*Haupttermin.tex>>\jobname-files.dat}% wird auf anderen System verwendet \fi \stepcounter{ct}% } \usepackage{datatool} \DTLloaddb{Filenames}{\jobname-files.dat} \begin{document} % Jetzt verwenden wir datatool um alle Dateien einzulesen. \DTLforeach{Filenames}{\filename=Filename}{\InputIfFileExists{\filename}{\par}{}} \end{document} Ergibt dann: ![Ausgabe][1] Dabei wird `\ShellEscape` verwendet, um mit `ls -1` eine Datei zu erzeugen, in der zeilenweise die gefundenen Dateinamen stehen. Diese Datei wird dann mit Hilfe von [`datatool`](http://www.ctan.org/pkg/datatool) verarbeitet und für jeden Eintrag `\InputIfFileExists` aufgerufen. Natürlich kann man in der Schleife auch ganz andere Dinge mit den Dateinamen anfangen. Damit das ganze funktioniert, müssen *shell escapes* aktiviert sein. Dazu muss man `pdflatex` mit Option `-shell-escape` aufrufen, also ggf. im Editor den Aufruf von `pdflatex` entsprechend um diese Option erweitern. Achja: `\@mainaux` wird verwendet, um ein *write handle* zu sparen. In der Dokumentpräambel hat LaTeX zwar `\@mainaux` bereit per `\newwrite` angefordert, aber noch nicht verwendet. Also kann ich es einfach mal zweckentfremden, solange ich die damit angelegten und geschriebenen Dateien bis `\begin{document}` auch wieder schließe. Ab `\begin{document}` darf ich es natürlich nicht mehr verwenden, um in eigene Dateien etwas zu schreiben. [1]: http://texwelt.de/wissen/upfiles/test6_6.png
Klicke auf Einblenden/Ausblenden von Überarbeitungen 11

07 Feb '20, 12:36

saputello's gravatar image

saputello
11.1k174365

LaTeX hat selbst keine Dateisystemoperationen. Man muss also Umwege gehen, um die Dateien eines Verzeichnisses zu ermitteln. Hier einmal ein Beispiel, wie das unter Linux oder Windows und vermutlich auch MacOS mit Hilfe von [`shellesc`](http://ctan.org/pkg/shellesc) aussehen kann. \documentclass{article} \usepackage{ifplatform} \usepackage{ifthen} \usepackage{shellesc} \newcounter{ct}% den brauchen wir später auf jeden Fall % Aber, erst einmal generiere ich ein paar Dateien lediglich zu Demozwecken. % Der Teil wird natürlich nur benötigt, wenn man wie ich noch keine Dateien zum Testen hat. \setcounter{ct}{2010} \makeatletter \whiledo{\value{ct}<2016}{% \@for \dummyfilename:=A,B,C,Doof\do{% \immediate\openout\@mainaux \arabic{ct}\dummyfilename Haupttermin.tex \immediate\write\@mainaux{Das ist Datei \arabic{ct}\dummyfilename Haupttermin.tex.}% \immediate\closeout\@mainaux }% \stepcounter{ct}% } \makeatother % Ab hier braucht man es auch, wenn man bereits echte Testdateien hat. % Jetzt löschen und initialisieren wir mal eben die temporäre Datei für die Dateiliste. \makeatletter \immediate\openout\@mainaux \jobname-files.dat \immediate\write\@mainaux{Filename} \immediate\closeout\@mainaux \makeatother % Jetzt verwenden wir \write18, um UNTER LINUX unter Windows oder Linux die Dateiliste zu erzeugen \setcounter{ct}{2000} \whiledo{\value{ct} < 2015}{% \ifwindows \ShellEscape{dir /b \arabic{ct}*Haupttermin.tex >>\jobname-files.dat}% wird unter Windows verwendet \else \ShellEscape{ls -1 \arabic{ct}*Haupttermin.tex>>\jobname-files.dat}% wird auf anderen System verwendet \fi \stepcounter{ct}% } \usepackage{datatool} \DTLloaddb{Filenames}{\jobname-files.dat} \begin{document} % Jetzt verwenden wir datatool um alle Dateien einzulesen. \DTLforeach{Filenames}{\filename=Filename}{\InputIfFileExists{\filename}{\par}{}} \end{document} Ergibt dann: ![Ausgabe][1] Dabei wird `\ShellEscape` verwendet, um mit `ls -1` eine Datei zu erzeugen, in der zeilenweise die gefundenen Dateinamen stehen. Diese Datei wird dann mit Hilfe von [`datatool`](http://www.ctan.org/pkg/datatool) verarbeitet und für jeden Eintrag `\InputIfFileExists` aufgerufen. Natürlich kann man in der Schleife auch ganz andere Dinge mit den Dateinamen anfangen. Damit das ganze funktioniert, müssen *shell escapes* aktiviert sein. Dazu muss man `pdflatex` mit Option `-shell-escape` aufrufen, also ggf. im Editor den Aufruf von `pdflatex` entsprechend um diese Option erweitern. Achja: `\@mainaux` wird verwendet, um ein *write handle* zu sparen. In der Dokumentpräambel hat LaTeX zwar `\@mainaux` bereit per `\newwrite` angefordert, aber noch nicht verwendet. Also kann ich es einfach mal zweckentfremden, solange ich die damit angelegten und geschriebenen Dateien bis `\begin{document}` auch wieder schließe. Ab `\begin{document}` darf ich es natürlich nicht mehr verwenden, um in eigene Dateien etwas zu schreiben. [1]: http://texwelt.de/wissen/upfiles/test6_6.png
Klicke auf Einblenden/Ausblenden von Überarbeitungen 10
Beispiel funktioniert jetzt unter Windows und unter Linux

07 Feb '20, 12:33

saputello's gravatar image

saputello
11.1k174365

Klicke auf Einblenden/Ausblenden von Überarbeitungen 9

07 Jun '16, 16:23

saputello's gravatar image

saputello
11.1k174365

Klicke auf Einblenden/Ausblenden von Überarbeitungen 8

07 Jun '16, 16:22

saputello's gravatar image

saputello
11.1k174365

Klicke auf Einblenden/Ausblenden von Überarbeitungen 7
Anpassung an Paket shellesc

07 Jun '16, 15:36

saputello's gravatar image

saputello
11.1k174365

Klicke auf Einblenden/Ausblenden von Überarbeitungen 6

30 Sep '15, 18:24

saputello's gravatar image

saputello
11.1k174365

Klicke auf Einblenden/Ausblenden von Überarbeitungen 5

30 Sep '15, 18:14

saputello's gravatar image

saputello
11.1k174365

Klicke auf Einblenden/Ausblenden von Überarbeitungen 4

30 Sep '15, 17:30

saputello's gravatar image

saputello
11.1k174365

Klicke auf Einblenden/Ausblenden von Überarbeitungen 3
Verwendung von \@mainaux erklärt

30 Sep '15, 16:59

saputello's gravatar image

saputello
11.1k174365

Klicke auf Einblenden/Ausblenden von Überarbeitungen 2

30 Sep '15, 16:46

saputello's gravatar image

saputello
11.1k174365

Klicke auf Einblenden/Ausblenden von Überarbeitungen 1

30 Sep '15, 16:45

saputello's gravatar image

saputello
11.1k174365