Autor Thema: outside-staff-priority und context-Änderungen  (Gelesen 1555 mal)

LaLuneNoir

  • Member
outside-staff-priority und context-Änderungen
« am: Donnerstag, 18. August 2016, 17:57 »
Hallo!

Habe seit langem mal wieder ein kleines Problem, dass ich partout nicht gelöst bekomme. Folgendes snippet:

\score {
  \new Staff \relative a' {
    \override Score.TextSpanner.outside-staff-priority = #10
    \override Score.RehearsalMark.outside-staff-priority = #100
    a\startTextSpan a a a a a\mark \default a a a a a a\stopTextSpan
  }
  \layout {
    \context { \Score
      \consists "Text_spanner_engraver"
    }
    \context {
      \Voice
      \remove "Text_spanner_engraver"
    }
  }
}

Ich habe die TextSpanner in den \Score-context gelegt, damit diese in den einzelnen Stimmen erscheinen aber in der Partituer nur einmal. Leider wandert dadurch aber die Probenziffer unter den TextSpan, was ja nicht sein soll. Und mit outside-staff-priority bekomme ich das Problem nicht in den Griff. Was mache ich falsch?
Vielen Dank für eure Hilfe!

Jonas

Manuela

  • Member
Re: outside-staff-priority und context-Änderungen
« Antwort #1 am: Donnerstag, 18. August 2016, 18:16 »
Ohne jetzt genau zu wissen, was du falsch machst, mit der von fugenkomponist entworfenen Scheme-Funktion kannst du den Textspanner beliebig verschieben.

\version "2.19.37"
allgShift=
#(define-music-function (offset context grobname)
   (pair? symbol? symbol?)
   #{
     \once \override #(list context grobname 'extra-offset) = #offset
   #})

\score {
  \new Staff \relative a' {
    \override Score.TextSpanner.outside-staff-priority = #10
    \override Score.RehearsalMark.outside-staff-priority = #100
    \allgShift #'(0 . -2) Score TextSpanner
    a\startTextSpan a a a a a\mark \default a a a a a a\stopTextSpan
  }
  \layout {
    \context {
      \Score
      \consists "Text_spanner_engraver"
    }
    \context {
      \Voice
      \remove "Text_spanner_engraver"
    }
  }
}

Oder du verwendest direkt das entsprechende override. Ich kämpfe auch ständig mit diversen Kontexten und Engravern und damit, dass selten das passiert, was ich erwarte  ;)

Mit dieser Funktion kannst du beliebige Elemente verschieben, ohne Rücksicht auf Verluste  ;) wird in diesem Thread diskutiert
https://liarchiv.joonet.de/index.php?topic=2313.0
« Letzte Änderung: Donnerstag, 18. August 2016, 18:19 von Manuela »

fugenkomponist

  • Member
Re: outside-staff-priority und context-Änderungen
« Antwort #2 am: Donnerstag, 18. August 2016, 19:01 »
Das Problem ist, dass TextSpanner darauf ausgelegt sind, sich an einem Staff zu orientieren statt an einem kompletten Score (vermute ich). Deshalb zieht outside-staff-priority nicht mehr (das ginge, wenns auf den obersten Staff bezogen wäre statt auf den Score). Hier hilft tatsächlich ein einfaches Y-offset: Und zwar ist der TextSpanner.Y-offset relativ zur RehearsalMark und RehearsalMark relativ zum Score (Tip: mal ausprobieren, nur einen der beiden Werte zu verändern, um das nachzuvollziehen).
\version "2.19.46"

\score {
  <<
    \new Staff \relative a' {
      \override Score.TextSpanner.Y-offset = -2.5
      \override Score.RehearsalMark.Y-offset = 4
      a\startTextSpan a a a a a\mark \default a a a a a a\stopTextSpan
    }
    \new Staff \relative a' {
      a\startTextSpan a a a a a\mark \default a a a a a a\stopTextSpan
    }
  >>
  \layout {
    \context {
      \Score
      \consists "Text_spanner_engraver"
    }
    \context {
      \Voice
      \remove "Text_spanner_engraver"
    }
  }
}
Leider gibt es noch keinen Befehl ähnlich zu \tempo, der nen Tempo-Spanner erstellt und darauf ausgelegt ist, sich auf nen Score zu beziehen. Es gibt aber als „Ersatz“ irgendwo (vermutlich auf der englischen Mailingliste einen „handgeschriebenen“ Kontext namens MarkLine, der auch noch andere Flexibilitäten mitbringt (z. B. ist das auch ein Workaround für ein Problem mit Tempo über jeder StaffGroup, was funktionieren sollte, aber nicht funktioniert bisher).