5 # 1. texソースファイルと同じディレクトリーに本ファイル(latex.mk)をコピーする
6 # 2. Makefileに変数TARGETS と「include latex.mk」を記述する
7 # 3. texソースファイルと同じディレクトリーで、make コマンドを実行する
10 # - 読み込むべき中間ファイルがないことや相互参照未定義の警告がある場合、LaTeX処理を最大4回繰り返す
11 # - \includegraphics命令がTeXファイルに含まれる場合、グラフィックファイルを挿入
12 # -- 挿入されたグラフィックファイルが更新されたときは、処理を開始
13 # -- 挿入されたグラフィックファイルがないときは、処理を中止
14 # -- 挿入されたグラフィックファイルに対するバウンディング情報ファイル(.xbb)を作成
15 # - \include、\input命令がTeXファイルに含まれる場合、TeXファイルを挿入
16 # -- 挿入されたTeXファイルが更新されたときは、処理を開始
17 # -- 挿入されたTeXファイルがないときは、処理を中止
18 # - \makeindex命令が含まれる場合、mendexで索引を作成
19 # - \bibliography命令が含まれる場合、BiBTeXで文献一覧を作成
22 # - tex-clean: TeX中間ファイル(auxなど)を削除。ターゲットに.dviが含まれていないときは.dviファイルを削除
23 # - xbb-clean: バウンディング情報ファイル(.xbb)を削除
24 # - tex-distclean: TeX中間ファイル、バウンディング情報ファイル、ターゲットファイル(PDF、.dvi)を削除
26 # === Makefile -- sample ===
27 # TARGETS := report.tex
33 .PHONY: tex-clean tex-distclean
46 EXTRACTBB := extractbb
52 # .fls: tex -recorderで生成されるファイルリスト
53 # .lof: 図リスト(\tableoffigures)用
54 # .lot: 表リスト(\tableoftables)用
55 # .out: hyperrefパッケージ用
56 # .toc: 目次(\tableofcontents)用
58 TEX_INT := .aux .fls .lof .lot .out .toc .log
64 IND_INT := .idx .ind .ilg
72 FILEBASE = $(basename $<)
74 TEXFILE = $(addsuffix .tex,$(FILEBASE))
76 AUXFILE = $(addsuffix .aux,$(FILEBASE))
77 # .prev_auxファイル。.auxファイルのコピー
78 PREV_AUXFILE = $(addsuffix .prev_aux,$(FILEBASE))
80 DVIFILE = $(addsuffix .dvi,$(FILEBASE))
82 DFILE = $(addsuffix .d,$(FILEBASE))
84 LOGFILE = $(addsuffix .log,$(FILEBASE))
86 IDXFILE = $(addsuffix .idx,$(FILEBASE))
87 # .prev_idxファイル。.idxファイルのコピー
88 PREV_IDXFILE = $(addsuffix .prev_idx,$(FILEBASE))
90 INDFILE = $(addsuffix .ind,$(FILEBASE))
92 BBLFILE = $(addsuffix .bbl,$(FILEBASE))
102 COMPILE.tex = $(LATEX) -interaction=batchmode $(LATEXFLAG) $(TEXFILE) || $(CAT) $(LOGFILE)
105 WARN_UNDEFREF := 'There were undefined references\.'
107 # 読み込むべき中間ファイルがないことの警告
108 WARN_NOFILE = 'No file $(FILEBASE)\.[a-zA-Z0-9]*\.'
110 # ログファイルに警告がある場合、LaTeX処理を最大4回繰り返す
112 if test -s $(INDFILE); then \
113 $(ECHO) "---------- for index ----------"; \
116 for f in 1st 2nd 3rd final; do \
117 if test -s $@ -a -s $(LOGFILE); then \
118 $(GREP) -e $(WARN_UNDEFREF) -e $(WARN_NOFILE) $(LOGFILE) || exit 0; \
120 $(ECHO) "---------- $$f try ----------"; \
124 # \includegraphics命令で読み込まれるグラフィックファイル
125 ingraphics = $(strip $(shell \
126 $(SED) -n -e '/^%/!s/\\includegraphics\(\[[^]]*\]\)\{0,1\}\({[^}]*}\)/&\n/gp' $< $(intex) | \
127 $(SED) -e 's/.*{\([^}]*\)}.*/\1/'))
129 # \include、\input命令で読み込まれるtexファイル
130 intex = $(addsuffix .tex,$(basename $(strip $(shell \
131 $(SED) -n -e '/^%/!s/\\\(include\|input\)\(\[[^]]*\]\)\{0,1\}{[^}]*}/&\n/gp' $< | \
132 $(SED) -e 's/.*{\([^}]*\)}.*/\1/'))))
135 makeindex = $(SED) -n -e '/^%/!s/\\makeindex/&/p' $<
137 # \bibliography命令で読み込まれる文献データベースファイル
138 bibdb = $(addsuffix .bib,$(basename $(strip $(shell \
139 $(SED) -n -e '/^%/!s/\\bibliography\(\[[^]]*\]\)\{0,1\}{\([^}]*\)}/&\n/gp' $< $(intex) | \
140 $(SED) -e 's/.*{\([^}]*\)}.*/\1/' | \
141 $(SED) -e 's/,/ /g'))))
145 @$(ECHO) '$@ is created by scanning $^.'
147 @($(ECHO) '$(AUXFILE) $(DFILE): $<'; \
149 $(ECHO) '$(DVIFILE): $(AUXFILE)') >$@
151 $(if $(ingraphics),@( \
153 $(ECHO) '# IncludeGraphic Files - .pdf, .jpeg/.jpg, .png with .xbb'; \
154 $(ECHO) '$(DVIFILE) $(AUXFILE): $(ingraphics)'; \
156 $(ECHO) '$(DVIFILE) $(AUXFILE): $(addsuffix .xbb,$(basename $(ingraphics)))') >>$@)
157 # Include/Inputファイルの依存関係
160 $(ECHO) '# Include / Input Files - .tex'; \
161 $(ECHO) '$(DVIFILE) $(AUXFILE): $(intex)') >>$@)
163 $(if $(makeindex),@( \
165 $(ECHO) '# Index Files: .aux -> idx -> .ind -> .dvi'; \
166 $(ECHO) '$(IDXFILE): $<'; \
168 $(ECHO) '$(PREV_IDXFILE): $(IDXFILE)'; \
170 $(ECHO) '$(INDFILE): $(PREV_IDXFILE)'; \
172 $(ECHO) '$(DVIFILE): $(INDFILE)') >>$@)
176 $(ECHO) '# Bibliography Files - .bbl, .bib'; \
177 $(ECHO) '$(PREV_AUXFILE): $(AUXFILE)'; \
179 $(ECHO) '$(DVIFILE): $(BBLFILE)'; \
181 $(ECHO) '$(BBLFILE): $(bibdb)') >>$@)
183 # 変数TARGETSで指定されたターゲットファイルに対応する
184 # .dファイルをインクルードし、依存関係を取得する
185 # ターゲットに %clean、%.xbb、%.d が含まれている場合は除く
186 ifeq (,$(filter %clean %.xbb %.d,$(MAKECMDGOALS)))
187 -include $(addsuffix .d,$(basename $(TARGETS)))
199 -$(CMP) $@ $< || $(CP) $< $@
203 $(DVIPDFMX) $(DVIPDFMXFLAG) $<
206 # pdf、jpeg/jpg、pngファイルに対応
208 $(EXTRACTBB) $(EXTRACTBBFLAGS) $<
211 $(EXTRACTBB) $(EXTRACTBBFLAGS) $<
214 $(EXTRACTBB) $(EXTRACTBBFLAGS) $<
217 $(EXTRACTBB) $(EXTRACTBBFLAGS) $<
224 -$(CMP) $@ $< || $(CP) $< $@
227 $(MENDEX) $(MENDEXFLAG) $(IDXFILE)
231 $(BIBTEX) $(BIBTEXFLAG) $(AUXFILE)
235 $(RM) $(addprefix *,$(TEX_INT) $(IND_INT) $(BIB_INT) .d .prev_aux .prev_idx)
236 ifeq (,$(filter %.dvi,$(TARGETS)))
245 tex-distclean: tex-clean xbb-clean
246 ifneq (,$(filter %.dvi,$(TARGETS)))