![Знак решетки # в ссылке \href в среде кадра проектора](https://rvso.com/image/400347/%D0%97%D0%BD%D0%B0%D0%BA%20%D1%80%D0%B5%D1%88%D0%B5%D1%82%D0%BA%D0%B8%20%23%20%D0%B2%20%D1%81%D1%81%D1%8B%D0%BB%D0%BA%D0%B5%20%5Chref%20%D0%B2%20%D1%81%D1%80%D0%B5%D0%B4%D0%B5%20%D0%BA%D0%B0%D0%B4%D1%80%D0%B0%20%D0%BF%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%BE%D1%80%D0%B0%20.png)
Хотя обычно нет никаких проблем с использованием знака решетки # в \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}