4.3.4 Modification des propriétés d’un contexte

Les contextes gèrent les différentes valeurs des nombreuses propriétés qui leur sont attachées. Beaucoup d’entre elles sont susceptibles d’être modifiées afin d’influer sur l’interprétation de l’input et ainsi changer l’apparence du résultat. On les modifie grâce à la commande \set, qui s’utilise ainsi :

\set ContexteNommé.propriétéNommée = valeur

ContexteNommé est habituellement Score, Staff ou Voice. S’il n’est pas mentionné, il sera considéré comme étant Voice.

Les noms des propriétés de contexte sont composés de mots accolés sans trait d’union ni caractère souligné, et dont seul le premier n’aura pas d’initiale en majuscule. Voici quelques exemples de celles les plus communément utilisées.

Nom de propriétéTypeFonctionExemple de valeur
extraNaturalBooléenSi vrai, ajoute un bécarre avant une altération accidentelle##t, ##f
currentBarNumberEntierDétermine le numéro de la mesure en cours50
doubleSlursBooléenSi vrai, imprime les liaisons au-dessous et au-dessus des notes##t, ##f
instrumentNameTexteDétermine le nom à afficher en début de portée\markup { ... }
fontSizeRéelAugmente ou diminue la taille de la fonte2.4
stanzaTexteDétermine le texte à imprimer avant le début d’un couplet"2"

