Deutschsprachiges LilyPond-Forum

Allgemeine Fragen und Probleme => Fragen und Probleme aller Art => Thema gestartet von: rgree am Donnerstag, 23. Februar 2023, 16:46

Titel: withinStaff (gelöst)
Beitrag von: rgree am Donnerstag, 23. Februar 2023, 16:46
Hallo,

in meinem Notensatz möchte ich ab und zu mal (z.B. eine dynamische Bezeichnung) in das
Notensystem (die Linien) hineinschreiben lassen.

Inzwischen habe ich folgende Prozeduren gebastelt, die das bewerkstelligen für:

(1) dynamische Bezeichnungen:
dynamicsWithinStaffOnce = \once {
  \override Staff.DynamicLineSpanner.outside-staff-priority = #'()
  \override Staff.DynamicLineSpanner.staff-padding = #'()
}
(2) Fingersätze:
fingeringWithinStaffOnce = \once {
  \override Fingering.staff-padding = #'()
  \override StringNumber.staff-padding = #'()
}

(3) Texte:
textWithinStaffOnce = \once {
  \override TextScript.staff-padding = #'()
  \override TextScript.outside-staff-priority = #'()
}
=====================
Soweit so gut.
Wie mache ich das aber z.B. für <> (espressivo) und überhaupt andere Artikulationszeichen ?
Relativ weit komme ich mit :
withinStaff = -\tweak staff-padding #'() \etc

Ich kann dann z.B. schreiben:
c''' \withinStaff _\espressivo 

Aber, wie die Beispiele (1) und (2) zeigen, muss man zuweilen die Property
outside-staff-priority
manipulieren oder 2 Objekte manipulieren ...

Gibt es dafür eine übergreifende Lösung, oder muß ich ggf. für jede unterschiedliche Situation eine
eigene Prozedur bauen ?
Wo kann ich das nachlesen ?

Gruß,
Reinhard
 
Titel: Antw:withinStaff
Beitrag von: Lazy am Donnerstag, 23. Februar 2023, 22:29
Hallo Reinhard,

da sich prinzipiell jedes Grob unterschiedlich verhalten kann und wird und damit unterschiedlich Gründe hat, nicht im System angezeigt zu werden, ist es schwierig, eine Lösung zu finden, die immer funktioniert.

Im vorliegenden Falle gibt es zwei Gründe, die so etwas verhindern:


Wenn nun aber ein Grob etwa das staff-padding nicht hat, so tut es nichts, wenn wir das "entfernen". Wir können also ganz getrost

withinStaff = \tweak staff-padding #'() \tweak outside-staff-priority #'() \etc
setzen. Manche Grobs wie etwa Dynamikbezeichnungen benötigen einen Grobpfad dazu, da für die Ausrichtung der DynamicLineSpanner zuständig ist (der dafür sorgt, dass Dynamicbezeichnungen aneinander ausgerichtet sind) und nicht das Dynamikgrob.

Das könnte man über eine music-function ganz einfach so bewerkstelligen:

withinStaff =
#(define-music-function (path mus) ((key-list-or-symbol? '()) ly:music?)
   (if (symbol? path) (set! path (list path)))
   #{
     \tweak #(append path (list 'staff-padding)) #'()
     \tweak #(append path (list 'outside-staff-priority)) #'()
     #mus
   #})

{ \stemUp c''\withinStaff DynamicLineSpanner \f c''\withinStaff-> c''\withinStaff_3 }

Herzliche Grüße,
Valentin
Titel: Antw:withinStaff
Beitrag von: rgree am Donnerstag, 23. Februar 2023, 23:15
Hallo Valentin,

danke für die ausführliche Antwort.

Herzliche Grüße,
Reinhard