Mehrere bookparts in einer Funktion ausgeben - geht das? ---> gelöst

Begonnen von Manuela, Montag, 24. Februar 2020, 17:43

« vorheriges - nächstes »

Manuela

Danke für eure Hilfe
viele Grüße
-- Manuela

harm6

Vielleicht:


\version "2.19.83"

test =
#(define-music-function (p)
  (ly:pitch?)
  #{
    \new Staff \transpose c $p \relative c'' { cis e g }
  #})

xtest =
#(define-scheme-function (p q) (ly:pitch? ly:pitch?)
  (scorify-music (test p)))
   
foo = \paper { ragged-right = ##f }

#(define (make-book-parts-with-top-markup markup scores)
  (let* ((output-def (ly:make-output-def))
         (raw-paper
           (begin
             (ly:output-def-set-variable! output-def 'is-paper #t)
             output-def))
         (bp  #{ \bookpart { $raw-paper } #}))
         
    (for-each
     (lambda (score) (ly:book-add-score! bp score))
     (cons (list markup) scores))
     
    bp))
     
#(define (fill-book-part-paper! bookpart key-value-alist)
  (for-each
    (lambda (key-value)
      (ly:output-def-set-variable!
        (ly:book-paper bookpart) (car key-value) (cdr key-value)))
    key-value-alist))

#(define (pitch-alteration-semitones pitch)
   (inexact->exact (round (* (ly:pitch-alteration pitch) 2))))

#(define (conditional-string-downcase str condition)
  (if condition
      (string-downcase str)
      str))

%% Notenname als Markup mit deutschen Notennamen
#(define (note-name->my-markup pitch lowercase?)
  (let* ((name (ly:pitch-notename pitch))
         (alt-semitones (pitch-alteration-semitones pitch))
         (n-a (if (member (cons name alt-semitones) `((6 . -1) (6 . -2)))
                  (cons 7 (+ 1 alt-semitones))
                  (cons name alt-semitones))))
    (make-line-markup
     ;(make-simple-markup
     (list
      (string-append
       (conditional-string-downcase
        (list-ref '("C" "D" "E" "F" "G" "A" "H" "B") (car n-a))
        lowercase?)
       (if (or (equal? (car n-a) 2) (equal? (car n-a) 5))
           (list-ref '( "ses" "s" "" "is" "isis") (+ 2 (cdr n-a)))
           (list-ref '("eses" "es" "" "is" "isis") (+ 2 (cdr n-a)))))))))

#(define-markup-command (my-header layout props p text1 text2)
  (ly:pitch? string? string?)
  (interpret-markup layout props
    #{
       \markup
         \fill-line
           \override #'(font-features . ("smcp"))
           \override #'(box-padding . 1)
           \override #'(thickness . 2)
           \override #'(font-size . 4)
         {
           \null
           \rounded-box \concat { $text1 #(note-name->my-markup p #f) $text2 }
           \null
         }
    #}))
     
#(define (add-bookparts-to-toplevel-bookparts pitch)
  (let* ((bk (ly:make-book $defaultpaper $defaultheader '()))
         (my-kadenzen
           #{ \markup \my-header ##{ $pitch #} "Kadenzen " "-Dur" #})
         (my-dreiklang
           #{
              \markup \my-header ##{ $pitch #} "Leitereigene Dreiklänge " "-Dur"
           #})
         (my-vierklang
           #{
              \markup \my-header ##{ $pitch #} "Leitereigene Vierklänge " "-Dur"
           #})
         (paper-kadenzen #{ \paper { line-width = 120 ragged-right = ##f } #})
         (paper-dreiklang #{ \paper { top-markup-spacing.padding = 40 } #})
         (paper-vierklang #{ \paper { top-markup-spacing.padding = 20 } #})
         (bk-parts
          (list
           (make-book-parts-with-top-markup
            my-kadenzen
            (list (xtest pitch pitch)))
           (make-book-parts-with-top-markup
            my-dreiklang
            (list (xtest pitch pitch) (xtest #{ d #} pitch)))
           (make-book-parts-with-top-markup
            my-vierklang
            (list (xtest pitch pitch) (xtest #{ d #} pitch))))))
           
    (for-each
      (lambda (book-part key-values)
        (fill-book-part-paper! book-part key-values))
      bk-parts
      (map
        (lambda (paper)
          (ly:module->alist (ly:output-def-scope paper)))
        (list paper-kadenzen paper-dreiklang paper-vierklang)))
               
               
    (for-each
      (lambda (book-part)
        (ly:parser-define! 'toplevel-bookparts
          (cons book-part (ly:parser-lookup 'toplevel-bookparts))))
      bk-parts)))
 
myBookparts =
#(define-void-function (mus) (ly:music?)
  (let ((pitches (music-pitches mus)))
    (for-each
      (lambda (pitch) (add-bookparts-to-toplevel-bookparts pitch))
      pitches)))

\myBookparts < des aes >


HTH,
  Harm

Manuela

Danke Harm für die viele Mühe, die du dir für gemacht hast.

Das klappt alles ganz wunderbar  :) :) :)
Danke für eure Hilfe
viele Grüße
-- Manuela