[ << Retouche de partition ] | [Racine][Table des matières][Index] | [ Modèles >> ] |
[ < Doigtés ] | [Plus haut: Positionnement des objets ] | [ La propriété outside-staff-priority > ] |
5.4.3 Objets hors de la portée
Les objets extérieurs à la portée sont placés automatiquement de façon à éviter les collisions. Il est toutefois possible, grâce à différentes méthodes, de rectifier un positionnement automatique qui se révèlerait ne pas être optimal.
La propriété outside-staff-priority | ||
La commande \textLengthOn | ||
Positionnement des nuances | ||
Dimensionnement des objets graphiques |
[ << Retouche de partition ] | [Racine][Table des matières][Index] | [ Modèles >> ] |
[ < Objets hors de la portée ] | [Plus haut: Objets hors de la portée ] | [ La commande textLengthOn > ] |
La propriété outside-staff-priority
Les objets avec la plus petite valeur de la propriété
outside-staff-priority
sont placés au plus près de la
portée, tandis que les autres sont écartés autant qu’il faut pour
éviter les collisions. La outside-staff-priority
est
définie dans la grob-interface
; elle est donc une
propriété commune à tous les objets de rendu. Par défaut, elle
est réglée sur #f
pour tous les objets de la portée, et
porte une valeur numérique appropriée à chacun des objets
extérieurs à la portée, à mesure qu’ils sont créés. Une
annexe spécifique recense les différents objets concernés, avec leur
valeur par défaut.
Vous noterez au passage certaines particularités quant au nom des
objets. En effet, des objets à extension sont automatiquement créés
dans le but de pouvoir contrôler le positionnement vertical des
extrémités d’un grob qui commencerait et se terminerait à des
instants musicaux différents. C’est la raison pour laquelle modifier le
outside-staff-priority
du grob sous-jacent n’aura aucun
effet. C’est par exemple le cas lorsque vous modifiez l’alignement d’un
objet Hairpin
à l’aide de outside-staff-priority
;
puisque le soufflet est associé à un objet DynamicLineSpanner
,
c’est sur celui-ci que doit porter l’effet de
outside-staff-priority
. L’instruction dérogatoire se place au
début du bandeau qui constitue une ligne de base susceptible de contenir
plusieurs soufflets ou indications de nuance.
Voici un exemple qui montre le placement par défaut de certains d’entre eux.
% Set details for later Text Spanner \override TextSpanner.bound-details.left.text = \markup { \small \bold Slower } % Place dynamics above staff \dynamicUp % Start Ottava Bracket \ottava #1 c''4 \startTextSpan % Add Dynamic Text and hairpin c''4\pp\< c''4 % Add Text Script c''4^Text | c''4 c'' % Add Dynamic Text and terminate hairpin c''4\ff c'' \stopTextSpan | % Stop Ottava Bracket \ottava #0 c'4 c' c' c' |
Cet exemple montre comment créer des extensions de texte (Text
Spanners en anglais) – texte avec des longues lignes au-dessus d’un
passage musical. L’extension s’étend depuis la commande
\startTextSpan
jusqu’à la commande \stopTextSpan
et le
format de texte est défini par la commande \override TextSpanner
.
Pour de plus amples détails, voir
Indication textuelle avec extension.
Il montre aussi comment créer des marques d’octaviation.
Si les valeurs de outside-staff-priority
par défaut ne donnent
pas les résultats escomptés, il suffit de modifier la priorité de l’un
de ces objets. Supposons que vous vouliez placer l’indication
d’octaviation sous le bandeau de texte, dans l’exemple précédent. Tout
ce que nous devons faire, c’est regarder la priorité de
OttavaBracket
dans la Référence des propriétés internes ou dans
Valeurs par défaut de outside-staff-priority, et la ramener à
une valeur plus basse que celle de TextSpanner
, en gardant à
l’esprit que OttavaBracket
est créé dans le contexte
Staff
:
% Set details for later Text Spanner \override TextSpanner.bound-details.left.text = \markup { \small \bold Slower } % Place dynamics above staff \dynamicUp % Place following Ottava Bracket below Text Spanners \once \override Staff.OttavaBracket.outside-staff-priority = #340 % Start Ottava Bracket \ottava #1 c''4 \startTextSpan % Add Dynamic Text c''4\pp % Add Dynamic Line Spanner c''4\< % Add Text Script c''4^Text | c''4 c'' % Add Dynamic Text c''4\ff c'' \stopTextSpan | % Stop Ottava Bracket \ottava #0 c'4 c' c' c' |
N’oublions pas que certains objets, tels les numéros de mesure,
indications métronomiques et marques-repères, sont par défaut attachés
au contexte Score
.
Les liaisons sont intrinsèquement des objets membres de la portée
(within-staff objects) bien qu’elles la surplombent lorsque les
notes auxquelles elles se rattachent sont relativement hautes. Ceci
peut avoir pour conséquence de remonter d’autant les objets externes
(outside-staff objects) tels les articulations. La propriété
avoid-slur
de l’articulation en question peut se voir déterminée
à 'inside
dans le but de « ramener » cette articulation à
l’intérieur de la liaison. Cette propriété avoid-slur
ne sera
toutefois effective que dans la mesure où la
outside-staff-priority
est désactivée (valeur #f
). Dans
le même esprit, il est possible d’affecter une valeur numérique
particulière à la propriété outside-staff-priority
d’une
liaison dans le but de regrouper la liaison avec les objets externes.
L’exemple suivant illustre ces deux différentes méthodes.
\relative c'' { c4( c^\markup { \tiny \sharp } d4.) c8 | c4( \once \override TextScript.avoid-slur = #'inside \once \override TextScript.outside-staff-priority = ##f c4^\markup { \tiny \sharp } d4.) c8 | \once \override Slur.outside-staff-priority = #500 c4( c^\markup { \tiny \sharp } d4.) c8 | }
Le fait de changer la outside-staff-priority
peut aussi servir à
contrôler le positionnement vertical des objets individuels, quoique le
résultat ne soit pas toujours formidable. Imaginons que nous voulions
placer « Text3 » au-dessus de « Text4 » dans l’exemple de la section
Comportement automatique, plus haut. Il nous suffit pour cela de
regarder dans la Référence des propriétés internes ou dans le tableau
plus haut la priorité de TextScript
, et d’augmenter la priorité
de « Text3 » jusqu’à une valeur très haute :
c''2^"Text1" c''2^"Text2" | \once \override TextScript.outside-staff-priority = #500 c''2^"Text3" c''2^"Text4" |
S’il est vrai que cela place « Text3 » au-dessus de « Text4 », ça le
place aussi plus haut que « Text2 » tandis que « Text4 » dégringole.
Ce n’est peut-être pas si bien que ça. En fait, ce que nous aimerions
faire, c’est placer toutes les annotations à égale distance de la
portée. Pour cela, nous avons besoin d’espacer horizontalement les
notes pour laisser plus de place au texte. C’est possible grâce à la
commande textLengthOn
.
[ << Retouche de partition ] | [Racine][Table des matières][Index] | [ Modèles >> ] |
[ < La propriété outside-staff-priority ] | [Plus haut: Objets hors de la portée ] | [ Positionnement des nuances > ] |
La commande \textLengthOn
Par défaut, l’espacement horizontal d’un texte produit sous forme de
markup (ou d’étiquette) n’est pas pris en compte, dans la mesure
où ce qui est concerné n’entre pas dans la musique. La commande
\textLengthOn
inverse ce comportement, faisant en sorte que les
notes soient espacées autant qu’il le faut pour s’adapter au texte :
\textLengthOn % Cause notes to space out to accommodate text c''2^"Text1" c''2^"Text2" | c''2^"Text3" c''2^"Text4" |
La commande qui permet de revenir au comportement par défaut est
\textLengthOff
. Alternativement, lorsque l’instruction
\textLengthOn
se limite à un seul instant musical, vous
pouvez la préfixer d’un \once
.
LilyPond dispose de commandes équivalentes et dévolues au
traitement des repères et indications de tempo :
\markLengthOn
et \markLengthOff
.
Les textes des markup éviteront également les notes qui
s’échappent au-dessus de la portée. Si ce n’est pas notre souhait, il
est possible de supprimer ce déplacement automatique vers le haut en
attribuant à la priorité la valeur #f
. Voici un exemple qui
montre comment les textes des markup interagissent avec ces types
de note.
\relative { % This markup is short enough to fit without collision c''2^"Tex" c'' | R1 | % This is too long to fit, so it is displaced upwards c,,2^"Text" c'' | R1 | % Turn off collision avoidance \once \override TextScript.outside-staff-priority = ##f c,,2^"Long Text " c'' | R1 | % Turn off collision avoidance \once \override TextScript.outside-staff-priority = ##f \textLengthOn % and turn on textLengthOn c,,2^"Long Text " % Spaces at end are honored c''2 | }
[ << Retouche de partition ] | [Racine][Table des matières][Index] | [ Modèles >> ] |
[ < La commande textLengthOn ] | [Plus haut: Objets hors de la portée ] | [ Dimensionnement des objets graphiques > ] |
Positionnement des nuances
Les indications de nuance se placent normalement sous la portée, mais on
peut les placer au-dessus avec la commande \dynamicUp
. Elles se
positionnent verticalement par rapport à la note à laquelle elles sont
liées et se décalent vers le bas (ou le haut) en fonction des objets de
la portée comme les liaisons de phrasé ou les numéros de mesure. Cela
peut donner d’assez bons résultats, comme le montre cet exemple :
\relative { \clef "bass" \key aes \major \time 9/8 \dynamicUp bes4.~\f\< \( bes4 bes8 des4\ff\> c16 bes\! | ees,2.~\)\mf ees4 r8 | }
De toute façon, si les notes et les nuances qui leur sont liées sont trop proches, le positionnement automatique évitera les collisions en déplaçant davantage les nuances suivantes, mais le résultat peut ne pas être très satisfaisant, comme le montre cet exemple artificiel :
\dynamicUp \relative { a'4\f b\mf a\mp b\p }
Si une telle situation devait survenir dans de la musique « réelle »,
il serait préférable d’espacer un peu plus les notes, de façon que les
indications de nuance puissent toutes se situer à la même distance de la
portée. S’il est possible de faire cela pour les textes de
markup grâce à la commande \textLengthOn
, il n’existe
pas d’équivalent pour les indications de nuance. Il nous faut donc
chercher à faire cela avec la commande \override
.
[ << Retouche de partition ] | [Racine][Table des matières][Index] | [ Modèles >> ] |
[ < Positionnement des nuances ] | [Plus haut: Objets hors de la portée ] | [ Espacement vertical > ] |
Dimensionnement des objets graphiques
Tout d’abord, nous devons apprendre ce qui détermine la dimension des
grobs. Tous les grobs portent en eux un point de référence
qui est utilisé pour les positionner par rapport à leur objet parent. Ce
point du grob est placé à une distance horizontale,
X-offset
, et à une distance verticale, Y-offset
, de son
parent. L’étendue horizontale de l’objet est fixée par une paire de
nombres, X-extent
, qui donnent la position du coin
gauche et du coin droit par rapport au point de référence. De
même, l’amplitude verticale est fixée par une paire de nombres,
Y-extent
. Ce sont des propriétés communes à tous les
grobs et que gère la grob-interface
.
Par défaut, la largeur des objets extérieurs à la portée est donnée
comme étant nulle, si bien qu’ils peuvent se chevaucher
horizontalement. Pour remédier à cela, on a ajouté l’infini à
l’extension gauche et moins l’infini à l’extension droite, en
attribuant à extra-spacing-width
la valeur
'(+inf.0 . -inf.0)
. Pour être sûr que les objets ne se
chevaucheront pas horizontalement, nous devons donc corriger cette
valeur de extra-spacing-width
pour leur attribuer un peu
d’espace supplémentaire. L’unité de base est ici la largeur
séparant deux lignes de portée ; décaler le bord gauche d’une
demie unité vers la gauche et le bord droit d’une demie unité vers
la droite devrait suffire :
\override DynamicText.extra-spacing-width = #'(-0.5 . 0.5)
Voyons si ça marche sur notre exemple précédent :
\dynamicUp % Extend width by 1 staff space \override DynamicText.extra-spacing-width = #'(-0.5 . 0.5) \relative { a'4\f b\mf a\mp b\p }
C’est mieux mais nous voulons peut-être aligner les indications de
nuance sur une même ligne plutôt que de les voir monter et
descendre avec les notes. La propriété qui gère cela est
staff-padding
– voir Collisions d’objets.
[ << Retouche de partition ] | [Racine][Table des matières][Index] | [ Modèles >> ] |
[ < Positionnement des nuances ] | [Plus haut: Objets hors de la portée ] | [ Espacement vertical > ] |