我非常无害地定义了一个定理样式,让事情看起来更像 amsthm 定理。但是 - 我的\autoref{}
s 被定理环境的可选参数弄乱了。
\documentclass{article}
\usepackage{hyperref}
\usepackage[hyperref]{ntheorem}
\makeatletter
\newtheoremstyle{nicestyle}%
{\item[\hskip\labelsep \theorem@headerfont ##1\ ##2\theorem@separator]}
{\item[\hskip\labelsep {\theorem@headerfont ##1\ ##2}{\normalfont\ (##3)}
{\theorem@headerfont \theorem@separator}]}
\makeatother
\theoremstyle{nicestyle}
\newtheorem{lemma}{Lemma}[section]
\begin{document}
\begin{lemma}
\label{lem:first}
The quick brown fox jumped over the lazy dog.
\end{lemma}
\begin{lemma}[Apple]
\label{lem:second}
The second brown fox jumped over the second dog.
\end{lemma}
I want to refer to the two lemmata above, and should be getting
``Lemma 0.1'' and ``Lemma 0.2''. But autoref gives me ``Apple 0.1''
and ``Apple 0.2'': \autoref{lem:first} and \autoref{lem:second}.
\end{document}
输出结果如下:
我是不是做错了什么或者这是一个ntheorem
错误?(使用 MikTex 2.9)。
答案1
Hyperref 在包装文档(第 15 页)。为了避免这种情况,您可以\autoref
通过以下方式“建议”应该使用什么
\theoremstyle{nicestyle}
\newtheorem{lemma}{Lemma}[section]
\providecommand*{\lemmaautorefname}{Lemma}
答案2
将引用加载
\usepackage[thref,hyperref]{ntheorem}
并更改为
\thref{lem:first}
和\thref{lem:second}
。
\autoref
是一个hyperref
命令,因此它很可能会与通过和文件ntheorem
将信息传递到第二次编译的方式相冲突。.aux
.thm
对 的适应hyperref
是一种黑客攻击,因为它hyperref
强制了其在 的定义\AtBeginDocument
。