[ < ] [ > ]   [ << ] [Plus haut] [ >> ]         [Racine] [Table des matières] [Index] [ ? ]

5.3 Modification de propriétés

@translationof Modifying properties


[ < ] [ > ]   [ << ] [Plus haut] [ >> ]         [Racine] [Table des matières] [Index] [ ? ]

5.3.1 Vue d’ensemble de la modification des propriétés

@translationof Overview of modifying properties

Chaque contexte est chargé de créer plusieurs types d’objets graphiques. Il contient également les réglages nécessaires pour chacun de ces objets. Si l’on modifie ces réglages, les objets n’auront plus la même apparence.

Les contextes comportent deux types différents de propriétés : des propriétés de contexte et des propriétés d’objet graphique. Les propriétés de contexte sont celles qui s’appliqueront globalement au contexte en tant que tel ; elles gèrent la manière dont le contexte apparaîtra. Les propriétés d’objet graphique, par contre, s’appliquent à des types particuliers d’objet qui apparaissent dans le contexte en question.

Les commandes \set et \unset permettent de modifier les valeurs des propriétés de contexte. Les commandes \override et \revert permettent de modifier les valeurs des propriétés des objets graphiques.

Voir aussi

Référence des propriétés internes : (internals)All layout objects section ‘All layout objects’ dans Référence des propriétés internes, (internals)Backend section ‘Backend’ dans Référence des propriétés internes, (internals)OverrideProperty section ‘OverrideProperty’ dans Référence des propriétés internes, (internals)PropertySet section ‘PropertySet’ dans Référence des propriétés internes, (internals)RevertProperty section ‘RevertProperty’ dans Référence des propriétés internes.

Problèmes connus et avertissements

La sous-couche Scheme ne vérifie pas la saisie des propriétés de façon très stricte. Des références cycliques dans des valeurs Scheme peuvent de ce fait interrompre ou faire planter le programme – ou bien les deux.


[ < ] [ > ]   [ << ] [Plus haut] [ >> ]         [Racine] [Table des matières] [Index] [ ? ]

5.3.2 La commande de fixation \set

@translationof The set command

Chaque contexte peut avoir plusieurs propriétés, c’est-à-dire des variables qu’il inclut. Ces dernières peuvent être modifiées « à la volée », c’est-à-dire pendant que la compilation s’accomplit. C’est ici le rôle de la commande \set.

 
\set contexte.propriété = #valeur

Dans la mesure où valeur est constituée d’un objet Scheme, elle doit être précédée du caractère #.

Les propriétés des contextes se libellent sous la forme minusculeMajuscule. Leur rôle consiste principalement à traduire la musique en notation : par exemple, localAlterations déterminera quand imprimer une altération accidentelle, et measurePosition quand imprimer une barre de mesure. La valeur des propriétés des contextes peut évoluer au fur et à mesure que l’on avance dans le morceau – measurePosition en est l’illustration parfaite.

Ainsi la propriété de contexte skipBars permet de condenser les mesures vides de notes, en des silences multimesures – voir Compression de mesures vides à ce sujet. Il s’agit d’un objet Scheme, auquel on attribue la valeur booléenne « vrai », c’est-à-dire la lettre #t pour « True » en anglais :

 
R1*2
\set Score.skipBars = ##t
R1*2

[image of music]

Si l’argument contexte n’est pas spécifié, alors la propriété cherchera à s’appliquer dans le contexte le plus restreint où elle est employée : le plus souvent ChordNames, Voice ou Lyrics.

 
\set Score.autoBeaming = ##f
\relative {
  e''8 e e e
  \set autoBeaming = ##t
  e8 e e e
} \\
\relative {
  c''8 c c c c8 c c c
}

[image of music]

Ce changement étant appliqué « à la volée », il n’affecte que le second groupe de notes.

Notez que le contexte le plus restreint n’est pas toujours le bon, et peut ne pas contenir la propriété qui vous intéresse : ainsi, la propriété skipBars, évoquée plus haut, ne relève pas du contexte Voice, mais du contexte Score – le code suivant ne fonctionnera pas.

 
R1*2
\set skipBars = ##t
R1*2

[image of music]

