定义某些 ntheorem theoremstyles 时 autoref 名称混乱

定义某些 ntheorem theoremstyles 时 autoref 名称混乱

我非常无害地定义了一个定理样式,让事情看起来更像 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}

强制 \autoref 选择正确的名称

答案2

将引用加载 \usepackage[thref,hyperref]{ntheorem} 并更改为 \thref{lem:first}\thref{lem:second}

\autoref是一个hyperref命令,因此它很可能会与通过和文件ntheorem将信息传递到第二次编译的方式相冲突。.aux.thm

对 的适应hyperref是一种黑客攻击,因为它hyperref 强制了其在 的定义\AtBeginDocument

相关内容