ビーマーのフレーム環境の \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にシンボル # を含むリンクを含めるにはどうすればよいのでしょうか?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}

関連情報