Utilisation de ly:grob-object pour accéder aux grobs avec \tweak

Certains objets graphiques ne sont accessibles que par le biais d’un callback à partir d’un autre grob. Ils sont normalement listés dans les « layout objects » au sein de la section « Propriétés internes » d’une grob-interface. La fonction ly:grob-object permet d’accéder à ces objets.

Voici plusieurs moyens d’accéder aux objets par un callback sur NoteHead. D’autres biais sont naturellement possibles ; NoteHead a cependant l’avantage incontestable d’être utilisé implicitement par la commande \tweak.

La fonction display-grobs définie ci-dessous n’est probablement pas très utile. Elle indique toutefois qu’il est tout à fait possible d’accéder aux objets.

Voici par exemple ce qui sera émis dans la console :

--------------------
#<Grob Accidental >
#<Grob Arpeggio >
#<Grob Stem >
#(define (notehead-get-accidental notehead)
   ;; notehead is grob
   (ly:grob-object notehead 'accidental-grob))

#(define (notehead-get-arpeggio notehead)
   ;; notehead is grob
   (let ((notecolumn (notehead-get-notecolumn notehead)))
     (ly:grob-object notecolumn 'arpeggio)))

#(define (notehead-get-notecolumn notehead)
   ;; notehead is grob
   (ly:grob-parent notehead X))

#(define (notehead-get-stem notehead)
   ;; notehead is grob
   (let ((notecolumn (notehead-get-notecolumn notehead)))
     (ly:grob-object notecolumn 'stem)))

#(define (display-grobs notehead)
   ;; notehead is grob
   (let ((accidental (notehead-get-accidental notehead))
         (arpeggio (notehead-get-arpeggio notehead))
         (stem (notehead-get-stem notehead)))
     (format (current-error-port) "~2&~a\n" (make-string 20 #\-))
     (for-each
      (lambda (x) (format (current-error-port) "~a\n" x))
      (list accidental arpeggio stem))))

\relative c' {
  %% display grobs for each note head:
  %\override NoteHead.before-line-breaking = #display-grobs
  <c
  %% or just for one:
  \tweak before-line-breaking #display-grobs
  es
  g>1\arpeggio
}

[image of music]


LilyPond snippets v2.25.21 (branche de développement).