summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/crossreftools/crossreftools.sty
diff options
context:
space:
mode:
Diffstat (limited to 'macros/latex/contrib/crossreftools/crossreftools.sty')
-rw-r--r--macros/latex/contrib/crossreftools/crossreftools.sty660
1 files changed, 660 insertions, 0 deletions
diff --git a/macros/latex/contrib/crossreftools/crossreftools.sty b/macros/latex/contrib/crossreftools/crossreftools.sty
new file mode 100644
index 0000000000..9836769576
--- /dev/null
+++ b/macros/latex/contrib/crossreftools/crossreftools.sty
@@ -0,0 +1,660 @@
+%% LaTeX package crossreftools - version 0.9 (2019/01/03 -- 15:57:43)
+%% Source file for crossreftools.sty
+%%
+%%
+%% -------------------------------------------------------------------------------------------
+%% Copyright (c) 2017 -- 2019 by Dr. Christian Hupfer <typography dot with dot latex at gmail dot com>
+%% -------------------------------------------------------------------------------------------
+%%
+%% This work may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License, either version 1.3
+%% 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.3 or later is part of all distributions of LaTeX
+%% version 2005/12/01 or later.
+%%
+%%
+%% This work has the LPPL maintenance status `author-maintained`
+%%
+%%
+
+\def\crossreftoolspackageversion{0.9}
+\NeedsTeXFormat{LaTeX2e}[1995/12/01]
+
+\ProvidesPackage{crossreftools}[2019/01/03 - v\crossreftoolspackageversion]
+
+\newif\ifcrtfinal
+\newif\ifcleverefcompatmode
+
+\DeclareOption{final}{\global\crtfinaltrue}
+\DeclareOption{cleverefcompat}{\global\cleverefcompatmodetrue}
+\DeclareOption{draft}{\global\crtfinalfalse}
+
+\ProcessOptions*
+
+% Some helper macros
+
+\newcommand{\crt@refundefined}{[UNDEFINED]}
+
+\newcommand{\crtrefundefinedtext}[1]{\renewcommand{\crt@refundefined}{#1}}
+
+\newcommand{\crt@crefundefinedcountervalue}{1977}
+\newcommand{\crtcrefundefinedcountervalue}[1]{\renewcommand{\crt@refundefinedcountervalue}{#1}}
+
+
+
+\@onlypreamble\crtrefundefined
+\@onlypreamble\crtcrefundefinedcountervalue
+
+
+
+% Splitters for cleveref
+
+\def\crt@@cref@@splitter@@first[#1][#2][#3]#4\@nil{%
+ #1%
+}
+
+\def\crt@@cref@@splitter@@second[#1][#2][#3]#4\@nil{%
+ #2%
+}
+
+\def\crt@@cref@@splitter@@third[#1][#2][#3]#4\@nil{%
+ #3%
+}
+
+\def\crt@@cref@@splitter@@fourth[#1][#2][#3]#4\@nil{%
+ #4%
+}
+
+
+\def\crt@cref@splitter@firstarg#1#2{%
+ \expandafter\crt@@cref@@splitter@@first#1\@nil
+}
+
+\def\crt@cref@splitter@secondarg#1#2{%
+ \expandafter\crt@@cref@@splitter@@second#1\@nil%
+}
+
+
+\def\crt@cref@splitter@thirdarg#1#2{%
+ \expandafter\crt@@cref@@splitter@@third#1\@nil%
+}
+
+
+\def\crt@cref@splitter@fourtharg#1#2{%
+ \expandafter\crt@@cref@@splitter@@fourth#1\@nil%
+}
+
+\def\crt@cref@splitter@firstargument{%
+ \@firstoftwo%
+}
+
+
+\ifcleverefcompatmode
+\def\crt@cref@splitter@pageref{%
+ \@secondoftwo%
+}
+\else
+\def\crt@cref@splitter@pageref#1#2{%
+ \expandafter\crt@@cref@@splitter@@fourth#2\@nil%
+}
+\fi
+
+
+\newcommand{\crtcrefname}[1]{%
+ \expandafter\csname cref@#1@name\endcsname%
+}
+
+\newcommand{\crtcrefpluralname}[1]{%
+ \csname cref@#1@name@plural\endcsname%
+}
+
+\newcommand{\crtCrefpluralname}[1]{%
+ \csname Cref@#1@name@plural\endcsname%
+}
+
+\newcommand{\crtCrefname}[1]{%
+ \csname Cref@#1@name\endcsname%
+}
+
+\newcommand{\crtcrefnamebylabel}[1]{%
+ \@ifundefined{r@#1}{UNDEFINED LABEL}{%
+ \expandafter\csname cref@\@@crtextr@ct@cref{counter}{#1}@name\endcsname%
+ }%
+}
+
+\newcommand{\crtCrefnamebylabel}[1]{%
+ \@ifundefined{r@#1}{UNDEFINED LABEL}{%
+ \expandafter\csname Cref@\@@crtextr@ct@cref{counter}{#1}@name\endcsname%
+ }%
+}
+
+\def\@@crt@@cref@@suffix{cref}
+
+\let\crt@cref@splitter@counter\crt@cref@splitter@firstarg
+\let\crt@cref@splitter@number\crt@cref@splitter@secondarg
+\let\crt@cref@splitter@result\crt@cref@splitter@thirdarg
+\let\crt@cref@splitter@reference\crt@cref@splitter@fourtharg
+\let\crt@cref@splitter@page\crt@cref@splitter@pageref
+
+
+\newcommand{\@@crtextr@ct@cref}[2]{%
+ \expandafter\ifx\csname r@#2@\@@crt@@cref@@suffix\endcsname\relax
+ \crt@refundefined%
+ \else
+ \expandafter\expandafter\expandafter\expandafter\expandafter\csname crt@cref@splitter@#1\expandafter\endcsname\csname r@#2@\@@crt@@cref@@suffix\endcsname%
+ \fi
+}
+
+\newcommand{\crtextractcref}[2]{%
+ \@@crtextr@ct@cref{#1}{#2}%
+}
+
+\newcommand{\crtcrefcounter}[1]{%
+ \@@crtextr@ct@cref{counter}{#1}%
+}
+
+\newcommand{\crtcrefnumber}[1]{%
+ \@@crtextr@ct@cref{number}{#1}%
+}
+
+\newcommand{\crtcrefresult}[1]{%
+ \@@crtextr@ct@cref{result}{#1}%
+}
+
+\newcommand{\crtcrefreference}[1]{%
+ \@@crtextr@ct@cref{reference}{#1}%
+}
+
+
+\newcommand{\crtcrefpage}[1]{%
+ \@@crtextr@ct@cref{page}{#1}%
+}
+
+%%%%%%%%%%%%%%%%
+%%%% A macro that returns \crtcrefnumber - like the counter value if the label exists
+%%%% otherwise some default value in order to be able to calculate with the return value
+%%%%
+
+
+
+\newcommand{\crtcrefcountervalue}[1]{%
+ \crtcrefifundefinedlabel{#1}{%
+ \crt@crefundefinedcountervalue%
+ }{%
+ \crtcrefnumber{#1}%
+ }%
+}
+
+
+
+%%%%%%%%%%%%%%%%
+
+% Default cref format
+
+\newcommand{\crtcref}[1]{%
+ \expandafter\ifx\csname r@#1@cref\endcsname\relax
+ \crt@refundefined%
+ \else
+ \crtcrefnamebylabel{#1} \crtcrefreference{#1}%
+ \fi
+}
+
+\newcommand{\crtCref}[1]{%
+ \expandafter\ifx\csname r@#1@cref\endcsname\relax
+ \crt@refundefined%
+ \else
+ \crtCrefnamebylabel{#1} \crtcrefreference{#1}%
+ \fi
+}
+
+
+%%%%%
+
+
+%%%%%
+
+% refcount - like support
+
+
+\newif\if@crt@hyperrefloaded
+
+
+\@ifpackageloaded{hyperref}{\global\@crt@hyperrefloadedtrue}{}
+
+
+\AtBeginDocument{%
+ \if@crt@hyperrefloaded
+ \def\crt@@ref@@splitter@@first#1#2#3#4#5\@nil{%
+ #1%
+ }
+
+ \def\crt@@ref@@splitter@@second#1#2#3#4#5\@nil{%
+ #2%
+ }
+
+ \def\crt@@ref@@splitter@@third#1#2#3#4#5\@nil{%
+ #3%
+ }
+
+ \def\crt@@ref@@splitter@@fourth#1#2#3#4#5\@nil{%
+ #4%
+ }
+
+ \def\crt@@ref@@splitter@@fifth#1#2#3#4#5\@nil{%
+ #5%
+ }
+ \else
+ % No hyperref
+ \def\crt@@ref@@splitter@@first#1#2\@nil{%
+ #1%
+ }
+
+ \def\crt@@ref@@splitter@@second#1#2\@nil{%
+ #2%
+ }
+
+ \def\crt@@ref@@splitter@@third#1#2\@nil{%
+ % Nothing for convenience
+ }
+
+ \def\crt@@ref@@splitter@@fourth#1#2\@nil{%
+ % Nothing for convenience
+ }
+
+ \def\crt@@ref@@splitter@@fifth#1#2\@nil{%
+ % Nothing for convenience
+ }
+ \fi
+}
+
+ \def\crt@ref@splitter@firstarg#1{%
+ \expandafter\crt@@ref@@splitter@@first#1\@nil%
+ }
+
+ \def\crt@ref@splitter@secondarg#1{%
+ \expandafter\crt@@ref@@splitter@@second#1\@nil%
+ }
+
+ \def\crt@ref@splitter@thirdarg#1{%
+ \expandafter\crt@@ref@@splitter@@third#1\@nil%
+ }
+
+ \def\crt@ref@splitter@fourtharg#1{%
+ \expandafter\crt@@ref@@splitter@@fourth#1\@nil%
+ }
+
+ \def\crt@ref@splitter@fiftharg#1{%
+ \expandafter\crt@@ref@@splitter@@fifth#1\@nil%
+ }
+
+
+\newcommand{\@@crtextr@ct@ref}[2]{%
+ \expandafter\ifx\csname r@#2\endcsname\relax
+ \crt@refundefined%
+ \else
+ \expandafter\expandafter\csname crt@ref@splitter@#1\endcsname\csname r@#2\endcsname%
+ \fi
+}
+
+\let\crt@ref@splitter@reference\crt@ref@splitter@firstarg
+\let\crt@ref@splitter@page\crt@ref@splitter@secondarg
+\let\crt@ref@splitter@name\crt@ref@splitter@thirdarg
+\let\crt@ref@splitter@anchor\crt@ref@splitter@fourtharg
+\let\crt@ref@splitter@unused\crt@ref@splitter@fiftharg
+
+
+\newcommand{\crtextractref}[2]{%
+ \@@crtextr@ct@ref{#1}{#2}%
+}
+
+
+\newcommand{\crtrefnumber}[1]{%
+ \@@crtextr@ct@ref{reference}{#1}%
+}
+
+
+\newcommand{\crtrefpage}[1]{%
+ \@@crtextr@ct@ref{page}{#1}%
+}
+
+\newcommand{\crtrefanchor}[1]{%
+ \@@crtextr@ct@ref{anchor}{#1}%
+}
+
+\newcommand{\crtrefname}[1]{%
+ \@@crtextr@ct@ref{name}{#1}%
+}
+
+%%%
+
+\def\crt@split@@@anchor#1.#2\@nil{#1}
+\def\crt@split@@anchor#1#2#3#4#5{\crt@split@@@anchor#4\@nil}
+\def\crt@split@anchor#1{%
+ \expandafter\crt@split@@anchor#1%
+}
+
+\newcommand{\crtrefcounter}[1]{%
+ \if@crt@hyperrefloaded
+ \@ifundefined{r@#1}{\crt@refundefined}{%
+ \expandafter\crt@split@anchor\expandafter{\csname r@#1\endcsname}%
+ }%
+ \else
+ \fi
+}
+
+
+%%% Hyperref wrappers, not expandable.
+
+
+\newcommand{\crthyperlink}[2]{%
+ \if@crt@hyperrefloaded
+ \hyperlink{#1}{#2}%
+ \else
+ #2%
+ \fi
+}
+
+\newcommand{\crthypercref}[1]{%
+ \crthyperlink{\crtrefanchor{#1}}{\crtcref{#1}}%
+}
+
+\newcommand{\crthyperCref}[1]{%
+ \crthyperlink{\crtrefanchor{#1}}{\crtCref{#1}}%
+}
+
+%%% Support for list of labels
+
+\providecommand*{\listoflabelsname}{List of labels}
+
+\@ifclassloaded{book}{
+ \providecommand*{\listoflabelstructurelevel}{%
+ chapter%
+ }
+}{%
+ \providecommand*{\listoflabelstructurelevel}{%
+ section%
+ }
+}
+
+
+\newcommand{\crt@listoflabelsfileextension}{lla}
+\newcommand{\crt@listoflabelsstructurelevel}{section}
+
+\newcommand{\crtlistoflabelsstructurelevel}[1]{%
+ \renewcommand{\crt@listoflabelsstructurelevel}{#1}%
+}
+
+\newcommand{\crtlistoflabelsfileextension}[1]{%
+ \renewcommand{\crt@listoflabelsfileextension}{#1}%
+}
+
+
+
+
+\newcommand{\crtlistoflabels@unstarred}{%
+ \addcontentsline{toc}{\listoflabelstructurelevel}{\listoflabelsname}%
+ \@crt@listofl@bels%
+}
+
+
+\newcommand{\crtlistoflabels@starred}{%
+ \@crt@listofl@bels%
+}
+
+
+\newcommand{\@crt@listofl@bels}{%
+ \begingroup
+ \makeatletter
+ % In case of loading tcolorbox documentation mode
+ \@ifundefined{tcb@cs}{}{% Redefine \tcb@cs to gobble its argument
+ \renewcommand{\tcb@cs}[1]{}%
+ }%
+ \@input{\jobname.\crt@listoflabelsfileextension}
+ \if@filesw
+ \expandafter\newwrite\csname tf@\crt@listoflabelsfileextension\endcsname
+ \immediate\openout \csname tf@\crt@listoflabelsfileextension\endcsname \jobname.\crt@listoflabelsfileextension\relax
+ \fi
+ \endgroup
+}
+
+
+
+\newcommand{\crtlistoflabels}{%
+ \ifcrtfinal
+ \else
+ \csname\listoflabelstructurelevel\endcsname*{\listoflabelsname\@mkboth{\MakeUppercase{\listoflabelsname}}{\MakeUppercase{\listoflabelsname}}}%
+ \@ifstar{\crtlistoflabels@starred}{\crtlistoflabels@unstarred}%
+ \fi
+}
+
+
+\newcommand{\crtaddlabeltotoc}[1]{%
+ \ifcrtfinal
+ \else
+ \addcontentsline{\crt@listoflabelsfileextension}{\crt@listoflabelsstructurelevel}{\protect\numberline{\expandafter\crtrefnumber{#1}}#1}%
+ \fi
+}
+
+
+\@onlypreamble{\crtlistoflabelsstructurelevel}
+
+\providecommand{\crtprelabelhook}[1]{}
+\providecommand{\crtpostlabelhook}[1]{}
+
+
+%%%%%%%%%%%%%% Support for generic labels
+
+
+
+\newcommand{\crtprovidecurrentlabelname}[1]{%
+ \protected@edef\@currentlabelname{#1}%
+}
+
+\newcommand{\crtprovidecurrentlabel}[1]{%
+ \protected@edef\@currentlabel{#1}%
+}
+
+\newcommand{\crtprovidecurrentlabelinfo}[2]{%
+ \if@crt@hyperrefloaded
+ \phantomsection%
+ \fi
+ \protected@edef\@currentlabel{#1}%
+ \protected@edef\@currentlabelname{#2}%
+}
+
+
+
+\def\crt@@genericl@belopt@rgi[#1]#2{%
+ \crtprovidecurrentlabelinfo{#2}{#1}%
+ #1%
+ \@ifnextchar[{\crt@@genericl@belopt@rgii}{}
+}
+
+
+\def\scrt@@genericl@belopt@rgi[#1]#2{%
+ \crtprovidecurrentlabelinfo{#2}{#1}%
+ \@ifnextchar[{\crt@@genericl@belopt@rgii}{}
+}
+
+
+\def\crt@@genericl@belopt@rgii[#1]{%
+ \label{#1}%
+}
+
+
+
+\def\crt@@genericl@belnoopt#1{%
+ \crtprovidecurrentlabelinfo{#1}{#1}%
+ #1%
+ \@ifnextchar[{\crt@@genericl@belopt@rgii}{}%
+}
+
+\def\scrt@@genericl@belnoopt#1{%
+ \crtprovidecurrentlabelinfo{#1}{#1}%
+ \@ifnextchar[{\crt@@genericl@belopt@rgii}{}%
+}
+
+
+\newcommand{\crtcrossreflabel}{%
+ \@ifstar{%
+ \@ifnextchar[{\scrt@@genericl@belopt@rgi}{\scrt@@genericl@belnoopt}%
+ }{%
+ \@ifnextchar[{\crt@@genericl@belopt@rgi}{\crt@@genericl@belnoopt}%
+ }%
+}
+
+
+%%%%
+
+% First lower case and first uppercase support
+
+
+\def\crt@first@up#1#2\relax{\uppercase{#1}#2}%
+\def\crt@first@low#1#2\relax{\lowercase{#1}#2}
+
+\newcommand{\crt@firstupper}[1]{\expandafter\expandafter\expandafter\crt@first@up#1\relax}%
+\newcommand{\crt@firstlower}[1]{\expandafter\expandafter\expandafter\crt@first@low#1\relax}%
+
+\def\crt@@lowercase@@splitter#1#2#3#4#5\@nil{%
+ \crt@firstlower{#3}%
+}
+
+\def\crt@@uppercase@@splitter#1#2#3#4#5\@nil{%
+ \crt@firstupper{#3}%
+}
+
+
+\newcommand{\crt@lowercasesplitter}[1]{%
+ \expandafter\crt@@lowercase@@splitter#1\@nil%
+}
+\newcommand{\crt@uppercasesplitter}[1]{%
+ \expandafter\crt@@uppercase@@splitter#1\@nil%
+}
+
+
+\newcommand{\crtlnameref}{%
+ \@ifstar{\@crtlnameref@starred}{\@crtlnameref@unstarred}
+}
+
+\newcommand{\@crtlnameref@starred}[1]{%
+ \crtifdefinedlabel{#1}{%
+ \expandafter\crt@lowercasesplitter\csname r@#1\endcsname%
+ }{}%
+}
+
+\newcommand{\@crtlnameref@unstarred}[1]{%
+ \crtifdefinedlabel{#1}{%
+ \if@crt@hyperrefloaded
+ \hyperlink{\crtrefanchor{#1}}{\expandafter\crt@lowercasesplitter\csname r@#1\endcsname}%
+ \else
+ \@crtlnameref@starred{#1}%
+ \fi
+ }{}%
+}
+
+
+
+\newcommand{\crtunameref}{%
+ \@ifstar{\@crtunameref@starred}{\@crtunameref@unstarred}
+}
+
+\newcommand{\@crtunameref@starred}[1]{%
+ \crtifdefinedlabel{#1}{%
+ \expandafter\crt@uppercasesplitter\csname r@#1\endcsname%
+ }{}%
+}
+
+\newcommand{\@crtunameref@unstarred}[1]{%
+ \crtifdefinedlabel{#1}{%
+ \if@crt@hyperrefloaded
+ \hyperlink{\crtrefanchor{#1}}{\expandafter\crt@uppercasesplitter\csname r@#1\endcsname}%
+ \else
+ \@crtunameref@starred{#1}%
+ \fi
+ }{}%
+}
+
+%%%%%
+
+% Convenience wrappers
+
+\newcommand{\crtnameref}{%
+ \crt@nameref%
+}
+
+\newcommand{\crt@nameref}{%
+ \@ifstar{\crt@nameref@starred}{\crt@nameref@unstarred}
+}
+
+\newcommand{\crt@nameref@starred}[1]{%
+ \crtifdefinedlabel{#1}{%
+ \crtrefname{#1}%
+ }{}
+}
+
+\newcommand{\crt@nameref@unstarred}[1]{%
+ \crtifdefinedlabel{#1}{%
+ \if@crt@hyperrefloaded
+ \hyperlink{\crtrefanchor{#1}}{\crtrefname{#1}}%
+ \else
+ \crt@nameref@starred{#1}%
+ \fi
+ }{}%
+}
+
+
+
+%%%%%%%%%%%%%%%%%
+
+%%% Checking for existence of a label
+
+
+\newcommand{\crtifdefinedlabel}[3]{%
+ \@ifundefined{r@#1}{#3}{#2}%
+}
+
+\newcommand{\crtifundefinedlabel}[3]{%
+ \@ifundefined{r@#1}{#2}{#3}%
+}
+
+
+\newcommand{\crtcrefifdefinedlabel}[3]{%
+ \@ifundefined{r@#1@cref}{#3}{#2}%
+}
+
+\newcommand{\crtcrefifundefinedlabel}[3]{%
+ \@ifundefined{r@#1@cref}{#2}{#3}%
+}
+
+
+%%%%%%%%%%%%%%
+
+
+
+\AtBeginDocument{%
+
+ \let\crt@l@bels@fe\label
+
+ \newcommand{\l@belwithopt@rg}[2][]{%
+ \crtprelabelhook{#2}%
+ \crt@l@bels@fe[#1]{#2}%
+ \crtaddlabeltotoc{#2}%
+ \crtpostlabelhook{#2}%
+ }
+ \newcommand{\l@belwithoutopt@rg}[1]{%
+ \crtprelabelhook{#1}%
+ \crt@l@bels@fe{#1}%
+ \crtaddlabeltotoc{#1}%
+ \crtpostlabelhook{#1}%
+ }
+
+ \renewcommand{\label}{%
+ \@ifnextchar[{\l@belwithopt@rg}{\l@belwithoutopt@rg}%
+ }
+}
+
+\endinput
+
+