Makefile для многофайлового документа LaTeX - PullRequest
8 голосов
/ 12 марта 2009

Я пытаюсь упростить / улучшить Makefile для составления моей диссертации. Makefile прекрасно работает для компиляции всего этого; У меня есть что-то вроде этого:

show: thesis.pdf
    open thesis.pdf

thesis.pdf: *.tex
    pdflatex --shell-escape thesis

Это позволяет мне набирать make, и любые изменения обнаруживаются (если они есть) и перекомпилируются перед отображением.

Теперь я хотел бы расширить его, чтобы условно компилировать только отдельные главы. Например, это позволяет мне написать make xpmt, чтобы получить всего лишь одну главу в обходном порядке:

xpmt: ch-xpmt.pdf
    open ch-xpmt.pdf

ch-xpmt.pdf: xpmt.tex
    pdflatex --shell-escape --jobname=ch-xpmt \
      "\includeonly{xpmt}\input{thesis}"

Но я не хочу записывать это одинаково для каждой отдельной главы. Как я могу написать приведенные выше правила в достаточно общем виде, чтобы избежать повторения?

(Больше упражнений в том, чтобы научиться писать файлы Makefile, а не решать какую-либо реальную проблему; очевидно, в этом случае было бы тривиально скопировать и вставить вышеуказанный код достаточно раз!)

Ответы [ 3 ]

8 голосов
/ 12 марта 2009

Если у вас есть главы с именами xpmt (угадайте, что это «эксперимент»?) И, скажем, thry, anls, conc или что-то еще:

xmpt thry anls conc: %: ch-%.pdf
    open $<

ch-%.pdf: %.tex
    pdflatex --shell-escape --jobname=ch-$* "\includeonly{$*}\input{thesis}"

Или, чтобы сделать это "правильно" с помощью make-переменных, я думаю, что это будет примерно так:

chapters = xmpt thry anls conc
main = thesis
.PHONY: $(chapters) show

show: $(main).pdf
    open $<

$(main).pdf: $(main).tex $(addsuffix .tex,$(chapters))
    pdflatex --shell-escape $(main)

$(chapters): %: ch-%.pdf
    open $<

ch-%.pdf: %.tex
    pdflatex --shell-escape --jobname=ch-$* "\includeonly{$*}\input{$(main)}"
2 голосов
/ 07 июня 2012

Пожалуйста, рассмотрите возможность использования latexmk

http://www.phys.psu.edu/~collins/software/latexmk-jcc/

Он определяет, нужно ли (и сколько раз) запускать pdflatex / latex, bibtex, makeindex и т. Д. Для полной компиляции вашего исходного кода.

latexmk - это Perl-скрипт, который включен в большинство дистрибутивов латекса. Вам нужно только убедиться, что Perl установлен в вашей системе.

2 голосов
/ 06 апреля 2009

Вы должны рассмотреть что-то вроде резины, чтобы справиться со зданием LaTeX. Хотя для выполнения большей части работы можно использовать make, специализированный инструмент может справиться со сложностями LaTeX, такими как повторный запуск bibtex, для сортировки всех ссылок и тому подобного.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...