有时我们在 AMS 定理中使用列表。出于某种原因,当列表\label
在定理最开始的 之后到达时,超链接会损坏。只需放置一个字符或 ,超\leavevmode
链接就可以了,但当然,逐项列表的第一个条目不再是定理的第一行,而这正是我需要的。
比较:
\documentclass{book}
\usepackage{hyperref,amsmath,amsthm}
\newtheorem{coro}{Corollary}
\author{Yannis}
\title{Titre}
\begin{document}
\maketitle
\begin{coro}\label{blabla}
\begin{itemize}\item This is a corollary.\item With a list\end{itemize}
\end{coro}
As we saw in Corollary~\ref{blabla}\ldots
\end{document}
结果(我在 Mac 和 overleaf 上都试过了,都用的是 TeXlive 2020)超链接指向文档的标题。当我写
\documentclass{book}
\usepackage{hyperref,amsmath,amsthm}
\newtheorem{coro}{Corollary}
\author{Yannis}
\title{Titre}
\begin{document}
\maketitle
\begin{coro}\label{blabla}\leavevmode
\begin{itemize}\item This is a corollary.\item With a list\end{itemize}
\end{coro}
As we saw in Corollary~\ref{blabla}\ldots
\end{document}
超链接正常,但列表从低一行开始。
我怎样才能使两个条目都以推论的同一行开始,并具有正确的超链接?
答案1
这是一个已知问题,但 hyperref 目前无法解决(也不想解决),因为问题出在 amsthm 中。另请参阅https://github.com/latex3/hyperref/issues/48
正如评论中提到的,cleveref 修补程序\@thm
可以解决问题。因此,加载包是一种选择。另一种方法是手动设置缺失的目标:
\documentclass{book}
\usepackage{amsmath,amsthm}
\usepackage{hyperref}
\newtheorem{coro}{Corollary}
\author{Yannis}
\title{Titre}
\begin{document}
\maketitle
xxxxx
\begin{coro}\label{blabla}\hypertarget{\csname @currentHref\endcsname}{}%\leavevmode
\begin{itemize}\item This is a corollary.\item With a list\end{itemize}
\end{coro}
\newpage
As we saw in Corollary~\ref{blabla}\ldots
\end{document}
在日志中可以看到缺少目标:
pdfTeX warning (dest): name{coro.1} has been referenced but does not exist, replaced by a fixed one