% Copyright (c) 2015-2019 Robert Ryszard Paciorek % % MIT License % % Permission is hereby granted, free of charge, to any person obtaining a copy % of this software and associated documentation files (the "Software"), to deal % in the Software without restriction, including without limitation the rights % to use, copy, modify, merge, publish, distribute, sublicense, and/or sell % copies of the Software, and to permit persons to whom the Software is % furnished to do so, subject to the following conditions: % % The above copyright notice and this permission notice shall be included in all % copies or substantial portions of the Software. % % THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR % IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, % FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE % AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER % LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, % OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE % SOFTWARE. % Version 1.0 (2019-05-13): first public release \NeedsTeXFormat{LaTeX2e} \ProvidesPackage{labels4easylist} \RequirePackage{xparse} \RequirePackageWithOptions{easylist} % % configurable refernece labels for easylist items % % add label to item entry, usage: % \itemLabel{LabelName}[skipA][skibB] % skipA - number of level to skip at front % skipB - number of level to skip at end \DeclareDocumentCommand{\itemLabel}{ m O{0} o } {% % prepare ref-label text in \elLabel@currRefLabel \xdef\elLabel@currRefLabel{}{% \elLabel@currLevel=1% \elLabel@minLevel=#2% \elLabel@maxLevel=\el@PreviousItem% \IfValueTF{#3}{\advance\elLabel@maxLevel by -#3}{\elLabel@GetLastLevel}% \elLabel@RecurencyGetEnumLevel% }% % create ref-label with id from #1 and text from \elLabel@currRefLabel \let\@currentlabel\elLabel@currentlabel% \def\@currentlabel{\elLabel@currRefLabel}% \label{#1}% \let\elLabel@currentlabel\@currentlabel% } % counters \newcount\elLabel@currLevel \newcount\elLabel@minLevel \newcount\elLabel@maxLevel % recursive skip final unused levels and not enumerate levels \newcommand{\elLabel@GetLastLevel} { \ifnum\elLabel@maxLevel>\elLabel@minLevel% \ifnum\elLabel@maxLevel=\csname Hide\the\elLabel@maxLevel\endcsname \advance\elLabel@maxLevel by -1 \elLabel@GetLastLevel \else% \ifnum\value{List\the\elLabel@maxLevel}=0 \advance\elLabel@maxLevel by -1 \elLabel@GetLastLevel \fi% \fi% \fi% } % recursive build label text for reference \newcommand{\elLabel@RecurencyGetEnumLevel} {% % if (minLev < currLev AND currLev <= maxLev AND value !=0) \ifnum\elLabel@currLevel>\elLabel@minLevel \ifnum\elLabel@currLevel>\elLabel@maxLevel\else \ifnum\value{List\the\elLabel@currLevel}=0\else% \xdef\elLabel@currRefLabel{\elLabel@currRefLabel% \csname el@NumberDenotation:\csname Numbers\the\elLabel@currLevel\endcsname\endcsname{List\the\elLabel@currLevel}% \ifnum\elLabel@currLevel<\elLabel@maxLevel \csname Mark\the\elLabel@currLevel\endcsname \fi% }% \fi\fi\fi% % recursion: \ifnum\elLabel@currLevel<\elLabel@maxLevel \advance\elLabel@currLevel by 1 \elLabel@RecurencyGetEnumLevel \fi% }