% -*- coding: utf-8; time-stamp-format: "%02d-%02m-%:y at %02H:%02M:%02S %Z" -*-
%<*none>
\def\dtxtimestamp {Time-stamp: <23-01-2018 at 20:31:53 CET>}
%</none>
%<*!readme>
%%
%% Package: footnotehyper
%% Version: 1.1 (2018/01/23)
%% License: LPPL 1.3c
%% Copyright (C) 2016-2018 Jean-Francois Burnol <jfbu at free dot fr>.
%%
%</!readme>
%<*insfile|tex>
\def\pkgname        {footnotehyper}
\def\pkgdate        {2018/01/23}
\def\docdate        {2018/01/23}
\def\pkgversion     {v1.1}
\def\pkgdescription {hyperref aware footnote.sty (JFB)}
%</insfile|tex>
%<*none>
% Definition of \pkgLicense
\begingroup% cette méthode ne marcherait pas avec caractères en dehors de 32-127
    \long\def\firstofone #1{#1}\catcode1=14\catcode2=0
    \catcode`\%=12\catcode`\_=12\endlinechar13\catcode13=13 ^^A
    \catcode32=13\catcode`\\=12^^Brelax^^A
^^Bfirstofone{^^Bendgroup^^Bdef^^BpkgLicense^^A
{% Package: footnotehyper
% Version: 1.1 (2018/01/23)
% License: LPPL 1.3c
% Copyright (C) 2016-2018 Jean-Francois Burnol <jfbu at free dot fr>.
%
% This Work may be distributed and/or modified under the conditions
% of the LaTeX Project Public License, version 1.3c. This version of
% this license is in:
%
% > <http://www.latex-project.org/lppl/lppl-1-3c.txt>
%
% and the latest version of this license is in:
%
% > <http://www.latex-project.org/lppl.txt>
%
% Version 1.3 or later is part of all distributions of
% LaTeX version 2005/12/01 or later.
%
% The Author of this Work is: Jean-Francois Burnol `<jfbu at free dot fr>`
%
% This Work consists of the main source file footnotehyper.dtx and the
% derived files footnotehyper.sty, footnotehyper.ins, footnotehyper.tex,
% footnotehyper.pdf, footnotehyper.dvi.
}}%
\begingroup\catcode1 0 \catcode`\\ 12 
^^Aiffalse
%</none>
%<*readme>
<!-- -->

    Source:  footnotehyper.dtx (v1.1 2018/01/23)
    Author:  Jean-Francois Burnol
    Info:    hyperref aware footnote.sty
    License: LPPL 1.3c
    Copyright (C) 2016-2018 Jean-Francois Burnol <jfbu at free dot fr>.


ABSTRACT
========

The `footnote` package by Mark Wooding (`1997/01/28` `1.13`)
allows to gather footnotes (`\begin{savenotes}`) and later insert
them (after `\end{savenotes}`) at the bottom of the page, even
if the intervening material consists of tabulars, minipages or
framed contents for example. One can also use the
`\savenotes/\spewnotes` syntax.

Also, `footnote.sty` provides a `footnote` environment which
allows to insert verbatim material.

Earlier releases of the present `footnotehyper` package added
patches for `hyperref` compatibility and some bugfixes, addressing
in particular the incompatibility with `color/xcolor`, and with
`babel-frenchb`, and also fixing the `footnote` environment with
optional argument `[NUM]`. Since `v0.99` all macros are defined
internally and the `footnote` package is not loaded at all.

The same user interface is kept. Since `v1.0` it is possible to
use `footnotehyper` also in absence of `hyperref` or when the latter is
loaded with its `hyperfootnotes=false` option. The order of loading of
`footnotehyper` and `hyperref` is inconsequential.

INSTALLATION
============

To extract the package (.sty) and driver (.tex) files from
footnotehyper.dtx:

- if footnotehyper.ins is present:   etex footnotehyper.ins
- without footnotehyper.ins:         etex footnotehyper.dtx
- or run latex or pdflatex directly on footnotehyper.dtx

At least three ways to produce footnotehyper.pdf (method (1) is
preferred):

1. latex footnotehyper.tex (twice), then dvipdfmx
2. pdflatex footnotehyper.dtx (twice)
3. latex footnotehyper.dtx (twice), then dvips, then ps2pdf

Method (1) produces the smallest pdf files.
Options can be set in footnotehyper.tex:

- scrdoc class options (paper size, font size, ...)
- with or without source code,
- with dvipdfmx or with latex+dvips or pdflatex.

Installation:

    footnotehyper.sty    -> TDS:tex/latex/footnotehyper/footnotehyper.sty
    footnotehyper.dtx    -> TDS:source/latex/footnotehyper/footnotehyper.dtx
    footnotehyper.pdf    -> TDS:doc/latex/footnotehyper/footnotehyper.pdf
    README.md            -> TDS:doc/latex/footnotehyper/README.md

The other files may be discarded.


LICENSE
=======

This Work may be distributed and/or modified under the conditions
of the LaTeX Project Public License, version 1.3c. This version of
this license is in:

> <http://www.latex-project.org/lppl/lppl-1-3c.txt>

and the latest version of this license is in:

> <http://www.latex-project.org/lppl.txt>

Version 1.3 or later is part of all distributions of
LaTeX version 2005/12/01 or later.

The Author of this Work is:

- Jean-Francois Burnol `<jfbu at free dot fr>`

