GNU Makefile 用于编译每个章节及其参考资料

GNU Makefile 用于编译每个章节及其参考资料

我的书结构如下:

book.tex
chapter/ch1.tex
       /ch2.tex
ref/ch1.bib
   /ch2.bib

由于我的书的每一章都需要有自己的参考资料,因此我使用了chapterbib包并将每章的 tex 文件与相应的 bib 文件一起提供。最后,我可以使用以下 bash 命令来编译这本书:

xelatex book
bibtex chapter/ch1
bibtex chapter/ch2
xelatex book
xelatex book

现在我的问题是,我如何通过编写 Makefile 来编译这本书?我当前的脚本根本不起作用。

TEXFILE := book
CHAPTERDIR := chapter
CHAPTERS := $(wildcard $(CHAPTERDIR)/*.tex)
TEXENGINE=xelatex
BIBTEX=bibtex
BUILDTEX=$(TEXENGINE) $(TEXFILE)

all:
    $(BUILDTEX)
    $(shell for chapterSrc in $(CHAPTERS); do \
        chapterSrcName=$(shell basename $(chapterSrc) .tex); \
        $(BIBTEX) $(CHAPTERDIR)/$(chapterSrcName); \
    done)
    $(BUILDTEX)
    $(BUILDTEX)

谢谢。

答案1

警告:未经测试的代码。 应该在 GNU Make 中工作。

TEXFILE := book
CHAPTERDIR := chapter
CHAPTERS := $(wildcard $(CHAPTERDIR)/*.tex)
BIBS := $(patsubst %.tex,%,$(CHAPTERS))
TEXENGINE=xelatex
BIBTEX=bibtex
BUILDTEX=$(TEXENGINE) $(TEXFILE)

all:
    $(BUILDTEX)
    for c in $(BIBS); do \
        $(BIBTEX) $$c; \
        done;
    $(BUILDTEX)
    $(BUILDTEX)

相关内容