Makefile目标执行拆分变量:多LaTeX文件编译问题
多LaTeX文件编译的Makefile优化方案
核心思路
利用Make的模式规则批量生成对应编译规则,让每个PDF文件仅依赖自身对应的.tex文件(以及你指定的其他依赖文件),避免不必要的全量编译,同时解决多文件无法单独编译的问题。
完整Makefile代码
# 定义编译工具,按需替换成xelatex/lualatex等 TEX = pdflatex BIBTEX = bibtex # 自动收集当前目录下所有.tex文件,生成对应的PDF目标列表 TEX_FILES := $(wildcard *.tex) PDF_FILES := $(TEX_FILES:.tex=.pdf) # 默认目标:编译所有.tex文件为PDF all: $(PDF_FILES) # 模式规则:单个.tex文件编译为PDF,仅依赖自身.tex文件 %.pdf: %.tex # 第一次编译生成基础文档和辅助文件 $(TEX) $< # 如果需要处理参考文献,取消下面两行注释(按需启用) # $(BIBTEX) $(basename $<) # $(TEX) $< # 第二次编译处理交叉引用、目录等 $(TEX) $< # 清理编译生成的辅助文件和PDF clean: rm -f $(PDF_FILES) *.aux *.log *.blg *.bbl *.out
关键规则说明
- 模式规则
%.pdf: %.tex:这是核心逻辑,Make会自动匹配每个.tex文件,生成对应的.pdf目标。$<代表当前目标的依赖文件(比如report.tex对应report.pdf,只依赖report.tex),确保只有对应的.tex文件修改时才会重新编译该PDF。 - 自动收集文件:
$(wildcard *.tex)会自动扫描当前目录下所有.tex文件,新增文件后无需手动修改Makefile,Make会自动识别并生成编译规则。 - 多次编译逻辑:LaTeX通常需要两次编译来处理交叉引用、目录等元素;如果用到参考文献(bibtex),则需要插入bibtex编译步骤,确保引用正确生成。
扩展调整
- 添加额外依赖:如果你的LaTeX文件依赖自定义样式文件(如
mystyle.sty)或图片(如figures/chart.png),可以修改模式规则的依赖列表:
这样当这些依赖文件修改时,对应的PDF也会自动重新编译。%.pdf: %.tex mystyle.sty figures/chart.png $(TEX) $< # 后续编译步骤... - 更换编译引擎:如果需要用
xelatex或lualatex,只需修改TEX变量:TEX = xelatex
内容的提问来源于stack exchange,提问作者JM445
相关产品推荐
相关产品推荐

