You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Makefile中捕获文件名数字后缀?实现LaTeX书籍编译需求

编写支持整书与单章节编译的LaTeX Makefile

我来帮你写一个完全符合需求的Makefile,直接就能用,还附带详细的功能说明和注意事项:

# 定义LaTeX编译器及编译选项,可根据需要换成xelatex/lualatex
LATEX = pdflatex
BIBTEX = bibtex
LATEXFLAGS = -interaction=nonstopmode

# 主书籍文件的名称(对应你的book.tex)
MAIN = book

# 自动匹配所有章节文件(chapter_*.tex)
CHAPTERS = $(wildcard chapter_*.tex)
# 生成单章节编译的目标名(去掉.tex后缀)
CHAPTER_TARGETS = $(CHAPTERS:.tex=)

# 默认执行目标:编译整本书
all: book

# 整书编译规则:处理交叉引用与目录
book: $(MAIN).tex $(CHAPTERS)
	$(LATEX) $(LATEXFLAGS) $(MAIN)
	# 如果你的书籍用到参考文献,取消下面两行注释
	# $(BIBTEX) $(MAIN)
	# $(LATEX) $(LATEXFLAGS) $(MAIN)
	$(LATEX) $(LATEXFLAGS) $(MAIN)  # 第二次编译确保交叉引用正确

# 定义单章节编译的通用模板
define chapter_compile_rule
$(1): $(1).tex
	# 自动生成临时主文件,仅包含当前章节
	echo "\documentclass{book}" > temp_$(1).tex
	# 如果你有公共宏包/命令在preamble.tex里,取消下面一行注释
	# echo "\input{preamble.tex}" >> temp_$(1).tex
	echo "\begin{document}" >> temp_$(1).tex
	echo "\include{$(1)}" >> temp_$(1).tex
	echo "\end{document}" >> temp_$(1).tex
	# 编译临时文件
	$(LATEX) $(LATEXFLAGS) temp_$(1)
	# 清理临时辅助文件(可选,保留的话可以查看编译日志)
	rm -f temp_$(1).tex temp_$(1).aux temp_$(1).log
	# 将生成的PDF重命名为章节名称
	mv temp_$(1).pdf $(1).pdf
endef

# 为每个章节自动生成编译规则
$(foreach chap,$(CHAPTER_TARGETS),$(eval $(call chapter_compile_rule,$(chap))))

# 清理所有生成的文件(PDF、辅助文件等)
clean:
	rm -f $(MAIN).pdf $(MAIN).aux $(MAIN).log $(MAIN).toc $(MAIN).lof $(MAIN).lot
	rm -f $(CHAPTER_TARGETS:=.pdf)

怎么用?

  • 编译整本书:直接执行 make book(或者简化成 make,因为all默认指向book)
  • 编译单个章节:比如编译第一章就执行 make chapter_1,完成后会生成chapter_1.pdf
  • 清理所有生成文件:执行 make clean,会删掉整书PDF、单章节PDF和各种辅助文件

关键细节说明

  1. 编译器灵活替换:如果你用XeLaTeX或LuaLaTeX,只需要把LATEX = pdflatex改成对应的编译器名称就行。
  2. 参考文献支持:如果你的书籍用到BibTeX,记得把book规则里的BIBTEX命令注释去掉,这样编译时会自动处理参考文献。
  3. 公共代码复用:如果你的章节依赖主文件里的宏包、自定义命令,建议把这些公共内容提取到preamble.tex里,然后打开临时文件生成部分的\input{preamble.tex}注释,这样单章节编译时也能正确加载这些内容。
  4. 交叉引用提示:单章节编译时,章节内的交叉引用正常,但跨章节的引用会显示为??,这是正常现象——毕竟其他章节没被包含进来,整书编译时会自动修复。

内容的提问来源于stack exchange,提问作者Denisof

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 09:39:57