我发现这三个设置一起使用时存在错误。基本上,我subequations
只需要对一个方程式使用它们。在此示例中,它位于第 1 页。
我还需要用它\numberwithin{equation}{section}
来编号我的方程式。
最后,我使用该包来自己获取无需输入的cleverref
内容。Theorem 1
Theorem
编译下面的代码,转到第 4 页并单击那里的链接。它转到第 1 页。但预计会转到第 3 页。
如果我注释掉\numberwithin{equation}{section}
,那就没问题,但是这种编号方程的样式不是我想要的。
如果我不用该包而只是cleveref
用,它会转到第 3 页,这是正确的。但我失去了使用该包的优势。\ref
\Cref
我需要一个解决这个问题的方法,但仍然需要得到期望的结果(编号样式、优势cleveref
...等等)。
\documentclass{article}
\usepackage{amsmath}
\usepackage{hyperref}
\usepackage{cleveref}
\numberwithin{equation}{section}
\begin{document}
\section{Section 1}
This is a list of equations in page 1.
\begin{subequations}
\begin{align}
a &= b \label{aaaa} \\
a &= b \label{bbbb}
\end{align}
\end{subequations}
\newpage
This is an equation in page 2.
\begin{equation} \label{cccc}
abcd
\end{equation}
\newpage
\section{Section 2}
This is section 2 in page 3.
\begin{equation} \label{dddd}
abc
\end{equation}
\newpage
\Cref{dddd}. Click the link here will go to page 1, which is not
expected.
\end{document}
答案1
这不是错误,而只是方式hyperref
和cleveref
标签更改的结果。
\numberwithin{equation}{section}
必须完成前 hyperref
和 cleveref
,即两个包都被告知这种计数方式。
第二个方程的链接abcd
有效,因为它在相同的第一节中,但更新该节后,信息就失效了。在控制台上编译时,查看有关 的hyperref
名称锚点的警告非常方便。
一般规则:\numberwithin
并且\counterwithin
(来自chngcntr
包装)应该放在前 hyperref
并cleveref
包含在内。
\documentclass{article}
\usepackage{amsmath}
\numberwithin{equation}{section}
\usepackage{hyperref}
\usepackage{cleveref}
\begin{document}
\section{Section 1}
This is a list of equations in page 1.
\begin{subequations}
\begin{align}
a &= b \label{aaaa} \\
a &= b \label{bbbb}
\end{align}
\end{subequations}
\newpage
This is an equation in page 2.
\begin{equation} \label{cccc}
abcd
\end{equation}
\newpage
\section{Section 2}
This is section 2 in page 3.
\begin{equation} \label{dddd}
abc
\end{equation}
\newpage
\Cref{cccc}
\Cref{dddd}. Click the link here will go to page 1, which is not
expected.
\end{document}
答案2
TLDR:应该在我的网站上提供的最新预发布版本 (0.21) 中修复http://www.dr-qubit.org/latex.html
这个问题让我困惑了一段时间,因为cleveref
它避开了hyperref
反混淆机制,并且根本不接触\numberwithin
或接触较低级别\@addtoreset
。对文件进行一些调查后.aux
发现,这个错误比报告的更严重:subequations
在文档中的任何地方使用都会破坏超链接目的地全部后续方程环境,甚至根本不使用子方程的环境!
事实证明,问题是由于在子方程中cleveref
执行了一些临时的\@addtoreset
,以使巧妙的引用机制在那里工作,天真地认为没有人会弄乱这个低级 LaTeX 内核宏,使其做一些比向重置列表添加计数器更多的事情。不幸的是,hyperref
弄乱这个低级 LaTeX 内核宏,使其做一些比向重置列表添加计数器更多的事情。amsmath
在这里也不是无可指责的。如果它的子方程实现不是如此复杂的事情,那么这一切都没有必要。
我已经修改了cleveref
代码以使用它自己的版本,即使在加载\@addtoreset
时也始终让其使用原始内核宏。hyperref
在 LaTeX3 上滚动......(天真地希望 LaTeX3 内核和文档类在设计时会考虑附加包,这样就不必在宏补丁上创建这种混乱的宏补丁!)