-# 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 \
- $(SED) -n -e 's/\\\(include\|input\)\(\[[^]]*\]\)\{0,1\}{[^}]*}/&\n/gp' $< | \
- $(SED) -e 's/.*{\([^}]*\)}.*/\1/'))))
-
-# \includegraphicsコマンドで読み込まれるグラフィックファイル
-ingraphics = $(strip $(shell \
- $(SED) -n -e 's/\\includegraphics\(\[[^]]*\]\)\{0,1\}\({[^}]*}\)/&\n/gp' $< $(intex) | \
- $(SED) -e 's/.*{\([^}]*\)}.*/\1/'))
-
-# \bibliographyコマンドで読み込まれる文献データベースファイル
-bibdb = $(addsuffix .bib,$(basename $(strip $(shell \
- $(SED) -n -e 's/\\bibliography\(\[[^]]*\]\)\{0,1\}{\([^}]*\)}/&\n/gp' $< $(intex) | \
- $(SED) -e 's/.*{\([^}]*\)}.*/\1/' | \
- $(SED) -e 's/,/ /g'))))
-
-# texファイルに索引作成の指定があるか確認
-MAKEINDEX := '\makeindex'
-GREP-makeindex = $(GREP) -F $(MAKEINDEX) $<
-
-# 依存関係を自動生成し、dファイルに格納
-%.d: %.tex
- @$(ECHO) '$@ is created by scanning $^.'
- # texファイルの依存関係
- @(($(ECHO) '$(subst .tex,.dvi,$<) $(subst .tex,.aux,$<) $(subst .tex,.d,$<): $<'; \
- $(ECHO); \
- $(ECHO) '$(subst .tex,.prev_aux,$<):') >$@)
- # Include/Inputファイルの依存関係
- $(if $(intex),@( \
+# 画像ファイルの拡張子
+GRAPHICSEXT := .pdf .eps .jpg .jpeg .png .bmp
+
+# make完了後、中間ファイルを残す
+.SECONDARY: $(foreach t,$(TEXTARGETS),$(addprefix $(basename $t),$(ALLINTEXT)))
+
+# ファイル名から拡張子を除いた部分
+BASE = $(basename $<)
+
+######################################################################
+# .dファイルの生成と読み込み
+# .dファイルには、LaTeX処理での依存関係が記述される
+######################################################################
+
+# .flsファイルから、INPUTファイルを取得。ただし、$TEXMFDISTのファイルを除く
+# 取得は、1回のmake実行につき1回だけ行われる
+INPUTFILES = $(INPUTFILESre)
+
+INPUTFILESre = $(eval INPUTFILES := \
+ $(sort $(filter-out $(BASE).tex $(BASE).aux, $(shell \
+ $(SED) -n -e 's/^INPUT \(.\{1,\}\)/\1/p' $(BASE).fls | \
+ $(GREP) -v `$(KPSEWHICH) -expand-var '$$TEXMFROOT'` \
+ ))))
+
+# .flsファイルから、OUTPUTファイルを取得。ただし、$TEXMFDISTのファイルを除く
+# 取得は、1回のmake実行につき1回だけ行われる
+OUTPUTFILES = $(OUTFILESre)
+
+OUTFILESre = $(eval OUTPUTFILES := \
+ $(sort $(filter-out $(BASE).aux $(BASE).dvi $(BASE).log,$(shell \
+ $(SED) -n -e 's/^OUTPUT \(.\{1,\}\)/\1/p' $(BASE).fls | \
+ $(GREP) -v `$(KPSEWHICH) -expand-var '$$TEXMFROOT'` \
+ ))))
+
+# $(BASE).texで読み込まれる中間ファイルを.flsから取得する
+# .idxは、.indへ置換
+LATEXINTFILES = \
+ $(sort $(subst .idx,.ind, \
+ $(filter $(addprefix $(BASE),$(LATEXINTEXT)),$(INPUTFILES) $(OUTPUTFILES)) \
+ ))
+
+LATEXINTFILES_PREV = $(addsuffix _prev,$(LATEXINTFILES))
+
+# \includeや\inputで読み込まれるTeXファイルを.flsから取得する
+TEXFILES = $(filter %.tex,$(INPUTFILES))
+
+# \includegraphicsで読み込まれる画像ファイルを$(BASE).texと$(TEXFILES)、および.flsファイルから取得する
+GRAPHICFILES = $(GRAPHICFILESre)
+
+GRAPHICFILESre = $(eval GRAPHICFILES := \
+ $(sort \
+ $(shell \
+ $(SED) -e '/^\s*%/d' -e 's/\([^\]\)\s*%.*/\1/g' $(BASE).tex $(TEXFILES) | \
+ $(SED) -e '/\\begin{verbatim}/,/\\end{verbatim}/d' -e 's/\\verb|[^|]*|//g' | \
+ $(SED) -e 's/}/}%/g' | $(SED) -e 'y/}%/}\n/' | \
+ $(SED) -n -e 's/.*\\includegraphics\(\[[^]]*\]\)\{0,1\}{\([^}]*\)}$$/\2/pg' \
+ ) \
+ $(filter $(addprefix %,$(GRAPHICSEXT)),$(INPUTFILES)) \
+ ))
+
+# .flsから取得した、そのほかの読み込みファイル(.styなど)
+OTHERFILES = $(sort $(filter-out %.aux $(LATEXINTFILES) $(TEXFILES) $(GRAPHICFILES),$(INPUTFILES)))
+
+# \bibliography命令で読み込まれる文献データベースファイルをTeXファイルから検索する
+BIBDB = $(BIBDBre)
+
+BIBDBre = $(eval BIBDB := \
+ $(addsuffix .bib,$(basename $(sort $(shell \
+ $(SED) -e '/^\s*%/d' -e 's/\([^\]\)\s*%.*/\1/g' $(BASE).tex $(TEXFILES) | \
+ $(SED) -e '/\\begin{verbatim}/,/\\end{verbatim}/d' -e 's/\\verb|[^|]*|//g' | \
+ $(SED) -e 's/}/}%/g' | $(SED) -e 'y/}%/}\n/' | \
+ $(SED) -n -e 's/.*\\bibliography\(\[[^]]*\]\)\{0,1\}{\([^}]*\)}$$/\2/pg' | \
+ $(SED) -e 's/,/ /g' \
+ )))))
+
+# 依存関係を.dファイルに書き出す
+%.d: %.fls
+ # Makefile変数の展開
+ @$(foreach i,0 1,$(ECHO) "Makefiles variable -- LATEXINTFILES=$(LATEXINTFILES) TEXFILES=$(TEXFILES) GRAPHICFILES=$(GRAPHICFILES) BIBDB=$(BIBDB)" $(if $(filter 0,$i),>/dev/null);)
+ # .dファイルの依存関係
+ @$(ECHO) '$(BASE).d: $(BASE).tex $(BASE).fls' >$@
+ # 中間ファイルの依存関係
+ $(if $(sort $(LATEXINTFILES) $(BIBDB)),@( \
+ $(ECHO); \
+ $(ECHO) '# LaTeX Intermediate Files'; \
+ $(ECHO) '#'; \
+ $(ECHO) '# $$(COMPILE.tex) := $(LATEXCMD)'; \
+ $(ECHO) '# $$(COMPILES.tex) := $(subst $(COMPILE.tex),$(LATEXCMD),$(COMPILES.tex))'; \
+ $(ECHO) '#'; \
+ $(ECHO) '$(BASE).dvi:: $(sort $(LATEXINTFILES_PREV) $(if $(BIBDB),$(BASE).bbl_prev))'; \
+ $(ECHO) ' @$$(COMPILE.tex)'; \