结合使用 amsmath、hyperref 和 \tag 时引用不正确

结合使用 amsmath、hyperref 和 \tag 时引用不正确

在以下 MWE 中,我收到一条警告,并且引用指向错误的元素。

\documentclass{article}
\usepackage{hyperref}
\usepackage{amsmath}
\begin{document}
    \begin{equation}
        \label{eq1}
    \end{equation}

    \begin{equation}\tag{\ref*{eq1}b}
        \label{eq1b}
    \end{equation}

    \begin{equation}
        \label{eq2}
    \end{equation}

This reference is incorrect: \ref{eq2} points to 1b. Also, this warnings appear:
\begin{verbatim}
        pdfTeX warning (ext4): destination with the same identifier
        (name{equation.0.2}) has been already used, duplicate ignored
    \end{verbatim}
\end{document}

在此变体中equation*,后一个问题已修复,但又引入了新问题。之前没问题的链接现在出错了:

\documentclass{article}
\usepackage{hyperref}
\usepackage{amsmath}
\begin{document}
    \begin{equation}
        \label{eq1}
    \end{equation}

    \begin{equation*}\tag{\ref*{eq1}b}
        \label{eq1b}
    \end{equation*}

    \begin{equation}
        \label{eq2}
    \end{equation}

    This reference is incorrect: \ref{eq1b} points to 1. No warning.
\end{document}

我怎样才能使所有参考资料正确无误?

这些问题类似,但没有帮助:

错误的参考链接

使用子方程、hyperref 和 cleveref 时的超链接问题

如果方程式带有 \tag 并且使用了 cleveref,则 Hyperref 会跳转到错误的方程式

答案1

正如在回答中所述如果方程式带有 \tag 并且使用了 cleveref,则 Hyperref 会跳转到错误的方程式由 Cyber​​Singularity 提供,应使用星号环境。如果您执行此操作并在所有链接正确hyperref后加载:amsmath

\documentclass{article}

\usepackage{amsmath}
\usepackage{hyperref}

\begin{document}
Some text
\begin{equation}
0=0 \label{eq1}
\end{equation}
other text
\begin{equation*}\tag{\ref*{eq1}b}
1=1 \label{eq1b}
\end{equation*}
other text
\begin{equation}
2=2 \label{eq2}
\end{equation}

These references are correct: \ref{eq1}, \ref{eq1b} and \ref{eq2}.
\end{document}

请注意,这仅适用于equation(这可能是 Heiko Oberdiek 提出的功能请求,以便\tag在 中正常工作equation)。对于align和其他多行环境,没有问题:

\documentclass{article}

\usepackage{amsmath}
\usepackage{hyperref}

\begin{document}

\begin{align}
0&=0 \label{eq1} \\
1&=1 \tag{\ref*{eq1}b} \label{eq1b} \\
2&=2 \label{eq2}
\end{align}

These references are correct: \ref{eq1}, \ref{eq1b} and \ref{eq2}.

\end{document}

相关内容