我想知道如何使用 newtheorem* 并在标记定理上使用 cref。cleveref 似乎不能很好地与这个 * 变体配合使用。
示例结果为“标签类型 `` 的 cref 引用格式未定义”:
\documentclass{article}
\usepackage{amsthm}
\usepackage{cleveref}
\theoremstyle{definition} \newtheorem {hey}{Sandwich}
\theoremstyle{definition} \newtheorem*{hi}{Creek}
\begin{document}
\begin{hey}\label{sand}
aa
\end{hey}
\begin{hi}\label{dirt}
bb
\end{hi}
\cref{sand} % Sandwich 1
\cref{dirt} % warning and results in ??; want: Creek
\end{document}
答案1
由于\newtheorem*
没有分配计数器,因此使用\cref
将不起作用。如果您只想缩写长名称,请使用宏:
\documentclass{article}
\usepackage{amsthm}
\usepackage{cleveref}
\theoremstyle{definition}
\newtheorem {hey}{Sandwich}
\newcommand{\CR}{Creek}
\newtheorem*{hi}{\CR}
\begin{document}
\begin{hey}\label{sand}
aa
\end{hey}
\begin{hi}
bb
\end{hi}
\cref{sand} % Sandwich 1
\CR % Creek
\end{document}
另一方面,您可能有几个命名定理,使用cleveref
会有所帮助。
\documentclass{article}
\usepackage{amsthm}
\usepackage{cleveref}
\theoremstyle{definition}
\newtheorem {hey}{Sandwich}
\newtheoremstyle{named}
{\topsep} % ABOVESPACE
{\topsep} % BELOWSPACE
{\normalfont} % BODYFONT
{0pt} % INDENT (empty value is the same as 0pt)
{\bfseries} % HEADFONT
{.} % HEADPUNCT
{5pt plus 1pt minus 1pt} % HEADSPACE
{\thmname{#1}} % CUSTOM-HEAD-SPEC
\theoremstyle{named}
\newtheorem{namedinner}{\protect\thenamedinner}
\newenvironment{named}[1]
{\renewcommand{\thenamedinner}{#1}\namedinner}
{\endnamedinner}
\crefformat{namedinner}{#2#1#3}
\begin{document}
\begin{hey}\label{sand}
aa
\end{hey}
\begin{named}{Creek}\label{dirt}
bb
\end{named}
\begin{named}{River}\label{rain}
cc
\end{named}
\cref{sand} % Sandwich 1
\cref{dirt} % Creek
\cref{rain} % River
\end{document}