+ @menu
+* Automatic behavior::
+* Within-staff objects::
+* Outside staff objects::
+@end menu
+
+@node Automatic behavior
+@subsection Automatic behavior
+
+@cindex within-staff objects
+@cindex outside-staff objects
+@cindex objects, within-staff
+@cindex objects, outside-staff
+
+Dans la notation musicale, il y a des objets qui appartiennent à la
+portée et d'autres qui sont placés à l'extérieur de la portée. On les
+appelle respectivement les @q{objets de la portée} (@emph{within-staff
+objects} en anglais) et les @q{objets extérieurs à la portée}
+(@emph{outside-staff objects}en anglais).
+
+Les objets de la portée sont ceux qui sont placés sur la portée
+-- les têtes de notes et les hampes, les altérations, etc. Leur
+position est généralement déterminée par la musique elle-même -- ils
+sont placés verticalement sur des lignes spécifiques ou sont liés à
+d'autres objets placés de cette manière. Normalement, les collisions
+entre les têtes et queues de notes et les altérations dans des accords
+proches sont évitées automatiquement. Comme nous le verrons rapidement,
+il existe des commandes et des possibilités de retouches qui permettent
+de modifier ce comportement automatique.
+
+Parmi les objets extérieurs à la portée, on compte des éléments comme
+les marques de reprise, les indications de texte ou de nuances. Dans
+LilyPond, la règle est de placer verticalement ces objets extérieurs à
+la portée le plus près possible de la portée, tout en évitant la
+collision avec d'autres objets. LilyPond utilise la propriété
+@code{outside-staff-priority} pour déterminer l'ordre selon lequel
+placer ces objets, de la manière suivante :
+
+D'abord, LilyPond dresse la liste de tous les objets extérieurs à la
+portée. Puis ceux-ci sont classés suivant leur
+@code{outside-staff-priority}. Enfin, ils sont pris un par un, en
+commençant par les objets avec la @code{outside-staff-priority} la plus
+basse, et placés de façon à ne pas entrer en collision avec d'autres
+objets déjà placés. Cela signifie que, si deux @emph{grobs} extérieurs
+à la portée doivent occuper la même place, c'est celui qui a la
+@code{outside-staff-priority} la plus basse qui est placé le plus près
+de la portée. Et si deux objets ont la même
+@code{outside-staff-priority}, le premier rencontré sera placé le plus
+près de la portée.
+
+Dans l'exemple suivant, tous les @emph{markup} ont la même priorité,
+dans la mesure où rien n'est indiqué explicitement. Vous remarquerez
+que @code{Text3} est également positionné près de la portée, juste
+en-dessous de @code{Text2}.
+
+@cindex markup, exemple
+
+@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
+c2^"Text1"
+c^"Text2"
+c^"Text3"
+c^"Text4"
+@end lilypond
+
+Les portées aussi sont positionnées, par défaut, le plus près possible
+les unes des autres, en ménageant tout de même une certaine séparation.
+Si des notes se rapprochent nettement d'une portée adjacente, elles ne
+forceront les portées à s'écarter que s'il y a un risque de
+chevauchement.
+
+@lilypond[quote,ragged-right,verbatim]
+<<
+ \new Staff {
+ \relative c' { c a, }
+ }
+ \new Staff {
+ \relative c'''' { c a, }
+ }
+>>
+@end lilypond
+
+
+@node Within-staff objects
+@subsection Within-staff objects
+
+Nous avons vu que les commandes @code{\voiceXXX} jouent sur la
+direction des liaisons, des doigtés et sur toute autre chose liée à
+l'orientation des queues de notes. Ces commandes sont essentielles dans
+la musique polyphonique pour distinguer des lignes mélodiques
+entremêlées. Mais il arrive qu'on ait besoin de modifier ce comportement
+automatique. On peut le faire pour toutes les parties de la musique ou
+juste pour une note. La propriété qui contrôle ce comportement est la
+propriété @code{direction} de chaque objet. Expliquons d'abord ce
+qu'elle fait, puis nous présenterons un certain nombre de commandes
+déjà prêtes qui évitent, pour les modifications les plus courantes,
+d'avoir à encoder les retouches.
+
+Certains objets comme les traits des liaisons se recourbent tantôt
+vers le haut, tantôt vers le bas ; d'autres encore, comme les hampes
+et les crochets, peuvent se décaler vers la gauche ou vers la droite
+selon qu'ils pointent vers le haut ou vers le bas. Ce comportement est
+géré automatiquement dès lors que @code{direction} est activé.
+
+@cindex down
+@cindex up
+@cindex center
+@cindex neutral
+
+L'exemple ci-dessous montre dans la première mesure le comportement par
+défaut des hampes -- celles des notes les plus hautes pointant vers le
+bas et celles des notes les plus basses pointant vers le haut ; viennent
+ensuite quatre notes avec les hampes forcées vers le bas, puis quatre
+autres avec les hampes forcées vers le haut, et pour finir quatre notes
+de nouveau avec le comportement par défaut.
+
+@cindex Stem, exemple de dérogation
+@cindex direction, exemple de propriété
+
+@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
+a4 g c a
+\override Stem #'direction = #DOWN
+a g c a
+\override Stem #'direction = #UP
+a g c a
+\revert Stem #'direction
+a g c a
+@end lilypond
+
+Nous utilisons ici les directions @code{DOWN} et @code{UP}. Elles
+correspondent respectivement aux valeurs @code{-1} et @code{+1},
+que l'on peut utiliser à la place. La valeur @code{0} peut aussi être
+utilisée dans certains cas. Elle est interprétée comme un @code{UP}
+pour les hampes, et comme un @q{centré} pour d'autres objets. Il
+existe une direction, @code{CENTER}, qui correspond à la valeur
+@code{0}.
+
+Quoi qu'il en soit, ces retouches manuelles sont rarement utilisées car
+il existe des équivalents sous forme de commandes prédéfinies. Voici un
+tableau des plus courantes. Lorsque ce n'est pas évident, leur
+signification est précisée.
+
+@multitable @columnfractions .2 .2 .25 .35
+@headitem Bas/Gauche
+ @tab Haut/Droite
+ @tab Annulation
+ @tab Effet
+@item @code{\arpeggioArrowDown}
+ @tab @code{\arpeggioArrowUp}
+ @tab @code{\arpeggioNormal}
+ @tab Flèche en bas, en haut, ou pas de flèche
+@item @code{\dotsDown}
+ @tab @code{\dotsUp}
+ @tab @code{\dotsNeutral}
+ @tab Déplacement des points pour éviter les lignes de portée
+@item @code{\dynamicDown}
+ @tab @code{\dynamicUp}
+ @tab @code{\dynamicNeutral}
+ @tab
+@item @code{\phrasingSlurDown}
+ @tab @code{\phrasingSlurUp}
+ @tab @code{\phrasingSlurNeutral}
+ @tab Attention : à distinguer des commandes de liaison ci-dessous
+@item @code{\slurDown}
+ @tab @code{\slurUp}
+ @tab @code{\slurNeutral}
+ @tab
+@item @code{\stemDown}
+ @tab @code{\stemUp}
+ @tab @code{\stemNeutral}
+ @tab
+@item @code{\textSpannerDown}
+ @tab @code{\textSpannerUp}
+ @tab @code{\textSpannerNeutral}
+ @tab Le texte saisi en tant qu'extension est au-dessous/au-dessus de la portée
+@item @code{\tieDown}
+ @tab @code{\tieUp}
+ @tab @code{\tieNeutral}
+ @tab
+@item @code{\tupletDown}
+ @tab @code{\tupletUp}
+ @tab @code{\tupletNeutral}
+ @tab Les nolets sont au-dessous/au-dessus des notes
+@end multitable
+
+Attention : ces commandes prédéfinies @strong{ne doivent pas} être
+précédées de @code{\once}. Pour limiter l'effet à une seule note, il
+faut soit utiliser la commande équivalente @code{\once \override}, soit
+utiliser la commande prédéfinie, suivie, après la note à modifier, de la
+commande @code{\xxxNeutral} correspondante.
+
+@subheading Fingering
+
+@cindex doigtés, positionnement
+@cindex doigtés, accords
+
+Le placement des doigtés sur des notes simples peut aussi être contrôlé
+par la propriété @code{direction}, mais le changement de
+@code{direction} n'a pas d'effet sur les accords. Comme nous le
+verrons, il existe des commandes qui permettent de contrôler le doigté
+sur chaque note d'un accord, en plaçant l'indication de doigté
+au-dessus, en dessous, à gauche ou à droite de chaque note.
+
+Tout d'abord, voici l'effet de @code{direction} sur le doigté lié à une
+note simple. La première mesure montre le comportement par défaut, et
+les deux suivantes montrent l'effet lorsqu'on indique @code{DOWN} et
+@code{UP} :
+
+@cindex doigtés, exemple de dérogation
+@cindex direction, exemple de propriété
+
+@lilypond[quote,verbatim,relative=2]
+c-5 a-3 f-1 c'-5
+\override Fingering #'direction = #DOWN
+c-5 a-3 f-1 c'-5
+\override Fingering #'direction = #UP
+c-5 a-3 f-1 c'-5
+@end lilypond
+
+Le fait d'intervenir sur la propriété @code{direction} n'est sûrement
+pas la façon la plus simple de placer manuellement les doigtés au-dessus
+ou en dessous des notes ; mieux vaut utiliser @code{_} ou @code{^}
+devant le chiffre de doigté plutôt que @code{-}. Voici ce que donne
+l'exemple précédent avec cette méthode :
+
+@cindex doigtés, exemple
+
+@lilypond[quote,verbatim,relative=2]
+c-5 a-3 f-1 c'-5
+c_5 a_3 f_1 c'_5
+c^5 a^3 f^1 c'^5
+@end lilypond
+
+La propriété @code{direction} ne fonctionne pas pour les accords alors
+que les préfixes de direction, @code{_} et @code{^}, fonctionnent. Par
+défaut, le doigté est placé automatiquement à la fois au-dessus et
+au-dessous des notes d'un accord, comme ceci :
+
+@cindex doigtés, exemple
+
+@lilypond[quote,verbatim,relative=2]
+<c-5 g-3>
+<c-5 g-3 e-2>
+<c-5 g-3 e-2 c-1>
+@end lilypond
+
+@noindent
+mais il est possible de forcer manuellement vers le haut ou vers le bas le
+placement de tous ou certains chiffres de doigté, comme ceci :
+
+@cindex doigtés, exemple
+
+@lilypond[quote,verbatim,relative=2]
+<c-5 g-3 e-2 c-1>
+<c^5 g_3 e_2 c_1>
+<c^5 g^3 e^2 c_1>
+@end lilypond
+
+On peut aller encore plus loin dans le positionnement des doigtés pour
+chacune des notes d'un accord grâce à la commande @code{\set
+fingeringOrientations}. La syntaxe de cette commande est :
+
+@example
+@code{\set fingeringOrientations = #'([up] [left/right] [down])}
+@end example
+
+@noindent
+On utilise @code{\set} car @code{fingeringOrientations} est une propriété
+du contexte @code{Voice}, créée et utilisée par le graveur
+@code{New_fingering_engraver}.
+
+On peut attribuer à cette propriété une liste composée de une à trois
+valeurs. Celles-ci déterminent si l'indication de doigté doit être
+placée au-dessus (lorsque @code{up} apparaît dans la liste), au-dessous
+(lorsque @code{down} apparaît), à gauche (lorsque @code{left} apparaît)
+ou à droite (lorsque @code{right} apparaît). En revanche, si une valeur
+n'est pas sur la liste, aucun doigté n'ira à cet emplacement. LilyPond
+garde ces contraintes en mémoire et recherche le meilleur emplacement
+pour le doigté des notes des accords suivants. Vous remarquerez que
+@code{left} et @code{right} s'excluent l'un l'autre -- l'indication de
+doigté ne peut être placée que d'un côté ou de l'autre, pas des deux.
+
+@warning{Ppour contrôler à l'aide de cette commande le placement du
+doigté sur une note simple, il faut la saisir comme un accord composé
+d'une note unique, en l'encadrant de chevrons.}
+
+Voici quelques exemples :
+
+@cindex doigtés, exemple
+@cindex @code{\set}, exemple d'utilisation
+@cindex fingeringOrientations, exemple de propriété
+
+@lilypond[quote,fragment,ragged-right,verbatim,relative=1]
+\set fingeringOrientations = #'(left)
+<f-2>
+< c-1 e-2 g-3 b-5 > 4
+\set fingeringOrientations = #'(left)
+<f-2>
+< c-1 e-2 g-3 b-5 > 4
+\set fingeringOrientations = #'(up left down)
+<f-2>
+< c-1 e-2 g-3 b-5 > 4
+\set fingeringOrientations = #'(up left)
+<f-2>
+< c-1 e-2 g-3 b-5 > 4
+\set fingeringOrientations = #'(right)
+<f-2>
+< c-1 e-2 g-3 b-5 > 4
+@end lilypond
+
+@noindent
+Si les indications de doigtés paraissent un peu serrées, on peut
+toujours réduire la taille de police (@code{font-size}). La valeur
+par défaut donnée dans la RPI à la page de l'objet
+@code{Fingering} étant @code{-5}, essayons @code{-7} :
+
+@lilypond[quote,fragment,ragged-right,verbatim,relative=1]
+\override Fingering #'font-size = #-7
+\set fingeringOrientations = #'(left)
+<f-2>
+< c-1 e-2 g-3 b-5 > 4
+\set fingeringOrientations = #'(left)
+<f-2>
+< c-1 e-2 g-3 b-5 > 4
+\set fingeringOrientations = #'(up left down)
+<f-2>
+< c-1 e-2 g-3 b-5 > 4
+\set fingeringOrientations = #'(up left)
+<f-2>
+< c-1 e-2 g-3 b-5 > 4
+\set fingeringOrientations = #'(right)
+<f-2>
+< c-1 e-2 g-3 b-5 > 4
+@end lilypond
+
+
+@node Outside staff objects
+@subsection Outside staff objects
+
+Les objets extérieurs à la portée sont placés automatiquement de façon à
+éviter les collisions. Les objets avec la plus petite valeur de la
+propriété @code{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 @code{outside-staff-priority} est définie dans la
+@code{grob-interface} ; elle est donc une propriété commune à tous les
+objets de rendu. Par défaut, elle est réglée sur @code{#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.
+Le tableau suivant montre la valeur numérique par défaut pour
+quelques-uns des objets extérieurs à la portée les plus courants qui
+sont placés, par défaut, dans les contextes @code{Staff} ou
+@code{Voice}.
+
+@multitable @columnfractions .3 .3 .3
+@headitem Objet de rendu
+ @tab Priorité
+ @tab Contrôle la position de :
+@item @code{MultiMeasureRestText}
+ @tab @code{450}
+ @tab Texte sur les silences qui couvrent des mesures entières
+@item @code{TextScript}
+ @tab @code{450}
+ @tab Texte des @emph{markup} (ou étiquettes)
+@item @code{OttavaBracket}
+ @tab @code{400}
+ @tab Indication d'octaviation
+@item @code{TextSpanner}
+ @tab @code{350}
+ @tab Bandeau ou extension de texte
+@item @code{DynamicLineSpanner}
+ @tab @code{250}
+ @tab Toutes les marques de nuances
+@item @code{VoltaBracketSpanner}
+ @tab @code{100}
+ @tab Bandeau de répétition
+@item @code{TrillSpanner}
+ @tab @code{50}
+ @tab Bandeau de trille
+@end multitable
+
+Voici un exemple qui montre le placement par défaut de certains
+d'entre eux.
+
+@cindex text spanner
+@cindex ottava bracket
+
+@funindex \startTextSpan
+@funindex startTextSpan
+@funindex \stopTextSpan
+@funindex stopTextSpan
+
+@cindex TextSpanner, exemple de dérogation
+@cindex bound-details, exemple de propriété
+
+@lilypond[quote,fragment,ragged-right,verbatim,relative=1]
+% 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' \startTextSpan
+% Add Dynamic Text
+c\pp
+% Add Dynamic Line Spanner
+c\<
+% Add Text Script
+c^Text
+c c
+% Add Dynamic Text
+c\ff c \stopTextSpan
+% Stop Ottava Bracket
+\ottava #0
+c, c c c
+@end lilypond
+
+Cet exemple montre comment créer des extensions de texte (@emph{Text
+Spanners} en anglais ) -- texte avec des longues lignes au-dessus d'un
+passage musical. L'extension s'étend depuis la commande
+@code{\startTextSpan} jusqu'à la commande @code{\stopTextSpan} et le
+format de texte est défini par la commande @code{\override TextSpanner}.
+Pour de plus amples détails, voir @ruser{Text spanners}.
+
+Il montre aussi comment créer des marques d'octaviation.
+
+@cindex modification du positionnement des numéros de mesure
+@cindex numéros de mesure, modification du positionnement
+@cindex modification du positionnement des indications métronomiques
+@cindex indications métronomiques, modification du positionnement
+@cindex modification du positionnement des marques de repère
+@cindex marques de repère, modification du positionnement
+
+Vous aurez remarqué que les numéros de mesure, l'indication métronomique
+et les marques de répétition n'apparaissent pas. Par défaut, ils sont
+créés dans le contexte @code{Score} et leur
+@code{outside-staff-priority} est ignorée face aux objets qui sont créés
+dans le contexte @code{Staff}. Si vous voulez faire apparaître les
+numéros de mesure, l'indication métronomique ou les marques de
+répétition conformément à la valeur de leur
+@code{outside-staff-priority}, il vous faudra retirer respectivement le
+@code{Bar_number_engraver}, le @code{Metronome_mark_engraver} oule
+@code{Mark_engraver} du contexte @code{Score} et les placer en haut du
+contexte @code{Staff}. Après quoi ces marques porteront les valeurs de
+@code{outside-staff-priority} par défaut suivantes :
+
+@multitable @columnfractions .3 .3
+@headitem Objet de rendu @tab Priorité
+@item @code{RehearsalMark} @tab @code{1500}
+@item @code{MetronomeMark} @tab @code{1000}
+@item @code{BarNumber} @tab @code{ 100}
+@end multitable
+
+Si les valeurs de @code{outside-staff-priority} par défaut ne donnent
+pas les résultats que vous attendez, 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
+@code{OttavaBracket} dans la RPI ou dans le tableau plus haut, et la
+ramener à une valeur plus basse que celle de @code{TextSpanner}, en
+gardant à l'esprit que @code{OttavaBracket} est créé dans le contexte
+@code{Staff} :
+
+@cindex TextSpanner, exemple de dérogation
+@cindex bound-details, exemple de propriété
+
+@lilypond[quote,fragment,ragged-right,verbatim,relative=1]
+% 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' \startTextSpan
+% Add Dynamic Text
+c\pp
+% Add Dynamic Line Spanner
+c\<
+% Add Text Script
+c^Text
+c c
+% Add Dynamic Text
+c\ff c \stopTextSpan
+% Stop Ottava Bracket
+\ottava #0
+c, c c c
+@end lilypond
+
+Le fait de changer la @code{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 @qq{Text3} au-dessus de @qq{Text4} dans l'exemple de la section
+Comportement automatique, plus haut (voir @ref{Automatic behavior}). Il
+nous suffit pour cela de regarder dans la RPI ou dans le tableau plus
+haut la priorité de @code{TextScript}, et d'augmenter la priorité de
+@qq{Text3} jusqu'à une valeur très haute :
+
+@cindex TextScript, exemple de dérogation
+@cindex outside-staff-priority, exemple de propriété
+
+@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
+c2^"Text1"
+c^"Text2"
+\once \override TextScript #'outside-staff-priority = #500
+c^"Text3"
+c^"Text4"
+@end lilypond
+
+S'il est vrai que cela place @qq{Text3} au-dessus de @qq{Text4}, ça le
+place aussi plus haut que @qq{Text2} tandis que @qq{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 @code{textLengthOn}.
+
+@subheading \textLengthOn
+
+@cindex notes, répartition selon le texte
+
+@funindex \textLengthOn
+@funindex textLengthOn
+@funindex \textLengthOff
+@funindex textLengthOff
+
+Par défaut, l'espacement horizontal d'un texte produit sous forme de
+@emph{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
+@code{\textLengthOn} inverse ce comportement, faisant en sorte que les
+notes soient espacées autant qu'il faut pour s'adapter au texte :
+
+@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
+\textLengthOn % Cause notes to space out to accommodate text
+c2^"Text1"
+c^"Text2"
+c^"Text3"
+c^"Text4"
+@end lilypond
+
+La commande qui permet de revenir au comportement par défaut est
+@code{\textLengthOff}. Rappelez-vous que @code{\once} ne
+fonctionne qu'avec @code{\override}, @code{\set}, @code{\revert} ou
+@code{\unset}, et donc ne peut pas être utilisé avec
+@code{\textLengthOn}.
+
+@cindex markup text, allowing collisions
+
+Les textes des @emph{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 @code{#f}. Voici un exemple qui
+montre comment les textes des @emph{markup} interagissent avec ces types
+de notes.
+
+@cindex TextScript, exemple de dérogation
+@cindex outside-staff-priority, exemple de propriété
+
+@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
+% This markup is short enough to fit without collision
+c2^"Tex"
+c''2
+R1
+% This is too long to fit, so it is displaced upwards
+c,,2^"Text"
+c''2
+R1
+% Turn off collision avoidance
+\once \override TextScript #'outside-staff-priority = ##f
+c,,2^"Long Text "
+c''2
+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
+@end lilypond
+
+
+@subheading Dynamics
+
+@cindex modifier le positionnement des nuances
+@cindex nuances, modifier le positionnement
+
+Les indications de nuances se placent normalement sous la portée mais on
+peut les placer au-dessus avec la commande @code{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 :
+
+@lilypond[quote,fragment,ragged-right,verbatim,relative=1]
+\clef "bass"
+\key aes \major
+\time 9/8
+\dynamicUp
+bes4.~\f\< \( bes4 bes8 des4\ff\> c16 bes\! |
+ees,2.~\)\mf ees4 r8 |
+@end lilypond
+
+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 :
+
+@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
+\dynamicUp
+a4\f b\mf c\mp b\p
+@end lilypond
+
+@noindent
+Si une telle situation devait survenir dans de la musique @qq{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. Il était possible de faire cela pour les textes de
+@emph{markup} grâce à la commande @code{\textLengthOn} mais il n'existe
+pas d'équivalent pour les indications de nuance. Il nous faut donc
+chercher à faire cela avec la commande @code{\override}.
+
+@subheading Grob sizing
+
+@cindex grob, dimensionnement
+@cindex dimensionnement des grobs
+
+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, @code{X-offset},
+et à une distance verticale, @code{Y-offset}, de son parent.
+L'étendue horizontale de l'objet est fixée par une paire de
+nombres, @code{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'étendue verticale est fixée par une paire de nombre,
+@code{Y-extent}. Ce sont des propriétés communes à tous les
+grobs et que gère la @code{grob-interface}.
+
+@cindex @code{extra-spacing-width}
+
+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 arriver à cela, on a ajouté l'infini à
+l'extension gauche et moins l'infini à l'extension droite, en
+attribuant à @code{extra-spacing-width} la valeur
+ @code{'(+inf.0 . -inf.0)}. Pour être sûr que les objets ne se
+chevaucheront pas horizontalement, nous devons donc corriger
+cette valeur de @code{extra-spacing-width} en @code{'(0 . 0)},
+afin que leur vraie largeur se manifeste. La commande pour y
+parvenir avec des indications de nuances est :
+
+@example
+\override DynamicText #'extra-spacing-width = #'(0 . 0)
+@end example
+
+@noindent
+Voyons si ça marche sur notre exemple précédent :
+
+@cindex DynamicText, example of overriding
+@cindex extra-spacing-width property, example
+
+@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
+\dynamicUp
+\override DynamicText #'extra-spacing-width = #'(0 . 0)
+a4\f b\mf c\mp b\p
+@end lilypond
+
+@noindent
+Bon, cela a mis un terme aux déplacements verticaux des
+nuances mais il reste deux problèmes. Il faudrait que les
+nuances soient un peu plus écartées et ce serait mieux si
+elles étaient toutes à la même distance de la portée. Le
+premier problème est simple à résoudre. Au lieu d'attribuer
+à @code{extra-spacing-width} la valeur zéro, nous pourrions
+mettre un peu plus. L'unité est la distance entre deux lignes
+de portée, donc en écartant le bord gauche d'une demi-unité
+et le bord droit d'une demi-unité, on obtient :
+
+@cindex DynamicText, example of overriding
+@cindex extra-spacing-width property, example
+
+@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
+\dynamicUp
+% Extend width by 1 staff space
+\override DynamicText #'extra-spacing-width = #'(-0.5 . 0.5)
+a4\f b\mf c\mp b\p
+@end lilypond
+
+@noindent
+C'est mieux mais nous voulons peut-être aligner les indications de
+nuances 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
+@code{staff-padding} ; la section suivante lui est consacrée.
+
+
+@node Collisions of objects
+@section Collisions of objects
+
+
+@menu
+* Moving objects::
+* Fixing overlapping notation::
+* Real music example::
+@end menu
+
+@node Moving objects
+@subsection Moving objects
+
+Aussi surprenant que cela puisse paraître, LilyPond n'est pas parfait.
+Certains éléments sur la partition peuvent se chevaucher, ce qui est
+regrettable mais, le plus souvent, facile à corriger. En général, quand
+on déplace des objets, c'est pour des raisons de lisibilité ou
+d'esthétique -- ils rendraient mieux avec un peu plus ou un peu moins
+d'espace autour d'eux.
+
+Il y a trois façons de résoudre les problèmes de chevauchement. Il est
+préférable de les aborder dans l'ordre suivant :
+
+@enumerate
+@item
+L'@strong{orientation} d'un objet qui en chevauche un autre peut être
+changée grâce aux commandes prédéfinies dont la liste a été donnée
+plus haut à propos des objets de portée (voir @ref{Within-staff objects}).
+Les queues de notes, les liaisons de phrasé et de prolongation, les
+crochets, les nuances et les nolets peuvent facilement être repositionnés
+de cette manière. En contrepartie, vous n'avez le choix qu'entre deux
+positions, sans personnalisation possible.
+
+@item
+Les @strong{propriétés d'objet}, auxquelles LilyPond a recours pour
+positionner les objets, sont modifiables avec @code{\override}. Il y a deux
+avantages à changer ces propriétés : (a) d'autres objets pourront être
+déplacés automatiquement si nécessaire pour faire de la place, et (b)
+la même retouche peut s'appliquer à toutes les occurrences du même
+type d'objet. Ces propriétés sont :
+
+@itemize
+
+@item
+@code{direction}
+
+Ce point a déjà été traité en détails -- voir @ref{Within-staff objects}.
+
+@item
+@code{padding}, @code{left-padding},
+@code{right-padding}, @code{staff-padding}
+
+@cindex padding
+@cindex left-padding property
+@cindex padding property
+@cindex right-padding property
+@cindex staff-padding property
+
+Au moment de positionner un objet, la valeur de sa propriété
+@code{padding} détermine l'espace à laisser libre entre celui-ci et le
+coin le plus proche de l'objet à côté duquel il est placé. Vous remarquerez
+que c'est la valeur @code{padding} de l'objet @strong{à placer} qui
+compte ; la valeur @code{padding} de l'objet déjà placé est ignorée.
+Les espaces libres déterminés par @code{padding} s'appliquent à tous
+les objets associés à la @code{side-position-interface}.
+
+Le positionnement de groupes d'altérations est contrôlé par
+@code{left-padding} et @code{right-padding}, et non plus @code{padding}.
+Ces propriétés appartiennent à l'objet @code{AccidentalPlacement}, qui,
+vous le remarquerez, prend place dans le contexte @strong{Staff}. Dans le
+processus de composition, les têtes de notes sont composées en premier,
+puis les altérations, s'il y en a, sont ajoutées à gauche des têtes de notes
+suivant la propriété @code{right-padding} qui détermine l'espacement par
+rapport aux têtes de notes. C'est pourquoi seule la propriété
+@code{right-padding} de l'objet @code{AccidentalPlacement} joue sur le
+positionnement des altérations.
+
+La propriété @code{staff-padding} est très proche de la propriété
+@code{padding} : @code{padding} contrôle l'espace minimum entre un
+objet qui accepte la @code{side-position-interface} et l'objet le plus
+proche (généralement une note ou une ligne de portée) ; @code{staff-padding}
+ne s'applique qu'aux objets qui sont toujours placés en-dehors de la portée --
+il contrôle l'espace minimum à insérer entre l'objet et la portée. Attention :
+par défaut, @code{staff-padding} concerne les objets positionnés par rapport
+à la portée et n'a aucun effet sur les objets qui sont positionnés par
+rapport à une note ; il est toutefois possible de le régler pour
+fonctionner avec ces derniers.
+
+Pour trouver quelle propriété @q{padding} employer pour l'objet que vous
+cherchez à repositionner, il vous faut consulter les propriétés de l'objet dans
+la RPI. Prenez garde que les propriétés @q{padding} ne sont pas forcément
+traitées dans l'objet en question ; il faut alors regarder les objets
+qui semblent s'en rapprocher.
+
+Toutes les valeurs @q{padding} sont exprimées en espaces de portée.
+Pour la plupart des objets, la valeur par défaut est aux alentours de 1.0,
+parfois moins (cela dépend de chaque objet). Il est possible de la modifier
+lorsqu'on a besoin d'un espace vide plus grand (ou plus petit).
+
+
+@item
+@code{self-alignment-X}
+
+@cindex self-alignment-X property
+Cette propriété sert à aligner les objets sur la gauche, sur la droite ou
+à les centrer par rapport au point de référence des objets parents.
+Elle peut être utilisée avec tous les objets qui acceptent la
+@code{self-alignment-interface}. Il s'agit, en général, des objets qui
+contiennent du texte. Les valeurs admises sont @code{LEFT},
+@code{RIGHT} et @code{CENTER}. On peut aussi attribuer à
+la place une valeur numérique entre @code{-1} et @code{+1},
+où @code{-1} signifie alignement sur la gauche, @code{+1}
+alignement sur la droite, et les nombres intermédiaires déplacent
+progressivement le texte de la gauche vers la droite. Des valeurs
+numériques supérieures à @code{1} sont également admises
+pour déplacer le texte encore plus loin vers la gauche, ou des
+valeurs inférieures à @code{-1} pour déplacer le texte encore
+plus loin vers la droite. Un écart de @code{1} en valeur
+correspond à un déplacement de la moitié de la longueur du
+texte.
+
+@item
+@code{extra-spacing-width}
+
+@cindex extra-spacing-width property
+Cette propriété est utilisée pour tous les objets qui acceptent la
+@code{item-interface}. Elle reçoit deux nombres, le premier étant
+ajouté au bord gauche et le second au bord droit. Des nombres
+négatifs déplacent le coin vers la gauche, des nombres positifs
+vers la droite, si bien que pour élargir un objet, le premier nombre
+doit être négatif et le second positif. Attention : tous les objets
+n'acceptent pas forcément les deux nombres. Par exemple, l'objet
+@code{Accidental} ne retient que le premier nombre (coin gauche).
+
+
+@item
+@code{staff-position}
+
+@cindex staff-position property
+@code{staff-position} est une propriété de la
+@code{staff-symbol-referencer-interface}, qui s'applique aux objets
+positionnés par rapport à la portée. Elle indique, en demi-espaces de
+portée, la position verticale des objets par rapport à la ligne médiane
+de la portée. C'est bien pratique pour résoudre des problèmes de
+collision entre des objets comme les silences valant mesure entière,
+les liaisons et les notes de différentes voix.
+
+@item
+@code{force-hshift}
+
+@cindex force-hshift property
+Des notes très proches dans un accord, ou des notes simultanées dans
+différentes voix, peuvent être disposées sur deux colonnes, rarement
+plus, pour éviter que les têtes de notes ne se chevauchent. On parle
+alors de colonnes de notes et un objet appelé @code{NoteColumn}
+est créé pour placer les notes sur la colonne.
+
+La propriété @code{force-hshift} appartient à @code{NoteColumn} (en
+réalité à la @code{note-column-interface}). Le fait de la modifier permet
+de déplacer une colonne de notes selon l'unité appropriée aux colonnes
+de notes, à savoir la largeur des têtes de notes de la première voix. Son
+utilisation est réservée à des situations complexes dans lesquelles les
+commandes habituelles @code{\shiftOn}
+(voir @ref{Explicitly instantiating voices}) ne suffisent plus à résoudre les
+conflits. Elle est alors préférable à l'utilisation de la propriété
+@code{extra-offset}, dans la mesure où on n'a pas besoin d'exprimer
+la distance en espaces de portée et où le fait de déplacer les notes à
+l'intérieur ou à l'extérieur d'une @code{NoteColumn} affecte d'autres
+actions comme les fusionnements de notes.
+
+@end itemize
+
+@item
+Pour terminer, quand toutes les autres méthodes ont échoué, il est
+possible de repositionner verticalement les objets à la main par rapport
+à la ligne médiane de la portée, ou en les déplaçant à une distance
+donnée vers une nouvelle position. Les inconvénients sont qu'il faut
+individuellement pour chaque objet trouver les valeurs correctes de
+repositionnement, souvent par tâtonnement, et que, puisque le
+mouvement est opéré après que LilyPond a placé tous les autres
+objets, c'est à l'utilisateur de résoudre tous les problèmes de collisions
+qui pourraient survenir. Et le pire avec cette méthode est que, le jour
+où la musique est modifiée, il faut de nouveau rechercher les
+valeurs de repositionnement. Les propriétés à utiliser pour ce type de
+repositionnement manuel sont :
+
+
+@table @code
+@item extra-offset
+
+@cindex extra-offset property
+Cette propriété s'applique à tout objet acceptant la @code{grob-interface}.
+Elle reçoit une paire de nombre qui indiquent le déplacement supplémentaire
+dans le sens horizontal et vertical. Des nombres négatifs déplacent l'objet
+vers la gauche ou vers la droite. L'unité utilisée est l'espace de portée. Le
+déplacement supplémentaire intervient une fois que la composition des
+objets est achevée, si bien qu'un objet peut être repositionné à n'importe
+quel endroit sans que ça perturbe quoi que ce soit.
+
+@item positions
+
+@cindex positions property
+Cette propriété est très utile pour ajuster manuellement l'inclinaison et
+la hauteur des barres de croches, des liaisons et des nolets. Elle est
+suivie de deux nombres qui donnent la position des bords gauche et
+droit des barres, liaisons, etc., par rapport à la ligne médiane de la
+portée. L'unité de référence est l'intervalle de lignes de portée. Attention
+toutefois au fait que les liaisons et phrasés ne peuvent pas être repositionnés
+n'importe où. LilyPond commence par dresser la liste des emplacements
+possibles pour les liaisons et choisit par défaut la liaison qui @qq{semble
+la meilleure}. Si la propriété @code{positions} a été retouchée, la
+liaison la plus proche de la position demandée sera retenue dans la
+liste.
+@end table
+
+@end enumerate
+
+Il est possible qu'un objet ne dispose pas de toutes ces propriétés. Il
+est donc nécessaire de consulter la RPI pour vérifier quelles sont les
+propriétés disponibles pour l'objet en question.
+
+Voici une liste d'objets les plus couramment impliqués dans les
+collisions, avec le nom de l'objet à consulter dans la RPI afin de trouver
+les propriétés à retoucher pour obtenir un déplacement.
+
+
+@multitable @columnfractions .5 .5
+@headitem Type d'objet @tab Nom d'objet
+@item Articulations @tab @code{Script}
+@item Barres de croches @tab @code{Beam}
+@item Doigté @tab @code{Fingering}
+@item Liaisons de phrasé @tab @code{Slur}
+@item Liaisons de prolongation @tab @code{Tie}
+@item Nolets @tab @code{TupletBracket}
+@item Nuances (verticalement) @tab @code{DynamicLineSpanner}
+@item Nuances (horizontalement) @tab @code{DynamicText}
+@item Reprises / marques de texte @tab @code{RehearsalMark}
+@item Texte, p.ex. @code{^"texte"} @tab @code{TextScript}
+@end multitable
+
+
+@node Fixing overlapping notation
+@subsection Fixing overlapping notation
+
+Voyons maintenant comment les propriétés décrites dans la section
+précédente peuvent nous aider à résoudre les collisions.
+
+@subheading padding property
+
+@cindex padding
+@cindex fixing overlapping notation
+@cindex overlapping notation
+
+En jouant sur la propriété @code{padding} (littéralement
+@q{rembourrage}), on augmente (ou on diminue) la distance entre
+des symboles qui sont imprimés au-dessus ou en dessous des notes.
+
+@cindex Script, example of overriding
+@cindex padding property, example
+
+@lilypond[quote,fragment,relative=1,verbatim]
+c2\fermata
+\override Script #'padding = #3
+b2\fermata
+@end lilypond
+
+@cindex MetronomeMark, example of overriding
+@cindex padding property, example
+
+@lilypond[quote,fragment,relative=1,verbatim]
+% This will not work, see below:
+\override MetronomeMark #'padding = #3
+\tempo 4=120
+c1
+% This works:
+\override Score.MetronomeMark #'padding = #3
+\tempo 4=80
+d1
+@end lilypond
+
+Vous remarquerez dans le second exemple à quel point il est important de
+préciser le nom du contexte qui contient l'objet. Puisque l'objet
+@code{MetronomeMark} appartient au contexte @code{Score}, le fait de
+modifier la propriété dans le contexte @code{Voice} passera inaperçu.
+Pour plus de détails, voir @ruser{Modifying properties}.
+
+Si on augmente la propriété @code{padding} d'un objet alors que celui-ci
+fait partie d'un ensemble d'objets positionnés en fonction de leur
+@code{outside-staff-priority}, cet objet sera déplacé, ainsi que tous les
+autres objets du groupe.
+
+@subheading left-padding and right-padding
+
+@cindex left-padding property
+@cindex right-padding property
+
+La propriété @code{right-padding} joue sur l'espacement entre une
+altération et la note sur laquelle elle porte. On ne l'utilise pas souvent,
+mais l'exemple ci-dessous montre une situation où elle est nécessaire.
+Imaginons que nous voulions faire apparaître un accord qui contienne
+à la fois un si bécarre et un si bémol. Pour qu'il n'y ait pas de doute,
+nous chercherions à précéder la note d'un signe bécarre et d'un signe
+bémol. Voici différentes tentatives pour y parvenir :
+
+@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
+<b bes>
+<b! bes>
+<b? bes>
+@end lilypond
+
+Pas une ne convient, et la seconde se solde même par une collision
+entre les deux signes.
+
+Une solution pour arriver à nos fins consiste à retoucher le stencil des
+altérations grâce à un markup qui contient les symboles bécarre et
+bémol, dans l'ordre que nous souhaitons, comme ceci :
+
+@cindex Accidental, example of overriding
+@cindex text property, example
+@cindex stencil property, example
+@cindex AccidentalPlacement, example of overriding
+@cindex right-padding property, example
+
+@lilypond[quote,ragged-right,verbatim]
+naturalplusflat = \markup { \natural \flat }
+\relative c'' {
+ \once \override Accidental
+ #'stencil = #ly:text-interface::print
+ \once \override Accidental #'text = #naturalplusflat
+ \once \override Score.AccidentalPlacement #'right-padding = #1.5
+ <b bes>