基于cleveref方案的一个处理方案
感谢@听风看雨 的提示:
初始选项
crefname={bluebox}{blueboxes}实际上只是
\crefname{tcb@cnt@mybluebox}{bluebox}{blueboxes}换言之上述的第一个mwe可以有另一个「更内部」的实现:
\documentclass[12pt]{article}
\usepackage[
noheadfoot,
margin=8mm,
papersize={10cm,10cm},
]{geometry}
\usepackage{cleveref}
\usepackage{tcolorbox}
\newtcolorbox[
auto counter,
number within=section,
% crefname={bluebox}{blueboxes}
]{mybluebox}[2][]{
% label is label,% default value
colback=blue!5!white,
colframe=blue!75!black,
fonttitle=\bfseries,
title=Bluebox \thetcbcounter: #2,#1
}
% add here<-
\makeatletter
\crefname{tcb@cnt@mybluebox}{bluebox}{blueboxes}
\makeatother
\begin{document}
\section{Blue}
\begin{mybluebox}[label={myreference}]{My title}
This is an example.
\end{mybluebox}
\begin{mybluebox}[label={myreference2}]{My titletitle}
This is an example.
\end{mybluebox}
\noindent
\Cref{myreference}, \cref{myreference}\\
\Cpageref{myreference}, \cpageref{myreference}\\
\nameCref{myreference}, \namecref{myreference}\\
\labelcref{myreference}, \labelcpageref{myreference}\\
\Cref{myreference2}, \cref{myreference2}\\
\Cref{myreference,myreference2}, \cref{myreference,myreference2}\\
\end{document}同样可以得到:

这意味着我们在elegantlatex框架下,对于基于tcolorbox的fancy模式也只需要对相应的环境做如下的patch和cref设置即可:
% \usepackage{cleveref}
\makeatletter
\crefname{tcb@cnt@theorem}{\theoremname}{\theoremname}
\crefformat{tcb@cnt@theorem}{\theoremname~#2#1#3}
\crefmultiformat{tcb@cnt@theorem}{\theoremname~#2#1#3}{~和~#2#1#3}{,#2#1#3}{~和~#2#1#3}
\crefrangeformat{tcb@cnt@theorem}{\theoremname~#3#1#4~至~#5#2#6}
\crefname{tcb@cnt@definition}{\definitionname}{\definitionname}
\crefformat{tcb@cnt@definition}{\definitionname~#2#1#3}
\crefmultiformat{tcb@cnt@definition}{\definitionname~#2#1#3}{~和~#2#1#3}{,#2#1#3}{~和~#2#1#3}
\crefrangeformat{tcb@cnt@definition}{\definitionname~#3#1#4~至~#5#2#6}
\makeatotherCode
\documentclass[lang=cn,fontset=fandol]{elegantbook}
\geometry{paperheight=12cm}
\usepackage{cleveref}
\makeatletter
\crefname{tcb@cnt@theorem}{\theoremname}{\theoremname}
\crefformat{tcb@cnt@theorem}{\theoremname~#2#1#3}
\crefmultiformat{tcb@cnt@theorem}{\theoremname~#2#1#3}{~和~#2#1#3}{,#2#1#3}{~和~#2#1#3}
\crefrangeformat{tcb@cnt@theorem}{\theoremname~#3#1#4~至~#5#2#6}
\crefname{tcb@cnt@definition}{\definitionname}{\definitionname}
\crefformat{tcb@cnt@definition}{\definitionname~#2#1#3}
\crefmultiformat{tcb@cnt@definition}{\definitionname~#2#1#3}{~和~#2#1#3}{,#2#1#3}{~和~#2#1#3}
\crefrangeformat{tcb@cnt@definition}{\definitionname~#3#1#4~至~#5#2#6}
\makeatother
\begin{document}
\chapter{111}
\begin{definition}{\LaTeX 定义}{LaTeX}
这是\LaTeX{}的定义
\end{definition}
\begin{theorem}{欧拉定理}{Euler}
这是一个定理。
\end{theorem}
\begin{theorem}{毕达哥拉斯定理}{Bachagoras}
这是一个定理。
\end{theorem}
\cref{def:Osbert}
\cref{def:Wong,def:LaTeX,def:Wang}
\cref{def:Osbert,def:Wong,def:LaTeX,def:Wang}
\chapter{222}
\begin{definition}{Osbert定义}{Osbert}
这是一个定义。
\end{definition}
\begin{theorem}{欧几里得公理}{Euclide}
这是另一个定理。
\end{theorem}
\cref{thm:Euclide}
\cref{thm:Euler,thm:Bachagoras}
\cref{thm:Euler,thm:Bachagoras,thm:Euclide}
\chapter{333}
\begin{definition}{Wong定义}{Wong}
这是一个定义。
\end{definition}
\begin{definition}{Wang定义}{Wang}
这是一个定义。
\end{definition}
\end{document}这将得到:





























问 在elegantbook.cls的现有框架中,添加「cleveref」功能的最佳实践?