9

MakefileファイルからPDFを生成するために使用してい.texます。

私のLaTeXファイルで参照が使用されたとき。時々私は次のようなものを得る

LaTeX Warning: Label(s) may have changed. Rerun to get cross-references right.

LaTeX コンパイル コマンドを再実行するとこの参照の問題を修正できることはわかっていますが、私のMakefileでは に%.pdfのみ依存しているため、再%.tex実行するだけでmakeは問題は修正されません (.texファイルは何も変更されていません)。make cleanPDFを再生成するには、を実行する必要があります。

これが私のMakefile

TEX := $(wildcard *.tex)
default: $(TEX:.tex=.pdf)
%.pdf: %.tex
    xelatex $<
.PHONY: clean
clean:
    rm -v *.aux *.toc *.log *.out

この問題を解決するには?ありがとうございました。

アップデート:

ここに私がGoogleから見つけたいくつかの考えがあります

  1. defaultターゲットを に変更します.PHONY。これはあまり良い解決策ではありません(そこには多くのラテックスファイルがあり、単一のファイルを再コンパイルするだけでよいためです)
  2. %.pdfの依存関係を include に変更します%.aux。しかし、GNU makeでそれが可能かどうかわかりませんか? (%.aux存在する場合はファイルに依存し、存在しない場合は依存関係を無視します%.aux)
  3. ファイルに対してagrep.log実行し、特定の警告を見つけます。存在する場合は、コンパイル コマンドを再実行します。
4

2 に答える 2

12

私はすべての LaTeX メイクファイルで単純なルールを使用しています

.DELETE_ON_ERROR:

%.pdf %.aux %.idx: %.tex
        pdflatex $<
        while grep 'Rerun to get ' $*.log ; do pdflatex $< ; done

これにより、pdflatex が必要なだけ繰り返されます。再実行を要求するすべての異なる LaTeX メッセージには、共通の文字列 "Rerun to get " がログ ファイルに含まれていることがわかったので、while ループで grep を使用してその存在をテストできます。

".DELETE_ON_ERROR:" 設定は重要です: これにより、TeX がエラーで中止されるたびに、make が残りの不完全な pdf/aux/idx ファイルを自動的に削除し、次に呼び出すときに make を混乱させないようにします。

出力形式として PDF ではなく DVI を使用する場合は、同等に使用します

%.dvi %.aux %.idx: %.tex
        latex $<
        while grep 'Rerun to get ' $*.log ; do latex $< ; done
        -killall -USR1 -r xdvi || true

最後の行では、実行中の xdvi が入力ファイルをリロードして、すぐに視覚的に検査できるようにします。

于 2013-01-30T09:50:39.483 に答える
0

「デフォルト」を偽のターゲットにする (「デフォルト」を .PHONY で始まる行に追加する) か、より複雑な依存関係構造を構築して、自動的に再実行します (その方法はわかりません、申し訳ありません)。

于 2012-09-09T22:18:41.067 に答える