4.3.4 Modification des propriétés d’un contexte (GNU LilyPond – Manuel d’initiation)

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

où 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é | Type | Fonction | Exemple de valeur
> --- | --- | --- | ---
> `extraNatural` | Booléen | Si vrai, ajoute un bécarre avant une altération accidentelle | `##t`, `##f`
> `currentBarNumber` | Entier | Détermine le numéro de la mesure en cours | `50`
> `doubleSlurs` | Booléen | Si vrai, imprime les liaisons au-dessous et au-dessus des notes | `##t`, `##f`
> `instrumentName` | Texte | Détermine le nom à afficher en début de portée | `\markup { ... }`
> `fontSize` | Réel | Augmente ou diminue la taille de la fonte | `2.4`
> `stanza` | Texte | Dé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
>      }
>     >>

La deuxième commande `\set` définit bien la propriété `Voice.clefGlyph` à `clefs.F` mais, puisque LilyPond ne s’attend pas à une telle propriété dans un contexte de voix, rien ne se passe. 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 à tous les contextes `Staff` pour lesquels elle n’aura pas été stipulée.

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

et pour toutes les portées :

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

Autre exemple, si la propriété `clefTransposition` est déterminée au niveau du contexte `Score`, elle modifiera la valeur de la transposition pour le contexte `Staff` en cours et tous ceux à venir, sauf mention expresse.

La commande opposée, `\unset`, efface la propriété du contexte. 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. Il faut ici considérer la valeur que le contexte englobant doit perpétuer. `\set` le masque, et `\unset` le rend visible.

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. La valeur se définit par rapport à la taille de police 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 |
>     }

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

Un bloc `\with` permet de définir aisément des valeurs qui s’appliqueront sur toute la durée d’un contexte ; celles-ci ne sont toutefois pas immuables. Les propriétés initialisée de la sorte peuvent toujours être modifiées dynamiquement à l’aide des commandes `\set` et `\unset`.

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

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

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, Les commandes `\set` et `\unset`.

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

#### GNU LilyPond – Manuel d’initiation v2.26.0 (stable-branch).

- 1 Installation
  - 1.1 Installation en mode graphique
  - 1.2 Installation en ligne de commande
- 2 Tutoriel
  - 2.1 Compilation d’un fichier
  - 2.2 Composition d’un fichier source
    - 2.2.1 Notation simple
      - Hauteurs
      - Durées et rythme
      - Silences
      - Métrique
      - Indication de tempo
      - Clefs
      - Tout ensemble
    - 2.2.2 Travail sur les fichiers d’entrée
  - 2.3 Gestion des erreurs
  - 2.4 Bien lire le manuel
    - 2.4.1 Matériel incomplet
    - 2.4.2 Exemples cliquables
    - 2.4.3 Vue d’ensemble des manuels
- 3 Bases de notation musicale
  - 3.1 Notation sur une seule portée
    - 3.1.1 Barre et contrôle de mesure
      - Barre de mesure
      - Contrôle de mesure
    - 3.1.2 Hauteurs et armure
      - Altérations
      - Armures
      - Attention aux armures et aux hauteurs
    - 3.1.3 Liaisons
      - Liaisons de prolongation
      - Liaisons d’articulation
      - Liaisons de phrasé
      - Attention aux types de liaison
    - 3.1.4 Articulations et nuances
      - Articulation
      - Doigté
      - Nuance
    - 3.1.5 Ajout de texte
    - 3.1.6 Barres de ligature automatiques et manuelles
    - 3.1.7 Commandes rythmiques avancées
      - Mesure incomplète
      - N-olet
      - Note d’ornement
  - 3.2 Notes simultanées
    - 3.2.1 Les expressions musicales en clair
      - Analogie avec les expressions mathématiques
      - Expressions musicales simultanées – plusieurs portées
      - Expressions musicales simultanées – une seule portée
    - 3.2.2 Plusieurs portées
    - 3.2.3 Regroupements de portées
    - 3.2.4 Combinaison de notes en accords
    - 3.2.5 Polyphonie sur une portée
  - 3.3 Chansons
    - 3.3.1 Écriture de chants simples
    - 3.3.2 Alignement des paroles sur une mélodie
    - 3.3.3 Paroles pour plusieurs portées
  - 3.4 Dernières précisions
    - 3.4.1 Organisation du code source avec des variables
    - 3.4.2 Ajout de titres
    - 3.4.3 Noms de note absolus
    - 3.4.4 Après le tutoriel
