%% http://lsr.di.unimi.it/LSR/Item?id=738 %% see also http://lsr.di.unimi.it/LSR/Item?id=368 % define toc-section commands #(begin (define-public (set-toc-section! text) #f) (define-public (get-toc-section text) #f) (let ((toc-section #f)) (set! set-toc-section! (lambda (text)(set! toc-section text))) (set! get-toc-section (lambda ()(begin toc-section))))) % define section-aware piece-toc-item-command piece = #(define-music-function (text) (markup?) (begin (if (get-toc-section) (add-toc-item! 'tocCollMarkup (get-toc-section))) (set-toc-section! #f) (add-toc-item! 'tocPartMarkup text))) \paper { #(set-paper-size "a5 landscape") % this will not know the page number! tocCollMarkup = \markup { \fill-line { \bold \fromproperty #'toc:text \vspace #1 \null } } tocPartMarkup = \markup { \fill-line { \concat { \hspace #2 \fromproperty #'toc:text } \vspace #0 \fromproperty #'toc:page } } } % some music pieces ... \bookpart { \markuplist { \override-lines #'(baseline-skip . 2.3) \table-of-contents } } #(set-toc-section! "section 1") \bookpart { \piece \markup { "piece 1" } \score { \relative c' { c d e f g } } } \bookpart { \piece \markup { "piece 2" } \score { \relative c' { c d e f } } } #(set-toc-section! "section 2") \bookpart { \piece \markup { "piece 1" } \score { \relative c' { c d e f } } } \bookpart { \piece \markup { "piece 2" } \score { \relative c' { c d e f } } }