Hallo chf,
nach einem weiteren Tag des Nachdenkens hier noch ein paar weitere Verbesserungen und Änderungsmöglichkeiten:

falls Du
\rochadeII benutzen möchtest dann ersetze in
\once\override Staff.TimeSignature #'after-line-breaking = #shift-TimeSignatur-at-line-begin
\once\override Staff.BarLine #'after-line-breaking = #shift-BarLine-at-line-begin Staff durch
Score. Das erspart die erneute Angabe im Klavier.
Darüber hinaus habe ich
\rochadeIIa entwickelt.
Diese Funktion kümmert sich nicht nur um die Position von Taktangabe und Taktstrich, sondern auch um den Abstand zum nachfolgenden Noten- bzw Pausenzeichen. Dazu war es allerdings nötig eine der anderen Methoden, eine RehearsalMark sowohl am Zeilenende als auch zu Beginn der neuen Zeile erscheinen zu lassen, anzuwenden, um die schon oben erwähnte
\grace-Note loszuwerden. Dies erfolgt durch die Einführung der
layOut-Stimme und Verschiebung des
"Mark_engraver". (Diese Stimme könnte man natürlich jetzt auch für alles mögliche verwenden.)
Falls Du das Erscheinungsbild so akzeptabel findest, könntest Du auch
\rochadeIII verwenden. In diesem Befehl sind die Werte einzementiert. (Entschlackt den Code, ist aber natürlich nicht mehr variabel. Ist im Moment auskommentiert.)
Ansonsten habe ich die Kadenz herausgezogen und eigens in eine Variable gepackt, um
#(ly:export (skip-of-length soloKadenz)) setzen zu können. In diesem Zusammenhang zeigte sich auch der einzige bislang bemerkte Wermutstropfen: Wenn man
#(ly:export (skip-of-length soloKadenz)) durch
#(ly:export (mmrest-of-length soloKadenz)) ersetzt kommt es zu einem Fehlverhalten, welches mir nicht erklärlich ist.
\version "2.12.3"
%#(set-global-staff-size 15)
rochadeIIa =
#(define-music-function (parser location rochade)(list?)
#{
#(define (shift-TimeSignatur-at-line-begin g)
"Shift an item, but only at the start of the line."
(if (and (ly:item? g)
(equal? (ly:item-break-dir g) RIGHT))
(ly:grob-translate-axis! g $(car rochade) X)
))
#(define (shift-BarLine-at-line-begin g)
"Shift an item, but only at the start of the line."
(if (and (ly:item? g)
(equal? (ly:item-break-dir g) RIGHT))
(ly:grob-translate-axis! g $(cadr rochade) X)
))
\once\override Score.TimeSignature #'after-line-breaking = #shift-TimeSignatur-at-line-begin
\once\override Score.BarLine #'after-line-breaking = #shift-BarLine-at-line-begin
\once\override Score.Rest #'X-extent = #(cons $(caddr rochade) 1)
\once\override Score.Stem #'X-extent = #(cons $(caddr rochade) 1)
#})
%{
rochadeIII =
#(define-music-function (parser location)()
#{
#(define (shift-TimeSignatur-at-line-begin g)
"Shift an item, but only at the start of the line."
(if (and (ly:item? g)
(equal? (ly:item-break-dir g) RIGHT))
(ly:grob-translate-axis! g -2 X)
))
#(define (shift-BarLine-at-line-begin g)
"Shift an item, but only at the start of the line."
(if (and (ly:item? g)
(equal? (ly:item-break-dir g) RIGHT))
(ly:grob-translate-axis! g 3.5 X)
))
\once\override Score.TimeSignature #'after-line-breaking = #shift-TimeSignatur-at-line-begin
\once\override Score.BarLine #'after-line-breaking = #shift-BarLine-at-line-begin
\once\override Score.Rest #'X-extent = #(cons -2 1)
\once\override Score.Stem #'X-extent = #(cons -2 1)
#})
%}
soloKadenz = \relative c' {
\clef tenor
\override Staff.TimeSignature #'stencil = #'()
\cadenzaOn
\once \override Staff.OttavaBracket #'direction = #DOWN
\set Staff.ottavation = #"8vb ad lib."
\once \override Script #'script-priority = #-100
bes'4\fermata^\markup {\fontsize #1.5 "frei" \fontsize #0 " (Klav. tacet)"}
a-- g--
\ottava #0
\clef bass
\times 2/3 {es4 (d c)}
\times 2/3 {d c bes}
c8 [(bes!) as ges]
\times 2/3 {bes! (\override Accidental #'transparent = ##f a) g(}
\times 2/3 {a) [\once \override Accidental #'transparent = ##t g es]}
as16 [(ges es!) d]
\once\override Accidental #'transparent = ##f
g [es! d (c)]
bes4\fermata as-- ges--
\set Staff.ottavation = #"8va ad lib."
bes,\breve d e
\cadenzaOff
\mark \markup \musicglyph #"scripts.ufermata"
\break
}
soloVoice =
\relative c' {
%\key cis\major
\set Score.currentBarNumber = #8
\revert Staff.TimeSignature #'stencil
%\rochadeIII
\rochadeIIa #(list -2 3.5 -2)
\time 4/4
\bar "|:"
\autoBeamOn
\ottava #0
r2
\once \override Accidental #'transparent = ##t
e,4\mp
\once \override Accidental #'transparent = ##t
b'8 [b]
d r r4 f,16 [(a) g gis] d'8 r
r2 g,4 d'8 [d]
f [f] r4 a,16\< [(c) ais b] f'8\! r
f,4--\mf a-- g-- gis--
}
layOut =
{ #(ly:export (skip-of-length soloKadenz))
\once \override Voice.RehearsalMark #'extra-offset = #'(3 . 1)
\mark \markup \box \pad-markup #0.25 "B"
\tempo \markup \fontsize #1.5 "erstes Zeitmaß"
\repeat unfold 5 {s1}
}
piano =
{ #(ly:export (skip-of-length soloKadenz))
% \once \override Voice.RehearsalMark #'extra-offset = #'(3 . 1)
% \mark \markup \box \pad-markup #0.25 "B"
% \tempo \markup \fontsize #1.5 "erstes Zeitmaß"
\repeat unfold 5 {c1}
}
\score {
<<
\new Staff %\with { fontSize = #-1 \override StaffSymbol #'staff-space = #(magstep -2)}
<<
\new Voice \with {
\consists Mark_engraver
\override RehearsalMark #'break-visibility = #'#(#t #t #f)
}
{\soloKadenz\soloVoice}
\new Voice\with {
\consists Mark_engraver
}
\layOut
>>
\new PianoStaff
<<
\new Staff
{ \relative c' { \piano }}
\new Staff
{ \relative c {\clef "bass" \piano}}
>>
>>
\layout {
indent = 0
%#(layout-set-staff-size 25)
\context {
\RemoveEmptyStaffContext
%\override VerticalAxisGroup #'remove-first = ##t
}
\context {
\Score
\remove "Mark_engraver"
%\override NonMusicalPaperColumn #'line-break-permission = ##f
}
}
}
Gruß,
Harm
P.S. Meine
rochade-Funktionen scheinen auch bei Veränderung der Tonart und bei allen möglichen Größenveränderungen keine unerwünschten Nebenwirkungen zu haben. Falls Dir doch welche auffallen sag Bescheid.
