我想系统地指定尾注所在的页面。我在文档中找不到任何有用的东西。
到目前为止,我已经构建了一个可以完成这项工作但不太用户友好的新命令。MWE:
\documentclass[oneside,10pt]{memoir}
\usepackage{endnotes} % To write endnotes
\usepackage{lipsum}
\usepackage{refcount} % To access the page number where a label is
\newcommand{\MyEndNote}[2]{
\endnote{~page \getpagerefnumber{#2} : #1} \label{#2}
}
\begin{document}
\lipsum[1]\MyEndNote{first endnote}{lab1}\lipsum[2]
\newpage
\lipsum[3]\MyEndNote{another endnote}{lab2}\lipsum[1]\MyEndNote{a third one }{lab3}
\newpage
\theendnotes
\end{document}
我想要删除第二个参数并以某种方式自动生成它。
有人知道吗?提前致谢。
答案1
的计数器\endnote
在尾注文本处理完毕后才开始计数。因此,我们必须事先在参数中增加它,以便将自动生成的标签传递给\pageref
\documentclass[oneside,10pt]{memoir}
\usepackage{endnotes} % To write endnotes
\usepackage{lipsum}
\newcommand{\addendnotepage}[1]{~page~#1: }
\newcommand{\MyEndNote}[1]{%
\expandafter\endnote\expandafter{%
\expandafter\addendnotepage\expandafter{%
\expandafter\pageref\expandafter{%
\the\numexpr\arabic{endnote}+1\relax:endnote%
}%
}%
#1%
}%
\label{\arabic{endnote}:endnote}%
}
\begin{document}
\lipsum*[1]\MyEndNote{first endnote}\lipsum[2]
\newpage
\lipsum*[3]\MyEndNote{another endnote}\lipsum[1]\MyEndNote{a third one}
\newpage
\theendnotes
\end{document}
使用更强大的语言进行的不同实现expl3
。
\documentclass[oneside,10pt]{memoir}
\usepackage{endnotes} % To write endnotes
\usepackage{xparse} % more powerful
\usepackage{lipsum}
\ExplSyntaxOn
\NewDocumentCommand{\MyEndNote}{m}
{
\polyv_myendnote:nf { #1 } { \int_eval:n { \arabic{endnote}+1 } }
}
\cs_new_protected:Nn \polyv_myendnote:nn
{
\endnote{\nobreakspace page \nobreakspace \pageref{#2:endnote}:~#1}
\label{\arabic{endnote}:endnote}
}
\cs_generate_variant:Nn \polyv_myendnote:nn { nf }
\ExplSyntaxOff
\begin{document}
\lipsum*[1]\MyEndNote{first endnote}\lipsum[2]
\newpage
\lipsum*[3]\MyEndNote{another endnote}\lipsum[1]\MyEndNote{a third one}
\newpage
\theendnotes
\end{document}
这更加灵活;例如,如果你\polyv_myendnote:nn
将的定义更改为
\cs_new_protected:Nn \polyv_myendnote:nn
{
\endnote{#1\nobreakspace(page\nobreakspace\pageref{#2:endnote})}
\label{\arabic{endnote}:endnote}
}
如果不做其他改变,你会得到
使用f
变体时,在 LaTeX 将第二个参数\polyv_myendnote:nf
传递给主函数之前,它会被扩展\polyv_myendnote:nn
。