目标
我正在尝试使用Make文件来自动生成面板图形。数据和图形是从Rscripts生成的,随后使用乳胶进行组合以生成PDF。
问题描述
比方说,我想生成一个由4个子图组成的面板图,它以2x2网格排列。通过使用以下make文件,我能够生成数据以及子图:
all : data/plot1.txt plots/plot1.pdf \
data/plot2.txt plots/plot2.pdf \
data/plot3.txt plots/plot3.pdf \
data/plot4.txt plots/plot4.pdf \
plots/figure_5.pdf
#Panel Figure#
#Plot 1
data/plot1.txt : scripts/plot1_sim.R
Rscript scripts/plot1_sim.R $@
plots/plot1.pdf : scripts/plot1_sim.R data/plot1.txt
Rscript scripts/plot1.R $@
#Plot 2
data/plot2.txt : scripts/plot2_sim.R
Rscript scripts/plot2_sim.R $@
plots/plot2.pdf : scripts/plot2_sim.R data/plot2.txt
Rscript scripts/plot2.R $@
#Plot 3
data/plot3.txt : scripts/plot3_sim.R
Rscript scripts/plot3_sim.R $@
plots/plot3.pdf : scripts/plot3_sim.R data/plot3.txt
Rscript scripts/plot3.R $@
#Plot 4
data/plot4.txt : scripts/plot4_sim.R
Rscript scripts/plot4_sim.R $@
plots/plot4.pdf : scripts/plot4_sim.R data/plot4.txt
Rscript scripts/plot4.R $@
使用乳胶文件,例如figure.tex
我可以根据需要编译面板图。
但是,现在我想通过乳胶将最终PDF的构造添加到make文件中。该文件当然取决于plots/plot1.pdf
,直至plots/plot4.pdf
为止。
我将其添加到如下代码中:
plots/figure.pdf : scripts/figure.tex plots/plot1.pdf plots/plot2.pdf plots/plot3.pdf plots/plot4.pdf
pdflatex scripts/figure.tex
有四个子图可以这样做(但也许很丑),但是如果您生成带有例如16个子图,代码变得不可读。
问题
有没有更好的方法来包含较大的依赖项列表,在这种情况下,可以使用make和乳胶生成面板图形?
答案 0 :(得分:1)
据我了解,您可能可以通过以下方式将所有这些因素分解:
SIMRS := $(wildcard scripts/plot*_sim.R)
PLOTS := $(patsubst scripts/plot%_sim.R,%,$(SIMRS))
PDFPLOTS := $(patsubst %,plots/plot%.pdf,$(PLOTS))
TXTPLOTS := $(patsubst %,data/plot%.txt,$(PLOTS))
.PHONY: all
all: $(TXTPLOTS) $(PDFPLOTS) plots/figure_5.pdf
data/plot%.txt : scripts/plot%_sim.R
Rscript $< $@
plots/plot%.pdf : scripts/plot%_sim.R data/plot%.txt
Rscript scripts/plot$*.R $@
plots/figure.pdf: scripts/figure.tex $(PDFPLOTS)
pdflatex $<
请注意,plots/plot%.pdf: ...
模式规则看起来很奇怪:它的配方使用scripts/plotX.R
,但前提条件是scripts/plotX_sim.R
和data/plotX.txt
(没有scripts/plotX.R
)。正常吗?