5.4.9 Alignement des objets
Les objets graphiques disposant des interfaces
self-alignment-interface
ou side-position-interface
peuvent s’aligner par rapport à un objet précédemment positionné, ce de
différentes manières. Ces objets sont référencés aux rubriques
self-alignment-interface et
side-position-interface.
Tous les objets graphiques ont un point de référence, une étendue horizontale et une étendue verticale. L’étendue horizontale est représentée par une paire de nombres indiquant l’écart entre le point de référence et les bords gauche et droit – l’écart à gauche étant négatif. L’étendue verticale est représentée par une paire de nombres indiquant l’écart entre le point de référence et les bords inférieur et supérieur – l’écart vers le bas étant négatif.
La position d’un objet sur la portée est donnée par la valeur des
propriétés X-offset
et Y-offset
. La valeur de
X-offset
indique l’écart en abscisse (coordonnée X) par rapport
au point de référence de l’objet parent ; la valeur de Y-offset
indique l’écart par rapport à la ligne médiane de la portée. Les
valeurs de X-offset
et Y-offset
peuvent être fournies
arbitrairement, ou bien être calculé par des procédures spécifiques qui
détermineront l’alignement par rapport à l’objet parent.
Note : Nombre d’objets sont affectés par des considérations
spécifiques en matière de positionnement ; jouer sur les valeurs de
X-offset
ou Y-offset
se révélera inefficace en pareil
cas, même si l’objet dispose de la self-alignment-interface
.
Fixer arbitrairement les propriétés X-offset
ou Y-offset
annihilera alors les effets de la propriété self-alignment
correspondante.
Par exemple, une altération peut se repositionner verticalement grâce à
son Y-offset
; toute modification de son X-offset
restera par contre sans effet.
Les indications de repère s’alignent sur des objets de rupture – tels
les barres de mesure, clefs, métriques et armures. Certaines propriétés
spécifiques – dépendant de la break-aligned-interface
–
permettent de gérer le positionnement des indications de repère sur ces
objets.
Détermination directe de X-offset et Y-offset | ||
Utilisation de side-position-interface | ||
Utilisation de self-alignment-interface | ||
Utilisation de break-aligned-interface |
Voir aussi
Manuel de notation :
Utilisation de break-aligned-interface
.
Manuel d’extension : Fonctions de rappel.
Détermination directe de X-offset
et Y-offset
Vous pouvez fournir, pour de nombreux objets, des valeurs numériques aux
propriétés X-offset
et Y-offset
. Voici par exemple une
note avec indication du doigté tout d’abord avec un positionnement par
défaut, puis repositionnement par modification successive du
X-offset
et du Y-offset
.
a'-3 a' -\tweak X-offset #0 -\tweak Y-offset #0 -3 a' -\tweak X-offset #-1 -\tweak Y-offset #1 -3
Utilisation de side-position-interface
Un objet disposant de la side-position-interface
peut se voir
accolé à son voisin de telle sorte que les bords des deux objets se
touchent. Un tel objet peut se positionner au-dessus, en dessous, à
droite ou à gauche de son parent. Ce parent ne saurait être
stipulé ; il est déterminé par l’ordre d’apparition des éléments
dans le flux des saisies. La plupart de ces objets ont pour parent la
tête de note qui leur est associée.
Les valeurs des propriétés side-axis
et direction
détermineront l’endroit où viendra se positionner l’objet, selon les
préceptes suivants :
Propriété side-axis | Propriété direction | Positionnement |
---|---|---|
0 | -1 | gauche |
0 | 1 | droite |
1 | -1 | en dessous |
1 | 1 | au-dessus |
Pour un side-axis
à 0
, le X-offset
devrait engager
la procédure ly:side-position-interface::x-aligned-side
.
Celle-ci renverra la valeur adéquate de X-offset
permettant
d’accoler l’objet sur la droite ou sur la gauche de son parent, selon la
valeur de direction
.
Pour un side-axis
à 1
, le Y-offset
devrait engager
la procédure ly:side-position-interface::y-aligned-side
.
Celle-ci renverra la valeur adéquate de Y-offset
permettant
d’accoler l’objet au-dessus ou en dessous de son parent, selon la valeur
de direction
.
Utilisation de self-alignment-interface
Réalignement d’objets horizontalement
L’alignement horizontal d’un objet disposant de la
self-alignment-interface
dépend de la valeur de sa propriété
self-alignment-X
, si tant est que la propriété X-offset
de
cet objet engage la procédure
ly:self-alignment-interface::x-aligned-on-self
.
La propriété self-alignment-X
peut contenir un nombre réel,
l’unité de base étant la moitié de l’étendue horizontale de l’objet.
Une valeur négative décalera l’objet vers la droite, une valeur positive
vers la gauche. La valeur 0
permet de centrer l’objet sur
le point de référence de son parent. Une valeur de -1
alignera le bord gauche de l’objet sur le point de référence de son
parent, et une valeur de 1
alignera le bord droit de l’objet
sur le point de référence de son parent. Les valeurs symboliques
LEFT
, CENTER
et RIGHT
correspondent respectivement
à -1
, 0
et 1
.
En règle générale, la valeur de self-alignment-X
se modifie à
l’aide d’une commande \override
. Le recours à la commande
\tweak
permet de traiter séparément plusieurs annotations
affectées à une même note :
a' -\tweak self-alignment-X #-1 ^"left-aligned" -\tweak self-alignment-X #0 ^"center-aligned" -\tweak self-alignment-X #RIGHT ^"right-aligned" -\tweak self-alignment-X #-2.5 ^"aligned further to the right"
Réalignement d’objets verticalement
L’alignement vertical suit le même principe : la propriété
Y-offset
doit alors engager la procédure
ly:self-alignment-interface::y-aligned-on-self
. Toutefois, il
arrive bien souvent que d’autres mécanismes interviennent dans
l’alignement vertical. La valeur de Y-offset
n’étant que l’une
des variables qui seront prises en compte, l’ajustement pour certains
objets peut se révéler fastidieux. L’unité de base est relativement
réduite, puisqu’elle est de la moitié de l’étendue verticale de
l’objet ; le nombre à fournir en argument pourrait donc être
relativement élevé. Une valeur de -1
alignera le bord
inférieur de l’objet sur le point de référence de son parent, et une
valeur de 1
alignera le bord supérieur de l’objet sur le point de
référence de son parent. La valeur 0
permet de centrer l’objet
sur le point de référence de son parent. Les valeurs symboliques
DOWN
, CENTER
et UP
correspondent respectivement
à -1
, 0
et 1
.
Réalignement d’objets sur les deux axes
Définir à la fois X-offset
et Y-offset
permet de réaligner
un objet sur les deux axes.
Dans l’exemple ci-dessous, nous ajustons l’indication de doigté de telle sorte qu’elle se place au plus près de la tête de note.
a' -\tweak self-alignment-X #0.5 % move horizontally left -\tweak Y-offset #ly:self-alignment-interface::y-aligned-on-self -\tweak self-alignment-Y #-1 % move vertically up -3 % third finger
Utilisation de break-aligned-interface
Indications de repère, marques textuelles, numéros de mesure et plus
généralement tous les objets disposant de la
break-alignable-interface – que l’on pourrait regrouper
sous l’apellation de « jalons » – sont susceptibles de se positionner
sur des objets de notation tels que barre de mesure, armure, métrique et
plus communément tout objet disposant de la
break-aligned-interface. Pour être plus précis, ces
derniers disposent d’une propriété break-align-symbol
, qui
est un symbole Scheme. Un jalon, donc un objet disposant de
break-alignable-interface
, peut définir son point d’ancrage
aux éléments disposant de break-aligned-interface
, ce au
moyen d’une liste de symboles qui correspondent aux valeurs de
break-align-symbol
des éléments sur lesquels il peut
s’aligner. Une liste exhaustive des symboles est disponible au chapitre
break-alignment-interface.
Chaque objet possède son propre point de référence par défaut, sur lequel viendront s’aligner les jalons :
\override Score.TextMark.self-alignment-X = #CENTER % Le repère textuel s'alignera % sur la droite de la clef \override Score.TextMark.break-align-symbols = #'(clef) \key a \major \clef treble \textMark "↓" e'1 % Le repère textuel s'alignera % sur la gauche de la métrique \override Score.TextMark.break-align-symbols = #'(time-signature) \key a \major \clef treble \time 3/4 \textMark "↓" e'2. % Le repère textuel sera centré % au-dessus de la respiration \override Score.TextMark.break-align-symbols = #'(breathing-sign) \key a \major \clef treble \time 4/4 e'1 \breathe \textEndMark "↓"
Les différents objets sur lesquels l’alignement pourrait intervenir
seront regroupés dans une liste. Si l’un des objets est invisible à
l’endroit voulu, en raison d’un réglage de break-visibility
ou
bien par forçage de la visibilité des armures et clefs, le repère ou le
numéro de mesure viendra s’aligner sur le premier élément de cette liste
qui soit visible. Dans le cas où aucun objet de la liste n’est visible,
l’alignement se fera sur la barre de mesure ou, dans le cas où la barre
de mesure est invisible, à l’endroit même où la barre prendrait place.
\override Score.TextMark.self-alignment-X = #CENTER % Le repère textuel s'alignera % sur la droite de l'armure \override Score.TextMark.break-align-symbols = #'(key-signature clef) \key a \major \clef treble \textMark "↓" e'1 % Le repère textuel s'alignera % sur la droite de la clef \set Staff.explicitKeySignatureVisibility = #all-invisible \override Score.TextMark.break-align-symbols = #'(key-signature clef) \key a \major \clef bass \textMark "↓" gis,1 % Le repère textuel sera centré % au-dessus de la barre de mesure \set Staff.explicitKeySignatureVisibility = #all-invisible \set Staff.explicitClefVisibility = #all-invisible \override Score.TextMark.break-align-symbols = #'(key-signature clef) \key a \major \clef treble \textMark "↓" e'1
L’alignement d’un jalon sur un objet de notation peut se modifier, comme l’illustre l’exemple suivant. Toutefois, si la partition comporte plusieurs portées, ce réglage devra apparaître dans chacune des portées.
\override Score.TextMark.self-alignment-X = #CENTER % Le repère textuel s'alignera % sur la droite de l'armure \override Score.TextMark.break-align-symbols = #'(key-signature) \key a \major \clef treble \time 4/4 \textMark "↓" e'1 % Le repère textuel sera centré % au-dessus de l'armure \once \override Score.KeySignature.break-align-anchor-alignment = #CENTER \textMark "↓" \key a \major e'1 % Le repère textuel s'alignera % sur la gauche de l'armure \once \override Score.KeySignature.break-align-anchor-alignment = #LEFT \key a \major \textMark "↓" e'1
Le bord gauche d’un jalon peut se décaler arbitrairement sur la gauche ou sur la droite. La valeur est exprimée en espaces de portée.
\override Score.TextMark.self-alignment-X = #CENTER % Le repère textuel s'alignera % sur la gauche de l'armure % puis décalé de 3,5 espaces de portée vers la droite \override Score.TextMark.break-align-symbols = #'(key-signature) \once \override Score.KeySignature.break-align-anchor = #3.5 \key a \major \textMark "↓" e'1 % Le repère textuel s'alignera % sur la gauche de l'armure % puis sera décalé de 2 espaces de portée vers la gauche \once \override Score.KeySignature.break-align-anchor = #-2 \key a \major \textMark "↓" e'1