Hyperref 将方程的标签与项目关联起来

Hyperref 将方程的标签与项目关联起来

我有一个脚本,它修复了对\ref命令调用的方程式的引用,并在命令中对其进行了更改。它还修复了对来自或进入的\eqref其他 LaTeX 对象的引用。以下是一些示例:\eqref{LABEL}(\ref{LABEL})\ref{LABEL}

  • eq.~\ref{eq:1}-->eq.~\eqref{eq:1}
  • figure~(\ref{fig:1})-->figure~\ref{fig:1}

我通过查看.aux文件(使用hyperref包)来做到这一点。对于方程式的引用,我在文件中有这种字符串.aux

\newlabel{eq2}{{2}{1}{Section title}{equation.1.2}{}}

其中标签eq2与字符串相关联equation.1.2。所以我知道这是一个方程式的标签。

现在,我发现这个方法有一个错误。这是一个 MWE:

\documentclass[11pt]{article}
\usepackage{amsmath}
\usepackage{hyperref}

\pagestyle{empty}
\begin{document}

\section{Section title}
Some text
\begin{enumerate}
\item[(i)] Some text
\begin{equation}
x+y=z
\label{eq1}
\end{equation}
\end{enumerate}
\begin{equation}
\label{eq2}
  x+y=z
\end{equation}

\end{document}

我在文件中的哪个位置.aux有:

\newlabel{eq1}{{1}{1}{Section title}{Item.1}{}}
\newlabel{eq2}{{2}{1}{Section title}{equation.1.2}{}}

如您所见,标签eq1与字符串没有关联equation*。当我向命令提供可选参数时,就会发生这种情况\item

这可以修复吗?

另一种解决方案可能是让每个编号的 displaymath\label在文件或单独的文件中打印一些内容.aux,但我不知道如何做到这一点。

答案1

这是 hyperref 补丁中的一个错误/缺陷。它在 \item 命令的开头将布尔值设置为 true,但如果使用可选参数,则不会将其设置回 false。

您可以尝试以下操作:

\documentclass[11pt]{article}
\usepackage{amsmath}
\usepackage{hyperref}
\usepackage{xpatch}
\makeatletter
\xpatchcmd\@item{\ignorespaces}{\@hyper@itemfalse\ignorespaces}{}{\fail}
\makeatother

\pagestyle{empty}
\begin{document}

\section{Section title}
Some text
\begin{enumerate}
\item[(i)] Some text
\begin{equation}
x+y=z
\label{eq1}
\end{equation}
\end{enumerate}
\begin{equation}
\label{eq2}
  x+y=z
\end{equation}

\end{document}

相关内容