Sinal de cerquilha # no link \href no ambiente de quadro do beamer

Sinal de cerquilha # no link \href no ambiente de quadro do beamer

Embora normalmente não haja problema em ter o sinal de cerquilha # em um \hreflink (vejaHiperlink com # (sinal numérico)), ele não funciona em um frameambiente no beamer.

\documentclass{beamer}

\usepackage{hyperref}

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

Isso resulta no erro! Illegal parameter number in definition of \iterate.

Remova o frameambiente, porém, e ele compilará bem. Então minha dúvida é: como posso incluir um \hreflink com o símbolo # em um frameambiente em beamer?


EDIT: Um comentário sugere adicionar a opção [fragile]ao frameambiente. Embora isso resolva o MWE acima, não corrigirá o fato de o MWE abaixo também travar por causa do sinal de cerquilha # no \hreflink:

\documentclass{beamer}

\usepackage{hyperref}

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

Isso gera o erro ! Illegal parameter number in definition of \beamer@doifinframe.Remova o sinal de cerquilha # do link e ele compila sem erros.

Responder1

beamerverifica todo o frameambiente antes de realmente compor qualquer coisa, e isso leva a problemas com o conteúdo literal, porque ele não pode ser "visto" antes de ser realmente composto, ou a tokenização acontecerá muito cedo e não funcionará.

Essencialmente, o que acontece no seu primeiro exemplo é:

\def\iterate{Hybridorbital#Beispiele}

que gera o erro:

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

O próximo exemplo mostra o mesmo problema, exceto que o problema não acontece durante beamera varredura do frame, mas quando ele captura o argumento do \only. Como regra geral, não use comandos literais como argumento para outros comandos.

Para contornar o problema, você pode escapar do arquivo #. A documentação de \hrefdiz:

insira a descrição da imagem aqui

Então isso funciona (porque \#não é o caractere "especial" #):

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

informação relacionada