编写Makefile批量编译任意层级目录下的LaTeX文件
多目录LaTeX文件编译的Makefile解决方案
核心Makefile代码
# 递归查找所有.tex源文件 TEX_FILES := $(shell find . -name "*.tex" -type f) # 生成对应的PDF目标文件列表(保留原路径) PDF_FILES := $(TEX_FILES:.tex=.pdf) # 默认目标:编译所有PDF all: $(PDF_FILES) # 模式规则:将单个.tex文件编译为同目录下的PDF %.pdf: %.tex latexmk -pdf -pdflatex="pdflatex --shell-escape %O %S" $< # 清理所有生成的PDF及中间文件 clean: find . -name "*.pdf" -o -name "*.aux" -o -name "*.log" -o -name "*.out" -o -name "*.fls" -o -name "*.fdb_latexmk" | xargs rm -f
关键说明
- 递归获取源文件:用
find命令遍历所有子目录,确保不会遗漏任何层级的.tex文件,不同子目录下的同名文件也能被正确识别。 - 保持路径一致性:生成的PDF文件路径与源文件完全对应,避免同名文件冲突,且所有输出文件(包括中间文件)都会保存在源文件所在子目录。
- 增量编译:Make会自动对比
.tex源文件和对应.pdf的修改时间,仅重新编译更新过的文件,无需手动指定。 - 注意事项:Makefile中的命令行必须用制表符缩进,不能用空格,否则会报错。
内容的提问来源于stack exchange,提问作者revsuine
相关产品推荐
相关产品推荐

