什么原因导致 pdfTeX 警告(ext4)以及如何避免它?

什么原因导致 pdfTeX 警告(ext4)以及如何避免它?

我收到如下一堆警告:

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.

??再次,文档中没有,也没有任何东西被标记为相同的名称。

什么原因造成这种情况?如何避免?

我有一些标有符号的方程式和图形,但未引用,因为我不知道是否会引用它们,所以我还是以任何方式标记了它们。这有问题吗?

只是为了验证,我没有使用equationeqnarray环境。

在此处输入图片描述

以下可能是序言中的重要内容:

\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 cleverefhyperref与+产生不良交互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中使用命令时,就会出现问题,equationequation稍后使用另一个环境。

为了避免此问题,请将equation使用 的环境\tag更改为gather。(无需更改equation不使用 的环境\tag。)

相关内容