summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/footnoterange/footnoterange.dtx
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/footnoterange/footnoterange.dtx
Initial commit
Diffstat (limited to 'macros/latex/contrib/footnoterange/footnoterange.dtx')
-rw-r--r--macros/latex/contrib/footnoterange/footnoterange.dtx1126
1 files changed, 1126 insertions, 0 deletions
diff --git a/macros/latex/contrib/footnoterange/footnoterange.dtx b/macros/latex/contrib/footnoterange/footnoterange.dtx
new file mode 100644
index 0000000000..50432562ea
--- /dev/null
+++ b/macros/latex/contrib/footnoterange/footnoterange.dtx
@@ -0,0 +1,1126 @@
+% \iffalse meta-comment
+%
+% File: footnoterange.dtx
+% Version: 2018/10/15 v1.0b
+%
+% Copyright (C) 2012 - 2018 by
+% H.-Martin M"unch <Martin dot Muench at Uni-Bonn dot de>
+% Portions of code copyrighted by other people as marked;
+% lines marked "FMi": code by Frank Mittelbach, thanks!
+%
+% This work may be distributed and/or modified under the
+% conditions of the LaTeX Project Public License, either
+% version 1.3c of this license or (at your option) any later
+% version. This version of this license is in
+% https://www.latex-project.org/lppl/lppl-1-3c.txt
+% and the latest version of this license is in
+% https://www.latex-project.org/lppl.txt
+% and version 1.3c or later is part of all distributions of
+% LaTeX version 2005/12/01 or later.
+%
+% This work has the LPPL maintenance status "maintained".
+%
+% The Current Maintainer of this work is H.-Martin Muench.
+%
+% This work consists of the main source file footnoterange.dtx,
+% the README, and the derived files
+% footnoterange.sty, footnoterange.pdf,
+% footnoterange.ins, footnoterange.drv,
+% footnoterange-example.tex, footnoterange-example.pdf.
+%
+% 'footnoterange' is available on CTAN:
+% https://www.ctan.org/pkg/footnoterange
+%
+% Also a TDS.ZIP file is provided that contains all the files
+% already sorted in a TDS tree:
+% http://mirror.ctan.org/install/macros/latex/contrib/footnoterange.tds.zip
+%
+% Unpacking:
+% (a) If footnoterange.ins is present:
+% tex footnoterange.ins
+% (b) Without footnoterange.ins:
+% tex footnoterange.dtx
+% (c) If you insist on using LaTeX
+% latex \let\install=y\input{footnoterange.dtx}
+% (quote the arguments according to the demands of your shell)
+%
+% Documentation:
+% (a) If footnoterange.drv is present:
+% (pdf)latex footnoterange.drv
+% makeindex -s gind.ist footnoterange.idx
+% (pdf)latex footnoterange.drv
+% makeindex -s gind.ist footnoterange.idx
+% (pdf)latex footnoterange.drv
+% (b) Without footnoterange.drv:
+% (pdf)latex footnoterange.dtx
+% makeindex -s gind.ist footnoterange.idx
+% (pdf)latex footnoterange.dtx
+% makeindex -s gind.ist footnoterange.idx
+% (pdf)latex footnoterange.dtx
+%
+% The class ltxdoc loads the configuration file ltxdoc.cfg
+% if available. Here you can specify further options, e.g.
+% use DIN A4 as paper format:
+% \PassOptionsToClass{a4paper}{article}
+%
+% Installation:
+% TDS:tex/latex/footnoterange/footnoterange.sty
+% TDS:doc/latex/footnoterange/footnoterange.pdf
+% TDS:doc/latex/footnoterange/footnoterange-example.tex
+% TDS:doc/latex/footnoterange/footnoterange-example.pdf
+% TDS:source/latex/footnoterange/footnoterange.dtx
+%
+%<*ignore>
+\begingroup
+ \catcode123=1 %
+ \catcode125=2 %
+ \def\x{LaTeX2e}%
+\expandafter\endgroup
+\ifcase 0\ifx\install y1\fi\expandafter
+ \ifx\csname processbatchFile\endcsname\relax\else1\fi
+ \ifx\fmtname\x\else 1\fi\relax
+\else\csname fi\endcsname
+%</ignore>
+%<*install>
+\input docstrip.tex
+\Msg{*********************************************************************************}
+\Msg{* Installation}
+\Msg{* Package: footnoterange 2018/10/15 v1.0b References to ranges of footnotes (HMM)}
+\Msg{*********************************************************************************}
+
+\keepsilent
+\askforoverwritefalse
+
+\let\MetaPrefix\relax
+\preamble
+
+This is a generated file.
+
+Project: footnoterange
+Version: 2018/10/15 v1.0b
+
+Copyright (C) 2012 - 2018 by
+ H.-Martin M"unch <Martin dot Muench at Uni-Bonn dot de>
+Portions of code copyrighted by other people as marked;
+lines marked "FMi": code by Frank Mittelbach, thanks!
+
+The usual disclaimer applies:
+If it doesn't work right that's your problem.
+(Nevertheless, please send an e-mail to the maintainer
+ when you find an error in this package.)
+
+This work may be distributed and/or modified under the
+conditions of the LaTeX Project Public License, either
+version 1.3c of this license or (at your option) any later
+version. This version of this license is in
+ https://www.latex-project.org/lppl/lppl-1-3c.txt
+and the latest version of this license is in
+ https://www.latex-project.org/lppl.txt
+and version 1.3c or later is part of all distributions of
+LaTeX version 2005/12/01 or later.
+
+This work has the LPPL maintenance status "maintained".
+
+The Current Maintainer of this work is H.-Martin Muench.
+
+This work consists of the main source file footnoterange.dtx,
+the README, and the derived files
+ footnoterange.sty, footnoterange.pdf,
+ footnoterange.ins, footnoterange.drv,
+ footnoterange-example.tex, footnoterange-example.pdf.
+
+In memoriam
+ Claudia Simone Barth + 1996/01/30
+ Tommy Muench + 2014/01/02
+ Hans-Klaus Muench + 2014/08/24
+
+\endpreamble
+\let\MetaPrefix\DoubleperCent
+
+\generate{%
+ \file{footnoterange.ins}{\from{footnoterange.dtx}{install}}%
+ \file{footnoterange.drv}{\from{footnoterange.dtx}{driver}}%
+ \usedir{tex/latex/footnoterange}%
+ \file{footnoterange.sty}{\from{footnoterange.dtx}{package}}%
+ \usedir{doc/latex/footnoterange}%
+ \file{footnoterange-example.tex}{\from{footnoterange.dtx}{example}}%
+}
+
+\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{* footnoterange.sty}
+\Msg{*}
+\Msg{* To produce the documentation run the file `footnoterange.drv'}
+\Msg{* through (pdf)LaTeX, e.g.}
+\Msg{* pdflatex footnoterange.drv}
+\Msg{* makeindex -s gind.ist footnoterange.idx}
+\Msg{* pdflatex footnoterange.drv}
+\Msg{* makeindex -s gind.ist footnoterange.idx}
+\Msg{* pdflatex footnoterange.drv}
+\Msg{*}
+\Msg{* At least three runs are necessary e.g. to get the}
+\Msg{* references right!}
+\Msg{*}
+\Msg{* Happy TeXing!}
+\Msg{*}
+\Msg{************************************************************************}
+
+\endbatchfile
+%</install>
+%<*ignore>
+\fi
+%</ignore>
+%
+% \section{The documentation driver file}
+%
+% The next bit of code contains the documentation driver file for
+% \TeX , i.\,e., the file that will produce the documentation you
+% are currently reading. It will be extracted from this file by the
+% \verb|docstrip| programme. That is, run \LaTeX{} on \verb|docstrip|
+% and specify the \verb|driver| option when \verb|docstrip|
+% asks for options.
+%
+% \begin{macrocode}
+%<*driver>
+\NeedsTeXFormat{LaTeX2e}[2015/01/01]
+\ProvidesFile{footnoterange.drv}[2018/10/15 v1.0b
+ References to ranges of footnotes (HMM)]
+\documentclass{ltxdoc}[2015/03/26]% v2.0w
+\usepackage{holtxdoc}[2012/03/21]% v0.24
+%% footnoterange may work with earlier versions of LaTeX2e and those
+%% class and package, but this was not tested.
+%% Please consider updating your LaTeX, class, and package
+%% to the most recent version (if they are not already the most
+%% recent version).
+\hypersetup{%
+ pdfsubject={References to ranges of footnotes (HMM)},%
+ pdfkeywords={LaTeX, footnoterange, footnotes, footnote, reference, H.-Martin Muench},%
+ pdfencoding=auto,%
+ pdflang={en},%
+ breaklinks=true,%
+ linktoc=all,%
+ pdfstartview=FitH,%
+ pdfpagelayout=OneColumn,%
+ bookmarksnumbered=true,%
+ bookmarksopen=true,%
+ bookmarksopenlevel=3,%
+ pdfmenubar=true,%
+ pdftoolbar=true,%
+ pdfwindowui=true,%
+ pdfnewwindow=true%
+}
+\CodelineIndex
+\hyphenation{printing docu-ment}
+\gdef\unit#1{\mathord{\thinspace\mathrm{#1}}}
+\begin{document}
+ \DocInput{footnoterange.dtx}%
+\end{document}
+%</driver>
+% \end{macrocode}
+%
+% \fi
+%
+% \CheckSum{321}
+%
+% \CharacterTable
+% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
+% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
+% Digits \0\1\2\3\4\5\6\7\8\9
+% Exclamation \! Double quote \" Hash (number) \#
+% Dollar \$ Percent \% Ampersand \&
+% Acute accent \' Left paren \( Right paren \)
+% Asterisk \* Plus \+ Comma \,
+% Minus \- Point \. Solidus \/
+% Colon \: Semicolon \; Less than \<
+% Equals \= Greater than \> Question mark \?
+% Commercial at \@ Left bracket \[ Backslash \\
+% Right bracket \] Circumflex \^ Underscore \_
+% Grave accent \` Left brace \{ Vertical bar \|
+% Right brace \} Tilde \~}
+%
+% \GetFileInfo{footnoterange.drv}
+%
+% \begingroup
+% \def\x{\#,\$,\^,\_,\~,\ ,\&,\{,\},\%}%
+% \makeatletter
+% \@onelevel@sanitize\x
+% \expandafter\endgroup
+% \expandafter\DoNotIndex\expandafter{\x}
+% \expandafter\DoNotIndex\expandafter{\string\ }
+% \begingroup
+% \makeatletter
+% \lccode`9=32\relax
+% \lowercase{%^^A
+% \edef\x{\noexpand\DoNotIndex{\@backslashchar9}}%^^A
+% }%^^A
+% \expandafter\endgroup\x
+% \DoNotIndex{\,,\\}
+% \DoNotIndex{\documentclass,\usepackage,\ProvidesPackage,\begin,\end}
+% \DoNotIndex{\MessageBreak}
+% \DoNotIndex{\NeedsTeXFormat,\DoNotIndex,\verb}
+% \DoNotIndex{\def,\edef,\gdef,\global,\xdef}
+% \DoNotIndex{\ifx,\listfiles,\mathord,\mathrm}
+% \DoNotIndex{\bigskip,\space,\thinspace,\ldots}
+% \DoNotIndex{\indent,\noindent,\newline,\linebreak,\pagebreak,\newpage}
+% \DoNotIndex{\textbf,\textit,\textsf,\textsc,\texttt,\textquotedblleft,\textquotedblright}
+% \DoNotIndex{\plainTeX,\TeX,\LaTeX,\pdfLaTeX}
+% \DoNotIndex{\section,\pagenumbering,\smallskip}
+% \DoNotIndex{\@ifpackageloaded}
+% \DoNotIndex{\arabic, \Alph, \alph, \alphalph, \Roman, \roman, \fnsymbol}
+%
+% \title{The \xpackage{footnoterange} package}
+% \date{2018/10/15 v1.0b}
+% \author{H.-Martin M\"{u}nch\\\xemail{Martin.Muench at Uni-Bonn.de}}
+%
+% \maketitle
+%
+% \begin{abstract}
+% \noindent This package provides the environments |footnoterange| and
+% |footnoterange*|. Multiple footnotes inside these environments
+% are not referenced as e.\,g.
+% \makeatletter%
+% \hbox{\textquotedblleft \@textsuperscript {\normalfont 1 2 3}\textquotedblright}
+% but as \hbox{\textquotedblleft \@textsuperscript {\normalfont 1--3}\textquotedblright ,\ }
+% \makeatother%
+% i.\,e. the range (from first to last referred footnote at that place) is given.
+% Depending on loading of \xpackage{hyperref} and use of its |hyperfootnotes|-option
+% the references are hyperlinked. (References to footnotes in |footnoterange*|
+% are never hyperlinked.)
+% \end{abstract}
+%
+% \bigskip
+%
+% \noindent Disclaimer for web links: The author is not responsible for any contents
+% referred to in this work unless if having full knowledge of illegal contents.
+% If any damage occurs by the use of information presented there, only the
+% author of the respective pages might be liable, not the one who has referred
+% to these pages.
+%
+% \noindent Save per page about $200\unit{ml}$ water,
+% $2\unit{g}$ CO$_{2}$ and $2\unit{g}$ wood:
+% Therefore please print only if this is really necessary.
+%
+% \bigskip
+%
+% \tableofcontents
+%
+%\newpage
+%
+% \section{Introduction}
+% \indent This \LaTeXe{} package provides the environments |footnoterange| and\newline
+% |footnoterange*|. Multiple footnotes inside these environments are not referenced
+% as e.\,g.
+% \makeatletter%
+% \hbox{\textquotedblleft \@textsuperscript {\normalfont 1 2 3}\textquotedblright}
+% but as \hbox{\textquotedblleft \@textsuperscript {\normalfont 1--3}\textquotedblright ,\ }
+% \makeatother%
+% i.\,e. the range (from first to last
+% referred footnote at that place) is given. Depending on loading of
+% \xpackage{hyperref} and use of its |hyperfootnotes|-option the references are
+% hyperlinked. References to footnotes in |footnoterange*| are never hyperlinked.\newline
+% |\footnotemark\footnotetext| instead of |\footnote| is not supported inside
+% |footnoterange| and |footnoterange*| environments.
+%
+% \bigskip
+%
+% \section{Usage}
+%
+% \indent Just load the package placing
+% \begin{quote}
+% |\usepackage{footnoterange}|
+% \end{quote}
+% \noindent in the preamble of your \LaTeXe{} source file. There are no options to
+% be used. The package should be loaded after \xpackage{hyperref} (if that package is used)
+% and after any other package redefining footnotes. Usage of the |footnoterange| (or
+% |footnoterange*|) environment is simple: Just encapsulate the footnotes, which shall
+% be referred as range instead of referencing as single ones (see the example file).
+%
+% About hyperlinks:\newline
+% Footnote-references in a |footnoterange*| environment are never hyperlinked.\newline
+% Footnote-references in a |footnoterange| environment may be hyperlinked:
+% \begin{itemize}
+% \item When the \xpackage{hyperref} package is not loaded, they are not
+% hyperlinked (naturally).
+% \item When the \xpackage{hyperref} package is loaded, it depends on the
+% |hyperfootnotes| option of the \xpackage{hyperref} package:
+% \begin{itemize}
+% \item With |hyperfootnotes=true|, the references are hyperlinked.
+% \item With |hyperfootnotes=false|, the references are not hyperlinked.
+% \end{itemize}
+% \end{itemize}
+% |\footnote|s inside of the |footnoterange|/{}|footnoterange*| environment
+% can use the optional parameter, i.\,e. |\footnote[42]{text}| even if this is the
+% third footnote. When giving ranges as reference, this does not seem to be
+% such a good idea, if this is not done consistently (i.\,e. footnotes
+% |[42], [43], [44]| resulting in 42--44 is OK,
+% but |[42]| (original~2), unchanged~3, unchanged~4 resulting in
+% 42--4 is confusing). A warning about these changed footnotemarks is written
+% into the \xfile{.log}-file.
+%
+% When there is only a single footnote in a |footnoterange| environment,
+% this does not produce some reference like %
+% \makeatletter%
+% \hbox{\textquotedblleft \@textsuperscript {\normalfont 7--7}\textquotedblright{},\ }%
+% \makeatother%
+% but only one footnotemark is used automatically. Because it is strange to use
+% a |footnoterange| environment without a range of footnotes, an info is written
+% into the \xfile{.log}-file about this.
+%
+% The usage of other footnote-number-representations
+% (e.\,g.~\verb|\Roman|, \verb|\roman|, \verb|\Alph|, \verb|\alph|,
+% \verb|\fnsymbol|) is also possible, but two things must be taken
+% into account: The number of footnote references is restricted (for
+% example with \verb|\Alph| only references A to Z are possible), which
+% can be fixed e.\,g. with the \url{https://ctan.org/pkg/alphalph} package
+% (but not automatically), and references to footnote-symbol-ranges (\verb|\fnsymbol|)
+% are probably not very clear.
+%
+% \subsection*{Options}
+% \indent The \xpackage{footnoterange} package takes no options.
+%
+% \section{Alternatives\label{sec:Alternatives}}
+%
+% The \xpackage{fnpct} (\url{https://www.ctan.org/pkg/fnpct}) package allows to set
+% multiple footnotes (|\multfootnote|), suppress a footnotemark \hbox{(|*|),}
+% and customize the multi-footnote-separator \hbox{(|\setfnpct{mult-fn-sep={|
+% \emph{something} |}}|)}.
+% Combining these with stepping of the footnotecounter gives a footnoterange:
+%
+% \begin{verbatim}
+% \documentclass{article}
+% \usepackage{hyperref}
+% \usepackage{fnpct}
+% \begin{document}
+% The three little pigs built their houses
+% out of straw\footnote{not to be confused with hay},
+% sticks\footnote{or lumber according to some sources}
+% and bricks%
+% \makeatletter%
+% \setfnpct{mult-fn-sep={--}}%
+% \multfootnote{probably fired clay bricks\addtocounter\@mpfn{+1};%
+% *or something else;%
+% what do I know}. %
+% \makeatother%
+% \end{document}
+% \end{verbatim}
+%
+% \noindent If you programmed or found another alternative, which is available at
+% \url{https://www.CTAN.org/}, please send an e-mail to me with the name,
+% location at CTAN, and a short notice, and I will probably list it here.
+%
+% \section{Example}
+%
+% \begin{macrocode}
+%<*example>
+\documentclass[british]{article}[2014/09/29]% v1.4h
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\usepackage[%
+ extension=pdf,%
+ plainpages=false,%
+ pdfpagelabels=true,%
+ hyperindex=false,%
+ pdflang={en},%
+ pdftitle={footnoterange package example},%
+ pdfauthor={H.-Martin Muench},%
+ pdfsubject={Example for the footnoterange package},%
+ pdfkeywords={LaTeX, footnoterange, H.-Martin Muench},%
+ pdfview=FitH,%
+ pdfstartview=FitH,%
+ pdfpagelayout=OneColumn,%
+ hyperfootnotes=true%
+]{hyperref}[2012/11/06]% v6.83m
+
+\usepackage{footnoterange}[2018/10/15]% v1.0b
+
+\gdef\unit#1{\mathord{\thinspace\mathrm{#1}}}%
+\listfiles
+\begin{document}
+\pagenumbering{arabic}
+\section*{Example for footnoterange}
+
+This example demonstrates the use of package\newline
+\textsf{footnoterange}, v1.0b as of 2018/10/15 (HMM).\newline
+The package does not use options.\newline
+\verb|footnoterange-example.pdf| can be created by\newline
+\verb|pdflatex footnoterange-example.tex|,\newline
+and \verb|footnoterange-example.tex| can be created by\newline
+\verb|tex footnoterange.dtx|.\newline
+\verb|footnoterange.dtx| is at
+\url{https://www.ctan.org/pkg/footnoterange}.\newline
+
+\noindent For more details please see the documentation!\newline
+
+\noindent Save per page about $200\unit{ml}$ water,
+$2\unit{g}$ CO$_{2}$ and $2\unit{g}$ wood:\newline
+Therefore please print only if this is really necessary.\newline
+
+This\footnote{Lorem} text bears a multiplicity of footnotes.
+Because the \verb|hyperref| package is used with option
+\verb|hyperfootnotes=true|, the footnotes
+\begin{footnoterange}
+\footnote{ipsum}%
+\footnote{dolor}%
+\footnote{sit}%
+\footnote{amet,}%
+\footnote{consectetur}%
+\footnote{adipisicing}%
+\footnote{elit,}%
+\footnote{sed}%
+\end{footnoterange}
+are hyperlinked.\footnote{do eiusmod\ldots} Using
+\verb|hyperfootnotes=false| or not using \verb|hyperref|
+will remove the hyperlinks to the footnotes.\medskip
+
+This text also bears a multiplicity of footnotes,
+but due to the use of the starred
+\begin{footnoterange*}
+\footnote{Ut purus elit,}%
+\footnote{vestibulum ut,}%
+\footnote{placerat ac,}%
+\footnote{adipiscing vitae,}%
+\footnote{felis.}%
+\footnote{Curabitur}%
+\footnote{dictum}%
+\footnote{gravida}%
+\end{footnoterange*}
+form of the environment they are not
+hyperlinked.\footnote{mauris\ldots}\medskip
+
+The use of the optional parameter for footnotes
+\begin{footnoterange}
+\footnote[101]{Nam arcu libero,}%
+\footnote[102]{nonummy eget,}%
+\footnote[103]{consectetuer id,}%
+\footnote[104]{vulputate a,}%
+\footnote[105]{magna.}
+\end{footnoterange}
+is also possible, but should be used consistently.
+
+\pagebreak
+
+When there is only one footnote
+\begin{footnoterange}
+\footnote{a single footnote}
+\end{footnoterange}
+in the \verb|footnoterange| environment, only one
+footnotemark is used and an info is written into the
+\verb|log|-file.\medskip
+
+The usage of other footnote-number-representations
+(e.\,g.~\verb|\Roman|, \verb|\roman|, \verb|\Alph|, \verb|\alph|,
+\verb|\fnsymbol|) is also possible, but two things must be taken
+into account: The number of footnote references is restricted
+(for example with \verb|\Alph| only references A to Z are possible),
+which can be fixed e.\,g. with the
+\href{https://www.ctan.org/pkg/alphalph}{\texttt{alphalph} package},
+and references to footnote-symbol-ranges (\verb|\fnsymbol|)
+are probably not very clear.
+
+\end{document}
+%</example>
+% \end{macrocode}
+%
+% \StopEventually{}
+%
+% \section{The implementation}
+%
+% We start off by checking that we are loading into \LaTeXe{} and
+% announcing the name and version of this package.
+%
+% \begin{macrocode}
+%<*package>
+% \end{macrocode}
+%
+% \begin{macrocode}
+\NeedsTeXFormat{LaTeX2e}[2011/06/27]
+\ProvidesPackage{footnoterange}[2018/10/15 v1.0b
+ References to ranges of footnotes (HMM)]
+% \end{macrocode}
+%
+% A short description of the \xpackage{footnoterange} package:
+%
+% \begin{macrocode}
+%% Provides the footnoterange and footnoterange* environments to
+%% refer to ranges of footnotes.
+% \end{macrocode}
+%
+% We need the \xpackage{ltxcmds} package:
+%
+% \begin{macrocode}
+\RequirePackage{ltxcmds}[2011/11/09]% v1.22; for "\ltx@ifpackageloaded"
+\RequirePackage{letltxmacro}[2010/09/02]% v1.4; for "\GlobalLetLtxMacro"
+
+% \end{macrocode}
+%
+% We use |\ifHy@hyperfootnotes ... \else ... \fi|, but when the \xpackage{hyperref}
+% package has not been loaded, |\ifHy@hyperfootnotes| is not defined, and \LaTeX
+% relates the |\else| and/or |\fi| (wrongly) to other |\if|s or groups.
+% Therefore the |\ifHy@hyperfootnotes| are placed in their own commands,
+% which are not looked at when the \xpackage{hyperref} package has not been loaded.
+%
+% \pagebreak
+%
+% \begin{macro}{\fnr@ifhyperrfn}
+% \begin{macrocode}
+\newcommand{\fnr@ifhyperrfn}{%
+ \ifHy@hyperfootnotes% option hyperfootnotes=true
+ \addtocounter{Hfootnote}{+1}%
+ % Code from the hyperref package
+ \global\let\Hy@saved@currentHref\@currentHref%
+ \hyper@makecurrent{Hfootnote}%
+ \global\let\Hy@footnote@currentHref\@currentHref%
+ \global\let\@currentHref\Hy@saved@currentHref%
+ % End of code from the hyperref package
+ \fi%
+}
+
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\fnr@rangefootnote}
+% The |\fnr@rangefootnote| is the internal replacement for the original\newline
+% |\footnote| command inside of a |footnoterange| environment.
+%
+% \begin{macrocode}
+\newcommand{\fnr@rangefootnote}[2][\empty]{%
+% \end{macrocode}
+%
+% |#1| contains the optional argument, which is predefined as |\empty|.
+%
+% \begin{macrocode}
+ \nolinebreak%
+ % no \footnotemark here
+ \addtocounter\@mpfn{+1}%
+ \ltx@ifpackageloaded{hyperref}{\fnr@ifhyperrfn}{\relax}%
+% \end{macrocode}
+%
+% See the explanation before the declaration of the |\fnr@ifhyperrfn| command!
+%
+% \begin{macrocode}
+ \xdef\fnr@opt{#1}% contains the optional argument
+ \xdef\fnr@arabic{\arabic\@mpfn}%
+ \edef\fnr@formated{\thefootnote}%
+% \end{macrocode}
+%
+% The |\footnotemark| is not set (yet), but the |\footnotetext|,
+% and it gets a label.
+%
+% \begin{macrocode}
+ \ifx\fnr@opt\empty%
+ \footnotetext{\label{fnr:\fnr@arabic}#2}%
+ \else%
+ \PackageWarning{footnoterange}{%
+ Custom footnote-numbers used in a footnoterange\MessageBreak%
+ environment: Footnote with natural number\MessageBreak%
+ \ifx\fnr@formated\fnr@arabic%
+ \fnr@arabic\space%
+ \else%
+ \space\fnr@arabic\space (\fnr@formated )%
+ \fi%
+ \MessageBreak%
+ was renumbered to \fnr@opt\MessageBreak%
+ }%
+ \ltx@ifpackageloaded{hyperref}{% hyperref loaded
+ \footnotetext[#1]{\phantomsection\label{fnr:\fnr@arabic}#2}%
+ }{% hyperref not loaded
+ \footnotetext[#1]{\label{fnr:\fnr@arabic}#2}%
+ }%
+ \fi%
+}
+
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macrocode}
+
+% \end{macrocode}
+% \pagebreak
+%
+% |\ifHy@hyperfootnotes| \textquotedblleft encapsulation\textquotedblright{} again:
+%
+% \begin{macro}{\fnr@ifhyperfnrA}
+% \begin{macrocode}
+\newcommand{\fnr@ifhyperfnrA}{%
+ \ifHy@hyperfootnotes% option hyperfootnotes=true
+ \hbox{\hyperref[fnr:\fnr@first]{%
+ \@textsuperscript{\normalfont \ref*{fnr:\fnr@first}}}}%
+ \else% option hyperfootnotes=false
+ \hbox{\@textsuperscript{\normalfont \ref*{fnr:\fnr@first}}}%
+ \fi%
+}
+
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\fnr@ifhyperfnrN}
+% \begin{macrocode}
+\newcommand{\fnr@ifhyperfnrN}{%
+ \ifHy@hyperfootnotes% option hyperfootnotes=true
+ \hbox{\hyperref[fnr:\fnr@first]{%
+ \@textsuperscript{\normalfont \ref*{fnr:\fnr@first}}}%
+ \@textsuperscript{\normalfont --}%
+ \hyperref[fnr:\arabic\@mpfn]{%
+ \@textsuperscript{\normalfont \ref*{fnr:\arabic\@mpfn}}}}%
+ \else% option hyperfootnotes=false
+ \hbox{\@textsuperscript{\normalfont \ref*{fnr:\fnr@first}%
+ --\ref*{fnr:\arabic\@mpfn}}}%
+ \fi%
+}
+
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{environment}{footnoterange}
+% The |footnoterange| environment remembers the next footnote number as\newline
+% |\fnr@first| and the current |\footnote| definition as |\fnr@origfn|
+% and uses |\fnr@rangefootnote| instead.
+%
+% \begin{macrocode}
+\newenvironment{footnoterange}{%
+ % at begin of the footnoterange environment
+ \ifhmode \unskip \fi% FMi
+ \addtocounter\@mpfn{+1}%
+ \xdef\fnr@first{\arabic\@mpfn}%
+ \addtocounter\@mpfn{-1}%
+ \let\fnr@origfn\footnote%
+ \let\footnote\fnr@rangefootnote%
+ \GlobalLetLtxMacro{\fnr@origfnmark}{\footnotemark}%
+ \GlobalLetLtxMacro{\footnotemark}{\fnr@rangefootnotemark}%
+ \ignorespaces% FMi
+% \end{macrocode}
+%
+% End of the environment:
+%
+% \begin{macrocode}
+}{% at end of the footnoterange environment
+ \ifhmode% FMi
+ \unskip% FMi
+% \end{macrocode}
+%
+% Remember the spacefactor for restoring after the environment has ended
+% (only in |hmode|!). \% FMi
+%
+% \begin{macrocode}
+ \xdef\fnr@aftergroup{\spacefactor\the\spacefactor\relax}% FMi
+ \else% FMi
+% \end{macrocode}
+%
+% Otherwise do something harmless. \% FMi
+%
+% \begin{macrocode}
+ \xdef\fnr@aftergroup{\relax}%
+ \fi% FMi
+% \end{macrocode}
+%
+% At the end of the environment the previous definition of |\footnote| is restored
+%
+% \begin{macrocode}
+ \let\footnote\fnr@origfn%
+ \GlobalLetLtxMacro{\footnotemark}{\fnr@origfnmark}%
+% \end{macrocode}
+%
+% and the references are placed:
+%
+% \begin{macrocode}
+ \ifx\fnr@first\fnr@arabic% There is only one reference in the environment.
+ \PackageInfo{footnoterange}{%
+ Environment footnoterange used,\MessageBreak%
+ but only one footnote (number \fnr@first ) is contained%
+ \MessageBreak%
+ }%
+ \ltx@ifpackageloaded{hyperref}{\fnr@ifhyperfnrA% hyperref package loaded
+ }{% hyperref package not loaded
+ \hbox{\@textsuperscript{\normalfont \ref{fnr:\fnr@first}}}%
+ }%
+ \else%
+ \ltx@ifpackageloaded{hyperref}{\fnr@ifhyperfnrN% hyperref package loaded
+ }{% hyperref package not loaded
+ \hbox{\@textsuperscript{\normalfont \ref{fnr:\fnr@first}%
+ --\ref{fnr:\arabic\@mpfn}}}%
+ }%
+ \fi%
+% \end{macrocode}
+%
+% Restore the spacefactor after the environment has ended. \% FMi
+%
+% \begin{macrocode}
+ \aftergroup\fnr@aftergroup% FMi
+}
+
+% \end{macrocode}
+% \end{environment}
+%
+% \begin{environment}{footnoterange*}
+% The |footnoterange*| environment does the same as the |footnoterange|
+% environment but suppresses all hyperlinks to footnotes inside.
+%
+% \begin{macrocode}
+\newenvironment{footnoterange*}{%
+ % at begin of the footnoterange* environment
+ \ifhmode \unskip \fi% FMi
+ \addtocounter\@mpfn{+1}%
+ \xdef\fnr@first{\arabic\@mpfn}%
+ \addtocounter\@mpfn{-1}%
+ \let\fnr@origfn\footnote%
+ \let\footnote\fnr@rangefootnote%
+ \GlobalLetLtxMacro{\fnr@origfnmark}{\footnotemark}%
+ \GlobalLetLtxMacro{\footnotemark}{\fnr@rangefootnotemark}%
+ \ignorespaces% FMi
+}{% at end of the footnoterange* environment
+ \ifhmode% FMi
+ \unskip% FMi
+ \xdef\fnr@aftergroup{\spacefactor\the\spacefactor\relax}% FMi
+ \else% FMi
+ \xdef\fnr@aftergroup{\relax}%
+ \fi% FMi
+ \let\footnote\fnr@origfn%
+ \GlobalLetLtxMacro{\footnotemark}{\fnr@origfnmark}%
+ \ifx\fnr@first\fnr@arabic% There is only one reference in the environment.
+ \PackageInfo{footnoterange}{%
+ Environment footnoterange used,\MessageBreak%
+ but only one footnote (number \fnr@first ) is contained%
+ \MessageBreak%
+ }%
+% \end{macrocode}
+% \pagebreak
+% \begin{macrocode}
+ \ltx@ifpackageloaded{hyperref}{% hyperref package loaded
+ \hbox{\@textsuperscript{\normalfont \ref*{fnr:\fnr@first}}}%
+ }{% hyperref package not loaded
+ \hbox{\@textsuperscript{\normalfont \ref{fnr:\fnr@first}}}%
+ }%
+ \else%
+ \ltx@ifpackageloaded{hyperref}{% hyperref package loaded
+ \hbox{\@textsuperscript{\normalfont \ref*{fnr:\fnr@first}%
+ --\ref*{fnr:\arabic\@mpfn}}}%
+ }{% hyperref package not loaded
+ \hbox{\@textsuperscript{\normalfont \ref{fnr:\fnr@first}%
+ --\ref{fnr:\arabic\@mpfn}}}%
+ }%
+ \fi%
+ \aftergroup\fnr@aftergroup% FMi
+}
+
+% \end{macrocode}
+% \end{environment}
+%
+% The \xpackage{footnoterange} package does not handle |\footnotemark|s,
+% but at least the user is made aware of this:
+%
+% \begin{macro}{\fnr@rangefootnotemark}
+% \begin{macrocode}
+
+\newcommand{\fnr@rangefootnotemark}[1][\empty]{%
+ \PackageError{footnoterange}{%
+ \string\footnotemark\space not supported in footnoterange(*) environment%
+ }{The footnoterange package does not handle a \string\footnotemark.\MessageBreak%
+ Either use \string\footnote\string{...\string}\space instead of%
+ \string\footnotemark\space and \string\footnotetext\string{...\string}\MessageBreak%
+ in footnoterange and footnoterange* environments,\MessageBreak%
+ or do not use those environments around a \string\footnotemark\MessageBreak%
+ (or \string\renewcommand\string{\string\fnr@rangefootnotemark\string}\MessageBreak%
+ with your own fixing code).%
+ }%
+ \xdef\fnr@mopt{#1}%
+ \ifx\fnr@mopt\empty%
+ \fnr@origfnmark%
+ \else%
+ \fnr@origfnmark[#1]%
+ \fi%
+}
+
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macrocode}
+%</package>
+% \end{macrocode}
+%
+% \pagebreak
+%
+% \section{Installation}
+%
+% \subsection{Downloads\label{ss:Downloads}}
+%
+% Everything is available on CTAN,
+% \url{https://www.ctan.org/tex-archive/},
+% but may need additional packages themselves.
+%
+% \DescribeMacro{footnoterange.dtx}
+% For unpacking the \xfile{footnoterange.dtx} file
+% and constructing the documentation it is required:
+% \begin{description}
+% \item[-] \TeX{} Format \LaTeXe{}, \url{https://www.CTAN.org/}
+%
+% \item[-] document class \xpackage{ltxdoc}, 2015/03/26, v2.0w,
+% \url{https://ctan.org/pkg/ltxdoc}
+%
+% \item[-] package \xpackage{holtxdoc}, 2012/03/21, v0.24,
+% \url{https://ctan.org/pkg/holtxdoc}
+% \end{description}
+%
+% \DescribeMacro{footnoterange.sty}
+% The |footnoterange.sty| for \LaTeXe{} (i.\,e. each document using
+% the \xpackage{footnoterange} package) requires:
+% \begin{description}
+% \item[-] \TeX{} Format \LaTeXe{}, \url{https://www.CTAN.org/}
+%
+% \item[-] package \xpackage{ltxcmds}, 2011/04/18, v1.20,
+% \url{https://www.ctan.org/pkg/ltxcmds}
+% \end{description}
+%
+% \DescribeMacro{footnoterange-example.tex}
+% The |footnoterange-example.tex| requires the same files as all
+% documents using the \xpackage{footnoterange} package and additionally:
+% \begin{description}
+% \item[-] class \xpackage{article}, 2007/10/19, v1.4h, from \xpackage{classes.dtx}:\newline
+% \url{https://www.ctan.org/tex-archive/macros/latex/base/}
+%
+% \item[-] package \xpackage{footnoterange}, 2018/10/15, v1.0b,\newline
+% \url{https://www.ctan.org/pkg/footnoterange}\newline
+% (Well, it is the example file for this package, and because you are
+% reading the documentation for the \xpackage{footnoterange} package,
+% it can be assumed that you already have some version of it --
+% is it the current one?)
+%
+% \item[-] package \xpackage{hyperref}, 2012/11/06, v6.83m,\newline
+% \url{https://www.ctan.org/pkg/hyperref}
+% \end{description}
+%
+% \DescribeMacro{Oberdiek}
+% \DescribeMacro{holtxdoc}
+% \DescribeMacro{ltxcmds}
+% \DescribeMacro{alphalph}
+% All packages of \textsc{Heiko Oberdiek}'s bundle `oberdiek'
+% (especially \xpackage{holtxdoc}, \xpackage{ltxcmds}, and \xpackage{alphalph})
+% are also available in a TDS compliant ZIP archive:\newline
+% \url{http://mirror.ctan.org/install/macros/latex/contrib/oberdiek.tds.zip}.\newline
+% It is probably best to download and use this, because the packages in there
+% should be both recent and compatible.
+%
+% \DescribeMacro{hyperref}
+% \noindent \xpackage{hyperref} is not included in that bundle and needs to be
+% downloaded separately,\newline
+% \url{http://mirrors.ctan.org/install/macros/latex/contrib/hyperref.tds.zip}.
+%
+% \DescribeMacro{M\"{u}nch}
+% A list of my packages can be found at \url{https://www.ctan.org/author/muench-hm}.
+%
+% \pagebreak
+%
+% \subsection{Package, unpacking TDS}
+% \paragraph{Package.} This package is available on \url{https://www.CTAN.org}.
+% \begin{description}
+% \item[\url{http://mirror.ctan.org/macros/latex/contrib/footnoterange/footnoterange.dtx}]\hspace*{0.1cm}
+% The source file.
+% \item[\url{http://mirror.ctan.org/macros/latex/contrib/footnoterange/footnoterange.pdf}]\hspace*{0.1cm}
+% The documentation.
+% \item[\url{http://mirror.ctan.org/macros/latex/contrib/footnoterange/footnoterange-example.pdf}]\hspace*{0.1cm}
+% The compiled example file, as it should look like.
+% \item[\url{http://mirror.ctan.org/macros/latex/contrib/footnoterange/README}]\hspace*{0.1cm}\newline\hspace*{0.1cm}
+% The README file.
+% \end{description}
+% There is also a footnoterange.tds.zip available:
+% \begin{description}
+% \item[\url{http://mirror.ctan.org/install/macros/latex/contrib/footnoterange.tds.zip}]\hspace*{0.1cm}
+% Everything in TDS compliant, compiled format.
+% \end{description}
+% which additionally contains\newline
+% \begin{tabular}{ll}
+% footnoterange.ins & The installation file.\\
+% footnoterange.drv & The driver to generate the documentation.\\
+% footnoterange.sty & The \xext{sty}le file.
+% \end{tabular}
+%
+% \bigskip
+%
+% \noindent For required other packages, please see the preceding subsection.
+%
+% \paragraph{Unpacking.} The \xfile{.dtx} file is a self-extracting
+% \docstrip{} archive. The files are extracted by running the
+% \xfile{.dtx} through \plainTeX:
+% \begin{quote}
+% \verb|tex footnoterange.dtx|
+% \end{quote}
+%
+% About generating the documentation see paragraph~\ref{GenDoc} below.
+%
+% \paragraph{TDS.} Now the different files must be moved into
+% the different directories in your installation TDS tree
+% (also known as \xfile{texmf} tree):
+% \begin{quote}
+% \def\t{^^A
+% \begin{tabular}{@{}>{\ttfamily}l@{ $\rightarrow$ }>{\ttfamily}l@{}}
+% footnoterange.sty & tex/latex/footnoterange/footnoterange.sty\\
+% footnoterange.pdf & doc/latex/footnoterange/footnoterange.pdf\\
+% footnoterange-example.tex & doc/latex/footnoterange/footnoterange-example.tex\\
+% footnoterange-example.pdf & doc/latex/footnoterange/footnoterange-example.pdf\\
+% footnoterange.dtx & source/latex/footnoterange/footnoterange.dtx\\
+% \end{tabular}^^A
+% }^^A
+% \sbox0{\t}^^A
+% \ifdim\wd0>\linewidth
+% \begingroup
+% \advance\linewidth by\leftmargin
+% \advance\linewidth by\rightmargin
+% \edef\x{\endgroup
+% \def\noexpand\lw{\the\linewidth}^^A
+% }\x
+% \def\lwbox{^^A
+% \leavevmode
+% \hbox to \linewidth{^^A
+% \kern-\leftmargin\relax
+% \hss
+% \usebox0
+% \hss
+% \kern-\rightmargin\relax
+% }^^A
+% }^^A
+% \ifdim\wd0>\lw
+% \sbox0{\small\t}^^A
+% \ifdim\wd0>\linewidth
+% \ifdim\wd0>\lw
+% \sbox0{\footnotesize\t}^^A
+% \ifdim\wd0>\linewidth
+% \ifdim\wd0>\lw
+% \sbox0{\scriptsize\t}^^A
+% \ifdim\wd0>\linewidth
+% \ifdim\wd0>\lw
+% \sbox0{\tiny\t}^^A
+% \ifdim\wd0>\linewidth
+% \lwbox
+% \else
+% \usebox0
+% \fi
+% \else
+% \lwbox
+% \fi
+% \else
+% \usebox0
+% \fi
+% \else
+% \lwbox
+% \fi
+% \else
+% \usebox0
+% \fi
+% \else
+% \lwbox
+% \fi
+% \else
+% \usebox0
+% \fi
+% \else
+% \lwbox
+% \fi
+% \else
+% \usebox0
+% \fi
+% \end{quote}
+% If you have a \xfile{docstrip.cfg} that configures and enables \docstrip's
+% TDS installing feature, then some files can already be in the right
+% place, see the documentation of \docstrip.
+%
+% \subsection{Refresh file name databases}
+%
+% If your \TeX~distribution (\TeX{} Live, \mikTeX, \teTeX, \dots) relies on
+% file name databases, you must refresh these. For example, \teTeX{} users run
+% \verb|texhash| or \verb|mktexlsr|.
+%
+% \subsection{Some details for the interested}
+%
+% \paragraph{Unpacking with \LaTeX{}.}
+% The \xfile{.dtx} chooses its action depending on the format:
+% \begin{description}
+% \item[\plainTeX:] Run \docstrip{} and extract the files.
+% \item[\LaTeX:] Generate the documentation.
+% \end{description}
+% If you insist on using \LaTeX{} for \docstrip{} (really,
+% \docstrip{} does not need \LaTeX ), then inform the autodetect routine
+% about your intention:
+% \begin{quote}
+% \verb|latex \let\install=y\input{footnoterange.dtx}|
+% \end{quote}
+% Do not forget to quote the argument according to the demands
+% of your shell.
+%
+% \paragraph{Generating the documentation.\label{GenDoc}}
+% You can use both the \xfile{.dtx} or the \xfile{.drv} to generate
+% the documentation. The process can be configured by a
+% configuration file \xfile{ltxdoc.cfg}. For instance, put the following
+% line into this file, if you want to have A4 as paper format:
+% \begin{quote}
+% \verb|\PassOptionsToClass{a4paper}{article}|
+% \end{quote}
+%
+% \noindent An example follows how to generate the
+% documentation with \pdfLaTeX :
+%
+% \begin{quote}
+%\begin{verbatim}
+%pdflatex footnoterange.drv
+%makeindex -s gind.ist footnoterange.idx
+%pdflatex footnoterange.drv
+%makeindex -s gind.ist footnoterange.idx
+%pdflatex footnoterange.drv
+%\end{verbatim}
+% \end{quote}
+%
+% \subsection{Compiling the example}
+%
+% The example file, \textsf{footnoterange-example.tex}, can be compiled via\newline
+% \indent \verb|(pdf)latex footnoterange-example.tex|\newline
+% but will need probably two compiler runs to get everything right.\newline
+% \verb|footnoterange-example.tex| can be created by\newline
+% \indent \verb|tex footnoterange.dtx|.\newline
+% \verb|footnoterange.dtx| is at
+% \url{https://www.ctan.org/pkg/footnoterange}.\newline
+%
+% \section{Acknowledgements}
+%
+% I (H.-Martin M\"{u}nch) would like to thank \textsc{Heiko Oberdiek}
+% for providing a~lot~(!) of useful packages (from
+% which I also got everything I know about creating a file in \xext{dtx}
+% format, ok, say it: copying), \textsc{Frank Mittelbach} for several bug reports,
+% for code for improving the package, and for pointing me to the \xpackage{fnpct}
+% package as alternative, everybody of the CTAN team for managing CTAN, and the
+% \Newsgroup{comp.text.tex} and \Newsgroup{de.comp.text.tex}
+% newsgroups and everybody at \url{https://tex.stackexchange.com/}
+% for their help in all things \hbox{\TeX{}.}
+% This package was created as response to question
+% \textquotedblleft Compressing consecutive footnote
+% marks\textquotedblright{} by user001\newline
+% (\url{http://tex.stackexchange.com/users/10127/user001}) on\newline
+% \url{http://tex.stackexchange.com/q/44165/6865}.
+%
+% \newpage
+% \phantomsection
+% \begin{History}\label{History}
+% \begin{Version}{2011/02/11 v0.1ff.}
+% \item Some versions at \url{http://tex.stackexchange.com/q/44165/6865}.
+% \end{Version}
+% \begin{Version}{2012/02/17 v1.0a}
+% \item Package created and uploaded to CTAN.
+% \end{Version}
+% \begin{Version}{2018/10/15 v1.0b}
+% \item Fixed/updated minor details.
+% \item Bug fix: Did not work without \xpackage{hyperref}, wrong spacefactor.
+% \item Listing the \href{https://www.ctan.org/pkg/fnpct}{\xpackage{fnpct}}
+% package as alternative.
+% \end{Version}
+% \end{History}
+%
+% \bigskip
+%
+% When you find a mistake or have a suggestion for an improvement of this package,
+% please send an e-mail to the maintainer, thanks! (Please see BUG REPORTS in the README.)
+%
+% \PrintIndex
+%
+% \Finale
+\endinput \ No newline at end of file