2014-01-16 62 views
1

我想要一個makefile來控制通過添加涵蓋不同主題的部分(幻燈片)形成的beamer演示文稿的生成。我希望能夠在makefile中指定部件及其順序,這些部件和順序可以針對不同的演示文稿進行更改。makefile確定乳膠輸入文件的順序

例如,我可能有不同的.tex文件,每個文件帶有不同主題的幻燈片,例如topicA topicB和topicC。然後,在某個階段,我可能想要做一個演示文稿,在其中首先要包含有關topicA和topicB的幻燈片的PDF,而在不同的時間,我可能想要做另一個演示,首先需要topicC和幻燈片上的幻燈片,那麼關於topicA的那些。我想控制在makefile上的演示文件中包含的順序和主題。

我試圖實現的解決方案在於有一個頂級乳膠文件(稱爲top.tex),最終將有一個命令(說「\ slidesorder」),其內容將是一系列\ input與包含要包含的主題幻燈片的文件名稱。

綜上所述,筆者有:

  • top.tex(主要是乳膠接近尾聲了命令\ slidesorder文件)
  • 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變量的內容,我會從相同的幻燈片來源得到不同的演示文稿。我對乳膠和製作的知識非常有限,因此非常感謝任何幫助。

+1

只是爲了澄清:如果你的手這樣做,你會追加行「 \ newCommand {\ slidesorder} \ input {topicB.tex} \ input {topicA.tex} \ input {topicC.tex}「輸入到」top.tex「,然後輸入」pdflatex top.tex「,是嗎? – Beta

+0

是的,情況就是這樣,但我的目標是創建一個包含幻燈片源(.tex文件)的文件夾,然後針對不同的特定演示文稿,我將根據這些幻燈片的部分內容製作不同的文件夾,每個文件夾都有它自己的makefile,它將通過發佈足夠的\ newcommand來構建特定的演示文稿。上面的代碼只是爲了更好地說明我在makefile中的問題而簡化了這種情況。如果我將\ newcommand行添加到top.tex中,那麼所有的工作都完美無缺。 – user3177839

+0

好的,從第一個答案到[本文](http://stackoverflow.com/questions/9487303/shell-escape-backslash-in-variable)我知道問題不在於makefile,而是在shell中轉義反斜槓! – user3177839

回答

1

OK,問題的發現與外殼反斜線我管理一個有效的解決方案後:

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