+Ce chapitre indique comment modifier le résultat obtenu.
+LilyPond offre de nombreuses possibilités de réglages, permettant
+théoriquement de modifier chaque élément de votre partition.
+
+@menu
+* Tweaking basics::
+* The Internals Reference manual::
+* Appearance of objects::
+* Placement of objects::
+* Collisions of objects::
+* Further tweaking::
+@end menu
+
+@node Tweaking basics
+@section Tweaking basics
+
+@menu
+* Introduction to tweaks::
+* Objects and interfaces::
+* Naming conventions of objects and properties::
+* Tweaking methods::
+@end menu
+
+@node Introduction to tweaks
+@subsection Introduction to tweaks
+
+LilyPond regroupe sous le terme de @qq{retouches} (@emph{tweaks} en
+anglais) les différents moyens dont dispose l'utilisateur pour
+intervenir sur l'interprétation du fichier d'entrée et pour modifier
+l'apparence du fichier de sortie. Certaines retouches sont très
+simples à mettre en œuvre ; d'autres sont plus complexes. Mais
+à elles toutes, elles permettent d'obtenir tout ce qu'on veut en matière
+de musique imprimée.
+
+Dans ce chapitre, nous traitons des concepts de base nécessaires
+pour comprendre l'art de la retouche. Puis nous présentons de
+nombreuses commandes déjà prêtes, qu'il suffit de recopier pour
+obtenir un résultat identique dans vos partitions ; nous en profitons
+pour expliquer comment ces commandes ont été construites, si bien
+que vous pouvez apprendre par la même occasion à développer
+vos propres retouches.
+
+Avant de vous lancer dans ce chapitre, il peut être utile de revoir la
+section @ref{Contexts and engravers}, dans la mesure où les contextes,
+graveurs et autres propriétés qui y sont décrits, sont indispensables
+pour comprendre et construire les retouches.
+
+@node Objects and interfaces
+@subsection Objects and interfaces
+
+@cindex objet
+@cindex grob
+@cindex spanner
+@cindex extenseur
+@cindex interface
+@cindex propriétés des objets
+@cindex objet, propriétés
+@cindex objet de rendu
+@cindex rendu, objets de
+
+Toute retouche implique que l'on modifie les opérations internes
+et les structures du programme LilyPond. Nous allons donc, pour
+commencer, présenter certains termes qui servent à décrire ces
+opérations internes et ces structures.
+
+Le terme d'@qq{Objet} est un terme générique qui fait référence à
+une multitude de structures internes mises en place par LilyPond
+durant la compilation d'un fichier d'entrée. Ainsi, quand une
+commande du type @code{\new Staff} apparaît, un nouvel objet
+du type @code{Staff} est créé. Cet objet @code{Staff} contient
+alors toutes les propriétés associées à cette portée, par exemple son
+nom et son armure, ainsi que le détail des graveurs qui ont été
+désignés pour fonctionner dans ce contexte de portée.
+Certains objets peuvent contenir les propriétés de tous les autres
+contextes, comme les objets @code{Voice}, les objets @code{Score},
+les objets @code{Lyrics} ; d'autres se rapportent à tous les éléments de
+notation, comme les barres de mesure, les liaisons, les nuances, etc.
+Chaque objet dispose de son propre échantillon de valeurs pour le
+réglage des propriétés.
+
+Certains types d'objet portent des noms spécifiques. Les objets qui se
+rapportent à des éléments de notation sur le fichier de sortie, comme les
+notes, les hampes, les liaisons de phrasé ou de prolongation, les doigtés,
+les clefs, etc. sont appelés @qq{Objets de rendu} ; ils sont aussi connus
+sous le nom d'@qq{Objets graphiques} (en anglais : @emph{Graphical
+objects} ou @emph{Grobs} pour faire court). Ce sont bien des objets au
+sens générique ci-dessus, et, en tant que tels, ils reçoivent des
+propriétés qui leur sont associées, comme leur position, leur taille,
+leur couleur, etc.
+
+Certains objets de rendu, comme les liaisons de phrasé, les soufflets
+de crescendo, les marques d'octaviation et beaucoup d'autres @emph{grobs},
+ont pour particularité de ne pas se situer à un seul et unique endroit
+-- ils ont un point de départ, un point d'arrivée, et éventuellement
+d'autres propriétés relatives à leur forme. Ces objets avec une forme
+étendue sont appelés des bandeaux (@emph{Spanners} en anglais).
+
+Il reste à expliquer ce que sont les @qq{interfaces}. De nombreux objets,
+qui peuvent être très différents les uns des autres, ont pour point commun
+de devoir être compilés simultanément. Par exemple, tous les
+@emph{grobs} ont une couleur, une taille, une position, etc., et toutes
+ces propriétés sont compilées simultanément durant l'interprétation du
+fichier d'entrée par LilyPond. Pour alléger ces opérations internes,
+ces actions et propriétés communes sont regroupées en un objet appelé
+@code{grob-interface}. Il existe beaucoup d'autres regroupements de
+propriétés communes dans le genre de celui-ci, chacun portant un nom qui
+se termine par @code{interface}. En tout, on en compte plus d'une
+centaine. Nous verrons plus loin en quoi c'est intéressant et utile
+pour l'utilisateur.
+
+Ainsi s'achève le tour des principaux termes relatifs aux objets et
+que nous serons amenés à utiliser dans ce chapitre.
+
+@node Naming conventions of objects and properties
+@subsection Naming conventions of objects and properties
+
+@cindex conventions de nommage des objets
+@cindex conventions de nommage des propriétés
+@cindex objets, conventions de nommage des
+@cindex propriétés, conventions de nommage des
+
+Nous avons eu un aperçu, dans @ref{Contexts and engravers}, de
+la façon de nommer les objets. Voici maintenant une liste de
+référence des types d'objets et de propriétés les plus courants,
+avec leur convention de nommage et quelques exemples
+de cas concrets. La lettre @code{A} représente n'importe quel
+caractère alphabétique majuscule, et les lettres @code{aaa}
+un nombre indéterminé de caractères alphabétiques minuscules.
+Les autres caractères sont à prendre comme ils se présentent.
+
+@multitable @columnfractions .33 .33 .33
+@headitem Type d'objet/propriété
+ @tab Convention de désignation
+ @tab Exemples
+@item Contextes
+ @tab Aaaa ou AaaaAaaaAaaa
+ @tab Staff, GrandStaff
+@item Objets de rendu
+ @tab Aaaa ou AaaaAaaaAaaa
+ @tab Slur, NoteHead
+@item Graveurs
+ @tab Aaaa_aaa_engraver
+ @tab Clef_engraver, Note_heads_engraver
+@item Interfaces
+ @tab aaa-aaa-interface
+ @tab grob-interface, break-aligned-interface
+@item Propriétés de contexte
+ @tab aaa ou aaaAaaaAaaa
+ @tab alignAboveContext, skipBars
+@item Propriétés d'objet de rendu
+ @tab aaa ou aaa-aaa-aaa
+ @tab direction, beam-thickness
+@end multitable
+
+Comme nous le verrons bientôt, les propriétés des différents
+types d'objets sont modifiées par des commandes différentes, si bien
+qu'il est bon de savoir reconnaître le type d'objet en fonction du nom
+de ses propriétés.
+
+@node Tweaking methods
+@subsection Tweaking methods
+
+@cindex retouches, méthodologie
+@cindex méthodes de retouche
+
+@strong{La commande \override}
+
+@cindex override, commande
+@cindex override, syntaxe
+
+@funindex \override
+@funindex override
+
+Dans @ref{Modifying context properties} et dans
+@ref{Adding and removing engravers}, nous avons déjà rencontré les
+commandes @code{\set} et @code{\with}, qui servent à changer les
+propriétés des @strong{contextes} et à supprimer ou ajouter des
+@strong{graveurs}. Voici maintenant d'autres commandes plus
+importantes.
+
+La commande pour changer les propriétés des @strong{objets de rendu}
+est @code{\override}. Du fait que cette commande modifie en profondeur
+les propriétés internes de LilyPond, sa syntaxe n'est pas aussi simple que
+pour les commandes vues précédemment. Elle a besoin de savoir avec
+précision quelle est la propriété à modifier, pour quel objet et dans
+quel contexte, et quelle doit être sa nouvelle valeur. Voyons de quoi
+il retourne.
+
+La syntaxe générale de cette commande est :
+
+@example
+\override @var{Contexte}.@var{ObjetDeRendu} #'@var{propriété-rendu} = #@var{valeur}
+@end example
+
+@noindent
+Elle attribue à la propriété appelée @var{propriété-rendu}, associée à
+l'objet @var{ObjetDeRendu}, appartenant lui-même au contexte
+@var{Contexte}, une valeur @var{valeur}.
+
+Le contexte @var{Contexte} peut être omis (c'est généralement
+le cas) quand il n'y a pas d'ambiguïté et qu'il s'agit d'un contexte
+de très bas niveau, comme @code{Voice}, @code{ChordNames}
+ou @code{Lyrics}. Dans les exemples qui suivent, le contexte sera
+très souvent omis. Nous verrons plus tard dans quelles
+circonstances il doit impérativement être indiqué.
+
+Les sections ci-dessous traitent largement des propriétés et de leurs
+valeurs mais, pour illustrer la mise en forme et l'utilisation de ces
+commandes, nous nous limiterons à n'employer que quelques propriétés et
+valeurs simples, facilement compréhensibles.
+
+Nous ne parlerons dans l'immédiat ni du @code{#'}, qui précède
+toujours la propriété, ni du @code{#}, qui précède toujours la
+valeur. Ces deux éléments doivent obligatoirement être
+présents sous cette forme. Voici la commande la plus fréquente
+pour faire des retouches, et pratiquement tout le reste de ce
+chapitre aura pour but montrer, à travers des exemples, comment
+l'utiliser. L'exemple ci-dessous change la couleur des têtes de
+notes :
+
+@cindex couleur,exemple de propriété
+@cindex NoteHead, exemple de dérogation
+
+@lilypond[quote,fragment,ragged-right,verbatim,relative=1]
+c d
+\override NoteHead #'color = #red
+e f g
+\override NoteHead #'color = #green
+a b c
+@end lilypond
+
+@strong{La commande \revert}
+
+@cindex revert, commande
+
+@funindex \revert
+@funindex revert
+
+Une fois qu'elle a été modifiée, la propriété conserve sa nouvelle valeur
+jusqu'à ce qu'elle soit à nouveau modifiée ou qu'elle rencontre la
+commande @code{\revert}. La commande @code{\revert} obéit à
+la syntaxe ci-dessous et ramène la valeur de la propriété à sa valeur
+d'origine. Attention : dans le cas où plusieurs @code{\override} ont
+été employés, il ne s'agit pas de la valeur précédente mais bien de la
+valeur par défaut.
+
+@example
+\revert @var{Contexte}.@var{ObjetDeRendu} #'@var{propriété-de-rendu}
+@end example
+
+Tout comme pour la commande @code{\override}, la mention du
+@var{Contexte} est souvent facultative. Elle sera omise dans de
+nombreux exemples ci-dessous. Voici un exemple qui ramène la
+couleur des deux dernières notes à leur valeur par défaut :
+
+@cindex couleur,exemple de propriété
+@cindex NoteHead, exemple de dérogation
+
+@lilypond[quote,fragment,ragged-right,verbatim,relative=1]
+c d
+\override NoteHead #'color = #red
+e f g
+\override NoteHead #'color = #green
+a
+\revert NoteHead #'color
+b c
+@end lilypond
+
+@strong{Le préfixe \once}
+
+@funindex \once
+@funindex once
+
+Les commandes @code{\override} et @code{\set} peuvent supporter
+toutes les deux le préfixe @code{\once}. Celui-ci a pour fonction de
+n'appliquer la commande @code{\override} ou @code{\set} qu'à
+l'instant musical en cours, avant que la propriété ne reprenne
+sa valeur par défaut. Toujours à partir du même exemple, il est
+possible de ne changer la couleur que d'une seule note :
+
+@cindex couleur,exemple de propriété
+@cindex NoteHead, exemple de dérogation
+
+@lilypond[quote,fragment,ragged-right,verbatim,relative=1]
+c d
+\once \override NoteHead #'color = #red
+e f g
+\once \override NoteHead #'color = #green
+a b c
+@end lilypond
+
+@strong{La commande \overrideProperty}
+
+@cindex overrideProperty, commande
+
+@funindex \overrideProperty
+@funindex overrideProperty
+
+Il existe une autre forme de commande @code{\override},
+@code{\overrideProperty}, qui est parfois utile. Nous la mentionnons
+ici par souci d'exhaustivité ; pour le détail, voir @ruser{Difficult tweaks}.
+
+@c Maybe explain in a later iteration -td
+
+@strong{La commande \tweak}
+
+@cindex tweak, commande
+
+@funindex \tweak
+@funindex tweak
+
+La dernière commande disponible pour les retouches est
+@code{\tweak}. Elle sert à changer les propriétés d'objets qui
+surviennent simultanément dans la musique, comme par exemple les
+notes d'un accord. La commande @code{\override} modifierait toutes
+les notes de l'accord, tandis que @code{\tweak} ne modifie que
+l'élément suivant dans la chaîne de saisie.
+
+Voici un exemple. Supposons que nous voulions changer la taille de
+la tête de note du milieu (le mi) dans un accord de do majeur. Voyons
+d'abord ce que donnerait @code{\once \override} :
+
+@cindex font-size, exemple de propriété
+@cindex NoteHead, exemple de dérogation
+
+@lilypond[quote,fragment,ragged-right,verbatim,relative=1]
+<c e g>4
+\once \override NoteHead #'font-size = #-3
+<c e g>
+<c e g>
+@end lilypond
+
+Nous voyons que @code{\override} modifie @emph{toutes} les têtes
+de notes de l'accord, car toutes les notes de l'accord surviennent au
+même @emph{instant musical} et que la fonction de @code{\once}
+est de faire porter la modification sur tous les objets du type spécifié
+qui surviennent au même instant musical, comme le fait la commande
+@code{\override} elle-même.
+
+La commande @code{\tweak} opère différemment. Elle agit
+sur l'élément immédiatement suivant dans la chaîne de saisie. Elle ne
+fonctionne toutefois que sur des objets créés directement à partir de
+la chaîne de saisie, c'est-à-dire essentiellement des têtes de notes et
+des articulations ; des objets comme les hampes ou les
+altérations accidentelles sont créés ultérieurement et ne peuvent
+être retouchés de cette manière. En outre, quand la retouche porte
+sur une tête de note, celle-ci @emph{doit} appartenir à un accord,
+c'est-à-dire être comprise à l'intérieur de chevrons gauche/droite. Pour
+retoucher une note isolée, il faut donc placer la commande
+@code{\tweak} avec la note à l'intérieur des chevrons gauche/droite.
+
+Pour reprendre notre exemple, la taille de la note du milieu d'un
+accord peut être modifiée de cette manière :
+
+@cindex font-size, exemple de propriété
+@cindex @code{\tweak}, exemple
+
+@lilypond[quote,fragment,ragged-right,verbatim,relative=1]
+<c e g>4
+<c \tweak #'font-size #-3 e g>4
+@end lilypond
+
+Vous noterez que la syntaxe de @code{\tweak} est différente de
+celle de la commande @code{\override}. Ni le contexte,
+ni l'objet n'ont besoin d'être spécifiés ; au contraire, cela
+produirait une erreur si on le faisait. Tous deux sont sous-entendus
+par l'élément suivant dans la chaîne de saisie. La syntaxe générale
+de la commande @code{\tweak} est donc, tout simplement :
+
+@example
+\tweak #'@var{propriété-de-rendu} = #@var{valeur}
+@end example
+
+La commande @code{\tweak} est aussi utilisée quand on veut, dans
+une série d'articulations, n'en modifier qu'une seule. Ainsi :
+
+@cindex couleur, exemple de propriété
+@cindex @code{\tweak}, exemple
+
+@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
+a ^Black
+ -\tweak #'color #red ^Red
+ -\tweak #'color #green _Green
+@end lilypond
+
+@noindent
+Attention : la commande @code{\tweak} doit être précédée d'une
+marque d'articulation, comme si elle-même était une articulation.
+
+@cindex nolets imbriqués
+@cindex triolets imbriqués
+@cindex crochet de nolet
+@cindex nolet, crochet
+@cindex triolet, crochet
+
+@funindex TupletBracket
+
+Quand plusieurs nolets sont imbriqués et commencent au même instant
+musical, c'est encore la commande @code{\tweak} qui est utilisée pour
+changer l'apparence de l'un d'entre eux. Dans l'exemple suivant, le
+long crochet de nolet et le premier des trois crochets courts commencent
+au même instant musical ; une commande @code{\override} s'appliquerait
+donc à la fois aux deux. En revanche, @code{\tweak} permet
+de les dissocier. La première commande @code{\tweak} indique que
+le long crochet doit être placé au-dessus des notes, et la seconde
+indique que le coefficient de nolet doit être imprimé en rouge sur le
+premier crochet de triolet court.
+
+@cindex @code{\tweak}, exemple
+@cindex direction, exemple de propriété
+@cindex couleur, exemple de propriété
+
+@lilypond[quote,ragged-right,verbatim,fragment,relative=2]
+\tweak #'direction #up
+\times 4/3 {
+ \tweak #'color #red
+ \times 2/3 { c8[ c8 c8] }
+ \times 2/3 { c8[ c8 c8] }
+ \times 2/3 { c8[ c8 c8] }
+}
+@end lilypond
+
+Si les nolets imbriqués ne commencent pas au même moment,
+leur apparence peut alors être modifiée de la façon habituelle,
+avec la commande @code{\override} :
+
+@cindex texte, exemple de propriété
+@cindex tuplet-number, example de fonction
+@cindex transparence, example de propriété
+@cindex TupletNumber, exemple de dérogation
+
+@c NOTE Tuplet brackets collide if notes are high on staff
+@c See issue 509
+@lilypond[quote,ragged-right,verbatim,fragment,relative=1]
+\times 2/3 { c8[ c c]}
+\once \override TupletNumber
+ #'text = #tuplet-number::calc-fraction-text
+\times 2/3 {
+ c[ c]
+ c[ c]
+ \once \override TupletNumber #'transparent = ##t
+ \times 2/3 { c8[ c c] }
+\times 2/3 { c8[ c c]}
+}
+@end lilypond
+
+@seealso
+Manuel de notation :
+@ruser{The tweak command}.
+
+
+@node The Internals Reference manual
+@section The Internals Reference manual
+
+@cindex Références internes
+
+@menu
+* Properties of layout objects::
+* Properties found in interfaces::
+* Types of properties::
+@end menu
+
+@node Properties of layout objects
+@subsection Properties of layout objects
+
+@cindex propriétés des objets de rendu
+@cindex propriétés des objets graphiques (grobs)
+@cindex grobs, propriétés
+@cindex objets de rendu, propriétés
+@cindex Manuel des références internes
+
+Imaginons que votre partition contienne une liaison trop fine à votre
+goût et que vous vouliez la rendre plus épaisse. Comment vous y
+prendre ? Vous êtes convaincu, avec tout ce qui a été dit sur la
+souplesse de LilyPond, qu'une telle retouche est réalisable et
+vous vous dites qu'elle fera sans doute intervenir la commande
+@code{\override}. Mais existe-t-il une propriété lourde qui s'applique
+à une liaison et, dans l'affirmative, comment faire pour la modifier ?
+C'est là qu'intervient la Référence des propriétés internes.
+Elle contient toutes les informations dont vous avez besoin pour
+construire n'importe quelle commande @code{\override}.
+
+Avant de nous plonger dans la Référence des propriétés
+internes, un mot d'avertissement. Il s'agit d'un document de
+@strong{références}, de sorte qu'il ne contient pas ou peu
+d'explications : son but est de présenter les informations de
+façon précise et concise. Cela peut paraître décourageant
+à première vue. Pas d'inquiétude ! Les conseils et les explications
+fournis ici vous permettent de retrouver par vous-même les
+informations dans la Référence des propriétés internes. Il
+suffit d'un peu de pratique.
+
+@cindex override, exemple
+@cindex dérogation, exemple
+@cindex Références internes, exemple d'utilisation
+@cindex @code{\addlyrics} -- exemple
+
+Prenons un exemple concret tiré d'un morceau de musique connu :
+
+@lilypond[quote,verbatim,relative=2]
+{
+ \time 6/8
+ {
+ r4 b8 b[( g]) g |
+ g[( e]) e d[( f]) a |
+ a g
+ }
+ \addlyrics {
+ The man who feels love's sweet e -- mo -- tion
+ }
+}
+@end lilypond
+
+Admettons que nous voulions rendre les traits de liaison plus épais.
+Est-ce possible ? Une liaison est assurément un objet de rendu, si bien
+que la question est @qq{Existe-t-il une propriété attachée aux liaisons
+et qui en contrôle l'épaisseur ? } Pour y répondre, nous consultons la
+Référence des propriétés internes (ou RPI pour faire court).
+
+Vous trouverez sur le site de LilyPond @uref{http://lilypond.org} la
+RPI correspondant à votre version du programme. Allez sur la page
+Documentation et cliquez sur Référence des propriétés internes.
+Pour l'apprentissage, mieux vaut utiliser la version HTML standard,
+et non la @q{page unique en anglais} ou le PDF. Durant la lecture
+des prochains paragraphes, il vous est conseillé de vous y reporter
+réellement afin que les explications prennent tout leur sens.
+
+En dessous du bandeau d'en-tête figurent cinq liens. Cliquez sur le lien
+vers le @emph{Backend}, où se trouvent les informations sur les
+objets de rendu. En dessous du titre @strong{Backend}, choisissez
+alors le lien vers @emph{Tous les objets de rendu}. La page qui s'ouvre
+énumère, dans l'ordre alphabétique, tous les objets utilisés dans votre
+version de LilyPond. Cliquez sur Liaisons (@emph{Slurs} en anglais),
+et les propriétés des liaisons apparaîtront.
+
+Il existe un autre moyen de trouver cette page, à partir du Manuel de
+notation. Une des pages qui traitent des liaisons contient un lien vers
+la Référence des propriétés internes, qui mène directement à cette
+page. Mais lorsque vous connaissez le nom de l'objet à retoucher, le
+plus simple est de consulter la RPI.
+
+La page de la RPI sur les liaisons commence par préciser que les objets
+Liaison sont créés par le graveur Slur_engraver. Vient ensuite la liste
+des réglages standard. Attention : ceux-ci @strong{ne suivent pas} l'ordre
+alphabétique. Il faut donc les parcourir en entier pour trouver la propriété
+susceptible de contrôler l'épaisseur des traits de liaison.
+
+@example
+@code{thickness} (number)
+ @code{1.2}
+ Épaisseur de ligne, généralement mesurée en @code{line-thickness}
+@end example
+
+Voilà qui semble approprié pour changer l'épaisseur (@emph{thickness} en
+anglais). On apprend que la valeur de @code{thickness}
+est un simple nombre (@emph{number}), qu'elle est par défaut
+à 1,2 et que l'unité de mesure est fixée par une autre propriété
+appelée @code{line-thickness}.
+
+Comme il a été indiqué, on ne trouve que peu, voire pas du tout
+d'explications dans la RPI, mais nous en savons assez pour essayer
+de changer l'épaisseur de la liaison. Comme nous l'avons vu, le
+nom de l'objet est @code{Slur}, le nom de la propriété à changer
+est @code{thickness} et la nouvelle valeur sera un nombre supérieur
+à 1.2 si l'on veut augmenter l'épaisseur du trait.
+
+Pour construire la commande @code{\override}, il suffit donc de
+remplacer les valeurs que nous avons trouvées en guise de noms, en
+laissant de côté le contexte. Commençons par une valeur très élevée
+dans un premier temps, pour nous assurer que la commande fonctionne.
+Nous obtenons :
+
+@example
+\override Slur #'thickness = #5.0
+@end example
+
+N'oublions pas le @code{#'} qui doit précéder le nom de la propriété et
+le @code{#} qui doit précéder la nouvelle valeur.
+
+La dernière question est : @qq{Où placer cette commande ?}
+Tant qu'on n'est pas sûr de soi, la meilleure réponse est @qq{À
+l'intérieur de l'expression musicale, avant la première liaison et
+proche d'elle.} Essayons :
+
+@cindex Slur, exemple de dérogation
+@cindex thickness, exemple de propriété
+
+@lilypond[quote,verbatim,relative=2]
+{
+ \time 6/8
+ {
+ % Increase thickness of all following slurs from 1.2 to 5.0
+ \override Slur #'thickness = #5.0
+ r4 b8 b[( g]) g |
+ g[( e]) e d[( f]) a |
+ a g
+ }
+ \addlyrics {
+ The man who feels love's sweet e -- mo -- tion
+ }
+}
+@end lilypond
+
+@noindent
+et nous constatons que le trait de liaison est beaucoup plus épais.
+
+Telle est la façon normale de construire les commandes
+@code{\override}. Comme nous aurons l'occasion de le voir
+par la suite, le problème est parfois plus complexe. Dans
+l'immédiat, nous en savons assez pour construire nos propres
+commandes -- mais il faut encore s'exercer. Les exemples
+suivants sont là dans cette intention.
+
+@subheading Finding the context
+
+@cindex contexte, détermination du
+@cindex contexte, identification correcte du
+
+Tout d'abord, de quoi avions-nous besoin pour préciser le
+contexte ? À quoi devait-il ressembler ? Gageons que les
+liaisons appartiennent au contexte Voix, dans la mesure où
+elles sont étroitement liées à une ligne mélodique, mais
+comment en être sûr ? Pour répondre à cette question,
+revenons en haut de la page de la RPI consacrée aux liaisons ;
+il est écrit : @q{Les objets Liaison sont créés par le graveur
+Slur_engraver}. Ainsi les liaisons seront créées dans n'importe
+quel contexte où se trouve le @code{Slur_engraver}. Suivons
+le lien vers la page @code{Slur_engraver}. Tout en bas, on
+lit que le @code{Slur_engraver} est un élément appartenant
+à cinq contextes Voix, dont le contexte de voix
+standard, @code{Voice}. Notre hypothèse était donc juste.
+Et parce que @code{Voice} est un contexte de très bas
+niveau, qu'il est activé sans ambiguïté par le fait que l'on est
+en train de saisir des notes, on peut ici ne pas le mentionner.
+
+@subheading Overriding once only
+
+@cindex dérogation pour une seule fois
+@cindex usage unique, dérogation à
+
+@funindex \once
+@funindex once
+
+Dans le dernier exemple ci-dessus, @emph{toutes} les liaisons étaient plus
+épaisses. Et si on veut épaissir uniquement la première liaison ? On
+recourt alors à la commande @code{\once}. Placée juste avant la commande
+@code{\override}, elle lui indique de ne changer que la liaison commençant
+avec la note @strong{juste après}. Si la note juste après n'ouvre pas une
+liaison, la commande sera sans aucun effet -- elle ne reste pas en mémoire
+jusqu'à la prochaine liaison, elle est purement et simplement ignorée.
+Il faut donc que la commande introduite par @code{\once} soit insérée
+comme suit :
+
+
+@cindex Slur, exemple de dérogation
+@cindex thickness, exemple de propriété
+@cindex Liaison, exemple de dérogation
+@cindex Épaisseur, exemple de propriété
+
+@lilypond[quote,verbatim,relative=2]
+{
+ \time 6/8
+ {
+ r4 b8
+ % Increase thickness of immediately following slur only
+ \once \override Slur #'thickness = #5.0
+ b[( g]) g |
+ g[( e]) e d[( f]) a |
+ a g
+ }
+ \addlyrics {
+ The man who feels love's sweet e -- mo -- tion
+ }
+}
+@end lilypond
+
+@noindent
+Alors seule la première liaison est rendue plus épaisse.
+
+La commande @code{\once} peut aussi être utilisée devant la commande
+@code{\set}.
+
+
+@subheading Reverting
+
+@cindex revert
+@cindex retour
+@cindex défaut, retour aux propriétés par
+
+@funindex \revert
+@funindex revert
+
+Et si l'on voulait que les deux premières liaisons soient plus épaisses ?
+On pourrait bien sûr utiliser deux commandes, chacune précédée de
+@code{\once}, et placées juste avant la note par laquelle débute la
+liaison :
+
+
+@cindex Slur, exemple de dérogation
+@cindex thickness, exemple de propriété
+@cindex Liaison, exemple de dérogation
+@cindex Épaisseur, exemple de propriété
+
+@lilypond[quote,verbatim,relative=2]
+{
+ \time 6/8
+ {
+ r4 b8
+ % Increase thickness of immediately following slur only
+ \once \override Slur #'thickness = #5.0
+ b[( g]) g |
+ % Increase thickness of immediately following slur only
+ \once \override Slur #'thickness = #5.0
+ g[( e]) e d[( f]) a |
+ a g
+ }
+ \addlyrics {
+ The man who feels love's sweet e -- mo -- tion
+ }
+}
+@end lilypond
+
+@noindent
+mais on peut aussi, au lieu de la commande @code{\once}, utiliser après
+la seconde liaison la commande @code{\revert}, qui ramène la propriété
+@code{thickness} à sa valeur par défaut .
+
+@cindex Slur, exemple de dérogation
+@cindex thickness, exemple de propriété
+@cindex Liaison, exemple de dérogation
+@cindex Épaisseur, exemple de propriété
+
+@lilypond[quote,verbatim,relative=2]
+{
+ \time 6/8
+ {
+ r4 b8
+ % Increase thickness of all following slurs from 1.2 to 5.0
+ \override Slur #'thickness = #5.0
+ b[( g]) g |
+ g[( e])
+ % Revert thickness of all following slurs to default of 1.2
+ \revert Slur #'thickness
+ e d[( f]) a |
+ a g
+ }
+ \addlyrics {
+ The man who feels love's sweet e -- mo -- tion
+ }
+}
+@end lilypond
+
+@noindent
+N'importe quelle propriété modifiée par @code{\override} peut ainsi
+être ramenée, grâce à la commande @code{\revert}, à sa valeur par
+défaut.
+
+Ici s'achève notre introduction à la RPI et aux retouches
+simples. Vous trouverez d'autres exemples dans les prochaines
+sections de ce chapitre ; ils vous permettront, d'une part,
+d'apprendre à connaître un peu mieux la RPI et, d'autre part, de
+vous entraîner un peu plus à y chercher les informations. Ces
+exemples seront progressivement accompagnés d'explications et
+introduiront des termes nouveaux.
+
+@node Properties found in interfaces
+@subsection Properties found in interfaces
+
+@cindex interface
+@cindex interfaces, propriétés des
+@cindex propriétés des interfaces
+
+Supposons maintenant que nous voulions imprimer des paroles en italique.
+Quelle formulation de la commande @code{\override} allons-nous utiliser ?
+Nous consultons en premier lieu, comme précédemment, la page de la RPI
+qui contient la liste @q{Tous les objets de rendu}, et recherchons
+un objet qui contrôle les paroles. Nous trouvons @code{LyricText}, qui
+semble approprié. Nous cliquons dessus et nous voyons apparaître les
+différentes propriétés des paroles, parmi lesquelles @code{font-series}
+et @code{font-size}. Mais aucune ne propose l'italique. Car la mise
+en forme des caractères est une propriété commune à tous les objets
+d'écriture, si bien que, au lieu de figurer dans tous les objets de rendu,
+elle est regroupée avec d'autres propriétés semblables et placée dans une
+@strong{Interface}, la @code{font-interface}.
+
+Il nous faut donc apprendre à trouver les propriétés des interfaces
+et découvrir les objets qui utilisent les propriétés de ces interfaces.
+
+Retournons à la page de la RPI qui traite des paroles
+(@emph{LyricText}). En bas de la page est dressée sous forme de liens
+la liste des interfaces qui concernent LyricText. Cette liste comporte
+plusieurs entrées, dont @code{font-interface}. En cliquant dessus, nous
+voyons apparaître les différentes propriétés associées à cette
+interface, qui sont en même temps les propriétés de tous les objets qui
+s'y rapportent, parmi lesquels LyricText.
+
+Nous avons alors sous les yeux tous les réglages de propriétés qui
+contrôlent les polices de caractères, et notamment
+@code{font-shape(symbole)}, où @code{symbole} peut prendre la valeur
+@code{upright}, @code{italics} ou @code{caps}.
+
+Vous remarquerez que @code{font-series} et @code{font-size} figurent
+aussi dans la liste. La question qui ne manque pas de se poser est :
+@qq{Comment se fait-il que les propriétés @code{font-series} et
+@code{font-size} se retrouvent à la fois dans @code{LyricText} et dans
+l'interface @code{font-interface} alors que ce n'est pas le cas pour
+@code{font-shape} ?} La réponse est que lorsqu'un objet @code{LyricText}
+est créé, les valeurs globales par défaut de @code{font-series} et
+@code{font-size} sont modifiées, mais pas celles de @code{font-shape}.
+Les possibilités de modification dans @code{LyricText} ne concernent
+donc que les valeurs à appliquer à @code{LyricText}. Les autres objets qui
+dépendent de @code{font-interface} fixeront leurs propriétés différemment
+lorsqu'ils seront créés.
+
+Voyons maintenant si nous sommes en mesure de formuler la commande
+@code{\override} pour mettre les paroles en italique. L'objet est
+@code{LyricText}, la propriété est @code{font-shape} et la valeur est
+@code{italic}. Comme auparavant, nous laissons de côté le contexte.
+
+Signalons rapidement -- même si cette remarque est importante -- que,
+puisque les valeurs de @code{font-shape} se présentent sous forme de
+symboles, elles doivent être précédées d'une simple apostrophe,
+@code{'}. C'est pour cette raison qu'il fallait une apostrophe devant
+@code{thickness} dans l'exemple précédent, et qu'il en faut une devant
+@code{font-shape}. Ce sont à chaque fois des symboles, qui sont
+interprétés comme tels par LilyPond. Certains symboles peuvent être des
+noms de propriété, comme @code{thickness} ou @code{font-shape},
+d'autres sont des valeurs à attribuer aux propriétés, comme
+@code{italic}. À ne pas confondre avec les chaînes de caractères libres,
+qui se présentent comme @code{"un texte libre"} ; pour plus de détails
+sur les symboles et les chaînes de caractères, voir @ref{Scheme
+tutorial}.
+
+Ainsi, la commande @code{\override} pour mettre les paroles en italique
+est :
+
+@example
+\override LyricText #'font-shape = #'italic
+@end example
+
+@noindent
+et elle doit être placée juste devant et tout près des paroles à modifier,
+comme ceci :
+
+@cindex font-shape, exemple de propriété
+@cindex italic, exemple
+@cindex LyricText, exemple de dérogation
+@cindex @code{\addlyrics}, exemple
+
+@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
+{
+ \time 6/8
+ {
+ r4 b8 b[( g]) g |
+ g[( e]) e d[( f]) a |
+ a g
+ }
+ \addlyrics {
+ \override LyricText #'font-shape = #'italic
+ The man who feels love's sweet e -- mo -- tion
+ }
+}
+@end lilypond
+
+@noindent
+et voilà les paroles en italiques.
+
+@subheading Specifying the context in lyric mode
+
+@cindex contexte, spécification en mode lyrique
+@cindex mode lyrique, spécification de contexte en
+
+Lorsqu'il s'agit de paroles et qu'on cherche à préciser le contexte
+sur le modèle de ce qui a été fait précédemment, la commande échoue.
+Car une syllabe saisie en mode Paroles (lyricmode) se termine
+obligatoirement par une espace, un saut de ligne ou un nombre. Tout
+autre caractère compte comme un élément de la syllabe. C'est pourquoi
+il faut une espace ou un saut de ligne avant le @code{@}} final, pour
+éviter qu'il ne soit assimilé à la dernière syllabe. De même, il faut insérer
+des espaces avant et après le point, @q{.}, qui sépare le nom de
+contexte du nom de l'objet, faute de quoi les deux noms seront joints et
+l'interpréteur ne pourra pas les reconnaître. La formulation correcte est
+donc :
+
+@example
+\override Lyrics . LyricText #'font-shape = #'italic
+@end example
+
+@warning{Dans la saisie des paroles, pensez à toujours laisser une
+espace entre la dernière syllabe et l'accolade fermante.}
+
+@warning{Lorsqu'on retouche des paroles, toujours placer des espaces
+autour du point qui sépare le nom de contexte du nom d'objet.}
+
+@seealso
+Manuel d'initiation : @ref{Scheme tutorial}.
+
+
+@node Types of properties
+@subsection Types of properties
+
+
+@cindex propriété, types de
+
+Nous avons vu jusqu'à maintenant deux types de propriétés :
+@code{nombre} et @code{symbol}. Pour pouvoir fonctionner, la valeur
+associée à une propriété doit correspondre au type attendu et suivre les
+règles liées à ce type. Le type de propriété est toujours donné entre
+parenthèses après le nom de propriété dans la RPI. Voici une liste des
+différents types de propriétés, avec les règles qui les régissent et
+quelques exemples d'utilisation. Il faut, bien sûr, toujours ajouter un
+symbole hash, @code{#}, devant ces valeurs lors de la saisie de la
+commande @code{\override}.
+
+@multitable @columnfractions .2 .45 .35
+@headitem Type de propriété
+ @tab Règles
+ @tab Exemples
+@item Booléenne (anglais @emph{Boolean})
+ @tab Vrai (@emph{true} en anglais) ou Faux (@emph{false} en anglais),
+sous la forme #t ou #f
+ @tab @code{#t}, @code{#f}
+@item Dimension (en lignes de portée)
+ @tab Un nombre positif décimal (en unités de lignes de portée)
+ @tab @code{2.5}, @code{0.34}
+@item Direction
+ @tab Une direction valide ou son équivalent numérique (valeur décimale
+comprise entre -1 et 1 seulement)
+ @tab @code{LEFT}, @code{CENTER}, @code{UP}, @code{1}, @code{-1}
+@item Durée (@emph{Moment} en anglais)
+ @tab Une durée de note construite avec la fonction make-moment
+ @tab @code{(ly:make-moment 1 4)}, @code{(ly:make-moment 3 8)}
+@item Entier (@emph{Integer} en anglais)
+ @tab Un nombre entier positif
+ @tab @code{3}, @code{1}
+@item Inconnu (@emph{Unknown} en anglais)
+ @tab Un processus, ou @code{#f} pour empêcher toute action
+ @tab @code{bend::print}, @code{ly:text-interface::print}, @code{#f}
+@item Liste
+ @tab Plusieurs valeurs séparées par une espace, encadrées par des
+parenthèses et prédédées par une apostrophe
+ @tab @code{'(left-edge staff-bar)}, @code{'(1)}, @code{'(1.0 0.25 0.5)}
+@item Markup (ou étiquette)
+ @tab Toute commande @code{\markup} valide
+ @tab @code{\markup @{ \italic "cresc." @}}
+@item Nombre
+ @tab Une valeur décimale positive ou négative
+ @tab @code{3.5}, @code{-2.45}
+@item Paire (de nombres)
+ @tab Deux nombres séparées par @q{espace . espace}, encadrés
+par des parenthèses et précédés par une apostrophe
+ @tab @code{'(2 . 3.5)}, @code{'(0.1 . -3.2)}
+@item Symbole
+ @tab L'un des symboles autorisés pour cette propriété, précédé par une
+apostrophe
+ @tab @code{'italic}, @code{'inside}
+@item Vecteur
+ @tab Une liste de trois éléments encadrés par des parenthèses et
+précédés par apostrophe-hash, @code{'#}
+ @tab @code{'#(#t #t #f)}
+@end multitable
+
+@seealso
+Manuel d'initiation : @ref{Scheme tutorial}.
+
+
+@node Appearance of objects
+@section Appearance of objects
+
+Il est temps de mettre en pratique les notions apprises précédemment
+pour modifier l'allure de la partition ; les exemples qui suivent
+montrent l'utilisation des différentes méthodes de retouche.
+
+@menu
+* Visibility and color of objects::
+* Size of objects::
+* Length and thickness of objects::
+@end menu
+
+
+@node Visibility and color of objects
+@subsection Visibility and color of objects
+
+Dans un but pédagogique, on peut être amené à masquer certains éléments
+d'une partition, que les élèves doivent ensuite compléter. Imaginons,
+par exemple, un exercice dans lequel il faudrait rétablir les barres de
+mesure dans un morceau de musique. En temps normal, les barres de mesure
+s'insèrent automatiquement. Comment faire pour les effacer de la
+partition ?
+
+Avant de nous y attaquer, souvenons-nous que les propriétés d'objets
+sont parfois groupées dans ce qu'on appelle des @emph{interfaces} --
+voir @ref{Properties found in interfaces}. Cela permet de rapprocher
+toutes les propriétés susceptibles d'être utilisées ensemble pour
+modifier un objet graphique -- si l'une d'elles est choisie pour un
+objet, elle s'appliquera à tous les autres. Certains objets tirent
+alors leurs propriétés de telle ou telle interface, d'autres objets de
+telle ou telle autre interface. La liste des interfaces qui contiennent
+les propriétés liées à un objet graphique (@emph{grob}) figure dans la
+RPI, en bas de la page de description du @emph{grob} ; pour voir ces
+propriétés, il faut aller voir ces interfaces.
+
+Nous avons vu, dans @ref{Properties of layout objects}, comment trouver
+les informations sur les @emph{grobs}. Nous procédons de la même manière
+et consultons la RPI pour connaître l'objet chargé d'imprimer les barres
+de mesure. En cliquant sur @emph{Backend} puis sur @emph{Tous les
+objets de rendu}, nous trouvons un objet appelé @code{BarLine}. Parmi
+ses propriétés, deux d'entre elles déterminent son aspect visuel :
+@code{break-visibility} et @code{stencil}. L'objet @code{BarLine}
+est également lié à plusieurs interfaces, dont la @code{grob-interface}
+où figurent les propriétés @code{transparent} et @code{color}. Toutes
+peuvent modifier l'aspect visuel des barres de mesure -- et de beaucoup
+d'autres objets, bien sûr. Examinons chacune d'elles tour à tour.
+
+@subheading stencil
+
+@cindex stencil, propriété
+
+Cette propriété contrôle l'apparence des barres de mesure en précisant
+le type de symbole (glyphe) à imprimer. Comme pour de nombreuses
+autres propriétés, on peut lui indiquer de ne rien imprimer en lui
+attribuant la valeur @code{#f}. Essayons en laissant de côté, une fois
+encore, le contexte concerné (@code{Voice} en l'occurrence) :
+
+@cindex BarLine, exemple de dérogation
+@cindex stencil, exemple de propriété
+
+@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
+{
+ \time 12/16
+ \override BarLine #'stencil = ##f
+ c4 b8 c d16 c d8 |
+ g, a16 b8 c d4 e16 |
+ e8
+}
+@end lilypond
+
+Les barres de mesure sont encore là ! Pourquoi ? Retournons à la RPI
+et regardons de nouveau la page qui traite des propriétés de BarLine.
+En haut de la page, il est précisé que @qq{Les objets BarLine sont créés
+par le graveur Bar_engraver}. Allons à la page de @code{Bar_engraver}.
+Tout en bas se trouve la liste des contextes dans lesquels fonctionne ce
+graveur. Tous sont du type @code{Staff}, de sorte que, si la commande
+@code{\override} n'a pas fonctionné comme prévu, c'est parce que
+@code{Barline} n'appartient pas au contexte par défaut, @code{Voice}.
+Si le contexte spécifié est erroné, la commande ne fonctionne pas. Cela
+n'entraîne pas de message d'erreur, et rien n'apparaît sur le fichier log.
+Essayons de corriger en mentionnant le bon contexte :
+
+@cindex BarLine, exemple de dérogation
+@cindex stencil, exemple de propriété
+
+@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
+{
+ \time 12/16
+ \override Staff.BarLine #'stencil = ##f
+ c4 b8 c d16 c d8 |
+ g, a16 b8 c d4 e16 |
+ e8
+}
+@end lilypond
+
+Cette fois, les barres de mesure ont disparu.
+
+@subheading break-visibility
+
+@cindex break-visibility, propriété
+
+La RPI mentionne, à la page sur @code{BarLine}, que la propriété
+@code{break-visibility} attend comme argument un vecteur de trois
+boléens. Ceux-ci indiquent respectivement si les barres de mesure
+doivent être imprimées ou non à la fin de la ligne, à l'intérieur de la
+ligne et au début de la ligne. Dans notre cas, nous voulons que toutes
+les barres soient supprimées, si bien que la valeur dont nous avons
+besoin est @code{'#(#f@tie{}#f@tie{}#f)}. Essayons, sans oublier
+d'ajouter le contexte @code{Staff}. Vous remarquerez que, en plus de
+cette valeur, nous ajoutons @code{#'#} devant la parenthèse ouvrante.
+Le @code{'#} est nécessaire car il fait partie intégrante de la valeur
+contenant un vecteur, et le premier @code{#} est là, comme toujours avec
+la commande @code{\override}, pour introduire la valeur elle-même.
+
+@cindex BarLine, example of overriding
+@cindex break-visibility property, example
+
+@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
+{
+ \time 12/16
+ \override Staff.BarLine #'break-visibility = #'#(#f #f #f)
+ c4 b8 c d16 c d8 |
+ g, a16 b8 c d4 e16 |
+ e8
+}
+@end lilypond
+
+Comme on peut le constater, cette solution-là aussi supprime les barres
+de mesure.
+
+@subheading transparent
+
+@cindex transparent, propriété
+@cindex transparence
+
+La RPI mentionne, à la page sur @code{grob-interface}, que la propriété
+@code{transparent} attend comme argument un boléen. Il faudrait donc
+mettre @code{#t} pour rendre l'objet transparent. Dans cet exemple,
+essayons de rendre transparente la métrique (@emph{time signature} en
+anglais) plutôt que les barres de mesure. Pour cela, il nous faut
+trouver le nom du @emph{grob} chargé de l'indication de mesure. De
+retour sur la page @q{Tous les objets de rendu} de la RPI, nous
+cherchons les propriétés de l'objet @code{TimeSignature}. Celui-ci est
+géré par le graveur @code{Time_signature_engraver} qui, comme vous
+pouvez le constater, appartient au contexte @code{Staff} et peut se
+rattacher à la @code{grob-interface}. Dans ces conditions, la commande
+pour rendre la métrique transparente est :
+
+@cindex TimeSignature, exemple de dérogation
+@cindex transparent, exemple de propriété
+
+@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
+{
+ \time 12/16
+ \override Staff.TimeSignature #'transparent = ##t
+ c4 b8 c d16 c d8 |
+ g, a16 b8 c d4 e16 |
+ e8
+}
+@end lilypond
+
+@noindent
+La métrique a bien disparu mais la commande a laissé un blanc en lieu et
+place du chiffrage. Ce peut être souhaitable dans le cadre d'un
+exercice, afin que les élèves aient la place à compléter, mais dans
+d'autres circonstances, ce peut être gênant. Pour y remédier,
+attribuons plutôt au stencil des métriques la valeur @code{#f} :
+
+@cindex TimeSignature, exemple de dérogation
+@cindex stencil, exemple de propriété
+
+@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
+{
+ \time 12/16
+ \override Staff.TimeSignature #'stencil = ##f
+ c4 b8 c d16 c d8 |
+ g, a16 b8 c d4 e16 |
+ e8
+}
+@end lilypond
+
+@noindent
+La différence est flagrante : le fait d'attribuer au stencil la valeur
+@code{#f} supprime totalement l'objet, tandis que le fait de le rendre
+@code{transparent} le laisse en place, mais de façon invisible.
+
+@subheading color
+
+@cindex color, propriété
+
+Essayons enfin de rendre les barres de mesure invisibles en les colorant
+en blanc. La difficulté est de savoir si les barres blanches vont
+couper ou non les lignes de la portée aux endroits où elles se
+croisent. Vous verrez dans les exemples ci-dessous que cela peut se
+produire, sans qu'on le sache à l'avance. Les explications de ce
+phénomène et les solutions pour y remédier sont exposées dans
+@ruser{Painting objects white}. Pour le moment, acceptons cet
+inconvénient et concentrons-nous sur l'apprentissage de la gestion des
+couleurs.
+
+La @code{grob-interface} indique que la valeur de la propriété
+@code{color} est une liste, sans plus d'explication. En fait, cette
+liste est une liste de valeurs en unités internes ; pour éviter d'avoir
+à chercher ce qu'il faut y mettre, il existe différents moyens
+d'indiquer la couleur. Le premier moyen consiste à utiliser l'une des
+couleurs @emph{normales} de la première @ruser{List of colors}. Pour
+mettre les barres de mesure en blanc, on écrit :
+
+@cindex BarLine, exemple de dérogation
+@cindex color, exemple de propriété
+
+@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
+{
+ \time 12/16
+ \override Staff.BarLine #'color = #white
+ c4 b8 c d16 c d8 |
+ g, a16 b8 c d4 e16 |
+ e8
+}
+@end lilypond
+
+@noindent
+et nous constatons que les barres de mesure sont une fois de plus
+invisibles. Attention : aucune apostrophe ne précède @code{white} -- il
+ne s'agit pas d'un symbole mais d'une @emph{fonction}. Quand on
+l'invoque, elle fournit une liste de valeurs internes requises pour
+changer la couleur en blanc. Les autres couleurs aussi, dans la
+@qq{liste normale}, sont des fonctions. Pour en être certain, vous
+pouvez faire l'essai en choisissant une autre fonction de la liste en
+guise de couleur.
+
+@cindex couleur X11
+@cindex X11, couleurs
+
+@funindex x11-color
+
+Le deuxième moyen de changer la couleur consiste à utiliser la deuxième
+@ruser{List of colors}, dite noms de couleurs X11. Ceux-ci doivent
+obligatoirement être précédés d'une autre fonction, qui convertit les
+noms de couleurs X11 en une liste de valeurs internes, @code{x11-color},
+comme ceci :
+
+@cindex BarLine, exemple de dérogation
+@cindex color, exemple de propriété
+
+@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
+{
+ \time 12/16
+ \override Staff.BarLine #'color = #(x11-color 'white)
+ c4 b8 c d16 c d8 |
+ g, a16 b8 c d4 e16 |
+ e8
+}
+@end lilypond
+
+@noindent
+Vous noterez que, dans ce cas, la fonction @code{x11-color} admet un
+symbole comme argument ; il faut donc placer une apostrophe devant le
+symbole et insérer les deux à l'intérieur de parenthèses.
+
+@cindex rgb, couleur
+@cindex couleurs rgb
+
+@funindex rgb-color
+
+Il existe une troisième fonction, écrite pour convertir les valeurs RGB
+en couleurs internes -- la fonction @code{rgb-color}. Elle comporte
+trois arguments, donnant respectivement l'intensité du rouge, du vert et
+du bleu. Ces arguments prennent des valeurs comprises entre 0 et 1.
+Ainsi, pour choisir la couleur rouge, la valeur serait
+@code{(rgb-color1 0 0)} ; pour le blanc, ce serait
+@code{(rgb-color 1 1 1)} :
+
+@cindex BarLine, exemple de dérogation
+@cindex color, exemple de propriété
+
+@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
+{
+ \time 12/16
+ \override Staff.BarLine #'color = #(rgb-color 1 1 1)
+ c4 b8 c d16 c d8 |
+ g, a16 b8 c d4 e16 |
+ e8
+}
+@end lilypond
+
+Enfin, il existe une échelle de gris parmi les possibilités de couleurs
+X11. Elle va du noir, @code{'grey0}, au blanc, @code{'grey100}, avec
+un pas de 1. Essayons de l'utiliser en attribuant à tous les objets de
+notre exemple différentes nuances de gris :
+
+@cindex StaffSymbol, exemple de dérogation
+@cindex TimeSignature, exemple de dérogation
+@cindex Clef, exemple de dérogation
+@cindex NoteHead, exemple de dérogation
+@cindex Stem, exemple de dérogation
+@cindex BarLine, exemple de dérogation
+@cindex color, exemple de propriété
+@cindex x11-color, exemple d'utilisation
+
+@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
+{
+ \time 12/16
+ \override Staff.StaffSymbol #'color = #(x11-color 'grey30)
+ \override Staff.TimeSignature #'color = #(x11-color 'grey60)
+ \override Staff.Clef #'color = #(x11-color 'grey60)
+ \override Voice.NoteHead #'color = #(x11-color 'grey85)
+ \override Voice.Stem #'color = #(x11-color 'grey85)
+ \override Staff.BarLine #'color = #(x11-color 'grey10)
+ c4 b8 c d16 c d8 |
+ g, a16 b8 c d4 e16 |
+ e8
+}
+@end lilypond
+
+@noindent
+Vous remarquerez le contexte associé à chacun des objets. Une erreur
+sur ce point empêcherait la commande de fonctionner. Souvenez-vous que
+le contexte est celui dans lequel est placé le graveur approprié. Pour
+chaque graveur, on peut trouver son contexte par défaut en partant de
+l'objet lui-même, puis en cherchant le graveur qui le produit ; la page
+du graveur dans la RPI nous indique alors le contexte dans lequel le
+graveur se trouve normalement.
+
+
+@node Size of objects
+@subsection Size of objects
+
+@cindex modification de la taille des objets
+@cindex taille d'objets
+@cindex objets, taille
+@cindex objets, modification de taille
+
+Pour commencer, reprenons l'exemple qui se trouvait dans
+@ref{Nesting music expressions}, qui montrait comment créer une nouvelle
+portée temporaire, du type @rglos{ossia}.
+
+@cindex alignAboveContext, exemple de propriété
+@cindex @code{\with}, exemple
+
+@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
+\new Staff ="main" {
+ \relative g' {
+ r4 g8 g c4 c8 d |
+ e4 r8
+ <<
+ { f c c }
+ \new Staff \with {
+ alignAboveContext = #"main" }
+ { f8 f c }
+ >>
+ r4 |
+ }
+}
+@end lilypond
+
+Normalement, les ossia ne comportent ni clef ni indication de mesure, et
+elles sont imprimées légèrement plus petit que la portée principale.
+Nous avons déjà appris à enlever la clef et la métrique -- il suffit de
+régler le stencil de chacun sur @code{#f}, comme ceci :
+
+@cindex alignAboveContext, exemple de propriété
+@cindex @code{\with}, exemple
+@cindex stencil, exemple de propriété
+@cindex Clef, exemple de dérogation
+@cindex TimeSignature, exemple de dérogation
+
+@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
+\new Staff ="main" {
+ \relative g' {
+ r4 g8 g c4 c8 d |
+ e4 r8
+ <<
+ { f c c }
+ \new Staff \with {
+ alignAboveContext = #"main"
+ }
+ {
+ \override Staff.Clef #'stencil = ##f
+ \override Staff.TimeSignature #'stencil = ##f
+ { f8 f c }
+ }
+ >>
+ r4 |
+ }
+}
+@end lilypond
+
+@noindent
+La paire d'accolades ajoutée après la clause @code{\with} est nécessaire
+pour être sûr que les retouches (@code{\override}) ainsi que la musique
+qui se trouvent à l'intérieur soient bien appliquées à la portée
+d'ossia.
+
+Mais alors, quelle différence y a-t-il à modifier le contexte de portée
+au moyen de @code{\with} ou à modifier les stencils de la clef et de la
+métrique avec @code{\override} ? La principale différence est que les
+changements opérés dans une clause @code{\with} sont réalisés au moment
+où le contexte est créé et restent par la suite les valeurs @strong{par
+défaut} aussi longtemps que ce contexte existe, tandis que les commandes
+@code{\set} ou @code{\override} insérées dans la musique sont dynamiques
+-- elles provoquent des changements synchronisés avec un point
+particulier de la musique. Si les changements sont annulés ou
+désactivés par @code{\unset} ou@code{\revert}, les réglages reprennent
+les valeurs par défaut, c'est-à-dire celles qui ont été fixées dans la
+clause @code{\with}, ou, en l'absence de celle-ci, les valeurs par
+défaut normales.
+
+Certaines propriétés de contexte ne peuvent être modifiées que dans une
+clause @code{\with}. Il s'agit des propriétés qu'on ne peut évidemment
+plus changer après que le contexte a été créé. C'est le cas de
+@code{alignAboveContext} et de son pendant, @code{alignBelowContext}
+-- une fois que la portée a été créée, son alignement est décidé et cela
+n'aurait aucun sens de vouloir le modifier par la suite.
+
+Dans une clause @code{\with}, on peut aussi régler les valeurs par
+défaut des propriétés d'un objet. Il suffit d'utiliser la commande
+@code{\override} normale, sans s'occuper du nom de contexte
+puisqu'il ne fait pas de doute qu'il s'agit du contexte en cours de
+modification par la clause @code{\with}. Il se produirait même une
+erreur si le contexte était précisé.
+
+Remplaçons donc l'exemple ci-dessus par celui-ci :
+
+@cindex alignAboveContext, exemple de propriété
+@cindex @code{\with}, exemple
+@cindex Clef, exemple de dérogation
+@cindex TimeSignature, exemple dérogation
+
+@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
+\new Staff ="main" {
+ \relative g' {
+ r4 g8 g c4 c8 d |
+ e4 r8
+ <<
+ { f c c }
+ \new Staff \with {
+ alignAboveContext = #"main"
+ % Don't print clefs in this staff
+ \override Clef #'stencil = ##f
+ % Don't print time signatures in this staff
+ \override TimeSignature #'stencil = ##f
+ }
+ { f8 f c }
+ >>
+ r4 |
+ }
+}
+@end lilypond
+
+Venons-en finalement au changement de taille des objets.
+
+Certains objets sont créés comme des glyphes choisis dans une police de
+caractères. C'est le cas des têtes de notes, des altérations, des
+@emph{markup}, des clefs, des métriques, des nuances et des paroles.
+Pour changer leur taille, on modifie la propriété @code{font-size},
+comme nous le verrons rapidement. D'autres objets, comme les liaisons
+de phrasé ou de prolongation -- en général les objets étendus -- sont
+dessinés à la demande, si bien qu'aucune @code{font-size} ne leur est
+associée. Ces objets tirent généralement leur dimension des objets
+auxquels ils sont rattachés, de sorte qu'on ne doit pas avoir à les
+redimensionner à la main. D'autres propriétés, comme la hauteur des
+hampes et des barres de mesure, l'épaisseur des ligatures et d'autres
+lignes, et l'écartement des lignes de portée, doivent encore être
+modifiées de façon particulière.
+
+Si l'on revient à l'exemple d'ossia, commençons par changer la taille de
+police. Nous pouvons employer deux méthodes. Soit nous changeons la
+taille de police de chaque type d'objet avec des commandes comme
+celle-ci pour les têtes de notes (@code{NoteHead}) :
+
+@example
+\override NoteHead #'font-size = #-2
+@end example
+
+soit nous changeons la taille de toutes les polices à la fois grâce à la
+propriété @code{fontSize}, en utilisant @code{\set} ou en l'insérant
+dans une clause @code{\with} (mais alors sans le @code{\set}).
+
+@example
+\set fontSize = #-2
+@end example
+
+Chacune de ces méthodes réduira la taille de police de deux points par
+rapport à sa valeur précédente, sachant que chaque point réduit ou
+augmente la taille d'environ 12 %.
+
+Essayons sur l'exemple d'ossia :
+
+@cindex alignAboveContext, exemple de propriété
+@cindex @code{\with}, exemple
+@cindex Clef, exemple de dérogation
+@cindex TimeSignature, exemple de dérogation
+@cindex fontSize, exemple de propriété
+
+@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
+\new Staff ="main" {
+ \relative g' {
+ r4 g8 g c4 c8 d |
+ e4 r8
+ <<
+ { f c c }
+ \new Staff \with {
+ alignAboveContext = #"main"
+ \override Clef #'stencil = ##f
+ \override TimeSignature #'stencil = ##f
+ % Reduce all font sizes by ~24%
+ fontSize = #-2
+ }
+ { f8 f c }
+ >>
+ r4 |
+ }
+}
+@end lilypond
+
+Ce n'est pas encore parfait. Les têtes de notes et les crochets sont
+plus petits mais, proportionnellement, les hampes sont trop longues et
+les lignes de portée trop espacées. Il faut donc les réduire dans les
+mêmes proportions que les polices de caractères. La prochaine
+sous-section montrera comment faire.
+
+@node Length and thickness of objects
+@subsection Length and thickness of objects
+
+@cindex distance
+@cindex épaisseur
+@cindex longueur
+@cindex magstep
+@cindex taille, modification
+@cindex hampe, modification de longueur
+@cindex écartement des lignes, modification
+
+Dans LilyPond, les écartements et longueurs sont généralement mesurés en
+@qq{intervalles de lignes} (@emph{staff-spaces} en anglais),
+c'est-à-dire l'écartement qui sépare deux lignes adjacentes dans la
+portée -- plus rarement, il est question de demi-intervalles de lignes.
+Les propriétés d'épaisseur (@code{thickness}), quant à elles, sont
+généralement mesurées en unités d'une propriété interne appelée
+@qq{épaisseur de ligne} (@code{line-thickness}). Par exemple, les
+lignes de crescendo/decrescendo présentent par défaut une épaisseur de 1
+unité de @code{line-thickness}, alors que l'épaisseur d'une hampe est de
+1,3. Toutefois, certaines propriétés d'épaisseur sont différentes : par
+exemple, l'épaisseur des ligature se mesure en espaces de portée.
+
+Dans ces conditions, comment ajuster les longueurs à la taille des
+polices de caractères ? La solution consiste à utiliser une fonction
+spéciale appelée @code{magstep} -- pseudo facteur de zoom --, créée
+précisément dans ce but. Elle comporte un argument, le changement de
+taille de police (#-2 dans l'exemple précédent), à partir duquel elle
+applique un facteur de mise à l'échelle qui réduit, ou augmente, les
+objets en proportion. Voici comment elle s'utilise :
+
+@cindex alignAboveContext, exemple de propriété
+@cindex @code{\with}, exemple
+@cindex Clef, exemple de dérogation
+@cindex TimeSignature, exemple de dérogation
+@cindex fontSize , exemple de propriété
+@cindex StaffSymbol, exemple de dérogation
+@cindex magstep, exemple d'utilisation de la fonction
+@cindex staff-space, exemple de propriété
+@cindex stencil, exemple de propriété
+
+@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
+\new Staff ="main" {
+ \relative g' {
+ r4 g8 g c4 c8 d |
+ e4 r8
+ <<
+ { f c c }
+ \new Staff \with {
+ alignAboveContext = #"main"
+ \override Clef #'stencil = ##f
+ \override TimeSignature #'stencil = ##f
+ fontSize = #-2
+ % Reduce stem length and line spacing to match
+ \override StaffSymbol #'staff-space = #(magstep -2)
+ }
+ { f8 f c }
+ >>
+ r4 |
+ }
+}
+@end lilypond
+
+@noindent
+Puisque la longueur des hampes et plusieurs autres propriétés de
+longueur sont calculées par rapport à la valeur de la propriété
+@code{staff-space}, elles sont automatiquement mises à l'échelle. Vous
+remarquerez que cela n'affecte que la dimension verticale de l'ossia --
+la dimension horizontale étant déterminée par les objets de la portée
+principale de façon à rester synchronisée vis-à-vis d'elle, elle n'est
+pas affectée par tous ces changements de taille. Bien sûr, si l'échelle
+de toute la portée principale était modifiée, tout le placement
+horizontal s'en trouverait affecté. Il en sera question plus bas dans
+cette section.
+
+Voilà qui complète la création d'une ossia. Les tailles et longueurs de tous
+les objets peuvent être modifiées de manière analogue.
+
+Pour de petits changements d'échelle, comme dans l'exemple ci-dessus, il
+n'est généralement pas utile d'ajuster l'épaisseur des différentes
+lignes telles que les barres de mesure, les ligatures, les soufflets de
+crescendo/decrescendo, les liaisons, etc. Si l'épaisseur d'un objet en
+particulier doit être ajustée, le mieux est de modifier sa propriété
+@code{thickness}. Nous avons vu plus haut, dans
+@ref{Properties of layout objects}, un exemple de modification de
+l'épaisseur des liaisons. L'épaisseur de tous les objets tracés
+(c'est-à-dire ceux qui ne proviennent pas d'une police de caractère)
+peut être changée de la même manière.
+
+@node Placement of objects
+@section Placement of objects
+
+ @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
+