![ビーマーのフレーム環境の \href リンク内のポンド記号 #](https://rvso.com/image/400347/%E3%83%93%E3%83%BC%E3%83%9E%E3%83%BC%E3%81%AE%E3%83%95%E3%83%AC%E3%83%BC%E3%83%A0%E7%92%B0%E5%A2%83%E3%81%AE%20%5Chref%20%E3%83%AA%E3%83%B3%E3%82%AF%E5%86%85%E3%81%AE%E3%83%9D%E3%83%B3%E3%83%89%E8%A8%98%E5%8F%B7%20%23%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
編集: コメントでは、環境[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}