Hallo fugenkomponist,
du hast mich jetzt auf die Idee gebracht, wie man Bögen beliebig verschieben kann. Ich wollte mir eine Funktion schreiben, wo ich die Verschiebestrecken als Paar eingeben kann, leider klappt es wieder einmal nicht wie ich es mir vorstelle.
\version "2.19.37"
#(define-music-function (slur-shift amount)
(pair?)
#{
\once \override Voice.Slur.outside-staff-priority = #'()
\once \override Voice.Slur.Y-offset = 0
\once \override Voice.Slur.extra-offset = $amount
#}
)
#'()
\relative c {
\clef bass
\slur-shift #'(0 . 2)
c8 ( g'' e' g, c g c g )
}
ergibt die Fehlermeldung: Ungültige Fluchtsequenz: »\slur-shift«
Wahrscheinlich nur eine Kleinigkeit, aber ich komme einfach nicht drauf.
Update: inzwischen bin ich draufgekommen, so klappt es:
slurShift=
#(define-music-function (amount)
(pair?)
#{
\once \override Voice.Slur.outside-staff-priority = #'()
\once \override Voice.Slur.Y-offset = 0
\once \override Voice.Slur.extra-offset = $amount
#}
)
slurShifts=
#(define-music-function (amount offsets)
(pair? pair?)
#{
\once \override Slur.positions =
#(lambda (grob)
`(,(+ (car offsets) (cdar (ly:slur::calc-control-points grob))) .
,(+ (cdr offsets) (cdr (cadddr (ly:slur::calc-control-points grob))))))
\once \override Voice.Slur.outside-staff-priority = #'()
\once \override Voice.Slur.Y-offset = 0
\once \override Voice.Slur.extra-offset = $amount
#}
)
#'()
\relative c {
\clef bass
\slurShift #'(0 . 2)
c8 ( g'' e' g, c g c g )
\slurShifts #'(2 . 2) #'(0 . 6)
c,,8 ( g'' e' g, c g c g )
}
Ich habe noch eine Funktion aus dem LSR ein bisschen "aufgebohrt"