Hallo zusammen,
nachdem ich beim letzten mal schon ein Problem bezüglich der Taktnummerierung hatte (siehe
hier), habe ich mich weiter mit Scheme und Lilypond beschäftigt. Nun bin ich wieder bei der Taktnummerierung gelandet

Es geht um etwas ganz ähnliches. Eigentlich habe ich versucht bestimmte Eigenschaften der Taktnummer-Grobs am Zeilenanfang (in den folgenden Beispielen einfach die Schriftfarbe) zu verändern. Dazu wollte ich das "after-line-breaking" callback verwenden.
Nun passiert folgendes (Dieses Minimalbeispiel mit Ergebnis ist auch im Anhang):
\version "2.18.0"
music = \relative c' { \repeat unfold 20 { | c2 e2 | r1 } }
\paper{}
%% ========================================================
%% Ohne callback - Standardeinstellung
%% ========================================================
\score { \new Staff { \set Staff.instrumentName = \markup { "Default" }
\override Score.BarNumber.self-alignment-X = #LEFT
\override Score.BarNumber #'break-visibility = #all-visible
\set Score.barNumberVisibility = #all-bar-numbers-visible
\music
}}
%% ========================================================
%% mit Callback
%% ========================================================
#(define (barnumber-after-line-breaking-callback grob)
(let* ((text (ly:grob-property grob 'text))
(text-arg (caadr text))
(after-line-break? (= (ly:item-break-dir grob) 1))
(nmbr? (string->number text-arg)))
(if (and after-line-break? nmbr?) (begin
(ly:grob-set-property! grob 'color magenta)
))
)
)
\score {
\new Staff { \set Staff.instrumentName = \markup { "Callback" }
\override Score.BarNumber.self-alignment-X = #LEFT
\override Score.BarNumber #'break-visibility = #all-visible
\set Score.barNumberVisibility = #all-bar-numbers-visible
% Um diese Zeile geht es:
\override Score.BarNumber #'after-line-breaking = #barnumber-after-line-breaking-callback
\music
}}
%% ========================================================
%% Callback für "color" Eigenschaft
%% ========================================================
#(define (barnumber-color-callback grob)
(let* ((text (ly:grob-property grob 'text))
(text-arg (caadr text))
(after-line-break? (= (ly:item-break-dir grob) 1))
(nmbr? (string->number text-arg)))
(if (and after-line-break? nmbr?) blue )
)
)
\score {
\new Staff { \set Staff.instrumentName = \markup { "Color" }
\override Score.BarNumber.self-alignment-X = #LEFT
\override Score.BarNumber #'break-visibility = #all-visible
\set Score.barNumberVisibility = #all-bar-numbers-visible
\override Score.BarNumber #'color = #barnumber-color-callback
\music
}}
Im ersten Fall sieht man das Standardverhalten.
Im zweiten Fall habe ich wie erklärt das Callback verwendet um die Farbe falls nötig anzupassen. Das funktioniert auch prinzipiell, nur wird dadurch scheinbar anderer Code verdeckt, der normalerweise dafür sorgt, dass die Taktzahlen noch etwas nach oben geschoben werden. Damit rutschen die Zahlen in die Notenschlüssel hinein.
Mir fallen sofort mehrere Möglichkeiten ein um das zu lösen (z.B. manuell verschieben in der selben Funktion). Eine andere funktionierende Möglichkeit wurde auch schon im dritten Beispiel gezeigt.
Daher ist meine Frage eher prinzipieller Art:Wie kann ich satt dem überschreibenden
\override Score.BarNumber #'after-line-breaking = #barnumber-after-line-breaking-callbacksowohl meinen Code,
als auch den Stadmäßigen ausführen? Ich weiß leider nicht wie ich die Eigenschaft überhaupt selbst auslesen kann, sonst würde ich die Funktion, die vorher aufgerufen wurde einfach selbst aufrufen. Prizipiell würde mich also auch interessieren: Wie lese ich die Eigenschaft
Score.BarNumber #'after-line-breaking aus und wo ist die entsprechende Referenz (ich konnte sie leider auch nach stundenlangem Suchen nicht finden)? Der von
\displayMusic ausgegebene Code ist leider wenig hilfreich.
Oder ist die Verwendung von
after-line-breaking hier möglicherweise einfach grundsätzlich falsch?
Danke schon einmal wieder für jede Antwort,
Max
Edit:
Irgendwie wollte es nicht klappen Ahänge direkt anzuhängen, deswegen mehrere Edits... Jetzt sollte es aber stimmen
