![重置方程式计数器时 hyperref 出现问题(特别是在对齐环境中)](https://linux22.com/image/246020/%E9%87%8D%E7%BD%AE%E6%96%B9%E7%A8%8B%E5%BC%8F%E8%AE%A1%E6%95%B0%E5%99%A8%E6%97%B6%20hyperref%20%E5%87%BA%E7%8E%B0%E9%97%AE%E9%A2%98%EF%BC%88%E7%89%B9%E5%88%AB%E6%98%AF%E5%9C%A8%E5%AF%B9%E9%BD%90%E7%8E%AF%E5%A2%83%E4%B8%AD%EF%BC%89.png)
我正在尝试将计数器重置为零;但是hyperref
尝试引用先前的方程式。我正在使用:
\setcounter{equation}{0}
如果我所说的align
环境中有标签:
\documentclass{article}
\usepackage{amsmath}
\usepackage{hyperref}
\begin{document}
\begin{align}
x=1
\label{eq:a} \\
y=2
\label{eq:b}
\end{align}
Eq.~\eqref{eq:a}.
Reset counter
\newpage
\setcounter{equation}{0}
\begin{align}
x=10
\label{eq:c} \\
y=20
\label{eq:d}
\end{align}
Now trying to refer to third equation Eq.~\eqref{eq:c}
\end{document}
如果我现在\ref{eq:c}
,hyperref
包裹将会引导我回到eq:a
(在文本中,它们都有相同的号码)。
有没有办法解决这个问题,而不用手动设置你制作的新计数器?也就是说,你可以不做这样的事情来解决这个问题:
\documentclass{article}
\usepackage{amsmath}
\usepackage{hyperref}
\begin{document}
\begin{align}
x=1
\label{eq:a} \\
y=2
\label{eq:b}
\end{align}
Eq.~\eqref{eq:a}.
Reset counter
\newpage
%% \setcounter{equation}{0} %Commented out line
\newcounter{newequation} %Added line
\renewcommand{\theequation}{\arabic{newequation}} %Added line
\stepcounter{newequation} %Added line
\begin{align}
x=10
\label{eq:c} \\
\stepcounter{newequation} %Added line
y=20
\label{eq:d}
\end{align}
Now trying to refer to third equation Eq.~\eqref{eq:c}
\end{document}
?
答案1
为了生成正确的引用,您必须使计数器值对 是唯一的hyperref
。为此,您可以引入父计数器myequation
:每次此计数器增加时,计数器equation
都会重置。这样,hyperref
可以同时考虑myequation
和的值equation
来生成正确的超链接。
为了做到这一点,请在加载后将以下代码添加到您的文档中hyperref
:
\newcounter{myequation}
\makeatletter
\@addtoreset{equation}{myequation}
\makeatother
重置方程计数器是通过步进完成的myequation
,因此使用\stepcounter{myequation}
而不是\setcounter{equation}{0}
。
完整示例代码:
\documentclass{article}
\usepackage{amsmath}
\usepackage{hyperref}
\newcounter{myequation}
\makeatletter
\@addtoreset{equation}{myequation}
\makeatother
\begin{document}
\begin{align}
x=1
\label{eq:a} \\
y=2
\label{eq:b}
\end{align}
Eq.~\eqref{eq:a}.
Reset counter
\newpage
\stepcounter{myequation}
\begin{align}
x=10
\label{eq:c} \\
y=20
\label{eq:d}
\end{align}
Now trying to refer to third equation Eq.~\eqref{eq:c}
\end{document}