2
2

Hallo! Das ist vll. eine komische Frage, aber zunächst: Ich hatte mir gedacht, man könnte ggf. eine arara-Automatisierung entwickeln, die (unbenötigte) Hilfsdateien löscht. Eine entsprechende (unbeantwortete) Frage gibt es auch auf stackexchange.com (ich finde sie grad nimmer). Dann habe ich mir den Thread Was sind Hilfsdateien und wo finde ich diese? durchgelesen; und komme zu dem Schluß, daß das vll. doch nicht so gut ist.

Meine Idee war: Jede tex-Datei in einen eigenen Unterordner, aber zu oft will man noch etwas ausprobieren, legt schnell eine Dateikopie an usw. Lange Rede kurzer Sinn: Bei mir sehen die Ordner recht schnell, wie im Bild unten aus.

Also das muß jetzt auch keine superprofessionelle AW sein oder so, ich hab mir nur gedacht, vll. habt ihr euch, da ihr recht viele tex-Dateien erstellt, irgendwelche Systeme (Pfade, passende Benennungen etc.) zurechtgelegt.

alt text

gefragt 20 Mai '14, 19:11

cis's gravatar image

cis
9.5k93459491
Akzeptiert-Rate: 29%

bearbeitet 22 Mai '14, 02:59


Persönlich finde ich es einfach eine Sache der Gewöhnung, dass in Ordnern von LaTeX-Projekten scheinbares Chaos herrscht. Ich erstelle mir üblicherweise einen Ordner pro Projekt, in dem dann eben alle Dateien, die während der verschiedenen Kompiliervorgänge so entstehen, liegen. Die Hilfsdateien fallen ja grob gesagt in zwei Kategorien:

  1. Dateien, die Daten enthalten, die für den nächsten Kompiliervorgang wichtig sind, z.B. die aux-Datei für Querverweise, die toc-Datei für das Inhaltsverzeichnis usw.
  2. Dateien, die Nachrichten und Details zum Kompiliervorgang enthalten, wie die log-Datei oder die blg-Datei, die von biber erzeugt wird.

Dateien aus der Kategorie eins würde ich in der Regel nicht löschen, solange das Dokument nicht fertig ist, da sie zur Fertigstellung benötigt werden.

Löschen mit arara

Allerdings kann es manchmal doch praktisch sein, wenn man nach erfolgreicher Dokumenterstellung die Hilfsdateien wieder löschen kann. (Ich hatte mal ein Projekt aus ca. 50 recht ähnlichen Dokumenten, die alle zweimal kompiliert werden mussten, danach konnten die Hilfsdateien entfernt werden. Sie mussten auch alle im gleichen Ordner bleiben. Es hätte viele Aufräummöglichkeiten gegeben, doch mir gefiel der Ansatz mit arara auch am besten.)

Daher ist hier jetzt die deutsche Version meiner Antwort auf TeX.sx zu »Deleting external/auxiliary files«:

Es gibt Paulo Ceredas tolles arara (The cool TeX automation tool), ohne das ich mir nicht mehr vorstellen kann zu arbeiten. Es hat eine vordefinierte clean-Regel, die es ermöglicht anzugeben, welche Dateien nach der Kompilierung gelöscht werden sollen. Die folgende Datei namens test.tex würde zweimal kompiliert werden und dann würden die aux- und die toc-Datei gelöscht:

Open in writeLaTeX
% arara: pdflatex
% arara: pdflatex
% arara: clean: { files: [ test.aux , test.toc ] }
\documentclass{article}
\begin{document}

\tableofcontents

\section{Test}

foo

\end{document}

Da ich es mühsam fand, immer den kompletten Dateinamen der Dateien anzugeben, die gelöscht werden sollen, habe ich Paulo gefragt, ob es ein arara-Äquivalent für \jobname gebe,

Open in writeLaTeX
% arara: clean: { files: [ \jobname.aux, \jobname.log ] }

das es ermöglichen würde, die arara-Anweisungen von einer Datei zur nächsten zu kopieren. Er schrieb mir die folgende nette Regel (Danke nochmal, Paulo):

Open in writeLaTeX
!config
identifier: remove
name: Remove
command: <arara> @{remove}
arguments:
- identifier: remove
  default: <arara> @{isNotEmpty(item, isWindows("cmd /c del", "rm -f").concat(' "').concat(getBasename(file))concat('.').concat(item).concat('"'))}

Korrekt installiert wird damit aus obigem Beispiel:

Open in writeLaTeX
% arara: pdflatex
% arara: pdflatex
% arara: remove: { items: [ aux , toc ] }
\documentclass{article}
\begin{document}

\tableofcontents

\section{Test}

foo

\end{document}

Mit arara in Ordner kopieren

Es folgt der Versuch einer arara-Regel, mit der man ausgewählte Dateien in einen anderen Ordner kopieren kann:

