我有一个脚本,它修复了对\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}