Utilisation de balises

La commande \tag #'partieA affecte à une expression musicale le nom partieA. Les expressions ainsi balisées pourront être filtrées par la suite, à l’aide de \keepWithTag #'nom ou \removeWithTag #'nom. Ces filtres fonctionnent de la manière suivante :

FiltreRésultat
Musique balisée précédée de
\keepWithTag #'nom

ou

\keepWithTag #'(nom1 nom2…)
Musique non balisée et musique balisée par l’un des noms de balise fournis seront incluses ; la musique balisée autrement est exclue.
Musique balisée précédée de
\removeWithTag #'nom

ou

\removeWithTag #'(nom1 nom2…)
Musique non balisée et fragments appelés autrement que par l’un des noms fournis seront inclus ; la musique balisée par l’un des noms mentionnés est exclue.
Musique balisée non précédée de
\keepWithTag

ou

\removeWithTag
Musique balisée et non balisée seront incluses.

L’argument des commandes \tag, \keepWithTag et \removeWithTag doit être un symbole ou une liste de symboles (tel que #'conducteur ou #'(violonI violonII)), suivi d’une expression musicale. Si, et seulement si les symboles sont des indentifiants LilyPond valides (caractères alphabétiques uniquement, sans chiffre, souligné ou tiret) qui ne peuvent se confondre avec des notes, le #' peut s’omettre et, pour raccourcir, une liste de symboles peut utiliser la virgule en séparateur – autrement dit, \tag #'(violinI violinII) peut s’écrire \tag violinI,violinII. Ceci s’applique aussi bien pour \keepWithTag que pour \removeWithTag. Les commandes de balisage sont des fonctions musicales ; elles ne peuvent donc s’utiliser pour filtrer des éléments qui ne sont pas des expressions musicales tels que des blocs \book ou \score.

Dans l’exemple qui suit, nous obtenons deux versions du même extrait, l’une pour le conducteur, l’autre pour l’instrumentiste qui, elle, comportera les ornements développés.

music = \relative {
  g'8. c32 d
  \tag #'trills { d8.\trill }
  \tag #'expand { \repeat unfold 3 { e32 d } }
  c32 d
 }

\score {
  \keepWithTag #'trills \music
}
\score {
  \keepWithTag #'expand \music
}
[image of music]

Il est parfois plus aisé d’exclure des fragments :

music = \relative {
  g'8. c32 d
  \tag #'trills { d8.\trill }
  \tag #'expand { \repeat unfold 3 { e32 d } }
  c32 d
 }

\score {
  \removeWithTag #'expand
  \music
}
\score {
  \removeWithTag #'trills
  \music
}
[image of music]

Lorsque des balises concernent des alternatives de durée non nulle, ces alternatives sont souvent conceptuellement simultanées, auquel cas il vaut mieux mettre ces alternatives dans des expressions musicales simultanées de telle sorte que l’expression musicale ait la même durée quelle que soit la balise retenue. Ceci est tout particulièrement important lorsque les balises sont utilisées conjointement avec des commandes telles que \cueDuring.

outputTypeTag = "isScore"

firstInstrument = \relative c' {
  <<
    \tag #'isPart {
      \cueDuring "quoteSecondInstrument" #UP { r2 } }
    \tag #'isScore { r2 }
  >>
  e4 f |
  g4 a b c |
}

secondInstrument= \relative c'' {
  c4 c r2 |
  \cueDuring "quoteFirstInstrument" #DOWN { r2 }
  c4 c |
}

\addQuote quoteFirstInstrument \firstInstrument
\addQuote quoteSecondInstrument \secondInstrument

\new Staff {
  \keepWithTag \outputTypeTag \firstInstrument
}

\new Staff {
  \keepWithTag \outputTypeTag \secondInstrument
}
[image of music]

Ce principe de filtrage peut s’appliquer aux articulations, textes, etc. Il suffit de positionner

-\tag #ma-balise

avant l’articulation ou le texte, comme ici :

c1-\tag #'doigt ^4
c1-\tag #'gaffe ^"Attention !"

