\crefrange 不适用于使用 amsmath 的“假设”环境

\crefrange 不适用于使用 amsmath 的“假设”环境

我正在使用的\cleveref软件包的\crefrange功能在环境中不起作用assumption。有人能告诉我如何解决这个问题吗?

代码如下:

\documentclass[12pt]{article}

\usepackage{amssymb,amsmath,latexsym,amsthm,amsfonts,mathtools}
\usepackage{hyperref}
\hypersetup{colorlinks, breaklinks, citecolor=cyan, linkcolor=cyan, urlcolor=cyan}
\usepackage[nameinlink,noabbrev,sort&compress]{cleveref}

\theoremstyle{plain}% Theorem-like structures provided by amsthm.sty
    \newtheorem{theorem}{Theorem}
    \newtheorem{lemma}{Lemma}
    \newtheorem{corollary}{Corollary}
    \newtheorem{proposition}{Proposition}
    \newtheorem{assumption}{Assumption}

    \theoremstyle{remark}
    \newtheorem{remark}{Remark}
    \newtheorem{notation}{Notation}

    \theoremstyle{definition}
    \newtheorem{definition}{Definition}
    \newtheorem{example}{Example}
    \newtheorem{problem}{Problem}

\begin{document}

\begin{theorem}\label{thm:T1}
Some theorem
\end{theorem}

\begin{theorem}\label{thm:T2}
Some other theorem
\end{theorem}

\crefrange{thm:T1}{thm:T2}

\begin{assumption}\label{asm:A1}
First Assumption
\end{assumption}

\cref{asm:A1}      


\begin{assumption}\label{asm:A2}
Second Assumption
\end{assumption}
\Cref{asm:A2}

\crefrange{asm:A1}{asm:A2}

\end{document}

输出如下: 在此处输入图片描述

答案1

你提出的问题与\crefrange 本身,也与包无关amsmath。相反,它之所以出现是因为cleveref包默认没有被告知如何创建复数形式名词“假设”的复数形式。因此,诸如 之类的宏(这些宏\crefrange被设计为使用名词的复数形式)无法正确执行其工作。

amsmath请考虑以下简化版的代码。[附言:请注意,如果已加载,则无需显式加载mathtools;同样,如果已加载,则无需amsfonts显式加载amssymb。另外,如果已加载,则没有理由加载古老的latexsymamssymb。] 观察发现\cref{asm:A1,asm:A2}和都\crefrange{asm:A1}{asm:A2}无法生成正确的交叉引用调用。

在此处输入图片描述

\documentclass[12pt]{article}
\usepackage{amssymb,amsthm,mathtools}
\usepackage[colorlinks,allcolors=cyan]{hyperref}
\usepackage[nameinlink,noabbrev]{cleveref}

\newtheorem{assumption}{Assumption}

%% Uncomment to get correct cross-referencing call-outs:
%\crefname{assumption}{assumption}{assumptions}

\begin{document}
\begin{assumption}\label{asm:A1}First\end{assumption}
\begin{assumption}\label{asm:A2}Second\end{assumption}

\Cref{asm:A1,asm:A2}      

\Crefrange{asm:A1}{asm:A2}
\end{document}

怎么办?只需添加说明

\crefname{assumption}{assumption}{assumptions}

在序言中(cleveref自然是在加载之后),一切都会好起来的。

在此处输入图片描述


附录:您可能有两个后续问题。首先,cleveref默认情况下,哪些计数器标签是被识别的,无论是单数形式还是复数形式?其次,如何在没有适当指令帮助的情况下,正确cleveref生成对环境的单数形式交叉引用 assumption(请注意,是\cref{asm:A1}输出assumption 1,而不仅仅是输出)?? 1?即使它不能正确处理复数形式实例\crefname

关于第一个问题:截至 2019 年 9 月,cleveref.sty如果软件包选项capitalize不是设置并且如果语言选项english(默认)生效:

  \crefname@preamble{page}{page}{pages}%
  \crefname@preamble{table}{table}{tables}%
  \crefname@preamble{part}{part}{parts}%
  \crefname@preamble{chapter}{chapter}{chapters}%
  \crefname@preamble{section}{section}{sections}%
  \crefname@preamble{appendix}{appendix}{appendices}%
  \crefname@preamble{enumi}{item}{items}%
  \crefname@preamble{footnote}{footnote}{footnotes}%
  \crefname@preamble{theorem}{theorem}{theorems}%
  \crefname@preamble{lemma}{lemma}{lemmas}%
  \crefname@preamble{corollary}{corollary}{corollaries}%
  \crefname@preamble{proposition}{proposition}{propositions}%
  \crefname@preamble{definition}{definition}{definitions}%
  \crefname@preamble{result}{result}{results}%
  \crefname@preamble{example}{example}{examples}%
  \crefname@preamble{remark}{remark}{remarks}%
  \crefname@preamble{note}{note}{notes}%
  \crefname@preamble{algorithm}{algorithm}{algorithms}%
  \crefname@preamble{listing}{listing}{listings}%
  \crefname@preamble{line}{line}{lines}%

(如果设置了包选项,则会运行一组非常相似的指令capitalize。默认语言选项为。english如果启用了合适的替代语言相关选项,则会创建名称标签的非英语形式。截至 2019 年 9 月,可用的语言选项按字母顺序排列,,,,,,[ ! brazilian] ,,和,,,,,,,和。)请注意,单数形式和复数形式标签是为以下 9 个类定理环境预定义的:,,,,,,,,,,和。相反,观察到catalandanishdutchesperantofrenchgermanngermanitaliannorskrussianspanishswedishukrainiantheoremlemmacorollarypropositiondefinitionresultexampleremarknoteassumption不是在这 9 个环境中。这就是为什么有必要\crefname{assumption}{assumption}{assumptions}在文档的序言中提供说明的原因。在此过程中,如果您需要创建对这些环境的复数形式的交叉引用,您可能还希望为和环境运行适当的\crefname说明。notationproblem

第二个问题:为什么它“有效”,即使我们刚刚确认,对于名为 的环境,\cref{asm:A1}没有定义名称标签?好吧,只要定理类环境(例如)通过语句定义cleverefassumptionassumption\newtheorem和都已加载(顺便说一下, 强烈鼓励这种排序),amsthmcleveref足够聪明(双关语)来解析指令cleverefcleveref

\newtheorem{assumption}{Assumption}

并将单词“Assumption”视为与环境相关的单数形式标签assumption。在我看来,这非常巧妙!

相关内容