我正在尝试使用包含空格的绝对文件路径链接到 pdf 中的本地文件(这无法避免,因为文件存储在 iCloud 中,而 iCloud 的本地文件路径已经包含空格)。对于 ,\url
有一个选项obeyspaces
允许我直接插入文件路径,而不必将空格更改为%20
。但是此选项不适用于\href
。有没有办法让它\href
吸收输入\url
?
下面是 MWE。
\documentclass{article}
\PassOptionsToPackage{obeyspaces}{url}
\usepackage{hyperref}
\def\absolutepath{/Users/username/Library/Mobile Documents/com\string~apple\string~CloudDocs}
\def\bookpath{The Path/For The/PDF File.pdf}
\begin{document}
\href{file://\absolutepath/\bookpath#page=40}{p.\,40}
\url{file://\absolutepath/\bookpath#page=40}
\end{document}
答案1
如果你通过在开头添加来解压缩pdf
\ExplSyntaxOn\sys_ensure_backend:\pdf_uncompress:\ExplSyntaxOff
您可以检查链接注释。
对于 URL,创建一个(实际上是两个)动作类型 URI 的链接注释:
/Subtype/Link
/A<<
/Type/Action
/S/URI
/URI(file:///Users/username/Library/Mobile\040Documents/com~apple~CloudDocs/The\040Path/For\040The/PDF\040File.pdf#page=40)
>>
该值实际上是有错误的(但无论如何在大多数查看器中可能都会起作用):用于\040
空格,但 url 应该是百分比编码。
为第一个 hyperref 创建文件链接 (GotoR):
/Subtype/Link
/A<</S/GoToR
/F(/Users/username/Library/Mobile\040Documents/com~apple~CloudDocs/The\040Path/For\040The/PDF\040File.pdf)
/D(page=40)>>
如果本地路径正确并且没有安全设置阻止打开文件,它应该可以正常工作。
如果使用 \DocumentMetadata 加载 pdfmanagement,则可以有更多选项来强制操作类型并自动对 URL 进行百分比编码:
\DocumentMetadata{} %load pdfmanagement
\documentclass{article}
\PassOptionsToPackage{obeyspaces}{url}
\usepackage{hyperref}
\def\absolutepath{/Users/username/Library/Mobile Documents/com\string~apple\string~CloudDocs}
\def\bookpath{The Path/For The/PDF File.pdf}
\begin{document}
\hrefpdf{file://\absolutepath/\bookpath#page=40}{p.\,40} %GoToR link
\hrefurl[urlencode]{file://\absolutepath/\bookpath#page=40}{p.\,40} %URI link
\url[urlencode]{file://\absolutepath/\bookpath#page=40}
\end{document}