这是一个简单的例子:
\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.cls
,ntheorem
现在问题似乎来自amsart
和之间的冲突hyperref
。ntheorem
有一个选项可以避免与的兼容性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
。我不知道为什么会有这种影响,但确实如此。