From e0c6872cf40896c7be36b11dcc744620f10adf1d Mon Sep 17 00:00:00 2001 From: Norbert Preining Date: Mon, 2 Sep 2019 13:46:59 +0900 Subject: Initial commit --- .../contrib/labels4easylist/labels4easylist.sty | 90 ++++++++++++++++++++++ 1 file changed, 90 insertions(+) create mode 100644 macros/latex/contrib/labels4easylist/labels4easylist.sty (limited to 'macros/latex/contrib/labels4easylist/labels4easylist.sty') diff --git a/macros/latex/contrib/labels4easylist/labels4easylist.sty b/macros/latex/contrib/labels4easylist/labels4easylist.sty new file mode 100644 index 0000000000..01c3a7daf7 --- /dev/null +++ b/macros/latex/contrib/labels4easylist/labels4easylist.sty @@ -0,0 +1,90 @@ +% 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% +} -- cgit v1.2.3