8

我正在尝试简化/改进 Makefile 以编译我的论文。Makefile 可以很好地编译整个东西。我有这样的事情:

show: thesis.pdf
    open thesis.pdf

thesis.pdf: *.tex
    pdflatex --shell-escape thesis

这使我可以键入make并检测到任何更改(如果有),并在显示之前重新编译。

现在我想将它扩展为有条件地只编译个别章节。例如,这使我可以make xpmt通过一种迂回的方式编写仅获得一章的内容:

xpmt: ch-xpmt.pdf
    open ch-xpmt.pdf

ch-xpmt.pdf: xpmt.tex
    pdflatex --shell-escape --jobname=ch-xpmt \
      "\includeonly{xpmt}\input{thesis}"

但我不想为每个单独的章节写下相同的内容。如何以足够通用的方式编写上述规则以避免重复?

(更多的是学习如何编写 Makefiles 而不是解决任何实际问题的练习;显然在这种情况下,复制和粘贴上述代码足够多次实际上是微不足道的!)

4

3 回答 3

8

如果您有命名的章节xpmt(猜想那是“实验”?)并且,比如说thry,,,,anlsconc其他:

xmpt thry anls conc: %: ch-%.pdf
    open $<

ch-%.pdf: %.tex
    pdflatex --shell-escape --jobname=ch-$* "\includeonly{$*}\input{thesis}"

或者用 make 变量以“正确”的方式来做,我认为它会是这样的:

chapters = xmpt thry anls conc
main = thesis
.PHONY: $(chapters) show

show: $(main).pdf
    open $<

$(main).pdf: $(main).tex $(addsuffix .tex,$(chapters))
    pdflatex --shell-escape $(main)

$(chapters): %: ch-%.pdf
    open $<

ch-%.pdf: %.tex
    pdflatex --shell-escape --jobname=ch-$* "\includeonly{$*}\input{$(main)}"
于 2009-03-12T03:15:21.213 回答
2

您应该考虑使用橡胶之类的东西来为您处理 LaTeX 构建。虽然可以使用 make 完成大部分工作,但一个专门的工具可以处理 LaTeX 的复杂性,例如多次重新运行 bibtex 以对所有引用进行排序等。

于 2009-04-06T09:52:00.597 回答
2

请考虑使用latexmk

http://www.phys.psu.edu/~collins/software/latexmk-jcc/

它会确定是否需要运行 pdflatex/latex、bibtex、makeindex 等(以及运行多少次)才能完全编译您的源代码。

latexmk是一个包含在大多数乳胶发行版中的 perl 脚本。您只需要确保在您的系统上安装了 perl。

于 2012-06-07T18:28:32.070 回答