5.4.7 Visibilité des objets
La visibilité des objets de rendu se contrôle de quatre façons
différentes : vous pouvez supprimer leur stencil, les rendre
transparents, les coloriser en blanc ou bien encore forcer leur
propriété break-visibility
. Les trois premières options peuvent
s’appliquer à tous les objets, la dernière étant réservée aux objets
changeables. Le Manuel d’initiation contient une introduction à
ces quatre techniques, à la rubrique
Visibilité et couleur des objets.
LilyPond met en œuvre quelques techniques particulières adaptées à certains objets ; elles sont couvertes par une rubrique spécifique.
Suppression des stencils | ||
Transparence des objets | ||
Blanchiment des objets | ||
Utilisation de break-visibility | ||
Considérations spécifiques |
Suppression des stencils
Tout objet de rendu se voit attribuer une propriété stencil
.
Elle est par défaut définie par la fonction chargée de dessiner cet
objet. Lorsque cette propriété est désactivée de force – en lui
attribuant la valeur #f
– aucune fonction ne sera appelée ;
l’objet ne sera donc pas dessiné. Le retour au comportement par défaut
s’opère à l’aide d’un \revert
.
a1 a \override Score.BarLine.stencil = ##f a a \revert Score.BarLine.stencil a a a
Cette opération relativement courante fait l’objet du racourci
\omit
:
a1 a \omit Score.BarLine a a \undo \omit Score.BarLine a a a
Transparence des objets
Tout objet de rendu dispose d’une propriété de transparence, qui est par
défaut définie à #f
. Le fait de l’activer rendra l’objet
transparent tout en préservant la place qu’il occupe.
a'4 a' \once \override NoteHead.transparent = ##t a' a'
Cette opération relativement courante fait l’objet du racourci
\hide
:
a'4 a' \once \hide NoteHead a' a'
Blanchiment des objets
Tout objet de rendu dispose d’une propriété couleur, par défaut définie
à black
(noir). Le fait de la forcer à white
(blanc)
rendra l’objet indistinct du fond blanc. Néanmoins, lorsque cet objet
en recouvre d’autres, la couleur de leurs points de jonction dépendra de
l’ordre dans lequel ils sont dessinés, ce qui peut laisser apparaître
un fantôme de l’objet blanchi comme ci-dessous :
\override Staff.Clef.color = #white a'1
Cet inconvénient peut être évité en modifiant l’ordre dans lequel les
objets sont dessinés. Chaque objet de rendu dispose d’une propriété
layer
(calque ou niveau) à laquelle est affecté un nombre entier.
Les objets ayant la plus faible valeur sont dessinés en premier, puis
les autres, de telle sorte qu’un objet ayant une valeur plus élevée les
recouvrira. La plupart des objet ont un layer
valorisé
à 1
– quelques uns, dont StaffSymbol
et
BarLine
, ont une valeur à 0
. L’ordre d’impression
d’objets ayant une même valeur de layer
est indéterminé.
La clef de l’exemple précédent a par défaut un layer
à 1
; elle est donc dessinée après les lignes de la
portée – layer
valorisé par défaut à 0
– et donc
les recouvre. Pour changer cet état de fait, l’objet Clef
doit
avoir un layer
de valeur inférieure, disons -1
, pour
pouvoir être dessiné avant.
\override Staff.Clef.color = #white \override Staff.Clef.layer = #-1 a'1
Morceaux choisis
Utilisation de la propriété whiteout
Tout objet graphique peut s’imprimer sur un fond blanc afin de masquer
une partie des objets qu’il recouvre. Ceci trouve toute son utilité pour
améliorer certaines collisions, notamment dans des situations où un
repositionnement d’objets est irréaliste. Il faut alors explicitement
définir la propriété layer
afin de contrôler quels objets seront
masqués par le fond blanc. Dans l’exemple ci-dessous, la liaison est en
collision avec la métrique ; la situation est améliorée dès lors que la
portion de liaison qui traverse la métrique est masquée par
l’affectation de la propriété whiteout
à l’objet
TimeSignature
. Pour ce faire, TimeSignature
est déplacé
sur un calque au-dessus de celui de Tie
– il reste sur le calque
par défaut (1) –, puis le StaffSymbol
est placé sur un calque
supérieur à celui de TimeSignature
pour ne pas être masqué.
{ \override Score.StaffSymbol.layer = #4 \override Staff.TimeSignature.layer = #3 b'2 b'~ \once \override Staff.TimeSignature.whiteout = ##t \time 3/4 b' r4 }
Utilisation de break-visibility
La plupart des objets de rendu ne sont imprimés qu’une seule fois ;
certains cependant, tels les barres de mesure, clefs, métriques ou
armures, apparaîtront deux fois lors d’un saut de ligne – une première
fois en fin de ligne, puis à nouveau au début de la ligne suivante. Ces
objets, que l’on peut traiter de changeables (breakable en
anglais) disposent de la propriété break-visibility
spécialement
chargée de contrôler leur visibilité aux trois endroits où il sont
susceptibles d’apparaître : en début de ligne, en cours de ligne ou
en fin de ligne – si tant est qu’un changement s’y produise.
Par exemple, la métrique est imprimée par défaut au début de la première ligne, et nulle part ailleurs. En cas de modification, une nouvelle métrique sera imprimée à l’endroit du changement. Dans le cas où ce changement intervient en fin de ligne, la nouvelle métrique s’imprime au début de la ligne suivante, et une métrique « de précaution » viendra se placer au bout de la ligne précédente.
Ce comportement est géré par la propriété break-visibility
, dont
vous trouverez une explication à la rubrique
Visibilité et couleur des objets. Cette propriété est
constituée d’un vecteur de trois booléens qui, dans l’ordre, déterminent
si l’objet sera imprimé à la fin, en cours, et au début d’une ligne –
on pourrait aussi dire avant un saut de ligne, là où il n’y a pas de
saut de ligne, et après un saut de ligne.
Les huit combinaisons possibles sont aussi disponibles sous la forme de fonctions prédéfinies, regroupées dans le fichier ‘scm/output-lib.scm’. Le tableau suivant vous les présente ; les trois dernières colonnes indiquent l’endroit où l’objet sera visible.
Forme | Forme | Avant | Hors | Après |
---|---|---|---|---|
fonctionnelle | vectorielle | saut | saut | saut |
all-visible | #(#t #t #t) | oui | oui | oui |
begin-of-line-visible | #(#f #f #t) | non | non | oui |
center-visible | #(#f #t #f) | non | oui | non |
end-of-line-visible | #(#t #f #f) | oui | non | non |
begin-of-line-invisible | #(#t #t #f) | oui | oui | non |
center-invisible | #(#t #f #t) | oui | non | oui |
end-of-line-invisible | #(#f #t #t) | non | oui | oui |
all-invisible | #(#f #f #f) | non | non | non |
Les réglages par défaut de la propriété break-visibility
diffèrent selon l’objet de rendu. Le tableau suivant présente, pour la
plupart des objets comportant la propriété break-visibility
,
ces réglages par défaut.
Objet de rendu | Contexte habituel | Réglage par défaut |
---|---|---|
BarLine | Score | calculé |
BarNumber | Score | begin-of-line-visible |
BreathingSign | Voice | begin-of-line-invisible |
Clef | Staff | begin-of-line-visible |
Custos | Staff | end-of-line-visible |
Divisio | Staff | begin-of-line-invisible |
DoublePercentRepeat | Voice | begin-of-line-invisible |
KeySignature | Staff | begin-of-line-visible |
ClefModifier | Staff | begin-of-line-visible |
RehearsalMark | Score | end-of-line-invisible |
TimeSignature | Staff | all-visible |
Voici un exemple d’utilisation de la forme vectorielle pour contrôler la visibilité des barres de mesure :
\relative { f'4 g a b f4 g a b % Remove bar line at the end of the current line \once \override Score.BarLine.break-visibility = ##(#f #t #t) \break f4 g a b f4 g a b }
Lors d’un forçage de break-visibility
sous une forme vectorielle,
les trois éléments doivent impérativement être mentionnés. Ces formes
vectorielles ne sont d’ailleurs pas prises en charge par tous les objets
de rendu, et certaines combinaisons peuvent entraîner des erreurs ;
nous citerons entre autres :
- Une barre de mesure ne peut s’imprimer en début de ligne.
- Un numéro de mesure ne peut apparaître au début de la première ligne, à moins d’être différent de 1.
- Clef – voir ci-après.
- Les répétitions en pourcentage sont soit toutes imprimées, soit
aucune. Vous devrez utiliser
begin-of-line-invisible
pour les voir etall-invisible
pour les masquer. - Armure – voir ci-après.
- Modificateur de clef – voir ci-après.
Considérations spécifiques
Visibilité après changement explicite
La propriété break-visibility
contrôle la visibilité des armures
ou changements de clef en début de ligne uniquement, donc après un saut.
Elle ne produit aucun effet sur la visibilité d’une armure ou d’une clef
après un changement explicite de tonalité ou de clef, ni en cours, ni en
fin de ligne. Dans l’exemple suivant, l’armure est présente même après
le passage en si bémol majeur malgré l’activation de
all-invisible
(tous invisibles).
\relative { \key g \major f'4 g a b % Try to remove all key signatures \override Staff.KeySignature.break-visibility = #all-invisible \key bes \major f4 g a b \break f4 g a b f4 g a b }
La visibilité lors de ces changements explicites d’armure ou de clef est
géré respectivement par les propriétés
explicitKeySignatureVisibility
et explicitClefVisibility
.
Leur fonctionnement est en tout point identique à celui de la propriété
break-visibility
– forme vectorielle à trois éléments ou forme
fonctionnelle comme indiqué ci-avant. Toutes deux sont attachées au
contexte Staff
(la portée) et non directement aux objets de
rendu ; elles sont de ce fait introduites par une instruction
\set
. Leur valeur par défaut est de toujours imprimer les objets
– réglage sur all-visible
. Ces deux propriétés gèrent
uniquement la visibilité des armures et clefs lors d’un changement
explicite, et en dehors d’un début de ligne ; il faudra en pareil
cas forcer la break-visibility
de ces objets pour les supprimer.
\relative { \key g \major f'4 g a b \set Staff.explicitKeySignatureVisibility = #all-invisible \override Staff.KeySignature.break-visibility = #all-invisible \key bes \major f4 g a b \break f4 g a b f4 g a b }
Visibilité des bécarres de précaution
L’impression d’altérations de précaution au moment d’un changement
explicite de tonalité sera annulée dès lors que vous aurez désactivé la
propriété printKeyCancellation
du contexte Staff
:
\relative { \key g \major f'4 g a b \set Staff.explicitKeySignatureVisibility = #all-invisible \set Staff.printKeyCancellation = ##f \override Staff.KeySignature.break-visibility = #all-invisible \key bes \major f4 g a b \break f4 g a b f4 g a b }
Avec de tels réglages particuliers, seules les altérations accidentelles permettront d’indiquer le changement de tonalité.
Notez bien que lors d’une bascule en do majeur ou la mineur, seuls les
« bécarres d’annulation » permettent d’identifier le changement de
tonalité. En pareil cas, désactiver printKeyCancellation
sera
sans effet :
\relative { \key g \major f'4 g a b \set Staff.explicitKeySignatureVisibility = #all-invisible \set Staff.printKeyCancellation = ##f \key c \major f4 g a b \break f4 g a b f4 g a b }
La suppression des bécarres d’annulation même lors d’un passage en do
majeur ou la mineur n’interviendra qu’après modification de la
visibilité de l’objet KeyCancellation
:
\relative { \key g \major f'4 g a b \set Staff.explicitKeySignatureVisibility = #all-invisible \override Staff.KeyCancellation.break-visibility = #all-invisible \key c \major f4 g a b \break f4 g a b f4 g a b }
Clefs transposées
L’indication de transposition d’une clef est produite par l’objet
de rendu ClefModifier
. Sa visibilité étant gérée par
héritage direct de l’objet Clef
, nul n’est besoin de forcer
un quelconque break-visibility
au niveau des objets
ClefModifier
pour éliminer une indication de transposition
lorsque la clef est invisible.
Lors d’un changement explicite de clef, la propriété
explicitClefVisibility
gère à la fois le symbole de la clef et
l’indication de transposition qui lui est attachée.
Voir aussi
Manuel d’initiation : Visibilité et couleur des objets.