summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/latex
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2014-07-20 22:12:35 +0000
committerKarl Berry <karl@freefriends.org>2014-07-20 22:12:35 +0000
commit41d36a6ccdbe245ef49d7979b1435f03e0794e48 (patch)
tree881d9aa5e2019ee0188e6e75d04a1a3eea65ef48 /Master/texmf-dist/tex/latex
parentfe7efeccec7bd54cac9d94e865baa75cad828542 (diff)
fancylabel (20jul14)
git-svn-id: svn://tug.org/texlive/trunk@34669 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/latex')
-rw-r--r--Master/texmf-dist/tex/latex/fancylabel/fancylabel.sty933
1 files changed, 933 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/latex/fancylabel/fancylabel.sty b/Master/texmf-dist/tex/latex/fancylabel/fancylabel.sty
new file mode 100644
index 00000000000..b18ea79758a
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/fancylabel/fancylabel.sty
@@ -0,0 +1,933 @@
+%%
+%% This is file `fancylabel.sty',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% fancylabel.dtx (with options: `package')
+%%
+%% This is a generated file.
+%%
+%% Copyright (C) 2014 by Dominik Siegel
+%%
+%% This file may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License, either
+%% version 1.2 of this license or (at your option) any later
+%% version. The latest version of this license is in:
+%%
+%% http://www.latex-project.org/lppl.txt
+%%
+%% and version 1.2 or later is part of all distributions of
+%% LaTeX version 1999/12/01 or later.
+%%
+%%
+%% To produce the documentation, do the following
+%%
+%% latex fancylabel.dtx
+%% latex fancylabel.dtx
+%% makeindex -s gind.ist -o fancylabel.ind fancylabel.idx
+%% latex fancylabel.dtx
+\NeedsTeXFormat{LaTeX2e}[2005/12/01]
+\ProvidesPackage{fancylabel}[2014/07/15 v1.0 Referencing in a fancy way]
+\RequirePackage{xkeyval}
+\RequirePackage{ifthen}
+\RequirePackage{suffix}
+\newcounter{fancylabel}
+\setcounter{fancylabel}{0}
+\newcounter{fancysublabel}
+\setcounter{fancysublabel}{0}
+\presetkeys{fancylabel}{numbering=continuous,%
+ level=sub,%
+ IgnoreFamilies=false,%
+ sort=false,%
+ compress=false,%
+ CompressLink={-},%
+ CompressTwo=false,%
+ ListLastSublabelOnly=true,
+ ListSeparator={,\hskip-0.16667em{ }},%
+ ListLastLabelSeparator=\fancyref@ListSeparator,%
+ ListLastRefSeparator=\fancyref@ListSeparator,%
+ DisableFamilyCheck=false%
+ }{}
+\newcommand{\fancyref@addtolist}[2]{%
+ % #1=value to be added to the list #2
+ % #2=list
+ \ifthenelse{\equal{#1}{}}{}{%
+ \ifthenelse{\equal{#2}{}}{}{%
+ \g@addto@macro{#2}{,}%
+ }%
+ \g@addto@macro{#2}{#1}%
+ }%
+}
+\newcommand{\fancyref@addtoprintlist}[2]{%
+ % #1=value to be added to the list #2
+ % #2=list
+ \ifthenelse{\equal{#1}{}}{}{%
+ \ifthenelse{\equal{#2}{}}{}{%
+ \g@addto@macro{#2}{\fancyref@ListSeparator}%
+ }%
+ \g@addto@macro{#2}{#1}%
+ }%
+}
+\define@key{fancylabel}{families}{%
+ \fancyref@foreach{\fancyref@DefineFamily}{}{#1}%
+}
+\newcommand{\fancyref@ListOfFamilies}{}
+\newcommand{\fancyref@DefineFamily}[2]{%
+ % #1=empty
+ % #2=family
+ \@namedef{fancylabel@familystorage@#2}{0}%
+ \@namedef{fancylabelformat#2}{#2-\arabic{fancylabel}}%
+ \@namedef{fancyonlysublabelformat#2}{\alph{fancysublabel}}%
+ \@namedef{fancysublabelformat#2}{#2-\arabic{fancylabel}\alph{fancysublabel}}%
+ \@namedef{fancylabel@list@#2}{}%
+ \fancyref@addtolist{#2}{\fancyref@ListOfFamilies}%
+}
+\@onlypreamble\fancyref@DefineFamily
+\fancyref@DefineFamily{}{default}
+\renewcommand{\fancylabelformatdefault}{\arabic{fancylabel}}
+\renewcommand{\fancysublabelformatdefault}{\arabic{fancylabel}\alph{fancysublabel}}
+\define@choicekey*+{fancylabel}{numbering}[\val\nr]{continuous,ondemand,referenced}{%
+ % ##1=family
+ % ##2=label
+ % ##3=sublabel
+ \ifcase\nr\relax%
+ % numbering=continuous
+ % Label will be set un the first time, \fancylabel{} is called
+ % Order of labels depends on the appearance of fancylabel{}
+ \newcommand{\fancyref@define@LabelUndef}[3]{%
+ \fancyref@newlabel{##1}{##2}{##3}%
+ }%
+ \newcommand{\fancyref@show@LabelUndef}[3]{%
+ \fancyref@showlabel{##1}{##2}{##3}%
+ }%
+ \newcommand{\fancyref@define@LabelDef}[3]{}%
+ \newcommand{\fancyref@show@LabelDef}[3]{%
+ \fancyref@showlabel{##1}{##2}{##3}%
+ }%
+ \newcommand{\fancyref@define@RefUndef}[3]{}%
+ \newcommand{\fancyref@show@RefUndef}[3]{%
+ \@ifundefined{fancyref@PrevRun@##1@##2@##3}{%
+ \fancyref@labelerror{##2}{##3}%
+ ???%
+ }{%
+ \fancyref@showlabel{##1}{##2}{##3}%
+ }%
+ }%
+ \newcommand{\fancyref@define@RefDef}[3]{}%
+ \newcommand{\fancyref@show@RefDef}[3]{%
+ \fancyref@showlabel{##1}{##2}{##3}%
+ }%
+ \or%
+ % numbering=ondemand
+ % Only set label if it was asked for during the last run
+ % Order of labels depends on the appearance of fancylabel{}
+ \newcommand{\fancyref@define@LabelUndef}[3]{%
+ \@ifundefined{fancyref@AskedPrevRun@##1@##2@##3}{}{%
+ \fancyref@newlabel{##1}{##2}{##3}%
+ }%
+ }%
+ \newcommand{\fancyref@show@LabelUndef}[3]{%
+ \@ifundefined{fancyref@AskedPrevRun@##1@##2@##3}{}{%
+ \fancyref@showlabel{##1}{##2}{##3}%
+ }%
+ }%
+ \newcommand{\fancyref@define@LabelDef}[3]{}%
+ \newcommand{\fancyref@show@LabelDef}[3]{%
+ \fancyref@showlabel{##1}{##2}{##3}%
+ }%
+ \newcommand{\fancyref@define@RefUndef}[3]{}%
+ \newcommand{\fancyref@show@RefUndef}[3]{%
+ \@ifundefined{fancyref@PrevRun@##1@##2@##3}{%
+ \fancyref@labelerror{##2}{##3}%
+ ???%
+ }{%
+ \fancyref@showlabel{##1}{##2}{##3}%
+ }%
+ }%
+ \newcommand{\fancyref@define@RefDef}[3]{}%
+ \newcommand{\fancyref@show@RefDef}[3]{%
+ \fancyref@showlabel{##1}{##2}{##3}%
+ }%
+ \or%
+ % numbering=referenced
+ % Only set label if it was asked for during the last run
+ % Order of labels depends on the appearance of fancyref{}
+ \newcommand{\fancyref@define@LabelUndef}[3]{}%
+ \newcommand{\fancyref@show@LabelUndef}[3]{%
+ \@ifundefined{fancyref@AskedPrevRun@##1@##2@##3}{}{%
+ \fancyref@showlabel{##1}{##2}{##3}%
+ }%
+ }%
+ \newcommand{\fancyref@define@LabelDef}[3]{}%
+ \newcommand{\fancyref@show@LabelDef}[3]{%
+ \fancyref@showlabel{##1}{##2}{##3}%
+ }%
+ \newcommand{\fancyref@define@RefUndef}[3]{%
+ \fancyref@newlabel{##1}{##2}{##3}%
+ }%
+ \newcommand{\fancyref@show@RefUndef}[3]{%
+ \@ifundefined{fancyref@PrevRun@##1@##2@##3}{%
+ \fancyref@labelerror{##2}{##3}%
+ ???%
+ }{%
+ \fancyref@showlabel{##1}{##2}{##3}%
+ }%
+ }%
+ \newcommand{\fancyref@define@RefDef}[3]{%
+ \fancyref@newlabel{##1}{##2}{##3}%
+ }%
+ \newcommand{\fancyref@show@RefDef}[3]{%
+ \fancyref@showlabel{##1}{##2}{##3}% Show label
+ }%
+ \fi%
+}{%
+ \PackageError{fancylabel}{This value is not allowed. Allowed values are:%
+ 'continuous'(default), 'ondemand', 'referenced'.}{}%
+}
+\define@choicekey*+{fancylabel}{level}[\val\nr]{sub,same}{%
+ % ##1=family
+ % ##2=label
+ % ##3=sublabel
+ \ifcase\nr\relax%
+ % level=sub
+ \DeclareRobustCommand\fancysublabel[3][default]{{%
+ \fancysubreftrue%
+ \fancyref@subrefminusfalse%
+ \@fancylabel{##1}{##2}{##3}%
+ }}%
+ \WithSuffix\DeclareRobustCommand\fancysublabel-[3][default]{{%
+ \fancysubreftrue%
+ \fancyref@subrefminustrue%
+ \@fancylabel{##1}{##2}{##3}%
+ }}%
+ \WithSuffix\DeclareRobustCommand\fancysublabel*[3][default]{{%
+ \renewcommand{\@@fancylabel@show}[2]{}%
+ \fancysubreftrue%
+ \fancyref@subrefminusfalse%
+ \@fancylabel{##1}{##2}{##3}%
+ }}%
+ \DeclareRobustCommand\fancysubref[3][default]{{%
+ \fancysubreftrue%
+ \fancyref@subrefminusfalse%
+ \@fancyref{##1}{##2}{##3}%
+ }}%
+ \WithSuffix\DeclareRobustCommand\fancysubref-[3][default]{{%
+ \fancysubreftrue%
+ \fancyref@subrefminustrue%
+ \@fancyref{##1}{##2}{##3}%
+ }}%
+ \WithSuffix\DeclareRobustCommand\fancysubref*[3][default]{{%
+ \renewcommand{\@@fancylabel@show}[2]{}%
+ \fancysubreftrue%
+ \fancyref@subrefminusfalse%
+ \@fancyref{##1}{##2}{##3}%
+ }}%
+ \or%
+ % level=same
+ \DeclareRobustCommand\fancysublabel[3][default]{{%
+ \fancysubreffalse%
+ \fancyref@subrefminusfalse%
+ \@fancylabel{##1}{##2}{##3}%
+ }}%
+ \WithSuffix\DeclareRobustCommand\fancysublabel-[3][default]{{%
+ \fancysubreffalse%
+ \fancyref@subrefminustrue%
+ \@fancylabel{##1}{##2}{##3}%
+ }}%
+ \WithSuffix\DeclareRobustCommand\fancysublabel*[3][default]{{%
+ \renewcommand{\@@fancylabel@show}[2]{}%
+ \fancysubreffalse%
+ \fancyref@subrefminusfalse%
+ \@fancylabel{##1}{##2}{##3}%
+ }}%
+ \DeclareRobustCommand\fancysubref[3][default]{{%
+ \fancysubreffalse%
+ \fancyref@subrefminusfalse%
+ \@fancyref{##1}{##2}{##3}%
+ }}%
+ \WithSuffix\DeclareRobustCommand\fancysubref-[3][default]{{%
+ \fancysubreffalse%
+ \fancyref@subrefminustrue%
+ \@fancyref{##1}{##2}{##3}%
+ }}%
+ \WithSuffix\DeclareRobustCommand\fancysubref*[3][default]{{%
+ \renewcommand{\@@fancylabel@show}[2]{}%
+ \fancysubreffalse%
+ \fancyref@subrefminusfalse%
+ \@fancyref{##1}{##2}{##3}%
+ }}%
+ \fi%
+}{%
+ \PackageError{fancylabel}{This value is not allowed. Allowed values are:%
+ 'sub'(default), 'same'.}{}%
+}
+\newif\iffancyref@subrefminus\fancyref@subrefminusfalse
+\define@boolkey{fancylabel}{IgnoreFamilies}{}
+\define@boolkey{fancylabel}{sort}{}
+\define@boolkey{fancylabel}{compress}{}
+\define@key{fancylabel}{CompressLink}{\def\fancyref@CompressLink{#1}}
+\define@boolkey{fancylabel}{CompressTwo}{}
+\define@boolkey{fancylabel}{ListLastSublabelOnly}{}
+\define@key{fancylabel}{ListSeparator}{\edef\fancyref@ListSeparator{#1}}
+\define@key{fancylabel}{ListLastLabelSeparator}{\edef\fancyref@ListLastLabelSeparator{#1}}
+\define@key{fancylabel}{ListLastRefSeparator}{\edef\fancyref@ListLastRefSeparator{#1}}
+\define@boolkey{fancylabel}{DisableFamilyCheck}{}
+\newif\iffancyref@rerunerror\fancyref@rerunerrorfalse % ReRun error
+\newif\iffancysubref\fancysubreffalse % Subref or Ref
+\AtEndDocument{%
+ \iffancyref@rerunerror%
+ \PackageWarning{fancylabel}{Fancylabels may have changed. %
+ Please run latex again.}%
+ \fi%
+}
+\newcommand{\fancyref@labelerror}[2]{%
+ % #1=label
+ % #2=sublabel
+ \ifthenelse{\equal{#2}{}}{%
+ \PackageWarning{fancylabel}{Undefined fancylabel "#1".}%
+ }{%
+ \PackageWarning{fancylabel}{Undefined fancysublabel "#1@#2".}%
+ }%
+ \global\fancyref@rerunerrortrue%
+}
+\DeclareRobustCommand\fancylabel[2][default]{{%
+ % #1=family
+ % #2=label or list of labels
+ \fancysubreffalse%
+ \@fancylabel{#1}{#2}{}%
+}}
+\WithSuffix\DeclareRobustCommand\fancylabel*[2][default]{{%
+ % #1=family
+ % #2=label or list of labels
+ \renewcommand{\@@fancylabel@show}[2]{}%
+ \fancysubreffalse%
+ \@fancylabel{#1}{#2}{}%
+}}
+\DeclareRobustCommand\fancyref[2][default]{{%
+ % #1=family
+ % #2=label or list of labels
+ \@fancyref{#1}{#2}{}%
+}}
+\WithSuffix\DeclareRobustCommand\fancyref*[2][default]{{%
+ % #1=family
+ % #2=label or list of labels
+ \renewcommand{\@@fancylabel@show}[2]{}%
+ \@fancyref{#1}{#2}{}%
+}}
+\newcommand{\fancylabelNewLabelEvent}{}
+\newcommand{\fancylabelShowLabelEvent}{}
+\newcommand{\fancylabelShowRefEvent}{}
+\newcommand{\fancylabelResetCounter}[1]{%
+ % #1=family
+ \@ifundefined{fancylabel@familystorage@#1}{%
+ \PackageError{fancylabel}{No fancylabel family '#1' defined.}{}%
+ }{%
+ \@namedef{fancylabel@familystorage@#1}{0}%
+ }%
+}
+\newif\iffancyref@showlabel@FirstSublabelInList%
+\fancyref@showlabel@FirstSublabelInListtrue%
+\newcommand{\@fancylabel}[3]{%
+ % #1=family
+ % #2=label or list of labels
+ % #3=sublabel or list of sublabels
+ \@fancylabelANDref{#1}{#2}{#3}%
+ % Define labels
+ \expandafter\fancyref@@sort\expandafter{\@fancylabel@list}{\@@fancylabel@define}%
+ % Print labels
+ \setcounter{fancyref@sort@x}{0}%
+ \expandafter\fancyref@@sort\expandafter{\fancyref@compress@list}{\@@fancylabel@show}%
+ \fancyref@print@list%
+}
+\newcommand{\@fancylabelANDref}[3]{%
+ % #1=family
+ % #2=label or list of labels
+ % #3=sublabel or list of sublabels
+ \def\fancyref@sort@list{}%
+ \def\fancyref@sort@labellist@unsorted{}%
+ \def\fancyref@compress@list{}%
+ \def\fancyref@print@list{}%
+ \ifthenelse{\equal{#3}{}}{%
+ % true => List of labels
+ \newcommand{\@fancylabel@list}{#2}%
+ \newcommand{\@@fancylabel@define}[2]{%
+ % ##1=
+ % ##2=label (from list)
+ \@@@fancylabel@define{#1}{##2}{#3}%
+ }%
+ \newcommand{\@@fancyref@define}[2]{%
+ % ##1=
+ % ##2=label (from list)
+ \@@@fancyref@define{#1}{##2}{#3}%
+ }%
+ \def\fancyref@@@@@sort{%
+ fancyref@PrevRun@#1@\fancyref@@sort@value @%
+ }%
+ \def\fancyref@@@compress{%
+ fancyref@PrevRun@#1@\fancyref@@compress@value @%
+ }%
+ \newcommand{\fancyref@@@compress@entry}{%
+ {#1}{\fancyref@@compress@value}{}%
+ }%
+ }{%
+ % false => List of sublabels
+ \newcommand{\@fancylabel@list}{#3}%
+ \newcommand{\@@fancylabel@define}[2]{%
+ % ##1=
+ % ##2=sublabel (from list)
+ \@@@fancylabel@define{#1}{#2}{##2}%
+ }%
+ \newcommand{\@@fancyref@define}[2]{%
+ % ##1=
+ % ##2=sublabel (from list)
+ \@@@fancyref@define{#1}{#2}{##2}%
+ }%
+ \def\fancyref@@@@@sort{%
+ fancyref@PrevRun@#1@#2@\fancyref@@sort@value%
+ }%
+ \def\fancyref@@@compress{%
+ fancyref@PrevRun@#1@#2@\fancyref@@compress@value%
+ }%
+ \newcommand{\fancyref@@@compress@entry}{%
+ {#1}{#2}{\fancyref@@compress@value}%
+ }%
+ }%
+ % Sort
+ \fancyref@sort{\@fancylabel@list}%
+ % Compress
+ \fancyref@compress{\fancyref@sort@list}%
+ % Add the so far undefined labels to this list
+ \ifthenelse{\equal{\fancyref@sort@labellist@unsorted}{}}{}{%
+ \KV@fancylabel@compressfalse%
+ \fancyref@compress{\fancyref@sort@labellist@unsorted}%
+ \expandafter\fancyref@addtolist\expandafter{\fancyref@sort@labellist@unsorted}%
+ {\fancyref@sort@list}%
+ }%
+}
+\newcommand{\@@@fancylabel@define}[3]{%
+ % #1=family
+ % #2=label
+ % #3=sublabel
+ \@ifundefined{fancylabel@familystorage@#1}{%
+ \PackageError{fancylabel}{No fancylabel family '#1' defined. %
+ Use package option families for definition.}{}%
+ }{%
+ \@ifundefined{fancyref@ThisRun@#1@#2@#3}{%
+ \fancyref@define@LabelUndef{#1}{#2}{#3}%
+ }{%
+ \fancyref@define@LabelDef{#1}{#2}{#3}%
+ }%
+ }%
+}
+\newcommand{\@@fancylabel@show}[2]{%
+ % #1=
+ % #2={<family>}{<label>}{<sublabel>},{<family>}{<label>}{<sublabel>}
+ \@@fancylabelANDref@show%
+ % Get first and second item
+ \expandafter\fancyref@@sort\expandafter{#2}{\@@fancylabel@@show}%
+ % Produce the output
+ \edef\fancyref@ListLastSeparator{\fancyref@ListLastLabelSeparator}%
+ \@@fancylabelANDref@show@%
+ \expandafter\@@@fancylabel@show\@@fancylabel@@show@begin%
+ \@@fancylabelANDref@show@@%
+ % Add the \fancylabelShowLabelEvent if the label is not empty
+ \ifthenelse{\equal{\fancyref@print@list}{}}{}{%
+ \g@addto@macro{\fancyref@print@list}{\fancylabelShowLabelEvent}%
+ }%
+}%
+\newcommand{\@@fancyref@show}[2]{%
+ % #1=
+ % #2={<family>}{<label>}{<sublabel>},{<family>}{<label>}{<sublabel>}
+ \@@fancylabelANDref@show%
+ % Get first and second item
+ \expandafter\fancyref@@sort\expandafter{#2}{\@@fancylabel@@show}%
+ % Produce the output
+ \edef\fancyref@ListLastSeparator{\fancyref@ListLastRefSeparator}%
+ \@@fancylabelANDref@show@%
+ \expandafter\@@@fancyref@show\@@fancylabel@@show@begin%
+ \@@fancylabelANDref@show@@%
+ % Add the \fancylabelShowRefEvent
+ % Add the \fancylabelShowLabelEvent if the label is not empty
+ \ifthenelse{\equal{\fancyref@print@list}{}}{}{%
+ \g@addto@macro{\fancyref@print@list}{\fancylabelShowRefEvent}%
+ }%
+}%
+\newcommand{\@@fancylabelANDref@show}{%
+ \edef\@@fancylabel@@show@begin{}%
+ \edef\@@fancylabel@@show@begin@entry{}%
+ \edef\@@fancylabel@@show@end{}%
+ \edef\@@fancylabel@@show@end@entry{}%
+ \edef\@@fancylabel@@show@entry{}%
+}%
+\newcommand{\@@fancylabelANDref@show@}{%
+ \stepcounter{fancyref@sort@x}%
+ \ifthenelse{\thefancyref@sort@x = \@@fancylabel@@show@LengthOfPrintList}{}{%
+ % This is the last item of the list
+ \ifthenelse{\equal{\@@fancylabel@@show@end}{}}{%
+ \edef\fancyref@ListSeparator{\fancyref@ListLastSeparator}%
+ }{}%
+ }%
+}%
+\newcommand{\@@fancylabelANDref@show@@}{%
+ \ifthenelse{\equal{@@fancylabel@@show@entry}{}}{}{%
+ % \fancyref@showlabel has been executed
+ % this means a label will be printed
+ \edef\@@fancylabel@@show@begin@entry{\@@fancylabel@@show@entry}%
+ \ifthenelse{\equal{\@@fancylabel@@show@end}{}}{}{%
+ \expandafter\@@@fancylabel@show\@@fancylabel@@show@end%
+ \edef\@@fancylabel@@show@end@entry{\@@fancylabel@@show@entry}%
+ }%
+ % Add to list
+ \ifthenelse{\equal{\@@fancylabel@@show@end@entry}{}}{%
+ % No compressing
+ \edef\fancyref@print@list@entry{\@@fancylabel@@show@begin@entry}%
+ }{%
+ % Compressing
+ \edef\fancyref@print@list@entry{\@@fancylabel@@show@begin@entry%
+ \fancyref@CompressLink%
+ \@@fancylabel@@show@end@entry}%
+ }%
+ \expandafter\fancyref@addtoprintlist\expandafter{%
+ \fancyref@print@list@entry%
+ }{%
+ \fancyref@print@list%
+ }%
+ }%
+}%
+\newcommand{\@@fancylabel@@show}[2]{%
+ % #1=
+ % #2={<family>}{<label>}{<sublabel>}
+ \ifthenelse{\equal{\@@fancylabel@@show@begin}{}}{%
+ \edef\@@fancylabel@@show@begin{#2}%
+ }{%
+ \edef\@@fancylabel@@show@end{#2}%
+ }%
+}
+\newcommand{\@@@fancylabel@show}[3]{%
+ % #1=family
+ % #2=label
+ % #3=sublabel
+ \@ifundefined{fancylabel@familystorage@#1}{%
+ \PackageError{fancylabel}{No fancylabel family '#1' defined. %
+ Use package option families for definition.}{}%
+ }{%
+ \@ifundefined{fancyref@ThisRun@#1@#2@#3}{%
+ \fancyref@show@LabelUndef{#1}{#2}{#3}%
+ }{%
+ \fancyref@show@LabelDef{#1}{#2}{#3}%
+ }%
+ }%
+}
+\newcommand{\@@@fancyref@show}[3]{%
+ % #1=family
+ % #2=label
+ % #3=sublabel
+ \@ifundefined{fancylabel@familystorage@#1}{%
+ \PackageError{fancylabel}{No fancylabel family '#1' defined. %
+ Use package option families for definition.}{}%
+ }{%
+ \@ifundefined{fancyref@ThisRun@#1@#2@#3}{%
+ \fancyref@show@RefUndef{#1}{#2}{#3}%
+ }{%
+ \fancyref@show@RefDef{#1}{#2}{#3}%
+ }%
+ }%
+}
+\newcommand{\@fancyref}[3]{%
+ % #1=family
+ % #2=label or list of labels
+ % #3=sublabel or list of sublabels
+ \@fancylabelANDref{#1}{#2}{#3}%
+ % Define labels
+ \expandafter\fancyref@@sort\expandafter{\@fancylabel@list}{\@@fancyref@define}%
+ % Print labels
+ \setcounter{fancyref@sort@x}{0}%
+ \expandafter\fancyref@@sort\expandafter{\fancyref@compress@list}{\@@fancyref@show}%
+ \fancyref@print@list%
+}
+\newcommand{\@@fancyref}[3]{%
+ % #1=family
+ % #2=label
+ % #3=sublabel
+ \@ifundefined{fancyref@AskedThisRun@#1@#2@#3}{%
+ \global\@namedef{fancyref@AskedThisRun@#1@#2@#3}{#2}%
+ \immediate\write\@auxout{%
+ \string\fancyref@aux{fancyref@AskedPrevRun@#1@#2@#3}{#2}%
+ }%
+ }{}%
+ \@@@fancyref{#1}{#2}{#3}%
+}
+\newcommand{\@@@fancyref@define}[3]{%
+ % #1=family
+ % #2=label
+ % #3=sublabel
+ \@ifundefined{fancyref@AskedThisRun@#1@#2@#3}{%
+ \global\@namedef{fancyref@AskedThisRun@#1@#2@#3}{#2}%
+ \immediate\write\@auxout{%
+ \string\fancyref@aux{fancyref@AskedPrevRun@#1@#2@#3}{#2}%
+ }%
+ }{}%
+ \@ifundefined{fancyref@PrevRun@#1@#2@#3}{%
+ \fancyref@define@RefUndef{#1}{#2}{#3}%
+ }{%
+ \fancyref@define@RefDef{#1}{#2}{#3}%
+ }%
+}
+\newcommand{\fancyref@newlabel}[3]{%
+ % #1=family
+ % #2=label
+ % #3=sublabel
+ \@ifundefined{fancyref@ThisRun@#1@#2@#3}{%
+ \ifKV@fancylabel@DisableFamilyCheck%
+ \else%
+ \expandafter\fancyref@CheckOtherFamilies%
+ \expandafter{\fancyref@ListOfFamilies}{#1}{#2}%
+ \iffancyref@@@@CheckOtherFamilies@error%
+ \PackageWarning{fancylabel}{Label '#2' has been used in %
+ multiple families.}%
+ \fi%
+ \fi%
+ % Subref or Ref
+ \iffancysubref% Subref
+ \fancyref@@newsublabel{#1}{#2}{#3}%
+ \else% Ref
+ \fancyref@@newlabel{#1}{#2}{#3}%
+ \fi%
+ }{}%
+ % Show Package Warning if labels have changed since the last run
+ \@ifundefined{fancyref@PrevRun@#1@#2@#3}{%
+ \global\fancyref@rerunerrortrue%
+ }{%
+ \ifthenelse{\equal{\@nameuse{fancyref@ThisRun@#1@#2@#3}}%
+ {\@nameuse{fancyref@PrevRun@#1@#2@#3}}}{}{%
+ \global\fancyref@rerunerrortrue%
+ }%
+ }%
+}
+\newcommand{\fancyref@@newlabel}[3]{%
+ % #1=family
+ % #2=label
+ % #3=sublabel
+ \ifKV@fancylabel@IgnoreFamilies%
+ \setcounter{fancylabel}{\@nameuse{fancylabel@familystorage@default}}%
+ \stepcounter{fancylabel}%
+ \expandafter\xdef\csname fancylabel@familystorage@default\endcsname{\thefancylabel}%
+ \else%
+ \setcounter{fancylabel}{\@nameuse{fancylabel@familystorage@#1}}%
+ \stepcounter{fancylabel}%
+ \expandafter\xdef\csname fancylabel@familystorage@#1\endcsname{\thefancylabel}%
+ \fi%
+ \immediate\write\@auxout{%
+ \string\fancyref@aux{fancyref@PrevRun@#1@#2@#3}{\thefancylabel}%
+ }%
+ \immediate\write\@auxout{%
+ \string\fancyref@addtolist{\string{#2\string}}{\string\fancylabel@list@#1}%
+ }%
+ \expandafter\xdef\csname fancyref@ThisRun@#1@#2@#3\endcsname{\thefancylabel}%
+ % Uses specified Event following the newlabel command
+ \fancylabelNewLabelEvent%
+}
+\newcommand{\fancyref@@newsublabel}[3]{%
+ % #1=family
+ % #2=label
+ % #3=sublabel
+ \@ifundefined{fancyref@ThisRun@#1@#2@}{%
+ \fancyref@@newlabel{#1}{#2}{}%
+ }{}%
+ \@ifundefined{fancyref@highestsub@#1@#2}{%
+ \setcounter{fancysublabel}{0}%
+ }{%
+ \setcounter{fancysublabel}{\@nameuse{fancyref@highestsub@#1@#2}}%
+ }%
+ \stepcounter{fancysublabel}%
+ \immediate\write\@auxout{%
+ \string\fancyref@aux{fancyref@PrevRun@#1@#2@#3}{\thefancysublabel}%
+ }%
+ \expandafter\xdef\csname fancyref@ThisRun@#1@#2@#3\endcsname{\thefancysublabel}%
+ \expandafter\xdef\csname fancyref@highestsub@#1@#2\endcsname{\thefancysublabel}%
+}
+\newcommand{\fancyref@showlabel}[3]{%
+ % #1=family
+ % #2=label
+ % #3=sublabel
+ \iffancysubref% \fancysubref and level=sub
+ \@ifundefined{fancyref@PrevRun@#1@#2@}{%
+ \fancyref@rerunerrortrue%
+ }{%
+ \setcounter{fancylabel}{\@nameuse{fancyref@PrevRun@#1@#2@}}%
+ }%
+ \@ifundefined{fancyref@PrevRun@#1@#2@#3}{%
+ \fancyref@rerunerrortrue%
+ }{%
+ \setcounter{fancysublabel}{\@nameuse{fancyref@PrevRun@#1@#2@#3}}%
+ }%
+ \iffancyref@subrefminus% minus => only subref without ref
+ \ifKV@fancylabel@IgnoreFamilies%
+ \edef\fancylabelthisformat{\@nameuse{fancyonlysublabelformatdefault}}%
+ \else%
+ \edef\fancylabelthisformat{\@nameuse{fancyonlysublabelformat#1}}%
+ \fi%
+ \else% Label and Sublabel
+ \iffancyref@showlabel@FirstSublabelInList%
+ % This is the very first label
+ \ifKV@fancylabel@IgnoreFamilies%
+ \edef\fancylabelthisformat{\@nameuse{fancysublabelformatdefault}}%
+ \else%
+ \edef\fancylabelthisformat{\@nameuse{fancysublabelformat#1}}%
+ \fi%
+ \fancyref@showlabel@FirstSublabelInListfalse%
+ \else%
+ % Any label after the first one
+ \ifKV@fancylabel@ListLastSublabelOnly%
+ % Output: 1a-c,d
+ \ifKV@fancylabel@IgnoreFamilies%
+ \edef\fancylabelthisformat{\@nameuse{fancyonlysublabelformatdefault}}%
+ \else%
+ \edef\fancylabelthisformat{\@nameuse{fancyonlysublabelformat#1}}%
+ \fi%
+ \else%
+ % Output: 1a-1c,1d
+ \ifKV@fancylabel@IgnoreFamilies%
+ \edef\fancylabelthisformat{\@nameuse{fancysublabelformatdefault}}%
+ \else%
+ \edef\fancylabelthisformat{\@nameuse{fancysublabelformat#1}}%
+ \fi%
+ \fi%
+ \fi%
+ \fi%
+ \else% \fancyref or \fancysubref and level=same
+ \@ifundefined{fancyref@PrevRun@#1@#2@#3}{%
+ \fancyref@rerunerrorfalse%
+ }{%
+ \setcounter{fancylabel}{\@nameuse{fancyref@PrevRun@#1@#2@#3}}%
+ }%
+ \ifKV@fancylabel@IgnoreFamilies%
+ \edef\fancylabelthisformat{\@nameuse{fancylabelformatdefault}}%
+ \else%
+ \edef\fancylabelthisformat{\@nameuse{fancylabelformat#1}}%
+ \fi%
+ \fi%
+ \edef\@@fancylabel@@show@entry{\fancylabelthisformat}%
+}
+\newcommand{\fancyref@CheckOtherFamilies}[3]{%
+ % #1=list of families
+ % #2=current family
+ % #3=label
+ \fancyref@foreach{\fancyref@@CheckOtherFamilies{#3}}{#2}{#1}%
+}
+\newcommand{\fancyref@@CheckOtherFamilies}[3]{%
+ % #1=label
+ % #2=current family
+ % #3=family (from list)
+ \xdef\fancyref@helper{\csname fancylabel@list@#3\endcsname}%
+ \ifthenelse{\equal{#2}{#3}}{}{%
+ \expandafter\fancyref@@@CheckOtherFamilies\expandafter{\fancyref@helper}{#1}%
+ }%
+}
+\newcommand{\fancyref@@@CheckOtherFamilies}[2]{%
+ % #1=list of labels
+ % #2=label
+ \fancyref@foreach{\fancyref@@@@CheckOtherFamilies}{#2}{#1}%
+}
+\newif\iffancyref@@@@CheckOtherFamilies@error
+\fancyref@@@@CheckOtherFamilies@errorfalse
+\newcommand{\fancyref@@@@CheckOtherFamilies}[2]{%
+ % #1=label
+ % #2=label (from list)
+ \ifthenelse{\equal{#1}{#2}}{%
+ \fancyref@@@@CheckOtherFamilies@errortrue%
+ }{}%
+}
+\newcommand{\fancyref@aux}[2]{% Helps to read the aux file
+ \global\@namedef{#1}{#2}%
+}
+%%% Thanks to
+%%% http://stackoverflow.com/questions/2402354/split-comma-separated-parameters-in-latex
+\def\fancyref@foreach#1#2#3{%
+ \fancyref@@test@foreach{#1}{#2}#3,\@end@token%
+}
+
+\def\fancyref@@swallow#1{}
+
+\def\fancyref@@test@foreach#1#2{%
+ \@ifnextchar\@end@token%
+ {\fancyref@@swallow}%
+ {\fancyref@@foreach{#1}{#2}}%
+}
+
+\def\fancyref@@foreach#1#2#3,#4\@end@token{%
+ #1{#2}{#3}%
+ \fancyref@@test@foreach{#1}{#2}#4\@end@token%
+}
+\newcounter{fancyref@sort@x}
+\setcounter{fancyref@sort@x}{0}
+\newcounter{fancyref@sort@y}
+\setcounter{fancyref@sort@y}{0}
+\newcommand{\fancyref@sort}[1]{%
+ % #1=comma-separated list of labels or sublabels
+ \ifKV@fancylabel@sort%
+ % Generate a list of all values
+ \def\fancyref@sort@valuelist@sorted{}%
+ \setcounter{fancyref@sort@x}{0}%
+ \expandafter\fancyref@@sort\expandafter{#1}{\fancyref@@@sort}%
+ % Generate a sorted list of values
+ \edef\fancyref@sort@arraylength{\thefancyref@sort@x}%
+ \setcounter{fancyref@sort@x}{0}%
+ \whiledo{\thefancyref@sort@x < \fancyref@sort@arraylength}{%
+ \setcounter{fancyref@sort@y}{0}%
+ % Set \fancyref@sort@smallest@temp the first list entry that is not 0
+ \whiledo{\thefancyref@sort@y < \fancyref@sort@arraylength}{%
+ \ifthenelse{\@nameuse{fancyref@sort@valuelist@\thefancyref@sort@y} = 0}{%
+ \stepcounter{fancyref@sort@y}%
+ }{%
+ \edef\fancyref@sort@smallest@temp{\thefancyref@sort@y}%
+ \setcounter{fancyref@sort@y}{\fancyref@sort@arraylength}%
+ }%
+ }%
+ \setcounter{fancyref@sort@y}{0}%
+ % Find the smallest value in the list
+ \whiledo{\thefancyref@sort@y < \fancyref@sort@arraylength}{%
+ \ifthenelse{\@nameuse{fancyref@sort@valuelist@\thefancyref@sort@y} = 0}{}{%
+ \ifthenelse{\@nameuse{fancyref@sort@valuelist@\thefancyref@sort@y} < %
+ \@nameuse{fancyref@sort@valuelist@\fancyref@sort@smallest@temp}}{%
+ \edef\fancyref@sort@smallest@temp{\thefancyref@sort@y}%
+ }{}%
+ }%
+ \stepcounter{fancyref@sort@y}%
+ }%
+ % Add this smallest value to the list
+ \edef\fancyref@sort@smallest{%
+ \@nameuse{fancyref@sort@valuelist@\fancyref@sort@smallest@temp}%
+ }%
+ \expandafter\fancyref@addtolist\expandafter{\fancyref@sort@smallest}%
+ {\fancyref@sort@valuelist@sorted}%
+ \expandafter\edef\csname fancyref@sort@valuelist@\fancyref@sort@smallest@temp\endcsname{0}%
+ \stepcounter{fancyref@sort@x}%
+ }%
+ % Generate a sorted list of labels
+ \ifthenelse{\equal{\fancyref@sort@valuelist@sorted}{}}{}{%
+ \expandafter\fancyref@@sort\expandafter{\fancyref@sort@valuelist@sorted}{\fancyref@@@@sort}%
+ }%
+ \else%
+ \expandafter\fancyref@addtolist\expandafter{#1}{\fancyref@sort@list}%
+ \fi%
+}
+\newcommand{\fancyref@@sort}[2]{%
+ % #1=comma-separated list
+ % #2=function to be executed on this list
+ \fancyref@foreach{#2}{}{#1}%
+}
+\newcommand{\fancyref@@@sort}[2]{%
+ % #1=
+ % #2=label (from list)
+ \def\fancyref@@sort@value{#2}%
+ \@ifundefined{\fancyref@@@@@sort}{%
+ \fancyref@addtolist{#2}{\fancyref@sort@labellist@unsorted}%
+ }{%
+ \expandafter\edef\csname fancyref@sort@labellist@\@nameuse{\fancyref@@@@@sort}\endcsname{#2}%
+ \expandafter\edef\csname fancyref@sort@valuelist@\thefancyref@sort@x\endcsname{%
+ \@nameuse{\fancyref@@@@@sort}%
+ }%
+ \stepcounter{fancyref@sort@x}%
+ }%
+}%
+\newcommand{\fancyref@@@@sort}[2]{%
+ % #1=
+ % #2=value (from sorted list of values)
+ \fancyref@addtolist{\@nameuse{fancyref@sort@labellist@#2}}{\fancyref@sort@list}%
+}
+\newcommand{\fancyref@compress}[1]{%
+ % #1=list of labels or sublabels
+ \def\fancyref@compress@begin{}%
+ \def\fancyref@compress@begin@entry{}%
+ \def\fancyref@compress@end{}%
+ \def\fancyref@compress@end@entry{}%
+ \setcounter{fancyref@sort@y}{0}%
+ \ifKV@fancylabel@compress%
+ \ifthenelse{\equal{#1}{}}{}{%
+ % Compress List
+ \expandafter\fancyref@@sort\expandafter{#1}{\fancyref@@compress}%
+ % Add last entry
+ \fancyref@@@@compress@stop%
+ }%
+ \else%
+ \expandafter\fancyref@@sort\expandafter{#1}{\fancyref@@nocompress}%
+ \fi%
+ \edef\@@fancylabel@@show@LengthOfPrintList{\thefancyref@sort@y}%
+}
+\newcommand{\fancyref@@compress}[2]{%
+ % #1=
+ % #2=value (from sorted list of values)
+ \def\fancyref@@compress@value{#2}%
+ \ifthenelse{\equal{\fancyref@compress@begin}{}}{%
+ % Start compressing
+ \fancyref@@@@compress@start%
+ }{%
+ \stepcounter{fancyref@sort@x}%
+ \ifthenelse{\@nameuse{\fancyref@@@compress} = \thefancyref@sort@x}{%
+ % Continue compressing
+ \fancyref@@@@compress@continue%
+ }{%
+ % Stop compressing and begin a new compressing
+ \fancyref@@@@compress@stop%
+ }%
+ }%
+}
+\newcommand{\fancyref@@@@compress@start}{%
+ \edef\fancyref@compress@begin{\fancyref@@@compress}%
+ \edef\fancyref@compress@begin@entry{\fancyref@@@compress@entry}%
+ \setcounter{fancyref@sort@x}{\@nameuse{\fancyref@compress@begin}}%
+}
+\newcommand{\fancyref@@@@compress@continue}{%
+ \edef\fancyref@compress@end{\fancyref@@@compress}%
+ \edef\fancyref@compress@end@entry{\fancyref@@@compress@entry}%
+}
+\newcommand{\fancyref@@@@compress@stop}{%
+ \ifKV@fancylabel@CompressTwo%
+ % Compress even if difference is only 1
+ \edef\fancyref@compress@listentry{{{\fancyref@compress@begin@entry},{\fancyref@compress@end@entry}}}%
+ \expandafter\fancyref@addtolist\expandafter{\fancyref@compress@listentry}{\fancyref@compress@list}%
+ \else%
+ % Compress if difference > 1
+ \setcounter{fancyref@sort@x}{\@nameuse{\fancyref@compress@begin}}%
+ \stepcounter{fancyref@sort@x}%
+ % Avoid empty \fancyref@compress@end
+ \ifthenelse{\equal{\fancyref@compress@end}{}}{%
+ \edef\fancyref@compress@listentry{{{\fancyref@compress@begin@entry},{\fancyref@compress@end@entry}}}%
+ \expandafter\fancyref@addtolist\expandafter{\fancyref@compress@listentry}{\fancyref@compress@list}%
+ }{%
+ \ifthenelse{\@nameuse{\fancyref@compress@end} = \thefancyref@sort@x}{%
+ % Difference = 1
+ \edef\fancyref@compress@listentry{{{\fancyref@compress@begin@entry},{}}}%
+ \expandafter\fancyref@addtolist\expandafter{\fancyref@compress@listentry}{\fancyref@compress@list}%
+ \edef\fancyref@compress@listentry{{{\fancyref@compress@end@entry},{}}}%
+ \expandafter\fancyref@addtolist\expandafter{\fancyref@compress@listentry}{\fancyref@compress@list}%
+ }{%
+ % Difference > 1
+ \edef\fancyref@compress@listentry{%
+ {{\fancyref@compress@begin@entry},{\fancyref@compress@end@entry}}%
+ }%
+ \expandafter\fancyref@addtolist\expandafter{\fancyref@compress@listentry}{\fancyref@compress@list}%
+ }%
+ }%
+ \fi%
+ \edef\fancyref@compress@begin{\fancyref@@@compress}%
+ \edef\fancyref@compress@begin@entry{\fancyref@@@compress@entry}%
+ \edef\fancyref@compress@end{}%
+ \edef\fancyref@compress@end@entry{}%
+ \setcounter{fancyref@sort@x}{\@nameuse{\fancyref@compress@begin}}%
+ \stepcounter{fancyref@sort@y}%
+}
+\newcommand{\fancyref@@nocompress}[2]{%
+ % #1=
+ % #2=value (from sorted list of values)
+ \stepcounter{fancyref@sort@y}%
+ \def\fancyref@@compress@value{#2}%
+ \edef\fancyref@compress@listentry{{{\fancyref@@@compress@entry},{}}}%
+ \expandafter\fancyref@addtolist\expandafter{\fancyref@compress@listentry}{\fancyref@compress@list}%
+}
+\ProcessOptionsX<fancylabel>
+\endinput
+%%
+%% End of file `fancylabel.sty'.