好吧,标题基本上是不言自明的,但为了清楚起见,我有这样结构的乳胶纸:
.
├── back_matter
│ └── some_tex_files.tex
├── bibliography
│ └── bibliography.bib
├── body_matter
│ ├── a_file.tex
│ └── another_file.tex
├── graphics
│ └── some_images.png
├── styles
│ ├── bib_style.bbl
│ └── paper_style.cls
├── paper.tex
└── Makefile
类似Makefile
如下:
.PHONY: paper.pdf
all: paper.pdf
paper.pdf: paper.tex
latexmk -pdf -pdflatex="pdflatex -interactive=nonstopmode" -use-make paper.tex
clean:
latexmk -CA
make clean
root
成功清除了( )中的所有辅助文件.
,但是,它没有清除在子目录中创建的辅助文件。如何定义清除子文件夹.aux
中所有文件的规则?我应该提到我使用\input
将文件添加到paper.tex
。
PS 这个 make 文件写得好吗?
答案1
如果子目录中的所有文件都是使用 输入的,则子目录中将
\input
没有文件。只有当对其他文件运行 时,或者您在过去某个时间点使用 而不是 时,您才会获得此类文件。无论如何,它们不是当前运行 所涉及的文件的一部分,因此当您执行 时不会正确地删除它们。另一方面,如果文件是通过 带入文档的,则相应的文件涉及文档,并将删除它。 如果您发现其他行为,我们需要 MWE 来了解问题。.aux
.aux
pdflatex
\include
\input
pdflatex
latexmk
latexmk -CA
\include
.aux
latexmk -CA
至于
Makefile
,您应该查看文档中有关此内容的部分latexmk
。相关部分“使用 latexmk 和 make”位于文档末尾附近,其中有一些latexmk
有用的选项。重要的是,只要稍加注意,make
就可以找到计算的所有依赖信息latexmk
。如果您对项目的描述完整,则 a
Makefile
是不必要的;不带任何参数的命令latexmk
将执行您需要的操作,特别是如果您的根目录中只有一个.tex
文件,并且所需的任何配置都在文件中。通常,只有当您需要它执行除设计用于执行的操作之外的其他操作时,才需要latexmkrc
a。Makefile
latexmk
对于你的情况,合适Makefile
的是
DEPS_DIR = .deps
.PHONY: all clean
# Read in known dependencies:
$(foreach file,$(wildcard $(DEPS_DIR)/*P),$(eval -include $(file)))
all: paper.pdf
%.pdf: %.tex
@if [ ! -e $(DEPS_DIR) ]; then mkdir $(DEPS_DIR); fi
latexmk -deps-out=$(DEPS_DIR)/$@P -pdf -dvi- -ps- $<
clean:
latexmk -C
这使用了 GNU make 的一些特殊功能。依赖信息保存在名为 的子目录中.deps
。