[Top][All Lists]
[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
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- Extension de la command \tag.,
Gilles THIBAULT <=