beamer hyperref url 带有 %20 失控参数

beamer hyperref url 带有 %20 失控参数

我想在 beamer notes 中使用 URL。如果 URL 包含,%20它似乎会导致 xelatex 出现问题。

\documentclass{beamer}
\usepackage{hyperref}

\begin{document}

 \begin{frame}
 \note{\href{http://www.example.com/A%20B%20C.pdf}{some text}}
 \end{frame}

\end{document}

出现以下错误:

Runaway argument?
\note {\href {http://www.example.com/A\end {frame} \par \end {documen\ETC.
! File ended while scanning use of \frame.
<inserted text>
                \par
<*> test

?

查看此网站上的其他问题似乎表明在链接中使用%20是可以的,所以我不确定该怎么做。我想要%20而不是 空格。

答案1

一般情况下,

\href{http://www.example.com/A%20B%20C.pdf}{some text}

单独出现,也就是说,不在宏的参数中,因为\href在吸收 URL 时会暂停 TeX 的常规读取规则。然而,类似

\mbox{\href{http://www.example.com/A%20B%20C.pdf}{some text}}

会带来麻烦(\mbox用于代表任何带有参数的命令),因为 TeX 的读取规则是不是\mbox当吸收其论点时被暂停。

在这种情况下,您可以转义百分比字符:

\mbox{\href{http://www.example.com/A\%20B\%20C.pdf}{some text}}

因为知道在制作内部 URL 时\href如何转换为真正的百分比字符。\%

另一方面,beamer你不能使用“裸”形式,因为frame环境的内容被吸收,就好像它是宏的参数一样,所以它与情况相同\mbox。然而,输入

\begin{frame}
\note{\href{http://www.example.com/A\%20B\%20C.pdf}{some text}}
\end{frame}

应该管用。


顺便说一句,请养成\end{frame}在同一行中输入时前面不加空格的习惯,因为如果您将选项添加fragile\begin{frame},前面的空格\end{frame}会产生奇怪的错误。

相关内容