我可以创建一个文件与另一个文件的链接吗?这样当生成的 pdf 文件位于同一目录中时,链接会将我从一个文件带到另一个文件?其他软件包可以做到这一点吗?
添加于 2012 年 1 月 20 日,提问原因:我想向一个组织提交一份文件,该组织希望将其拆分为 A.pdf(作为论文正文)、B.pdf(作为参考文献)、C.pdf 等。我假设它们将存放在一个公共目录中。它们可以单独查看,也可以合并为一个文档。
答案1
举一个完整的例子。我发现xr-hyper
让它工作起来相当棘手。似乎xr-hyper
必须先调用hyperref
,并且两个文档都必须编译两次。下面是一个展示如何让它运行的例子。
- 编写以下两个tex文件,docA.tex和docB.tex
- 将两个文件放在同一目录中,否则必须将路径指定为 xr 标头的一部分。
- 在两个文件上运行 pdfLaTeX 两次。首先在 docA 上运行,然后在 docB 上运行,然后重复该过程
EDIT2:我不认为引用可以跨文件起作用(natbib
至少不是)
docA.tex
\documentclass{article}
\usepackage{xr-hyper}
\usepackage{hyperref}
\externaldocument[B-]{docB}[docB.pdf]% <- full or relative path
\begin{document}
This is a test for math.
\begin{equation}
E=mc^2 \label{eq:1}
\end{equation}
This is a second test for math.
\begin{equation}
r = \sqrt{x^2 + y^2} \label{eq:2}
\end{equation}
In document B Eq.~~(\ref{B-eq:x})
\end{document}
docB.tex
\documentclass{article}
\usepackage{xr-hyper}
\usepackage{hyperref}
\externaldocument[A-]{docA}[docA.pdf]% <- full or relative path
\begin{document}
\setcounter{equation}{5}
As was shown in Eq.~(\ref{A-eq:1}) is it
... or in Eq.~(\ref{A-eq:2}) is ...
\begin{equation}
\mathrm{e}^{i\pi}-1=0 \label{eq:x}
\end{equation}
\end{document}
答案2
答:是的。hyperref 包就足够了。
例如,我在同一个文件夹中有两个文件,分别名为 Lesson5.tex 和 Supplement5.tex。我在 Lesson5.tex 中有以下链接。
The \href{run:./Supplement5.pdf}{supplement to Lesson 5} is available for that purpose.
我在 supplement5.tex 中有以下行。
\href{run:./Lesson5.pdf}{Go Back to Lesson 5}
有了它,我就可以在两个文档之间来回切换。
答案3
我想,对你的问题的回答在一定程度上取决于相关问题,“你正在考虑什么类型的超链接?”
如果您要创建的“只是”常规交叉引用的超链接版本,则xr-hyper
包(即“cross-ref”包的后代xr
)将满足您的要求。该xr-hyper
包是整体的一部分超链接包和样式文件套件。
该xr-hyper
软件包要求您在创建要交叉引用的标签时遵循一些相当简单的规则。为了便于讨论,我们假设两个 tex 文件的名称分别为fileA.tex
和fileB.tex
。
xr-hyper
在加载之前,在两个前言中加载包hyperref
。在的序言中,fileA.tex
您还需要插入语句\externaldocument{fileB}
,在的序言中,fileB.tex
您需要插入\externaldocument{fileA}
。(.tex
不需要扩展。)所有需要交叉引用的项目(章节、公式、图表、表格等)的标签必须独特的。(这实际上是一个简单逻辑的问题,而不是软件设计的问题,对吧?)有两种方法可以满足这一要求。
您可以在两个文件中使用唯一的标签。例如,您可以将文件 A 中的方程式标记为
eq:A:1
、eq:A:2
、eq:A:3
等,将文件 B 中的所有方程式标记为eq:B:1
、eq:B:2
、eq:B:3
等。对于两个文件中的所有图表、表格、章节和任何其他要交叉引用的项目,同样如此。然后对这些项目的交叉引用将如下\ref{eq:B:2}
所示两个都文件。您可以为两个文件中的所有带标签项指定通用前缀。为此,请
\externaldocument
按如下方式修改语句:在文件 A 的序言中,您将声明\externaldocument[B-]{fileB}
,而在文件 B 的序言中,您将声明\externaldocument[A-]{fileA}
。要在文件 A 中创建对文件 B 中的交叉引用sec:data
,您可以编写\ref{B-sec:data}
。要从文件 B 中的某个位置创建对此项目的交叉引用,您当然只需编写\ref{sec:data}
。这两个与文件相关的前缀不一定非得是A-
和B-
;任何不违反 TeX 基本规则的前缀都可以。您想采用这两种方法中的哪一种取决于您自己。如果您已经(或多或少)完成了两个文件中的一个文件,您可能不想重做它的所有标签;因此,第二种方法可能是您的更好选择。如果您从头开始处理这两个文件,请花点时间考虑哪种方法更省时和/或更不容易出错。拥有一个可以查看这两个文件的文本编辑器将很有用。
两个文件都需要编译两次,以便 LaTeX 的交叉引用机制有机会解决所有问题。(例如,首先编译文件 A,然后编译文件 B,然后再编译文件 A,然后再编译文件 B。)根据文档的复杂程度,可能需要第三轮。例如,如果您还需要运行 BibTeX,请在第一轮编译后对两个文件都运行 BibTeX,然后再
pdflatex
对文件 A 和文件 B 重新运行(或您使用的任何 TeX 格式)两次。如果你也恰好使用该
cleveref
包,请务必加载它后hyperref
。(这是“始终最后加载”这一通用建议的少数例外之一hyperref
。)然后,编译两个文件(至少)两次。请记住,如果您使用cleveref
,则不得使用逗号(,
)作为标签名称的一部分,包括与文件相关的前缀。
答案4
您还可以附加B.pdf
, C.pdf
, ... 到A.pdf
使用embedfile
并使用链接到它们hypgotoe
。
以下示例直接取自hypgotoe
文档:
\NeedsTeXFormat{LaTeX2e}
\RequirePackage{filecontents}
\begin{filecontents}{hypgotoe-child.tex}
\NeedsTeXFormat{LaTeX2e}
\documentclass{article}
\usepackage{hypgotoe}[2007/10/30]
\begin{document}
\section{This is the child document.}
\href{gotoe:%
dest={page.1},parent%
}{Go to first page of main document}\\
\href{gotoe:%
dest={page.2},parent%
}{Go to second page of main document}
\newpage
\section{This is the second page of the child document.}
\href{gotoe:%
dest={page.1},parent%
}{Go to first page of main document}\\
\href{gotoe:%
dest={page.2},parent%
}{Go to second page of main document}
\hypertarget{foobar}{}
Anker foobar is here.
\end{document}
\end{filecontents}
\documentclass{article}
\usepackage{hypgotoe}[2007/10/30]
\usepackage{embedfile}
\IfFileExists{hypgotoe-child.pdf}{%
\embedfile{hypgotoe-child.pdf}%
}{%
\typeout{}%
\typeout{--> Run hypgotoe-child.tex through pdflatex}%
\typeout{}%
}
\begin{document}
\section{First page of main document}
\href{gotoe:%
dest=page.1,embedded=hypgotoe-child.pdf%
}{Go to first page of child document}\\
\href{gotoe:%
dest=page.2,embedded=hypgotoe-child.pdf%
}{Go to second page of child document}\\
\href{gotoe:%
dest=foobar,embedded=hypgotoe-child.pdf%
}{Go to foobar in child document}
\newpage
\section{Second page of main document}
\href{gotoe:%
dest=section.1,embedded=hypgotoe-child.pdf%
}{Go to first section of child document}\\
\href{gotoe:%
dest=section.2,embedded=hypgotoe-child.pdf%
}{Go to second section of child document}\\
\href{gotoe:%
dest=foobar,embedded=hypgotoe-child.pdf%
}{Go to foobar in child document}
\end{document}
我对此并不熟悉,尽管这可能是一种分部分提交文档以确保它们保持在同一包中的方法加允许从一个超链接到另一个。