Les contextes s’organisent de façon hiérarchique : aussi, lorsqu’un contexte de niveau supérieur est spécifié (par exemple Staff), la propriété sera modifiée dans tous les contextes inférieurs (tous les contextes Voice, par exemple) qu’il contient.

La commande \unset permet d’annuler la définition d’une propriété :

 
\unset contexte.propriété

si et seulement si cette propriété a été définie dans ce contexte précis. En d’autres termes, la commande \unset doit impérativement affecter le même contexte que la commande \set d’origine, même en cas d’imbrication.

 
\set Score.autoBeaming = ##t
\relative {
  \unset autoBeaming
  e''8 e e e
  \unset Score.autoBeaming
  e8 e e e
} \\
\relative {
  c''8 c c c c8 c c c
}

[image of music]

Si l’on se trouve dans le contexte le plus restreint, il n’est pas obligatoire, là encore, de spécifier le contexte. Ainsi, les deux lignes suivantes

 
\set Voice.autoBeaming = ##t
\set autoBeaming = ##t

sont équivalentes si elles apparaissent dans un contexte Voice.

Pour modifier une propriété de façon à ce que l’accommodement ne s’applique qu’une seule fois, il convient d’adjoindre l’instruction \once à la commande \set ou \unset :

 
c''4
\once \set fontSize = #4.7
c''4
c''4

[image of music]

Ici le changement de taille est annulé aussitôt après la note concernée.

La référence des propriétés internes contient une description exhaustive de toutes les propriétés, contexte par contexte : voir (internals)Tunable context properties section ‘Tunable context properties’ dans Référence des propriétés internes.

Voir aussi

Manuel de notation : Compression de mesures vides.

Référence des propriétés internes : (internals)Tunable context properties section ‘Tunable context properties’ dans Référence des propriétés internes.


[ < ] [ > ]   [ << ] [Plus haut] [ >> ]         [Racine] [Table des matières] [Index] [ ? ]

5.3.3 La commande de dérogation \override

@translationof The override command

La commande \override permet de modifier la mise en forme des objets graphiques. Les descriptions d’objet graphique, dont les noms commencent par une majuscule, puis comprennent une ou plusieurs majuscules (de style TotoTata), contiennent les réglages « par défaut » pour les objets graphiques. Ces réglages sont sous forme de liste Scheme ; on peut les consulter dans le fichier ‘scm/define-grobs.scm’.

\override est en fait un raccourci :

 
\override [contexte.]NomObjet.propriété = #valeur

Nous pouvons donc par exemple accroître l’épaisseur des hampes en jouant sur la propriété thickness de l’objet stem :

 
c''4 c''
\override Voice.Stem.thickness = #3.0
c''4 c''

[image of music]

Lorsqu’aucun contexte n’est spécifié dans une clause \override, celle-ci s’appliquera au contexte le plus bas :

 
\override Staff.Stem.thickness = #3.0
<<
  \relative {
    e''4 e
    \override Stem.thickness = #0.5
    e4 e
  } \\
  \relative {
    c''4 c c c
  }
>>

[image of music]

Certaines « sous-propriétés » sont parfois contenues dans une propriété. La commande devient alors :

 
\override Stem.details.beamed-lengths = #'(4 4 3)

ou, pour modifier les extrémités d’un objet à extension :

 
\override TextSpanner.bound-details.left.text = "texte de gauche"
\override TextSpanner.bound-details.right.text = "texte de droite"

Les effets d’un \override prennent fin à l’aide de l’instruction \revert.

La syntaxe de la commande \revert command est :

 
\revert [contexte.]NomObjet.propriété

Par exemple :

 
\relative {
  c''4
  \override Voice.Stem.thickness = #3.0
  c4 c
  \revert Voice.Stem.thickness
  c4
}

[image of music]

Les effets d’un \override ou d’un \revert s’appliquent dès l’endroit où ils apparaissent, et à tous les objets dans le contexte mentionné :

 
<<
  \relative {
    e''4
    \override Staff.Stem.thickness = #3.0
    e4 e e
  } \\
  \relative {
    c''4 c c
    \revert Staff.Stem.thickness
    c4
  }
>>

[image of music]

