虽然在链接中使用井号 # 通常没有问题\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
带有符号 # 的链接?frame
beamer
编辑:一条评论建议将该选项添加[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}