[ << Ladění výstupu ] | [Top][Contents][Index] | [ Předlohy >> ] |
[ < Vyhnutí se ladění s pomalejším překladem ] | [ Up : Další ladění ] | [ Předlohy > ] |
5.6.6 Pokročilá ladění se Scheme
Auch wenn viele Sachen mit \override
und \tweak
möglich sind, gibt es eine sehr viel mächtigere Möglichkeit, die
Arbeitsweise von LilyPond mit Hilfe der programmierbaren Schnittstelle
zu beeinflussen. Code, der in der Scheme-Programmiersprache
geschrieben ist, kann direkt in die interne Satzmaschine von LilyPond
eingefügt werden. Natürlich brauchen Sie dazu wenigstens ein
grundlegendes Verständnis von Scheme. Eine Einleitung finden
Sie in der
Scheme-Übung.
Zur Illustration der vielen Möglichkeiten soll gezeigt werden, dass eine Eigenschaft nicht nur auf eine Konstante, sondern auch auf eine Scheme-Prozedur gesetzt werden kann, die dann jedes Mal aufgerufen wird, wenn die Eigenschaft von LilyPond benutzt wird. Die Eigenschaft kann damit dynamisch auf einen Wert gesetzt werden, der durch die Prozedur jedes Mal neu bestimmt wird. In diesem Beispiel wird die Farbe der Notenköpfe entsprechend zu ihrer Position innerhalb der Tonleiter gesetzt.
#(define (color-notehead grob) "Color the notehead according to its position on the staff." (let ((mod-position (modulo (ly:grob-property grob 'staff-position) 7))) (case mod-position ;; Return rainbow colors ((1) (x11-color 'red )) ; for C ((2) (x11-color 'orange )) ; for D ((3) (x11-color 'yellow )) ; for E ((4) (x11-color 'green )) ; for F ((5) (x11-color 'blue )) ; for G ((6) (x11-color 'purple )) ; for A ((0) (x11-color 'violet )) ; for B ))) \relative { % Arrange to obtain color from color-notehead procedure \override NoteHead.color = #color-notehead a2 b | c2 d | e2 f | g2 a | }
Weiter Beispiele, die die Benutzung dieser programmierbaren Schnittstelle zeigen, finden sich in Optimierungen mit Scheme.
[ << Ladění výstupu ] | [Top][Contents][Index] | [ Předlohy >> ] |
[ < Vyhnutí se ladění s pomalejším překladem ] | [ Up : Další ladění ] | [ Předlohy > ] |