2014-01-16 3 views
1

Я пытаюсь создать makefile, управляющий генерацией презентаций лучей, которые формируются путем добавления частей (слайдов), которые охватывают разные темы. Я хочу иметь возможность указать в make-файле части и их порядок, которые могут меняться для разных презентаций.makefile определяющий порядок входных файлов латекса

Например, у меня могут быть разные .tex-файлы со слайдами на разные темы, например topicA topicB и topicC. Затем на каком-то этапе я могу сделать презентацию, где мне нужен PDF-файл, содержащий сначала слайды, касающиеся topicA, а затем те, которые указаны в topicB, а в другое время я могу сделать еще одну презентацию, где сначала хочу слайды на topicC и затем те на topicA. Я хотел бы контролировать порядок и темы для включения в презентацию в make-файле.

Решение, которое я пытаюсь реализовать, состоит в том, что у вас есть верхний латексный файл (например, top.tex), который в конце будет иметь команду (скажем, «\ slidesorder»), содержимое которой будет представлять собой серию \ input's with имена файлов со слайдами включенных тем.

В общем, у меня есть:

  • 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, я получаю разные презентации из тех же источников слайдов. Мои знания о Latex и Make очень ограничены, поэтому любая помощь очень ценится.

+1

Просто для уточнения: если вы делали это вручную, вы бы добавить строку " \ newcommand {\ slidesorder} \ input {topicB.tex} \ input {topicA.tex} \ input {topicC.tex} "в' top.tex', а затем введите «pdflatex top.tex», правильно? – Beta

+0

Да, это было бы так, но моя цель - иметь папку с источниками слайдов (файлы .tex), а затем у меня будут разные папки для разных конкретных презентаций, которые я буду делать на основе части этих слайдов, каждая с его собственный make-файл, который будет создавать конкретную презентацию, выдав соответствующий \ newcommand. Вышеприведенный код упрощает этот сценарий только для лучшей иллюстрации моей проблемы с make-файлом. Если я добавлю строку \ newcommand в top.tex, все будет работать отлично. – user3177839

+0

ОК, от первого ответа на [этот пост] (http://stackoverflow.com/questions/9487303/shell-escape-backslash-in-variable) Я узнал, что проблема заключается не в make-файле, а в обратном скелете в оболочке! – 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 
Смежные вопросы