我最初以为这个问题出在 Unicode 字符上,但缩小文件导致下面的 MWE 没有,所以看起来theoremref
和hyperref
彼此都不喜欢。考虑一下:
\documentclass{book}
\usepackage{theoremref}
\usepackage{hyperref}
\newtheorem{theorem}{Theorem}
\begin{document}
\begin{theorem}
\thlabel{vmezofelint}
Sample text
\end{theorem}
Sample text (see \thref{vmezofelint} ) .
\end{document}
它会产生一条错误消息,指出
File ended before scanning use of \Hy@setref@link.
我的问题是:有人知道这个 bug 的修复方法或简单解决方法吗?只需要对代码进行少量更改的方法?
更新:最新版本的theoremref.
See已不再存在此问题以下是维护者的回答。
答案1
我不知道有这个讨论,但是由于最近有人抱怨这两个包不兼容,我更新了 theoremref 包以添加对 hyperref 的支持。它应该很快就会通过 CTAN 提供。
答案2
不要使用theoremref
:
\documentclass{book}
\usepackage{hyperref}
\newtheorem{theorem}{Theorem}
\begin{document}
\begin{theorem}\label{vmezofelint}
Sample text
\end{theorem}
Sample text (see \autoref{vmezofelint}).
\end{document}
扩展定义
可以建立一个新的定理定义命令,这样获得\autoref
正确结果的必要步骤就一劳永逸了。
\documentclass{book}
\usepackage{xparse,aliascnt,hyperref,bookmark}
\NewDocumentCommand{\xnewtheorem}{m o m}
{%
\IfNoValueTF{#2}
{\newtheorem{#1}{#3}}
{%
\newaliascnt{#1}{#2}%
\newtheorem{#1}[#1]{#3}%
\aliascntresetthe{#1}%
\expandafter\newcommand\csname #1autorefname\endcsname{#3}%
}%
}
\xnewtheorem{theorem}{Theorem}
\xnewtheorem{corollary}[theorem]{Corollary}
\begin{document}
\begin{theorem}\label{vmezofelint}
Sample text
\end{theorem}
Sample text (see \autoref{vmezofelint}).
\begin{corollary}\label{cor}
Sample text
\end{corollary}
Sample text (see \autoref{cor}).
\end{document}
答案3
如果您愿意使用cleveref
包及其\cref
命令而不是hyperref
包的\autoref
命令,则以下方法可能就是您所需要的(使用@egreg 的 MWE - 非常感谢!):
\documentclass{book}
\usepackage{ntheorem}
\usepackage[colorlinks]{hyperref}
\usepackage[nameinlink,capitalize]{cleveref}
% nameinlink and capitalize options used to emulate
% appearance of output of \autoref command
\newtheorem{theorem}{Theorem}
\newtheorem{corollary}[theorem]{Corollary}
\begin{document}
\begin{theorem}\label{vmezofelint}
Sample text
\end{theorem}
Sample text (see \cref{vmezofelint}).
\begin{corollary}\label{cor}
Sample text
\end{corollary}
Sample text (see \cref{cor}).
\end{document}