Inhaltsverzeichnis
PDF aus LaTeX-Datei mit Hilfe eines Makefile erstellen
Problem
Damit aus einer LaTeX-Datei das fertige PDF-Dokument erzeugt wird, müssen verschiedene Befehle wie pdflatex
, makeindex
und bibtex
ausgeführt werden. Zusätzlich darf man am Ende noch alle temporären Dateien entfernen. Die wiederholte Eingabe der Befehle in der richtigen Reihenfolge mit den korrekten Parametern kann mit der Zeit etwas aufwendig und nervig werden.
Ziel
Benutzung von make das alle nötigen Arbeitsschritte für einen abnimmt.
Lösung
1: # Hauptdokument 2: MAINFILE = main 3: 4: # Welche Eigenschaften hat das Dokument 5: # index = Index/Stichwortverzeichnis 6: # abbr = Abkuerzungsverzeichnis 7: # bib = Literaturverzeichnis 8: FEATURES = index abbr bib 9: 10: # Compiler fuer das LaTeX-Dokument 11: LATEX = pdflatex 12: LATEXFLAGS = -interaction=nonstopmode 13: 14: # Programm zum Erstellen des Index/Abkuerzungsverzeichnis 15: MAKEINDEX = makeindex 16: 17: # Programm zum Erstellen des Literaturverzeichnis 18: BIBTEX = bibtex 19: 20: # Programm zum loeschen der Dateien 21: # DEL = del 22: DEL = rm -f 23: 24: # Programm um Meldungen auf der Konsole ausgeben zu koennen 25: ECHO = echo 26: 27: # Programm zum oeffnen des PDF-Dokuments 28: # VIEWPDF = cmd /c start 29: VIEWPDF = evince 30: 31: # Sicherheitskopien 32: BACKUPSUFFIX = ~ 33: BACKUPFILES = $(patsubst %.tex,%.tex$(BACKUPSUFFIX),$(wildcard *.tex)) $(patsubst %.bib,%.bib$(BACKUPSUFFIX),$(wildcard *.bib)) 34: 35: .PHONY: help clean cleanaux cleanbackup cleanall cleanpdf showpdf 36: 37: # Regeln 38: all: $(MAINFILE).pdf 39: index: $(MAINFILE).ind $(MAINFILE).ilg 40: abbr: $(MAINFILE).nls 41: bib: $(MAINFILE).blg $(MAINFILE).bbl 42: 43: # Hilfe ausgeben 44: help: 45: @$(ECHO) Regeln 46: @$(ECHO) ------ 47: @$(ECHO) all : Komplettes PDF-Dokument mit allen Features erstellen 48: @$(ECHO) pdf : PDF-Dokument ohne Features erstellen 49: @$(ECHO) index : Index/Stichwortverzeichnis erstellen 50: @$(ECHO) abbr : Abkuerzungsverzeichnis erstellen 51: @$(ECHO) bib : Literaturverzeichnis erstellen 52: @$(ECHO) clean : temporaere Dateien loeschen 53: @$(ECHO) cleanbackup: Sicherheitskopien loeschen 54: @$(ECHO) cleanpdf : PDF-Dokument loeschen 55: @$(ECHO) cleanall : Fuehre clean, cleanbackup und cleanpdf aus 56: @$(ECHO) showpdf : PDF-Dokument anzeigen 57: @$(ECHO) 58: @$(ECHO) Infos 59: @$(ECHO) ----- 60: @$(ECHO) Hauptdokument: $(MAINFILE).tex 61: @$(ECHO) Features : $(FEATURES) 62: @$(ECHO) 63: 64: # PDF-Dokument 65: pdf: $(MAINFILE).tex 66: @$(ECHO) ====================================================================== 67: @$(ECHO) PDF-Dokument 68: @$(ECHO) ====================================================================== 69: $(LATEX) $(LATEXFLAGS) $(MAINFILE).tex 70: 71: # Komplettes PDF-Dokument (Regel all) 72: $(MAINFILE).pdf: $(MAINFILE).tex $(FEATURES) 73: @$(ECHO) ====================================================================== 74: @$(ECHO) Komplettes PDF-Dokument: 1. Durchgang 75: @$(ECHO) ====================================================================== 76: $(LATEX) $(LATEXFLAGS) $(MAINFILE).tex 77: 78: @$(ECHO) ====================================================================== 79: @$(ECHO) Komplettes PDF-Dokument: 2. Durchgang 80: @$(ECHO) ====================================================================== 81: $(LATEX) $(LATEXFLAGS) $(MAINFILE).tex 82: 83: # Vorbereitung 84: $(MAINFILE).idx $(MAINFILE).nlo $(MAINFILE).aux: $(MAINFILE).tex 85: @$(ECHO) ====================================================================== 86: @$(ECHO) Vorbereitung 87: @$(ECHO) ====================================================================== 88: $(LATEX) $(LATEXFLAGS) $(MAINFILE).tex 89: 90: # Index/Stichwortverzeichnis (Regel index) 91: $(MAINFILE).ind $(MAINFILE).ilg: $(MAINFILE).tex $(MAINFILE).idx 92: @$(ECHO) ====================================================================== 93: @$(ECHO) Index 94: @$(ECHO) ====================================================================== 95: $(MAKEINDEX) $(MAINFILE).idx 96: 97: # Abkuerzungsverzeichnis (Regel abbr) 98: $(MAINFILE).nls: $(MAINFILE).tex $(MAINFILE).nlo 99: @$(ECHO) ====================================================================== 100: @$(ECHO) Abkuerzungsverzeichnis 101: @$(ECHO) ====================================================================== 102: $(MAKEINDEX) $(MAINFILE).nlo -s nomencl.ist -o $(MAINFILE).nls 103: 104: # Literaturverzeichnis (Regel bib) 105: $(MAINFILE).blg $(MAINFILE).bbl: $(MAINFILE).tex $(MAINFILE).bib $(MAINFILE).aux 106: @$(ECHO) ====================================================================== 107: @$(ECHO) Literaturverzeichnis 108: @$(ECHO) ====================================================================== 109: $(BIBTEX) $(MAINFILE) 110: 111: # Temporaere Dateien loeschen 112: clean: 113: $(DEL) $(MAINFILE).aux 114: $(DEL) $(MAINFILE).bbl 115: $(DEL) $(MAINFILE).bit 116: $(DEL) $(MAINFILE).blg 117: $(DEL) $(MAINFILE).dvi 118: $(DEL) $(MAINFILE).glo 119: $(DEL) $(MAINFILE).idx 120: $(DEL) $(MAINFILE).ilg 121: $(DEL) $(MAINFILE).ilg 122: $(DEL) $(MAINFILE).ind 123: $(DEL) $(MAINFILE).lof 124: $(DEL) $(MAINFILE).log 125: $(DEL) $(MAINFILE).lot 126: $(DEL) $(MAINFILE).nlo 127: $(DEL) $(MAINFILE).nls 128: $(DEL) $(MAINFILE).out 129: $(DEL) $(MAINFILE).toc 130: 131: # Aux-Dateien loeschen (auch von anderen Dateien) 132: cleanaux: 133: $(DEL) *.aux 134: 135: # Sicherheitskopien loeschen 136: cleanbackup: 137: $(DEL) $(BACKUPFILES) 138: 139: # PDF-Dokument loeschen 140: cleanpdf: 141: $(DEL) $(MAINFILE).pdf 142: 143: # Alle temporaren Dateien in einem Durchgang loeschen 144: cleanall: clean cleanaux cleanbackup 145: 146: # PDF-Dokument anschauen 147: showpdf: $(MAINFILE).pdf 148: $(VIEWPDF) $(MAINFILE).pdf
Hinweis
Den Befehl evince
für die Anzeige des PDF-Dokuments entsprechend anpassen da der Befehl evince
ein Linux-Programm ist.
Das Programm make
ist sehr penibel was die Formatierung eines Makefiles angeht. Sämtliche Einzüge im Makefile müssen mit Tabulator gemacht werden, jegliches Leerzeichen führt zu einer Fehlermeldung.