将标签作为 tcolorbox 的参数传递,以便 cleveref 可以访问它

将标签作为 tcolorbox 的参数传递,以便 cleveref 可以访问它

我最近开始与出色的tcolorbox包,并成功地使用标签作为参数生成了我需要的框。但是,我希望能够使用该标签进行引用。根据手册和此网站(尤其是答案)如何在 tcolorbox 中定义标签?),我已经走到一半了。

使用此代码生成了正确的框。但是,引用不起作用。在 MWE 中,我希望文本显示“将下面的框引用为测试框 1a”,因为我传递的标签是“1a”。

相反,我收到一个错误! Use of \cref@override@label@type doesn't match its definition.

\documentclass[a4paper, twoside]{book}

\usepackage[most]{tcolorbox}
\usepackage{cleveref} 

\newtcolorbox{testbox}[2]{
  enhanced,
  label type=mytype,
  label = #1,
  title = Test~#1:~#2
}
\crefname{mytype}{Test Box}{Test Boxes}

\begin{document}

What I want is to be able to reference the below box as \cref{1a} (Should say \textit{Test Box 1a}).

\begin{testbox}{1a}{Title of first box}
The contents of the box
\end{testbox}

\end{document}

经过进一步调查(以及答案中的出色解释如何使用 hyperref 和 cleveref 交叉引用未编号的定理),它似乎\label只适用于counter而不是任意文本标签,所以我可能需要改变我的整个方法。但如果这是真的,我将不胜感激。

答案1

您缺少计数器定义:

\documentclass[a4paper, twoside]{book}

\usepackage[most]{tcolorbox}

\usepackage{cleveref}

\newcounter{mytype}
\crefname{mytype}{Test Box}{Test Boxes}

\newtcolorbox[use counter=mytype]{testbox}[2]{
  enhanced,
  label type=mytype,
  label = #1,
  title = Test~#1:~#2
}

\begin{document}

What I want is to be able to reference the below box as \cref{1a} (Should say \textit{Test Box 1a}).

\begin{testbox}{1a}{Title of first box}
The contents of the box
\end{testbox}

\end{document}

我不知道您实际上想如何给盒子编号。上面的定义将在参考中给出 1。

enter image description here

相关内容