# Automatically handle footnote numbering when using \footnotemark

I have been using \footnotemark and \footnotetext to write footnotes, primarily because its much easier to read and write paragraphs in TeX without footnote text scattered in the middle of my sentences.

However this means i have to manually number each footnote myself. As i go back and forth, writing new paragraphs, or changing the ordering of my text, it means I have to renumber all subsequent footnotes.

Is there a way around this? Ideally I would like to give each footnote a unique identifier, and have the numbering handled automatically by the compiler.

-
You may want to have a look at the sepfootnotes package – clemens Nov 26 '13 at 11:23

If you're following this route, I would suggest using the \label-\ref system and create your own macros to handle the labelling and cross-referencing. Here's one take on it that uses refcount to pass references as values to the footnote mechanism (which uses counters):

\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}


Each \fnmark{<label>} is supplied with a label, which is then synchronized with a \fntext{<label>}{<text>} somewhere else in the document. Since this uses the .aux file to store references, you're going to have to compile at least twice to start with (all footnotes will be 0, as per refcount's \setrefcountdefault{0}). However, subsequent runs will only require a single compile, until new footnotes are introduced, or the references change.

-

This elaborates on cgnieder's suggestion above. Use package: sepfootnotes

# Syntax:

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

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


# Example:

\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}


(Notice that xyz is defined after abc but it is typeset before it. In other words, the order doesn't matter at all)

-

I’m using the \label - \ref system, but do not use \footnotemark at all (someone recommended to me to use a hair space and superscript), and because of hyperref I cannot use \footnotetext either. I defined myself a variant of it that works (originally for use in tables and possibly minipages, but it will also work for you if you just want to define them separately). The nice part about it is that my \hyperfootnotemark does not leave vmode.

## tl;dr

\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
% 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}


Use as:

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

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


You will usually want the \hyperfootnotetext call close to (and after) where you (first) use the footnote. For more details, read my other answer on this.

-