Hallo,
ingendwo in diesem Forum war schon mal eine ähnliche Frage.
Bevor ich das suche, zuerst mein "einfaches" include (bar-number.ly):
%{
Barnumber Manipulation
%}
\version "2.16.0"
#(define (self-alignment-x-rcc grob) ;; 'rcc' = Right-Center-Center
(let ((break-dir (ly:item-break-dir grob)))
(case break-dir
((1) RIGHT)
((0) CENTER)
((-1) CENTER)
(else CENTER))))
showBarNumberP = #(define-music-function (parser location padding)
(number?)
#{
\once \override Score.BarNumber #'break-visibility = #end-of-line-invisible
\once \override Score.BarNumber #'padding = $padding
#})
showBarNumber = #(define-music-function (parser location) ()
#{
\once \override Score.BarNumber #'break-visibility = #end-of-line-invisible
#})
\layout {
\context { \Score
\override BarNumber #'break-visibility = #begin-of-line-visible
alternativeNumberingStyle = #'numbers-with-letters
barNumberVisibility = #all-bar-numbers-visible
\override BarNumber #'self-alignment-X = #self-alignment-x-rcc
}
}
:
Hier dient \schowBarNumber dazu, die Taktzahlenanzeige zu forcieren. Außderdem werden die Taktzahlen am Zeilenanfang rechtsbündig ausgerichtet, innerhalb der Zeile dann aber mittig.
Und dann habe ich noch einen Scheme-Engraver, welcher automatisch die visibility-mask ändert, falls zuvor eine mindestes dreitaktige Ganztaktpause enschienen ist:
#(define (self-alignment-x-rcc grob) ;; 'rcc' = Right-Center-Center
(let ((break-dir (ly:item-break-dir grob)))
(case break-dir
((1) RIGHT)
((0) CENTER)
((-1) CENTER)
(else CENTER))))
#(define (volta-start-in-repeat-command rcl)
(if (or (null? rcl)
(not (pair? rcl))
(not (pair? (car rcl))))
#f
(let ((cmd (caar rcl))
(pos (cadar rcl)))
(if (and (eq? cmd 'volta)
(not (boolean? pos)))
#t
(volta-start-in-repeat-command (cdr rcl))))))
#(define (Barnumber_additional_visibility_engraver ctx)
(let ((barnums-seen '())
(barline-seen #f)
(notehead-seen #f)
(noteheads-found #f)
(last-barnums '())
(last-bar-barnumber #f)
(show-barnumber-required #f)
(show-by-volta-start #f))
`((acknowledgers
(grob-interface
. ,(lambda (trans grob source)
(let ((grob-name (ly:assoc-get 'name (ly:grob-property grob 'meta))))
(if (eq? grob-name 'NoteHead) (set! notehead-seen #t))
(if (eq? grob-name 'BarNumber) (set! barnums-seen (cons grob barnums-seen)))
(if (eq? grob-name 'BarLine) (set! barline-seen #t))))))
(start-translation-timestep
. ,(lambda (trans)
(let ((current-barnum (ly:context-property ctx 'currentBarNumber)))
(set! barnums-seen '())
(set! barline-seen #f)
(set! notehead-seen #f))))
(stop-translation-timestep
. ,(lambda (trans)
(let
((current-barnum (ly:context-property ctx 'currentBarNumber))
(measure-pos (ly:context-property ctx 'measurePosition))
(rep-cmds (ly:context-property ctx 'repeatCommands))
(volta-starts (volta-start-in-repeat-command (ly:context-property ctx 'repeatCommands))))
(if (volta-start-in-repeat-command (ly:context-property ctx 'repeatCommands))
(set! show-by-volta-start #t))
; before the barline ...
(if (and barline-seen
noteheads-found
(number? last-bar-barnumber)
(> (- current-barnum last-bar-barnumber) 1))
(set! noteheads-found #f))
(if (and barline-seen
(not noteheads-found)
(number? last-bar-barnumber)
(>= (- current-barnum last-bar-barnumber) 3))
(set! show-barnumber-required #t))
; after the barline ...
(if (and (not (null? barnums-seen))
show-barnumber-required
noteheads-found
(not (null? last-barnums))) (begin
(for-each (lambda (g)
(ly:grob-set-property! g 'break-visibility end-of-line-invisible)
; (ly:grob-set-property! g 'color red)
) last-barnums)
(set! show-barnumber-required #f)))
(if (and (not (null? barnums-seen))
show-by-volta-start) (begin
(for-each (lambda (g)
(ly:grob-set-property! g 'break-visibility end-of-line-invisible)
; (ly:grob-set-property! g 'color magenta)
) barnums-seen)
(set! show-barnumber-required #f)
(set! show-by-volta-start #f)))
(if (not (null? barnums-seen)) (begin
(set! last-barnums barnums-seen)
(set! barnums-seen '())))
(if barline-seen (begin
(set! last-bar-barnumber current-barnum)
(set! noteheads-found #f)
(if notehead-seen (set! noteheads-found #t))))
(if notehead-seen (set! noteheads-found #t))))))))
% \defineBarLine "S.|:-||" #'("||" "S.|:" " .|")
% \allowVoltaHook "||"
% \allowVoltaHook ".|:"
% \allowVoltaHook ".|:-||"
% \allowVoltaHook "S.|:"
% \allowVoltaHook "S.|:-||"
\layout {
\context { \Score
\consists #Parenthesis_on_cautionary_accidentals_purger
\consists #Barnumber_additional_visibility_engraver
restNumberThreshold = 0
barNumberVisibility = #all-bar-numbers-visible
\override BarNumber #'break-visibility = #begin-of-line-visible
\override BarNumber #'self-alignment-X = #self-alignment-x-rcc
% startRepeatType = ".|:-||"
% startRepeatSegnoType = "S.|:-||"
}
}
Das Setzen der Barline-Stile wie ich sie bevorzuge habe ich noch schnell auskommentiert. Und auch etwas wild aussehende Klammersetzungen im Scheme-Code habe ich zum Zeilenende hin zusammegefaßt - hoffentlich ohne Fehler.
P.S. Bei mir können die Antworten schon mal eine Woche auf sich warten lassen.
Arnold