以下是代码:
\documentclass{article}
\usepackage{amssymb,latexsym,amsmath}
\usepackage{ntheorem}
\theorembodyfont{\upshape}
\newtheorem*{theorem}{Theorem:}
\newtheorem*{lemma}{Lemma:}
\newenvironment{proof}{\paragraph{\ Proof:}}{\hfill$\square$}
\RequirePackage{hyperref}
\usepackage[nameinlink]{cleveref}
\begin{document}
\begin{lemma} Here is the statement of the lemma.\label{lemma}
\end{lemma}
\begin{theorem}Here is the statement of the theorem.
\end{theorem}
\begin{proof}This is the proof of the theorem using \Cref{lemma}
\end{proof}
\end{document}
虽然我没有对引理进行编号,\newtheorem*
但在定理证明中引用引理时,Lemma 1
出现了。我想看看Lemma
,之后没有编号。
我非常感谢您提供的任何帮助。
答案1
我承认我不确定你为什么要使用cleveref
这个。如果你只使用无数字样式,那么你可能只使用一次环境。所以真的没有必要自动“检测”引用类型!但既然你要求了,那就在这里。
\documentclass{article}
\usepackage{amssymb,latexsym,amsmath}
\usepackage{ntheorem}
\usepackage{hyperref}
\usepackage[nameinlink]{cleveref}
\theoremstyle{nonumberplain} % note 1
\theorembodyfont{\normalfont}
\theoremseparator{:} % note 2
\newtheorem{theorem}{Theorem}
\newtheorem{lemma}{Lemma}
\theoremsymbol{\ensuremath{\color{lightgray}\blacksquare}}
\newtheorem{proof}{Proof}
\Crefformat{lemma}{#2Lemma#3} % note 3
\crefformat{lemma}{#2lemma#3}
\begin{document}
\begin{lemma} Here is the statement of the lemma.\label{lemma}
\end{lemma}
\begin{theorem}Here is the statement of the theorem.
\end{theorem}
\begin{proof}This is the proof of the theorem using \Cref{lemma}
\end{proof}
\end{document}
- 由于
\newtheorem*
无论如何您都需要定义证明环境,并且看起来您对所有证明环境都使用或多或少相同的风格,因此我指定了风格nonumberplain
。 - 不要在定理名称中编码冒号,而最好使用来
\theoremseparator
指定它。 ntheorem
这是和之间的区别amsthm
。在后者中,使用创建的定理\newtheorem*
没有引用计数器,因此无法交叉引用。ntheorem
计数器仍然存在,只是不显示。cleveref
然而根本不检测定理样式(事实上,它并不关心样式是什么)。所以你必须自己定义一个相应的\Crefformat
和\crefformat
。有关其工作原理的详细信息,请参阅手册的第 8.2.1 节cleveref
。