5.1.4 Méthodes de retouche


La commande \override

Dans Modification des propriétés d’un contexte et dans Ajout et suppression de graveurs, nous avons déjà rencontré les commandes \set et \with, qui servent à changer les propriétés des contextes et à supprimer ou ajouter des graveurs. Voici maintenant d’autres commandes plus importantes.

La commande pour changer les propriétés des objets de rendu est \override. Du fait que cette commande modifie en profondeur les propriétés internes de LilyPond, sa syntaxe n’est pas aussi simple que pour les commandes vues précédemment. Elle a besoin de savoir avec précision quelle est la propriété à modifier, pour quel objet et dans quel contexte, et quelle doit être sa nouvelle valeur. Voyons de quoi il retourne.

La syntaxe générale de cette commande est :

\override Contexte.ObjetDeRendu.propriété-rendu = #valeur

Elle attribue à la propriété appelée propriété-rendu, associée à l’objet ObjetDeRendu, appartenant lui-même au contexte Contexte, une valeur valeur.

Le contexte Contexte peut être omis (c’est généralement le cas) quand il n’y a pas d’ambiguïté et qu’il s’agit d’un contexte de très bas niveau, comme Voice, ChordNames ou Lyrics. Dans les exemples qui suivent, le contexte sera très souvent omis. Nous verrons plus tard dans quelles circonstances il doit impérativement être indiqué.

Les sections ci-dessous traitent largement des propriétés et de leurs valeurs – voir Types de propriétés – mais, pour illustrer la mise en forme et l’utilisation de ces commandes, nous nous limiterons à n’employer que quelques propriétés et valeurs simples, facilement compréhensibles.

LilyPond reconnaît comme expression primaire les éléments musicaux tels que les notes et durées, ainsi que les chînes de caractères et annotations (les markups). D’autres expressions spécifiques comme les nombres, symboles et listes sont gérées en « mode Scheme », mode appelé en faisant précéder une valeur par un ‘#’. Pour de plus amples informations quant au mode Scheme, consultez Syntaxe Scheme dans LilyPond.

La commande \override est la plus fréquemment utilisée pour faire des retouches, et pratiquement tout le reste de ce chapitre aura pour but de montrer, à travers des exemples, comment l’utiliser. L’exemple ci-dessous change la couleur des têtes de notes :

\relative {
  c'4 d
  \override NoteHead.color = "red"
  e4 f |
  \override NoteHead.color = "green"
  g4 a b c |
}

[image of music]


La commande \revert

Une fois qu’elle a été modifiée, la propriété conserve sa nouvelle valeur jusqu’à ce qu’elle soit à nouveau modifiée ou qu’elle rencontre la commande \revert. La commande \revert obéit à la syntaxe ci-dessous et ramène la valeur de la propriété à sa valeur d’origine. Attention : dans le cas où plusieurs \override ont été employés, il ne s’agit pas de la valeur précédente mais bien de la valeur par défaut.

\revert Contexte.ObjetDeRendu.propriété-de-rendu

Tout comme pour la commande \override, la mention du Contexte est souvent facultative. Elle sera omise dans de nombreux exemples ci-dessous. Voici un exemple qui ramène la couleur des deux dernières notes à leur valeur par défaut :

\relative {
  c'4 d
  \override NoteHead.color = "red"
  e4 f |
  \override NoteHead.color = "green"
  g4 a
  \revert NoteHead.color
  b4 c |
}

[image of music]


Le préfixe \once

Les commandes \override, \revert, \set et \unset peuvent supporter le préfixe \once. Celui-ci a pour fonction de n’appliquer la commande considérée qu’à l’instant musical en cours, avant que la propriété ne reprenne sa valeur antérieure – qui n’est pas forcément la valeur par défaut lorsqu’un autre \override ou \set est toujours effectif. Toujours à partir du même exemple, il est possible de ne changer la couleur que d’une seule note :

\relative {
  c'4 d
  \override NoteHead.color = "red"
  e4 f |
  \once \override NoteHead.color = "green"
  g4 a
  \once \revert NoteHead.color
  b c |
  \revert NoteHead.color
  f2 c |
}

[image of music]

Le préfixe \once peut s’utiliser avec de nombreuses commandes prédéfinies pour en limiter les effets à un seul instant musical :

\relative {
  c'4( d)
  \once \slurDashed
  e4( f) |
  g4( a)
  \once \hideNotes
  b( c) |
}

[image of music]


La commande \tweak

La dernière commande disponible pour les retouches est \tweak. Elle sert à changer les propriétés d’objets qui surviennent simultanément dans la musique, comme par exemple les notes d’un accord. La commande \override modifierait toutes les notes de l’accord, tandis que \tweak permet de ne modifier que l’élément immédiatement suivant dans la chaîne de saisie.

Voici un exemple. Supposons que nous voulions changer la taille de la tête de note du milieu (le mi) dans un accord de do majeur. Voyons d’abord ce que donnerait \once \override :

\relative {
  <c' e g>4
  \once \override NoteHead.font-size = #-3
  <c e g>4
  <c e g>4
}

[image of music]

Nous voyons que \override modifie toutes les têtes de notes de l’accord, car toutes les notes de l’accord surviennent au même instant musical et que la fonction de \once est de faire porter la modification sur tous les objets du type spécifié qui surviennent au même instant musical, comme le fait la commande \override elle-même.

