diff --git a/Makefile b/Makefile index 9ade7625..7911f80c 100644 --- a/Makefile +++ b/Makefile @@ -1,7 +1,9 @@ # Makefile for ThuThesis -# Compiling method: xelatex/pdflatex/dvipdfmx -METHOD = xelatex +# Compiling method: latexmk/xelatex/pdflatex/dvipdfmx +METHOD = latexmk +# Set opts for latexmk if you use it +LATEXMKOPTS = -xelatex # Basename of thesis THESISMAIN = main # Basename of shuji @@ -65,6 +67,11 @@ $(PACKAGE).pdf: $(CLSFILES) pdflatex $(PACKAGE).dtx pdflatex $(PACKAGE).dtx +else ifeq ($(METHOD),latexmk) + +$(PACKAGE).pdf: $(CLSFILES) + latexmk $(LATEXMKOPTS) $(PACKAGE).dtx + else $(PACKAGE).dvi: $(CLSFILES) @@ -106,6 +113,11 @@ $(THESISMAIN).bbl: $(BIBFILE) -bibtex $(THESISMAIN) $(RM) $(THESISMAIN).pdf +else ifeq ($(METHOD),latexmk) + +$(THESISMAIN).pdf: $(CLSFILES) + latexmk $(LATEXMKOPTS) $(THESISMAIN) + else $(THESISMAIN).pdf: $(THESISMAIN).dvi @@ -135,6 +147,11 @@ else ifeq ($(METHOD),pdflatex) $(SHUJIMAIN).pdf: $(CLSFILES) $(SHUJICONTENTS) pdflatex $(SHUJIMAIN).tex +else ifeq ($(METHOD),latexmk) + +$(SHUJIMAIN).pdf: $(CLSFILES) + latexmk $(LATEXMKOPTS) $(SHUJIMAIN) + else $(SHUJIMAIN).dvi: $(CLSFILES) $(SHUJICONTENTS) @@ -146,34 +163,16 @@ $(SHUJIMAIN).pdf: $(SHUJIMAIN).dvi endif -clean: - -@$(RM) \ - *~ \ - *.aux \ - *.bak \ - *.bbl \ - *.blg \ - *.dvi \ - *.glo \ - *.gls \ - *.idx \ - *.ilg \ - *.ind \ - *.ist \ - *.log \ - *.out \ - *.ps \ - *.thm \ - *.toc \ - *.lof \ - *.lot \ - *.loe \ - data$(SLASH)*.aux \ - dtx-style.sty - -distclean: clean +clean: + latexmk -c $(PACKAGE).dtx $(THESISMAIN) $(SHUJIMAIN) + -@$(RM) $(PACKAGE).dvi $(THESISMAIN).dvi $(SHUJIMAIN).dvi + -@$(RM) *~ + +cleanall: clean + -@$(RM) $(PACKAGE).pdf $(THESISMAIN).pdf $(SHUJIMAIN).pdf + +distclean: cleanall -@$(RM) $(CLSFILES) - -@$(RM) $(PACKAGE).pdf $(THESISMAIN).pdf $(SHUJI).pdf -@$(RM) -r dist dist: diff --git a/README.md b/README.md index 2ef45b76..ee7b23f5 100644 --- a/README.md +++ b/README.md @@ -38,7 +38,7 @@ ThuThesis为 Tsinghua University Thesis LaTeX Templa # Makefile的用法 make [{all|thesis|shuji|doc|clean|distclean}] \ - [METHOD={xelatex|pdflatex|dvipdfmx}] \ + [METHOD={latexmk|xelatex|pdflatex|dvipdfmx}] \ [TEXI2DVI=] ## 目标 @@ -48,10 +48,12 @@ ThuThesis为 Tsinghua University Thesis LaTeX Templa * `make shuji` 生成书脊 shuji.pdf; * `make doc` 生成使用说明书 thuthesis.pdf; * `make clean` 删除 pdf 外的所有中间文件和目标文件; -* `make distclean` 表示清除包括 pdf 在内的所有中间文件和目标文件。 +* `make cleanall` 删除包括 pdf 在内的所有中间文件和目标文件; +* `make distclean` 表示清除包括 cls 在内的所有中间文件和目标文件。 ## 参数 * **METHOD**:指定生成 pdf 的方式,缺省采用 xelatex。 + * METHOD=latexmk 表示使用 latexmk 的方式生成 pdf。 * METHOD=xelatex 表示使用 xelatex 引擎编译生成 pdf; * METHOD=pdflatex 表示使用 pdflatex 引擎编译生成 pdf; * METHOD=dvipdfmx 表示使用 texi2dvi -> dvipdfmx 的方式生成 pdf。 @@ -60,4 +62,3 @@ ThuThesis为 Tsinghua University Thesis LaTeX Templa `texi2dvi`,譬如 CTeX 下的这个工具就叫 `texify`。遇到这种情况可以在命令 行通过 `TEXI2DVI=texify` 命令指定使用其它的 `texi2dvi` 工具。 - diff --git a/latexmkrc b/latexmkrc new file mode 100644 index 00000000..27af65da --- /dev/null +++ b/latexmkrc @@ -0,0 +1,7 @@ +# vim: set ft=perl: +$clean_ext = 'thm glo gls bbl'; +$makeindex = 'makeindex -s gind.ist %O -o %D %S'; +add_cus_dep('glo', 'gls', 0, 'makeglo2gls'); +sub makeglo2gls { + system("makeindex -s gglo.ist -o \"$_[0].gls\" \"$_[0].glo\""); +} diff --git a/thuthesis.dtx b/thuthesis.dtx index 6d1523f6..2e576df9 100644 --- a/thuthesis.dtx +++ b/thuthesis.dtx @@ -231,6 +231,7 @@ % figures/ & 示例文档图片路径\\ % thutils.sty & 为示例文档加载其它宏包\\\hline % Makefile & self-explanation\\ +% latexmkrc & latexmk 配置文件 \\ % zhfonts.py & 生成中文字体配置文件\\ % README.md & self-explanation\\ % \textbf{thuthesis.pdf} & 用户手册(本文档)\\\hline @@ -292,7 +293,6 @@ % $ xelatex thuthesis.dtx % 生成说明文档 thuthesis.pdf % \end{shell} % -% % \subsubsection{xelatex} % \label{sec:xelatex} % 很多用户对 \LaTeX{} 命令执行的次数不太清楚,一个基本的原则是多次运行 \LaTeX{}命 @@ -339,12 +339,21 @@ % 成 PDF。不过 PDF\LaTeX\ 增加了对 png,jpg 等标量图形的支持,比较方便。 % TeX Live 自从 2010 版本起自动调用 epstopdf 将 EPS 图形转化为 PDF。 % +% \subsubsection{latexmk} +% \label{sec:latexmk} +% \texttt{latexmk} 命令支持全自动生成 \LaTeX{} 编写的文档,并且支持使用不同的工具 +% 链来进行生成,它会自动运行多次工具直到交叉引用都被解决。下面给出了一个用 +% \texttt{latexmk} 调用 \texttt{xelatex} 生成最终文档的示例: +% \begin{shell} +% # 一句话就够了! +% $ latexmk -xelatex main +% \end{shell} +% % \subsubsection{自动化过程} % \label{sec:automation} % 上面的例子只是给出一般情况下的使用方法。虽然命令很简单,但是每次都输入的话还是 -% 非常罗嗦的,所以 \thuthesis{} 还提供了一些自动处理的文件。 +% 非常罗嗦的,所以 \thuthesis{} 还提供了一个简单的 \file{Makefile}: % -% 我们提供了一个简单的 \file{Makefile}: % \begin{shell} % $ make clean % $ make cls # 生成 thuthesis.cls 和 thuthesis.cfg @@ -353,9 +362,11 @@ % $ make shuji # 生成书脊 shuji.pdf % \end{shell} % -% \file{Makefile} 默认采用 Xe\LaTeX\ 编译,可以根据自己的需要修 -% 改 \file{Makefile} 开头的参数设置或通过命令行传递参数(请参看 \file{README.md})。 -% +% \thuthesis{} 的 Makefile 默认用 \texttt{latexmk} 调用 +% \texttt{xelatex} 编译,此外还支持采用 \texttt{xelatex}、\texttt{pdflatex} 和 +% \texttt{dvipdfmx} 方式编译,如有需要可以修 +% 改 \file{Makefile} 开头的参数设置或通过命令行传递参数(请参看 \file{README.md}), +% 进一步还可以修改 \file{latexmkrc} 进行定制。 % % \subsection{升级} % \label{sec:updgrade}