From 1b2a67032cdbbf2206330a898e3a92961a4500ce Mon Sep 17 00:00:00 2001 From: j8takagi Date: Thu, 11 Jul 2013 16:46:30 +0900 Subject: [PATCH] =?utf8?q?LaTeX=E3=81=AEMakefile=E3=81=A7=E3=80=81aux?= =?utf8?q?=E3=83=95=E3=82=A1=E3=82=A4=E3=83=AB=E3=82=84idx=E3=83=95?= =?utf8?q?=E3=82=A1=E3=82=A4=E3=83=AB=E3=81=AE=E5=A4=89=E6=9B=B4=E3=81=8C?= =?utf8?q?=E3=81=AA=E3=81=84=E5=A0=B4=E5=90=88=E3=81=AB=E3=81=AF=E4=B8=8D?= =?utf8?q?=E8=A6=81=E3=81=AA=E4=BD=9C=E6=A5=AD=E3=81=AF=E8=A1=8C=E3=82=8F?= =?utf8?q?=E3=81=AA=E3=81=84=E3=82=88=E3=81=86=E3=81=AB=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit *_prev.auxに*.aux、*_prev.idxに*.idxの以前の内容をそれぞれコピーし、 *_prev.auxや*_prev.idxが更新された場合に必要な作業を行う。 『UNIXプログラミング環境』第8章で紹介された方法 --- latex_mk/latex.mk | 91 ++++++++++++++++++++++++++++++++++------------- 1 file changed, 66 insertions(+), 25 deletions(-) diff --git a/latex_mk/latex.mk b/latex_mk/latex.mk index a0d4028..a63e131 100644 --- a/latex_mk/latex.mk +++ b/latex_mk/latex.mk @@ -1,29 +1,58 @@ .PHONY: clean-tex distclean-tex # シェルコマンド +CMP := cmp -s +CP := cp ECHO := echo GREP := grep SED := sed # LaTeXコマンド -BIBTEX := pbibtex +LATEX := platex DVIPDFMX := dvipdfmx EXTRACTBB := extractbb -LATEX := platex +BIBTEX := pbibtex MENDEX := mendex #LaTeXオプション -BIBTEXFLAG ?= +interaction ?= batchmode +LATEXFLAG ?= DVIPDFMXFLAG ?= EXTRACTBBFLAGS ?= -LATEXFLAG ?= +BIBTEXFLAG ?= MENDEXFLAG ?= -# LaTeXで処理 -COMPILE.tex = $(LATEX) -interaction=batchmode $(LATEXFLAG) $(addsuffix .tex,$(basename $<)) - -# logファイルに未定義参照の警告があるか確認 -REFWARN := 'LaTeX Warning: There were undefined references.' +# LaTeX処理(コンパイル) +COMPILE.tex = $(LATEX) -interaction=$(interaction) $(LATEXFLAG) $(addsuffix .tex,$(basename $<)) + +# 相互参照の警告 +WARN_REF := 'Label(s) may have changed. Rerun to get cross-references right.' + +# 相互参照未定義の警告。2回目以降の処理で出る場合は、参照エラー +WARN_UNDEFREF := 'There were undefined references.' + +# auxやtocなどのファイルがない警告 +WARN_NOFILE := 'No file' + +# LaTeX処理の最大回数 +MAX_CNT := 10 + +# logファイルに相互参照または目次ファイルなしの警告がある場合、LaTeX処理を繰り返す +# 2回目以降の処理で相互参照未定義の警告がある場合と、 +# 繰り返しの回数がMAX_CNTになった場合は、警告を表示してエラー終了 +COMPILES.tex = \ + cnt=0; \ + while $(GREP) -F -e $(WARN_REF) -e $(WARN_NOFILE) $(addsuffix .log,$(basename $<)); do \ + if test $$cnt -ge $(MAX_CNT); then \ + $(ECHO) "LaTeX compile is over $$cnt times, but warnings exist."; \ + exit 1; \ + fi; \ + $(COMPILE.tex); \ + if test $$cnt -eq 1 && $(GREP) -F $(WARN_UNDEFREF) $(addsuffix .log,$(basename $<)); then \ + exit 1; \ + fi; \ + cnt=`expr $$cnt + 1`; \ + done # \includeコマンドで読み込まれるtexファイル intex = $(addsuffix .tex,$(basename $(strip $(shell \ @@ -49,7 +78,9 @@ GREP-makeindex = $(GREP) -F $(MAKEINDEX) $< %.d: %.tex @$(ECHO) '$@ is created by scanning $^.' # texファイルの依存関係 - @($(ECHO) '$(subst .tex,.dvi,$<) $(subst .tex,.aux,$<) $(subst .tex,.d,$<): $<' >$@) + @(($(ECHO) '$(subst .tex,.dvi,$<) $(subst .tex,.aux,$<) $(subst .tex,.d,$<): $<'; \ + $(ECHO); \ + $(ECHO) '$(subst .tex,.prev_aux,$<):') >$@) # Include/Inputファイルの依存関係 $(if $(intex),@( \ $(ECHO); \ @@ -64,16 +95,20 @@ GREP-makeindex = $(GREP) -F $(MAKEINDEX) $< $(ECHO) '$(subst .tex,.dvi,$<) $(subst .tex,.aux,$<): $(addsuffix .xbb,$(basename $(ingraphics)))') >>$@) # 文献処理用ファイルの依存関係 $(if $(bibdb),@( \ - $(ECHO); \ - $(ECHO) '# Bibliography Files - bbl & bib'; \ - $(ECHO) '$(subst .tex,.dvi,$<): $(subst .tex,.bbl,$<)'; \ - $(ECHO); \ - $(ECHO) '$(subst .tex,.bbl,$<): $(bibdb)') >>$@) + $(ECHO); \ + $(ECHO) '# Bibliography Files - bbl & bib'; \ + $(ECHO) '$(subst .tex,.dvi,$<): $(subst .tex,.bbl,$<)'; \ + $(ECHO); \ + $(ECHO) '$(subst .tex,.bbl,$<): $(bibdb)') >>$@) # 索引作成用ファイルの依存関係 $(if $(strip $(shell $(GREP-makeindex))),@( \ - $(ECHO); \ - $(ECHO) '# MakeIndex Files - ind'; \ - $(ECHO) '$(subst .tex,.dvi,$<): $(subst .tex,.ind,$<)') >>$@) + $(ECHO); \ + $(ECHO) '# MakeIndex Files - ind'; \ + $(ECHO) '$(subst .tex,.idx,$<):'; \ + $(ECHO); \ + $(ECHO) '$(subst .tex,.ind,$<):'; \ + $(ECHO); \ + $(ECHO) '$(subst .tex,.dvi,$<): $(subst .tex,.ind,$<)') >>$@) # 変数TARGETSで指定されたターゲットファイルに対応するdファイルをインクルード # .dファイルからヘッダファイルの依存関係を取得する @@ -86,15 +121,17 @@ endif %.aux: %.tex $(COMPILE.tex) +%.prev_aux: %.aux + -$(CMP) $@ $< || $(CP) $< $@ + # dviファイル作成 %.dvi: %.aux - # logファイルに未定義参照の警告がある場合、LaTeXで処理 - while $(GREP) -F $(REFWARN) $(addsuffix .log,$(basename $<)); do $(COMPILE.tex); done + $(COMPILES.tex) # 文献処理用ファイル作成 # BiBTeXで文献処理するときに使用される -%.bbl: %.aux - $(BIBTEX) $(BIBTEXFLAG) $(addsuffix .aux,$(basename $<)) +%.bbl: %.prev_aux + $(BIBTEX) $(BIBTEXFLAG) $(subst .prev_aux,aux,$<) # バウンディング情報ファイル作成 # dvipdfmxで図を挿入するときに使用される @@ -114,9 +151,13 @@ endif # 索引ファイル作成 # 索引を作成するときに使用される %.idx: %.aux + $(COMPILE.tex) + +%.prev_idx: %.idx + -$(CMP) $@ $< || $(CP) $< $@ -%.ind: %.idx - $(MENDEX) $(MENDEXFLAG) $< +%.ind: %.prev_idx + $(MENDEX) $(MENDEXFLAG) $(subst .prev_idx,.idx,$<) # PDFファイル作成 %.pdf: %.dvi @@ -124,7 +165,7 @@ endif # tex-cleanターゲット tex-clean: - $(RM) *.aux *.bbl *.blg *.d *.idx *.ilg *.ind *.lof *.log *.lot *.out *.toc *.xbb + $(RM) *.aux *.bbl *.blg *.idx *.ilg *.ind *.lof *.lot *.out *.toc *.xbb *.log *.d # tex-distcleanターゲット tex-distclean: tex-clean -- 2.18.0