Ceci définira une note avec une indication conditionnelle de doigté ou un texte.

Vous pouvez baliser différemment la même expression musicale en saisissant plusieurs \tag ou bien en combinant plusieurs balises dans une liste :

music = \relative c'' {
  \tag #'a \tag #'both { a4 a a a }
  \tag #'(b both) { b4 b b b }
}
<<
\keepWithTag #'a \music
\keepWithTag #'b \music
\keepWithTag #'both \music
>>
[image of music]

L’application concomitante de plusieurs filtres \removeWithTag à la même expression musicale permet d’exclure plusieurs balisages. Une liste fournie en argument à un unique \removeWithTag produira le même effet :

music = \relative c'' {
  \tag #'A { a4 a a a }
  \tag #'B { b4 b b b }
  \tag #'C { c4 c c c }
  \tag #'D { d4 d d d }
}
\new Voice {
  \removeWithTag #'B
  \removeWithTag #'C
  \music
  \removeWithTag #'(B C)
  \music
}
[image of music]

L’application de plus d’un filtre \keepWithTag à la même expression musicale aboutit à l’exclusion de tous les balisages. En effet, si le premier filtre exclut tous les autres balisages, l’application du second exclura les effets du premier. L’utilisation d’une unique commande \keepWithTag avec une liste de balises est en pareil cas des plus pertinentes : seront exclus tous les fragments non concernés par l’une quelconque des balises mentionnées.

music = \relative c'' {
  \tag #'violinI { a4 a a a }
  \tag #'violinII { b4 b b b }
  \tag #'viola { c4 c c c }
  \tag #'cello { d4 d d d }
}

\new Staff {
  \keepWithTag #'(violinI violinII)
  \music
}
[image of music]

imprimera les \tags violinI et violinII, mais ni viola ni cello.

Bien que \keepWithTag soit efficace pour gérer un jeu d’alternatives, le rejet de musique filtrée par des balises étrangères se révèle problématique lorsque les \tag sont utilisés à plusieurs fins. Des « groupements de balises » peuvent alors être déclarés :

\tagGroup #'(violinI violinII viola cello)

Les différents filtres appartiennent désormais tous à un seul regroupement. Notez bien qu’une balise ne saurait être membre de plusieurs regroupements.

\keepWithTag #'violinI …

ne prendra désormais en compte que la musique concernée par la balise violinI du groupe de filtres : tout élément de la musique qui serait balisé par l’un des autres filtres de ce jeu sera rejeté.

music = \relative {
  \tagGroup #'(violinI violinII)
  \tagGroup #'(viola cello)
  \tag #'violinI { c''4^"violinI" c c c }
  \tag #'violinII { a2 a }
  \tag #'viola { e8 e e2. }
  \tag #'cello { d'2 d4 d }
  \tag #'autre { f^"autre" f f f }
  R1^"non balisé"
}

\new Voice {
  \keepWithTag #'violinI
  \music
}
[image of music]

Dans le cadre de la commande \keepWithTag, seules les balises du regroupement mentionnées dans la commande seront visibles.

Il peut arriver que vous ayez besoin de raccorder quelque chose en un point particulier d’une expression musicale. Les commandes \pushToTag et \appendToTag permettent d’insérer du matériau, qu’il soit antérieur ou postérieur, à des constructions musicales existantes. Les différentes possibilités sont les suivantes :

Musique séquentielle ou simultanée

Lorsqu’a été balisée l’intégralité d’une construction {…} ou <<…>>, peuvent venir s’insérer, avant ou après, des expression musicales.

Accords

Lorsqu’a été balisé un accord <…>, peuvent venir s’y ajouter, avant ou après, d’autres notes ou des articulations, ces dernières pour l’accord dans sa globalité.

Notes et silences

