8

同じ(セクション)カウンターですべての定理と系に番号を付けたいと思います。しかし、私がこれを行うと、クレバーレフはそれらを両方とも「定理」と名付けます。最小限の例を次に示します。

\documentclass{amsart}

\usepackage{amsthm, cleveref}
%\crefname{theorem}{theorem}{theorems}
%\crefname{corollary}{corollary}{corollaries}

\newtheorem{theorem}{Theorem}[section]
\newtheorem{corollary}[theorem]{Corollary}

\begin{document}
\section{Section title}

\begin{theorem}\label{thm:test}
Here is the theorem.
\end{theorem}

\begin{corollary}\label{cor:test}
Here is the corollary.
\end{corollary}

The theorem reference is given by \cref{thm:test} and the corollary reference is given by \cref{cor:test}.

\end{document}

ここで、系の参照は「定理 1.2」です。この問題は、crefname を明示的に指定した場合でも解決しません。

助言がありますか?

4

4 に答える 4

4

同じカウンターを使用するさまざまな定理のような環境をクレバーレフで区別するには、ntheorem または amsthm パッケージのいずれかをロードする必要があります。これらのパッケージには、cleveref が利用する定理のような環境に関する追加情報が格納されています。それらは、 cleveref のにロードする必要があることに注意してください。

ntheorem (hyperref オプションを介して長い間 hyperref と互換性があります) または amsthm (これも hyperref と互換性があります) を Cleveref と一緒に使用することは、\label にオプションの引数を使用するよりもはるかに優れたソリューションです。また、\thref にフォールバックする必要もありません。とにかく ntheorem を使用している場合、 \cref は \thref が行うすべてのことを行います (複数参照、カスタマイズされた書式設定など)。実際、thref オプションを指定して ntheorem をロードすると、cleveref は \thref を \cref のエイリアスとして再定義します。

(cleveref マニュアルにも説明されているトリックがありますが、aliascnt パッケージを使用して、ntheorem や amsthm を使用せずに定理のような環境を区別します。 {amsthm} は完璧に仕事をこなしてくれますか?)

于 2012-01-04T11:32:16.003 に答える
3

わかりました、ここに回避策があります。

オプションの label 引数に表示される名前を指定します。つまり、次のようになります。

\begin{corollary}\label[corollary]{cor:test}
Here is the corollary.
\end{corollary}

これにより、環境名を同じ場所に保持しながら、目的の出力が得られます(2回書かれていますが)。

于 2011-08-05T20:39:30.397 に答える
1

これには何も問題はありません。私はあなたのスクリプトを両方で実行しました

%\crefname{theorem}{theorem}{theorems}
%\crefname{corollary}{corollary}{corollaries}

コメントしてコメントを外し、期待どおりの結果が得られました

'The theorem reference is given by theorem 1.1 and the corollary reference is
given by corollary 1.2.'

古いパッケージを持っている可能性があります。

また、アーティクル クラスを使用している場合は、amsthm (および hyperref) の後にcleveref をロードするようにしてください。これにより、見たエラーが発生します。

于 2011-07-20T12:35:12.067 に答える
0

同じカウンターを使用するように 2 種類の定理を宣言したので、cleveref はそれらを区別できません。代わりに ntheorem パッケージの使用を検討してください。

于 2011-06-30T03:51:46.357 に答える