ubuntuusers.de

Makefile zum Kompilieren mehrerer LaTeX Dateien

Status: Ungelöst | Ubuntu-Version: Ubuntu 10.10 (Maverick Meerkat)
Antworten |

ClemensU

Anmeldungsdatum:
11. April 2011

Beiträge: 12

Hallo! Gerne würde ich ein Makefile schreiben, mit dem man viele *.tex Dateien auf einmal kompilieren kann. Es sind allesamt Zeichnungen (mit PSTricks und TikZ erstellt), die jeweils in eine dedizierte pdf bzw. ps Datei geschrieben werden sollen (Zeichnung1.tex → Zeichnung1.pdf, Zeichnung2.tex → Zeichnung2.pdf usw). Das ganze funktioniert schon... ABER nur für eine .tex Datei... Mein Ansatz:

C1 = latex
C1FLAGS = --src -interaction=nonstopmode  --enable-write18

C2 = dvips
C2FLAGS = -E

C3 = epstopdf

FILES = Zeichnung1

$(FILES).pdf: $(FILES).ps $(FILES).dvi $(FILES).tex
	$(C3) $<

$(FILES).ps: $(FILES).dvi $(FILES).tex
	$(C2) $(C2FLAGS) $<

$(FILES).dvi: $(FILES).tex
	$(C1) $(C1FLAGS) $<

Ein wenig kürzer:

$(FILES).pdf $(FILES).ps: $(FILES).tex
	$(C1) $(C1FLAGS) $(FILES).tex
	$(C2) $(C2FLAGS) $(FILES).dvi
	$(C3) $(FILES).ps

Führe ich nun make aus, klappt auch alles. Die files Liste kann ich eben nur nicht erweitern, da dann z.B.

latex Zeichnung1 Zeichnung2.tex

ausgeführt wird, was natürlich Quatsch ist. Vieleicht hat jemand einen Tipp! Vielen Dank vorab.

Das Löschen habe ich folgendermaßen umgesetzt (es funktioniert wie geplant mit vielen Dateien):

LIST = Zeichnung1 Zeichnung2 Zeichnung3 ...

clean:
	rm $(foreach FNAME,$(LIST),$(FNAME).dvi)
	rm $(foreach FNAME,$(LIST),$(FNAME).aux)
	rm $(foreach FNAME,$(LIST),$(FNAME).log)
	rm $(foreach FNAME,$(LIST),$(FNAME).toc)

PS: In dem Ordner sind mehrere .ps Dateien, die nicht unbedingt mit epstopdf behandelt werden sollen, daher geht nicht %.ps oder ähnliches.

theinlein

Anmeldungsdatum:
29. Dezember 2007

Beiträge: 1279

Hi,

make ist schon lange her ...

So, wie du das gemacht hast, kenne ich das nicht: die elementweise Expandierung einer Liste (aber vielleicht geht das mit make doch irgendwie und ich weiß es nur nicht)

das müsste gehen

PDFFILES = a.pdf b.pdf c.pdf
PSFILES  = a.ps  b.ps  c.ps

...

oder du musst Regeln für Suffixe erstellen.

und dann ... am besten ist es, wenn du in einem Verzeichnis auch nur die Dateien hast, die zum Endergebnis beitragen. Das vereinfacht wohl vieles.

ClemensU

(Themenstarter)

Anmeldungsdatum:
11. April 2011

Beiträge: 12

Hey, danke für den Tipp, aber das geht nicht. Das selbe macht übrigens

LIST = Zeichnung1 Zeichnung2 Zeichnung3 ...
rm $(foreach FNAME,$(LIST),$(FNAME).dvi)

Ergebnis:

rm Zeichnung1.dvi Zeichnung2.dvi ...

Das Problem ist, dass ich eine Art for Schleife brauche, das also am Ende jede .tex Datei mit den Befehlen EINZELN behandelt wird. Denn ich kann mit rm mehrere Dateien auf einmal löschen, aber

latex Zeichnung1.tex Zeichnung2.tex ...

funktioniert eben nicht.

ClemensU

(Themenstarter)

Anmeldungsdatum:
11. April 2011

Beiträge: 12

theinlein schrieb:

make ist schon lange her ...

Mmmh, ich hab zwar schon von anderen make Derivaten gehört, aber die machen doch im Prinzip alles das selbe - dachte ich. Was ist denn "aktuell"? Es muss auf Win und Linux laufen.

theinlein

Anmeldungsdatum:
29. Dezember 2007

Beiträge: 1279

ClemensU schrieb:

theinlein schrieb:

make ist schon lange her ...

Mmmh, ich hab zwar schon von anderen make Derivaten gehört, aber die machen doch im Prinzip alles das selbe - dachte ich. Was ist denn "aktuell"? Es muss auf Win und Linux laufen.

auf WIN und LINUX ...

also in so einem Falle nehme ich Apache 'ant'

Das ist eine Art makefile, das in xml (geschwätzig) geschrieben wird und ist eine Java-Applikation. http://ant.apache.org/

(heißt aber, dass man sich erst mal einlesen muss)

Antworten |