![Hyperref:具有相同标识符 (...) 的目标已被使用,重复项被忽略](https://linux22.com/image/331614/Hyperref%EF%BC%9A%E5%85%B7%E6%9C%89%E7%9B%B8%E5%90%8C%E6%A0%87%E8%AF%86%E7%AC%A6%20(...)%20%E7%9A%84%E7%9B%AE%E6%A0%87%E5%B7%B2%E8%A2%AB%E4%BD%BF%E7%94%A8%EF%BC%8C%E9%87%8D%E5%A4%8D%E9%A1%B9%E8%A2%AB%E5%BF%BD%E7%95%A5.png)
来自 MWE:
\documentclass{memoir}
\usepackage{graphicx}
\newsubfloat{figure}
\usepackage{hyperref}
\begin{document}
\begin{figure}[h]
\subbottom[Image A]{\includegraphics[width=0.5\columnwidth]{example-image-a}}
\end{figure}
\begin{figure}
\subbottom[Image B]{\includegraphics[width=0.5\columnwidth]{example-image-b}}
\end{figure}
\end{document}
我收到警告destination with the same identifier (name{subfigure.1}) has been already used, duplicate ignored
。如果[h]
或\usepackage{hyperref}
被删除,警告就会消失。
- 为什么我会收到此警告?
- 如何最好地解决这个问题?
- 继续发出这个警告会有什么后果?
cleveref
(我在我的非 MWE 文档中收到了几个这样的警告,但我仍然想使用和链接到包括页码的子图varioref
。)
答案1
hyperref
需要加载包前 \newsubfloat
。宏调用\@addtoreset
,它由 提供支持并进行了修补,以hyperref
修复锚点名称问题。但如果之前调用过该宏,则 的原始版本在\@addtoreset
没有修补的情况下被调用,并且必须手动修复锚点名称。但如果顺序正确,则无需这样做:
\documentclass{memoir}
\usepackage{graphicx}
\usepackage{hyperref}
\newsubfloat{figure}
\begin{document}
\begin{figure}[h]
\subbottom[Image A]{\includegraphics[width=0.5\columnwidth]{example-image-a}}
\caption{First}
\end{figure}
\begin{figure}
\subbottom[Image B]{\includegraphics[width=0.5\columnwidth]{example-image-b}}
\caption{Second}
\end{figure}
\end{document}