如何使用 latexmk 清理子目录中的辅助文件

如何使用 latexmk 清理子目录中的辅助文件

好吧,标题基本上是不言自明的,但为了清楚起见,我有这样结构的乳胶纸:

.
├── 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 cleanroot成功清除了( )中的所有辅助文件.,但是,它没有清除在子目录中创建的辅助文件。如何定义清除子文件夹.aux中所有文件的规则?我应该提到我使用\input将文件添加到paper.tex

PS 这个 make 文件写得好吗?

答案1

  1. 如果子目录中的所有文件都是使用 输入的,则子目录中将\input没有文件。只有当对其他文件运行 时,或者您在过去某个时间点使用 而不是 时,您才会获得此类文件。无论如何,它们不是当前运行 所涉及的文件的一部分,因此当您执行 时不会正确地删除它们。另一方面,如果文件是通过 带入文档的,则相应的文件涉及文档,并将删除它。 如果您发现其他行为,我们需要 MWE 来了解问题。.aux.auxpdflatex\include\inputpdflatexlatexmklatexmk -CA\include.auxlatexmk -CA

  2. 至于Makefile,您应该查看文档中有关此内容的部分latexmk。相关部分“使用 latexmk 和 make”位于文档末尾附近,其中有一些latexmk有用的选项。重要的是,只要稍加注意,make就可以找到计算的所有依赖信息latexmk

  3. 如果您对项目的描述完整,则 aMakefile是不必要的;不带任何参数的命令latexmk将执行您需要的操作,特别是如果您的根目录中只有一个.tex文件,并且所需的任何配置都在文件中。通常,只有当您需要它执行除设计用于执行的操作之外的其他操作时,才需要latexmkrca。Makefilelatexmk

对于你的情况,合适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

相关内容