我需要一个命令,在文档末尾输出使用它的页码和行号。我尝试了以下代码的不同变体,但我对乳胶的了解有限。我使用它lineno
来获取行号并endnotes
在文档末尾添加注释。我认为一些关于乳胶扩展的知识可以帮助我,但到目前为止还没有得到。
在下面的例子中,我获得了所有带有最后使用该revised
命令的页码和行号的结束注释。
你能帮我正确获取该命令使用的页码和行号吗?谢谢!
\usepackage{endnotes}
\let\footnote=\endnote
\usepackage[pagewise,switch]{lineno}
\linenumbers
\newcounter{modification}
\newcommand{\revised}[2]{%
\stepcounter{modification}
\linelabel{ln:line\arabic{modification}}
#1
\footnote{#2. Page \pageref{ln:line\arabic{modification}}, Line \ref{ln:line\arabic{modification}}, Counter \arabic{modification}}
}% revision with footnote
\begin{document}
\revised{New text 1.}{Reason of change 1.}
\revised{New text 2.}{Reason of change 2.}
\revised{New text 3.}{Reason of change 3.}
\theendnotes
\end{document}
答案1
您必须\arabic{modification}
当场扩展,否则它将被逐字写在尾注的辅助文件中。
\documentclass{article}
\usepackage{endnotes}
\usepackage[pagewise,switch]{lineno}
\linenumbers
\newcounter{modification}
\newcommand{\revised}[2]{%
\stepcounter{modification}%
\begingroup\edef\x{\endgroup
\noexpand\linelabel{ln:line\arabic{modification}}%
}\x
#1%
\begingroup\edef\x{\endgroup
\noexpand\endnote{\unexpanded{#2}. Page \noexpand\pageref{ln:line\arabic{modification}},
Line \noexpand\ref{ln:line\arabic{modification}}, Counter \arabic{modification}}%
}\x
}% revision with footnote
\begin{document}
\revised{New text 1.}{Reason of change 1.}
\revised{New text 2.}{Reason of change 2.}
\revised{New text 3.}{Reason of change 3.}
\nolinenumbers
\theendnotes
\end{document}
我建议不要重新定义\footnote
,而是使用\endnote
。
xparse
使用可以更好地控制扩展,因此代码更简单。\newcounter{modification}
上面的代码\begin{document}
可以改为
\usepackage{xparse}
\newcounter{modification}
\ExplSyntaxOn
\NewDocumentCommand{\revised}{mm}
{
\stepcounter{modification}
\jb_revised:fnn { \arabic{modification} } { #1 } { #2 }
}
\cs_new_protected:Nn \jb_revised:nnn
{
\linelabel{ln:line#1}
#2
\endnote{#3.~Page~\pageref{ln:line#1},~Line~\ref{ln:line#1},~Counter~#1}
}
\cs_generate_variant:Nn \jb_revised:nnn { f }
\ExplSyntaxOff
结果相同。