Deutschsprachiges LilyPond-Forum

Allgemeine Fragen und Probleme => Fragen und Probleme aller Art => Thema gestartet von: ValidUserName am Mittwoch, 28. März 2018, 23:18

Titel: Balken: Neigung adjustieren? Balkenbrechung bei Zeilenumbruch [gelöst]
Beitrag von: ValidUserName am Mittwoch, 28. März 2018, 23:18
Moin,

nur eine allgemeine Frage, zu der ich partout nichts passendes im Handbuch finden kann: Ist es möglich die Neigung von Notenbalken manuell anzupassen? Insbesondere: Ist es möglich Lilypond dazu zu bringen, takübergreifende Balken bei einem Zeilenumbruch so zu behandeln, als handele es sich tatsächlich um eine durchgehenden Balken, also mit gleicher Steigung und Ausrichtung innerhalb der Notenlinien an beiden Enden?

Minimalbeispiel dazu: Sagen wir, ich habe Figuren der folgenden Art:
\version "2.19.64"

\score {
  \new Staff \relative {
    \time 3/4
    \clef "bass"
      \override Beam.breakable = ##t
      \tuplet 7/6 { a,8[ c e a c] } \tuplet 7/6 2. { b[ f |
      a, d f a d] b[ e, |
      \break
      a, e' a c e] } \tuplet 7/6 { e[ a, |
      g e' f d e g, f] } |
  }
}

Nun möchte ich beipielsweise den zweiten Balken dahingehend ändern, dass dieser leicht ansteigend ist. Desweiteren soll der Balken von Takt 2 nach Takt 3 so aussehen, als wäre hier tatsächlich nur zwischen den Takten ein sauberer Trennschnitt erfolgt.
Titel: Antw:Balken: Neigung adjustieren? Balkenbrechung bei Zeilenumbruch
Beitrag von: harm6 am Donnerstag, 29. März 2018, 11:27
Wenn Du in die IR unter Beam nachschaust findest Du diverse einstellbare properties. Manche davon haben durchaus Einfluß auf die Neigung oder allgemeiner gesprochen die Positionierung des Beams. 'positions ist das property welches wahrscheinlich immer anwendbar und am einfachsten anzugehen ist.
Du könntest also
\override Beam.positions = #'(-2 . -3)
verwenden und das Zahlenpaar der aktuellen Situation anpassen.
Allerdings würde am Zeilenumbruch ein etwas aufwändigeres Coding nötig sein, um zwei Zahlenpaare (vor/nach dem Zeilenumbruch) zu übergeben.
Um diese Schwierigkeit zu vereinfachen hat David Nalesnik `alterBroken' entwickelt, Syntax:
\alterBroken positions #'((-4 . -3.5) (-3.5 . -2.5))  Beam
Man hat aber immer noch das Problem die Zahlenpaare von Grund auf zu erraten.
Das kann man mit `offset', ebenfalls von David Nalesnik, leichter haben. Hier wird von den default-Werten ausgegangen und die übergebenen Werte hinzuaddiert, Syntax:
\offset positions #'(0 . 1) Beam
\offset positions #'((-3 . -0.5) (0.5 . -2)) Beam
(Der zweite Wert gilt für den Beam nach dem Zeilenumbruch.

`alterBroken' und `offset' haben allerdings Einschränkungen, sie funktionieren nicht für jedes property eines jeden grobs.
Insoweit sollte man die fundamentale Syntax, d.h. \override was-auch-immer, nicht aus dem Blick verlieren und vielleicht auch mal das Coding am Zeilenumbruch nachlesen und verstehen lernen.
http://lilypond.org/doc/v2.19/Documentation/extending/difficult-tweaks (http://lilypond.org/doc/v2.19/Documentation/extending/difficult-tweaks)
Das ist hier allerdings nicht nötig.

Aber hier Dein Beispiel mit verschiedenen Möglichkeiten:


\version "2.19.64"

\score {
  \new Staff \relative {
    \time 3/4
    \clef "bass"
      \override Beam.breakable = ##t
      \tuplet 7/6 { a,8[ c e a c] }
      \once \offset positions #'(0 . 1) Beam
      \tuplet 7/6 2. { b[ f |
      a, d f a d]
      \alterBroken positions #'((-4 . -3.5) (-3.5 . -2.5))  Beam
      %\once \offset positions #'((-3 . -0.5) (0.5 . -2)) Beam
      b[ e, |
      \break
      a, e' a c e] }
      \once \override Beam.positions = #'(-2 . -3)
      \tuplet 7/6 { e[ a, |
      g e' f d e g, f] } |
  }
}


HTH,
  Harm
Titel: Antw:Balken: Neigung adjustieren? Balkenbrechung bei Zeilenumbruch
Beitrag von: ValidUserName am Donnerstag, 29. März 2018, 14:35
Wie genau sind denn die Zahlenwerte überhaupt zu lesen, also welche Maßeinheit und mit welchem Bezugspunkt?

Gäbe es auch eine flexiblere Möglichkeit für den Zeilenumbruch. In meinem  Beispiel habe ich den Umbruch der Einfachheit helber einfach erzwungen, aber im tatsächlichen Notentext könnte dieser sich in Folge von Formatierungs- und Textänderungen noch verschieben. Es wäre toll wenn es möglich wäre das Umbruchverhalten ganz allgemein so umzuschreiben, dass dabei ein sauberer Bruch rauskommt.
Titel: Antw:Balken: Neigung adjustieren? Balkenbrechung bei Zeilenumbruch
Beitrag von: harm6 am Donnerstag, 29. März 2018, 15:05
ZitatWie genau sind denn die Zahlenwerte überhaupt zu lesen, also welche Maßeinheit und mit welchem Bezugspunkt?

Referenzpunkt ist die 0-Linie des Notensystems, im üblichen System mit 5 Linien also die Mittellinie.
Maßeinheit ist hier staff-space.

ZitatGäbe es auch eine flexiblere Möglichkeit für den Zeilenumbruch. In meinem  Beispiel habe ich den Umbruch der Einfachheit helber einfach erzwungen, aber im tatsächlichen Notentext könnte dieser sich in Folge von Formatierungs- und Textänderungen noch verschieben. Es wäre toll wenn es möglich wäre das Umbruchverhalten ganz allgemein so umzuschreiben, dass dabei ein sauberer Bruch rauskommt.

Was als "sauber" zu bezeichnen ist, unterliegt durchaus dem Wandel der Zeit und dem persönlichen Geschmack ;)

Ich habe aber noch ein bißchen weiter geforscht.
Per default ist Beam.positions als `beam::place-broken-parts-individually' gesetzt. So auch nachzulesen in der IR.
Es gibt aber auch:
`beam::align-with-broken-parts'
`beam::slope-like-broken-parts'
Kodiert in output-lib.scm
Ein Beispiel ist leider nur in den Regression-Tests zu finden, ansonsten ist es undokumentiert :(
http://lilypond.org/doc/v2.19/input/regression/collated-files.html (http://lilypond.org/doc/v2.19/input/regression/collated-files.html)
Such nach `beam-broken-classic.ly'

`beam::align-with-broken-parts' könnte sein wonach Du suchst.


\version "2.19.64"

\score {
  \new Staff \relative {
    \time 3/4
    \clef "bass"
      \override Beam.positions = #beam::align-with-broken-parts
      %\override Beam.positions = #beam::slope-like-broken-parts
      \override Beam.breakable = ##t
      \tuplet 7/6 { a,8[ c e a c] } \tuplet 7/6 2. { b[ f |
      a, d f a d] b[ e, |
      \break
      a, e' a c e] } \tuplet 7/6 { e[ a, |
      g e' f d e g, f] } |
  }
}


Gruß,
  Harm
Titel: Antw:Balken: Neigung adjustieren? Balkenbrechung bei Zeilenumbruch
Beitrag von: ValidUserName am Samstag, 31. März 2018, 12:02
\override Beam.positions = #beam::align-with-broken-parts
      %\override Beam.positions = #beam::slope-like-broken-parts

...sind schon mal sehr hilfreich, was den Zeilenumbruch angeht.
Was die slope-Anpassung angeht werde ich noch ein bischen rumbasteln. Gibt es irgendwo eine Dokumentation dazu, wie Lilypond standardmäßig die Balkenposition ermittelt?
Titel: Antw:Balken: Neigung adjustieren? Balkenbrechung bei Zeilenumbruch
Beitrag von: harm6 am Sonntag, 1. April 2018, 10:41
ZitatGibt es irgendwo eine Dokumentation dazu, wie Lilypond standardmäßig die Balkenposition ermittelt?

Nicht das ich wüßte.

Mir ist allerdings auch nicht klar wo und wie LilyPonds default (bzw. die bereits erwähnten positions-procedures) nicht Deinen Wünschen entspricht.

Nichtsdestotrotz: das Thema ist sehr komplex. Du wirst den source-code lesen müssen.

Neben den bereits erwähnten scheme-Definitionen wird die Hauptarbeit in C++ gemacht:
beam.cc                     
beaming-pattern.cc
beam-collision-engraver.cc 
beam-performer.cc
beam-engraver.cc           
beam-quanting.cc

Insbesondere beam-quanting.cc scheint die meiste Relevanz zum Thema zu haben.
Allerdings erfordert jeder Eingriff hier, daß Du LilyPond selbst aus dem repository kompilierst.
Ich kann Dir da nicht helfen, C++ kann ich nicht.

Gruß,
  Harm

Titel: Antw:Balken: Neigung adjustieren? Balkenbrechung bei Zeilenumbruch [gelöst]
Beitrag von: ValidUserName am Dienstag, 3. April 2018, 00:44
Na, dann werde ich mir wohl irgendwann einmal de Source Code vornehmen müssen (einfach nur aus Interesse, nicht weil ich das ganze gleich ändern wollte. Dafür müsste ich's ja eh erst einmal verstehen...).