遵守 \href 的空格

遵守 \href 的空格

我正在尝试使用包含空格的绝对文件路径链接到 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}

相关内容