![为什么使用 \numberwithin 时,方程式和表格的超链接工作方式不同?](https://linux22.com/image/474336/%E4%B8%BA%E4%BB%80%E4%B9%88%E4%BD%BF%E7%94%A8%20%5Cnumberwithin%20%E6%97%B6%EF%BC%8C%E6%96%B9%E7%A8%8B%E5%BC%8F%E5%92%8C%E8%A1%A8%E6%A0%BC%E7%9A%84%E8%B6%85%E9%93%BE%E6%8E%A5%E5%B7%A5%E4%BD%9C%E6%96%B9%E5%BC%8F%E4%B8%8D%E5%90%8C%EF%BC%9F.png)
这是一个关于幕后发生了什么的问题,因为我已经知道一些获得所需输出的方法。我的问题是,numberwithin/hyperref 组合对方程式和表格的行为不同,原因是什么。也就是说,以下代码存在表 3.1 的超链接实际上指向表 2.1 的问题。但方程式 3.1 的超链接正确地指向方程式 3.1。我知道可以通过将 \numberwithin 命令移到 \usepackage{hyperref} 之后(或通过其他方法)来解决这个问题。但我不明白为什么以下代码对方程式和表格的行为不同,我想知道这是否是一些更普遍的事情的一个例子,我应该了解一下。(La)TeX 处理方程式和表格的方式是否有一些通用的不同之处?
\documentclass{amsart}
\usepackage{amsmath}
\numberwithin{equation}{section}
\numberwithin{table}{section}
\usepackage[colorlinks]{hyperref}
\begin{document}
\section{Introduction}
Cite equations \eqref{eq1} and \eqref{eq2}, and Tables \ref{table1} and \ref{table2}.
\newpage
\section{Body}
\begin{equation}\label{eq1}
2+2=4
\end{equation}
\begin{table}[htbp]
\caption{}
\label{table1}
\begin{tabular}{|c|c|}
\hline
1&2 \\ \hline
3&4 \\ \hline
\end{tabular}
\end{table}
\newpage
\section{Conclusion}
\begin{equation}\label{eq2}
4+4=8
\end{equation}
\begin{table}[htbp]
\caption{}
\label{table2}
\begin{tabular}{|c|c|}
\hline
5&6 \\ \hline
7&8 \\ \hline
\end{tabular}
\end{table}
\end{document}
答案1
您会收到来自 pdftex 的有关目标名称重复的警告:
pdfTeX warning (ext4): destination with the same identifier (name{table.1}) has
been already used, duplicate ignored
原因是 hyperref 假定表具有唯一编号,并为目标创建table.1
。
如果移动\numberwithin{table}{section}
后面的超引用,超引用也可以启动并调整目标名称(然后它将使用table.1.1
等table.2.1
)。
另一种方法是手动调整目的地名称:
\renewcommand\theHtable{\thetable}
方程式有所不同,因为历史上某个时候 hyperref 认为无论如何添加节号都是更安全的。因此它包含定义
\providecommand\theHequation{\theHsection.\arabic{equation}