Cleveref 搞乱了定理风格

Cleveref 搞乱了定理风格

我使用不同的theorem环境,理论上由于我的代码,它们应该都具有相同的样式。只要我不加载包,它们就会具有相同的样式cleveref。如果我加载它,只有推论保持不变。我该如何让它cleveref表现得好(=不干扰样式)?!

\documentclass{amsbook}
\usepackage{amsmath}
\usepackage{cleveref}
\theoremstyle{plain}
\newtheorem{corollary}{Corollary}\numberwithin{corollary}{chapter}
\newtheorem{example}[corollary]{Example}
\newtheorem{lemma}[corollary]{Lemma}
\begin{document}

\begin{corollary}
A corollary.
\end{corollary}

\begin{example}
An example.
\end{example}

\begin{lemma}
A lemma.
\end{lemma}

\end{document}

混乱的版本看起来像这样:

在此处输入图片描述

我想要的是所有定理环境看起来都像推论。正如我所说,如果我不加载 cleveref,它们就会像推论一样。

答案1

在我看来,amsbook该类对定理采取了错误的处理方式:它定义了一个略有不同的结构,amsthm并伪造了这个正在加载的包,因此将其置于cleveref危险之中,因为这个包就像amsthm真的被加载了一样。

我的解决方案是忘记类所做的设置并返回amsthm,定义一个新的定理样式来模拟amsbook开始时所做的操作。有点复杂,但它确保与的合作cleveref

\documentclass{amsbook}

\usepackage{amsmath}

% nullify amsbook setup about theorems
\expandafter\let\csname [email protected]\endcsname\relax
\let\theoremstyle\relax
\let\newtheoremstyle\relax
\let\pushQED\relax
\let\popQED\relax
\let\qedhere\relax
\let\mathqed\relax
\let\openbox\relax
\let\proof\relax\let\endproof\relax
\usepackage{amsthm}
\usepackage{cleveref}

% make a new setup that emulates `amsbook`
\makeatletter
\renewcommand{\thm@space@setup}{% like amsbook does
  \thm@preskip=.5\baselineskip\@plus.2\baselineskip \@minus.2\baselineskip
  \thm@postskip=\thm@preskip
}
\newtheoremstyle{amsplain}
{\thm@preskip}
{\thm@postskip}
{\itshape}
{\parindent}
{\scshape}
{.}
{ }
{}
\makeatother

\theoremstyle{amsplain}
\newtheorem{corollary}{Corollary}[chapter]
\newtheorem{example}[corollary]{Example}
\newtheorem{lemma}[corollary]{Lemma}

\begin{document}

Some text before so that it shows indentation
and let's go on until the text breaks across lines
to show also the left margin.

\begin{corollary}
A corollary.
\end{corollary}

\begin{example}
An example.
\end{example}

\begin{lemma}
A lemma.
\end{lemma}

\end{document}

在此处输入图片描述

答案2

cleveref使用计数器和引用做了很多复杂的事情,在之前使用它 \newtheorem{example}等不会告知cleveref应该example使用corollary计数器等(然后也一样lemma

一般规则:cleveref作为最后一个包加载,即使在之后hyperref!!!

\documentclass{amsbook}
\usepackage{amsmath}

\theoremstyle{plain}
\newtheorem{corollary}{Corollary}\numberwithin{corollary}{chapter}
\newtheorem{example}[corollary]{Example}
\newtheorem{lemma}[corollary]{Lemma}


\usepackage{cleveref}

\begin{document}

\begin{corollary}
A corollary.
\end{corollary}

\begin{example}
An example.
\end{example}

\begin{lemma}
A lemma.
\end{lemma}

\end{document}

在此处输入图片描述

相关内容