2012-09-09 2 views
8

을 사용하여 .tex 파일에서 PDF를 생성합니다.LaTeX 레퍼런스와 Makefile

내 LaTeX 파일에서 참조가 사용 된 경우. 때때로 나는

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

같은 내가 다시 실행 라텍스이 참조 문제를 해결할 수 있습니다 명령을 컴파일 것을 알 수 있지만, 내 Makefile에, %.pdf은 따라서 단지가 해결되지 않습니다 다시 make을 실행 %.tex에 따라 달라집니다 문제 (.tex 파일에서 변경된 사항 없음). 다시 PDF를 다시 생성하려면 make clean해야합니다.

은 여기 내 Makefile

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

어떻게이 문제를 해결하기 위해인가? 고맙습니다.

UPDATE :

여기가 .PHONY로 변경합니다

  1. 구글

    에서 default 대상을 발견 몇 가지 생각을합니다. 어떤 좋은 해결책이 아닌가? (거기에 라텍스 파일이 있기 때문에 하나의 파일 만 다시 컴파일하면 됨)
  2. %.aux을 포함하도록 %.pdf의 의존성을 변경하십시오. 하지만 GNU make에서 가능한지 모르겠습니다. (존재하는 경우 %.aux 파일에 따라 다름, 그렇지 않으면 %.aux에 대한 의존성을 무시하십시오.)
  3. grep.log 파일에 작성하고 특정 경고를 찾으십시오. 존재하는 경우 compile 명령을 다시 실행하십시오.
+2

대부분의 훌륭한 TeX 배포판의 일부인 [latexmk] (http://ctan.tug.org/pkg/latexmk)를 보시면 도움이 될 것입니다. –

답변

1

"기본"으로 가짜 타겟을 지정하거나 ("기본"을 .PHONY로 시작하는 라인에 추가하십시오) 자동으로 재실행하는 더 복잡한 의존성 구조를 구축하십시오 (미안합니다. 미안합니다.). 내 모든 라텍스 사용

+0

답변 해 주셔서 감사합니다. 나는'default'를'.PHONY'로 만드는 것이 좋은 생각이라고 생각하지 않습니다. 거기에 많은 tex 파일이 있고, 단지 하나의'.tex' 파일을 다시 컴파일해야하기 때문입니다. – yegle

10

이이 필요한만큼 자주 pdflatex을 반복

.DELETE_ON_ERROR: 

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

간단한 규칙을 메이크. 재실행을 요구하는 모든 다른 LaTeX 메시지에는 로그 파일에 "Rerun to get"이라는 공통 문자열이 포함되어 있으므로 while 루프에서 grep을 사용하여 그 존재를 테스트 할 수 있습니다.

".DELET_ON_ERROR :"설정은 중요합니다. TeX이 오류로 중단 될 때마다 make가 다음 번에 호출 할 때 make를 혼동하지 않도록 pdf/aux/idx 파일이 자동으로 삭제되도록합니다. 나는 출력 형식으로 DVI보다는 PDF를 사용하는 경우

, 나는 동등하게

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

마지막 줄이 즉시 육안 검사에 대한 입력 파일을 다시로드 실행중인 다음 xdvi을 야기 사용합니다.

+0

그레이트 솔루션!첫 번째''pdflatex'에'-interaction nonstopmode'를 추가하여 오류가 발생하면 그냥 종료하고'-interaction batchmode'를 while 루프의 명령에 추가하여 방금 재실행 할 때 많은 양의 출력을 얻지 않도록합니다 . – Max