$\mathbb{Z}$ 作为超链接参数失败

$\mathbb{Z}$ 作为超链接参数失败

$\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...) 第一个参数中使用的宏名称——无论是\mathbbor,\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}

相关内容