This Work consists of the main source file footnotehyper.dtx and the
derived files footnotehyper.sty, footnotehyper.ins, footnotehyper.tex,
footnotehyper.pdf, footnotehyper.dvi.
%</readme>
%<*tex>-------------------------------------------------------------------------
%%
%% run latex twice on this file footnotehyper.tex then dvipdfmx on
%% footnotehyper.dvi to produce the documentation footnotehyper.pdf, with
%% source code included.
%%
\chardef\Withdvipdfmx 1 % replace 1 by 0 for using latex+dvips or pdflatex
\chardef\NoSourceCode 0 % replace 0 by 1 for the doc *without* the source code
\NeedsTeXFormat{LaTeX2e}
\ProvidesFile {\pkgname.tex}[Driver for \pkgname\space documentation]%
\PassOptionsToClass   {a4paper,fontsize=11pt,oneside}{scrdoc}
\PassOptionsToPackage {english}{babel}
\input \pkgname.dtx
%%% Local Variables:
%%% mode: latex
%%% End:
%</tex>-------------------------------------------------------------------------
%<*insfile>---------------------------------------------------------------------
%%
%% Run tex on this file to extract from footnotehyper.dtx:
%%        footnotehyper.sty, footnotehyper.tex, and README.md
%%
%% Refer to README.md for installation instructions, if needed.
%%
\input docstrip.tex
\askforoverwritefalse
\def\pkgpreamble{\defaultpreamble^^J\MetaPrefix^^J%
\string\NeedsTeXFormat{LaTeX2e}^^J%
\string\ProvidesPackage{\pkgname}\perCent^^J%
\space[\pkgdate\space\pkgversion\space\pkgdescription]}%
\generate{\nopreamble\nopostamble
\file{README.md}{\from{\pkgname.dtx}{readme}}%
\usepostamble\defaultpostamble
\file{\pkgname.tex}{\from{\pkgname.dtx}{tex}}%
\usepreamble\pkgpreamble
\file{\pkgname.sty}{\from{\pkgname.dtx}{package}}}%
\catcode32=13\relax% active space
\let =\space%
\Msg{************************************************************************}
\Msg{*}
\Msg{* To finish the installation you have to move the following}
\Msg{* file into a directory searched by TeX:}
\Msg{*}
\Msg{*     \pkgname.sty}
\Msg{*}
\Msg{* To produce the documentation run latex twice on file \pkgname.tex}
\Msg{* and then run dvipdfmx on file \pkgname.dvi.}
\Msg{*}
\Msg{* Happy TeXing!}
\Msg{*}
\Msg{************************************************************************}
\endbatchfile
%</insfile>---------------------------------------------------------------------
%<*none>------------------------------------------------------------------------
^^Afi^^Aendgroup
%
\chardef\noetex 0
\ifx\numexpr\undefined\chardef\noetex 1 \fi
\ifnum\noetex=1 \chardef\extractfiles 0 % extract files, then stop
\else
    \ifx\ProvidesFile\undefined
      \chardef\extractfiles 0 % etex etc.. on \pkgname.dtx, only file extraction.
    \else % latex/pdflatex on \pkgname.tex or on \pkgname.dtx
      \ifx\Withdvipdfmx\undefined
        % latex/pdflatex run is on \pkgname.dtx
        \chardef\extractfiles 1 % 1 = extract files and typeset manual, 2 = only typeset
        \chardef\Withdvipdfmx 0 % 0 = pdflatex or latex+dvips, 1 = dvipdfmx
        \chardef\NoSourceCode 0 % 0 =  include source code, 1 = do not
        \NeedsTeXFormat {LaTeX2e}%
        \PassOptionsToClass   {a4paper,fontsize=11pt,oneside}{scrdoc}%
        \PassOptionsToPackage {english}{babel}%
      \else % latex run is on \pkgname.tex
        \chardef\extractfiles 2 % do not extract files, only typeset
      \fi
      \ProvidesFile{\pkgname.dtx}%
        [\pkgname\space source and documentation (\dtxtimestamp)]%
    \fi
\fi
\ifnum\extractfiles<2 % extract files
\def\MessageDeFin{\newlinechar10 \let\Msg\message
\Msg{********************************************************************^^J}%
\Msg{*^^J}%
\Msg{* To finish the installation you have to move the following^^J}%
\Msg{* file into a directory searched by TeX:^^J}%
\Msg{*^^J}%
\Msg{*\space\space\space\space \pkgname.sty^^J}%
\Msg{*^^J}%
\Msg{* To produce the documentation with source code included run latex^^J}%
\Msg{* twice on file \pkgname.tex and then dvipdfmx on \pkgname.dvi^^J}%
\Msg{*^^J}%
\Msg{* Happy TeXing!^^J}%
\Msg{*^^J}%
\Msg{********************************************************************^^J}%
}%
\begingroup
    \input docstrip.tex
    \askforoverwritefalse
    \def\pkgpreamble{\defaultpreamble^^J\MetaPrefix^^J%
    \string\NeedsTeXFormat{LaTeX2e}^^J%
    \string\ProvidesPackage{\pkgname}\perCent^^J%
    \space[\pkgdate\space\pkgversion\space\pkgdescription]}%
    \generate{\nopreamble\nopostamble
    \file{README.md}{\from{\pkgname.dtx}{readme}}%
    \usepostamble\defaultpostamble
    \file{\pkgname.ins}{\from{\pkgname.dtx}{insfile}}%
    \file{\pkgname.tex}{\from{\pkgname.dtx}{tex}}%
    \usepreamble\pkgpreamble
    \file{\pkgname.sty}{\from{\pkgname.dtx}{package}}}%