Open in writeLaTeX
!config
# Backup rule for arara
# author: Clemens Niederberger
# version: 0.1 2014/05/21
# requires arara 3.0+
identifier: backup
name: Backup
command: <arara> @{backup}@{folder}
arguments:
- identifier: backup
  default: <arara> @{isWindows("cmd /c copy", "cp -f").concat(' "')
                     .concat(getBasename(file)).concat('.')
                     .concat(isNotEmpty(item,item,"pdf"))
                     .concat('" ')}
- identifier: folder
  flag: <arara> @{parameters.folder}

Diese Regel kann man nun folgendermaßen einsetzen,

Open in writeLaTeX
% arara: backup: { folder: myfolder }

um die PDF-Datei in den Unterordner myfolder zu kopieren. Der Aufruf

Open in writeLaTeX
% arara: backup: { folder: myfolder , items: [ tex , pdf ] }

würde entsprechend die tex- und die pdf-Datei kopieren. Achtung: der Ordner, in den die Dateien kopiert werden sollen, muss angegeben werden. Außerdem muss der Ordner existieren.

Ich habe kein Windows und konnte daher nicht testen, ob die Regel unter Windows funktioniert. Feedback von Testern wäre daher willkommen.

Permanenter link

beantwortet 20 Mai '14, 23:49

cgnieder's gravatar image

cgnieder
22.1k253463
Akzeptiert-Rate: 60%

bearbeitet 21 Mai '14, 12:16

Wenn das Dokument fertig ist, können alle weg. Vorher würde ich keine löschen. Manche Dateien (aux, toc, lof, ... ) werden während der Erstellung des Dokuments im gleichen Ordner gebraucht...

