Le 20/04/2021 à 14:22, F M a écrit :
Centering a stencil on another stencil (unimi.it) <https://lsr.di.unimi.it/LSR/Item?id=1009> Centering markup on note heads automatically (unimi.it) <https://lsr.di.unimi.it/LSR/Item?id=637>

I also found these two snippets in the repository, perhaps they could be adapted to centering bar numbers over note columns. Thank you for your time and interest.

Hello,

Something like this, then?

Best,
Jean



\version "2.23.3"

#(define (group-extent grobs refpoint axis)
   (reduce interval-union
           empty-interval
           (map
             (lambda (grob)
               (ly:grob-extent grob refpoint axis))
             grobs)))

#(define fake-musical-when-first
   (grob-transformer 'after-line-breaking
     (lambda (bar-number dummy)
       (let* ((sys (ly:grob-system bar-number))
              (columns (ly:grob-object sys 'columns))
              (break-alignment (ly:grob-parent bar-number X))
              (bar-number-column (ly:grob-parent break-alignment X))
              (first-column (ly:grob-array-ref columns 0))
              (first-musical-column (ly:grob-array-ref columns 1))
              (is-first (eq? bar-number-column first-column)))
         (if is-first
             (let* ((refpoint (ly:grob-common-refpoint bar-number first-musical-column X))                     (musical-elements (ly:grob-object first-musical-column 'elements))
                    (element-list (ly:grob-array->list musical-elements))
                    (note-columns (filter (lambda (g)
                                            (grob::has-interface g 'note-column-interface))
                                          element-list)))
               (ly:grob-translate-axis!
                 bar-number
                 (- (interval-center
                      (group-extent note-columns refpoint X))
                    (interval-center (ly:grob-extent bar-number refpoint X)))
                 X)))))))

\layout {
  \context {
    \Score
    \override BarNumber.after-line-breaking = #fake-musical-when-first
    \override BarNumber.break-visibility = ##(#f #t #t)
    \override BarNumber.outside-staff-priority = 1000
  }
}


<<
  \set Score.currentBarNumber = 50000
  {
    c'1
    \break
    <c''' d'''>4_"Marcato" e' f' g'
    a' b' c' d'
    \break
    <g' a' b' c' d' e'> g' g' g'
  }
  {
    c'1
    1
    1
    1
  }
>>



Reply via email to