\endgroup
\fi % end of file extraction (from etex/latex/pdflatex run on \pkgname.dtx)
\ifnum\extractfiles=0 % tex/etex/xetex/etc on \pkgname.dtx, files extracted, stop
      \MessageDeFin\expandafter\end
\fi
% From this point on, run is necessarily with e-TeX.
% Check if \MessageDeFin got defined, if yes put it at end of run.
\ifdefined\MessageDeFin\AtEndDocument{\MessageDeFin}\fi
%-------------------------------------------------------------------------------
% START OF USER MANUAL TEX SOURCE
\documentclass[abstract]{scrdoc}

\ifnum\NoSourceCode=1 \OnlyDescription\fi

\usepackage{ifpdf}
\ifpdf\chardef\Withdvipdfmx 0 \fi

\makeatletter
\ifnum\Withdvipdfmx=1
   \@for\@tempa:=hyperref,bookmark,graphicx,xcolor,pict2e\do
            {\PassOptionsToPackage{dvipdfmx}\@tempa}
   %
   \PassOptionsToPackage{dvipdfm}{geometry}
   \PassOptionsToPackage{bookmarks=true}{hyperref}
   \PassOptionsToPackage{dvipdfmx-outline-open}{hyperref}
   \PassOptionsToPackage{dvipdfmx-outline-open}{bookmark}
   %
   \def\pgfsysdriver{pgfsys-dvipdfm.def}
\else
   \PassOptionsToPackage{bookmarks=true}{hyperref}
\fi
\makeatother

\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage {babel}

\usepackage[hscale=0.72,vscale=0.7]{geometry}

\def\MacroFont{\ttfamily\small\hyphenchar\font45 \baselineskip11pt\relax}

\usepackage{amsmath}
\usepackage{newtxtext, newtxmath}
\usepackage[straightquotes, scaled=0.97]{newtxtt}
\usepackage{xspace}

\usepackage[dvipsnames]{xcolor}
\definecolor{joli}{RGB}{225,95,0}
\definecolor{JOLI}{RGB}{225,95,0}
\definecolor{BLUE}{RGB}{0,0,255}
\colorlet{niceone}{green!35!blue!75}

\usepackage{framed}

\usepackage[pdfencoding=pdfdoc]{hyperref}
\hypersetup{%
linktoc=all,%
breaklinks=true,%
colorlinks,%
linkcolor=RoyalBlue,%
urlcolor=OliveGreen,%
pdfauthor={Jean-Fran\c cois Burnol},%
pdftitle={The \pkgname\space package},%
pdfsubject={\pkgdescription},%
pdfkeywords={LaTeX, footnotes},%
pdfstartview=FitH,%
pdfpagemode=UseNone}
% added usage of package bookmark 2013/10/10
\usepackage{bookmark}
\usepackage{enumitem}
\usepackage{\pkgname}

\newcommand\fnh{%
        \texorpdfstring{{\color{joli}\ttfamily\bfseries \pkgname}}{\pkgname}\xspace}

\frenchspacing

\renewcommand\familydefault\sfdefault
\pagestyle{headings}

\begin{document}\thispagestyle{empty}
% the \MacroFont valid at begin document will be the one used in Implementation
% the one defined here will be used by verbatim (not by \verb)
\def\MacroFont{\ttfamily\small}
\rmfamily
\bookmark[named=FirstPage,level=1]{Title page}

\begin{center}
  {\normalfont\LARGE The \fnh  package}\\
\textsc{\small Jean-François Burnol}\par
  \footnotesize \ttfamily
  jfbu (at) free (dot) fr\par
  Package version: \pkgversion\ (\pkgdate)\par
  From source file \texttt{\pkgname.dtx} of \dtxtimestamp.\par
\end{center}