La commande \tweak opère différemment. Elle agit sur l’élément immédiatement suivant dans la chaîne de saisie. Dans sa forme la plus simple, elle ne fonctionne que sur les objets créés directement à partir de l’élément suivant dans la chaîne de saisie, c’est-à-dire essentiellement des têtes de notes et des articulations.

Pour reprendre notre exemple, la taille de la note du milieu d’un accord peut être modifiée de cette manière :

\relative {
  <c' e g>4
  <c \tweak font-size #-3 e g>4
}

[image of music]

Vous noterez que la syntaxe de \tweak est différente de celle de la commande \override. Ni le contexte, ni l’objet n’ont besoin d’être spécifiés ; au contraire, cela produirait une erreur si on le faisait. Tous deux sont sous-entendus par l’élément suivant dans la chaîne de saisie. Il n’est pareillement pas nécessaire d’insérer un signe égal. La syntaxe générale de la commande \tweak est donc, tout simplement :

\tweak propriété-de-rendu #valeur

La commande \tweak est aussi utilisée quand on veut, dans une série d’articulations, n’en modifier qu’une seule. Ainsi :

a'4^"Black"
  -\tweak color "red" ^"Red"
  -\tweak color "green" _"Green"

[image of music]

Attention : la commande \tweak doit être précédée d’une marque d’articulation, comme si elle-même était une articulation. Dans la cas de multiples positionnements forcés (^ ou _), celui le plus à gauche aura préséance puisqu’il sera appliqué en dernier.

Les objets tels que hampes et altérations seront créés postérieurement à l’événement qui survient. L’utilisation de la commande \tweak sur de tels objets indirectement créés peut se faire en nommant explicitement l’objet de rendu, si tant est que LilyPond puisse remonter jusqu’à l’événement originel :

<\tweak Accidental.color "red"   cis''4
 \tweak Accidental.color "green" es''
 g''>

[image of music]

Cette forme développée de la commande \tweak correspond à :

\tweak objet-de-rendu.propriété-de-rendu #valeur

Quand plusieurs n-olets sont imbriqués et commencent au même instant musical, c’est encore la commande \tweak qui est utilisée pour changer l’apparence de l’un d’entre eux. Dans l’exemple suivant, le long crochet de n-olet et le premier des trois crochets courts commencent au même instant musical ; une commande \override s’appliquerait donc à la fois aux deux. En revanche, \tweak permet de les dissocier. La première commande \tweak indique que le long crochet doit être placé au-dessus des notes, et la seconde indique que le coefficient de n-olet doit être imprimé en rouge sur le premier crochet de triolet court.

\relative c'' {
  \tweak direction #up
  \tuplet 3/4 {
    \tweak color "red"
    \tuplet 3/2 { c8[ c c] }
    \tuplet 3/2 { c8[ c c] }
    \tuplet 3/2 { c8[ c c] }
  }
}

[image of music]

Si les n-olets imbriqués ne commencent pas au même moment, leur apparence peut alors être modifiée de la façon habituelle, avec la commande \override :

\relative {
  \tuplet 3/2 { c'8[ c c] }
  \once \override TupletNumber.text = #tuplet-number::calc-fraction-text
  \tuplet 3/2 {
    c8[ c]
    c8[ c]
    \once \override TupletNumber.transparent = ##t
    \tuplet 3/2 { c8[ c c] }
    \tuplet 3/2 { c8[ c c] }
  }
}

[image of music]

Voir aussi

Manuel de notation : La commande d'affinage (tweak).


Le préfixe \single

Supposons que nous voulions mettre en exergue certaines têtes de note – plus grosses et en rouge – et, pour nous simplifier la vie, que nous avons réalisé un fonction à ce effet :

emphNoteHead = {
  \override NoteHead.color = "red"
  \override NoteHead.font-size = 2
}
\relative {
  c''4 a \once \emphNoteHead f d |
}

[image of music]

Le préfixe \once fonctionne à merveille dans le cas d’une note isolée ou de l’intégralité d’un accord, mais ne permet pas de souligner individuellement l’une des notes d’un accord. Nous avons vu comment un \tweak permet d’y arriver – voir La commande \tweak. Un \tweak ne peut toutefois pas s’utiliser dans une fonction ; un \single permet d’appliquer la fonction une seule fois :

emphNoteHead = {
  \override NoteHead.color = "red"
  \override NoteHead.font-size = 2
}
\relative {
   <c'' a \single \emphNoteHead f d>4
}

[image of music]

En résumé, l’instruction \single convertit les instructions \override en \tweak de telle sorte que lorsque plusieurs objets se trouvent en un même point du temps musical, comme la tête des notes formant un accord, \single n’en affectera qu’une seule, celle générée par l’expression musicale qui vient juste après, contrairement à un \once qui en affectera tous les objets.

Cette utilisation de \single permet d’appliquer individuellement n’importe quel raccourci de fonction contenant des \override aux notes d’un accord. Néanmoins, l’instruction \single ne permet pas de convertir des \revert, \set ou \unset en \tweak.

Voir aussi

Manuel d’initiation : La commande \tweak, Utilisation de variables dans les retouches.


LilyPond — Manuel d’initiation v2.23.82 (branche de développement).