![Tcolorbox 使用 crefname 时出错,将标签指定为幻影选项](https://linux22.com/image/356399/Tcolorbox%20%E4%BD%BF%E7%94%A8%20crefname%20%E6%97%B6%E5%87%BA%E9%94%99%EF%BC%8C%E5%B0%86%E6%A0%87%E7%AD%BE%E6%8C%87%E5%AE%9A%E4%B8%BA%E5%B9%BB%E5%BD%B1%E9%80%89%E9%A1%B9.png)
以下代码未使用该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}
我也尝试将其指定crefname
为cleveref
命令,例如:
\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}