我可以将 cleveref 和 endnotes 一起使用吗?

我可以将 cleveref 和 endnotes 一起使用吗?

我正在尝试用以下注释来设置我的文章:

  • 注释未显示在页面底部
  • 注释显示在文章末尾(不需要在每个部分之后显示)
  • 我可以多次参考同一篇笔记

这是典型的代码:

Some text\footnote{\label{l1}First footnote}

bla bla\footnote{other footnote} bla bla blaaaa, bla bla\cref{l1}

应该\cref创建一个与第一个创建的号码相同的上标号码\footnote

对于前两点,我使用了 endnotes 包,如下所示:

\usepackage{endnotes}
\let\footnote=\endnote
...
\theendnotes

对于最后一点,我使用 cleveref,如下所示:

\usepackage{cleveref}
\crefformat{footnote}{#2\footnotemark[#1]#3}

但是,虽然它可以单独工作,但不能一起工作,我收到以下警告:

LaTeX Warning: cref reference format for label type `' undefined on input line ...

而不是显示正确的数字,而是\cref显示'??“”。

无论我是在 endnotes 之前加载 cleveref 还是反过来(cleveref 建议我应该稍后加载它,因为 endnotes 并不专门支持 cleveref)都没有关系。

有什么方法可以让它们一起工作,或者有其他方法来实现我的目标?

答案1

设置标签时endnotes无需使用计数器,因为这仅在读入尾注文件时才会发生。

作为一种解决方法,我们可以在设置标签之前设置一个假计数器,并将该计数器别名为footnote,这样cleveref就可以在文件中进行正确的注释.aux

\documentclass{article}
\usepackage{etoolbox}
\usepackage{endnotes}
\usepackage{cleveref}
\crefformat{footnote}{#2\footnotemark[#1]#3}
\crefalias{fakeendnote}{footnote}
\let\footnote\endnote
\newcounter{fakeendnote}

\makeatletter
\patchcmd{\theendnotes}
 {\@ResetGT\edef}
 {\@ResetGT\refstepcounter{fakeendnote}\edef}
 {}{}
\makeatother

\begin{document}

Some text\footnote{First footnote\label{l1}}

bla bla\footnote{other footnote} bla bla blaaaa, bla bla\cref{l1}

\theendnotes

\end{document}

请注意,的值fakeendnote从未使用过,因为使用预先存储的脚注编号endnotes重新定义。\@currentlabel

在此处输入图片描述

enotez代替的endnotes问题是类似的:没有计数器被踩踏,因此cleveref无法对其做出适当的注释。

\documentclass{article}

\usepackage{enotez}
\usepackage{cleveref}
\crefformat{footnote}{#2\footnotemark[#1]#3}
\renewcommand\footnote{\refstepcounter{footnote}\endnote}

\begin{document}

Some text\footnote{First footnote}\label{l1}

bla bla\footnote{other footnote} bla bla blaaaa, bla bla\cref{l1}

\printendnotes

\end{document}

请注意\label应该用 超出脚注文本的范围enotez

相关内容