GNU LilyPond – Manuel de notation: 3.3.2 Différentes éditions à partir d'une même source

### 3.3.2 Différentes éditions à partir d’une même source

Plusieurs méthodes permettent de générer différentes versions d’une partition à partir d’une même source. Les variables – ou identificateurs – sont sûrement le moyen le plus simple de combiner de différentes manières des passages relativement longs, alors que les balises permettront de sélectionner de courts fragments selon leur utilisation.

Quelle que soit la méthode utilisée, séparer la notation de la structure de la partition vous donnera plus de liberté dans l’agencement de l’ouvrage final, puisque vous ne reviendrez pas sur la musique qui le compose.

#### Utilisation de variables

Un fragment musical identifié par une variable est réutilisable à divers endroits de la partition, comme nous l’avons vu à la rubrique Organisation du code source avec des variables. Par exemple, une partition pour chœur a cappella comporte souvent une réduction pour piano reprenant toutes les voix ; il s’agit de la même musique, et vous ne devrez donc la saisir qu’une seule fois. D’autre part, la musique issue de deux variables peut se combiner sur une seule portée, comme nous l’avons vu à la rubrique Regroupement automatique de parties. Prenons l’exemple suivant :

>     sopranoMusic = \relative { a'4 b c b8( a) }
>     altoMusic = \relative { e'4 e e f }
>     tenorMusic = \relative { c'4 b e d8( c) }
>     bassMusic = \relative { a4 gis a d, }
>     allLyrics = \lyricmode { King of glo -- ry }
>     <<
>       \new Staff = "Soprano" \sopranoMusic
>       \new Lyrics \allLyrics
>       \new Staff = "Alto" \altoMusic
>       \new Lyrics \allLyrics
>       \new Staff = "Tenor" {
>         \clef "treble_8"
>         \tenorMusic
>       }
>       \new Lyrics \allLyrics
>       \new Staff = "Bass" {
>         \clef "bass"
>         \bassMusic
>       }
>       \new Lyrics \allLyrics
>       \new PianoStaff <<
>         \new Staff = "RH" {
>           \set Staff.printPartCombineTexts = ##f
>           \partCombine \sopranoMusic \altoMusic
>         }
>         \new Staff = "LH" {
>           \set Staff.printPartCombineTexts = ##f
>           \clef "bass"
>           \partCombine \tenorMusic \bassMusic
>         }
>       >>
>     >>

Générer une partition chorale ou la réduction pour piano ne requiert que de modifier la structure des éléments, sans aucunement toucher à la musique.

Dans le cas d’une partition relativement longue, vous pouvez isoler la définition des différentes variables dans des fichiers séparés que vous rappellerez ensuite, comme indiqué à la rubrique Insertion de fichiers LilyPond.

#### 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 :

Filtre | Ré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 symbole peut utiliser le point 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
>     }

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
>     }

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
>     >>

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
>     }

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 pertinente : 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
>     }

imprimera les `\tag`s 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 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 }
>       R1^"non balisé"
>     }

>     \new Voice {
>       \keepWithTag #'violinI
>       \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 `éléments` d’une construction musicale existante. La musique séquentielle ou simultanée comporte assurément des `éléments` :

>     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
>     }

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

#### 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.

#### Globalisation des réglages

Vous pouvez regrouper dans un fichier indépendant vos réglages personnels que vous inclurez au besoin :

>     lilypond -dinclude-settings=MES_REGLAGES.ly MA_PARTITION.ly

Vous pouvez ainsi stocker dans un fichier séparé vos réglages en matière de format de papier, de fontes utilisées ou vos définitions particulières. Selon le fichier de réglages que vous mentionnerez, vous obtiendrez facilement différentes éditions à partir d’une même source quelle qu’elle soit.

Cette technique peut s’utiliser en combinaison avec des feuilles de styles, comme indiqué au chapitre Feuilles de style.

#### Voir aussi

Manuel d’initiation : Feuilles de style, Organisation du code source avec des variables.

Manuel de notation : Insertion de fichiers LilyPond.

#### LilyPond — Manuel de notation v2.22.2 (branche stable).