句法:

句法:

我一直在使用\footnotemark\footnotetext编写脚注,主要是因为如果TeX脚注文本不散布在句子中间,那么阅读和编写段落会更容易。

但是这意味着我必须亲自为每个脚注手动编号。当我反复写新段落或更改文本顺序时,这意味着我必须重新编号所有后续脚注。

有办法解决这个问题吗?理想情况下,我想为每个脚注赋予一个唯一的标识符,并让编译器自动处理编号。

答案1

如果你遵循这条路线,我建议使用\label-\ref系统并创建自己的宏来处理标签和交叉引用。以下是使用refcount将引用作为值传递给脚注机制(使用计数器):

在此处输入图片描述

\documentclass{article}
\usepackage{refcount}% http://ctan.org/pkg/refcount
\newcounter{fncntr}
\newcommand{\fnmark}[1]{\refstepcounter{fncntr}\label{#1}\footnotemark[\getrefnumber{#1}]}
\newcommand{\fntext}[2]{\footnotetext[\getrefnumber{#1}]{#2}}
\begin{document}
Some text\fnmark{first-fn} and some more\fnmark{second-fn} text, 
and finally\fnmark{last-fn} this.

\fntext{first-fn}{First footnote.}
\fntext{second-fn}{Second footnote.}
\fntext{last-fn}{Last footnote.}
\end{document}

每个\fnmark{<label>}都带有一个标签,然后与\fntext{<label>}{<text>}文档中其他地方的同步。由于这使用.aux文件来存储参考文献,因此您必须至少编译两次才能开始(所有脚注都将是0,按照 的refcount\setrefcountdefault{0}。但是,后续运行只需要一次编译,直到引入新的脚注或参考文献发生变化。

答案2

如果您想要一个简单的答案,那么您可以在一个段落中简单地添加多个标记,然后在段落后按顺序添加脚注的文本,这可能是一个简单的解决方案:

% Better footnote handling
\newcounter{footnoteInText}
\newcounter{footnoteInNote}
\newcommand{\fnmark}{\stepcounter{footnoteInText}\setcounter{footnote}{\value{footnoteInText}}\addtocounter{footnote}{-1}\footnotemark}
\newcommand{\fntext}[1]{\stepcounter{footnoteInNote}\setcounter{footnote}{\value{footnoteInNote}}\footnotetext{#1}}

现在,不再调用\footnotemark\footnotetext{...},而是调用\fnmark\fntext{...}

答案3

这详细说明了上述 cgnieder 的建议。使用包:九月脚注

句法:

% First assign an identifier to note:
\sepfootnotecontent{<id>}{<text>}

% Then typeset that note using its identifier:
\sepfootnote{<id>}

例子:

\documentclass{article}
\usepackage{sepfootnotes}
\sepfootnotecontent{abc}{A footnote.}
\sepfootnotecontent{xyz}{Another footnote.}
\begin{document}
Here is a footnote tagged as `xyz'.\sepfootnote{xyz}
Here is a footnote tagged as `abc'.\sepfootnote{abc}
\end{document}

(请注意,虽然xyz在之后定义abc,但排版在之前。换句话说,顺序根本不重要)

答案4

我正在使用\label-\ref系统,但根本没用过\footnotemark(有人建议我使用发丝间距和上标),而且由于hyperref我不能使用\footnotetext它们。我自己定义了一个可以工作的变体(最初用于表格和可能的迷你页面,但如果您只想单独定义它们,它也适合您)。它的优点是我\hyperfootnotemark不会离开 vmode。

使用 SSCCE 完成答案

总结

\makeatletter%
% \hyperfootnotetext is what \footnotetext is supposed to be:
% like \footnote except not rendering anything (it will not
% generate a paragraph if you append % to all lines)
\newcommand\hyperfootnotetext[1]{%
 % new local scope
 {%
  % temporarily redefine this macro to empty
  \renewcommand{\@makefnmark}{}%
  % temporarily prevent leaving vmode
  \renewcommand{\leavevmode}{}%
  % this also means we cannot create a(n empty) hyperlink
  \renewcommand{\hyper@linkstart}[2]{}%
  \renewcommand{\hyper@linkend}{}%
  % call the original \footnote macro
  \footnote{#1}%
  % exit the local scope with the redefined macro
 }%
 % end of command
}%
\makeatother%

% for footnotes
\newcommand{\Hair}{\kern.16667em}

用于:

Some text\Hair\textsuperscript{\ref{fn:foo}}. Some more text.

\hyperfootnotetext{\label{fn:foo}%
 The footnote body.}%

您通常希望\hyperfootnotetext调用的位置接近(或位于)您(第一次)使用脚注的位置。有关更多详细信息,请阅读我的其他答案关于这一点。

相关内容