感谢您花时间阅读此问题。
我想使用\href
它来创建指向我的其他 PDF 文件的超链接。不幸的是,有两种情况出现问题:
如果我使用
\href{run:\path\to\file}{text}
,代码可以在 Adobe Acrobat 或 SmartPDF 等 PDF 阅读器上运行良好。但它们无法在 Web 浏览器上运行。当我使用带后缀的
\href{\raletive-path\to\file}{text}
链接时.txt
,代码运行良好。但是,当使用.pdf
后缀时,href 链接将被视为链接,anchor
并且链接不起作用。而\url
命令则不存在此问题。
以下是一些测试代码:
\documentclass{article}
\usepackage[colorlinks,linkcolor=red,anchorcolor=blue,citecolor=green,CJKbookmarks=True]{hyperref}
\pagestyle{plain}
\begin{document}
\section{Problem}
When use URL .pdf: \url{./test/test.pdf} \\
When use href .pdf: \href{./test/test.pdf}{testfile}\\
\newline
When use URL .txt: \url{./test/test.txt} \\
When use href .txt: \href{./test/test.txt}{testfile}\\
\newline
When use URL without extension: \url{./test/test} \\
When use href without extension: \href{./test/test}{testfile}\\
\end{document}
环境设置:
Windows 2004 64 位
TexLive 2019
XeTex、pdfTex
答案1
您可以编译以下文档来了解的行为hyperref
:
\documentclass{article}
\pdfobjcompresslevel=0
\pdfcompresslevel=0
\usepackage[colorlinks,linkcolor=red,anchorcolor=blue,citecolor=green,CJKbookmarks=True]{hyperref}
\pagestyle{plain}
\begin{document}
\section{Problem}
When use URL .pdf: \url{./test/test.pdf} \\
When use href .pdf: \href{./test/test.pdf}{testfile}\\
\newline
When use URL .txt: \url{./test/test.txt} \\
When use href .txt: \href{./test/test.txt}{testfile}\\
\newline
When use URL without extension: \url{./test/test} \\
When use href without extension: \href{./test/test}{testfile}\\
\end{document}
生成的 PDF 现在已解压缩,因此您可以使用您喜欢的文本编辑器打开它。
首先,您会通过流编号(与源文件中的顺序相同)找到添加到页面的所有注释(这是 PDF 文档中所称的链接):
/Annots [ 7 0 R 8 0 R 9 0 R 10 0 R 11 0 R 12 0 R ]
然后找到流对象(从#7到#12):
7 0 obj
<<
/Type /Annot
/Border[0 0 0]/H/I/C[0 1 1]
/Rect [227.749 632.204 308.197 643.329]
/Subtype/Link/A<</Type/Action/S/URI/URI(./test/test.pdf)>>
>>
endobj
8 0 obj
<<
/Type /Annot
/Border[0 0 0]/H/I/C[0 .5 .5]
/Rect [223.626 620.526 254.455 631.374]
/Subtype/Link/A<</F(./test/test.pdf)/S/GoToR/D[0/Fit]>>
>>
endobj
9 0 obj
<<
/Type /Annot
/Border[0 0 0]/H/I/C[0 1 1]
/Rect [226.366 597.722 306.813 607.464]
/Subtype/Link/A<</Type/Action/S/URI/URI(./test/test.txt)>>
>>
endobj
10 0 obj
<<
/Type /Annot
/Border[0 0 0]/H/I/C[0 1 1]
/Rect [222.242 586.598 253.071 595.509]
/Subtype/Link/A<</Type/Action/S/URI/URI(./test/test.txt)>>
>>
endobj
11 0 obj
<<
/Type /Annot
/Border[0 0 0]/H/I/C[0 1 1]
/Rect [288.411 561.857 347.937 571.598]
/Subtype/Link/A<</Type/Action/S/URI/URI(./test/test)>>
>>
endobj
12 0 obj
<<
/Type /Annot
/Border[0 0 0]/H/I/C[0 .5 .5]
/Rect [284.288 550.732 315.116 559.643]
/Subtype/Link/A<</F(./test/test.pdf)/S/GoToR/D[0/Fit]>>
>>
endobj
在每种情况下,流都包含一个/Subtype/Link/A
注释。
产生的所有链接和产生的文件\url
链接(到外部 URI/URL 的链接)均具有正确的链接 URL(相对 URL)。.txt
\href
/Type/Action/S/URI
(#7 obj).pdf
生成的文件显式链接是(指向外部 PDF 文件的链接)。这很方便,因为 PDF 查看器知道它可以自己打开文件。\href
F(./test/test.pdf)/S/GoToR/D[0/Fit]
没有扩展名的 URL 生成的链接\href
看起来很奇怪(.pdf
扩展名被添加到链接中)。
关于网络浏览器 PDF 查看器的注意事项
在网络浏览器的 PDF 查看器中,如果您的基本 URL(文档的 URL)使用该file:
方案,则所有相关链接似乎都被禁用(大概是出于安全原因)。