summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2017-02-17 22:27:22 +0000
committerKarl Berry <karl@freefriends.org>2017-02-17 22:27:22 +0000
commitab45728245c1e07608202ff15953b97a9d3232b0 (patch)
tree6470ca7d06a29ff07cd58e5328c4a95115b28bde
parent8ad0b999fe8e87386fa707c55c57c002a99a0a66 (diff)
footnotehyper (17feb17)
git-svn-id: svn://tug.org/texlive/trunk@43260 c570f23f-e606-0410-a88d-b1316a301751
-rw-r--r--Master/texmf-dist/doc/latex/footnotehyper/README.md42
-rw-r--r--Master/texmf-dist/doc/latex/footnotehyper/footnotehyper.pdfbin51992 -> 55993 bytes
-rw-r--r--Master/texmf-dist/doc/latex/footnotehyper/footnotehyper.tex10
-rw-r--r--Master/texmf-dist/source/latex/footnotehyper/footnotehyper.dtx903
-rw-r--r--Master/texmf-dist/source/latex/footnotehyper/footnotehyper.ins10
-rw-r--r--Master/texmf-dist/tex/latex/footnotehyper/footnotehyper.sty343
6 files changed, 777 insertions, 531 deletions
diff --git a/Master/texmf-dist/doc/latex/footnotehyper/README.md b/Master/texmf-dist/doc/latex/footnotehyper/README.md
index cfde8ea26ae..8df5b6f5a18 100644
--- a/Master/texmf-dist/doc/latex/footnotehyper/README.md
+++ b/Master/texmf-dist/doc/latex/footnotehyper/README.md
@@ -1,31 +1,35 @@
<!-- -->
- Source: footnotehyper.dtx (v0.9f 2016/10/03)
+ Source: footnotehyper.dtx (v0.99 2017/02/16)
Author: Jean-Francois Burnol
Info: hyperref aware footnote.sty
License: LPPL 1.3c
- Copyright (C) 2016 Jean-Francois Burnol <jfbu at free dot fr>.
+ Copyright (C) 2016-2017 Jean-Francois Burnol <jfbu at free dot fr>.
ABSTRACT
========
-The `footnote` package by Mark Wooding (which dates back to 1997)
-allows to gather footnotes (`\savenotes`) and later insert them
-(`\spewnotes`) at the bottom of the page, even if the intervening
-material consists of tabulars, minipages or framed contents for
-example. There is a command to patch any given environment to do
-the `\savenotes/\spewnotes` commands automatically. Also there is
-a `footnote` environment which allows to insert verbatim material.
-
-The `footnotehyper` package loads `footnote.sty` and rewrites a
-number of its commands to add `hyperref` awareness and to fix some
-issues, particularly the one of incompatibility with
-`color/xcolor`. The incompatibility with `babel-frenchb` is
-addressed, too. In case of absence of `hyperref`, `footnotehyper`
-limits itself to partially fix some of these issues.
-
-This package provides no facility dedicated to footnotes from
-floating environments.
+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. In case `hyperref` is absent, or
+is loaded with `hyperfootnotes=false` option, `footnotehyper`
+deactivates itself. The order of loading of `footnotehyper`
+and `hyperref` is inconsequential.
INSTALLATION
============
diff --git a/Master/texmf-dist/doc/latex/footnotehyper/footnotehyper.pdf b/Master/texmf-dist/doc/latex/footnotehyper/footnotehyper.pdf
index 72ab33caaf2..80442e5da70 100644
--- a/Master/texmf-dist/doc/latex/footnotehyper/footnotehyper.pdf
+++ b/Master/texmf-dist/doc/latex/footnotehyper/footnotehyper.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex/footnotehyper/footnotehyper.tex b/Master/texmf-dist/doc/latex/footnotehyper/footnotehyper.tex
index f406325276b..a7fca493913 100644
--- a/Master/texmf-dist/doc/latex/footnotehyper/footnotehyper.tex
+++ b/Master/texmf-dist/doc/latex/footnotehyper/footnotehyper.tex
@@ -1,13 +1,13 @@
%%
%% Package: footnotehyper
-%% Version: 0.9f (2016/10/03)
+%% Version: 0.99 (2017/02/16)
%% License: LPPL 1.3c
-%% Copyright (C) 2016 Jean-Francois Burnol <jfbu at free dot fr>.
+%% Copyright (C) 2016-2017 Jean-Francois Burnol <jfbu at free dot fr>.
%%
\def\pkgname {footnotehyper}
-\def\pkgdate {2016/10/03}
-\def\docdate {2016/10/03}
-\def\pkgversion {v0.9f}
+\def\pkgdate {2017/02/16}
+\def\docdate {2017/02/16}
+\def\pkgversion {v0.99}
\def\pkgdescription {hyperref aware footnote.sty (JFB)}
%%
%% run latex twice on this file footnotehyper.tex then dvipdfmx on
diff --git a/Master/texmf-dist/source/latex/footnotehyper/footnotehyper.dtx b/Master/texmf-dist/source/latex/footnotehyper/footnotehyper.dtx
index 1af5bf01999..7be238bfe42 100644
--- a/Master/texmf-dist/source/latex/footnotehyper/footnotehyper.dtx
+++ b/Master/texmf-dist/source/latex/footnotehyper/footnotehyper.dtx
@@ -1,20 +1,20 @@
% -*- coding: utf-8; time-stamp-format: "%02d-%02m-%:y at %02H:%02M:%02S %Z" -*-
%<*none>
-\def\dtxtimestamp {Time-stamp: <03-10-2016 at 23:00:16 CEST>}
+\def\dtxtimestamp {Time-stamp: <16-02-2017 at 20:01:27 CET>}
%</none>
%<*!readme>
%%
%% Package: footnotehyper
-%% Version: 0.9f (2016/10/03)
+%% Version: 0.99 (2017/02/16)
%% License: LPPL 1.3c
-%% Copyright (C) 2016 Jean-Francois Burnol <jfbu at free dot fr>.
+%% Copyright (C) 2016-2017 Jean-Francois Burnol <jfbu at free dot fr>.
%%
%</!readme>
%<*insfile|tex>
\def\pkgname {footnotehyper}
-\def\pkgdate {2016/10/03}
-\def\docdate {2016/10/03}
-\def\pkgversion {v0.9f}
+\def\pkgdate {2017/02/16}
+\def\docdate {2017/02/16}
+\def\pkgversion {v0.99}
\def\pkgdescription {hyperref aware footnote.sty (JFB)}
%</insfile|tex>
%<*none>
@@ -25,9 +25,9 @@
\catcode32=13\catcode`\\=12^^Brelax^^A
^^Bfirstofone{^^Bendgroup^^Bdef^^BpkgLicense^^A
{% Package: footnotehyper
-% Version: 0.9f (2016/10/03)
+% Version: 0.99 (2017/02/16)
% License: LPPL 1.3c
-% Copyright (C) 2016 Jean-Francois Burnol <jfbu at free dot fr>.
+% Copyright (C) 2016-2017 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
@@ -54,33 +54,37 @@
%<*readme>
<!-- -->
- Source: footnotehyper.dtx (v0.9f 2016/10/03)
+ Source: footnotehyper.dtx (v0.99 2017/02/16)
Author: Jean-Francois Burnol
Info: hyperref aware footnote.sty
License: LPPL 1.3c
- Copyright (C) 2016 Jean-Francois Burnol <jfbu at free dot fr>.
+ Copyright (C) 2016-2017 Jean-Francois Burnol <jfbu at free dot fr>.
ABSTRACT
========
-The `footnote` package by Mark Wooding (which dates back to 1997)
-allows to gather footnotes (`\savenotes`) and later insert them
-(`\spewnotes`) at the bottom of the page, even if the intervening
-material consists of tabulars, minipages or framed contents for
-example. There is a command to patch any given environment to do
-the `\savenotes/\spewnotes` commands automatically. Also there is
-a `footnote` environment which allows to insert verbatim material.
+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.
-The `footnotehyper` package loads `footnote.sty` and rewrites a
-number of its commands to add `hyperref` awareness and to fix some
-issues, particularly the one of incompatibility with
-`color/xcolor`. The incompatibility with `babel-frenchb` is
-addressed, too. In case of absence of `hyperref`, `footnotehyper`
-limits itself to partially fix some of these issues.
+Also, `footnote.sty` provides a `footnote` environment which
+allows to insert verbatim material.
-This package provides no facility dedicated to footnotes from
-floating environments.
+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. In case `hyperref` is absent, or
+is loaded with `hyperfootnotes=false` option, `footnotehyper`
+deactivates itself. The order of loading of `footnotehyper`
+and `hyperref` is inconsequential.
INSTALLATION
@@ -184,7 +188,7 @@ footnotehyper.pdf, footnotehyper.dvi.
\Msg{* To finish the installation you have to move the following}
\Msg{* file into a directory searched by TeX:}
\Msg{*}
-\Msg{* \pkgname.sty}
+\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.}
@@ -210,7 +214,7 @@ footnotehyper.pdf, footnotehyper.dvi.
\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}%
+ \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
@@ -307,7 +311,7 @@ footnotehyper.pdf, footnotehyper.dvi.
\hypersetup{%
linktoc=all,%
breaklinks=true,%
-colorlinks,%
+colorlinks,%
linkcolor=RoyalBlue,%
urlcolor=OliveGreen,%
pdfauthor={Jean-Fran\c cois Burnol},%
@@ -317,8 +321,8 @@ pdfkeywords={LaTeX, footnotes},%
pdfstartview=FitH,%
pdfpagemode=UseNone}
% added usage of package bookmark 2013/10/10
-\usepackage{bookmark}
-
+\usepackage{bookmark}
+\usepackage{enumitem}
\usepackage{\pkgname}
\newcommand\fnh{%
@@ -339,7 +343,7 @@ pdfpagemode=UseNone}
\begin{center}
{\normalfont\LARGE The \fnh package}\\
\textsc{\small Jean-François Burnol}\par
- \footnotesize \ttfamily
+ \footnotesize \ttfamily
jfbu (at) free (dot) fr\par
Package version: \pkgversion\ (\pkgdate)\par
From source file \texttt{\pkgname.dtx} of \dtxtimestamp.\par
@@ -347,23 +351,27 @@ pdfpagemode=UseNone}
\MakeShortVerb{\`}%
\begin{abstract}
-The `footnote` package by Mark \textsc{Wooding} (which dates back to 1997)
-allows to gather footnotes (`\savenotes`) and later insert them
-(`\spewnotes`) at the bottom of the page, even if the intervening
-material consists of tabulars, minipages or framed contents for
-example. There is a command to patch any given environment to do
-the `\savenotes/\spewnotes` commands automatically. Also there is
-a `footnote` environment which allows to insert verbatim material.
-
-The \fnh package loads `footnote.sty` and rewrites a number of its
-commands to add `hyperref` awareness and to fix some issues,
-particularly the one of incompatibility with `color/xcolor`. The
-incompatibility with `babel-frenchb` is addressed, too. In case of
-absence of `hyperref`, \fnh limits itself to partially fix some of
-these issues.
-
-This package provides no facility dedicated to footnotes from
-floating environments.
+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. In case `hyperref` is absent, or
+is loaded with `hyperfootnotes=false` option, \fnh
+deactivates itself. The order of loading of \fnh
+and `hyperref` is inconsequential.
\end{abstract}
\DeleteShortVerb{\`}
@@ -376,154 +384,222 @@ floating environments.
\section{Usage}
-DON'T load |footnote|, leave that job to \fnh. You \emph{must} load
-|hyperref|.\footnote{Since |v0.9e| \fnh deactivates itself
- gracefully if |hyperref| is not loaded, or under |hyperref| option
- |hyperfootnotes=false|.}
-
-Then you can use |\savenotes/\spewnotes| or the equivalent |savenotes|
-environment; there is also a |footnote| environment, but its set-up during
-\fnh loading is more delicate and it could well fail depending on how
-|\@makefntext| has been customized by the class or other packages; a warning
-is issued in that case. A functional |footnote| environment allows footnotes
-with verbatim material.
-
-\savenotes
-\begin{framed}
-Please refer to the documentation of the |footnote| package.%
-\footnote{\url{http://ctan.org/pkg/footnote}}
-
-Particularly you may check its |\makesavenoteenv| command.%
-\footnote{This won't handle floating environments, though.}
-\end{framed}
-\spewnotes
-
-We can try some normal footnote.\footnote{Here it is.}
+You \emph{must} load |hyperref|\footnote{Since |v0.9e| \fnh
+ deactivates itself gracefully if |hyperref| is not loaded, or
+ under |hyperref| option |hyperfootnotes=false|.}, but it does
+not matter if before or after \fnh. 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.
+
+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 The above\footnote{Notice that if the present frame
- extended to next page,
- the end of the *savenotes* environment would then (try to) deliver its
- footnotes to that
- page.} was & coded\footnote{Alternatively a savenotes environment
- could have been used.} as:\\\hline
+ \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}
-\savenotes
+\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 |\makesavenoteenv| command.%
- \footnote{This won't handle floating environments, though.}
+ 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}
-\spewnotes
+\end{savenotes}
\end{verbatim}
and the present frame has \cs{footnote}'s from inside a |tabular| and is
-inside a |savenotes| environment.%
-%
-% plus maintenant, \small pour le \MacroFont utilisé par verbatim
-%\footnote{Well, I end up on next page. Not
-% much I can do about this, ask why to |framed.sty| and the output routine I
-% guess.}
-%
-\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 \% after the
- minipage (or after the surrounding environment; or a \cs{par} immediately),
- else the output will have an extra blank line if the source has itself a
- blank line there. I hesitated adding that to
- \cs{spewnotes}/\cs{endsavenotes}. Finally I left as is.} Let's test an
+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
+\intertext{was too easy\footnote{There is also $E=h\nu$.}, let's
try:}
- F&=nd^3\;.
+ a^n + b^n &=c^n\;.
\end{align}
+And a footnote with some verbatim material%
+\begin{footnote}
+ \verb|&$^%\[}$|
+\end{footnote}.
\end{framed}
\end{savenotes}
-Use of the \texttt{footnote} \emph{environment} with some verbatim material%
-\begin{footnote}
- \verb|&$^%\[}$|
-\end{footnote}
-which was coded as:
+The last one was coded as:
\begin{verbatim}
-Use of the \texttt{footnote} \emph{environment} with some verbatim material%
+And a footnote with some verbatim material%
\begin{footnote}
\verb|&$^%\[}$|
-\end{footnote}
-which was coded as:
-<let's avoid infinite recursion ;-) >
+\end{footnote}.
\end{verbatim}
-And here a use of |\footnotemark|\footnotemark\
-followed by a |footnotetext| environment.
+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}
-Now a use of |\footnotemark[N]|\footnotemark[99] followed with a
-|footnotetext| environment using the same optional argument |[N]|.
-No hyperfootnote link is then inserted by |hyperref|.%
+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| puts no hyperlink in this case, which is similar to
- the |\footnotemark[N]/\footnotetext[N]{<foo>}| context (there is
- no such problem with using the |[N]| with a |\footnote| or with
- a |footnote| environment.)
+ |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, with a |footnote| environment using an
-optional argument |[N]|.%
-\begin{footnote}[100]\csname @minipagetrue\endcsname % to reduce
+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 deactivates itself if |hyperfootnotes=false| option to
|hyperref| is detected, or if |hyperref| is not loaded at all.
- Essentially, it only then fixes some of the incompatibilities
- between |footnote.sty| and |color/xcolor/babel-frenchb|
- packages. But the bug making the |footnote| environment
- optional argument unusable remains unfixed by \fnh if
- |hyperref| has not been detected.
\end{framed}
-\end{footnote}
-No problem with the hyperlink, then.
+\end{footnote}.
+There is no problem with the hyperlink, then.
\section{Notes}
-The |footnote| environment of |footnote.sty| had various issues
-but as \fnh initially focused only on |\savenotes/\spewnotes| I
-became aware only at the time of |v0.9f| of the error when this
-environment is used with the optional |[N]| parameter; this is a
-different bug than the one of incompatibility with |color/xcolor|.
-The |v0.9f| release fixes this new problem (no extensive
-tests were done.)
-
-During this I realized (this is unrelated to |footnote| package or
-\fnh) that there is a typesetting interference of |hyperref| with
-|babel+frenchb| in the case of the |\footnotemark[N]| syntax. \fnh
-does not fix that. I reported the problem and perhaps an upstream
-fix will come at a later date (tested with |hyperref 6.83q| and
-|frenchb 3.2c|).
-
-The |hyperref| package inserts no hyperlink in case of
-|\footnotemark[N]/\footnotetext[N]|. This is not modified by \fnh.
-
-The |footnote.sty| package patches the \LaTeX\ kernel |\parbox|. I had not
-realized that earlier, and starting with \fnh |v0.9f| the patch is undone.
-But the re-defined macro is made available as |\fnparbox|.
-
-\medskip
-
-At this stage, \fnh rewrites large parts of the original
-|footnote.sty| code. Perhaps a later release will not load at all
-the original package (but it will keep the |\savenotes/\spewnotes|
-interface.)
+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.
+\end{itemize}
+
+% During this I realized (this is unrelated to |footnote| package or
+% \fnh) that there is a typesetting interference of |hyperref| with
+% |babel+frenchb| in the case of the |\footnotemark[N]| syntax. \fnh
+% does not fix that. I reported the problem and perhaps an upstream
+% fix will come at a later date (tested with |hyperref 6.83q| and
+% |frenchb 3.2c|).
\StopEventually{\end{document}\endinput}
\makeatletter
@@ -570,162 +646,184 @@ interface.)
%
%</none>
%<*package>
-% It is surely difficult to understand the code here as its expansion depends on
-% some macros whose definitions are still in |footnote.sty| and used with no
-% modification here: the most important are |\savenotes|, |\fn@startnote|, and
-% |\fn@startfntext| (which is used only for the environment form.) Obviously the
-% macros here depend on what these three do.
-%
-% Surely, next release of \fnh will drop entirely the idea of patching
-% |footnote.sty| and will contain all definitions.
% \begin{macro}{no options}
+% The package has no options.
% \begin{macrocode}
-\DeclareOption*{\PackageWarning{footnotehyper}{Option `\CurrentOption' is unknown}}%
+\DeclareOption*%
+ {\PackageWarning{footnotehyper}{Option `\CurrentOption' is unknown}}%
\ProcessOptions\relax
% \end{macrocode}
% \end{macro}
-% \begin{macro}{\@makefntext}
-% \begin{macro}{\footnote}
-% \begin{macro}{\footnotetext}
-% \begin{macro}{\parbox}
-% \begin{macro}{\fn@endnote}
-% We load |footnote| but leave to the user to take care of |hyperref|.
-%
-% As we need to intercept some re-definitions done by
-% |footnote.sty| we will first check if it is already loaded.
-%
-% If \cs{@makefntext} has been customized and its argument is not visible at
-% top level in its meaning, then loading |footnote.sty| will fail with a low
-% level \TeX\ error. We save its meaning and replace it by an innocuous one
-% for the time being. We will come back to this at begin document.
-%
-% |footnote.sty| modifies |\parbox|. We (|v0.9f|) undo the patch, because
-% modifying |\parbox| in any way for no good reason is BAD.
-%
-% The |\fn@endnote| was |\let| to |\color@endgroup| which is bad as it fails if
-% |color/xcolor| is not yet loaded. Besides its presence was missing from some
-% needed place (see later).
-%
-% We postpone to at begin document the redefinitions of \cs{footnote} and
-% \cs{footnotetext}.
+% 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}
% \begin{macrocode}
-\@ifpackageloaded{footnote}
- {\PackageWarningNoLine{footnotehyper}%
- {Please next time do not load package footnote,^^J
- but leave that to me. For the time being, I will start by undoing the^^J
- modifications it did to \string\parbox. Use \string\fnparbox\space if needed.}%
- }
- {\let\FNH@@makefntext\@makefntext\let\@makefntext\@firstofone
- \RequirePackage{footnote}
- \let\@makefntext\FNH@@makefntext
- }%
-\let\fnparbox\parbox\let\parbox\fn@parbox
-\let\FNH@fn@footnote \footnote % footnote.sty's \footnote will get
-\let\FNH@fn@footnotetext\footnotetext % redefined later. We preserve also
-\let\footnote \fn@latex@@footnote % the meaning of \footnote from prior
-\let\footnotetext\fn@latex@@footnotetext % to the loading of footnote.sty
-\def\fn@endnote {\color@endgroup}%
+\newbox\FNH@notes
+\newdimen\FNH@width
+\let\FNH@colwidth\columnwidth
+\newif\ifFNH@savingnotes
+\AtBeginDocument {%
+ \@ifpackageloaded{hyperref}
+ {\ifHy@hyperfootnotes
+ \let\FNH@latex@footnote \footnote
+ \let\FNH@latex@footnotetext\footnotetext
+ \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
+ \else
+ \PackageInfo{footnotehyper}%
+ {inactive due to hyperfootnotes=false option}%
+ \fi}%
+ {\PackageWarning{footnotehyper}{^^J\@spaces\@spaces*************^^J%
+ \space deactivating myself as hyperref is not detected !^^J}}%
+}%
% \end{macrocode}
-% \end{macro}\end{macro}\end{macro}\end{macro}\end{macro}
-% There are some |\let|'s done by |footnote.sty| in what appears to be
-% premature ways.
+% \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}
-\AtBeginDocument {%
- \let\fn@latex@@footnote \footnote % meaning of \footnote at end of preamble
- \let\fn@latex@@footnotetext\footnotetext
+\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}
-% \begin{macro}{\FNH@inactive}
-% Apart from fixing some of the bugs with |footnote.sty|'s footnote
-% environment, we intervene only if |hyperfootnotes| option of |hyperref|
-% applies.
+% \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}
-\AtBeginDocument{\@ifpackageloaded{hyperref}
- {\ifHy@hyperfootnotes
- \let\fn@fntext \FNH@hyper@fntext
- \let\spewnotes \FNH@hyper@spewnotes
- \let\endsavenotes\spewnotes
- \let\fn@endfntext\FNH@fixed@endfntext
- \let\footnote \FNH@fixed@footnote
- \let\footnotetext\FNH@fixed@footnotetext
- \else
- \FNH@inactive
- \fi }{\FNH@inactive}%
- \let\endfootnote\fn@endfntext
- \let\endfootnotetext\endfootnote
+\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}
-% |v0.9e| did a partial fix of the |footnote| environment from |footnote.sty|,
-% |v0.9f| fix is more complete but is applied only if |hyperref| is present with
-% option |hyperfootnotes=true|.
+% \end{macro}
+% \begin{macro}{\FNH@nohyp@fntext@i}
+% The original \cs{fn@fntext} had no \cs{long}.
% \begin{macrocode}
-\def\FNH@fix@endfntext\@finalstrut\strutbox\fn@postfntext
- {\@finalstrut\strutbox\fn@postfntext\fn@endnote}%
-\def\FNH@inactive {%
- \let\footnote \FNH@fn@footnote
- \let\footnotetext\FNH@fn@footnotetext
- \expandafter\expandafter\expandafter\def
- \expandafter\expandafter\expandafter\fn@endfntext
- \expandafter\expandafter\expandafter
- {\expandafter\FNH@fix@endfntext\fn@endfntext}%
- \PackageInfo{footnotehyper}%
- {hyperref package not loaded or hyperfootnotes^^J
- =false option; I did not activate myself and only patched footnote.sty^^J
- for color/xcolor compatibility, leaving some other issues unfixed.}}%
+\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@hyper@fntext}
-% Some |amsmath| complications. I change the coding, but same effect as
-% in original |\fn@fntext|.
+% \begin{macro}{\FNH@startnote}
+% Same as original (the code comment is kept from original.)
% \begin{macrocode}
-\def\FNH@hyper@fntext {\ifx\ifmeasuring@\undefined\expandafter\@secondoftwo
- \else\expandafter\@firstofone\fi
- {\ifmeasuring@\expandafter\@gobbletwo\fi}%
- \FNH@hyper@fntext@i }%
+\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@hyper@fntext@i}
-% Note: original \cs{fn@fntext} had no \cs{long}, which looks wrong.
-%
-% We do the \cs{ifHy@nesting} test although hyperref's manual
-% says ``Allows links to be nested; no drivers currently support this.''
+% \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}
-\long\def\FNH@hyper@fntext@i #1{\global\setbox\fn@notes\vbox
- {\unvbox\fn@notes
- \fn@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 }%
- \fn@endnote }%
+\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 \@xfootnotetext
+ \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@hyper@spewnotes}
-% The final touch in our hack is to patch the original \cs{spewnotes} for it
-% to use the original, non-hyperref modified, version of \cs{@footnotetext}.
-% And let's not forget \cs{endsavenotes} (done at begin document).
+% \begin{macro}{\FNH@spewnotes}
+% This uses \cs{H@@footnotetext} which is the preserved original
+% meaning of \cs{@footnotetext} not creating a link target.
% \begin{macrocode}
-\def\FNH@hyper@spewnotes {\endgroup
- \if@savingnotes\else\ifvoid\fn@notes\else
- \begingroup\let\@makefntext\@empty
- \let\@finalstrut\@gobble
- \let\rule\@gobbletwo
- \H@@footnotetext{\unvbox\fn@notes}%
- \endgroup\fi\fi
+\def\FNH@spewnotes {%
+ \endgroup
+ \ifFNH@savingnotes\else
+ \ifvoid\FNH@notes\else
+ \begingroup
+ \let\@makefntext\@empty
+ \let\@finalstrut\@gobble
+ \let\rule\@gobbletwo
+ \H@@footnotetext{\unvbox\FNH@notes}%
+ \endgroup
+ \fi
+ \fi
}%
% \end{macrocode}
% \end{macro}
-% \begin{macro}{\FNH@fixed@endfntext}
+% \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
@@ -737,113 +835,186 @@ interface.)
%
% 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 them for |\footnotemark[N]/\footnotetext[N]| syntax.
+% 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|, its |\fn@getmark| isn't used at all.
+% |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@fixed@endfntext {%
- \@finalstrut\strutbox
- \fn@postfntext
- \fn@endnote
- \egroup\FNH@endfntext@next % will decide if link or no link
-}%
-\def\FNH@endfntext@link {\begingroup
- \let\@makefntext\@empty\let\@finalstrut\@gobble\let\rule\@gobbletwo
- \@footnotetext {\unvbox\z@}%
- \endgroup
+\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@endfntext@nolink {\begingroup
- \let\@makefntext\@empty\let\@finalstrut\@gobble
- \let\rule\@gobbletwo
- \if@savingnotes\expandafter\fn@fntext\else\expandafter\H@@footnotetext\fi
- {\unvbox\z@}\endgroup
+\def\FNH@footnoteenv{%
+ \@ifnextchar[%
+ \FNH@footnoteenv@i %]
+ {\stepcounter\@mpfn
+ \protected@xdef\@thefnmark{\thempfn}%
+ \@footnotemark
+ \def\FNH@endfntext@fntext{\@footnotetext}%
+ \FNH@startfntext}%
}%
-% \end{macrocode}
-% \end{macro}
-% \begin{macro}{\FNH@fixed@footnote}
-% \begin{macro}{\FNH@fixed@footnotetext}
-% \begin{macrocode}
-\def\FNH@fixed@footnote {\ifx\@currenvir\fn@footnote
- \expandafter\FNH@footnoteenv\else\expandafter\fn@latex@@footnote\fi }%
-\def\FNH@footnoteenv {\@ifnextchar[\FNH@xfootnoteenv%]
- {\stepcounter\@mpfn
- \protected@xdef\@thefnmark{\thempfn}\@footnotemark
- \def\FNH@endfntext@next{\FNH@endfntext@link}\fn@startfntext}}%
-\def\FNH@xfootnoteenv [#1]{%
+\def\FNH@footnoteenv@i[#1]{%
\begingroup
\csname c@\@mpfn\endcsname #1\relax
\unrestored@protected@xdef\@thefnmark{\thempfn}%
- \endgroup\@footnotemark\def\FNH@endfntext@next{\FNH@endfntext@link}%
- \fn@startfntext}%
-\def\FNH@fixed@footnotetext {\ifx\@currenvir\fn@footnotetext
- \expandafter\FNH@footnotetextenv\else\expandafter\fn@latex@@footnotetext\fi}%
-\def\FNH@footnotetextenv {\@ifnextchar[\FNH@xfootnotetextenv%]
- {\protected@xdef\@thefnmark{\thempfn}%
- \def\FNH@endfntext@next{\FNH@endfntext@link}\fn@startfntext}}%
-\def\FNH@xfootnotetextenv [#1]{%
+ \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\def\FNH@endfntext@next{\FNH@endfntext@nolink}%
- \fn@startfntext }%
+ \endgroup
+ \ifFNH@savingnotes
+ \def\FNH@endfntext@fntext{\FNH@nohyp@fntext}%
+ \else
+ \def\FNH@endfntext@fntext{\H@@footnotetext}%
+ \fi
+ \FNH@startfntext
+}%
% \end{macrocode}
% \end{macro}\end{macro}
-% \begin{macro}{\@makefntext}
-% \begin{macro}{\fn@prefntext}
-% \begin{macro}{\fn@postfntext}
-% The definitions of |\fn@prefntext| and |\fn@prefntext| (which are needed for
-% the |footnote| environment, within |\fn@startfntext| and |\fn@endfntext|)
-% are from a daring analysis done inside |footnote.sty| of |\@makefntext|. It
-% may very easily fail to give a sensible result. \fnh does a check of its own
-% to determine if that was the case but can't salvage the situation, except
-% for hard-coded rescues like done here with |frenchb|. In particular the
-% mechanism is doomed to failure if the parameter in |\@makefntext| is not
-% visible at top level in its meaning. It is also wrong if the parameter is
-% used multiple times. These checks will fail (rather, they are skipped) if
-% |footnote|'s loading was done by the user and not by |footnotehyper|.
+% \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}.
%
-% Note: there is an interference which I could fix here between |hyperref|
-% and |frenchb| regarding |\footnotemark[NUM]|, but it is better to wait it
-% is fixed on |frenchb| side (or |hyperref|'s side !), else my own fix might
-% badly interfere with the ``official'' one |;-)|.
+% The \cs{FNH@endfntext@fntext} may be \cs{@footnotetext} (which will be
+% \cs{FNH@hyper@fntext} in |savingnotes| environment), or
+% \cs{H@@footnotetext}, or \cs{FNH@nohyp@fntext} if in |savingnotes| scope.
% \begin{macrocode}
-\ifx\FNH@@makefntext\undefined\expandafter\@gobble
- \else\expandafter\AtBeginDocument\fi
-{%
- \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
+\def\FNH@startfntext{%
+ \setbox\z@\vbox\bgroup
+ \FNH@startnote
+ \FNH@prefntext
+ \rule\z@\footnotesep\ignorespaces
}%
-\long\def\FNH@check@a #11.2!3?4,#2\FNH@@@#3%
-{%
- \ifx\relax#3\expandafter\@firstoftwo\else\expandafter\@secondoftwo\fi
- \FNH@bad@footnote@env
- {\def\fn@prefntext{#1}\def\fn@postfntext{#2}\FNH@check@b}%
+\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
}%
-\def\FNH@check@b #1\relax
-{%
+% \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@prefntext| (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 cause low level
+% \TeX\
+% errors in bad cases) 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\fn@prefntext
- \meaning\fn@postfntext1.2!3?4,\FNH@check@c\relax
+ \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@check@c #11.2!3?4,#2#3\relax
- {\ifx\FNH@check@c#2\expandafter\@gobble\fi\FNH@bad@footnote@env}%
-\def\FNH@bad@footnote@env
-{\PackageWarningNoLine{footnotehyper}%
- {The footnote environment from package footnote^^J
- will be dysfunctional, sorry (not my fault...). You may try to mail me the^^J
- preamble and/or only the next lines:}%
+\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\fn@prefntext\@empty\let\fn@postfntext\@empty
+ \let\FNH@prefntext\@empty\let\FNH@postfntext\@empty
}%
-\endinput
% \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
%%
diff --git a/Master/texmf-dist/source/latex/footnotehyper/footnotehyper.ins b/Master/texmf-dist/source/latex/footnotehyper/footnotehyper.ins
index e0a60adb4e4..889dd425796 100644
--- a/Master/texmf-dist/source/latex/footnotehyper/footnotehyper.ins
+++ b/Master/texmf-dist/source/latex/footnotehyper/footnotehyper.ins
@@ -1,13 +1,13 @@
%%
%% Package: footnotehyper
-%% Version: 0.9f (2016/10/03)
+%% Version: 0.99 (2017/02/16)
%% License: LPPL 1.3c
-%% Copyright (C) 2016 Jean-Francois Burnol <jfbu at free dot fr>.
+%% Copyright (C) 2016-2017 Jean-Francois Burnol <jfbu at free dot fr>.
%%
\def\pkgname {footnotehyper}
-\def\pkgdate {2016/10/03}
-\def\docdate {2016/10/03}
-\def\pkgversion {v0.9f}
+\def\pkgdate {2017/02/16}
+\def\docdate {2017/02/16}
+\def\pkgversion {v0.99}
\def\pkgdescription {hyperref aware footnote.sty (JFB)}
%%
%% Run tex on this file to extract from footnotehyper.dtx:
diff --git a/Master/texmf-dist/tex/latex/footnotehyper/footnotehyper.sty b/Master/texmf-dist/tex/latex/footnotehyper/footnotehyper.sty
index 42184342406..192a473dcbf 100644
--- a/Master/texmf-dist/tex/latex/footnotehyper/footnotehyper.sty
+++ b/Master/texmf-dist/tex/latex/footnotehyper/footnotehyper.sty
@@ -23,162 +23,233 @@
%%
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{footnotehyper}%
- [2016/10/03 v0.9f hyperref aware footnote.sty (JFB)]
+ [2017/02/16 v0.99 hyperref aware footnote.sty (JFB)]
%%
%% Package: footnotehyper
-%% Version: 0.9f (2016/10/03)
+%% Version: 0.99 (2017/02/16)
%% License: LPPL 1.3c
-%% Copyright (C) 2016 Jean-Francois Burnol <jfbu at free dot fr>.
+%% Copyright (C) 2016-2017 Jean-Francois Burnol <jfbu at free dot fr>.
%%
-\DeclareOption*{\PackageWarning{footnotehyper}{Option `\CurrentOption' is unknown}}%
+\DeclareOption*%
+ {\PackageWarning{footnotehyper}{Option `\CurrentOption' is unknown}}%
\ProcessOptions\relax
-\@ifpackageloaded{footnote}
- {\PackageWarningNoLine{footnotehyper}%
- {Please next time do not load package footnote,^^J
- but leave that to me. For the time being, I will start by undoing the^^J
- modifications it did to \string\parbox. Use \string\fnparbox\space if needed.}%
- }
- {\let\FNH@@makefntext\@makefntext\let\@makefntext\@firstofone
- \RequirePackage{footnote}
- \let\@makefntext\FNH@@makefntext
- }%
-\let\fnparbox\parbox\let\parbox\fn@parbox
-\let\FNH@fn@footnote \footnote % footnote.sty's \footnote will get
-\let\FNH@fn@footnotetext\footnotetext % redefined later. We preserve also
-\let\footnote \fn@latex@@footnote % the meaning of \footnote from prior
-\let\footnotetext\fn@latex@@footnotetext % to the loading of footnote.sty
-\def\fn@endnote {\color@endgroup}%
+\newbox\FNH@notes
+\newdimen\FNH@width
+\let\FNH@colwidth\columnwidth
+\newif\ifFNH@savingnotes
\AtBeginDocument {%
- \let\fn@latex@@footnote \footnote % meaning of \footnote at end of preamble
- \let\fn@latex@@footnotetext\footnotetext
-}%
-\AtBeginDocument{\@ifpackageloaded{hyperref}
+ \@ifpackageloaded{hyperref}
{\ifHy@hyperfootnotes
- \let\fn@fntext \FNH@hyper@fntext
- \let\spewnotes \FNH@hyper@spewnotes
- \let\endsavenotes\spewnotes
- \let\fn@endfntext\FNH@fixed@endfntext
- \let\footnote \FNH@fixed@footnote
- \let\footnotetext\FNH@fixed@footnotetext
+ \let\FNH@latex@footnote \footnote
+ \let\FNH@latex@footnotetext\footnotetext
+ \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
\else
- \FNH@inactive
- \fi }{\FNH@inactive}%
- \let\endfootnote\fn@endfntext
- \let\endfootnotetext\endfootnote
-}%
-\def\FNH@fix@endfntext\@finalstrut\strutbox\fn@postfntext
- {\@finalstrut\strutbox\fn@postfntext\fn@endnote}%
-\def\FNH@inactive {%
- \let\footnote \FNH@fn@footnote
- \let\footnotetext\FNH@fn@footnotetext
- \expandafter\expandafter\expandafter\def
- \expandafter\expandafter\expandafter\fn@endfntext
- \expandafter\expandafter\expandafter
- {\expandafter\FNH@fix@endfntext\fn@endfntext}%
\PackageInfo{footnotehyper}%
- {hyperref package not loaded or hyperfootnotes^^J
- =false option; I did not activate myself and only patched footnote.sty^^J
- for color/xcolor compatibility, leaving some other issues unfixed.}}%
-\def\FNH@hyper@fntext {\ifx\ifmeasuring@\undefined\expandafter\@secondoftwo
- \else\expandafter\@firstofone\fi
- {\ifmeasuring@\expandafter\@gobbletwo\fi}%
- \FNH@hyper@fntext@i }%
-\long\def\FNH@hyper@fntext@i #1{\global\setbox\fn@notes\vbox
- {\unvbox\fn@notes
- \fn@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 }%
- \fn@endnote }%
-}%
-\def\FNH@hyper@spewnotes {\endgroup
- \if@savingnotes\else\ifvoid\fn@notes\else
- \begingroup\let\@makefntext\@empty
- \let\@finalstrut\@gobble
- \let\rule\@gobbletwo
- \H@@footnotetext{\unvbox\fn@notes}%
- \endgroup\fi\fi
-}%
-\def\FNH@fixed@endfntext {%
- \@finalstrut\strutbox
- \fn@postfntext
- \fn@endnote
- \egroup\FNH@endfntext@next % will decide if link or no link
+ {inactive due to hyperfootnotes=false option}%
+ \fi}%
+ {\PackageWarning{footnotehyper}{^^J\@spaces\@spaces*************^^J%
+ \space deactivating myself as hyperref is not detected !^^J}}%
}%
-\def\FNH@endfntext@link {\begingroup
- \let\@makefntext\@empty\let\@finalstrut\@gobble\let\rule\@gobbletwo
- \@footnotetext {\unvbox\z@}%
+\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%
+}%
+\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
+ }%
+}%
+\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
+ }%
+}%
+\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
+}%
+\def\FNH@endnote{\color@endgroup}%
+\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 \@xfootnotetext
+ \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
+}%
+\def\FNH@spewnotes {%
+ \endgroup
+ \ifFNH@savingnotes\else
+ \ifvoid\FNH@notes\else
+ \begingroup
+ \let\@makefntext\@empty
+ \let\@finalstrut\@gobble
+ \let\rule\@gobbletwo
+ \H@@footnotetext{\unvbox\FNH@notes}%
\endgroup
+ \fi
+ \fi
+}%
+\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@endfntext@nolink {\begingroup
- \let\@makefntext\@empty\let\@finalstrut\@gobble
- \let\rule\@gobbletwo
- \if@savingnotes\expandafter\fn@fntext\else\expandafter\H@@footnotetext\fi
- {\unvbox\z@}\endgroup
-}%
-\def\FNH@fixed@footnote {\ifx\@currenvir\fn@footnote
- \expandafter\FNH@footnoteenv\else\expandafter\fn@latex@@footnote\fi }%
-\def\FNH@footnoteenv {\@ifnextchar[\FNH@xfootnoteenv%]
- {\stepcounter\@mpfn
- \protected@xdef\@thefnmark{\thempfn}\@footnotemark
- \def\FNH@endfntext@next{\FNH@endfntext@link}\fn@startfntext}}%
-\def\FNH@xfootnoteenv [#1]{%
+\def\FNH@footnoteenv@i[#1]{%
\begingroup
\csname c@\@mpfn\endcsname #1\relax
\unrestored@protected@xdef\@thefnmark{\thempfn}%
- \endgroup\@footnotemark\def\FNH@endfntext@next{\FNH@endfntext@link}%
- \fn@startfntext}%
-\def\FNH@fixed@footnotetext {\ifx\@currenvir\fn@footnotetext
- \expandafter\FNH@footnotetextenv\else\expandafter\fn@latex@@footnotetext\fi}%
-\def\FNH@footnotetextenv {\@ifnextchar[\FNH@xfootnotetextenv%]
- {\protected@xdef\@thefnmark{\thempfn}%
- \def\FNH@endfntext@next{\FNH@endfntext@link}\fn@startfntext}}%
-\def\FNH@xfootnotetextenv [#1]{%
+ \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\def\FNH@endfntext@next{\FNH@endfntext@nolink}%
- \fn@startfntext }%
-\ifx\FNH@@makefntext\undefined\expandafter\@gobble
- \else\expandafter\AtBeginDocument\fi
-{%
- \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@footnote@env
- {\def\fn@prefntext{#1}\def\fn@postfntext{#2}\FNH@check@b}%
-}%
-\def\FNH@check@b #1\relax
-{%
+ \endgroup
+ \ifFNH@savingnotes
+ \def\FNH@endfntext@fntext{\FNH@nohyp@fntext}%
+ \else
+ \def\FNH@endfntext@fntext{\H@@footnotetext}%
+ \fi
+ \FNH@startfntext
+}%
+\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
+}%
+\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\fn@prefntext
- \meaning\fn@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@footnote@env}%
-\def\FNH@bad@footnote@env
-{\PackageWarningNoLine{footnotehyper}%
- {The footnote environment from package footnote^^J
- will be dysfunctional, sorry (not my fault...). You may try to mail me the^^J
- preamble and/or only the next lines:}%
+ \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\fn@prefntext\@empty\let\fn@postfntext\@empty
+ \let\FNH@prefntext\@empty\let\FNH@postfntext\@empty
+}%
+\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
+ }%
}%
\endinput
%%