我有几个句子有很多脚注。目前我的 tex 代码如下所示:
This is One%
%
\footnote{
Footnote text 1
}%
%
, Two%
%
\footnote{
Footnote text 2
}%
%
~and Three%
%
\footnote{
Footnote text 2
}%
%
.
代码显然很难阅读,而且脚注后面的逗号、点和空格也容易出错。我添加了注释行以提高可读性,但这帮助不大。有没有办法将脚注与正文分离?我知道有命令和,但是\footnotemark
当\footenotetext
我写
This is One\footnotemark, Two\footnotemark and Three\footnotemark.
\footnotetext{
Footnote text 1
}
\footnotetext{
Footnote text 2
}
\footnotetext{
Footnote text 3
}
所有脚注文本都引用最后一个脚注标记。我还知道我可以使用数字参数(从而使脚注索引静态化),但如果我必须在现有脚注之前或之间添加脚注,那么就会出现问题。我如何才能实现第二个示例中的代码,但同时保持脚注索引动态化?
答案1
该\footnotetext
宏基本上是用于\footnotemark
使用计数器的当前值来引用相当接近它的footnote
,但是,多个\footnotemark
将相应地增加footnote
计数器,即在示例中它的值为3
。
现在,\footnotetext
将仅用作3
计数器值,而不是前一个值。
一种解决方法是重置脚注计数器,并在footnote
每次\footnotetext
使用时自动步进计数器,方法是使用\xpretocmd
(在命令前面加上\stepcounter
)
\documentclass{article}
\usepackage{xpatch}
\xpretocmd{\footnotetext}{\stepcounter{footnote}}{}{}
\begin{document}
This is One\footnotemark, Two\footnotemark and Three\footnotemark.
\setcounter{footnote}{0}
\footnotetext{%
Footnote text 1
}
\footnotetext{
Footnote text 2
}
\footnotetext{
Footnote text 3
}
\end{document}
更新
另一种方法,稍微重新发明endnotes
:
\documentclass{article}
\usepackage{xparse}
\ExplSyntaxOn
\seq_new:N \g_rolch_seq
\NewDocumentCommand{\StoreNote}{+m}{%
\seq_gput_right:Nx \g_rolch_seq {{#1}} % Storing all notes in a list
}
\NewDocumentCommand{\ShowNotes}{}{%
\setcounter{footnote}{0}
\seq_map_inline:Nn \g_rolch_seq {\stepcounter{footnote}\footnotetext{##1}}
}
\ExplSyntaxOff
\AtEndDocument{%
\ShowNotes%
}
\usepackage{blindtext}
\begin{document}
This is One\footnotemark, Two\footnotemark and Three\footnotemark.
\StoreNote{A long note}
\StoreNote{Another Long note}
\StoreNote{The note for the footnote with number \number\value{footnote}}
\blindtext[5]
Another\footnotemark
\blindtext[6]
Another footnote anchor is here\footnotemark
\StoreNote{More long notes}
\StoreNote{More other long notes}
\StoreNote{And now for something completely different}
\end{document}
答案2
这里我开发了一个相当于脚注的标签系统。在序言中使用 定义它们,\labelfn{label}{footnote}
在正文中使用 调用它们\Lfn{label}
。
\documentclass{article}
\newcommand\labelfn[2]{\expandafter\def\csname Footnote#1\endcsname{#2}}
\newcommand\Lfn[1]{\footnote{\csname Footnote#1\endcsname}}
\labelfn{intro}{This is my introductory footnote.}
\labelfn{trivia}{Here is a bit of trivia.}
\labelfn{reminder}{Now for a reminder.}
\begin{document}
\vspace*{6in}
Here is some blah-blah text.\Lfn{intro} Now as I continue my
text, there is more\Lfn{trivia} to say on the subject.
I am now done.\Lfn{reminder}
\end{document}