%%% SNIPPET BEGINS %%% if proc is a procedure evaluate (proc grob), else return proc as value #(define (eval-if-proc proc grob) (if (procedure? proc) (proc grob) proc)) %%% takes a list of pairs (condition . value) where (condition grob) is a predicate %%% and value is either a value or a procedure (value grob). Optionally takes a default %%% value default. Returns the value of the first predicate that is true, else default #(define ((conditional-override con . default) grob) (if (null? con) (eval-if-proc (if (null? default) default (car default)) grob) (if ((caar con) grob) (eval-if-proc (cdar con) grob) ((conditional-override (cdr con) (if (null? default) default (car default))) grob)))) %%% predicate that checks if articulation even is of given type #(define ((articulation-type-equals type) grob) (equal? (ly:prob-property (ly:grob-property grob 'cause) 'articulation-type) type)) #(define script-font-size-tweaks `( (,(articulation-type-equals "tenuto") . 2) (,(articulation-type-equals "accent") . -5) )) #(define script-color-tweaks `( (,(articulation-type-equals "tenuto") . ,red) (,(articulation-type-equals "marcato") . ,blue) )) \layout { \context { \Score \override Script.font-size = #(conditional-override script-font-size-tweaks) \override Script.color = #(conditional-override script-color-tweaks) % This override is only nescessary as somehow if font-size is a procedure it is not evaluated automatically, % so we need to manually call (ly:grob-property grob 'font-size) once. \override Script.stencil = #(lambda (grob) (ly:grob-property grob 'font-size) (ly:script-interface::print grob)) } } \score { { \textLengthOn c'4->^"-5" c'4--^"+2,red" c'4-\tweak #'font-size #-2 -- ^"manual tweak -2" c'-^^"blue" c'-\tweak #'color #green -^^"manual tweak green" } } %%% SNIPPET ENDS