- 4 Concepts fondamentaux
  - 4.1 Organisation des fichiers LilyPond
    - 4.1.1 Introduction à la structure de fichier LilyPond
    - 4.1.2 La partition est une (unique) expression musicale composée
    - 4.1.3 Expressions musicales imbriquées
    - 4.1.4 Structuration de la saisie des notes
    - 4.1.5 Non-imbrication des crochets et liaisons
  - 4.2 Les voix contiennent la musique
    - 4.2.1 J’entends des voix
    - 4.2.2 Instanciation explicite des voix
    - 4.2.3 Voix et paroles
  - 4.3 Contextes et graveurs
    - 4.3.1 Tout savoir sur les contextes
    - 4.3.2 Création d’un contexte
    - 4.3.3 Tout savoir sur les graveurs
    - 4.3.4 Modification des propriétés d’un contexte
    - 4.3.5 Ajout et suppression de graveurs
  - 4.4 Extension des modèles
    - 4.4.1 Soprano et violoncelle
    - 4.4.2 Partition pour chœur à quatre voix mixtes
    - 4.4.3 Écriture d’une partition à partir de zéro
    - 4.4.4 Économie de saisie grâce aux identificateurs et fonctions
    - 4.4.5 Conducteurs et parties
- 5 Retouche de partition
  - 5.1 Retouches élémentaires
    - 5.1.1 Objets et interfaces
    - 5.1.2 Conventions de nommage des objets et propriétés
    - 5.1.3 Méthodes de retouche
      - La commande `\override`
      - La commande `\revert`
      - Le préfixe `\once`
      - Les commandes `\tweak` et `\offset`
      - Le préfixe `\single`
  - 5.2 Le manuel de référence des propriétés internes
    - 5.2.1 Propriétés des objets de rendu
    - 5.2.2 Propriétés listées par interface
    - 5.2.3 Types de propriétés
  - 5.3 Apparence des objets
    - 5.3.1 Visibilité et couleur des objets
      - La propriété `stencil`
      - La propriété `break-visibility`
      - La propriété `transparent`
      - La propriété `color`
    - 5.3.2 Taille des objets
    - 5.3.3 Longueur et épaisseur des objets
  - 5.4 Décalages et alignements
  - 5.5 Positionnement des objets
    - 5.5.1 Comportement automatique
    - 5.5.2 Objets inclus dans la portée
      - La propriété `direction`
      - Doigtés
    - 5.5.3 Objets hors de la portée
      - La propriété `outside-staff-priority`
      - La commande `\textLengthOn`
      - Positionnement des nuances
      - Dimensionnement des objets graphiques
  - 5.6 Espacement vertical
  - 5.7 Collisions d’objets
    - 5.7.1 Déplacement d’objets
    - 5.7.2 Correction des collisions d’objets
      - La propriété `padding`
      - La propriété `right-padding`
      - La propriété `staff-padding`
      - La propriété `self-alignment-X`
      - La propriété `staff-position`
      - La propriété `extra-offset`
      - La propriété `positions`
      - La propriété `force-hshift`
    - 5.7.3 Exemple concret
  - 5.8 Autres retouches
    - 5.8.1 Autres utilisations des retouches
      - Liaison entre plusieurs voix
      - Rendu MIDI d’un point d’orgue
    - 5.8.2 Utilisation de variables dans les retouches
    - 5.8.3 Feuilles de style
    - 5.8.4 Autres sources de documentation
    - 5.8.5 Retouches avancées avec Scheme
- Appendix A Modèles
  - A.1 Gabarits préprogrammés
    - A.1.1 Gabarit pour chœur à quatre voix mixtes
    - A.1.2 Gabarit pour double chœur à quatre voix mixtes
  - A.2 Modèles pour portée unique
    - A.2.1 Notes seules
    - A.2.2 Notes et paroles
    - A.2.3 Notes et accords
    - A.2.4 Notes, paroles et accords
  - A.3 Modèles pour piano
    - A.3.1 Piano seul
    - A.3.2 Chant et accompagnement
    - A.3.3 Piano et paroles entre les portées
  - A.4 Modèles pour quatuor à cordes
    - A.4.1 Quatuor à cordes simple
    - A.4.2 Parties pour quatuor à cordes
  - A.5 Modèles pour ensemble vocal
    - A.5.1 Partition pour chœur SATB
    - A.5.2 Partition pour chœur SATB avec réduction pour piano
    - A.5.3 Partition pour chœur SATB avec alignement des contextes
    - A.5.4 Chœur à quatre voix mixtes sur quatre portées
    - A.5.5 Couplet pour solo et refrain à deux voix
    - A.5.6 Hymnes et cantiques
    - A.5.7 Psalmodie
  - A.6 Orchestre
    - A.6.1 Orchestre, chœur et piano
  - A.7 Exemples de notation ancienne
    - A.7.1 Transcription de musique mensurale
    - A.7.2 Transcription du grégorien
  - A.8 Autres modèles
    - A.8.1 Symboles de jazz
- Appendix B GNU Free Documentation License
- Appendix C Index des commandes et concepts