我正在尝试用以下注释来设置我的文章:
- 注释未显示在页面底部
- 注释显示在文章末尾(不需要在每个部分之后显示)
- 我可以多次参考同一篇笔记
这是典型的代码:
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
。