Hallo,

ich bin bestimmt zu blöd, bekomme es aber nicht hin. Die Überschrift sagt es ja schon. Ich habe einen Ordner mit ca. 20 *.tex Dateien, die alle Arara-Regeln beinhalten. Nun möchte ich sie von der Kommandozeile unter Linux einfach alle auf einmal kompilieren.

Mit latexmk ging

latexmk *.tex oder einfach nur latexmk im Verzeichnis von einer Konsole aus. Mit arara geht das aber nicht, man kann immer nur eine Datei kompilieren.

Weiß jemand wieso?

VG Thorsten

gefragt 08 Okt '15, 18:36

thor's gravatar image

thor
2021916
Akzeptiert-Rate: 28%

Weil das bei arara nicht vorgesehen ist. Du kannst aber etwas wie: for f in *.tex;do arara $f;done machen. Windows Anwender verwenden stattdessen: for %f in ('dir /b *.tex') do arara %f

(08 Okt '15, 19:49) saputello

Danke schön!, das geht, wundert mich etwas, dass das mit Boarmitteln nicht geht, gerade das finde ich sehr hilfreich, wenn man viele Dateien kompilieren muss :-)

(08 Okt '15, 20:33) thor

Da benutze ich doch lieber ein geschickt konzipiertes Makefile. Globbing kompiliert im Zweifel alles neu. Mein Makefile nur das was wirklich muss. Dazu hat das Makefile den Vorteil mit Dokumenten die über mehrere Dateien gesplittet besser umgehen kann als ein Glob.

(08 Okt '15, 20:46) NobbZ

Gegenwärtig ist in arara diese Möglichkeit nicht vorgesehen, ein entsprechendes Feature habe ich aber gerade vorgeschlagen (cereda/arara #74).

Bis dahin gibt es verschiedene Möglichkeiten das fehlende Feature zu umgehen, die Mehrprozessor Varianten bewirken dabei allerdings immer eine Vermischung der Ausgaben der verschiedenen arara-Instanzen und sollten nur genutzt werden wenn man sich ziemlich sicher ist, dass es nicht zu Fehlern kommt.

Eine Schleife auf der Kommandozeile

Linux/OS X:

Open in Online-Editor
for f in in *.tex; do arara "$f"; done

Alternativ kann man auch find und xargs nutzen, das skaliert bei besonders vielen Quelldateien besser und lässt sich ähnlich wie der Makefile ansatz auf mehrere Kerne aufteilen (aus dem Kopf geschrieben, würde mich freuen wenn jemand die beiden Aufrufe auf gültigkeit verifizieren kann):

Open in Online-Editor
find -name '*.tex' -print0 | xargs -0 -n1 arara # Baut immer nur ein Dokument
find -name '*.tex' -print0 | xargs -0 -n1 -P2 arara # Baut 2 Dokumente gleichzeitig, die Zahl 2 darf gerne durch die tatsächliche Anzahl Kerne ersetzt werden.

Windows:

Open in Online-Editor
for %%f in ('dir /b *.tex') do arara %f

Zur einfachereren Handhabung kann man diese Befehle natürlich auch gerne in eine build/build.bat speichern und in das Projektverzeichnis legen. Unter Linux darf dabei der Shebang und das Executable-Bit natürlich nicht vergessen werden.

Ein Makefile

Wenn einem GNU-make zur Verfügung steht sollte auch folgendes Makefile funktionieren (bin gerade unter Windows, kann daher nicht genauer testen):

Open in Online-Editor
SOURCES = $(wildcard *.tex)
TARGETS = $(SOURCES:%.tex=%.pdf)

all: $(TARGETS)

%.pdf: %.tex
    arara $< # Diese Zeile muss durch Tab eingerückt werden, nicht durch Leerzeichen!!!

Dieses Makefile geht davon aus, dass sich alle Dateien im Arbeitsverzeichnis von make befinden. Ausserdem geht es davon aus, dass in keiner der tex-Dateien \input, \include oder andere Mechanismen genutzt werden um Fremddateien einzubinden. Nutzt man also Bilder oder unterteilt sein Dokument in mehrere Dateien muss das Makefile entsprechend angepasst werden.

Es ist sehr einfach mehrere Dokumente gleichzeitig zu kompilieren, indem man dem make-Aufruf den Parameter -j<Kerne> mitübergibt. Zum Beispiel make -j2 kompiliert 2 Dokumente gleichzeitig.

Permanenter link

beantwortet 09 Okt '15, 11:06

NobbZ's gravatar image

NobbZ
33731017
Akzeptiert-Rate: 40%

bearbeitet 23 Jun '16, 18:15

In eine BAT-Datei müssen die % verdoppelt werden!

(09 Okt '15, 14:00) saputello

@NobbZ: Beim find-Ansatz sollte man mit -print0 und Option -0 für xargs arbeiten, damit Dateinamen mit Leerzeichen problemlos funktionieren.

(09 Okt '15, 14:02) saputello

Mit batchscripting unter Windows kenne ich mich nicht so aus, und wegen find hast du natürlich auch recht. Ist eine Sache die ich immer wieder vergesse... Werde den Beitrag entsprechend bearbeiten wenn ich wieder zuhause bin.

(09 Okt '15, 14:25) NobbZ

Ich antworte hier als Kommentar und hoffe, dass das so ok ist. Danke für die qualifizierten Beiträge. Zurzeit komme ich mit latexmk doch etwas besser klar, vielleicht ändert sich das noch, weil arara ja auch latexmk/xelatexmk unterstützt. So muss ich aber nur in ein Verzeichnis gehen und auf der Konsole (Linux) latexmk eingeben und alle Dateien werden kompiliert. Das reicht mir zurzeit erst einmal. Ich werde aber das Makefile testen, vielleicht kann man es ja auch so konfigurieren, dass es mehrere Verzeichnisse durchsucht und automatisch alle Dateien kompiliert werden....

(09 Okt '15, 20:37) thor
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:

×30

gestellte Frage: 08 Okt '15, 18:36

Frage wurde gesehen: 8,610 Mal

zuletzt geändert: 23 Jun '16, 18:15