Общие имена файлов в makefile

Как уловить числовые суффиксы в именах файлов в make-файле? Точнее, у меня есть книга, написанная в латексе и разделенная на несколько файлов глав, я хотел написать make-файл, поддерживающий следующий синтаксис, для компиляции всей книги:

make book

для отдельной главы:

make chapter_1

Например. Мои файлы - это book.tex с несколькими строками \include{chapter_i} и несколькими файлами chapter_i.tex, где i - это номер главы.

Спасибо всем!

Вы не можете скомпилировать отдельные главы LaTeX, если они не включены в документ. Как этого добиться без make?

Renaud Pacalet 11.04.2018 12:51

Я пишу \include{chapter_i} в book.tex. И я знаю, что есть команда \includeonly{chapter_i} для компиляции книги только с одной включенной главой. Более того, для pdflatex есть синтаксис, который может обрабатывать такие вещи: pdflatex -jobname=chapter "\includeonly{chapter_i}\input{book}", который компилирует книгу только из одной главы. Я не знаю, как написать make-файл, который может распознавать этот шаблон chapter_i для каждой главы.

Denisof 11.04.2018 13:07
0
2
62
1

Ответы 1

Правила паттернов и / или правила статического шаблона - это то, что вы ищете:

CHAPTERS      := $(wildcard chapter_*.tex)
CHAPTER_PDFS  := $(patsubst %.tex,%.pdf,$(CHAPTERS))
SHORT_TARGETS := book $(patsubst %.pdf,%,$(CHAPTER_PDFS))

.PHONY: all $(SHORT_TARGETS)

all: book

$(SHORT_TARGETS): %: %.pdf

book.pdf: book.tex $(CHAPTERS)
    pdflatex $<

$(CHAPTER_PDFS): chapter_%.pdf: chapter_%.tex book.tex
    pdflatex -jobname=chapter_$* "\includeonly{chapter_$*}\input{book}"

Примечание: в рецептах (и только в рецептах) автоматическая переменная $* расширяется как шаблон соответствия правила. Так, например, для chapter_42 последнее правило означает:

chapter_42.pdf: chapter_42.tex book.tex
    pdflatex -jobname=chapter_42 "\includeonly{chapter_42}\input{book}"

Спасибо большое, потестирую позже.

Denisof 11.04.2018 16:57

Другие вопросы по теме