(21 Mai '14, 00:00) cgnieder

Man kann ziemlich sicher auch eine copyaux-Regel erstellen, die Hilfsdateien in einen Unterordner kopiert. Dafür bin ich jetzt aber zu müde...

(21 Mai '14, 00:02) cgnieder

An einen Unterordner hatte ich auch gedacht, wo dann log und alles reinkommt. Aber, da dachte ich, das wird hart; evtl. müssen irgendwelche Verknüpfungen angelegt werden, aber wenn die Hilfsdateien eh nimmer benötigt werden, ist es ja vll. auch egal.

(21 Mai '14, 00:08) cis

Ok, hab mal die remove-Regel ergänzt. Mit

% arara: remove: { items: [ aux , toc , log ] }
bleibt dann nur noch arara.log bestehen.

Ich denke mal, die bib-Hilfsdatei sollte man damit besser nicht versehentlich löschen; vll. auch noch andere nicht - muß ich mir mal drüber klar werden.

(21 Mai '14, 00:21) cis
1

bib ist keine Hilfsdatei, sondern die Datei, die alle die Bibliographie-Einträge definiert, also eine Art Bibliothek. Die man man sicher nicht löschen! (Außer man hat sie mit filecontents in der tex-Datei...).

(21 Mai '14, 00:24) cgnieder
2

@cis Der pdflatex-Lauf beispielsweise erstellt eine bcf-Datei, welche von biber gelesen wird. biber erstellt eine bbl-Datei, welche von pdflatex gelesen wird. Verschwinden diese in Unterordnern, kommt es oft zu Huddelei. Ist das Projekt aber wirklich komplett fertig, dann kannst du alle löschen. Notfalls auch von Hand.

(21 Mai '14, 09:08) Johannes

@cis Ich habe mal den Entwurf einer regel hinzugefügt, mit der man Dateien in einen Ordner kopieren kann...

(21 Mai '14, 12:12) cgnieder

Zunächst: die backup-Regel tut! Wenn man die Hilfsdateien nur noch im angegebenen Ordner haben will, könnte man auf die Idee kommen

% arara: backup: { folder: myfolder , items: [ aux , toc , log , bbl , bcf , blg , out , run.xml , gz ] }
% arara: remove: { items: [ aux , toc , log , bbl , bcf , blg , out , run.xml , gz ] }
auszuführen - dann tut die Löschung komischerweise nimmer, nimmt man backup raus, geht es wieder.

(21 Mai '14, 18:39) cis

Also das klärt sich so: In der backup-Regel dürfen nur exakt die vorkommenden Hilfsdateiendungen stehen, sonst bricht arara ab; und führt auch nimmer die nachfolgende remove-Regel aus; bei remove ist es entsprechend egal, ob dort zu viele Dateiendungen drinnstehen.

Im Beispielprogramm oben geht es entsprechend nur mit

% arara: pdflatex
% arara: backup: { folder: myfolder , items: [ aux , toc , log ] }
% arara: remove: { items: [ aux , toc , log , bbl , bcf , blg , out , run.xml , gz ] }
\documentclass{article}
\begin{document}
\tableofcontents
foo
\end{document}
(22 Mai '14, 04:45) cis

Könnte man die backup-Regel mit einem "Ignore-Befehl" ergänzen, so daß man sie bedenkenlos zusammen mit der remove-Regel verwenden kann?

(26 Mai '14, 04:41) cis

@cis man könnte die backup-Regel so verändern, dass sie nur die Dateien versucht zu verschieben, die auch tatsächlich existieren. Das würde allerdings ein anderes Problem erzeugen: alle Regeln werden evaluiert, bevor eine einzige ausgeführt wird. Wenn die Dateien von dem Aufruf von arara nicht existieren, würde die backup-Regel dann gar nichts machen. Das wäre sogar gefährlich, weil die remove-Regel trotzdem die Dateien löscht.

(26 Mai '14, 18:54) cgnieder
Ergebnis 5 von 11 show 6 more comments

pdflatex besitzt das Kommandozeilenargument -output-directory=<dir> womit sich das Verzeichnis angeben lässt wohin die Ausgabe geschrieben werden soll. Der folgende Screenshot illustriert das glaube ich ganz gut. (Klicken für volle Größe)

alt text

Permanenter link

beantwortet 20 Mai '14, 20:42

Henri's gravatar image

Henri
15.7k133943
Akzeptiert-Rate: 46%

bearbeitet 20 Mai '14, 20:43

Oder, wiedermal mit --shell-escape, die Ergebnisdateien (pdf) in ein Verzeichnis kopieren lassen.

Open in writeLaTeX
\documentclass[10pt,a4paper]{article}%
\usepackage[utf8]{inputenc}%
\usepackage[ngerman]{babel}%
\begin{document}
Test
\immediate\write18{*kopierbefehl* \jobname.pdf *zielverzeichnis* }
\end{document}%
Permanenter link

beantwortet 20 Mai '14, 21:49

ctansearch's gravatar image

ctansearch
(ausgesetzt)
Akzeptiert-Rate: 18%

bearbeitet 20 Mai '14, 21:49

1

Das könnte für eine Sicherheitskopie praktisch sein (Bing - neue arara Idee), aber: Was muß denn an der Stelle kopierbefehl stehen?

(21 Mai '14, 01:24) cis

@cis Je nach Betriebssystem könnte dort z.B. cp oder copy oder ein Kopiertool wie rcp, scp oder xcopy stehen, das ist sicher als Platzhalter vorgesehen. Ich verwende oft scp (secure copy) für Sicherheitskopien auf einem entfernten Rechner (Server), denn lokale Kopien nützen nichts, wenn der Rechner bzw. die Festplatte kaputt geht.

(21 Mai '14, 09:25) stefan ♦♦

@stefan Genau diese Abhängigkeit vom OS ist aber auch wieder ein Nachteil. Bei der arara-Lösung gibt es diesen nicht.

(21 Mai '14, 11:10) Bes

Will man das ganze OS unabhängiger haben, kann man lualatex (und das Paket luacode) verwenden:

Open in writeLaTeX

\begin{luacode}
if os.type == "windows" then
    os.exec("copy \jobname.pdf backupverzeichnis")
else
    os.exec("cp -f \jobname.pdf backupverzeichnis")
end
\end{luacode}

Natürlich ist das nur eine kurze Skizzierung. Man sollte das ruhig um eine Fehlerbehandlung erweitern. Da aber gar nicht nach Backups gefragt war, werde ich das hier nicht weiter ausführen.

(21 Mai '14, 11:17) Bes

Für ein backup könnte man auch die move-Regel von Paulo Cereda verwenden; das verschiebt die Dateien in einen angegebenen Ordner, d.h. eine nachfolgende clean/remove-Regel ist nimmer nötig.

Ich kann das mal hierhin kopieren, sonst muß man soviel springen:

Open in writeLaTeX
!config
# Move rule for arara
#author: Paulo Cereda
# requires arara 3.0+
identifier: move
name: Move
command: <arara> @{isFalse(isEmpty(item), isWindows("cmd /c move /y", "mv -f").concat(' "').concat(getBasename(file)).concat('.').concat(item).concat('"').concat(' "').concat(target).concat('"'))}
arguments:
- identifier: target
  flag: <arara> @{parameters.target}

Open in writeLaTeX
% arara: pdflatex
% arara: move: { items: [ log, aux ], target: stuff }
\documentclass{article}

\begin{document}

Hello world.

\end{document}
Permanenter link

beantwortet 28 Jun '14, 15:35

cis's gravatar image

cis
9.5k93459491
Akzeptiert-Rate: 29%

bearbeitet 28 Jun '14, 15:39

Deine Antwort
Vorschau umschalten

Folgen dieser Frage

Per E-Mail:

Wenn sie sich anmelden, kommen Sie für alle Updates hier in Frage

Per RSS:

Antworten

Antworten und Kommentare

Markdown-Grundlagen

  • *kursiv* oder _kursiv_
  • **Fett** oder __Fett__
  • Link:[Text](http://url.com/ "Titel")
  • Bild?![alt Text](/path/img.jpg "Titel")
  • nummerierte Liste: 1. Foo 2. Bar
  • zum Hinzufügen ein Zeilenumbruchs fügen Sie einfach zwei Leerzeichen an die Stelle an der die neue Linie sein soll.
  • grundlegende HTML-Tags werden ebenfalls unterstützt

Frage-Themen:

×38
×30

gestellte Frage: 20 Mai '14, 19:11

Frage wurde gesehen: 23,996 Mal

zuletzt geändert: 28 Jun '14, 15:39