Position von Notenköpfen und Dots bei zweistimmigem Satz (gelöst)

Begonnen von Manuela, Freitag, 3. Januar 2025, 13:24

« vorheriges - nächstes »

Manuela

Bei einem zweistimmigen Notensatz ist das c'' der 1. Stimme rechts von der 2. Stimme anstatt links (Bild 1)

Mit \once \override NoteColumn.force-hshift = #-1.4 kann ich die Noten verschieben (Bild 2). Nun gibt es das Problem, dass der Punkt kaum zu sehen ist (im Original ist er etwas nach oben verschoben).

\override Dots.Y-offset = #... bewirkt nichts, erst mit der Brechstange \override Dots.extra-offset = #'(0 . 1) erziele ich eine Wirkung (Bild 3).

Wenn ich das ganze eine Oktave runter setze, sitzen die Notenköpfe genau dort, wo sie sein sollten (Bild 4).

Wieso funkioniert Y-offset nicht? Und wieso werden die Notenköpfe falsch(?) positioniert?

Und hier noch der Code:
\version "2.25.22"
\language "deutsch"

sop = \relative {
  c''4. ~ c4 c8
}

alt = \relative {
  < e' b' >4 q8 q4 q8
}

\new Staff
<<
  \key b \major
  \new Voice {
    \voiceOne
    \sop
  }
  \new Voice  {
    \voiceTwo
    \alt
  }
>>

\new Staff
<<
  \key b \major
  \new Voice {
    \voiceOne
    \once \override NoteColumn.force-hshift = #-1.4
    %% funktioniert, aber der Verlängerungspunkt ist nicht gut positioniert
    \sop
  }
  \new Voice  {
    \voiceTwo
    \alt
  }
>>

\new Staff
<<
  \key b \major
  \new Voice {
    \voiceOne
    \once \override NoteColumn.force-hshift = #-1.4
    \override Dots.Y-offset = #-12  %% wird ignoriert
    \sop
  }
  \new Voice  {
    \voiceTwo
    \alt
  }
>>

\new Staff
<<
  \key b \major
  \new Voice {
    \voiceOne
    \once \override NoteColumn.force-hshift = #-1.4
    \override Dots.extra-offset = #'(0 . 1) %% die Brachialmethode
    \sop
  }
  \new Voice  {
    \voiceTwo
    \alt
  }
>>

%% eine Oktave tiefer schaut alles fein aus

\new Staff
<<
  \key b \major
  \new Voice {
    \voiceOne
    \transpose c c, \sop
  }
  \new Voice  {
    \voiceTwo
    \transpose c c, \alt
  }
>>
Danke für eure Hilfe
viele Grüße
-- Manuela

harm6

Hallo Manuela,

Du hast hier eine zweistimmige Situation, bei der (a) die Notenköpfe kollidieren würden, (b) die obere Note eine punktierte Note ist und (c) der obere Notenkopf in einem Zwischenraum liegt.
Falls alle drei Bedingungen zusammen fallen, dann wird der obere Notenkopf nach rechts verschoben. Eine Oktave tiefer sind eben nicht alle Bedingungen erfüllt und der obere Notenkopf ist links.
Das ist der dokumentierte LilyPond-default - ich bin sehr sicher, daß das auch durch Gould etc gedeckt ist.

Das \override Dots.Y-offset = #... nicht funktioniert liegt daran, daß alle Dots von der DotColumn im Staff-context gesammelt und positioniert werden. Man könnte jetzt in der DotColumn rumpopeln, es geht aber einfacher... Es gibt auch andere Grobs bei denen X/Y-offset nicht funktioniert, aus ähnlichen Gründen.

Zur Lösung:
Die Verschiebung des Notenkopfes kann durch das dokumentierte NoteCollision.prefer-dotted-right eingeregelt werden.
Möglicherweise reicht Dir das schon. Aber wenn Du die Punktierung in Y-Achse angehen willst verwende Dots.staff-position. LilyPond würde von sich aus einen einzelnen Punkt nie um eine volle staff-space verschieben, aber es geht natürlich und der Tie geht das mit.

\version "2.25.22"
\language "deutsch"

sop = \relative {
  \once \override Dots.staff-position = 1
  \once \override Staff.NoteCollision.prefer-dotted-right = ##f
  c''4. ~ c4 c8
}

alt = \relative {
  < e' b' >4 q8 q4 q8
}


\new Staff
<<
  \key b \major
  \new Voice {
    \voiceOne
    \sop
  }
  \new Voice  {
    \voiceTwo
    \alt
  }
>>

HTH,
  Harm

Manuela

#2
Herzlichen Dank für die Info, Harm! Ein frohes Neues Jahr wünsche ich dir und allen Foristen.
Danke für eure Hilfe
viele Grüße
-- Manuela