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

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

[image of music]

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

[image of music]


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'

[image of music]

Cette opération relativement courante fait l’objet du racourci \hide :

a'4 a'
\once \hide NoteHead
a' a'

[image of music]


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

[image of music]

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

[image of music]

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
}

[image of music]


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
}

[image of music]

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 :


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
}

[image of music]

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
}

[image of music]

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
}

[image of music]

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
}

[image of music]

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
}

[image of music]

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.


LilyPond — Manuel de notation v2.23.82 (branche de développement).