我收到如下一堆警告:
l.3387 \end{align}
pdfTeX warning (ext4): destination with the same identifier (
name{equation.0.24}) has been already used, duplicate ignored
<to be read again>
\relax
l.3392 \end{align}
但是,我没有重复命名任何方程式或图形。
然后它完成了:
LaTeX Warning: There were multiply-defined labels.
??
再次,文档中没有,也没有任何东西被标记为相同的名称。
什么原因造成这种情况?如何避免?
我有一些标有符号的方程式和图形,但未引用,因为我不知道是否会引用它们,所以我还是以任何方式标记了它们。这有问题吗?
只是为了验证,我没有使用equation
或eqnarray
环境。
以下可能是序言中的重要内容:
\documentclass[11pt, letter]{article}
\usepackage{amsmath}
\usepackage{amsthm}
\usepackage{capt-of}
\usepackage{subfig}
\captionsetup[subfigure]{labelformat = parens}
\usepackage[pdfencoding = auto, psdextra, bookmarksdepth = 4]{hyperref}
\usepackage[noabbrev]{cleveref}
\usepackage{bookmark}
\usepackage[all]{hypcap}
我将项目标记为\label{somenameIcreate}
。如果是图形,我会以创建独立图形的文件命名.tex
。因此,如果我在名为 的 tex 文件中创建了图形ellipticaltrajmars.tex
,其标签将是\label{ellipticaltrajmars}
。
文件中是否.aux
有任何有用的东西?我知道它有标签,但如果其中有东西可以闪闪发光,我会在其中寻找什么?
答案1
经过一些实验,我找到了问题的原因;以下 MWE 可以重现该问题:
\documentclass{article}
\usepackage{amsmath}
\usepackage{chngcntr}
\usepackage[pdfencoding = auto, psdextra, bookmarksdepth = 4]{hyperref}
\usepackage[noabbrev]{cleveref}
\counterwithin{equation}{section}
\begin{document}
\section{Test section}
\ref{equ:testa}~\ref{equ:testb}
\begin{subequations}
\begin{align}
a=b\label{equ:testa}
\end{align}
\end{subequations}
\section{Another test section}
\begin{subequations}
\begin{align}
c=d\label{equ:testb}
\end{align}
\end{subequations}
\end{document}
此代码产生以下警告消息:
warning (ext4): destination with the same identifier (name{equation.0.1}) has b
een already used, duplicate ignored
\AtBegShi@Output ...ipout \box \AtBeginShipoutBox
\fi \fi
l.28 \end{document}
pdfTeX warning (ext4): destination with the same identifier
(name{equation.0.1a}) has been already used, duplicate ignored
\AtBegShi@Output ...ipout \box \AtBeginShipoutBox
\fi \fi
l.28 \end{document}
] (./a.aux) )
问题在于:
\usepackage[pdfencoding = auto, psdextra, bookmarksdepth = 4]{hyperref}
\usepackage[noabbrev]{cleveref}
\counterwithin{equation}{section}
使用\counterwithin
后 cleveref
hyperref
与+产生不良交互cleveref
(如果注释掉 loading 行cleveref
,问题就会消失)。解决方案是将行\counterwithin
前加载中cleveref
:
\usepackage[pdfencoding = auto, psdextra, bookmarksdepth = 4]{hyperref}
\counterwithin{equation}{section}
\usepackage[noabbrev]{cleveref}
答案2
我认为问题出在计数器上。如果我们手动设置方程计数器,则会导致此类问题。请考虑以下示例:
\documentclass{article}
\usepackage{hyperref}
\usepackage{amsmath}
\begin{document}
\begin{equation}
\mbox{Equation is given number but nonumber restores the value of equation counter.}\nonumber
\end{equation}
\begin{equation}
\mbox{This equation is assigned the same number as the previous one because counter was reset.}
\end{equation}
\end{document}
这里我们得到了警告。但如果我们使用带星号的等式版本,则\begin{equation*}...\end{equation*}
如下\nonumber
所示:
\documentclass{article}
\usepackage{hyperref}
\usepackage{amsmath}
\begin{document}
\begin{equation*}
\mbox{Equation is not given any number.}
\end{equation*}
\begin{equation}
\mbox{This equation is assigned unused number.}
\end{equation}
\end{document}
并且没有任何警告。同样的事情也发生在贡萨洛·梅迪纳,子方程 - 计数器在部分更改时重置。如果我们使用align
环境/nonumber
,则不会发生此问题。原因是以/nonumber
不同的方式处理。
答案3
好的,我找到了问题所在。下面是一个重现该问题的最小示例:
\documentclass{minimal}
\usepackage{amsmath}
\usepackage{hyperref}
\begin{document}
\begin{equation}\tag{1}
1
\end{equation}
\begin{equation}
2
\end{equation}
\end{document}
amsmath
当你使用和hyperref
包时,在环境\tag
中使用命令时,就会出现问题,equation
和equation
稍后使用另一个环境。
为了避免此问题,请将equation
使用 的环境\tag
更改为gather
。(无需更改equation
不使用 的环境\tag
。)