summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/footnotehyper
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
committerNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
commite0c6872cf40896c7be36b11dcc744620f10adf1d (patch)
tree60335e10d2f4354b0674ec22d7b53f0f8abee672 /macros/latex/contrib/footnotehyper
Initial commit
Diffstat (limited to 'macros/latex/contrib/footnotehyper')
-rw-r--r--macros/latex/contrib/footnotehyper/README.md89
-rw-r--r--macros/latex/contrib/footnotehyper/footnotehyper.dtx1046
-rw-r--r--macros/latex/contrib/footnotehyper/footnotehyper.ins48
-rw-r--r--macros/latex/contrib/footnotehyper/footnotehyper.pdfbin0 -> 57912 bytes
4 files changed, 1183 insertions, 0 deletions
diff --git a/macros/latex/contrib/footnotehyper/README.md b/macros/latex/contrib/footnotehyper/README.md
new file mode 100644
index 0000000000..a9ca08ed8c
--- /dev/null
+++ b/macros/latex/contrib/footnotehyper/README.md
@@ -0,0 +1,89 @@
+<!-- -->
+
+ 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.
diff --git a/macros/latex/contrib/footnotehyper/footnotehyper.dtx b/macros/latex/contrib/footnotehyper/footnotehyper.dtx
new file mode 100644
index 0000000000..5c87bff620
--- /dev/null
+++ b/macros/latex/contrib/footnotehyper/footnotehyper.dtx
@@ -0,0 +1,1046 @@
+% -*- 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'.
diff --git a/macros/latex/contrib/footnotehyper/footnotehyper.ins b/macros/latex/contrib/footnotehyper/footnotehyper.ins
new file mode 100644
index 0000000000..68fa4ca6c2
--- /dev/null
+++ b/macros/latex/contrib/footnotehyper/footnotehyper.ins
@@ -0,0 +1,48 @@
+%%
+%% Package: footnotehyper
+%% Version: 1.1 (2018/01/23)
+%% License: LPPL 1.3c
+%% Copyright (C) 2016-2018 Jean-Francois Burnol <jfbu at free dot fr>.
+%%
+\def\pkgname {footnotehyper}
+\def\pkgdate {2018/01/23}
+\def\docdate {2018/01/23}
+\def\pkgversion {v1.1}
+\def\pkgdescription {hyperref aware footnote.sty (JFB)}
+%%
+%% 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
+\endinput
+%%
+%% End of file `footnotehyper.ins'.
diff --git a/macros/latex/contrib/footnotehyper/footnotehyper.pdf b/macros/latex/contrib/footnotehyper/footnotehyper.pdf
new file mode 100644
index 0000000000..129b44fc1e
--- /dev/null
+++ b/macros/latex/contrib/footnotehyper/footnotehyper.pdf
Binary files differ