cleveref
我对下面这段代码中举例说明的有一个问题。
\documentclass[12pt]{article}
\usepackage{amsmath}%
\usepackage{amsthm}%
\theoremstyle{plain}
%
\newtheorem{theorem}{Theorem}
\newtheorem{definition}{Definition}
\newtheorem{conjecture}{Conjecture}
\theoremstyle{definition}
%
\newtheorem{condition}[theorem]{Condition}
\newtheorem{problem}{Problem}
\usepackage{hyperref}
\usepackage[noabbrev,nameinlink]{cleveref}
%
\hypersetup{colorlinks=true}
%
\newcommand{\MathRef}[2][blue]{%
\hypersetup{linkcolor=#1}%
\Cref{#2}%
\hypersetup{linkcolor=blue}%
}
\begin{document}
\begin{definition}[Bla]
\label{bla}
Bla
\end{definition}
\MathRef{bla}
\begin{problem}[Blabla]
\label{blabla}
Blabla
\end{problem}
\MathRef{blabla}
\begin{condition}[Blabla]
\label{blablabla}
Blabla
\end{condition}
\MathRef{blablabla}
\begin{conjecture}[Bla]
\label{bla1}
Bla
\end{conjecture}
\MathRef{bla1}
\end{document}
可以看出,该命令MathRef
仅在第一种情况下有效,而在其他情况下,由于(我猜)不同的原因,它不起作用。它似乎cleveref
错过了其中一些环境的名称。
问题是什么?
如何解决?
任何反馈都将受到高度赞赏。
答案1
定义theorem
出现得太早,即在cleveref
加载之前,因此cleveref
没有“抓地力”来提供正确的\crefname
等等。
推动定义后加载中cleveref
。
原因、为什么theorem
以及definition
开箱即用是因为它cleveref
已经内置了对这些定理名称(更好的计数器)的支持。
\documentclass[12pt]{article}
\usepackage{amsmath}%
\usepackage{amsthm}%
\usepackage{hyperref}
\usepackage[noabbrev,nameinlink]{cleveref}
\theoremstyle{plain}
%
\newtheorem{theorem}{Theorem}
\newtheorem{definition}{Definition}
\newtheorem{conjecture}{Conjecture}
\theoremstyle{definition}
%
\newtheorem{condition}[theorem]{Condition}
\newtheorem{problem}{Problem}
%
\hypersetup{colorlinks=true}
%
\newcommand{\MathRef}[2][blue]{%
\hypersetup{linkcolor=#1}%
\Cref{#2}%
\hypersetup{linkcolor=blue}%
}
\begin{document}
\begin{definition}[Bla]
\label{bla}
Bla
\end{definition}
\MathRef{bla}
\begin{problem}[Blabla]
\label{blabla}
Blabla
\end{problem}
\MathRef{blabla}
\begin{condition}[Blabla]
\label{blablabla}
Blabla
\end{condition}
\MathRef{blablabla}
\begin{conjecture}[Bla]
\label{bla1}
Bla
\end{conjecture}
\MathRef{bla1}
\end{document}