Les instructions \override et \revert doivent être précédées d’un \once dès lors que les effets de l’accommodement ne concernent que l’événement qui les suit directement :

 
<<
  \relative c {
    \override Stem.thickness = #3.0
    e''4 e e e
  } \\
  \relative {
    c''4
    \once \override Stem.thickness = #3.0
    c4 c c
  }
>>

[image of music]

Voir aussi

Référence des propriétés internes : (internals)Backend section ‘Backend’ dans Référence des propriétés internes


[ < ] [ > ]   [ << ] [Plus haut] [ >> ]         [Racine] [Table des matières] [Index] [ ? ]

5.3.4 La commande d’affinage \tweak

@translationof The tweak command

L’utilisation d’un \override pour modifier les propriétés d’un objet graphique affectera toutes les instances de l’objet en question au sein du contexte, et ce dès son apparition. Il peut parfois être préférable de n’affecter qu’un seul objet en particulier plutôt que tous les objets du contexte. C’est là le rôle de l’instruction \tweak, dont la syntaxe est :

 
\tweak [objet-de-rendu.]objet-propriété valeur

Mention de l’objet-de-rendu est optionnel. La commande \tweak s’applique à l’objet qui apparaît immédiatement après valeur.

Pour une introduction à la syntaxe et l’utilisation des retouches, voir le chapitre (learning)Méthodes de retouche section ‘Méthodes de retouche’ dans Manuel d’initiation.

Lorsque plusieurs éléments de même nature surviennent au même instant, il devient impossible d’utiliser l’instruction \override pour n’en modifier qu’un seul individuellement, d’où l’intérêt de la commande \tweak. Entre autres éléments qui sont susceptibles de se produire au même instant, nous citerons :

Dans l’exemple suivant, l’une des têtes de note de l’accord est colorisée, et l’aspect d’une autre est changé.

 
< c''
  \tweak color #red
  d''
  g''
  \tweak duration-log #1
  a''
> 4

[image of music]

