超链接、定理、枚举和自动引用

超链接、定理、枚举和自动引用

itemize指向以嵌套开头或经常被破坏的定理类环境的超链接enumerate(例如http://tex.stackexchange.com/a/187647)下面是 MWE:

\documentclass{amsart}

\usepackage{hyperref}

\newtheorem{theorem}{Theorem}

\begin{document}

\begin{theorem}
\label{bigthm}
\begin{itemize}
\item A claim.
\item Another claim.
\end{itemize}
\end{theorem}

Let's prove Theorem~\ref{bigthm}.

\end{document}

这会产生一个警告:

pdfTeX warning (dest): name{theorem.1} has been
referenced but does not exist, replaced by a fixed one

并且超链接不起作用。

(顺便说一句,如果我们使用article而不是amsart,那么一切都会按预期工作。是什么让 AMS 文档类的行为有所不同?)

\leavevmode一个解决方案是在之后添加\label{bigthm}

\begin{theorem}
\label{bigthm}\leavevmode
\begin{itemize}[...]

这修复了超链接,但当然也改变了格式,这是我不想要的。

一个更好的解决方案(感谢,Simon!),它不会改变格式,而是\phantomsection在之前添加\label{bigthm}

\begin{theorem}
\phantomsection\label{bigthm}
\begin{itemize}[...]

现在一切正常。太棒了!

然而,可惜的是,这个更好的解决方案不适用于\autoref

Let's prove~\autoref{bigthm}.

现在可以生产Let’s prove section 1.(尽管带有有效的超链接)。

\autoref所以我的问题是:有没有办法在不改变格式的情况下修复超链接?

答案1

带有 的版本\fakephantomsection,它使用\@currenvir,即当前环境名称,以获取正确的自动引用名称。

这与所做的基本相同\phantomsection,但使用了正确的环境名称。

该问题已为人所知,并在以下文档中提及amsart

• amsthm 固有的其他问题。

◦ 当定理以列表开头时,对第一项进行超链接

\documentclass{amsart}



\usepackage{hyperref}
\newtheorem{theorem}{Theorem}

\makeatletter
\newcommand{\fakephantomsection}{%
  \Hy@MakeCurrentHref{\@currenvir.\the\Hy@linkcounter}
  \Hy@raisedlink{\hyper@anchorstart{\@currentHref}\hyper@anchorend}%
}
\makeatother



\begin{document}

\tableofcontents

\clearpage
\section{Foo}
\begin{theorem}
\fakephantomsection\label{bigthm}
\begin{itemize}
\item A claim.
\item Another claim.
\end{itemize}
\end{theorem}

Let's prove Theorem~\ref{bigthm} \autoref{bigthm}.

\end{document}

在此处输入图片描述

答案2

我正在使用另一个答案中提出的命令的修改:

\newcommand*{\fakephantomsection}{%
  \Hy@GlobalStepCount\Hy@linkcounter%
  \Hy@MakeCurrentHref{\@currenvir.\the\Hy@linkcounter}%
  \Hy@raisedlink{\hyper@anchorstart{\@currentHref}\hyper@anchorend}%
}

相关内容