Lorsque la musique balisée est une note (y compris à l’intérieur d’un accord), ou un silence, peuvent venir s’y ajouter, avant ou après, d’autres articulations. Afin d’ajouter d’autres notes, il est préférable de les placer dans une construction d’accord et baliser l’accord. Notez bien qu’il n’est pas possible de baliser une simple articulation et y ajouter quelque chose, puisqu’il ne s’agit pas d’une liste ; il vaut alors mieux baliser la note.

music = { \tag #'here { \tag #'here <<c''>> } }

{
  \pushToTag #'here c'
  \pushToTag #'here e'
  \pushToTag #'here g' \music
  \appendToTag #'here c'
  \appendToTag #'here e'
  \appendToTag #'here g' \music
}
[image of music]

Ces deux instructions sont affectées d’une balise, le matériau à raccorder à chaque instance de la balise, et l’expression balisée.

La commande \tag peut s’utiliser aussi dans les environnements \markup. Les commandes \keep-with-tag, \remove-with-tag, \push-to-tag et \append-to-tag y sont disponibles et se comportent comme celles utilisées pour les expressions musicales.

test = \markup {
  \tag #'a a
  \tag #'b b
  \tag #'c c
}

\markup { \keep-with-tag #'b \test }
\markup { \remove-with-tag #'b \test }
\markup { \push-to-tag #'c pre \test }
\markup { \append-to-tag #'c post \test }
[image of music]

Les commandes musicales \keepWithTag et \removeWithTag filtrent aussi les balises des portions \markup incluses dans la musique.

music = \relative {
  c'4^\markup { \tag #'one first \tag #'two second part } c c c
}

{
  \keepWithTag #'one \music
  \removeWithTag #'one \music
}
[image of music]

Il est aussi possible d’insérer ou ajouter quelque chose à un \markup attaché aux objets musicaux. On ne peut utiliser \pushToTag et \appendToTag puisqu’ils ne traîtent que de la musique, mais \pushToTagMarkup et \appendToTagMarkup sont conçus pour rajouter un markup.

music = \relative {
  c'4^\markup { \tag #'part part } c c c
}

{
  \pushToTagMarkup #'part "great" \music
  \appendToTagMarkup #'part \markup { is also great } \music
}
[image of music]

Le filtrage des balises fonctionne aussi lorsque de la musique comprise dans un bloc \score est membre d’une commande de markup.

music = \relative {
  c'2^\markup { \tag #'first first \tag #'second second } c
  \tag #'first { d d }
  \tag #'second { f f }
}

\markup {
  \keep-with-tag #'first \score { \music }
  \remove-with-tag #'first \score { \music }
}
[image of music]

Une attention particulière doit toutefois être portée lors de l’utilisation de balises avec des listes de markups. Les fonctions de filtrage fonctionent comme prévu

\markup {
  \remove-with-tag #'test { a \tag #'test { b c } d }
}
[image of music]

mais les commandes telles que \push-to-tag et \append-to-tag posent problème.

\markup {
  \push-to-tag #'test "twice" { a \tag #'test { b c } d }
}
[image of music]

La raison de ce comportemenet tient au fait que LilyPond transforme

\tag #'test { b c }

de manière interne en

\tag #'test b
\tag #'test c

et donc insère deux fois le texte donné. Le balisage d’une liste à laquelle doit s’insérer ou s’ajouter quelque chose s’obtient en utilisant la commande \tag-list.

\markup {
  \push-to-tag #'test "once" { a \tag-list #'test { b c } d }
}
[image of music]

Voir aussi

Manuel d’initiation : Organisation du code source avec des variables.

Manuel de notation : Insertion de fichiers LilyPond, Regroupement automatique de parties.

Problèmes connus et avertissements

L’application d’un \relative à une expression musicale obtenue par filtrage à l’aide de \keepWithTag ou \removeWithTag peut générer des changements d’octave, puisque seules les hauteurs récupérées dans ce filtre seront prises en considération. Une instruction \relative qui précède les commandes \keepWithTag ou \removeWithTag permet d’éviter ce risque, dans la mesure où elle viendra « recaler » ces hauteurs récupérées.


GNU LilyPond – Manuel de notation v2.25.27 (development-branch).