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 TextSpanner
\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' |

[image of music]

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' |

[image of music]

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 |
}

[image of music]

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" |

[image of music]

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.


GNU LilyPond – Manuel d’initiation v2.25.21 (branche de développement).