[ << Tweaks and overrides ] | [Top][Contents] | [ Paper and layout >> ] |
[ < Mostrar claudàtor o clau en grups d’un sol pentagrama ] | [ Up : Tweaks and overrides ] | [ Harmònics amb puntet > ] |
Imprimir l’arbre genealògic d’un grob
En treballar amb les crides d’un grob, pot ser de molta utilitat entendre l’arbre genealògic d’un grob. La major part dels grobs tenen pares que influeixen en el posicionament del grob. Els pares X i Y influeixen en les posisions horitzontal i vertical del grob, respectivament. A més, cada pare pot tenir al seu cop pares.
Desafortunadament, hi ha diversos aspectes de la geneaologia d’un grob que pot portar a confusió:
* Els tipus de pare que té un grob poden dependre del context.
* Per a certs grobs, els pares X i Y són el mateix.
* Un "ancestre" concret pot estar relacionat amb un grob de més d’una manera.
* El concepte de "generacions" és enganyós.
Por exemple, el grob System
pot ser tant un pare (sobre la
vorfa Y) com un avi (dues vegades a la vora X) d’un grob
VerticalAlignment
.
Aquest macro imprimeix, en la consola, una representació textual de la genealogia d’un grob.
Quan es crida d’aquesta forma:
{ \once \override NoteHead.before-line-breaking =
#display-ancestry c }
Es general la sortida següent:
NoteHead X,Y: NoteColumn
X: PaperColumn
X,Y: System
Y: VerticalAxisGroup
X: NonMusicalPaperColumn
X,Y: System
Y: VerticalAlignment
X: NonMusicalPaperColumn
X,Y: System
Y: System
%% http://lsr.di.unimi.it/LSR/Item?id=622 #(define (get-ancestry grob) (if (not (null? (ly:grob-parent grob X))) (list (grob::name grob) (get-ancestry (ly:grob-parent grob X)) (get-ancestry (ly:grob-parent grob Y))) (grob::name grob))) #(define (format-ancestry lst padding) (string-append (symbol->string (car lst)) "\n" (let ((X-ancestry (if (list? (cadr lst)) (format-ancestry (cadr lst) (+ padding 3)) (symbol->string (cadr lst)))) (Y-ancestry (if (list? (caddr lst)) (format-ancestry (caddr lst) (+ padding 3)) (symbol->string (caddr lst))))) (if (equal? X-ancestry Y-ancestry) (string-append (format #f "~&") (make-string padding #\space) "X,Y: " (if (list? (cadr lst)) (format-ancestry (cadr lst) (+ padding 5)) (symbol->string (cadr lst)))) (string-append (format #f "~&") (make-string padding #\space) "X: " X-ancestry "\n" (make-string padding #\space) "Y: " Y-ancestry (format #f "~&")))) (format #f "~&"))) #(define (display-ancestry grob) (format (current-error-port) "~3&~a~2%~a~&" (make-string 36 #\-) (if (ly:grob? grob) (format-ancestry (get-ancestry grob) 0) (format #f "~a is not a grob" grob)))) \relative c' { \once \override NoteHead.before-line-breaking = #display-ancestry f4 \once \override Accidental.before-line-breaking = #display-ancestry \once \override Arpeggio.before-line-breaking = #display-ancestry <f as c>4\arpeggio }
[ << Tweaks and overrides ] | [Top][Contents] | [ Paper and layout >> ] |
[ < Mostrar claudàtor o clau en grups d’un sol pentagrama ] | [ Up : Tweaks and overrides ] | [ Harmònics amb puntet > ] |