这是一个展示我的问题的最小示例:
\documentclass{article}
\usepackage{amsthm}
\usepackage{hyperref}
\usepackage{cleveref}
\newtheorem{thm}{Theorem}
\newtheorem{lem}[thm]{Lemma}
\begin{document}
\begin{lem}
Lemma
\end{lem}
\end{document}
我收到的警告如下:
[1pdfTeX warning (ext4): destination with the same identifier (name{thm.1}) has been
already used, duplicate ignored
\AtBegShi@Output ...ipout \box \AtBeginShipoutBox
\fi \fi
l.16 \end{document}
{<install dir>/MiKTeX/2.9/pdftex/config/pdftex.map}]
我知道这只是一个警告,并且我的文档在交叉引用和超链接方面仍然可以正常工作,但我仍然想知道为什么我会收到此警告,以及是否可以采取任何措施来修复它而不删除所包含软件包的功能。
附加问题:当产生此警告(或任何通用的“具有相同标识符(name{XXX.YYY})的目的地已被使用,忽略重复”)时,幕后发生了什么,因为这不仅限于定理环境。
来自日志文件:
Package: amsthm 2004/08/06 v2.20
Package: hyperref 2011/04/17 v6.82g Hypertext links for LaTeX
Package: cleveref.sty 2011/03/22 v0.17.9 Intelligent cross-referencing
Package cleveref Info: `hyperref' support loaded on input line 2157.
Package cleveref Info: `amsthm' support loaded on input line 2300.
答案1
使用这个顺序的包:
\usepackage{hyperref}
\usepackage{amsthm}
\usepackage{cleveref}
答案2
这是一个已知问题,hyperref
与在 TeX FAQ 中讨论/回答。
回答你的“附加问题”:这是因为你使用同一个计数器来引用两个不同的东西,因为
\newtheorem{thm}{Theorem}
\newtheorem{lem}[thm]{Lemma}
这告诉 LaTeX 您想要一个名为 的新环境lem
,标签为Lemma
,但应该使用与环境thm
(标签为)相同的计数器。本质上,如果您在之前Theorem
使用了,那么相应的计数器就会增加,从而消除问题。thm
lem
附注:具体到您的最小示例:删除包cleveref
会清除此 pdfTeX 警告。但是,这可能只是因为您想说明问题。
如果你想摆脱所有这些警告,并且“文档仍然可以正常工作”,你可以使用以下命令阻止 pdfTeX 输出它们:silence
包裹。例如,添加
\usepackage{silence}% Filter out unwanted warnings and error messages
\WarningFilter{pdftex}{destination with the same}% Remove all warnings issued by pdfTeX
% (as pdfTeX Warning: 'destination with the same'...)
到您的文档序言将“静音”pdfTeX的警告,以“目标相同”开头。