原 文:Cross referencing with the xr package in Overleaf
译 者:Xovee
翻译时间:2020年7月24日
在 Overleaf 上使用 xr 包来交叉引用
xr 是一个用来在多个独立的文档之间进行交叉引用的包。例如,如果你在一个项目中有两个不同的文件,File1.tex 和 File2.tex,然后你想在 File1.tex 中引用某个位于 File2.tex 中的被标记的对象,而你又不想在 File1.tex 中引入 file2.tex,那么 xr 包可以帮你办到这件事情。
为了在 Overleaf 上做到这一点,下面介绍了一些需要做到的点。
加载 xr 包
首先在主文件(例如 File1.tex)中加载 xr 包:
\usepackage{xr}
如果你已经使用了 hyperref
包,那么你需要在 File1.tex 文件中,在 hyperref
之后加载 xr-hyper
包,而不是 xr
包。你也需要在 File2.tex 文件中加载 hyperref
包。
在 File1.tex 的序言中添加一些额外的代码
我们需要在 File1.tex 文件的序言中添加一些有用的代码:
% In your preamble
\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{…},这个命令允许你设定你想引用的标记它所在的文件。
设定外部文档
下一个步骤是设定标记所在的外部文档。这行代码是唯一一个需要你手动指定文件名的代码:
% In your preamble
\myexternaldocument{File2}
这里,File2 可以被替换为其他文件(其中包含了你所想引用的标记)。
创建 latexmkrc 文件
下一步是创建 latexmkrc 文件:
- 在项目的编辑器界面,点击侧边栏顶部的 Add file 按钮
- 选择 Blank file,文件名设置为 latexmkrc
- 在创建的文件中添加下面的代码
add_cus_dep( 'tex', 'aux', 0, 'makeexternaldocument' );
sub makeexternaldocument {
if (!($root_filename eq $_[0]))
{
system( "latexmk -cd -pdf \"$_[0]\"" );
}
}
这些代码将会使用 PDFLaTeX 引擎来编译外部文档 File2,以及其他的生成的依赖文件(保存在缓存之中,用来生成 File1 所需要的引用)。如果你的外部文件需要其他的引擎来编译,使用下面的代码(注释掉你不需要的引擎,例子中使用的引擎是 PDFLaTeX):
add_cus_dep( 'tex', 'aux', 0, 'makeexternaldocument' );
sub makeexternaldocument {
if (!($root_filename eq $_[0]))
{
# FOR PDFLATEX
system( "latexmk -cd -pdf \"$_[0]\"" );
# FOR LATEX+DVIPDF
# system( "latexmk -cd \"$_[0]\"" );
# FOR XELATEX
# system( "latexmk -cd -xelatex \"$_[0]\"" );
# FOR LUALATEX
# system( "latexmk -cd -lualatex \"$_[0]\"" );
}
}
最终的文档
在执行完上面所描述的所有过程之后,你可以在不同的文档中进行交叉引用了。引用的方式与正常引用没有差别。如果你在 File2.tex 中标记了 \label{file2:introduction},那么你可以在 File1.tex 中引用这个标记:\ref{file2:introduction}。
% In File1.tex
We can reference the image \ref{picture} of File2.tex.
% In File2.tex
\begin{figure}
\centering
\includegraphics{image.PNG}
\caption{Caption}
\label{picture}
\end{figure}