不同文件之间的交叉引用

不同文件之间的交叉引用

我想在不同的.tex文件之间进行交叉引用,只是因为我想将每个章节分开放置。

假设chapterI.tex我有一个文件\label{a},我想chapterII.tex使用类似的东西在文件中访问它\ref{a}。如何在 LaTeX 中做到这一点,而且如果LEd有一个简单的功能来覆盖这一点,那就更好了(我把这两个文件放在了同一个项目中)。

我找到了另一个标题相似的问题,但我不太明白。它在这里:LaTeX 文件之间的交叉引用

答案1

您可以使用xr包来引用其他 LaTeX 文档。

因此,在 中chapterII.tex,你说:

\usepackage{xr}
\externaldocument{chapterI}

然后就可以\ref{a}正常使用了。你也可以添加前缀:

\externaldocument[I-]{chapterI}

然后,您可以引用它,\ref{I-a}如果不同章节中具有相同的标签名称,这将很有用。

请注意,常规方法xr不会添加超链接。它只添加标签文本。zref包可用于此目的。它提供了zref-xr子包,可为您提供相同的功能,并且应该可以很好地与hyperref(毕竟这两个包来自同一作者)。你只需要用\externaldocument\zexternaldocument替换\ref\zref

请注意,xr包会读取该aux文件,例如,在这种情况下,它会检查chapterI.aux引用。

答案2

如前所述,xr或者xr-hyper可以解决问题。但是,它们需要.aux包含文件的相应文件。像 overleaf 这样的在线 LaTeX 编辑器不提供这些文件。给出了一个解决方案这里

在包含“xr”包之后,在序言中定义一些辅助函数

\makeatletter
\newcommand*{\addFileDependency}[1]{% argument=file name and extension
  \typeout{(#1)}
  \@addtofilelist{#1}
  \IfFileExists{#1}{}{\typeout{No file #1.}}
}
\makeatother

\newcommand*{\myexternaldocument}[1]{%
    \externaldocument{#1}%
    \addFileDependency{#1.tex}%
    \addFileDependency{#1.aux}%
}

然后将您的外部文档包含\myexternaldocument{...}(注意我的

然后添加一个名为的文件,latexmkrc其内容如下:

add_cus_dep( 'tex', 'aux', 0, 'makeexternaldocument' );

sub makeexternaldocument {
    if (!($root_filename eq $_[0]))
    {
        system( "latexmk -cd -pdf \"$_[0]\"" );
    }
}

现在所需的.aux文件将被保存,您可以开始了。

答案3

Beamer 和 xr:如果您想使用该xr包将外部引用拉入 Beamer 文档,则需要确保引用源已使用该hyperref包排版。这是因为 Beamer 默认使用 hyperref,而 .aux 文件中的引用格式与hyperref。如果引用来自另一个 Beamer 文档,则无需执行任何操作。如果它们来自基本的 LaTeX 文档,您可能需要添加\usepackage{hyperref}再次添加和排版源文档。据我所知,使用总是使用hyperref

答案4

有一个功能齐全的最小 LaTeX 模板,网址为这个 GitHub 仓库就是为了实现这一点。单独的章节保留在启用交叉引用的单独源文件中。此外,如果两个不同源文件中的标签名称发生冲突,也不会有问题。请参阅 repo 的自述文件以了解这一切是如何工作的。

相关内容