Hallo Philipp,
es hat auf Anregung von Mike Solomon auf der devel-list mal eine Diskussion gegeben, eine Möglichkeit zu implementieren, die genau das macht was Dir (so glaube ich) vorschwebt.
Unter
http://lists.gnu.org/archive/html/lilypond-devel/2011-06/pdfdjegCnwZ1Y.pdfkann man sehen was gedacht war.
(Lange) Diskussion hierzu :
http://lists.gnu.org/archive/html/lilypond-devel/2011-06/msg00810.html und
http://lists.gnu.org/archive/html/lilypond-devel/2011-07/msg00231.htmloder auch:
http://codereview.appspot.com/4661061/#ps1Ich weiß allerdings nicht, was draus geworden ist, denn der letzte Beitrag hier liegt vier Monate zurück und in "2.15.20" ist nichts entsprechendes zu finden.
Han-Wen Nienhuys dortiger Vorschlag:
Can you try a minimal implementation first? For example,
* Have a stem property that determines the end of the stem. Currently, we have
y2 = Staff_symbol_referencer::get_position (lh);
for that. This feature is generic and cleanly implemented with a
callback. Should be a separate patch.
* Have a mechanism for glissando engraver to ignore note-heads. Maybe
a boolean property: #'glissando-note
Then, in your .ly file you do the following
* Have an engraver (by preference written in Scheme) that hooks up the
glissandi with the stems.
* Create normal beamed 16th notes with #'glissando-note on their note-heads.
* Hook a callback on that, that looks at the glissando's slope and the
stem's X position to determine where the stem starts printing
* Make the noteheads very small and invisible.
hope this helps.
übersteigt allerdings meine Kenntnisse.
Insoweit solltest Du kilgores Vorschlag mit der zweiten Stimme versuchen oder meinen folgenden:
\version "2.14.2"
\pointAndClickOff
gliss = #(define-music-function (parser location control)(pair?)
(let((y-off (car control))
(slope (cdr control)))
#{
\once\override TextSpanner #'style = #'line
\once\override TextSpanner #'extra-offset = #(cons 0 $y-off)
\once\override TextSpanner #'thickness = #1.5
\override TextSpanner #'bound-details =
#`((left . ((Y . 0)
(padding . 1.5)
))
(right . ((Y . ,$slope)
(padding . 2.5)
(attach-dir . ,RIGHT)
)))
#}))
#(define startGliss startTextSpan)
#(define stopGliss stopTextSpan)
stemGliss = #(define-music-function (parser location control)(number?)
#{
\once \override NoteHead #'Y-extent = #(cons 0 $control)
\once \override NoteHead #'transparent = ##t
\once \override Stem #'Y-extent = #'(0 . 0)
#})
\relative c' {
\gliss #'(-3.8 . -1)
\partial 4*1 b'\startGliss
\stemGliss #0.3
\once \override NoteHead #'X-extent = #'(-0.8 . 0.1)
g
g\stopGliss r2
}
\relative c' {
\override Score.Glissando #'thickness = #1.5
\times 2/3 {
a'4\glissando
\gliss #'(-5.67 . -1)
c8 \startGliss
}
\times 2/3 {
\stemGliss #0.3
a8
\once \override Stem #'X-extent = #'(-2 . 0)
a4\stopGliss
}
}
\relative c' {
% helper:
% \override Stem #'color = #red \override Stem #'layer = #6
\gliss #'(-5.6 . 4.7)
c1\startGliss
\stemGliss #0
e16
\stemGliss #0.3
e
\stemGliss #0.6
e
\stemGliss #0.9
e
\stemGliss #-0.2
g
\stemGliss #0.1
g
\stemGliss #0.5
g
\stemGliss #0.7
g
\once \override Stem #'X-extent = #'(-1.5 . 0)
\stemGliss #0.4
b
\stemGliss #0.1
b
\stemGliss #-0.2
b
\stemGliss #-0.5
b
\stemGliss #0.6
d
\stemGliss #0.3
d
\stemGliss #0
d
\stemGliss #-0.3
d
e1\stopGliss
}\gliss ist eine Funktion die den TextSpanner benutzt. Als Argument wird ein pair erwartet. Der erste Wert sollte benutzt werden, um den Spanner an den Ausgangsnotenkopf anzupassen. Der zweite für den Zielnotenkopf.
\gliss muß vor die Note gesetzt werden, von dem aus das glissando starten soll, direkt hinter diese Note muß \startGliss um das Glissando auch zu starten. Zum Ende des glissandos muß \stopGliss hinter die Zielnote gesetzt werden. (\startGliss und \stopGliss sind die umdefinierten Befehle \startTextSpan und \stopTextSpan).
\stemGliss ist eine Funktion die es ermöglicht die Notenhälse an die glissando-Linie bündig anzupassen (also eher eine kosmetische Sache, genauso wie die anderen override-Befehle mit 'X-extent)
Es ist sehr schade, daß die Diskussion auf der devel-list nicht zu einem greifbaren Ergebnis geführt hat, denn der obige Code ist sehr fragil und automatisiert ist auch überhaupt nichts.
Aber naja, es funktioniert (irgendwie ...)
Gruß,
Harm
P.S. Deine eigentliche Frage:
ich würde gerne ein Glissando über Haltebögen hinwegnotieren
versteh ich allerdings nicht (ich hab mich an Dein Bild gehalten):
Was meinst Du hier mit Haltebögen? In Deinem Bild tauchen keine auf!?