我的问题与使用 hyperref 包对小节进行编号有关。我发现引用方程式会打印正确的数字,但单击时会转到错误的位置。我发现可以通过添加选项来解决这个问题
hypertexnames = false
加载 hyperref 时。但是我想知道为什么这个问题会存在(如果添加“hypertexnames = false”,我不明白,这是否会引起其他问题)?
下面的示例,单击时引用会转到错误的位置。它应该转到“第二个方程”,但却转到了“第一个方程”。
可以通过加载 \usepackage[hypertexnames = false]{hyperref} 而不是 \usepackage{hyperref} 来修复此示例。
\documentclass{article}
\usepackage{amsmath}
\numberwithin{equation}{subsection}
\usepackage{hyperref}
\title{Equation numbering troubleshooting}
\author{Author}
\date{September 2022}
\begin{document}
\maketitle
\section{}
\subsection{}
\begin{equation}
First equation
\end{equation}
\newpage
\subsection{}
\begin{equation}\label{equation}
Second equation
\end{equation}
Equation \eqref{equation}. Equation \ref{equation}.
\end{document}
答案1
问题在于,您的代码\numberwithin
是在加载 hyperref 之前使用的,而不是在加载 hyperref 之后使用的。
这也是为什么您的代码会在控制台和 .log 文件中出现许多警告的原因:
pdfTeX warning (ext4): destination with the same ident
ifier (name{equation.1.1}) has been already used, duplicate ignored
<to be read again>
\relax
l.25 \begin{equation}
\label{equation}pdfTeX warning (ext4): destination wit
h the same identifier (name{equation.1.1}) has been already used, duplicate ign
ored
<to be read again>
\relax
l.25 \begin{equation}
\label{equation}pdfTeX warning (ext4): destination wit
h the same identifier (name{equation.1.1}) has been already used, duplicate ign
ored
<to be read again>
\relax
l.25 \begin{equation}
\label{equation}pdfTeX warning (ext4): destination wit
h the same identifier (name{equation.1.1}) has been already used, duplicate ign
ored
<to be read again>
\relax
l.25 \begin{equation}
\label{equation} [2] (./test.aux) )
(see the transcript file for additional information)<
根据经验法则,确保\numberwithin
(以及影响 LaTeX 计数器基础设施的任何其他事项)得到执行后加载包 hyperref — 这样 hyperref\theH...
用于传递命名目的地名称的宏也会进行调整:
\documentclass{article}
\usepackage{amsmath}
\usepackage{hyperref}
\numberwithin{equation}{subsection}
\title{Equation numbering troubleshooting}
\author{Author}
\date{September 2022}
\begin{document}
\maketitle
\section{}
\subsection{}
\begin{equation}
First equation
\end{equation}
\newpage
\subsection{}
\begin{equation}\label{equation}
Second equation
\end{equation}
Equation \eqref{equation}. Equation \ref{equation}.
\end{document}