%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % % Made by Gabriel Ruprecht % % % % This work is published under the % % LaTeX project public license 1.3 % % % % Package version 1.1.0 % % 2025-01-20 % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \ProvidesPackage{liederbuch-listofsongs}[version 1.1.0] % Default names; Has Babel support in liederbuch.sty \def\listofsongsname{List of Songs} \def\LBsongComposer{composer}% \def\LBsongLyricist{lyricist}% \def\LBsongEditor{editor}% \def\LBsongYear{year}% \def\LBsongCopyright{copyright}% \def\LBsongEditorialOffice{editorial office}% \def\LBsongEditon{edition}% \def\LBsongPrint{print}% % The command, that outputs the list of songs. Mostly taken from listoffigures \def\listofsongs{% \newif\ifGFM@LB@chapterExists% \GFM@LB@chapterExiststrue% % \ifx\undefined\chapter\relax% \GFM@LB@chapterExistsfalse% \fi% % \if@twocolumn% \@restonecoltrue% \onecolumn % \else% \@restonecolfalse% \fi% \ifGFM@LB@chapterExists\relax% %starred/unstarred?% \chapter*{\listofsongsname}% \else% \section*{\listofsongsname}% \fi% \@mkboth{\MakeUppercase \listofsongsname }{\MakeUppercase \listofsongsname }% %Print nothing for one run, when the los style is changed \ifx\listofsongsstyleprevrun\listofsongsstylevalue% \else% \def\l@song##1##2{}% \fi% %%%%%%%%%%%%%%%%%%%%%%%%%%%%% %Most important line is here: \@starttoc{los}% %%%%%%%%%%%%%%%%%%%%%%%%%%%%% \if@restonecol% \twocolumn% \fi% } % This is needed to check, if the same style is used than last % time. If not, there will be no output for one compilation. \AtEndDocument{ \write\@auxout{\noexpand\gdef\noexpand\listofsongsstyleprevrun{\listofsongsstylevalue}} } % For checking, if a valid style had been selected. \newif\iflistofsongsstyleExists\relax \listofsongsstyleExistsfalse % Selects the style. Contains the default styles. \def\listofsongsstyle#1{% \edef\listofsongsstylevalue{#1}% \def\GFM@compareB{twolines}% \ifx\listofsongsstylevalue\GFM@compareB\relax% \listofsongsstyleTwolines\relax% \listofsongsstyleExiststrue% \fi% \def\GFM@compareB{semitwolines}% \ifx\listofsongsstylevalue\GFM@compareB\relax% \listofsongsstyleSemiTwolines\relax% \listofsongsstyleExiststrue% \fi% \def\GFM@compareB{simple}% \ifx\listofsongsstylevalue\GFM@compareB\relax% \listofsongsstyleSimple\relax% \listofsongsstyleExiststrue% \fi% \def\GFM@compareB{simple with number}% \ifx\listofsongsstylevalue\GFM@compareB\relax% \listofsongsstyleSimplewithnumber\relax% \listofsongsstyleExiststrue% \fi% \def\GFM@compareB{simple with document number}% \ifx\listofsongsstylevalue\GFM@compareB\relax% \listofsongsstyleSimplewithdocumentnumber\relax% \listofsongsstyleExiststrue% \fi% % TODO: create style registering and \iflistofsongsstyleExists% \else% \PackageError{liederbuch}{liederbuch-listofsongs.sty, line 102: You tried to call a style for the list of songs, that is not defined.}{Did you make a typo? The default style is 'simple' and will automatically be used, if you don't use the command listofsongsstyle.}% \fi% \listofsongsstyleExistsfalse% } \@onlypreamble\listofsongsstyle % Default style twolines: % The definion of this is 90% taken from l@figure: \def\listofsongsstyleTwolines{% \newdimen\GFM@LB@losDimA\relax% \newdimen\GFM@LB@losDimB\relax% \GFM@LB@losDimA=1.5em\relax% \GFM@LB@losDimB=2.3em\relax% % % \let\l@song\l@figure \def\l@song##1##2{% \show##1\relax% \wlog{This is a marker} % \show##2\relax% \def\GFM@LB@extract####1\csname ####2@title\endcsname####3{ \def\GFM@LB@expandedNamePre{####1}% \def\GFM@LB@expandedName{####2}% \def\GFM@LB@expandedNameAfter{####3}% }% \expandafter\GFM@LB@extract##1\relax% % %% \def\split####1={% % % \def\GFM@LB@expandedName{####1}% % % }\split##1@title=\relax% \show\GFM@LB@expandedName% \vskip 0.5em plus 0.05em minus 0.02em\relax% \vskip \z@ \@plus .2\p@ % {\leftskip \GFM@LB@losDimA\relax\rightskip \@tocrmarg \parfillskip -\rightskip \parindent \GFM@LB@losDimA\relax \@afterindenttrue \interlinepenalty \@M \leavevmode \@tempdima \GFM@LB@losDimB\relax \advance \leftskip \@tempdima \null \nobreak \hskip -\leftskip {\csname \GFM@LB@expandedName @title\endcsname }\newline\null% \expandafter\ifx\csname \GFM@LB@expandedName @composer\endcsname \empty% \else% \csname \GFM@LB@expandedName @composer\endcsname\ -- \fi\csname% \GFM@LB@expandedName @lyricist\endcsname% \nobreak \leaders \hbox {$\m@th \mkern \@dotsep mu\hbox {.}\mkern \@dotsep mu$}\hfill \nobreak \hb@xt@ \@pnumwidth {\hfil \normalfont \normalcolor ##2\kern -\p@ \kern \p@ }\par }% }% \def\GFM@LB@addcontentsline{% \addcontentsline{los}{song}{\unexpanded{\unexpanded{\csname}}\GFM@LB@expandedName @title\unexpanded{\unexpanded{\endcsname}}}% }% } % Default style semitwolines % The definion of this is 90% taken from l@figure: \def\listofsongsstyleSemiTwolines{% \newdimen\GFM@LB@losDimA\relax% \newdimen\GFM@LB@losDimB\relax% \GFM@LB@losDimA=1.5em\relax% \GFM@LB@losDimB=2.3em\relax% % \def\l@song##1##2{% \def\split####1&####2&####3={% \def\GFM@LB@losTitle{####1}% \def\GFM@LB@losComposer{####2}% \def\GFM@LB@losLyricist{####3}% }\split##1=\relax% \vskip 0.5em plus 0.05em minus 0.02em\relax% \vskip \z@ \@plus .2\p@ % {\leftskip \GFM@LB@losDimA\relax\rightskip \@tocrmarg \parfillskip -\rightskip \parindent \GFM@LB@losDimA\relax \@afterindenttrue \interlinepenalty \@M \leavevmode \@tempdima \GFM@LB@losDimB\relax \advance \leftskip \@tempdima \null \nobreak \hskip -\leftskip {\GFM@LB@losTitle}\ifx\GFM@LB@losComposer\empty\else\newline\null\GFM@LB@losComposer\ -- \fi\GFM@LB@losLyricist% \nobreak \leaders \hbox {$\m@th \mkern \@dotsep mu\hbox {.}\mkern \@dotsep mu$}\hfill \nobreak \hb@xt@ \@pnumwidth {\hfil \normalfont \normalcolor ##2\kern -\p@ \kern \p@ }\par }% }% \def\GFM@LB@addcontentsline{% \addcontentsline{los}{song}{% \csname \GFM@LB@expandedName @title\endcsname &\csname \GFM@LB@expandedName @composer\endcsname &\csname \GFM@LB@expandedName @lyricist\endcsname% }% }% } % Default style simple: \def\listofsongsstyleSimple{% \let\l@song\l@figure\relax% \def\GFM@LB@addcontentsline{% \addcontentsline{los}{song}{\csname \GFM@LB@expandedName @title\endcsname }% }% } % Default style simple with number \def\listofsongsstyleSimplewithnumber{% \let\l@song\l@figure\relax% \def\GFM@LB@addcontentsline{% \addcontentsline{los}{song}{\numberline{\GFM@LB@number }\csname \GFM@LB@expandedName @title\endcsname }% }% } % Default style simple with document number \def\listofsongsstyleSimplewithdocumentnumber{% \let\l@song\l@figure\relax% \def\GFM@LB@addcontentsline{% \addcontentsline{los}{song}{\numberline {\arabic{liedcounter}}\csname \GFM@LB@expandedName @title\endcsname }% }% } %default value: \listofsongsstyle{simple}