Hallo Lilys,
seit Lilypond 2.13 gibt es ja die Möglichkeit, Variablen für \with zu definieren, sodass man gleiche Staff-Properties nicht dauernd schreiben muss.
Wie sieht es aber für sich ändernde Properties aus?
Für die Übersichtlichkeit bei Drums- & Percussion-Notationen ist es z.B. oft interessant, die Stems alle nach oben zeigen zu lassen und eine feste Höhe zu definieren. Diese Höhe kann dummerweise variieren, wenn z.B. nur Instrumente mit besonders hohen staff positions (z.B. Hihats) oder besonders tiefen staff positions (z.B. Bassdrums) benutzt werden.
In folgendem Beispiel löse ich das Problem damit, mehrere Variablen mit unterschiedlichen Höhen zu definieren, was aus programmiertechnischer Sicht doch recht albern ist...

Versuchsweise definiere ich auch eine music-function, die das Problem lösen soll.
Aktiviert man aber den momentan auskommentierten DrumStaff, der die Funktion aufruft, bekommt man einen Syntaxfehler 'unexpected \with'.
Und hier das Beispiel:
\version "2.13.51"
beamPropsHigh = \with {
\remove Clef_engraver
\override Stem #'direction = #UP
\override Beam #'positions = #'(4.5 . 4.5)
\override StaffSymbol #'staff-space = #'1.15
}
beamPropsMiddle = \with {
\remove Clef_engraver
\override Stem #'direction = #UP
\override Beam #'positions = #'(3.5 . 3.5)
\override StaffSymbol #'staff-space = #'1.15
}
beamPropsLow = \with {
\remove Clef_engraver
\override Stem #'direction = #UP
\override Beam #'positions = #'(2.5 . 2.5)
\override StaffSymbol #'staff-space = #'1.15
}
test = #(define-music-function (parser location beamPos) (pair?)
#{
\with {
\remove Clef_engraver
\override Stem #'direction = #UP
\override Beam #'positions = #'$beamPos
\override StaffSymbol #'staff-space = #'1.15
} % with
#})
eins = \drummode { bd8 hh16 hh16 sn8 bd8 bd8 hh16 hh16 sn8 ssh8 }
zwei = \drummode { bd8 ssh16 ssh16 sn8 bd8 bd8 ssh16 ssh16 sn8 ssh8 }
drei = \drummode { bd4 cglo8 cglo8 bd8 cglo16 cglo16 cglo4 }
\score { <<
\new DrumStaff \with { \beamPropsHigh } <<
\set Staff.instrumentName = \markup { "1 "}
\new DrumVoice { \eins }
>> % DrumStaff
\new DrumStaff \with { \beamPropsMiddle } <<
\set Staff.instrumentName = \markup { "2 "}
\new DrumVoice { \zwei }
>> % DrumStaff
\new DrumStaff \with { \beamPropsLow } <<
\set Staff.instrumentName = \markup { "3 "}
\new DrumVoice { \drei }
>> % DrumStaff
% \new DrumStaff \with { \test #'(4.5 . 4.5) } <<
% \set Staff.instrumentName = \markup { "1b "}
% \new DrumVoice { \eins }
% >> % DrumStaff
>> % score
\layout {
indent = 1\cm
\context {
\Score
\remove "System_start_delimiter_engraver"
} % context
}
} % score
Hat jemand eine Idee, wie man das Problem lösen kann?
Viele liebe Grüße,
Manuel