LilyPond n'accepte pas les \tag à l'intérieur d'autres \tag.Du genre : \tag #'partScore { \tag #'flute { ... } \tag #'hautbois { ... } } ...
J'ai essayé de faire une version étendue de \keepWithTag qui rend possible ce genre de construction. La nouvelle fonction s'appelle \keepWithTags (noter le s à la fin du nom) et prend en argument une liste de tag à la place d'un seul tag. Par exemple : \keepWithTags #(list 'partScore 'flute) \music prend dans \music la musique de \tag 'flute mais seulement celle se trouvant dans la structure de \tag 'partScore. [ \keepWithTags est compatible avec la fonction \elseTag du snippet http://lsr.dsi.unimi.it/LSR/Item?id=381 ] %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% elseTagName = #(gensym) elseTag = #(define-music-function (parser location tag arg)(symbol? ly:music?) (set! (ly:music-property arg 'tags) (append (list tag elseTagName)(ly:music-property arg 'tags))) arg) keepWithTags = #(define-music-function (parser location tagList music) (list? ly:music?) (music-filter (lambda (m) (let* ((tags (ly:music-property m 'tags)) (resA (pair? (filter (lambda (tag)(memq tag tags)) tagList))) (resB (memq elseTagName tags))) (or (eq? tags '()) (and resA (not resB)) (and resB (not resA))))) music)) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \paper{ print-all-headers = ##t } music = \relative { \tag #'easyClef { \tag #'basson \clef bass \tag #'alto \clef treble } \tag #'experienced { \tag #'basson \clef tenor \tag #'alto \clef alto } d4 c b a g fis e fis g1 } %%% \score { \keepWithTags #(list 'easyClef 'basson) \music %\keepWithTag #'easyClef \keepWithTag #'basson \music % => treble clef ! \header { instrument = "basson version \"easyClef\""} } %%% \score { \keepWithTags #(list 'easyClef 'alto) \music \header { instrument = "alto version \"easyClef\""} } %%% \score { \keepWithTags #(list 'experienced 'basson) \music \header { instrument = "basson version \"experienced\"" } } %%% \score { \keepWithTags #(list 'experienced 'alto) \music \header { instrument = "alto version \"experienced\""} } %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
<<attachment: CascadeTag.png>>
_______________________________________________ lilypond-user mailing list [email protected] http://lists.gnu.org/mailman/listinfo/lilypond-user
