我想知道是否有任何方法可以阻止hyperref
的\href{url}{text}
命令每次都打开浏览器的新窗口。我的意思是这样的。假设您使用 的网址url
,例如 。www.mywebsite.com/page.html
在编译的 PDF 上,您单击它,它会打开网站。再次单击它,或单击\href
具有相同地址的另一个:它会在另一个窗口中打开同一页面。
我宁愿回到之前打开的页面。
答案1
hyperref
不打开链接(内部或外部),也不生成任何打开链接的代码。它只向文档添加信息,即某个对象(例如文本或图像)是链接。如果显示文档的程序能够处理链接,它至少会进行分析,如果链接是内部链接,则意味着它是从文档的一个位置到同一文档的另一个位置,或者如果它是外部链接,则意味着链接到另一个文档或另一个文档中的一个位置。
如果链接是内部链接,则如果您激活该链接,程序就会直接跳转到目的地。
如果链接是外部链接,程序有三种选择:
- 它本身能够处理外部文档的类型。
- 它知道另一个能够处理外部文档类型的程序。
- 它可能会要求操作系统处理外部文档。
第三种方案与第二种方案基本相同(操作系统是一种程序)。那么第一种和第二种方案呢?
使用第一种选择,它只需打开外部文档并跳转到该文档的链接目标即可。在这种情况下,程序可以检测外部文档是否已打开,然后将其置于前台并跳转到目标。但有些程序甚至可能无法做到这一点,并且始终会打开外部文档的新实例。有些程序可能允许用户配置如何处理指向外部但已打开的文档的链接。现在轮到您来了解您使用的程序如何处理这个问题了。
对于第二种选择,程序可能很容易发现,是否已经有针对外部文档的程序实例正在运行。但是,如果外部文档已经打开,程序很难发现如何向其他程序发出请求。很难指示其他程序将打开的文档置于前台。很难指示其他程序跳转到已打开文档的链接。使用一个参数调用新实例很容易:外部链接。
该问题的一个简单示例是:为了与 PDF 查看器 TeXnicCenter 进行简单的协作,用户不仅必须在切换时重新配置他们的编辑器,例如,从 Acrobat Reader 切换到 BlinkyBill,而且即使他们从 Acrobat Reader 8 切换到 Acrobat Reader X 也必须重新配置。
一个好的解决方案是,如果每个文档查看器程序都可以配置为搜索其自身已运行的实例并指示此实例打开链接。但并非每个程序都可以配置为执行此操作。
结论:这个想法很好,但它需要多个不同程序的协作,没有哪个程序hyperref
可以处理或可以从文档源代码处理。这或多或少取决于你使用哪些程序以及这些程序支持哪些功能。