定理参考的问题

定理参考的问题

我在使用该软件包时遇到了一些问题theoremref。基本上,它没有给我输出类似“Lemma 1.1.1”的内容,其中“Lemma”是定理的名称,而是给我类似“lem 1.1.1”的内容,其中“lem”是定理标识符。这是我的代码:

\documentclass{article}

\usepackage[amsthm, thmmarks]{ntheorem}
\usepackage{amsmath}
\usepackage{amssymb}
\usepackage{graphicx}
\usepackage{array}
\usepackage{makeidx}
\usepackage{mathrsfs}
\usepackage{theoremref}

\newtheorem{lem}{Lemma}[subsection]

\begin{document}

\section{Section}

\subsection{Subsection}

\begin{lem}\thlabel{test}
Test
\end{lem}

As we can see from \thref{test}

\end{document}

输出如下:

输出

我究竟做错了什么?

答案1

来自theoremref 文档(部分4 注意事项,第 3 页):

新的引用命令仅适用于使用该\newtheorem命令声明的定理环境。您不能将它们用于表格、图形、方程式、部分和其他环境。

到目前为止一切顺利...现在,ntheorem 文档(部分3.2.2amsthm,第 16 页):

amsthm.sty与中的定理布局定义相冲突theorem.sty,的某些功能amsthm.sty已合并到[amsthm] 必须使用的选项中反而\usepackage{amsthm}... 该命令未被
...接管。
\newtheoremstyleamsmath.sty

提供的接口的改变ntheorem似乎与这种方式不兼容theoremref。你需要再多做一些调整才能让它工作:

在此处输入图片描述

\documentclass{article}

\usepackage{amsmath}
\usepackage[amsthm, thmmarks]{ntheorem}
\makeatletter
\let\old@thm\@thm
\usepackage{theoremref}
\def\@thm#1#2#3{\def\thmref@currname{#3}\old@thm{#1}{#2}{#3}}
\makeatother

\newtheorem{lem}{Lemma}[subsection]

\begin{document}

\section{Section}

\subsection{Subsection}

\begin{lem}\thlabel{test}
Test
\end{lem}

As we can see from \thref{test}

\end{document}

上述建议的解决方案源于theoremrefamsthm,以及以下几行theoremref.sty捕捉定理类型/名称:

%hook in \@thm to get the name
\def\thmref@newthm#1#2{\thmref@lc{\def\thmref@currname{#2}}%
   \thmref@oldthm{#1}{#2}}
\def\thmref@amsthm#1#2#3{\thmref@lc{\def\thmref@currname{#3}}%
   \thmref@oldthm{#1}{#2}{#3}}

稍后,根据是否amsmath加载,进行替换:

\AtBeginDocument{\thmref@setup}
\def\thmref@setup{%
   \let\thmref@oldthm\@thm
   \@ifpackageloaded{amsthm}{\let\@thm\thmref@amsthm}%
        {\let\@thm\thmref@newthm}%
   \@ifpackageloaded{hyperref}{%
       \expandafter\let\csname thlabel\space\endcsname\thlabel@hyperref
       \let\thmref@setref\thmref@sethyp
   }\relax
   \ifx\thmref@th\@undefined\else\let\th\thmref@th\fi%
}

这也可能足以欺骗包,使其认为amsmath已经加载(设置为 以外的任何值)。\[email protected]\relax

答案2

ntheorem和之间存在一些不兼容性theoremref

由于使用该选项加载时ntheorem会定义自己的命令,因此我建议您干脆不要加载。\threfthreftheoremref

梅威瑟:

\documentclass{article}

\usepackage[amsthm,thmmarks,thref]{ntheorem}
\usepackage{amsmath}
\usepackage{amssymb}
\usepackage{graphicx}
\usepackage{array}
\usepackage{makeidx}
\usepackage{mathrsfs}
%\usepackage{theoremref}

\newtheorem{lem}{Lemma}[subsection]

\begin{document}

\section{Section}

\subsection{Subsection}

\begin{lem}\label{test}
Test
\end{lem}

As we can see from \thref{test}

\end{document} 

输出:

在此处输入图片描述

相关内容