Seltsames Verhalten bei eigener DynamikbezeichnungHa

Begonnen von LaLuneNoir, Samstag, 9. Februar 2019, 14:05

« vorheriges - nächstes »

LaLuneNoir

Hallo liebes Forum,

hilfe war ich lange nicht hier, ich habe gar nicht gemerkt, dass das alte Forum ersetzt wurde... Bin wohl recht selbstständig in Lilypond geworden.

Aber jetzt habe ich doch mal wieder ein Problem:

\version "2.19.82"

vardyn =
  #(make-dynamic-script
    (markup #:line
            (#:normal-text "this is a test")))

\new StaffGroup <<
  \new Staff
    \relative c'' {
      a\vardyn b
    }
>>


Das individuelle Dynamikzeichen verhält sich in diesem snippet wie ein markup mit \textLengthOn und nicht wie ein normales Dynamikzeichen. Das Problem verschwindet sobald man die StaffGroup entfernt:

\version "2.19.82"

vardyn =
  #(make-dynamic-script
    (markup #:line
            (#:normal-text "this is a test")))

\new Staff
  \relative c'' {
    a\vardyn b
}


Hat irgendwer von euch eine Idee, was da los ist?

Vielen Dank!

Der schwarze Mond

Malte

Hallo und willkommen zurück!

Da ist los, daß LilyPond seit einer Version 2.19.xx Dynamikangaben nicht mehr mit Taktstrichen zwischen Systemen kollidieren läßt, siehe Anhang für einen Vergleich von 2.18.2 und 2.19.82.

Daß solche Taktstriche (genannt SpanBar) bei nur einem System und vor allem am Systemanfang gar nicht vorkommen, scheint da nicht in Erwägung gezogen zu werden. Dein Minimalbeispiel ist sehr gut, nun muß ich ausnahmsweise aber mal nach mehr Code fragen ;) Hast du auch in deinem Stück nur einen Staff in der StaffGroup? Und steht die Sache auch dort am Anfang der Zeile?

LaLuneNoir

Hallo Malte,

danke für die schnelle Antwort. Na toll, da wechselt man auf die neueste Version, um ein Layout-Problem zu lösen und schafft sich ein neues. Aber eigentlich ist das nicht ganz blöd, dass Lilypond diese Kollision vermeiden will, dass musste ich schon oft selbst korrigieren.

Hier ein wenig upgedateter Code.

\version "2.19.82"

vardyn =
  #(make-dynamic-script
    (markup #:line
            (#:normal-text "1.x"
             #:dynamic "f"
             #:hspace -.8
             #:normal-text ", 2.x"
             #:dynamic "mf")))

\new Score <<
  \new StaffGroup <<
    \new Staff
      \relative c'' {
        \once \override DynamicText.self-alignment-X = #-.8
        a4\vardyn b a a a a a a
        \once \override DynamicText.self-alignment-X = #-.8
        a\vardyn b a a a a a a
      }
    \new Staff
      \relative c'' {
        \once \override DynamicText.self-alignment-X = #-.8
        a4\vardyn b a a a a a a
        \once \override DynamicText.self-alignment-X = #-.8
        a\vardyn b a a a a a a
      }
  >>
  \new PianoStaff <<
    \new Staff
      \relative c'' {
        a4 b a a a a a a
        a b a a a a a a
      }
    \new Dynamics {
      \once \override DynamicText.self-alignment-X = #-.8
        s1\vardyn s1
      \once \override DynamicText.self-alignment-X = #-.8
        s1\vardyn s1
    }
    \new Staff
      \relative c'' {
        a4 b a a a a a a
        a b a a a a a a
      }
  >>
>>


Die Dynamik kommt öfters vor, auch in der Partitur. Das ganze wäre eigentlich gar kein Problem, ich könnte stattdessen ja ein Markup nehmen, aber in der Partitur gibt es eine Klavierstimme mit \Dynamics context und da wird dann ein Markup nicht zentriert. Deshalb habe ich die Lösung mit dem Scheme-Code gewählt.

A propos span-bars: Das Problem taucht tatsächlich nicht auf, wenn ich statt einer StaffGroup ein ChoirStaff nehme. Allerdings hilft das entfernen des Span-bar-engravers auch nicht.

Malte

Hm ... Irgendwie finde ich, daß die Noten nicht nach rechts verschoben werden sollten. Könnte ein Bug sein ... Ich schau mir das bei Gelegenheit nochmal genauer an.

LaLuneNoir

Das wäre super, danke. Vielleicht gehe ich dann doch auf 18.2 zurück, das andere Problem löst sich glaube ich eh anders.

Malte

Du kannst die extra-spacing-width anpassen, dann wird die Note nicht nach rechts verschoben. Allerdings kann es bei sehr langen Dynamikbezeichnungen und sehr kurzen Takten dann da halt doch zu ner Überschneidung mit dem Taktstrich kommen ;)

\version "2.19.82"

vardyn =
- \tweak self-alignment-X #-.8
- \tweak extra-spacing-width #'(0 . -9)
- #(make-dynamic-script
    (markup #:line
      (#:normal-text "1.x"
        #:dynamic "f"
        #:hspace -.8
        #:normal-text ", 2.x"
        #:dynamic "mf")))

\new Score <<
  \new StaffGroup <<
    \new Staff
    \relative c'' {
      a4\vardyn b a a a a a a
      a\vardyn b a a a a a a
    }
    \new Staff
    \relative c'' {
      a4\vardyn b a a a a a a
      a\vardyn b a a a a a a
    }
  >>
  \new PianoStaff <<
    \new Staff
    \relative c'' {
      a4 b a a a a a a
      a b a a a a a a
    }
    \new Dynamics {
      s1\vardyn s1
      s1\vardyn s1
    }
    \new Staff
    \relative c'' {
      a4 b a a a a a a
      a b a a a a a a
    }
  >>
>>

harm6

Malte hat das meiste schon gesagt bzw gezeigt, hier nochmal in kurzer Zusammenfassung: In 2.19.82 ist DynamicText.extra-spacing-width in StaffGroup auf #f gesetzt, während der grob-default den Wert '(+inf.0 . -inf.0) hat. Der Grund liegt in dem Bestreben Kollisionen mit dem SpanBar zu vermeiden.
Das kann man generell rückgängig machen mit:
\new StaffGroup \with { \revert DynamicText.extra-spacing-width } ...
oder indem man extra-spacing-width fallweise anpasst.

Gruß,
  Harm

LaLuneNoir

Ah, ok. Wunderbar, vielen Dank für die Lösungen. Grundsätzlich hat mich das Problem mit der Kollision von Dynamik und Taktstrich auch schon oft gestört, aber bei der gewählten Lösung ist es gut, dass man recht einfach auf das alte Verhalten ausweichen kann, vor allem, wenn es um lange Dynamikbezeichnungen geht, denn die müssen halt leider doch manchmal ohne Råcksicht auf Kollisionen gesetzt werden.
Vielen Dank für eure Hilfe noch einmal.