RのMakefileを修正
[makefiles.git] / latex_mk / latex.mk
1 .PHONY: clean-tex distclean-tex
2
3 # シェルコマンド
4 ECHO := echo
5 GREP := grep
6 SED := sed
7
8 # LaTeXコマンド
9 BIBTEX := pbibtex
10 DVIPDFMX := dvipdfmx
11 EXTRACTBB := extractbb
12 LATEX := platex
13 MENDEX := mendex
14
15 #LaTeXオプション
16 BIBTEXFLAG ?=
17 DVIPDFMXFLAG ?=
18 EXTRACTBBFLAGS ?=
19 LATEXFLAG ?=
20 MENDEXFLAG ?=
21
22 # LaTeXで処理
23 COMPILE.tex = $(LATEX) -interaction=batchmode $(LATEXFLAG) $(addsuffix .tex,$(basename $<))
24
25 # logファイルに未定義参照の警告があるか確認
26 REFWARN := 'LaTeX Warning: There were undefined references.'
27
28 # \includeコマンドで読み込まれるtexファイル
29 intex = $(addsuffix .tex,$(basename $(strip $(shell \
30   $(SED) -n -e 's/\\\(include\|input\)\(\[[^]]*\]\)\{0,1\}{[^}]*}/&\n/gp' $<  | \
31   $(SED) -e 's/.*{\([^}]*\)}.*/\1/'))))
32
33 # \includegraphicsコマンドで読み込まれるグラフィックファイル
34 ingraphics = $(strip $(shell \
35   $(SED) -n -e 's/\\includegraphics\(\[[^]]*\]\)\{0,1\}\({[^}]*}\)/&\n/gp' $< $(intex) | \
36   $(SED) -e 's/.*{\([^}]*\)}.*/\1/'))
37
38 # \bibliographyコマンドで読み込まれる文献データベースファイル
39 bibdb = $(addsuffix .bib,$(basename $(strip $(shell \
40   $(SED) -n -e 's/\\bibliography\(\[[^]]*\]\)\{0,1\}{\([^}]*\)}/&\n/gp' $< $(intex) | \
41   $(SED) -e 's/.*{\([^}]*\)}.*/\1/' | \
42   $(SED) -e 's/,/ /g'))))
43
44 # texファイルに索引作成の指定があるか確認
45 MAKEINDEX := '\makeindex'
46 GREP-makeindex = $(GREP) -F $(MAKEINDEX) $<
47
48 # 依存関係を自動生成し、dファイルに格納
49 %.d: %.tex
50         @$(ECHO) '$@ is created by scanning $^.'
51   # texファイルの依存関係
52         @($(ECHO) '$(subst .tex,.dvi,$<) $(subst .tex,.aux,$<) $(subst .tex,.d,$<): $<' >$@)
53   # texファイルの依存関係
54         $(if $(intex),@( \
55       $(ECHO); \
56       $(ECHO) '# Include/Input Files - tex'; \
57       $(ECHO) '$(subst .tex,.dvi,$<) $(subst .tex,.aux,$<): $(intex)') >>$@)
58   # 画像ファイルの依存関係
59         $(if $(ingraphics),@( \
60       $(ECHO); \
61       $(ECHO) '# IncludeGraphic Files - pdf, jpeg/jpg, png & xbb'; \
62       $(ECHO) '$(subst .tex,.dvi,$<) $(subst .tex,.aux,$<): $(ingraphics)'; \
63       $(ECHO); \
64       $(ECHO) '$(subst .tex,.dvi,$<) $(subst .tex,.aux,$<): $(addsuffix .xbb,$(basename $(ingraphics)))') >>$@)
65   # 文献処理用ファイルの依存関係
66         $(if $(bibdb),@( \
67       $(ECHO); \
68       $(ECHO) '# Bibliography Files - bbl & bib'; \
69       $(ECHO) '$(subst .tex,.dvi,$<): $(subst .tex,.bbl,$<)'; \
70       $(ECHO); \
71       $(ECHO) '$(subst .tex,.bbl,$<): $(bibdb)') >>$@)
72   # 索引作成用ファイルの依存関係
73         $(if $(strip $(shell $(GREP-makeindex))),@( \
74       $(ECHO); \
75       $(ECHO) '# MakeIndex Files - ind'; \
76       $(ECHO) '$(subst .tex,.dvi,$<): $(subst .tex,.ind,$<)') >>$@)
77
78 # 変数TARGETSで指定されたターゲットファイルに対応するdファイルをインクルード
79 ifdef TARGETS
80   -include $(addsuffix .d,$(basename $(TARGETS)))
81 endif
82
83 # 相互参照ファイル作成。dviファイルも同時に作成される
84 %.aux: %.tex
85         $(COMPILE.tex)
86
87 # dviファイル作成
88 %.dvi: %.aux
89   # logファイルに未定義参照の警告がある場合、LaTeXで処理
90         while $(GREP) -F $(REFWARN) $(addsuffix .log,$(basename $<)); do $(COMPILE.tex); done
91
92 # 文献処理用ファイル作成
93 # BiBTeXで文献処理するときに使用される
94 %.bbl: %.aux
95         $(BIBTEX) $(BIBTEXFLAG) $(addsuffix .aux,$(basename $<))
96
97 # バウンディング情報ファイル作成
98 # dvipdfmxで図を挿入するときに使用される
99 # pdf、jpeg/jpg、pngファイルに対応
100 %.xbb: %.pdf
101         $(EXTRACTBB) $(EXTRACTBBFLAGS) $<
102
103 %.xbb: %.jpeg
104         $(EXTRACTBB) $(EXTRACTBBFLAGS) $<
105
106 %.xbb: %.jpg
107         $(EXTRACTBB) $(EXTRACTBBFLAGS) $<
108
109 %.xbb: %.png
110         $(EXTRACTBB) $(EXTRACTBBFLAGS) $<
111
112 # 索引ファイル作成
113 # 索引を作成するときに使用される
114 %.idx: %.aux
115
116 %.ind: %.idx
117         $(MENDEX) $(MENDEXFLAG) $<
118
119 # PDFファイル作成
120 %.pdf: %.dvi
121         $(DVIPDFMX) $(DVIPDFMXFLAG) $<
122
123 # tex-cleanターゲット
124 tex-clean:
125         $(RM) *.aux *.bbl *.blg *.d *.idx *.ilg *.ind *.lof *.log *.lot *.out *.toc *.xbb
126
127 # tex-distcleanターゲット
128 tex-distclean: tex-clean
129         $(RM) $(addsuffix .dvi,$(basename $(TARGETS))) $(addsuffix .pdf,$(basename $(TARGETS)))