Ich verwende Makefile
, um PDF aus .tex
files zu generieren.
Wenn Referenzen in meinen LaTeX-Dateien verwendet wurden. manchmal bekomme ich etwas wie
LaTeX Warning: Label(s) may have changed. Rerun to get cross-references right.
Ich weiß, dass der LaTeX-Kompilierbefehl dieses Referenzproblem beheben kann, aber in meinem Makefile
hängt %.pdf
nur von %.tex
ab, also nur make
wieder ausführen behebt das Problem nicht (nichts geändert in .tex
file). Ich muss ein make clean
machen, um PDF erneut zu generieren.
Hier ist mein Makefile
Wie löst man dieses Problem? Danke.
UPDATE:
Hier sind einige Gedanken, die ich von Google gefunden habe
default
target zu .PHONY
. Was ist nicht eine sehr gute Lösung (weil es so möglicherweise Latex-Datei gibt, und ich muss nur eine einzelne Datei neu kompilieren) %.pdf
's Abhängigkeit um %.aux
einzuschließen. Aber ich weiß nicht, ob es in GNU möglich ist? (hängt von %.aux
file ab, wenn es existiert, andernfalls ignoriere die Abhängigkeit von %.aux
) grep
für die Datei .log
aus, und suchen Sie nach der entsprechenden Warnung. Wenn es existiert, führen Sie den Kompilierbefehl erneut aus. Ich verwende in allen meinen LaTeX Makefiles die einfache Regel
%Vor%Dies wiederholt pdflatex so oft wie nötig. Ich habe festgestellt, dass all die verschiedenen LaTeX-Nachrichten, die eine erneute Ausführung erfordern, die allgemeine Zeichenfolge "Rerun to get" in der Protokolldatei enthalten. Sie können also in einer while-Schleife mit grep prüfen, ob sie vorhanden ist.
Die Einstellung ".DELETE_ON_ERROR:" ist wichtig: es stellt sicher, dass make automatisch alle verbleibenden unvollständigen pdf / aux / idx-Dateien löscht, wenn TeX mit einem Fehler abbricht, so dass sie make nicht beim nächsten Aufruf verwirren können.
Wenn ich anstelle von PDF DVI als Ausgabeformat verwende, verwende ich äquivalent
%Vor%Die letzte Zeile bewirkt, dass jeder laufende xdvi seine Eingabedatei für eine sofortige visuelle Überprüfung neu lädt.