From a885837818d2bc1620e60f9e811b923b50f9d2b1 Mon Sep 17 00:00:00 2001 From: Karl Berry Date: Sun, 5 Sep 2021 20:39:04 +0000 Subject: crumbs (5sep21) git-svn-id: svn://tug.org/texlive/trunk@60429 c570f23f-e606-0410-a88d-b1316a301751 --- Master/texmf-dist/tex/latex/crumbs/crumbs.sty | 92 +++++++++++++++++++++++++++ 1 file changed, 92 insertions(+) create mode 100644 Master/texmf-dist/tex/latex/crumbs/crumbs.sty (limited to 'Master/texmf-dist/tex') diff --git a/Master/texmf-dist/tex/latex/crumbs/crumbs.sty b/Master/texmf-dist/tex/latex/crumbs/crumbs.sty new file mode 100644 index 00000000000..9c29b5dc785 --- /dev/null +++ b/Master/texmf-dist/tex/latex/crumbs/crumbs.sty @@ -0,0 +1,92 @@ +% (The MIT License) +% +% Copyright (c) 2021 Yegor Bugayenko +% +% 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. + +\NeedsTeXFormat{LaTeX2e} +\ProvidesPackage{crumbs}[2021/09/04 0.1.0 Navigation Crumbs] + +\RequirePackage{etoolbox} + +% see https://tex.stackexchange.com/a/12414/1449 +\makeatletter\newcommand\back{\@backslashchar}\makeatother +\makeatletter\newcommand\percent{\@percentchar}\makeatother +\RequirePackage{catchfile} + \newwrite\appendwrite + \newcommand*\appendtofile[2]{% + \begingroup + \IfFileExists{#1}% + {\CatchFileDef{\filecontent}{#1}{\endlinechar=`^^J\catcode\endlinechar=12\relax}}% keep existing end-of-lines + {\let\filecontent\empty}% + \immediate\openout\appendwrite=#1\relax + \immediate\write\appendwrite{\unexpanded\expandafter{\filecontent} #2}% + \immediate\closeout\appendwrite + \endgroup + } + +\newcommand\subcrumbs{ + \ifnum\value{section}=0\else + \expandafter\ifcsname crumbs\romannumeral\the\value{section}\endcsname + \csname crumbs\romannumeral\the\value{section}\endcsname{} + \fi + \fi +} + +\newcommand\crumb[2]{#1} +\newcommand\subcrumb[2]{#1} +\newcommand*\crumbs{} +\newcounter{crumbi} +\newcounter{subcrumbi} +\AtBeginDocument{ + \let\oldsection\section% + \renewcommand\section[2][]{ + \def\temp{#1} + \ifx\crumbs\empty + \appendtofile{\jobname.crumbs}{ + \back ifx \back crumbs \back empty + \back gappto \back crumbs{\back setcounter{crumbi}{0}} + \back fi + \back gappto\back crumbs{\back stepcounter{crumbi}\back crumb{\ifx\temp\empty #2\else #1\fi}{#2}} + } + \fi + \oldsection{#2} + }% + \let\oldsubsection\subsection + \renewcommand\subsection[2][]{ + \def\temp{#1} + \ifx\crumbs\empty + \appendtofile{\jobname.crumbs}{ + \back ifcsname crumbs\romannumeral\the\value{section}\back endcsname\back else + \back expandafter\back newcommand\back csname crumbs\romannumeral\the\value{section}\back endcsname{% + \back setcounter{subcrumbi}{0} + } + \back fi + \back expandafter\back gappto\back csname crumbs\romannumeral\the\value{section}\back endcsname{% + \back stepcounter{subcrumbi} + \back subcrumb{\ifx\temp\empty #2\else #1\fi}{#2} + } + } + \fi + \oldsubsection{#2} + }% + \IfFileExists{\jobname.crumbs}{\input{\jobname.crumbs}}{}% +} + +\endinput -- cgit v1.2.3