[翻译] 在 Overleaf 上使用 xr 包来交叉引用

原  文:Cross referencing with the xr package in Overleaf
译  者:Xovee
翻译时间:2020年7月24日

在 Overleaf 上使用 xr 包来交叉引用

xr 是一个用来在多个独立的文档之间进行交叉引用的包。例如,如果你在一个项目中有两个不同的文件,File1.texFile2.tex,然后你想在 File1.tex 中引用某个位于 File2.tex 中的被标记的对象,而你又不想在 File1.tex 中引入 file2.tex,那么 xr 包可以帮你办到这件事情。

为了在 Overleaf 上做到这一点,下面介绍了一些需要做到的点。

在 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}

在 Overleaf 中打开这个例子

% 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}

源代码:TeX.SX: latexmk with external references.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值