L’instruction \tweak permet aussi de modifier l’aspect d’une liaison :

 
\relative { c'-\tweak thickness #5 ( d e f) }

[image of music]

La commande \tweak ne sera pleinement fonctionnelle que si elle est directement rattachée à l’objet auquel elle doit s’appliquer alors que le fichier source est converti en flux musical. Vouloir modifier la globalité d’un accord est sans résultat dans la mesure où il ne constitue qu’un conteneur pour des événements musicaux et que tous les objets seront créés à partir d’événements appartenant à un EventChord (un événement d’accord) :

 
\tweak color #red c4
\tweak color #red <c e>4
<\tweak color #red c>4

[image of music]

La commande \tweak simple ne saurait servir à modifier un élément qui ne serait pas explicitement mentionné dans le fichier source. C’est notamment le cas des hampes, ligatures automatiques ou altérations, dans la mesure où elles seront ultérieurement générées et après les têtes de note (objets NoteHead), plutôt qu’au fil des éléments musicaux saisis.

De tels objets créés indirectement ne peuvent être ajustés que par une forme développée de la commande \tweak, autrement dit lorsque l’objet est explicitement mentionné :

 
\tweak Stem.color #red
\tweak Beam.color #green c''8 e''
<c'' e'' \tweak Accidental.font-size #-3 ges''>4

[image of music]

La commande \tweak ne peut non plus servir à modifier clefs ou métriques, puisqu’elles seront immanquablement séparées du \tweak par l’insertion automatique d’autres éléments requis pour spécifier le contexte.

Plusieurs commandes \tweak en enfilade permettent d’affecter un même élément de notation :

 
c'
  -\tweak style #'dashed-line
  -\tweak dash-fraction #0.2
  -\tweak thickness #3
  -\tweak color #red
  \glissando
f''

[image of music]

Vous pouvez examiner le flux musical généré par une portion d’un fichier source, y compris les éléments automatiquement insérés, en suivant les indications portées à la rubrique (extending)Affichage d’expressions musicales section ‘Affichage d'expressions musicales’ dans Extension de LilyPond. Ceci s’avère tout à fait approprié pour déterminer ce qui peut se modifier à l’aide d’un \tweak ou bien aider à rectifier votre source de telle sorte que le \tweak produise ses effets.

Voir aussi

Manuel d’initiation : (learning)Méthodes de retouche section ‘Méthodes de retouche’ dans Manuel d’initiation.

Manuel d’extension : (extending)Affichage d’expressions musicales section ‘Affichage d'expressions musicales’ dans Extension de LilyPond.

Problèmes connus et avertissements

Lorsqu’il y a plusieurs liaisons de prolongation dans un accord, la commande \tweak ne permet de modifier les points de contrôle que pour la première rencontrée dans le fichier source.


[ < ] [ > ]   [ << ] [Plus haut] [ >> ]         [Racine] [Table des matières] [Index] [ ? ]

5.3.5 \set ou \override

@translationof set versus override

Les instructions \set et \override manipulent toutes deux des propriétés associées à des contextes. Dans tous les cas, ces propriétés tiennent compte de la hiérarchie des contextes : les propriétés qui n’ont pas été définies dans le contexte lui-même héritent des valeurs de leur contexte parent respectif.

Les valeurs et durée de vie des propriétés d’un contexte sont dynamiques et ne sont accessibles qu’au moment où la musique est interprétée. Lors de la création d’un contexte, ses propriétés sont initialisées à partir de la définition du contexte correspondant et de ses éventuelles adaptations. Toute modification ultérieure ne sera obtenue que par des commandes d’adaptation des propriétés, libellées au sein même de la musique.

Les définitions d’un objet graphique (graphical object abrégé en grob) constituent une catégorie spécifique de propriétés de contexte, dans la mesure où leur structure, enregistrement et utilisation diffèrent des propriétés de contextes habituelles.

Contrairement aux propriétés de contextes habituelles, les définitions de grob sont subdivisées en propriétés de grob. Un grob est créé par un graveur lors de l’interprétation d’une expression musicale et reçoit ses propriétés initiales à partir de la définition de grob en cours dans le contexte du graveur. Le graveur (ou tout autre « agent » de LilyPond) peut alors ajouter ou modifier des propriétés à cet objet, sans pour autant affecter la définition du grob dans ce contexte.

Ce que LilyPond appelle « propriétés de grob » dans le cadre de l’affinage par l’utilisateur sont en fait les propriétés de la définition d’un objet dans un contexte.

Contrairement aux propriétés de contexte habituelles, les définitions d’un grob doivent être enregistrées pour pouvoir garder trace de ses composants, les propriétés individuelles du grob (ainsi que leurs sous-propriétés) séparément. Il sera dès lors possible de définir ces composants dans différents contextes et ainsi disposer d’une définition globale du grob à l’instant où la création de cet objet assemblera les éléments relatifs aux différents contextes attachés au contexte en cours et à ses parents.

Les définitions de grob se manipulent à l’aide des commandes \override et \revert, et leur nom commence par une capitale (comme ‘NoteHead’) alors que les propriétés de contexte ordinaires – elles commencent par une minuscule – se manipulent avec \set et \unset.

Les instructions spéciales \tweak et \overrideProperty modifient les propriétés de grob en court-circuitant totalement les propriétés de contexte. En fait, elles capturent les grobs au moment de leur création pour y injecter directement des propriétés soit émanant d’un événement musical retouché par un \tweak, soit lorsqu’ils sont d’une qualité particulière (un \overrideProperty).


[ < ] [ > ]   [ << ] [Plus haut] [ >> ]         [Racine] [Table des matières] [Index] [ ? ]

5.3.6 La commande de décalage \offset

@translationof The offset command

Bien qu’il soit possible d’affecter de nouvelles valeurs aux propriétés d’un objet graphique à l’aide des commandes \override, \tweak ou \overrideProperty, il est souvent plus pratique de modifier de telles propriétés par rapport à une valeur par défaut. Ceci est la raison d’être de la commande \offset.

La commande \offset répond à la syntaxe suivante :

 
[-]\offset propriété décalages élément

La commande \offset agit par addition du contenu de décalages au réglage par défaut de la propriété propriété de l’objet graphique indiqué par élément.

Selon la manière dont la commande est formulée, \offset agira tantôt comme un \tweak, tantôt comme un \override. Les différences entre ces utilisations seront abordées après avoir recensé les propriétés qui peuvent être soumises à un \offset.

Propriétés acceptant des décalages

Bon nombre de propriétés d’objet graphique, mais pas toutes, peuvent faire l’objet d’un décalage. Si d’aventure propriété ne peut être affectée, l’objet restera inchangé et sera émis un message d’avertissement. En pareil cas, l’objet doit être modifié par un \override ou un \tweak.

Il est toujours possible de procéder à tâtons et laisser les avertissement indiquer si tel objet peut ou ne peut pas être soumis à \offset. Néanmoins, une approche plus systématique est possible.

Les critères énoncés ci-après déterminent l’égibilité d’une propriété à être modifiée par la commande \offset.

Les exemples qui suivent s’arrêtent sur plusieurs propriétés d’objet graphique au regard des critères énoncés ci-dessus.

\offset en tant que dérogation

Lorsque élément est un nom d’objet graphique comme Arpeggio ou Staff.OttavaBracket, le comportement de la commande \offset est assimilable à un \override sur le type d’objet spécifié.

 
\offset propriété décalages [contexte.]NomGrob

Notez bien qu’il n’y a jamais de tiret avant un comportement « dérogatoire », tout comme il n’y en a jamais avec la commande \override elle-même.

L’exemple suivant utilise la forme « dérogation » pour allonger les arpeggios affichés dans la première mesure, jusqu’à couvrir l’accord dans son intégralité. Les arpeggios sont étirés d’un demi espace de portée à leur sommet ainsi qu’à leur base. Est aussi indiquée la même opération sur le premier accord à l’aide d’une simple dérogation appliquée à la propriété positions. Cette méthode n’est pas la plus illustrative pour « étirer d’un demi espace de portée » dans la mesure où les extrémités doivent être spécifiées en coordonnées absolues plutôt que relatives. De plus, des dérogations individuelles seraient nécessaires pour les autres accords en raison de leurs différentes amplitude et position.

 
arpeggioMusic = {
  <c' e' g'>\arpeggio <a' c'' e''>\arpeggio
  <d' f' a' c''>\arpeggio <c' e' g' b' d'' f'' a''>\arpeggio
}

{
  \arpeggioMusic
  \bar "||"
  \offset positions #'(-0.5 . 0.5) Arpeggio
  \arpeggioMusic
  \bar "||"
  \once \override Arpeggio.positions = #'(-3.5 . -0.5)
  <c' e' g'>1\arpeggio
  \bar "||"
}

[image of music]

Dans cette utilisation d’override, \offset peut se préfixer de \once ou \temporary et être annulé à l’aide d’un \revert suivi de propriété – voir (extending)Fonctions de substitution intermédiaires section ‘Fonctions de substitution intermédiaires’ dans Extension de LilyPond. Ceci tient au fait que \offset crée effectivement un \override de propriété.

 
music = { c'8\< d' e' f'\! }

{
  \music
  \offset height 1 Hairpin
  \music
  \music
  \revert Hairpin.height
  \music
  \bar "||"
  \once \offset height 1 Hairpin
  \music \music
  \bar "||"
  \override Hairpin.height = 0.2
  \music
  \temporary \offset height 2 Hairpin
  \music
  \music
  \revert Hairpin.height
  \music
  \bar "||"
}

[image of music]

Tout comme \override, la forme « dérogation » de \offset peut s’utiliser avec \undo et \single.

 
longStem = \offset length 6 Stem

{
 \longStem c'4 c''' c' c''
 \bar "||"
 \undo \longStem c'4 c''' c' c''
 \bar "||"
 \single \longStem c'4 c''' c' c''
 \bar "||"
}

[image of music]

\offset en tant qu’affinage

Lorsque élément est une expression musicale, comme ( ou \arpeggio, le résultat sera la même expression musicale à laquelle aura été appliqué un affinage.

 
[-]\offset [NomGrob.]propriété décalages expression-musicale

La syntaxe de \offset dans sa forme « affinage » est en tout point analogue à la commande \tweak, autant dans l’ordre des arguments que dans la présence ou non du tiret l’introduisant.

L’exemple suivant utilise la forme « affinage » pour ajuster le positionnement vertical de l’objet BreathingSign. Les effets de la simple commande \tweak sont présent à titre de comparaison. Leur syntaxe est équivalente. Néanmoins, le résultat de \tweak est moins intuitif dans la mesure où BreathingSign.Y-offset est calculé en référence à la ligne médiane. Il n’est pas nécessaire de savoir comment se calcule Y-offset dans le cas d’un \offset.

 
{
  c''4
  \breathe
  c''4
  \offset Y-offset 2 \breathe
  c''2
  \tweak Y-offset 3 \breathe
}

[image of music]

Dans cet exemple, les objets affinés étaient créés directement à partir du code saisi : la commande \breathe était une instruction explicite pour renvoyer un objet BreathingSign. Puisque la cible de la commande était sans ambiguïté, point n’était besoin de spécifier le nom de l’objet. Cependant, lorsqu’un objet est créé indirectement, mention du nom de l’objet devient requise. Il en va de même pour la commende \tweak.

Dans l’exemple qui suit, l’objet Beam est abaissé de deux espaces de portée par application de \offset à la propriété positions.

La première application de \offset requiert mention du nom de l’objet puisque rien dans le code ne crée explicitement de ligature. Dans la seconde application, la ligature est explicitement créée par l’expression musicale [, ce qui dispense de mentionner le nom de l’objet. Cette deuxième application comporte par ailleurs un raccourci : un unique number s’appliquera aux deux membres d’un number-pair.

 
{
  c''8 g'' e'' d''
  \offset Beam.positions #'(-2 . -2)
  c''8 g'' e'' d''
  c''8 g'' e'' d''
  c''8-\offset positions #-2 [ g'' e'' d'']
}

[image of music]

\offset et les bandeaux avec rupture

Il est aussi possible de modifier indépendamment les segments d’un objet étendu rencontrant des sauts de ligne. Dans ce cas, décalages est consitué d’une liste de valeurs pour le type de donnée requis par la propriété.

Utilisée de telle manière, la commande \offset est similaire à la commande \alterBroken – voir Modification de bandeaux avec rupture. Cependant, et contrairement à la commande \alterBroken, les valeurs fournies à \offset sont relatives.

Dans l’exemple suivant est déplacé l’objet « segmenté » OttavaBracket au travers de sa propriété staff-padding. Puisque cette propriété est affectée d’un number, décalages est alimenté d’une liste de numbers afin de prendre en compte les deux segments créés par le saut de ligne. La portion de crochet de la première ligne n’est en fait pas touchée puisque 0 est ajouté à la valeur par défaut de staff-padding. Le segment de la deuxième ligne est haussé de trois espaces de portée par rapport à sa hauteur par défaut. La hauteur par défaut est de 2, bien qu’il ne soit pas nécessaire de le savoir.

 
{
 \offset staff-padding #'(0 3) Staff.OttavaBracket
  \ottava #1
  c'''2 c'''
  \break
  c'''2 c'''
}

[image of music]

L’exemple ci-dessous reproduit les effets de la commande \shape en décalant la propriété control-points de l’objet Slur. Ici, décalages est constitué d’une liste de number-pair-lists, une pour chaque segment de la liaison. Cet exemple produit un résultat identique à ce qui est illustré dans Modification de l’allure des éléments.

 
{
  c'4-\offset control-points #'(
               ((0 . 0) (0 . 0) (0 . 0) (0 . 1))
               ((0.5 . 1.5) (1 . 0) (0 . 0) (0 . -1.5))
              ) ( f'4 g' c''
  \break
  d'4 c'' f' c')
}

[image of music]


[ < ] [ > ]   [ << ] [Plus haut] [ >> ]         [Racine] [Table des matières] [Index] [ ? ]

5.3.7 Modification de listes associatives

@translationof Modifying alists

Certaines propriétés configurables par l’utilisateur se présentent en interne comme étant des listes associatives – les puristes diront des alists. Une alist est en fait constituée de plusieurs paires de clés et valeurs. La structure d’un liste associative ressemble à :

 
'((clé1 . valeur1)
  (clé2 . valeur2)
  (clé3 . valeur3)
  …)

Dans le cas où cette liste représente les propriétés d’un objet graphique ou bien l’une des variables du bloc \paper, chaque clé peut être modifiée individuellement sans que cela affecte les autres.

Par exemple, pour réduire l’espacement entre deux portées adjacentes d’un même système, on utilisera la propriété staff-staff-spacing qui est attachée à l’objet graphique StaffGrouper. Cette propriété est constituée d’une liste de quatre clés : basic-distance, minimum-distance, padding et stretchability. Ses réglages par défaut tels que mentionnés à la rubrique Backend de la référence des propriétés internes – voir (internals)StaffGrouper section ‘StaffGrouper’ dans Référence des propriétés internes – sont :

 
'((basic-distance . 9)
  (minimum-distance . 7)
  (padding . 1)
  (stretchability . 5))

Afin de rapprocher nos deux portées, il suffit de réduire la valeur (9) de la clé basic-distance au niveau de celle de la clé minimum-distance (7). La modification d’une seule clé individuellement peut se réaliser sous la forme d’une déclaration imbriquée :

 
% default space between staves
\new PianoStaff <<
  \new Staff { \clef treble c''1 }
  \new Staff { \clef bass   c1   }
>>

% reduced space between staves
\new PianoStaff \with {
  % this is the nested declaration
  \override StaffGrouper.staff-staff-spacing.basic-distance = #7
} <<
  \new Staff { \clef treble c''1 }
  \new Staff { \clef bass   c1   }
>>

[image of music]

Le recours à une déclaration imbriquée touchera la clé indiquée (basic-distance dans l’exemple ci-dessus) sans pour autant modifier les autres clés de la propriété considérée.

Considérons maintenant que nous souhaitions que les portées soient le plus proche possible les unes des autres, à la limite du chevauchement. Il suffirait de mettre les quatre clés à zéro. Nous pourrions saisir quatre déclarations, chacune d’elles touchant une clé. Nous pouvons tout aussi bien redéfinir la propriété en une seule clause, sous la forme d’une liste associative :

 
\new PianoStaff \with {
  \override StaffGrouper.staff-staff-spacing =
    #'((basic-distance . 0)
       (minimum-distance . 0)
       (padding . 0)
       (stretchability . 0))
} <<
  \new Staff { \clef treble c''1 }
  \new Staff { \clef bass   c1   }
>>

[image of music]

N’oubliez pas que dès lors qu’une clé n’apparaît pas dans la liste, elle retourne à sa valeur sauf-mention-contraire. Autrement dit, dans le cas de staff-staff-spacing qui nous occupe, toutes les clés non mentionnées seront ramenées à zéro – à l’exception de stretchability qui prend par défaut la valeur de basic-distance. Les deux assertions suivantes sont donc équivalentes.

 
\override StaffGrouper.staff-staff-spacing =
  #'((basic-distance . 7))

\override StaffGrouper.staff-staff-spacing =
  #'((basic-distance . 7)
     (minimum-distance . 0)
     (padding . 0)
     (stretchability . 7))

L’une des conséquences, parfois involontaire, de ceci est la suppression de réglages standards effectués par un fichier d’initialisation chargé à chaque compilation d’un fichier source. Dans l’exemple précédent, les réglages standards de padding et minimum-distance, tels que déterminés par ‘scm/define-grobs.scm’, se voient ramenés à leur valeur si-non-définie ; autrement dit, les deux clés sont mises à zéro. La définition d’une propriété ou d’une variable sous forme de liste associative, quelle qu’en soit la taille, réinitialisera toujours les clés non mentionnées à leur valeur si-non-définie. Si telle n’est pas votre intention, nous vous recommandons alors de régler la valeur des clés individuellement par des déclarations imbriquées.

Note : Les déclarations imbriquées ne sont pas fonctionnelles dans le cas des listes associatives des propriétés de contexte – telles beamExceptions, keyAlterations, timeSignatureSettings, etc. Ces propriétés ne sont modifiables qu’au travers d’une complète redéfinition de leur liste associative.


[ < ] [ > ]   [ << ] [Plus haut] [ >> ]

Ce document a été généré le le 13 juillet 2020 par gub en utilisant texi2html 1.82.

Autres langues : English, català, deutsch, español, italiano, 日本語.
À propos de la sélection automatique de la langue.