Tcolorbox 使用 crefname 时出错,将标签指定为幻影选项

Tcolorbox 使用 crefname 时出错,将标签指定为幻影选项

以下代码未使用该crefname选项。在输出中,只有定理计数器作为调用结果出现,cref但其前面未添加单词 theorem

\documentclass{article}
\usepackage{cleveref}
\usepackage{tcolorbox}
\tcbuselibrary{theorems}
\newtcbtheorem[crefname={theorem}{theorems}]
{thm}{Theorem}{}{}
\begin{document}

\begin{thm}[phantom=\label{thm:1}]{}{}
  $1+1=2$.
\end{thm}
This is \cref{thm:1}.
\end{document}

我也尝试将其指定crefnamecleveref命令,例如:

\documentclass{article}
\usepackage{cleveref}
\usepackage{tcolorbox}
\tcbuselibrary{theorems}
\newtcbtheorem{thm}{Theorem}{}{}
\crefname{thm}{theorem}{theorems}
\begin{document}

\begin{thm}[phantom=\label{thm:1}]{}{}
  $1+1=2$.
\end{thm}
This is \cref{thm:1}.
\end{document}

但是我收到此错误:

LaTeX Warning: cref  reference format for label type `tcb@cnt@thm' undefined on
 input line 12.

答案1

首先,标签tcolorbox环境的正确使用方法应该使用label密钥。

第二:一旦标签实体的顺序发生变化,在标签名称中使用数字可能会变得乏味。不要使用它们。

第三:正确的crefname选项用法是

crefname={theorem}{theorems}

即将其指定为键,而不是在定义\crefname{foo}{bar}的 init - 槽中作为宏调用newtcbtheorem

使用phantom=\label{thm:1}是可能的,但是计数器名称为tcb@cnt@thm(因为定理环境被命名为thm),该值随后被存储为标记为的计数器thm:1,这导致了未知的引用\cref,寻找tcb@cnt@thm作为引用格式但这是未知的。

cleveref一种方法是使用可选参数覆盖特征的标签信息\label

phantom={\label[thm]{thm:1}}

这当然很尴尬,但却是不能label=thm:1直接使用的原因。

一个更好的可能解决方案是定义计数器,在定理定义的初始化槽中说thmagain之前说(最终\crefname{thmagain}{foo}{bar}也会使用) 。use counter=thmagain

\documentclass{article}
\usepackage{cleveref}
\usepackage{tcolorbox}
\tcbuselibrary{theorems}


\newcounter{thmagain}

\newtcbtheorem[crefname={theorem}{theorems}]{thm}{Theorem}{}{}
\newtcbtheorem[use counter=thmagain,crefname={improved theorem}{improved theorems}]{thmagain}{Theorem}{}{}
\begin{document}

\begin{thm}[phantom={\label[thm]{thm:1}}]{}{}
  $1+1=2$.
\end{thm}
This is \cref{thm:1}.


\begin{thmagain}[phantom={\label{thmagainstuff}}]{}{}
  $1+1=2$.
\end{thmagain}
This is \cref{thmagainstuff}.

\end{document}

在此处输入图片描述

相关内容