Footnote, non-inline syntax?
The sepfootnotes
package might do the trick, but the footnote content has to come before it's usage:
\documentclass{scrartcl}
\usepackage{sepfootnotes}
\newfootnotes{A}
\begin{document}
\Anotecontent{a}{So complex that I would prefer to pull out the footnote text.}
This is a very long complex\Anote{a} sentence.
\end{document}
The following code defines a macro \longfootnote[fn-label]{footnote text}
, which produces a footnote and assigns it a label which can be cross-referenced in the usual way using \ref
to produce a footnote mark.
\makeatletter
\def\longfootnote[#1]{%
\stepcounter{footnote}%
\@bsphack
\protected@write\@auxout{}%
{\string\newlabel{#1}{{%
\string\begingroup
\string\c@footnote \number\c@footnote\string\relax
\string\unrestored@protected@xdef\string\@thefnmark{%
\string\thefootnote}%
\string\endgroup
\string\@footnotemark
}{\thepage}}}%
\@esphack
\protected@xdef\@thefnmark{\thefootnote}
\@footnotetext}
\makeatother
This code is effectively a composition of of the code from \label
and \@xfootnotemark
from latex.ltx
, writing a label to the auxiliary file which consists of a footnotemark for the new footnote. If you use an editor which recompiles whenever the labels change, you should quickly obtain a new document in which references to the long footnotes appear properly.
Sample document.
\documentclass{article}
\usepackage[left=5mm,right=5mm,paperheight=55mm, paperwidth=62mm]{geometry}
\thispagestyle{empty}
\makeatletter
\def\longfootnote[#1]{%
\stepcounter{footnote}%
\@bsphack
\protected@write\@auxout{}%
{\string\newlabel{#1}{{%
\string\begingroup
\string\c@footnote \number\c@footnote\string\relax
\string\unrestored@protected@xdef\string\@thefnmark{%
\string\thefootnote}%
\string\endgroup
\string\@footnotemark
}{\thepage}}}%
\@esphack
\protected@xdef\@thefnmark{\thefootnote}
\@footnotetext}
\makeatother
\begin{document}
\section{A demonstration}
Here\footnote{foo} is\ref{c} a\ref{a} test\footnote{bar} paragraph.\ref{b}
\longfootnote[a]{baz}
\longfootnote[b]{gleep}
\longfootnote[c]{glorp}
\label{sec:test}
This text\footnote{fie} is a part of Section~\ref{sec:test}.
\end{document}
Result.
The long footnotes should not interfere with any other cross-referencing, as illustrated above.
You might also just define a new command and use it inside the regular \footnote
command, e.g.,
\newcommand{\fnOne}{A footnote.}
\newcommand{\fnTwo}{Another footnote.}
A text\footnote{\fnOne} with some\footnote{\fnTwo} footnotes.
Which produces the expected:
One issue with this approach is that you cannot use numbers within command names, which might or might bother you in this case.
That said, I agree that using the setfootnotes package might be the more canonical answer and @Neil de Beaudrop 's answer is more flexible and useful in some scenarios. I'm just providing an alternative.