Cleveref 无法与 enotez 配合使用

Cleveref 无法与 enotez 配合使用

我想用 在文档中设置尾注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我没有更正它,因为它在您的用例中没有使用。

相关内容