[ << Tweaks and overrides ] | [Top][Contents] | [ Paper and layout >> ] |
[ < システムに譜が 1 つしか存在しない場合にも括弧を表示する ] | [ Up : Tweaks and overrides ] | [ ハーモニクスの付点 > ] |
Grob の親子関係を表示する
Grob のコールバックを使用する際、Grob の親子関係を理解すると役立つ場合があります。多くの Grob は親を持ち、Grob が表示される位置の基準点となります。X 軸方向の親 (X-parent) と Y 軸方向の親 (Y-parent) はそれぞれ横方向と縦方向の位置の基準となります。同様に、親の Grob にもそれぞれの親が存在します。
残念ながら、Grob の親子関係を分かりにくくしていることがいくつかあります:
* Grob が持つ親の種類はコンテキストに依存する場合があります。
* いくつかの Grob では、X 軸方向の親と Y 軸方向の親が同じです。
* Grob の親が位置の基準以外の役割を果たす場合があります。
* "世代" として考えるのは誤解を生みます。
例えば、System
Grob は VerticalAlignment
の
(Y 軸方向の) 親にも、(X 軸方向の両方の) 祖父母にもなっています。
このマクロは、Grob の親子関係を (コンソールに) 分かりやすく表示します。
このように呼び出します:
{ \once \override NoteHead.before-line-breaking =
#display-ancestry c }
以下のような出力を得ます:
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 >> ] |
[ < システムに譜が 1 つしか存在しない場合にも括弧を表示する ] | [ Up : Tweaks and overrides ] | [ ハーモニクスの付点 > ] |