要将脚注转换为尾注,我知道我可以使用endnotes
下面显示的命令包。因为我经常有长脚注,所以我使用该environ
包为它们创建了一个自定义环境。
我不知道如何将此环境转换为尾注。TeX 给出\BODY
未定义的错误。
\documentclass{article}
% Dummy text
\usepackage[nopar]{lipsum}
% Define a real environment for footnotes
% But how to convert to endnotes?
\usepackage{environ}
\NewEnviron{Footnote}{\footnote{\BODY}}
% Convert footnotes to endnotes
\usepackage{endnotes}
\let\footnote=\endnote
\AtEndDocument{\theendnotes}
\begin{document}
\lipsum[1]\footnote{\lipsum[2]}
\lipsum[3]%
\begin{Footnote} % Works normally, but not with endnotes conversion
\lipsum[4]
\lipsum[5]
\end{Footnote}
\end{document}
答案1
让我们看看使用标准\endnote
命令会发生什么:
\documentclass{article}
\usepackage{endnotes}
\newcommand{\foo}{foo} % just for the test
\begin{document}
Some text.\endnote{With a \foo{} explanation.}
\end{document}
处理完此文档后,您将找到一个扩展.ent
名为
\@doanenote {1}
macro:->With
a
\foo
{}
explanation.
\@endanenote
你会看到没有发生宏扩展。那么,对于你的代码,测试文件中写入的内容
\documentclass{article}
\usepackage{endnotes}
\usepackage{environ}
\NewEnviron{Footnote}{\footnote{\BODY}}[] % no \ignorespacesafterend
\let\footnote\endnote
\newcommand{\foo}{foo} % just for the test
\begin{document}
Some text.
\begin{Footnote}
With a \foo{} explanation.
\end{Footnote}
\end{document}
在.ent
文件中
\@doanenote {1}
macro:->\BODY
\@endanenote
任何Footnote
环境都会写入\BODY
,但是它未在外部定义Footnote
(它加载了当前环境的内容然后被遗忘)并且无论如何定义它都是没用的。
您需要\BODY
先扩展它才能被看到\endnote
:
\NewEnviron{Footnote}{\expandafter\footnote\expandafter{\BODY}}
因此\endnote
将采取行动扩张(\BODY
即环境的内容)。
技术说明。\endnote{Text}
基本上,
\def\temp{Text}\immediate\write\endnotefile{\meaning\temp}
使用一些不必要的技巧,例如\@doanenote{<note number>}
在开头和\@endanenote
结尾添加以及将脚注文本拆分为多行。