- 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),@( \
+ for i in `$(SEQ) 1 $(CNT)`; do $(GREP) -F "$(WARN_UNDEFREF)" $(BASE).log && $(COMPILE.tex) || (test $$? -eq 1 && exit 0 || exit $$?); done
+
+# DVI -> PDF
+# 出力結果は.logファイルへ出力
+DVIPDFCMD = $(DVIPDFMX) $(DVIPDFMXFLAG) $(BASE).dvi
+COMPILE.dvi = \
+ $(ECHO) $(DVIPDFCMD); $(DVIPDFCMD) >>$(BASE).log 2>&1 || \
+ ($(SED) -n -e '/^Output written on toc_hyperref.dvi/,$$p' $(BASE).log; exit 1)
+
+######################################################################
+# .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' | \
+ $(SED) -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' | \
+ $(SED) -e 's/}/}%/g' | $(SED) -e 'y/}%/}\n/' | \
+ $(SED) -n -e 's/.*\\bibliography\(\[[^]]*\]\)\{0,1\}{\([^}]*\)}$$/\2/pg' | \
+ $(SED) -e 's/,/ /g' \
+ )))))
+
+# .flsファイル作成用の一時ディレクトリー
+FLSDIR := .fls.temp
+
+# $(BASE).flsファイルの作成
+FLSCMD = $(LATEX) -interaction=nonstopmode -recorder -output-directory=$(FLSDIR) $(BASE).tex
+
+GENERETE.fls = \
+ test ! -e $(FLSDIR) && $(MKDIR) $(FLSDIR); \
+ $(FLSCMD) 1>/dev/null 2>&1; \
+ $(SED) -e 's|$(FLSDIR)/||g' $(FLSDIR)/$(BASE).fls >$(BASE).fls; \
+ test -e $(BASE).fls && \
+ ($(ECHO) '$(BASE).fls is generated.'; $(RM) -r $(FLSDIR)) || \
+ ($(ECHO) '$(BASE).fls is not generated.' 1>&2; exit 1)
+
+# 依存関係を.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)'; \