![错误(?):hyperref 破坏了 \crefalias](https://linux22.com/image/306662/%E9%94%99%E8%AF%AF%EF%BC%88%EF%BC%9F%EF%BC%89%EF%BC%9Ahyperref%20%E7%A0%B4%E5%9D%8F%E4%BA%86%20%5Ccrefalias.png)
下面的代码(不包括行\usepackage{hyperref}
)提供了两个定理环境thm
和Thm
,它们使用两种不同的定理样式(分别在定理编号后有和没有换行符)。但是,如果我加载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:long
thm
Thm
有人能发现这个错误并且(最好)找到解决方法吗?
这个问题涉及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}
\label
cleveref
\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}