pdfTeX 警告(ext4):具有相同标识符(name{figure.1})的目标已被使用,重复项被忽略

pdfTeX 警告(ext4):具有相同标识符(name{figure.1})的目标已被使用,重复项被忽略
% !TeX TS-program = pdflatex
% !TeX encoding = UTF-8
\documentclass{article}
\usepackage{float}
\usepackage{graphicx}
\counterwithin{figure}{section}
\usepackage{hyperref}
%\counterwithin{figure}{section}
%\usepackage[all]{hypcap}
\begin{document}

\section{one}
 \begin{figure}[H]
  \centerline{\includegraphics[width=10cm]{example-image}}
  \caption{example-image}
 \end{figure}


\clearpage
\section{two}
 \begin{figure}[htb]
  \centerline{\includegraphics[width=11cm]{example-image-a}}
  \caption{example-image-a}
 \end{figure}

\end{document}

(pdftex.def) 请求的大小:312.9803pt x 234.74237pt。pdfTeX
警告(ext4):具有相同标识符(name{figure.1})的目标已
被使用,重复项将被忽略
以再次读取>
\relax
l.23 \caption{example-image-a}

我读了

问题仍然存在

答案1

重新定义\theHfigure,以便为目标锚点提供唯一的标识符:

\documentclass{article}
\usepackage{float}
\usepackage{graphicx}
\counterwithin{figure}{section}
\usepackage{hyperref}
%\counterwithin{figure}{section}
%\usepackage[all]{hypcap}
\renewcommand\theHfigure{\thesection.\arabic{figure}}
\begin{document}

\section{one}
 \begin{figure}[H]
  \centerline{\includegraphics[width=10cm]{example-image}}
  \caption{example-image}
 \end{figure}


\clearpage
\section{two}
 \begin{figure}[htb]
  \centerline{\includegraphics[width=11cm]{example-image-a}}
  \caption{example-image-a}
 \end{figure}

\end{document}

答案2

hyperref 补丁\counterwithin,但你在 hyperref 获得修补机会之前使用它。因此使用\counterwithin 加载 hyperref 包,问题就解决了。

Ulrike 的回答只是一种变通方法,试图纠正错误的包加载和使用顺序造成的损害。恕我直言,这是错误的方法。

也可以看看https://texfaq.org/FAQ-hyperdupdest

“因此,在大多数情况下,你应该在加载 hyperref 之前加载你的软件包,然后 hyperref 会对其进行修补,使它们正常工作,这样你就可以在加载两者之后使用你的(已修补的)软件包”

在这种情况下意味着:首先加载提供的包\counterwithin(这里不需要,因为它是由最新的 LaTeX 内核提供的),hyperref然后加载(这样它可以修补\counterwithin,然后(且只有这样)使用\counterwithin

答案3

\counterwithin{figure}{section}
\usepackage[all]{hypcap}

在 hyperref-package 后的序言中。在这种情况下,\counterwithin{figure}{section}aswell\usepackage[all]{hypcap}就足够了,但有时你需要两者,这\usepackage{caption}通常也会有所帮助。

这个问题使用

相关内容