错误(?):hyperref 破坏了 \crefalias

错误(?):hyperref 破坏了 \crefalias

下面的代码(不包括行\usepackage{hyperref})提供了两个定理环境thmThm,它们使用两种不同的定理样式(分别在定理编号后有和没有换行符)。但是,如果我加载hyperref(在之前cleveref,正如后一个包的手册告诉我的那样),\crefrange最后一行的会断线。

\documentclass{article}

\usepackage{ntheorem}
\usepackage{hyperref} %<--- this line breaks \crefrange
\usepackage{cleveref}

\newtheorem{thm}{Theorem}

\theoremstyle{break}
\newtheorem{Thm}[thm]{Theorem}

\crefname{thm}{theorem}{theorems}
\crefalias{Thm}{thm}

\begin{document}

    \begin{thm}\label{thm:short}
        Theorem with short text.
    \end{thm}

    \begin{Thm}[The well-ordering theorem]\label{thm:long}
        Theorem with long text.
    \end{Thm}

    \cref{thm:short}

    \cref{thm:long}

    \crefrange{thm:short}{thm:long}
\end{document} 

没有hyperref

在此处输入图片描述

hyperref

在此处输入图片描述

当我插入 时\usepackage{hyperref},第一次编译时实际上会出现很多错误。然而,第二次编译时,错误减少到

LaTeX 警告:第 1 页参考范围内的参考文献thm:short和在输入第 27 行具有不同的类型。thm:longthmThm

有人能发现这个错误并且(最好)找到解决方法吗?

这个问题涉及cleveref 用于相同类型的定理

答案1

cleveref包向命令添加了一个可选参数\label,指定标签应属于哪个“驱动程序”计数器。或者,可以使用手册aliascnt中描述的方法cleveref,请参阅 PDF 文档第 9 页。

由于这种方法在未包含时是不必要的hyperref,因此似乎存在一些不兼容或错误。我的“解决方案”是一种解决方法,仅此而已。

\documentclass{article}

\usepackage{ntheorem}
\usepackage{hyperref} %<--- this line breaks \crefrange

\usepackage{cleveref}

\newtheorem{thm}{Theorem}

\theoremstyle{break}
\newtheorem{Thm}[thm]{Theorem}

\crefname{thm}{theorem}{theorems}
\crefalias{Thm}{thm}


\begin{document}
    \begin{thm} \label{thm:short}
        Theorem with short text.
    \end{thm}

    \begin{Thm}[The well-ordering theorem]\label[thm]{thm:long}
        Theorem with long text.
    \end{Thm}

    \cref{thm:short}

    \cref{thm:long}

    \crefrange{thm:short}{thm:long}
\end{document}

在此处输入图片描述

答案2

您可能发现了cleveref\crefalias宏和/或 中的一个错误hyperref。补救措施是不是使用该设备;而是在前言中\crefalias设置并使用,即将可选参数设置为,指定用于交叉引用工作的计数器类型。\crefname{Thm}{theorem}{theorems}\label[thm]{thm:long}\labelcleveref

在此处输入图片描述

\documentclass{article}

\usepackage{ntheorem}
\usepackage[colorlinks]{hyperref}
\usepackage[nameinlink]{cleveref}

\newtheorem{thm}{Theorem}  
\theoremstyle{break}
\newtheorem{Thm}[thm]{Theorem}

\crefname{thm}{theorem}{theorems}
\crefname{Thm}{theorem}{theorems} % new

\begin{document}    
\begin{thm}\label{thm:short}
No line break after header.
\end{thm}

\begin{Thm}[The well-ordering theorem] \label[thm]{thm:long}
Line break after header.
\end{Thm}

    \cref{thm:short}, \cref{thm:long}

    \cref{thm:short,thm:long}

    \crefrange{thm:short}{thm:long}
\end{document}

相关内容