指定特定尾注所在的页面

指定特定尾注所在的页面

我想系统地指定尾注所在的页面。我在文档中找不到任何有用的东西。

预期结果应如下所示: 在此处输入图片描述

到目前为止,我已经构建了一个可以完成这项工作但不太用户友好的新命令。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

相关内容