lilypond-user-fr
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Extension de la command \tag.


From: Gilles THIBAULT
Subject: Extension de la command \tag.
Date: Fri, 07 Sep 2007 16:28:45 +0200

Un jour où je faisais un arrangement avec beaucoup d'instruments, j'avais
demandé ici même s' il y avait un moyen de dire à lilypond quelque chose du
genre :
\tag #'One \musicA ...et pour tous les autres tags \musicB.
 
 
En essayant de comprendre les commandes \tag et \keepWithTag dans le fichier
      "music-functions-init.ly"  (dans "\LilyPond\usr\share\lilypond\current\ly"),
je suis finalement arrivé à créer une commande ("\elseTag") qui faisait ce que je recherchais
La syntaxe en est la suivante :
\tag #'One \musicA 
\elseTag #'One \musicB
La commande  \keepWithTag  s'utilise toujours de la même manière, mais a été légèrement modifié en interne.
 
 
%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 

elseTagName = #'hjklm  % nom de Tag improbable ...
 
keepWithTag = #(define-music-function (parser location tag music) (symbol? ly:music?)
  (music-filter
   (lambda (m)
    (let* ((tags (ly:music-property m 'tags))
            (resA (memq tag tags))
            (resB (memq elseTagName tags))   
     )
    (or
        (eq? tags '())
        (and  (not (equal? resA #f))
                (equal? resB #f)
        )
        (and  (not (equal? resB #f))
                (equal? resA #f)
        )
    )   
 ))
music))
 
  
elseTag = #(define-music-function (parser location tag arg)(symbol? ly:music?)
 (set!
     (ly:music-property arg 'tags)
    (cons tag
        (cons elseTagName (ly:music-property arg 'tags))
    )
 )
arg)
       
 
        %%%%%%%%%%  exemple %%%%%%%%%%%%%%%%
 
\version "2.10.0"
 
music = \relative c'
{
c4 d e f
\tag #'One { g4 a b2 c1}
\elseTag #'One  { g4 fis f2 e1}
}
 
\score {
 <<
 \new Staff { \keepWithTag #'One \music}
 \new Staff { \keepWithTag #'Two \music}
 \new Staff { \keepWithTag #'Three \music}
 \new Staff { \keepWithTag #'Four \music}
 >>
}
 
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
 
Gilles
 
 
 
 

reply via email to

[Prev in Thread] Current Thread [Next in Thread]