![投影機框架環境中 \href 連結中的井號 #](https://rvso.com/image/400347/%E6%8A%95%E5%BD%B1%E6%A9%9F%E6%A1%86%E6%9E%B6%E7%92%B0%E5%A2%83%E4%B8%AD%20%5Chref%20%E9%80%A3%E7%B5%90%E4%B8%AD%E7%9A%84%E4%BA%95%E8%99%9F%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}