![为所包含部分的 AUX 文件添加前缀](https://linux22.com/image/359965/%E4%B8%BA%E6%89%80%E5%8C%85%E5%90%AB%E9%83%A8%E5%88%86%E7%9A%84%20AUX%20%E6%96%87%E4%BB%B6%E6%B7%BB%E5%8A%A0%E5%89%8D%E7%BC%80.png)
我为我的学生编写课程材料。每章都在不同的文件中。有些章节在多个课程中使用,但顺序不同。说:
A类
- 包括 chapter-foo.tex 作为第 1 章
- 包括 chapter-bar.tex 作为第 2 章
- 包括 chapter-xyz.tex 作为第 3 章
B类
- 包括 chapter-abc.tex 作为第 1 章
- 包括 chapter-foo.tex 作为第 2 章
- 包括 chapter-bar.tex 作为第 3 章
现在,每当我编译 ClassA.tex 或 ClassB.tex 时,都会生成三个 AUX 文件,一切正常。但是,如果我在 A 类的文档中添加第四章,并且为了节省时间,使用\includeonly
以便在编译期间可以跳过前三章,如果上次完整运行已使用 ClassB.tex 完成,这将导致我产生错误的交叉引用。
我正在寻找一种方法来向 AUX 文件的名称添加一些前缀,例如,从 ClassA.tex 编译 chapter-foo.tex 将使用(并在必要时创建)a-chapter-foo.aux,而从 ClassB.tex 编译它将使用 b-chapter-foo.aux。
答案1
所包含文件的辅助文件的名称仅\ínclude
在内部命令中使用\@include
。修补出现的两个问题#1.aux
解决了该问题。以下修补程序#1.aux
以主文档的作业名称作为前缀\jobname
。它属于主文件(ClassA.tex
和ClassB.tex
)的前言。
\usepackage{etoolbox}
\makeatletter
\patchcmd{\@include}{\@input{#1.aux}}{\@input{\jobname-#1.aux}}{}{%
\errmessage{First patch of \noexpand\@include failed.}%
}
\patchcmd{\@include}{\@partaux #1.aux}{\@partaux\jobname-#1.aux}{}{%
\errmessage{Second patch of \noexpand\@include failed.}%
}
\makeatother
然后,的辅助文件chapter-???.tex
不再是chapter-???.tex
而是Class?-chapter-???.tex
(单个问号为A
或B
,问号三重为、、、abc
或)。bar
foo
xyz
答案2
我不知道有任何软件包提供此功能,并且我认为必须更改相当多的内部命令(例如检查 bibtex 上的副作用)才能获得它。
您可以做的是使用中间层:创建b-chapter-foo.tex
仅包含行的层\input{chapter-foo}
。