+######################################################################
+# dviおよびPDFファイルを生成するパターンルール
+# TeX -> dvi -> PDF
+######################################################################
+
+# LaTeX処理(コンパイル)
+LATEXCMD = $(LATEX) -interaction=batchmode $(LATEXFLAG) $(BASE).tex
+
+# エラー発生時、ログのエラー部分を行頭に「<TeXファイル名>:<行番号>:」を付けて表示する
+COMPILE.tex = \
+ $(ECHO) $(LATEXCMD); $(LATEXCMD) >/dev/null 2>&1 || \
+ ( \
+ $(SED) -n -e '/^!/,/^$$/p' $(BASE).log | \
+ $(SED) -e 's/.*\s*l\.\([0-9]*\)\s*.*/$(BASE).tex:\1: &/' 1>&2; \
+ exit 1)
+
+# 相互参照未定義の警告
+WARN_UNDEFREF := There were undefined references.
+
+# LaTeX処理
+# ログファイルに警告がある場合は警告がなくなるまで、最大CNTで指定された回数分、処理を実行する
+CNT := 3
+CNTMSG := $(LATEX) is run $(CNT) times, but there are still undefined references.
+
+EXITNOWARN = \
+ if test $$? -eq 1; then \
+ exit 0; \
+ else \
+ exit $$?; \
+ fi
+
+EXITWARN = \
+ $(ECHO) "$(CNTMSG)" 1>&2; \
+ $(SED) -n -e "/^LaTeX Warning:/,/^$$/p" $(BASE).log | \
+ $(SED) -e "s/.*\s*line \([0-9]*\)\s*.*/$(BASE).tex:\1: &/" 1>&2; \
+ exit 1
+
+COMPILES.tex = \
+ for i in `$(SEQ) 0 $(CNT)`; do \
+ if test $$i -lt $(CNT); then \
+ if $(GREP) -F "$(WARN_UNDEFREF)" $(BASE).log; then \
+ $(COMPILE.tex); \
+ else \
+ $(EXITNOWARN); \
+ fi; \
+ else \
+ $(EXITWARN); \
+ fi; \
+ 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)
+
+# TeX -> aux