我在使用该软件包时遇到了一些问题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}
... 该命令未被
...接管。\newtheoremstyle
amsmath.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}
上述建议的解决方案源于theoremref
与amsthm
,以及以下几行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
会定义自己的命令,因此我建议您干脆不要加载。\thref
thref
theoremref
梅威瑟:
\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}
输出: