Stefans Wiki



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

Makefile

  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.

unix/shell/pdf_aus_latex-datei_mit_hilfe_eines_makefile_erstellen.txt · Zuletzt geändert: 24.03.2011 22:05 (Externe Bearbeitung)
Quelle: http://stefanjahn.de/unix:shell:pdf_aus_latex-datei_mit_hilfe_eines_makefile_erstellen
Webseite: http://stefanjahn.de