\Cref(cleveref 包)带有子方程的问题

\Cref(cleveref 包)带有子方程的问题

我发现这三个设置一起使用时存在错误。基本上,我subequations只需要对一个方程式使用它们。在此示例中,它位于第 1 页。

我还需要用它\numberwithin{equation}{section}来编号我的方程式。

最后,我使用该包来自己获取无需输入的cleverref内容。Theorem 1Theorem

编译下面的代码,转到第 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

这不是错误,而只是方式hyperrefcleveref标签更改的结果。

\numberwithin{equation}{section}必须完成 hyperrefcleveref,即两个包都被告知这种计数方式。

第二个方程的链接abcd有效,因为它在相同的第一节中,但更新该节后,信息就失效了。在控制台上编译时,查看有关 的hyperref名称锚点的警告非常方便。

一般规则:\numberwithin并且\counterwithin(来自chngcntr包装)应该放在 hyperrefcleveref包含在内。

\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 内核和文档类在设计时会考虑附加包,这样就不必在宏补丁上创建这种混乱的宏补丁!)

相关内容