在 beamer 的框架环境中 \href 链接中的井号 #

在 beamer 的框架环境中 \href 链接中的井号 #

虽然在链接中使用井号 # 通常没有问题\href(请参阅带 #(数字符号)的超链接frame),它在 的环境中不起作用beamer

\documentclass{beamer}

\usepackage{hyperref}

\begin{document}
\begin{frame}
\href{http://de.wikipedia.org/wiki/Hybridorbital#Beispiele}{Wiki}
\end{frame}
\end{document}

这会导致错误! Illegal parameter number in definition of \iterate.

但是,删除frame环境后,编译就正常了。所以我的问题是,如何在环境中包含\href带有符号 # 的链接?framebeamer


编辑:一条评论建议将该选项添加[fragile]frame环境中。虽然这解决了上面的 MWE,但它无法解决下面的 MWE 也因链接中的井号 # 而崩溃的问题\href

\documentclass{beamer}

\usepackage{hyperref}

\begin{document}
\begin{frame}[fragile]
\only<1>{\href{http://de.wikipedia.org/wiki/Hybridorbital#Beispiele}}{Wiki}
\end{frame}
\end{document}

但是,这会出现错误,! Illegal parameter number in definition of \beamer@doifinframe.请从链接中删除井号 #,并且它可以编译而不会出现错误。

答案1

beamer在实际排版任何内容之前扫描整个frame环境,这会导致逐字内容出现问题,因为在实际排版之前无法“看到”它,或者标记化发生得太早而无法工作。

本质上,第一个例子中发生的事情是:

\def\iterate{Hybridorbital#Beispiele}

引发错误:

! Illegal parameter number in definition of \iterate.
<to be read again>
                   B
l.4 \def\iterate{Hybridorbital#B

下一个示例显示了相同的问题,只不过问题不是在beamer扫描时发生的frame,而是在获取参数时发生的\only。根据经验,不要将逐字命令用作其他命令的参数。

要解决此问题,您可以退出#。 的文档\href说:

在此处输入图片描述

因此这是有效的(因为\#它不是“特殊”字符#):

\documentclass{beamer}
\usepackage{hyperref}
\begin{document}
\begin{frame}
\only<1>{\href{http://de.wikipedia.org/wiki/Hybridorbital\#Beispiele}{Wiki}}
\end{frame}
\end{document}

相关内容