Dans ce tableau, un booléen correspond soit à vrai (#t pour true en anglais) ou faux (#f pour false en anglais), un entier est un nombre entier positif, un réel est un nombre décimal positif ou négatif, et texte correspond à une suite de caractères encadrée par des guillemets informatiques. Attention à la présence d’un signe dièse (#) additionnel nécessaire dans le cadre d’une expression Scheme.

Avant de déterminer l’une de ces propriétés, nous devons savoir dans quel contexte elle intervient. Si cela est bien souvent évident, il peut arriver que cela tourne au cauchemar. Lorsque vous ne spécifiez pas le bon contexte, aucun message d’erreur ne s’affiche et l’effet attendu n’est pas au rendez-vous. Par exemple, le clefGlyph est de manière incontestable membre du contexte Staff, puisque c’est bien le glyphe de clef de la portée qui doit être changé. Dans l’exemple suivant, la première portée affiche effectivement la bonne clef, alors que ce n’est pas le cas pour la deuxième – qui porte la clef de sol par défaut au lieu d’une clef de basse (clef de fa) – dans la mesure où le contexte n’a pas été spécifié.

<<
  \new Staff \relative {
    \set Staff.clefGlyph = "clefs.C"
    c''4 c
 }
  \new Staff \relative {
    \set clefGlyph = "clefs.F"  % Wrong!
  d'4 d
 }
>>

[image of music]

Dans la mesure où le nom du contexte par défaut est Voice, la deuxième commande \set a défini la propriété clefGlyph dans le contexte de voix. Puisque LilyPond n’ira pas chercher une telle propriété dans le contexte Voice, celle-ci ne sera pas interprétée. Il ne s’agit pas d’une erreur, aucun message d’erreur ne sera ni émis ni enregistré.

La propriété clefGlyph ne sera prise en compte que si elle est définie dans un contexte Staff ; d’autres propriétés peuvent par contre être définies dans plusieurs contextes différents. C’est le cas de la propriété extraNatural qui est définie par défaut à #t (vrai) pour toutes les portées. Si vous lui attribuez la valeur #f (faux) dans un contexte Staff particulier, elle ne s’appliquera qu’aux altérations de la portée en question ; si vous lui attribuez la valeur « faux » au niveau du contexte Score, cela s’appliquera alors à toutes les portées.

Voici comment supprimer les bécarres supplémentaires pour une portée :

<<
  \new Staff \relative {
    aeses'2 aes
  }
  \new Staff \relative {
    \set Staff.extraNatural = ##f
    aeses'2 aes
  }
>>

[image of music]

et pour toutes les portées :

<<
  \new Staff \relative {
    aeses'2 aes
  }
  \new Staff \relative {
    \set Score.extraNatural = ##f
    aeses'2 aes
  }
>>

[image of music]

Autre exemple, si la propriété clefTransposition est déterminée au niveau du contexte Score, elle modifiera la valeur de la transposition en cours pour toutes les portées actives ; cette valeur sera considérée comme étant la nouvelle valeur par défaut pour toutes les portées à venir.

La commande opposée, \unset, efface la propriété du contexte ; la plupart des propriétés reviennent de ce fait à leur valeur par défaut. En règle générale, la commande \unset n’est pas nécessaire dès lors que vous faites appel à une nouvelle commande \set pour modifier le réglage.

Les commandes \set et \unset peuvent intervenir n’importe où dans votre fichier source. Elles seront effectives dès leur apparition et jusqu’à la fin de la partition, à moins d’être affectées par un \unset ou un nouveau \set. À titre d’exemple, nous allons jouer avec la taille des fontes, ce qui affecte entre autres la grosseur des têtes de note. Les modifications s’appliquent toujours par rapport à la valeur par défaut, non par rapport à la dernière valeur définie.

\relative {
  c'4 d
  % make note heads smaller
  \set fontSize = -4
  e4 f |
  % make note heads larger
  \set fontSize = 2.5
  g4 a
  % return to default size
  \unset fontSize
  b4 c |
}

[image of music]

Nous venons de voir comment déterminer la valeur de différents types de propriété. N’oubliez pas que les expressions Scheme doivent être précédées d’un signe dièse (#) ; les valeurs vrai ou faux seront donc libellées respectivement ##t et ##f – avec deux dièses. Une valeur textuelle doit être encadrée de guillemets anglais, "…", bien que, comme nous le constaterons plus tard, la commande \markup permet aussi de spécifier du texte.

Définition des propriétés de contexte avec \with

Les propriétés d’un contexte peuvent aussi être réglées lors de la création de ce contexte. Ceci constitue parfois une façon plus claire de spécifier les valeurs d’une propriété pour la durée de vie du contexte. Lorsque vous créez un contexte à l’aide de la commande \new, vous pouvez la faire suivre immédiatement d’un bloc \with { … } qui contiendra les réglages des différentes propriétés. Ainsi, si nous voulions par exemple annuler l’impression des bécarres supplémentaires sur la durée d’une portée, nous écririons :

\new Staff \with { extraNatural = ##f }

ce qui donnerait :

<<
  \new Staff
    \relative {
      gisis'4 gis aeses aes
    }
  \new Staff \with { extraNatural = ##f } {
    \relative {
      gisis'4 gis aeses aes
    }
  }
>>

[image of music]

Les propriétés réglées de cette manière peuvent néanmoins être modifiées de façon dynamique grâce à \set ; un \unset les ramènera à leur valeur initialisée par \with.

La propriété fontSize constitue une exception : lorsqu’elle est déterminée au sein d’un bloc \with, cela redéfinit la valeur par défaut de la taille de fonte. Une modification est possible par la commande \set, mais la commande \unset fontSize fera revenir à la nouvelle valeur par défaut.

Définition des propriétés de contexte avec \context

Vous pouvez régler les valeurs des propriétés de contexte en une seule fois pour tous les contextes d’un même type, par exemple tous les contextes Staff. Le type du contexte doit être donné explicitement d’après son nom, par exemple Staff, précédé d’une oblique inverse, donc nous saisirons \Staff. La manière de régler la valeur des propriétés est la même que ce que nous avons vu avec la commande \with, puisqu’on se place dans un bloc \context inclus dans un bloc \layout. Chaque bloc \context affectera tous les contextes concernés par le bloc \score ou \book au sein duquel apparaît ce bloc \layout. Voici comment le mettre en place :

\score {
  \new Staff {
    \relative {
      cisis''4 e d cis
    }
  }
  \layout {
    \context {
      \Staff
      extraNatural = ##t
    }
  }
}

[image of music]

Dans le cas où ces ajustements de propriété doivent affecter toutes les portées de la partition, nous utiliserons alors :

\score {
  <<
    \new Staff {
      \relative {
        gisis'4 gis aeses aes
      }
    }
    \new Staff {
      \relative {
        gisis'4 gis aeses aes
      }
    }
  >>
  \layout {
    \context {
      \Score
      extraNatural = ##f
    }
  }
}

[image of music]

Les propriétés de contexte ainsi définies peuvent être adaptées pour chacun des contextes en particulier grâce à un bloc \with ou bien une commande \set au fil des notes.

Voir aussi

Manuel de notation : Modification des réglages par défaut d’un contexte, La commande de fixation (set).

Référence des propriétés internes : Contexts, Tunable context properties.


GNU LilyPond – Manuel d’initiation v2.25.15 (branche de développement).