为所包含部分的 AUX 文件添加前缀

为所包含部分的 AUX 文件添加前缀

我为我的学生编写课程材料。每章都在不同的文件中。有些章节在多个课程中使用,但顺序不同。说:

  • 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.texClassB.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(单个问号为AB,问号三重为、、、abc或)。barfooxyz

答案2

我不知道有任何软件包提供此功能,并且我认为必须更改相当多的内部命令(例如检查 bibtex 上的副作用)才能获得它。

您可以做的是使用中间层:创建b-chapter-foo.tex仅包含行的层\input{chapter-foo}

相关内容