Thu, 8 Jan 2004 12:00:14 +0100, Han-Wen a dit : > Come to think of it, this form of \with is superfluous. It is possible > to write it with something like
> \apply #(nest-props '((Stem thickness 4) (Slur transparent #t))) > { .. } > where nest-props takes care of pre- and appending the appropriate > settings. for the record, here is a possible implementation (using lily 2.1.0): ---------------------------------------------------- #(use-modules (ice-9 optargs)) #(define-public (nthcdr n source) (do ((rest source (if (pair? rest) (cdr rest))) (i 0 (1+ i))) ((= i n) rest))) #(define-public (group source n) (if (zero? n) (error "zero length")) (letrec ((rec (lambda (source acc) (let ((rest (nthcdr n source))) (if (pair? rest) (rec rest (cons (list-head source n) acc)) (reverse! (cons source acc))))))) (if (null? source) '() (rec source '())))) #(defmacro* make-music (name #:rest props) "Make a music expression, of type `name' (a non quoted symbol). `props' describe the music expression properties. For isntance: (make-music PropertySet symbol 'autoBeaming value #f)" (let ((prop-clauses (group props 2)) (gmus (gensym))) `(let ((,gmus (make-music-by-name ',name))) ,@(map (lambda (clause) `(ly:set-mus-property! ,gmus ',(car clause) ,(cadr clause))) prop-clauses) ,gmus))) #(defmacro* context-override (context property setting value #:key (once #f)) "Make a ContextSpeccedMusic with OverrideProperty element, similar to: [\\once] \\property context.property \override #'setting = #value" `(context-spec-music (make-music OverrideProperty once ,once symbol ',property grob-property ',setting grob-value ,value) ',context)) #(defmacro context-revert (context property setting) "Make a ContextSpeccedMusic with RevertProperty element, similar to: \\property context.property \revert #'setting" `(context-spec-music (make-music RevertProperty symbol ',property grob-property ',setting) ',context)) #(defmacro* nest-props (#:rest prop-clauses) `(lambda (mus) (ly:set-mus-property! mus 'elements (list ,@(map (lambda (prop-clause) `(context-override ,@prop-clause)) prop-clauses) (make-music SequentialMusic elements (ly:get-mus-property mus 'elements)) ,@(map (lambda (prop-clause) `(context-revert ,(car prop-clause) ,(cadr prop-clause) ,(caddr prop-clause))) prop-clauses))) mus)) titi = \notes { c'8( d') e'( f') g'4( a') } \score { \notes { \titi \apply #(nest-props (Voice Stem thickness 4) (Voice Slur transparent #t)) { \titi } \titi } } ----------------------------------------------------
<<attachment: test-nest-props.preview.png>>
nicolas
_______________________________________________ Lilypond-user mailing list [EMAIL PROTECTED] http://mail.gnu.org/mailman/listinfo/lilypond-user