Am Di., 8. Jan. 2019 um 14:51 Uhr schrieb Gloops <yaglo...@yahoo.fr>:
>
> Hello!
> Ambitus by voice and Ez_numbers_engraver can not work together?

The problem: Ez_numbers_engraver works on every grob with a
note-head-interface. NoteHeads and AmbitusNoteHead both have this.
Though, at the time this engraver works the pitch of AmbitusNoteHead
is not yet known, thus an error occurs if one tries to rely on this
pitch.

Suggestion:
Do settings for AmbitusNoteHead after-line-breaking, switched on by
the (new introduced) details.ez-numbers-property and let the other
code do as before.

There's wide room for improvements, ofcourse. Nevertheless here the code:

\version "2.19.82"

#(define Ez_numbers_engraver_harm
   (make-engraver
    (acknowledgers
     ((note-head-interface engraver grob source-engraver)
      (let* ((context (ly:translator-context engraver))
             (tonic-pitch (ly:context-property context 'tonic))
             (tonic-name (ly:pitch-notename tonic-pitch)))
        (if (grob::has-interface grob 'ambitus-interface)
            (let* ((details (ly:grob-property grob 'details))
                   (ez-numbers (assoc-get 'ez-numbers details #f)))
              (if ez-numbers
                  (ly:grob-set-property! grob 'after-line-breaking
                    (lambda (grob)
                      (let* ((grob-pitch
                              (ly:event-property (event-cause grob) 'pitch))
                             (grob-name (ly:pitch-notename grob-pitch))
                             (delta (modulo (- grob-name tonic-name) 7))
                             (note-names
                              (make-vector 7 (number->string (1+ delta)))))
                    (ly:grob-set-property! grob 'note-names note-names)
                    (ly:grob-set-property! grob 'stencil
                      (note-head::brew-ez-stencil grob))
                    (ly:grob-set-property! grob 'font-family 'sans)
                    (ly:grob-set-property! grob 'font-series 'bold))))))

            (let* ((grob-pitch
                    (ly:event-property (event-cause grob) 'pitch))
                   (grob-name (ly:pitch-notename grob-pitch))
                   (delta (modulo (- grob-name tonic-name) 7))
                   (note-names
                    (make-vector 7 (number->string (1+ delta)))))
              (ly:grob-set-property! grob 'note-names note-names))))))))

easyAmbitusHeadsOn = \override AmbitusNoteHead.details.ez-numbers = ##t


\layout {
  ragged-right = ##t
  \context {
    \Voice
    \consists \Ez_numbers_engraver_harm
    \consists "Ambitus_engraver"
    \easyAmbitusHeadsOn
  }
}

\new Staff <<
  \new Voice \with {

  } \relative c'' {
      \key f \major
    \override Ambitus.X-offset = #2.0
    \voiceOne
    \easyHeadsOn
    c4 a d e
    f2
  }
  \new Voice \with {

  } \relative c' {
    \voiceTwo
    \easyHeadsOn
    es4 f g  as
    b1
  }
>>

HTH,
  Harm

_______________________________________________
lilypond-user mailing list
lilypond-user@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-user

Reply via email to