问题
你好。我目前正在写论文,并将方程式按部分编号。我也使用subequations
。但是,amsmath
当我一起使用amsmath
、hyperref
和cleveref
时,我会收到 2 条有关具有相同标识符的目标的警告。结果是\cref{eq:2a}
pdf 中的编号正确,但超链接指向eq:1a
。
数学方程
\documentclass{book}
\usepackage{amsmath}
\usepackage{hyperref}
\usepackage{cleveref}
\numberwithin{equation}{section}
\begin{document}
This is a test.
\section{Section 1}
\begin{subequations}\label{eq:1}
\begin{align}
x=y\label{eq:1a}
\end{align}
\end{subequations}
\section{An error}
\begin{subequations}\label{eq:2}
\begin{align}
1=2\label{eq:2a}
\end{align}
\end{subequations}
\end{document}
辅助
果然,
\newlabel{eq:1}{{0.1.1}{1}{Section 1\relax }{equation.0.0.1.1}{}}
\newlabel{eq:1@cref}{{[equation][1][0,1]0.1.1}{1}}
\newlabel{eq:1a}{{0.1.1a}{1}{Section 1\relax }{equation.0.0.1a}{}}
\newlabel{eq:1a@cref}{{[equation][1][0,1]0.1.1a}{1}}
\@writefile{toc}{\contentsline {section}{\numberline {0.2}An error}{1}{section.0.2}}
\newlabel{eq:2}{{0.2.1}{1}{An error\relax }{equation.0.0.1.1}{}}
\newlabel{eq:2@cref}{{[equation][1][0,2]0.2.1}{1}}
\newlabel{eq:2a}{{0.2.1a}{1}{An error\relax }{equation.0.0.1a}{}}
\newlabel{eq:2a@cref}{{[equation][1][0,1]0.2.1a}{1}}
警告
pdfTeX warning (ext4): destination with the same identifier (name{equation.0.0.1a}) has been already used, duplicate ignored
pdfTeX warning (ext4): destination with the same identifier (name{equation.0.0.1.1}) has been already used, duplicate ignored
该怎么办?
所有软件包也都已更新。因此,我尝试了一些方法,可以让它在没有任何警告的情况下正常工作,但从我的角度来看,没有一个是理想的解决方案。
- 移除所有
subequations
- 删除行
\numberwithin{equation}{section}
- 删除包
cleveref
- 删除包
hyperref
这无疑与如果方程式带有 \tag 并且使用了 cleveref,则 Hyperref 会跳转到错误的方程式并且使用 `hyperref` 交叉引用链接到错误的方程式但我无法利用这些问答来帮助我。
如果有人能够阐明这个问题或者提出解决方法我将不胜感激。
提前致谢!
答案1
因此,我通过尝试调用包和行的时间找到了以下解决方案,结果表明,如果\numberwithin{}{}
在之前调用该行\cleveref
,则不会出现任何警告,并且超链接会按预期工作,即
\documentclass{book}
\usepackage{amsmath}
\usepackage{hyperref}
\numberwithin{equation}{section}
\usepackage{cleveref}
\begin{document}
...
\end{document}
我不知道这些软件包的底层发生了什么,所以我很想知道为什么会这样。这似乎(至少对我来说)hyperref
和之间的行为相当奇怪,cleveref
但也许这是可以预料到的。
同时,感谢所有帮我查看这个问题的人!