A few days ago, this enhancement request http://code.google.com/p/lilypond/issues/detail?id=824 has been mentioned. I don't think that the following snippet (see joined file) can be integrated as a patch for Lilypond, so it is rather a workaround, but it seems to work. To use it, you need a file "extractMusic.ly" that you can download here : http://gillesth.free.fr/Lilypond/ in the extractMusic directory
Gilles
\include "extractMusic.ly" #(define (anchor->moment music sym) (let ((moment moment-null) (find? #f)) (let loop ((evt music)) (let ((e (ly:music-property evt 'element)) (es (ly:music-property evt 'elements)) (name (ly:music-property evt 'name))) (cond ((eq? name 'EventChord) (set! moment (ly:moment-add moment (ly:music-length evt))) (if (and (pair? es) (eq? 'SkipEvent (ly:music-property (car es) 'name)) (memq sym (ly:music-property evt 'tags))) (set! find? #t))) ((ly:duration? (ly:music-property evt 'duration)) ; MultiMeasureRest (set! moment (ly:moment-add moment (ly:music-length evt)))) ((eq? name 'SimultaneousMusic) (let ((save-mom moment) (max-mom moment)) (while (pair? es)(begin (loop (car es)) (if find? (break)) (if (ly:moment<? max-mom moment)(set! max-mom moment)) (set! moment save-mom) (set! es (cdr es)))) (set! moment max-mom))) (else (if (ly:music? e) (let ((count (ly:music-property evt 'repeat-count))) (if (and (integer? count) (null? es) (not (eq? name 'VoltaRepeatedMusic))) (loop (make-sequential-music (make-list count e))) (loop e)))) (while (and (pair? es)(not find?))(begin ; sequential music (loop (car es)) (set! es (cdr es)))))))) moment)) addAt = #(define-music-function (parser location sym music insertMusic) (symbol? ly:music? ly:music?) (let ((where (make-music 'EventChord 'elements (list (make-music 'SkipEvent 'duration (make-duration-of-length (anchor->moment music sym))))))) #{ \insertMusic $music $where $insertMusic #})) anchor = #(define-music-function (parser location sym)(symbol?) #{ \tag $sym s1*0 #}) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% global = \relative c' { \time 4/4 s4*4*10 \time 3/4 s4*3*5 \time 7/4 s4*7 \time 4/4 \anchor #'coda s4*4*10 \bar "|." } \new Voice \addAt #'coda \global {\tempo \markup "Extremely slow"}
_______________________________________________ lilypond-devel mailing list lilypond-devel@gnu.org http://lists.gnu.org/mailman/listinfo/lilypond-devel