\MakeShortVerb{\`}%
\begin{abstract}
The `footnote` package by \textsc{Mark~Wooding} (`1997/01/28` `1.13`)
allows to gather footnotes (`\begin{savenotes}`) and later insert
them (after `\end{savenotes}`) at the bottom of the page, even
if the intervening material consists of tabulars, minipages or
framed contents for example. One can also use the
`\savenotes/\spewnotes` syntax.

Also, `footnote.sty` provides a `footnote` environment which
allows to insert verbatim material.

Earlier releases of the present \fnh package added
patches for `hyperref` compatibility and some bugfixes, addressing
in particular the incompatibility with `color/xcolor`, and with
`babel-frenchb`, and also fixing the `footnote` environment with
optional argument `[NUM]`. Since `v0.99` all macros are defined
internally and the `footnote` package is not loaded at all.

The same user interface is kept. Since `v1.0` it is possible to
use \fnh also in absence of `hyperref` or when the latter is
loaded with its `hyperfootnotes=false` option. The order of loading of
\fnh and `hyperref` is inconsequential.
\end{abstract}
\DeleteShortVerb{\`}

\section{License}

\begingroup\ttfamily\footnotesize\hyphenchar\font -1
           \parindent0pt 
           \obeyspaces\obeylines %
\pkgLicense\endgroup

\section{Usage}

Since |v0.99|, \fnh does not
load package
|footnote.sty|\footnote{\url{http://ctan.org/pkg/footnote}}
anymore, and is even incompatible with it at it uses the same user
interface.

Since |v1.0|, \fnh is usable also in absence of |hyperref| or when
the latter was passed |hyperfootnotes=false| option.

Version |v1.1| fixes a bug which arose when |savenotes| environment was used
\emph{inside} a minipage: footnotes were disappearing!%
%
\footnote{Thanks to François Pantigny for reporting the bug.}
%
See related remarks at end of \autoref{sec:notes}.

The package thus provides:
\begin{itemize}
\item a |savenotes| environment which re-routes footnotes and delivers them at
  the end (there is also the |\savenotes/\spewnotes| syntax; it does create a
  group like the environment),
\item |footnote| and |footnotetext| environments to allow footnotes
  with verbatim material.
\end{itemize}

But the constructability of the |footnote/footnotetext| environments depends
on how |\@makefntext| has been customized by the class or other packages; a
warning is issued if the situation appears to be desperate.\footnote{original
  |footnote.sty| could end up in a low level \TeX\ error.}

It should be recalled that in case of |\footnotemark[N]| and
|\footnotetext[N]{...}| mark-up |hyperref| creates no hyperlink. This is not
changed by \fnh and applies also to the |\begin{footnotetext}[N]| case.
Without optional argument the link is created, and the link is created also
for |\footnote[N]| or |\begin{footnote}[N]|.

This package does not handle especially floating environments, except that one
can always surround them in the source in a |savenotes| environment and one
knows that the footnotes will be delivered at the |\end{savenotes}|\dots which
may well be one page earlier than the actual location of the floating material
in the produced document !

Environments typesetting multiple times their contents are the most hostile to
footnotes. Currently, \fnh only handles especially the |amsmath|
environments (as in |footnote.sty|.)

Finally there is a |\makesavenoteenv| command which takes as
argument an environment name and patches it to do the
|\savenotes/\spewnotes| automatically.%
\begin{footnote}
  For the
record the syntax is either |\makesavenoteenv{foo}| which patches
environment |foo| or |\makesavenoteenv[bar]{foo}| which defines
environment |bar| as this patched version of |foo|.
\end{footnote}
It is safer to avoid it, as
one never knows what happens with such patches: for example the |[H]|
specifier provided by the |float| package overwrites the |\end{table}|
definition during the execution of |\begin{table}|\dots !

\begin{savenotes}
\begin{framed}
\DeleteShortVerb{\|}\MakeShortVerb{\*}%
{\centering
  \begin{tabular}{|c|c|}
    \hline
    \strut Inside\footnote{Notice that as  frame
      extended to the next page,
      the end of the *savenotes* environment delivered its
      footnotes only here.} a & tabular\begin{footnote}Alternatively a
      *\savenotes/\spewnotes* pair
      could have been used.\end{footnote}\\\hline
\end{tabular}\par}
\DeleteShortVerb{\*}\MakeShortVerb{\|}%
An example:
\begin{verbatim}
\begin{savenotes}
\begin{framed}
  Please refer to the documentation of the |footnote| package.%
  \footnote{\url{http://ctan.org/pkg/footnote}}

  Particularly you may check its |savenotes| environment.%
  \footnote{It doesn't bring any
  feature to especially handle the issues related to footnotes in floating
  environments, though.}
\end{framed}
\end{savenotes}
\end{verbatim}
and the present frame has \cs{footnote}'s from inside a |tabular| and is
inside a |savenotes| environment.%
\begin{footnote}
  Here is an issue which has nothing (as I finally figured out) to
  do with |footnote|, and only indirectly with \LaTeX: if you embed
  a \emph{full-width} minipage (with initial \cs{noindent}) in any
  environment not doing \cs{ignorespacesafterend}, be careful to add
  a \% either immediately after the |\end{minipage}| (or a |\relax|
  or a |\par|) or after the surrounding environment |\end{foo}| or
  use |\end{minipage}\end{foo}| else the output may have an extra
  blank line if the source has a blank line after the |foo| environment.
  Here is a typical example, with a |tabular| rather:
  \makeatletter

  \medskip\noindent\hspace{1cm}\begin{minipage}{\dimexpr\linewidth-1cm}%
  \def\MacroFont{\baselineskip10pt\relax}%
\begin{verbatim}
\newenvironment{foo}{}{}

\noindent\begin{tabular}{p{\dimexpr\linewidth-2\tabcolsep\relax}}
  A\dotfill B
\end{tabular}

C

\begin{foo}
\noindent\begin{tabular}{p{\dimexpr\linewidth-2\tabcolsep\relax}}
  A\dotfill B
\end{tabular}
\end{foo}

C
\end{verbatim}\end{minipage}\par\medskip

  If you try it out you will see an extra blank line in PDF output above the
  second C. Starting with |v0.99| the |\end{savenotes}| emits an
  \cs{ignorespacesafterend} which avoids this generic \TeX/\LaTeX\
  problem. For good measure there is now an \cs{ignorespaces} in
  |\begin{savenotes}|.
\end{footnote}
Let's test an
|amsmath| environment with |\intertext|. As
\begin{align}
  E&=mc^2\;,
\intertext{was too easy\footnote{There is also $E=h\nu$.}, let's
  try:}
  a^n + b^n &=c^n\;.
\end{align}
And a footnote with some verbatim material%
\begin{footnote}
  \verb|&$^%\[}$|
\end{footnote}.
\end{framed}
\end{savenotes}

The last one was coded as:
\begin{verbatim}
And a footnote with some verbatim material%
\begin{footnote}
  \verb|&$^%\[}$|
\end{footnote}.
\end{verbatim}
Now some use of |\footnotemark|\footnotemark\ followed by a |footnotetext|
environment.
\begin{footnotetext}
  This one uses the normal footnote counter and the hyperlink works.
\end{footnotetext}
And use of |\footnotemark[99]|\footnotemark[99] in association with a
|footnotetext| environment using the same optional argument |[99]|.
No hyperfootnote link was inserted.%
\begin{footnotetext}[99]
  |hyperref| creates no hyperlink in this case, or in the
  |\footnotemark[N]/\footnotetext[N]{<foo>}| case. It does when
  the |[N]| is absent or when it is used with a |\footnote| command
  (or a |footnote| environment.)

  By the way, \fnh |v0.9f|'s |\footnotetext[N]| and |\begin{footnotetext}[N]|
  each had a bug and they were unusable \emph{inside} the |savenotes|
  environment. There was no issue \emph{outside}.
\end{footnotetext}
And a final footnote, done with |\begin{footnote}[57]|%
\begin{footnote}[57]\csname @minipagetrue\endcsname % to reduce
                                % framed inserted vertical spacing
  \begin{framed}
    \noindent\fnh works since |v1.0| also in absence of |hyperref| or when the
    latter was passed |hyperfootnotes=false| option.
  \end{framed}
\end{footnote}.
There is no problem with the hyperlink, then.

\section{Notes}\label{sec:notes}

A few items worth of mention:
\begin{itemize}[nosep]
\item the |footnote| package patches the \LaTeX\ kernel |\parbox|.
  \fnh doesn't (but the code can be found commented-out at the
  end of the present file).
\item the |footnote| package defines a |minipage*| environment
  which is |minipage| patched by |\makesavenoteenv|, \fnh doesn't.
\item the |footnote| environment from |footnote.sty| does a
  |\leavevmode\unskip| which \fnh doesn't: hence if one locates
  |\begin{footnote}| at start of a line in the \LaTeX\ source, one will
    typically need a \% at end of text on previous line to avoid the
    end-of-line space.
\item the |hyperref| package inserts no hyperlink in case of
  |\footnotemark[N]/\footnotetext[N]|. This is not modified by \fnh.
\item side-note: there is an interference between |hyperref| and |frenchb|
  regarding the footnote marker when using the syntax |\footnotemark[NUM]|.
  For the record here is a patch (last tested briefly with
% PUTAIN BORDEL ! LaTeX Error: Text for \verb command ended by end of
% line. À CHAQUE FOIS ÇA M'AGAÇE. Bon, je n'ai pas mon patch habituel ici.
  |hyperref 2016/06/24 v6.83q| and |frenchb 2017/01/30 v3.2g|):
% pour le cas où mis dans commentaires de code
% \begingroup\makeatletter\let\check@percent\@gobble
\begin{verbatim}
  \AtBeginDocument{%
   \let\@xfootnotemarkORIFB \@xfootnotemark
   \def\@xfootnotemarkFB {\leavevmode\unskip\unkern\,\@xfootnotemarkORIFB }%
   \ifHy@hyperfootnotes\ifFBAutoSpaceFootnotes
       \let\@xfootnotemark\@xfootnotemarkFB
   \fi\fi
  }%
\end{verbatim}
% \endgroup
\item some environments typeset multiple times their contents,
  which causes issues; \fnh takes provisions only to handle the
  |amsmath| measuring step.
\item
  \LaTeX2e has some features when using footnotes in |minipage|'s
  which are themselves in a |minipage| which may also have footnotes externally
  to the internal minipages... try it out with some |\fbox|es around the
  sub-|minipages|, to see.

  \fnh behaves like original package |footnote| in such contexts. Only
  reasonable usage seems to embed the entire contents of the external minipage
  in a |savenotes| environment. But there will anyhow be collisions of the
  alphabetic enumerations. These collisions are there with or without \fnh (or
  |footnote.sty|.) I did not make any attempt, nor intend to in future, to
  address in an automatized manner these problematic contexts.
\end{itemize}

\StopEventually{\end{document}\endinput}
\makeatletter
    \let\check@percent\original@check@percent
\makeatother

\newgeometry{left=4cm, hscale=0.72}
\section{Implementation}

\small

\makeatletter
\noindent
\begingroup
\topsep\MacrocodeTopsep
\trivlist\parskip\z@\item[]
\macro@font
\leftskip\@totalleftmargin  \advance\leftskip\MacroIndent
\rightskip\z@  \parindent\z@  \parfillskip\@flushglue
\global\@newlistfalse \global\@minipagefalse
\ifcodeline@index
  \everypar{\global\advance\c@CodelineNo\@ne
  \llap{\theCodelineNo\ \hskip\@totalleftmargin}}%
\fi
\string\NeedsTeXFormat\string{LaTeX2e\string}\par
\string\ProvidesPackage\string{\pkgname\string}\@percentchar\par
\noindent\space [\pkgdate\space\pkgversion\space\pkgdescription]\par
\nointerlineskip
\global\@inlabelfalse
\endtrivlist
\endgroup
\makeatother

% The catcode hackery next is to avoid to have <*package> to be listed
% in the commented source code...
% (c) 2012/11/19 jf burnol ;-)

\MakePercentIgnore

%
% \catcode`\<=0 \catcode`\>=11 \catcode`\*=11 \catcode`\/=11
% \let</none>\relax
% \def<*package>{\catcode`\<=12 \catcode`\>=12 \catcode`\*=12 \catcode`\/=12}
%
%</none>
%<*package>
% \begin{macro}{no options}
% The package has no options.
%    \begin{macrocode}
\DeclareOption*%
    {\PackageWarning{footnotehyper}{Option `\CurrentOption' is unknown}}%
\ProcessOptions\relax
%    \end{macrocode}
% \end{macro}
% Versions up to |v0.9f| loaded |footnote.sty|, with lots of patching
% afterwards. Starting with |v0.99|, \fnh does everything by itself with |FNH@|
% prefix. Brief overview of some of the fixed issues:
% \begin{itemize}[nosep]
% \item there was incompatibility with |hyperref|,
% \item and with |color|,
% \item if the \cs{@makefntext} at the time of loading of |footnote.sty|
%   does not have its argument visible at top level in its meaning, or
%   is used multiple times there, then the footnote environment will lead to low
%   level \TeX\ error,
% \item |footnote.sty| modifies |\parbox|,
% \item |footnote.sty| does some too early |\let|,
% \item the footnote environment from |footnote.sty| does not work if used with
% optional argument |[N]|.
% \end{itemize}
%
% \noindent Starting with |v1.0|, \fnh may be used also in absence
% of |hyperref|.
%    \begin{macrocode}
\newbox\FNH@notes
\newdimen\FNH@width
\let\FNH@colwidth\columnwidth
\newif\ifFNH@savingnotes
\AtBeginDocument {%
    \let\FNH@latex@footnote    \footnote
    \let\FNH@latex@footnotetext\footnotetext
    \let\FNH@H@@footnotetext   \@footnotetext
    \let\FNH@H@@mpfootnotetext \@mpfootnotetext
    \newenvironment{savenotes}
        {\FNH@savenotes\ignorespaces}{\FNH@spewnotes\ignorespacesafterend}%
    \let\spewnotes      \FNH@spewnotes
    \let\footnote       \FNH@footnote
    \let\footnotetext   \FNH@footnotetext
    \let\endfootnote    \FNH@endfntext
    \let\endfootnotetext\FNH@endfntext
    \@ifpackageloaded{hyperref}
     {\ifHy@hyperfootnotes
         \let\FNH@H@@footnotetext\H@@footnotetext
         \let\FNH@H@@mpfootnotetext\H@@mpfootnotetext
      \else
         \let\FNH@hyper@fntext\FNH@nohyp@fntext
      \fi}%
     {\let\FNH@hyper@fntext\FNH@nohyp@fntext}%
}%
%    \end{macrocode}
% \begin{macro}{\FNH@hyper@fntext}
% \begin{macro}{\FNH@nohyp@fntext}
% \begin{macro}{\FNH@fntext}
% These are the \fnh replacement for |\@footnotetext| inside the
% |savenotes| environment. There is a version creating an hyperlink
% and another one not creating an hyperlink. The \cs{FNH@fntext}
% macro serves as general dispatch. This may be a place to customize if one
% wants to handle environments doing multiple passes: but the footnote counter
% must have been taken care of elsewhere. The code currently handles only
% the case of |amsmath| environments.
%    \begin{macrocode}
\def\FNH@hyper@fntext{\FNH@fntext\FNH@hyper@fntext@i}%
\def\FNH@nohyp@fntext{\FNH@fntext\FNH@nohyp@fntext@i}%
\def\FNH@fntext #1{\ifx\ifmeasuring@\@undefined
    \expandafter\@secondoftwo\else\expandafter\@firstofone\fi
    {\ifmeasuring@\expandafter\@gobbletwo\fi}#1%
}%
%    \end{macrocode}
% \end{macro}\end{macro}\end{macro}
% \begin{macro}{\FNH@hyper@fntext@i}
% We do the \cs{ifHy@nesting} test although hyperref's manual
% says ``Allows links to be nested; no drivers currently support this.''
%    \begin{macrocode}
\long\def\FNH@hyper@fntext@i#1{%
  \global\setbox\FNH@notes\vbox
  {\unvbox\FNH@notes
   \FNH@startnote
   \@makefntext
    {\rule\z@\footnotesep\ignorespaces
     \ifHy@nesting\expandafter\ltx@firstoftwo
             \else\expandafter\ltx@secondoftwo
     \fi
     {\expandafter\hyper@@anchor\expandafter{\Hy@footnote@currentHref}{#1}}%
     {\Hy@raisedlink
       {\expandafter\hyper@@anchor\expandafter{\Hy@footnote@currentHref}%
       {\relax}}%
      \let\@currentHref\Hy@footnote@currentHref
      \let\@currentlabelname\@empty
      #1}%
     \@finalstrut\strutbox
    }%
   \FNH@endnote
  }%
}%
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\FNH@nohyp@fntext@i}
% The original \cs{fn@fntext} had no \cs{long}.
%    \begin{macrocode}
\long\def\FNH@nohyp@fntext@i#1{%
  \global\setbox\FNH@notes\vbox
  {\unvbox\FNH@notes
   \FNH@startnote
   \@makefntext{\rule\z@\footnotesep\ignorespaces#1\@finalstrut\strutbox}%
   \FNH@endnote
  }%
}%
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\FNH@startnote}
% Same as original (the code comment is kept from original.)
%    \begin{macrocode}
\def\FNH@startnote{%
  \hsize\FNH@colwidth
  \interlinepenalty\interfootnotelinepenalty
  \reset@font\footnotesize
  \floatingpenalty\@MM% Is this right???
  \@parboxrestore
  \protected@edef\@currentlabel{\csname p@\@mpfn\endcsname\@thefnmark}%
  \color@begingroup
}%
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\FNH@endnote}
% Fixed from original.
%    \begin{macrocode}
\def\FNH@endnote{\color@endgroup}%
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\FNH@savenotes}
% Same as original apart from using |hyperref|-aware \cs{FNH@hyper@fntext},
% and taking into account |hyperref|'s custom \cs{@xfootnotetext}. This was
% missed by |v0.9f| hence |\footnotetext[N]{..}| did not work
% inside |savenotes| environment. Fixed for |v0.99|.
% 
% Maybe I should change the way \cs{@minipagerestore} is handled.
%    \begin{macrocode}
\def\FNH@savenotes{%
  \begingroup
  \ifFNH@savingnotes\else
    \FNH@savingnotestrue
    \let\@footnotetext    \FNH@hyper@fntext
    \let\@mpfootnotetext  \FNH@hyper@fntext
    \let\H@@mpfootnotetext\FNH@nohyp@fntext % fool hyperref's \@xfootnotenext
    \FNH@width\columnwidth
    \let\FNH@colwidth\FNH@width
    \global\setbox\FNH@notes\box\voidb@x
    \let\FNH@thempfn\thempfn
    \let\FNH@mpfn\@mpfn
    \ifx\@minipagerestore\relax\let\@minipagerestore\@empty\fi
    \expandafter\def\expandafter\@minipagerestore\expandafter{%
      \@minipagerestore
      \let\thempfn\FNH@thempfn
      \let\@mpfn\FNH@mpfn
    }%
  \fi
}%
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\FNH@spewnotes}
% This uses \cs{FNH@H@@footnotetext} which is the
% \cs{H@@footnotetext} |hyperref|'s preserved original
% meaning of \cs{@footnotetext} not creating a link target.
%
% |v1.1| fixes the bug about disappearing footnotes if |savenotes| environment
% is used inside a minipage. I had never really considered such usage, hence
% missed realizing there was a bug.
%    \begin{macrocode}
\def\FNH@spewnotes {%
  \endgroup
  \ifFNH@savingnotes\else
   \ifvoid\FNH@notes\else
    \begingroup
     \let\@makefntext\@empty
     \let\@finalstrut\@gobble
     \let\rule\@gobbletwo
     \ifx\@footnotetext\@mpfootnotetext
        \expandafter\FNH@H@@mpfootnotetext
     \else
        \expandafter\FNH@H@@footnotetext
     \fi{\unvbox\FNH@notes}%
    \endgroup
   \fi
  \fi
}%
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\FNH@footnote}
% \begin{macro}{\FNH@footnotetext}
%   We now take care of |footnote.sty|'s |footnote| environment. The original
%   \cs{fn@endfntext} is lacking a \cs{fn@endnote}, and this meant that
%   |footnote.sty| was incompatible with |color/xcolor| packages. Also this
%   \cs{fn@endnote} was |\let| to |\color@endgroup| which is wrong.
%
%   Furthermore, independently of presence of the |\color/xcolor| issue, the
%   |footnote.sty|'s |footnote| environment raised an error if used with an
%   optional argument. |v0.9f| addresses this issue.
%
%   The |footnotetext| environment adds a complication, in case of optional
%   argument we should not try to set up a link due to the fact that |hyperref|
%   does not support it for the |\footnotemark[N]/\footnotetext[N]| syntax.
%   And we need to make sure that the |footnote| and |footnotetext| environments
%   obey the |\savenotes/\spewnotes| mechanism.
%
%   To handle all of this we code things completely differently from
%   |footnote.sty|.
% 
%   The |v0.9f| |\begin{footnotetext}[N]| inside |savenotes| tried to create
%   an hyperref target. Fixed for |v0.99|.
%
%   Note: the |footnote.sty| code did a |\leavevmode\unskip| at entrance of
%   |footnote| environment, which \fnh has not kept.
%    \begin{macrocode}
\def\FNH@footnote@envname    {footnote}%
\def\FNH@footnotetext@envname{footnotetext}%
\def\FNH@footnote{%
    \ifx\@currenvir\FNH@footnote@envname
        \expandafter\FNH@footnoteenv
    \else
        \expandafter\FNH@latex@footnote
    \fi
}%
\def\FNH@footnoteenv{%
    \@ifnextchar[%
      \FNH@footnoteenv@i %]
      {\stepcounter\@mpfn
       \protected@xdef\@thefnmark{\thempfn}%
       \@footnotemark
       \def\FNH@endfntext@fntext{\@footnotetext}%
       \FNH@startfntext}%
}%
\def\FNH@footnoteenv@i[#1]{%
    \begingroup
     \csname c@\@mpfn\endcsname #1\relax
     \unrestored@protected@xdef\@thefnmark{\thempfn}%
    \endgroup
    \@footnotemark
    \def\FNH@endfntext@fntext{\@footnotetext}%
    \FNH@startfntext
}%
\def\FNH@footnotetext{%
    \ifx\@currenvir\FNH@footnotetext@envname
        \expandafter\FNH@footnotetextenv
    \else
        \expandafter\FNH@latex@footnotetext
    \fi
}%
\def\FNH@footnotetextenv{%
    \@ifnextchar[%
      \FNH@footnotetextenv@i %]
      {\protected@xdef\@thefnmark{\thempfn}%
       \def\FNH@endfntext@fntext{\@footnotetext}%
       \FNH@startfntext}%
}%
\def\FNH@footnotetextenv@i[#1]{%
    \begingroup
     \csname c@\@mpfn\endcsname #1\relax
     \unrestored@protected@xdef\@thefnmark{\thempfn}%
    \endgroup
    \ifFNH@savingnotes
      \def\FNH@endfntext@fntext{\FNH@nohyp@fntext}%
    \else
      \def\FNH@endfntext@fntext{\FNH@H@@footnotetext}%
    \fi
    \FNH@startfntext
}%
%    \end{macrocode}
% \end{macro}\end{macro}
% \begin{macro}{\FNH@startfntext}
% \begin{macro}{\FNH@endfntext}
% \begin{macro}{\FNH@endfntext@fntext}
% This is used for the environmental form of the footnote environments.
% The use of |\box\z@| originates in |footnote.sty|, should I change that ?
%
% Both of \cs{endfootnote} and \cs{endfootnotetext} are aliases for
% \cs{FNH@endfntext}.
%
% The \cs{FNH@endfntext@fntext} may be \cs{@footnotetext} (which will be
% \cs{FNH@hyper@fntext} in |savenotes| environment), or
% \cs{FNH@H@@footnotetext}, or \cs{FNH@nohyp@fntext} if in |savenotes| scope.
%    \begin{macrocode}
\def\FNH@startfntext{%
  \setbox\z@\vbox\bgroup
    \FNH@startnote
    \FNH@prefntext
    \rule\z@\footnotesep\ignorespaces
}%
\def\FNH@endfntext {%
    \@finalstrut\strutbox
    \FNH@postfntext
    \FNH@endnote
    \egroup
  \begingroup
    \let\@makefntext\@empty\let\@finalstrut\@gobble\let\rule\@gobbletwo
    \FNH@endfntext@fntext {\unvbox\z@}%
  \endgroup
}%
%    \end{macrocode}
% \end{macro}\end{macro}\end{macro}
% \begin{macro}{\@makefntext}
% \begin{macro}{\FNH@prefntext}
% \begin{macro}{\FNH@postfntext}
%   The definitions of |\FNH@prefntext| and |\FNH@postfntext| (which are needed
%   for the |footnote| environment, |\FNH@startfntext| and |\FNH@endfntext|)
%   are extracted from a somewhat daring analysis of |\@makefntext|.
%   Contrarily to |footnote.sty|'s original code (which may result in low level
%   \TeX\ errors when the |footnote| environment is executed)
%   the method here will alert the user if the argument
%   of |\@makefntext| is not visible at top level in its meaning or is used
%   there multiple times. We also insert here some code to handle especially
%   the case of |babel-frenchb|.
%    \begin{macrocode}
\AtBeginDocument{\let\FNH@@makefntext\@makefntext
   \ifx\@makefntextFB\undefined
   \expandafter\@gobble\else\expandafter\@firstofone\fi
   {\ifFBFrenchFootnotes \let\FNH@@makefntext\@makefntextFB \else
                         \let\FNH@@makefntext\@makefntextORI\fi}%
   \expandafter\FNH@check@a\FNH@@makefntext{1.2!3?4,}%
               \FNH@@@1.2!3?4,\FNH@@@\relax
}%
\long\def\FNH@check@a #11.2!3?4,#2\FNH@@@#3{%
    \ifx\relax#3\expandafter\@firstoftwo\else\expandafter\@secondoftwo\fi
    \FNH@bad@makefntext@alert
    {\def\FNH@prefntext{#1}\def\FNH@postfntext{#2}\FNH@check@b}%
}%
\def\FNH@check@b #1\relax{%
    \expandafter\expandafter\expandafter\FNH@check@c
    \expandafter\meaning\expandafter\FNH@prefntext
    \meaning\FNH@postfntext1.2!3?4,\FNH@check@c\relax
}%
\def\FNH@check@c #11.2!3?4,#2#3\relax{%
    \ifx\FNH@check@c#2\expandafter\@gobble\fi\FNH@bad@makefntext@alert
}%
\def\FNH@bad@makefntext@alert{%
    \PackageWarningNoLine{footnotehyper}%
      {^^J The footnote environment will not be fully functional, sorry.^^J
       You may try to email the author with the following information:}%
    \typeout{\meaning\@makefntext}%
    \let\FNH@prefntext\@empty\let\FNH@postfntext\@empty
}%
%    \end{macrocode}
% \end{macro}\end{macro}\end{macro}
% \begin{macro}{\makesavenoteenv}
% Same as original. Not recommended. Safer to use explicitely
% |savenotes| environment.
%    \begin{macrocode}
\def\makesavenoteenv{\@ifnextchar[\FNH@msne@ii\FNH@msne@i}%]
\def\FNH@msne@i #1{%
  \expandafter\let\csname FNH$#1\expandafter\endcsname %$
                  \csname #1\endcsname
  \expandafter\let\csname endFNH$#1\expandafter\endcsname %$
                  \csname end#1\endcsname
  \FNH@msne@ii[#1]{FNH$#1}%$
}%
\def\FNH@msne@ii[#1]#2{%
  \expandafter\edef\csname#1\endcsname{%
    \noexpand\savenotes
    \expandafter\noexpand\csname#2\endcsname
  }%
  \expandafter\edef\csname end#1\endcsname{%
    \expandafter\noexpand\csname end#2\endcsname
    \noexpand\expandafter
    \noexpand\spewnotes
    \noexpand\if@endpe\noexpand\@endpetrue\noexpand\fi
  }%
}%
%    \end{macrocode}
% \end{macro}
% Original footnote.sty patches |\parbox|, we don't touch it. Also it defines a
% |minipage*|  environment, we don't do it.
%    \begin{macrocode}
% \makesavenoteenv[minipage*]{minipage}
% \let\fn@parbox\parbox
% \def\parbox{\@ifnextchar[{\fn@parbox@i{}}{\fn@parbox@ii{}}}
% \def\fn@parbox@i#1[#2]{%
%   \@ifnextchar[{\fn@parbox@i{#1[#2]}}{\fn@parbox@ii{#1[#2]}}%
% }
% \long\def\fn@parbox@ii#1#2#3{\savenotes\fn@parbox#1{#2}{#3}\spewnotes}
\endinput
%    \end{macrocode}
% \MakePercentComment
\Finale
%%
%% End of file `footnotehyper.dtx'.
