$\mathbb{Z}$
(来自 amsfonts)作为第一个参数会导致错误\hyperlink{}{}
,但作为第二个参数不会发生错误:
\documentclass{book}
\usepackage{amsfonts}
\usepackage[hyperindex]{hyperref}
\hypersetup{linktocpage=true,colorlinks}
\begin{document}
Works: Integers \protect\hyperlink{link:$Z$}{$Z$}
Works: Integers \protect\hyperlink{link:$Z$}{$\mathbb{Z}$}
%Fails: Integers \protect\hyperlink{integers $\mathbb{Z}$}{$Z$}
\end{document}
当我取消注释倒数第二行时出现错误消息:Undefined control sequence. \GenericError ... #4 \erhelp \@err@...
我该如何避免这种情况?
这个问题是在编写宏时出现的,该宏将主文本中的关键字链接到索引,使用关键字作为超链接的第一个和第二个参数。无论关键字是什么,我都希望它能正常工作。
答案1
你写了,
$\mathbb{Z}$
(来自amsfonts
)在 中用作第一个参数时会导致错误\hyperlink{}{}
。... 在编写将关键字从主文本链接到索引的宏时出现了此问题,使用关键字作为超链接的第一个和第二个参数。无论关键字是什么,我都希望它能正常工作。
我认为以下候选解决方案可能会引发进一步的问题,[*] 但“强化” \hyperlink
(and \hypertarget
...) 第一个参数中使用的宏名称——无论是\mathbb
or,\mathcal
——似乎可以完成工作。更一般地说,如果“关键字”一开始就不“强大”,那么通过运行\robustify
它来使其变得强大。
一般性评论:这种方法似乎是次优(甚至第三优!)解决方案。更好的方法是在和$
的第一个参数中不使用任何宏或任何“活动”字符(例如)。\hyperlink
\hypertarget
[*] TeXperts 可能会指出不使用\robustify
此方式的充分理由...
这是一个完整的 MWE。\hypertarget
设置“目标”,并\hyperlink
提供由建立的目标的“链接” \hypertarget
。
\documentclass{article}
\usepackage{amssymb} % for '\mathbb'
\usepackage[hyperindex]{hyperref}
\hypersetup{linktocpage=true,colorlinks}
\usepackage{etoolbox} % for '\robustify' macro
\robustify{\mathbb}
\robustify{\mathcal}
\begin{document}
\hypertarget{$Z$}{Target: $Z$}
\clearpage
\hypertarget{$\mathbb{Z}$}{Target: $\mathbb{Z}$}
\clearpage
\hypertarget{$\mathcal{Z}$}{Target: $\mathcal{Z}$}
\clearpage
\hyperlink{$Z$}{link to $Z$}
\hyperlink{$\mathbb{Z}$}{link to $\mathbb{Z}$}
\hyperlink{$\mathcal{Z}$}{link to $\mathcal{Z}$}
\end{document}