基于zref-clever的一个处理方案...
目前最简便的方案还是需要修改elegantbook.cls...这对于已经frozen的项目是不友好的❗
一旦修改了.cls,则该模板已经不再是公开意义上的官方模板,不能再被叫做「elegantbook模板」,而只能是「myelegantbook模板」,且模板的使用者必须对该模板的修改负完全责任❗❗❗
不太妥当的方案,将这里的这段代码修改为:
% elegantbook.cls#L1001-L1016
\DeclareTColorBox[auto counter,number within=\ELEGANT@thmcnt,usesamecnt,usecnt]{#1}{ g o t\label g }{
common,#3,
label type=#1,%<-add label type key here
IfValueTF={##1}
{ELEGANT@title={#1}{##1}}
{
IfValueTF={##2}
{ELEGANT@title={#1}{##2}}
{ELEGANT@title={#1}{}}
},
IfValueT={##4}
{
IfBooleanTF={##3}
{label={##4}}
{ELEGANT@label={#2}{##4}}
}
}若如此做,对于下面的MWE文件main.tex:
\documentclass[lang=cn,fontset=fandol]{elegantbook}
\geometry{paperheight=14cm}
\usepackage{zref-clever}
\zcRefTypeSetup{theorem}{
Name-sg={定理},name-sg={定理},
Name-pl={定理},name-pl={定理},
}
\zcRefTypeSetup{definition}{
Name-sg={定义},name-sg={定义},
Name-pl={定义},name-pl={定义},
}
\begin{document}
\chapter{111}
\begin{definition}{Wang定义}{Wang}
这是一个定义。
\end{definition}
\begin{theorem}{欧拉定理}{Euler}
这是一个定理。
\end{theorem}
\zcref{def:Osbert}
\zcref{def:Wong}
\zcref{def:Wang}
\chapter{222}
\begin{definition}{Wong定义}{Wong}
这是一个定义。
\end{definition}
\begin{definition}{Osbert定义}{Osbert}
这是一个定义。
\end{definition}
\begin{theorem}{欧几里得公理}{Euclide}
这是另一个定理。
\end{theorem}
\zcref{thm:Euler}
\zcref{thm:Euclide}
\end{document}将得到:

要想「不修改.cls文件」,关键在于在已经写死的\DeclareTColorBox{env}中,是否有简单的方法对每个env添加一个新的键值对...
不过要添加的label type恰好其值为#1,也不能说上面的实现是坏的。
Noted that:
tcolorbox在2023年才加入对zref-clever的支持- 但
elegantbook已经在2022-12-31停止维护...
这个锅不太应该由本修改(改的不好)来背,算是「2025年」的今天需要为了一些版本更迭造成的时间摩擦付出一些小小的代价吧...如果有朝一日elegantbook能增加新的feature,本post也许可能提供些许帮助...
Hope it helps!





























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