makefile确定乳胶输入文件的顺序

时间:2014-01-16 18:27:30

标签: makefile latex pdflatex

我正在尝试使用makefile来控制通过添加涵盖不同主题的部分(幻灯片)形成的beamer演示文稿的生成。我希望能够在makefile中指定部件及其顺序,这些部件及其顺序可以针对不同的演示文稿进行更改。

例如,我可能有不同的.tex文件,每个文件都有不同主题的幻灯片,比如topicA topicB和topicC。然后在某个阶段,我可能想要一个演示文稿,我想要一个PDF首先包含有关topicA的幻灯片,然后是topicB上的幻灯片,而在不同的时间我可能想要做另一个演示文稿,我想首先在topicC上的幻灯片和然后是关于topicA的那些。我想控制顺序和主题以包含在makefile上的演示文稿。

我正在尝试实现的解决方案包括拥有一个顶级乳胶文件(比如top.tex),最终会有一个命令(比如“\ slidesorder”),其内容将是一系列\输入的包含要包含的主题的幻灯片的文件的名称。

总之,我有:

  • top.tex(接近结尾的主要乳胶文件有\ slideorder命令)
  • topicA.tex,topicB.tex和topicX.tex(包含每个主题幻灯片的乳胶文件)

然后我编写了以下无法正常工作的makefile:

ROOT = top

SLIDES := topicB topicA topicC
TO_INCL := $(foreach V,$(SLIDES),\input{$(V)})

all: $(ROOT).pdf

${ROOT}.pdf:  ${ROOT}.tex $(SLIDES:=.tex) 
    echo "\newcommand{\slidesorder}{$(TO_INCL)} \input{$(ROOT)}" | pdflatex

我们的想法是,通过更改SLIDES变量的内容,我会从相同的幻灯片来源获得不同的演示文稿。我对Latex和Make的知识非常有限,所以非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

好的,在发现shell中反斜杠的问题后,我已经设法找到了一个可行的解决方案:

ROOT = top

SLIDES := topicB topicA topicC
TO_INCL := $(foreach V,$(SLIDES),\input{$(V)})
TO_PDFLTX := '\\newcommand{\\slidesorder}{'$(TO_INCL)'} \\input{'$(ROOT)'}'

all: $(ROOT).pdf

${ROOT}.pdf:  ${ROOT}.tex $(SLIDES:=.tex) 
    echo $(TO_PDFLTX)| pdflatex