makefile for gnuplot(很多数字)和乳胶整合

时间:2015-11-02 23:48:21

标签: makefile latex gnuplot

问题:如何获取可以检查任意数量的* .eps和* .gp(gnuplot代码)的makefile,并且有一条规则可以从新编辑的*中构建新的* .eps和* .tex文件。 gp文件?

目标: 创建一个Makefile,用于检查自上次编译以来是否有任何章节( .tex),绘图( .eps, .tex)或gnuplot代码( .gp)发生了变化。创建一个通用规则,在编译文档之前执行必要的* .gp代码。

编辑:有关GOAL的更多详细信息:我希望Make能够构建Thesis.pdf,但在此之前执行自上次构建以来已更改的任何foo.gp文件。 .gp文件可能会因为多种原因而更新,包括更改轴标签,图例条目,添加的数据......

背景:我正在撰写论文,并打算使用LaTex和GNUplot。由于数字很多,将一个makefile放在一起是一个很好的调用,如果我的任何gnuplot代码(* .gp)被更改以确保执行必要的代码(并且未更改* .gp代码)在编译乳胶文件之前。我使用epslatex生成* .eps和* .tex文件(与\ input一起使用---不是独立的)。如果从示例代码中不清楚这是我第一次尝试makefile。

编辑:关于GNUplot的更多细节

gnuplot foo.gp生成foo.eps(包括绘图的所有图形部分)和foo.tex(格式化图形并添加所有必要文本的tex文件)。 foo.gp是一个构建绘图的脚本(很像在MatLab中绘图或在python中使用MatPlotLib)。 {\ {1}}文件在乳胶图环境中用作foo.tex。我可能会在100个图片附近,我的顾问无疑会让我编辑到令人作呕的意思,我会反复编辑许多不同的gnuplot脚本。

目录结构:

Root Dir:〜/论文

Latex文件目录:〜/论文/文本(这也是我的makefile目前所在的位置)

Gnuplot代码目录:〜/论文/数字/ gnuplot_codes

Gnuplot输出目录:〜/论文/数字/无花果

到目前为止,这是我的代码:

\intut{foo.tex}

1 个答案:

答案 0 :(得分:2)

我们将从现有gp文件列表开始:

CODES=$(wildcard ../figures/gnuplot_codes/*.gp)

到目前为止,这么好。此列表告诉我们存在哪些gp文件,因此可以构建哪些eps和tex文件。 (我们不关心哪些已存在。)

EPSES=$(patsubst ../figures/gnuplot_codes/%.gp,../figures/figs/%.eps, $(CODES))
FIGTEX=$(patsubst ../figures/gnuplot_codes/%.gp,../figures/figs/%.tex, $(CODES))

现在规则运行gnuplot并生成这些文件。这个版本有问题:

$(EPSES) $(FIGTEX):   $(CODES)
    gnuplot $(CODES)

所有 gp文件每个 eps和tex文件的先决条件;更改一个gp文件,你必须重建一切。所以摆脱它并用pattern rule替换它:

../figures/figs/%.eps ../figures/figs/%.tex: ../figures/gnuplot_codes/%.gp
    gnuplot $<

(我不知道gnuplot如何知道放置输出文件的位置;你没有指定,所以我假设你已经解决了这个问题。如果你遇到麻烦,我会很乐意提供帮助。)

现在适用于Thesis.pdf规则:

# compiles the latex document using latexmk
$(PAPER).pdf: $(PAPER).tex $(EPSES) $(FIGTEX)
    latexmk -latex="latex -interaction=nonstopmode" -use-make $<
    dvips $(PAPER).dvi -Ppdf
    ps2pdf $(PAPER).ps

我删除了先决条件$(CODES),因为它似乎是多余的。配方可能会得到改进(并推广用于生成其他pdf文件),但嘿,如果没有破坏...

最后运行show的规则(如果你想让它成为默认设置,应该首先出现):

all: $(EPSES) $(FIGTEX) $(CODES) $(PAPER).pdf
    evince $(PAPER).pdf

除非evince实际使用 gp,eps和tex文件,否则我们可以不用这些先决条件:

all: $(PAPER).pdf
    evince $<

尽一切努力。