Знак решетки # в ссылке \href в среде кадра проектора

Знак решетки # в ссылке \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ссылку с символом # в frameокружение в beamer?


EDIT: В комментарии предлагается добавить опцию [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}

Связанный контент