pdfTeX 警告:具有相同标识符的目标已被使用,重复被忽略(奇怪的行为)

pdfTeX 警告:具有相同标识符的目标已被使用,重复被忽略(奇怪的行为)

这是一个简单的例子:

\documentclass{amsart}

\usepackage{amsthm}
\usepackage[pdftex]{hyperref}

\newtheoremstyle{myexercise}{\baselineskip}{\baselineskip}{}{}{\bfseries}{.}{ }{\thmname{#1}\thmnumber{ #2}\thmnote{ (#3)}}
\newtheoremstyle{mypart}{\baselineskip}{\baselineskip}{}{}{\bfseries}{}{\newline}{\thmname{#1}\thmnumber{ #2}\thmnote{ -- #3}}

\theoremstyle{myexercise}
\newtheorem{Exo}{Exercise}
\theoremstyle{mypart}
\newtheorem{Part}{Part}[Exo]
\renewcommand*\thePart{\Roman{Part}}

\begin{document}
\begin{Exo}[A cool exercise]
\begin{Part}
\label{p:ex1:I}
Prove that $1=0$.
\end{Part}
\begin{Part}
Deduce from Part~\ref{p:ex1:I} that this exercise is wrong.
\end{Part}
\end{Exo}

\begin{Exo}
\begin{Part}
Let $a=b$. Deduce that $0=0$.
\end{Part}
\begin{Part}
Let $a=42$. For what values of $b$ do we have $a=b$?
\end{Part}
\end{Exo}
\end{document}

我收到的警告如下:

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

\AtBegShi@Output ...ipout \box \AtBeginShipoutBox \fi \fi l.35 \end{document} pdfTeX 警告 (ext4): 具有相同标识符 (name{Part.2.1}) 的目标已被使用,重复项已忽略

\AtBegShi@Output...ipout\box\AtBeginShipoutBox\fi\fi l.35\end{document}](./TestHyperref.aux))

我觉得这似乎是一种奇怪的行为。还是我做错了什么?

此外,如果我使用例如在 Part 环境中枚举,错误就会完全消失,如下所示

...
\begin{Part}
\begin{enumerate}
\item Prove that $1=0$.
\end{enumerate}
\end{Part}
...

另外,如果我删除 hyperref 包,也不会出现错误。不幸的是,我需要使用 hyperref。

任何想法?

答案1

尝试

\usepackage[hypertexnames=false]{hyperref} 

答案2

可以使用和的嵌套定理article.clsntheorem现在问题似乎来自amsart和之间的冲突hyperrefntheorem有一个选项可以避免与的兼容性hyperref

\documentclass{article}
\usepackage[pdftex]{hyperref}
\usepackage[hyperref]{ntheorem}  

\newtheorem{Exo}{Exercise}
\newtheorem{Part}{Part}[Exo]
\renewcommand*\thePart{\Roman{Part}} 

\begin{document} 
\begin{Exo}[A cool exercise]
\begin{Part}
\label{p:ex1:I}
Prove that $1=0$.
\end{Part}
\begin{Part}
Deduce from Part~\ref{p:ex1:I} that this exercise is wrong.
\end{Part}
\end{Exo}

\begin{Exo}
\begin{Part}
Let $a=b$. Deduce that $0=0$.
\end{Part}
\begin{Part}
Let $a=42$. For what values of $b$ do we have $a=b$?
\end{Part}
\end{Exo} 
\end{document}

问题似乎出在amsart和之间hyperref

答案3

经过大量搜索,我终于找到了一个简单的解决方案:hyperref在任何 ams 包之前加载。逐个替换amsart文档类article并将hyperref包拉到该类之上amsthm解决了我的问题。

但它并不总是有效。它可以减少此类警告的数量,在某些情况下甚至可以使它们消失。

然而,对于那些确实想使用该amsart课程的人来说,这仍然不是一个解决方案......

答案4

我似乎遇到了这个问题,发现原因是没有加载包siunitx。我不知道为什么会有这种影响,但确实如此。

相关内容