lilypond-user
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Center align Bar numbers to first note in first measures on new line


From: Jean Abou Samra
Subject: Re: Center align Bar numbers to first note in first measures on new lines
Date: Tue, 20 Apr 2021 21:26:15 +0200
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.7.1


Le 20/04/2021 à 14:22, F M a écrit :
Centering a stencil on another stencil (unimi.it)
Centering markup on note heads automatically (unimi.it)

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

[Prev in Thread] Current Thread [Next in Thread]