我想在不同的.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 的自述文件以了解这一切是如何工作的。