Deutschsprachiges LilyPond-Forum

Spezielle Notation => Neue Musik => Thema gestartet von: kilgore am Mittwoch, 15. Juli 2020, 11:54

Titel: Cluster Linie
Beitrag von: kilgore am Mittwoch, 15. Juli 2020, 11:54
Liebe Lilys,

Lange nichts gepostet! Nun habe ich doch eine Notation die ich erzeugen möchte und meine Lösung ist nur doof.

Gewollt ist eine vertikale Linie rechts neben einen Akkord. Die Linie soll den Umfang des Akkordes umfassen (also, egal ob Terz, Quinte, Oktave). Dots, Slurs, Ties etc. mögen Abstand halten.

Meine Lösung bisher sieht so aus:


\version "2.20.0"

splitWhite = {
  %\once \override Dots.X-offset = #1
  \once \override NoteHead.stencil = #ly:text-interface::print
  \override NoteHead.text =
  \markup {
    \combine
    \translate #'( 1.7 . 0.5 )
    \override #'(thickness . 2 )
    \draw-line #'( 0 . -.9 )
    \musicglyph #"noteheads.s1"
  }
  \once \override Stem.extra-offset = #'( -.4 . -0.1 )

}



\relative c' {
r4 \splitWhite <ges' bes>2.~
<ges bes>1
}


Das funktioniert ganz OK, muss aber dann von fall zu Fall angepasst werden. Der obere Bindebogen macht Platz für den verschobenen Hals, obwohl ich den Hals eigentlich zurück nach links schieben müsste. Naja, meine Lösung ist halt nicht elegant.

Gibt es einen Weg diese Linie hinzubekommen ohne so viel Anpassung? Egal welche Akkord oder Notenwert? Habt ihr eine Idee?

Vielen Dank!

Herzliche Grüße,
kilgore
Titel: Antw:Cluster Linie
Beitrag von: harm6 am Mittwoch, 15. Juli 2020, 13:16
Hallo kilgore :)

Du könntest das Arpeggio mißbrauchen:


rightClusterIndicator = {
  %% get bracket-style Arpeggio
  \arpeggioBracket
  %% reduce bracket-angles to zero
  \once \override Arpeggio.protrusion = 0
  \once\override Arpeggio.thickness = 2
  %% move Arpeggio to the right
  \once\override Arpeggio.direction = 1
  %% shorten Arpeggio a bit
  \once\override Arpeggio.positions =
    #(lambda (grob)
      (interval-widen (ly:arpeggio::calc-positions grob) -0.25))
  %% Move DotColumn (if present) to make room for the moved Arpeggio
  %% The amount is taken from Arpegio.padding
  \once\override NoteColumn.after-line-breaking =
  #(lambda (grob)
    (let ((dc (ly:note-column-dot-column grob)))
      (if (ly:grob? dc)
          (let* ((conditional-elements
                   (ly:grob-object grob 'conditional-elements))
                 (cond-elts-list
                   (if (ly:grob-array? conditional-elements)
                       (ly:grob-array->list conditional-elements)
                       '()))
                 (arpeggio-ls
                   (filter
                     (lambda (g) (grob::has-interface g 'arpeggio-interface))
                     cond-elts-list))
                 (arpeggio-padding
                   (if (pair? arpeggio-ls)
                       (ly:grob-property (car arpeggio-ls) 'padding)
                       0)))
            (ly:grob-translate-axis! dc arpeggio-padding X)))))
  <>\arpeggio
}

                       
\relative c' {       
r4
\override Arpeggio.color = #red
\rightClusterIndicator
<ges' aes>2.~
<ges bes>1
}


Der thickness-override funktioniert allerdings erst ab 2.21, zuvor ist die thickness hard-coded.

Gruß,
  Harm
Titel: Antw:Cluster Linie
Beitrag von: kilgore am Donnerstag, 16. Juli 2020, 09:54
Hey Harm!

Danke, wie immer, für deine tolle Lösung! Ich hab tatsächlich damit angefangen mit Arpeggio zu arbeiten, kam aber nicht sehr weit. So sieht es richtig klasse aus!  :D

Vielleicht probiere ich mal 2.21 aus...

Herzliche Grüße,
Nathan