| [ < ] | [ > ] | [ << ] | [Plus haut] | [ >> ] | [Racine] | [Table des matières] | [Index] | [ ? ] |
@translationof Modifying properties
| [ < ] | [ > ] | [ << ] | [Plus haut] | [ >> ] | [Racine] | [Table des matières] | [Index] | [ ? ] |
@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.
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.
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] | [ ? ] |
\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
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 }
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
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 }
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
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.
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] | [ ? ] |
\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''
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 } >>
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 }
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 } >>
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 } >>
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] | [ ? ] |
\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
L’instruction \tweak permet aussi de modifier l’aspect d’une
liaison :
\relative { c'-\tweak thickness #5 ( d e f) }
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
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
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''
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.
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.
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] | [ ? ] |
\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] | [ ? ] |
\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.
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.
number, liste de numbers, number-pair
et number-pair-list. Les pages de
(internals)All layout objects section ‘Tous les objets de rendu’ dans Référence des propriétés internes
répertorient le type de donnée propre à chaque propriété. Peu importe
que le réglage par défaut soit une fonction.
Les exemples qui suivent s’arrêtent sur plusieurs propriétés d’objet graphique au regard des critères énoncés ci-dessus.
Hairpin.heightCette propriété n’est pas une sous-propriété, et est référencée à
(internals)Hairpin section ‘Soufflet’ dans Référence des propriétés internes. En tant que valeur, elle prend une
« dimension, exprimée en espace de portée » réglée à 0.6666 –
clairement une valeur number non infini.
Arpeggio.positionsLa page
(internals)Arpeggio section ‘Arpeggio’ dans Référence des propriétés internes référence une propriété
positions qui accepte une « paire de nombres ». Sa valeur par
défaut est ly:arpeggio::positions – une fonction de rappel qui
sera évaluée au cours de la phase de typographie pour donner une paire
de nombres pour tout objet Arpeggio.
Hairpin.colorAucune référence à color n’est mentionnée dans
(internals)Hairpin section ‘Soufflet’ dans Référence des propriétés internes.
Hairpin.circled-tipLa référence à Hairpin.circled-tip dans
(internals)Hairpin section ‘Soufflet’ dans Référence des propriétés internes indique que cette propriété prend une
valeur boolean. Les boléens ne sont pas des nombres.
Stem.details.lengthsBien que mentionnée dans
(internals)Stem section ‘Hampe’ dans Référence des propriétés internes et ayant par
défaut une liste de numbers, il s’agit d’une « sous-propriété ».
Il n’existe à ce jour aucune prise en charge des « propriétés
imbriquées ».
\offset en tant que dérogationLorsque é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 "||" }
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 "||" }
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 "||" }
\offset en tant qu’affinageLorsque é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 }
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''] }
\offset et les bandeaux avec ruptureIl 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''' }
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') }
| [ < ] | [ > ] | [ << ] | [Plus haut] | [ >> ] | [Racine] | [Table des matières] | [Index] | [ ? ] |
@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 } >>
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 } >>
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.