我想用 在文档中设置尾注enotez
,并想使用 引用它们cleveref
。但是,我总是收到此错误:
LaTeX 警告:标签类型“”的 cref 参考格式未定义
根据cleveref
手册,可以使用 定义引用类型的格式\crefname{type}{singular}{plural}
,其中type
对应于计数器。我已经为计数器定义了一种格式endnote
;此计数器在 中定义enotez.sty
,并且 LaTeX 知道它,如以下 MWE 输出的最后一行所示:
\documentclass{article}
\usepackage[backref]{enotez}
\usepackage[hyperfootnotes=true,pdftex]{hyperref}
\usepackage{cleveref}
\crefname{endnote}{Endnote}{Endnotes}
\begin{document}
This is an endnote with a label\endnote{Labeled endnote}\label{labeled}
Have you seen \cref{labeled} yet?
The current endnote\endnote{Another endnote} is \theendnote.
\printendnotes
\end{document}
因此,尽管计数器存在,但 无法识别它cleveref
。我该怎么办?
答案1
这是由于包中的编码错误造成的enotez.sty
,应通知包作者。计数器使用 进行更改\stepcounter
并手动修改,\@currentlabel
而不仅仅是使用\refstepcounter
。您可以按如下方式覆盖错误的构造:
\documentclass{article}
\usepackage{expl3}
\usepackage[backref]{enotez}
\usepackage[hyperfootnotes=true,pdftex]{hyperref}
\usepackage{cleveref}
\crefname{endnote}{Endnote}{Endnotes}
\ExplSyntaxOn
\cs_set_protected:Npn \enotez_endnote_mark:n #1
{
\int_gincr:N \g__enotez_endnote_id_int
\quark_if_no_value:nTF {#1}
{
\refstepcounter {endnote}
% \show \theendnote
% \cs_gset:cpx {@currentlabel} {\theendnote}
\enotez_write_mark:xn
{ \int_use:N \g__enotez_endnote_id_int }
{ \theendnote }
}
{
\cs_gset:cpn {@currentlabel} {#1}
% \cs_gset_eq:NN \theendnote \@currentlabel
\enotez_write_mark:xn { \int_use:N \g__enotez_endnote_id_int } {#1}
}
\bool_if:NT \l__enotez_disable_bool
{
\int_gdecr:N \g__enotez_endnote_id_int
\addtocounter {endnote} {-1}
}
}
\ExplSyntaxOff
\begin{document}
This is an endnote with a label\endnote{Labeled endnote}\label{labeled}
Have you seen \cref{labeled} yet?
The current endnote\endnote{Another endnote}\label{tt} is \theendnote.
\printendnotes
\end{document}
请注意,上面的代码中还有第二个手动设置,\@currentlabel
我没有更正它,因为它在您的用例中没有使用。