]> git.donarmstrong.com Git - lilypond.git/blob - Documentation/fr/learning/tweaks.itely
Doc-fr: update for 2.16.1 (first part)
[lilypond.git] / Documentation / fr / learning / tweaks.itely
1 @c -*- coding: utf-8; mode: texinfo; documentlanguage: fr -*-
2
3 @ignore
4     Translation of GIT committish: f199e875f7a7beb0afd17eae2038819baab767ff
5
6     When revising a translation, copy the HEAD committish of the
7     version that you are working on.  For details, see the Contributors'
8     Guide, node Updating translation committishes..
9 @end ignore
10
11 @c \version "2.16.0"
12
13 @c Translators: Valentin Villenave, Nicolas Klutchnikoff, Damien Heurtebise
14 @c Translation checkers: Jean-Charles Malahieude, John Mandereau
15 @c Translation status: post-GDP
16
17 @node Retouche de partition
18 @chapter Retouche de partition
19 @translationof Tweaking output
20
21 Ce chapitre indique comment modifier le résultat obtenu.
22 LilyPond offre de nombreuses possibilités de réglages, permettant
23 théoriquement de modifier chaque élément de votre partition.
24
25 @menu
26 * Retouches élémentaires::
27 * Le manuel de référence des propriétés internes::
28 * Apparence des objets::
29 * Positionnement des objets::
30 * Collisions d'objets::
31 * Autres retouches::
32 @end menu
33
34
35 @node Retouches élémentaires
36 @section Retouches élémentaires
37 @translationof Tweaking basics
38
39 @menu
40 * Introduction aux retouches::
41 * Objets et interfaces::
42 * Conventions de nommage des objets et propriétés::
43 * Méthodes de retouche::
44 @end menu
45
46
47 @node Introduction aux retouches
48 @subsection Introduction aux retouches
49 @translationof Introduction to tweaks
50
51 LilyPond regroupe sous le terme de @qq{retouches} (@emph{tweaks} en
52 anglais) les différents moyens dont dispose l'utilisateur pour
53 intervenir sur l'interprétation du fichier d'entrée et pour modifier
54 l'apparence du fichier de sortie.  Certaines retouches sont très
55 simples à mettre en œuvre ; d'autres sont plus complexes.  Mais
56 à elles toutes, elles permettent d'obtenir tout ce qu'on veut en matière
57 de musique imprimée.
58
59 Dans ce chapitre, nous traitons des concepts de base nécessaires
60 pour comprendre l'art de la retouche.  Puis nous présentons de
61 nombreuses commandes déjà prêtes, qu'il suffit de recopier pour
62 obtenir un résultat identique dans vos partitions ; nous en profitons
63 pour expliquer comment ces commandes ont été construites, si bien que
64 vous pouvez apprendre par la même occasion à développer vos propres
65 retouches.
66
67 Avant de vous lancer dans ce chapitre, il peut être utile de revoir la
68 section @ref{Contextes et graveurs}, dans la mesure où les contextes,
69 graveurs et autres propriétés qui y sont décrits, sont indispensables
70 pour comprendre et construire les retouches.
71
72
73 @node Objets et interfaces
74 @subsection Objets et interfaces
75 @translationof Objects and interfaces
76
77 @cindex objet
78 @cindex grob
79 @cindex spanner
80 @cindex extenseur
81 @cindex interface
82 @cindex propriétés des objets
83 @cindex objet, propriétés
84 @cindex objet de rendu
85 @cindex rendu, objets de
86
87 Toute retouche implique que l'on modifie les opérations internes
88 et les structures du programme LilyPond.  Nous allons donc, pour
89 commencer, présenter certains termes qui servent à décrire ces
90 opérations internes et ces structures.
91
92 Le terme @qq{Objet} est un terme générique qui fait référence à
93 une multitude de structures internes mises en place par LilyPond
94 durant la compilation d'un fichier d'entrée.  Ainsi, quand une
95 commande du type @code{\new Staff} apparaît, un nouvel objet du type
96 @code{Staff} est créé.  Cet objet @code{Staff} contient alors toutes les
97 propriétés associées à cette portée, par exemple son nom et son armure,
98 ainsi que le détail des graveurs qui ont été désignés pour fonctionner
99 dans ce contexte de portée.  Certains objets peuvent contenir les
100 propriétés de tous les autres contextes, comme les objets @code{Voice},
101 les objets @code{Score}, les objets @code{Lyrics} ; d'autres se
102 rapportent à tous les éléments de notation, comme les barres de mesure,
103 les liaisons, les nuances, etc.  Chaque objet dispose de son propre
104 échantillon de valeurs pour le réglage des propriétés.
105
106 Certains types d'objet portent des noms spécifiques.  Les objets qui se
107 rapportent à des éléments de notation sur le fichier de sortie, comme
108 les notes, les hampes, les liaisons de phrasé ou de prolongation, les
109 doigtés, les clefs, etc. sont appelés @qq{Objets de rendu} ; ils sont
110 aussi connus sous le nom d'@qq{Objets graphiques} (en anglais :
111 @emph{Graphical objects} ou @emph{Grobs} pour faire court).  Ce sont
112 bien des objets au sens générique ci-dessus et, en tant que tels, ils
113 reçoivent des propriétés qui leur sont associées, comme leur position,
114 leur taille, leur couleur etc.
115
116 Certains objets de rendu, comme les liaisons de phrasé, les soufflets
117 de crescendo, les marques d'octaviation et beaucoup d'autres
118 @emph{grobs}, ont pour particularité de ne pas se situer à un seul et
119 unique endroit -- ils ont un point de départ, un point d'arrivée, et
120 éventuellement d'autres propriétés relatives à leur forme.  Ces objets
121 avec une forme étendue sont appelés des bandeaux (@emph{Spanners} en
122 anglais).
123
124 Il reste à expliquer ce que sont les @qq{interfaces}.  De nombreux
125 objets, qui peuvent être très différents les uns des autres, ont pour
126 point commun de devoir être compilés simultanément.  Par exemple, tous
127 les @emph{grobs} ont une couleur, une taille, une position, etc. et
128 toutes ces propriétés sont compilées simultanément durant
129 l'interprétation du fichier d'entrée par LilyPond.  Pour alléger ces
130 opérations internes, ces actions et propriétés communes sont regroupées
131 en un objet appelé @code{grob-interface}.  Il existe beaucoup d'autres
132 regroupements de propriétés communes dans le genre de celui-ci, chacun
133 portant un nom qui se termine par @code{interface}.  En tout, on en
134 compte plus d'une centaine.  Nous verrons plus loin en quoi c'est
135 intéressant et utile pour l'utilisateur.
136
137 Ainsi s'achève le tour des principaux termes relatifs aux objets
138 que nous serons amenés à utiliser dans ce chapitre.
139
140
141 @node Conventions de nommage des objets et propriétés
142 @subsection Conventions de nommage des objets et propriétés
143 @translationof Naming conventions of objects and properties
144
145 @cindex conventions de nommage des objets
146 @cindex conventions de nommage des propriétés
147 @cindex objets, conventions de nommage
148 @cindex propriétés, conventions de nommage
149
150 Nous avons eu un aperçu, dans @ref{Contextes et graveurs}, de
151 la façon de nommer les objets.  Voici maintenant une liste de
152 référence des types d'objets et de propriétés les plus courants,
153 avec leurs conventions de nommage et quelques exemples
154 de cas concrets.  La lettre @var{A} représente n'importe quel
155 caractère alphabétique majuscule, et les lettres @var{aaa}
156 un nombre indéterminé de caractères alphabétiques minuscules.
157 Les autres caractères sont à prendre tels qu'ils se présentent.
158
159 @multitable @columnfractions .33 .33 .33
160 @headitem Type d'objet/propriété
161   @tab Convention de nommage
162   @tab Exemples
163 @item Contextes
164   @tab Aaaa ou AaaaAaaaAaaa
165   @tab Staff, GrandStaff
166 @item Objets de rendu
167   @tab Aaaa ou AaaaAaaaAaaa
168   @tab Slur, NoteHead
169 @item Graveurs
170   @tab Aaaa_aaa_engraver
171   @tab Clef_engraver, Note_heads_engraver
172 @item Interfaces
173   @tab aaa-aaa-interface
174   @tab grob-interface, break-aligned-interface
175 @item Propriétés de contexte
176   @tab aaa ou aaaAaaaAaaa
177   @tab alignAboveContext, skipBars
178 @item Propriétés d'objet de rendu
179   @tab aaa ou aaa-aaa-aaa
180   @tab direction, beam-thickness
181 @end multitable
182
183 Comme nous le verrons bientôt, les propriétés des différents
184 types d'objet sont modifiées par des commandes différentes, si bien
185 qu'il est bon de savoir reconnaître le type d'un objet ou d'une
186 propriété en fonction de son nom.
187
188
189 @node Méthodes de retouche
190 @subsection Méthodes de retouche
191 @translationof Tweaking methods
192
193 @cindex retouches, méthodologie
194 @cindex méthodes de retouche
195
196
197 @strong{La commande \override}
198
199 @cindex override, commande
200 @cindex override, syntaxe
201
202 @funindex \override
203 @funindex override
204
205 Dans @ref{Modification des propriétés d'un contexte} et dans
206 @ref{Ajout et suppression de graveurs}, nous avons déjà rencontré les
207 commandes @code{\set} et @code{\with}, qui servent à changer les
208 propriétés des @strong{contextes} et à supprimer ou ajouter des
209 @strong{graveurs}.  Voici maintenant d'autres commandes plus
210 importantes.
211
212 La commande pour changer les propriétés des @strong{objets de rendu}
213 est @code{\override}.  Du fait que cette commande modifie en profondeur
214 les propriétés internes de LilyPond, sa syntaxe n'est pas aussi simple
215 que pour les commandes vues précédemment.  Elle a besoin de savoir avec
216 précision quelle est la propriété à modifier, pour quel objet et dans
217 quel  contexte, et quelle doit être sa nouvelle valeur.  Voyons de quoi
218 il retourne.
219
220 La syntaxe générale de cette commande est :
221
222 @example
223 \override @var{Contexte}.@var{ObjetDeRendu} #'@var{propriété-rendu} = #@var{valeur}
224 @end example
225
226 @noindent
227 Elle attribue à la propriété appelée @var{propriété-rendu}, associée à
228 l'objet @var{ObjetDeRendu}, appartenant lui-même au contexte
229 @var{Contexte}, une valeur @var{valeur}.
230
231 Le contexte @var{Contexte} peut être omis (c'est généralement
232 le cas) quand il n'y a pas d'ambiguïté et qu'il s'agit d'un contexte
233 de très bas niveau, comme @code{Voice}, @code{ChordNames} ou
234 @code{Lyrics}.  Dans les exemples qui suivent, le contexte sera très
235 souvent omis.  Nous verrons plus tard dans quelles circonstances il doit
236 impérativement être indiqué.
237
238 Les sections ci-dessous traitent largement des propriétés et de leurs
239 valeurs -- voir @ref{Types de propriétés} -- mais, pour illustrer la
240 mise en forme et l'utilisation de ces commandes, nous nous limiterons à
241 n'employer que quelques propriétés et valeurs simples, facilement
242 compréhensibles.
243
244 Nous ne parlerons dans l'immédiat ni du @code{#'}, qui précède
245 toujours la propriété, ni du @code{#}, qui précède toujours la
246 valeur.  Ces deux éléments doivent obligatoirement être
247 présents sous cette forme.  Voici la commande la plus fréquente
248 pour faire des retouches, et pratiquement tout le reste de ce
249 chapitre aura pour but montrer, à travers des exemples, comment
250 l'utiliser.  L'exemple ci-dessous change la couleur des têtes de
251 notes :
252
253 @cindex couleur,exemple d'utilisation de la propriété
254 @cindex NoteHead, exemple de dérogation
255
256 @lilypond[quote,fragment,ragged-right,verbatim,relative=1]
257 c4 d
258 \override NoteHead #'color = #red
259 e4 f |
260 \override NoteHead #'color = #green
261 g4 a b c |
262 @end lilypond
263
264
265 @strong{La commande \revert}
266
267 @cindex revert, commande
268
269 @funindex \revert
270 @funindex revert
271
272 Une fois qu'elle a été modifiée, la propriété conserve sa nouvelle
273 valeur jusqu'à ce qu'elle soit à nouveau modifiée ou qu'elle rencontre
274 la commande @code{\revert}.  La commande @code{\revert} obéit à
275 la syntaxe ci-dessous et ramène la valeur de la propriété à sa valeur
276 d'origine.  Attention : dans le cas où plusieurs @code{\override}
277 ont été employés, il ne s'agit pas de la valeur précédente mais bien de
278 la valeur par défaut.
279
280 @example
281 \revert @var{Contexte}.@var{ObjetDeRendu} #'@var{propriété-de-rendu}
282 @end example
283
284 Tout comme pour la commande @code{\override}, la mention du
285 @var{Contexte} est souvent facultative.  Elle sera omise dans de
286 nombreux exemples ci-dessous.  Voici un exemple qui ramène la
287 couleur des deux dernières notes à leur valeur par défaut :
288
289 @cindex couleur,exemple d'utilisation de la propriété
290 @cindex NoteHead, exemple de dérogation
291
292 @lilypond[quote,fragment,ragged-right,verbatim,relative=1]
293 c4 d
294 \override NoteHead #'color = #red
295 e4 f |
296 \override NoteHead #'color = #green
297 g4 a
298 \revert NoteHead #'color
299 b4 c |
300 @end lilypond
301
302
303 @strong{Le préfixe \once}
304
305 @funindex \once
306 @funindex once
307
308 Les commandes @code{\override} et @code{\set} peuvent supporter
309 toutes les deux le préfixe @code{\once}.  Celui-ci a pour fonction de
310 n'appliquer la commande @code{\override} ou @code{\set} qu'à
311 l'instant musical en cours, avant que la propriété ne reprenne
312 sa valeur antérieure -- qui n'est pas forcément la valeur par défaut
313 lorsqu'un autre @code{\override} est toujours effectif.  Toujours à
314 partir du même exemple, il est possible de ne changer la couleur que
315 d'une seule note :
316
317 @cindex couleur,exemple d'utilisation de la propriété
318 @cindex NoteHead, exemple de dérogation
319
320 @lilypond[quote,fragment,ragged-right,verbatim,relative=1]
321 c4 d
322 \override NoteHead #'color = #red
323 e4 f |
324 \once \override NoteHead #'color = #green
325 g4 a
326 \revert NoteHead #'color
327 b c |
328 @end lilypond
329
330 @strong{La commande \overrideProperty}
331
332 @cindex overrideProperty, commande
333
334 @funindex \overrideProperty
335 @funindex overrideProperty
336
337 Il existe une autre forme de commande @code{\override},
338 @code{\overrideProperty}, qui est parfois utile.  Nous la mentionnons
339 ici par souci d'exhaustivité ; pour le détail, voir
340 @rextend{Retouches complexes}.
341
342 @c Maybe explain in a later iteration  -td
343
344
345 @strong{La commande \tweak}
346
347 @cindex tweak, commande
348
349 @funindex \tweak
350 @funindex tweak
351
352 La dernière commande disponible pour les retouches est
353 @code{\tweak}.  Elle sert à changer les propriétés d'objets qui
354 surviennent simultanément dans la musique, comme par exemple les
355 notes d'un accord.  La commande @code{\override} modifierait toutes
356 les notes de l'accord, tandis que @code{\tweak} permet de ne modifier
357 que l'élément immédiatement suivant dans la chaîne de saisie.
358
359 Voici un exemple.  Supposons que nous voulions changer la taille de
360 la tête de note du milieu (le mi) dans un accord de do majeur.  Voyons
361 d'abord ce que donnerait @code{\once \override} :
362
363 @cindex font-size, exemple d'utilisation de la propriété
364 @cindex NoteHead, exemple de dérogation
365
366 @lilypond[quote,fragment,ragged-right,verbatim,relative=1]
367 <c e g>4
368 \once \override NoteHead #'font-size = #-3
369 <c e g>4
370 <c e g>4
371 @end lilypond
372
373 Nous voyons que @code{\override} modifie @strong{toutes} les têtes
374 de notes de l'accord, car toutes les notes de l'accord surviennent au
375 même @strong{instant musical} et que la fonction de @code{\once}
376 est de faire porter la modification sur tous les objets du type spécifié
377 qui surviennent au même instant musical, comme le fait la commande
378 @code{\override} elle-même.
379
380 La commande @code{\tweak} opère différemment.  Elle agit
381 sur l'élément immédiatement suivant dans la chaîne de saisie.  Dans sa
382 forme la plus simple, elle ne fonctionne que sur les objets créés
383 directement à partir de l'élément suivant dans la chaîne de saisie,
384 c'est-à-dire essentiellement des têtes de notes et des articulations.
385
386 Pour reprendre notre exemple, la taille de la note du milieu d'un
387 accord peut être modifiée de cette manière :
388
389 @cindex font-size, exemple d'utilisation de la propriété
390 @cindex @code{\tweak}, exemple
391
392 @lilypond[quote,fragment,ragged-right,verbatim,relative=1]
393 <c e g>4
394 <c \tweak #'font-size #-3 e g>4
395 @end lilypond
396
397 Vous noterez que la syntaxe de @code{\tweak} est différente de
398 celle de la commande @code{\override}.  Ni le contexte,
399 ni l'objet n'ont besoin d'être spécifiés ; au contraire, cela
400 produirait une erreur si on le faisait.  Tous deux sont sous-entendus
401 par l'élément suivant dans la chaîne de saisie.  Il n'est pareillement
402 pas nécessaire d'insérer un signe égal.  La syntaxe générale
403 de la commande @code{\tweak} est donc, tout simplement :
404
405 @example
406 \tweak #'@var{propriété-de-rendu} #@var{valeur}
407 @end example
408
409 La commande @code{\tweak} est aussi utilisée quand on veut, dans
410 une série d'articulations, n'en modifier qu'une seule.  Ainsi :
411
412 @cindex couleur, exemple d'utilisation de la propriété
413 @cindex @code{\tweak}, exemple
414
415 @lilypond[quote,fragment,ragged-right,verbatim,relative=2]
416 a4^"Black"
417   -\tweak #'color #red ^"Red"
418   -\tweak #'color #green _"Green"
419 @end lilypond
420
421 @noindent
422 Attention : la commande @code{\tweak} doit être précédée d'une
423 marque d'articulation, comme si elle-même était une articulation.  Dans
424 la cas de multiples positionnements forcés (@code{^} ou @code{_}), celui
425 le plus à gauche aura préséance puisqu'il sera appliqué en dernier.
426
427 @cindex @code{\tweak} et altération
428 @cindex @code{\tweak} et objet de rendu spécifique
429
430 Les objets tels que hampes et altérations seront créés postérieurement à
431 l'événement qui survient.  L'utilisation de la commande @code{\tweak}
432 sur de tels objets indirectement créés peut se faire en nommant
433 explicitement l'objet de rendu, si tant est que LilyPond puisse remonter
434 jusqu'à l'événement originel :
435
436 @lilypond[quote,fragment,ragged-right,verbatim,relative=2]
437 <\tweak Accidental #'color #red   cis4
438  \tweak Accidental #'color #green es
439                                   g>
440 @end lilypond
441
442 Cette forme développée de la commande @code{\tweak} correspond à :
443 @example
444 \tweak @var{objet-de-rendu} #'@var{propriété-de-rendu} @var{valeur}
445 @end example
446
447 @cindex nolets imbriqués
448 @cindex triolets imbriqués
449 @cindex crochet de nolet
450 @cindex nolet, crochet
451 @cindex triolet, crochet
452
453 @funindex TupletBracket
454
455 Quand plusieurs nolets sont imbriqués et commencent au même instant
456 musical, c'est encore la commande @code{\tweak} qui est utilisée pour
457 changer l'apparence de l'un d'entre eux.  Dans l'exemple suivant, le
458 long crochet de nolet et le premier des trois crochets courts commencent
459 au même instant musical ; une commande @code{\override} s'appliquerait
460 donc à la fois aux deux.  En revanche, @code{\tweak} permet de les
461 dissocier.  La première commande @code{\tweak} indique que le long
462 crochet doit être placé au-dessus des notes, et la seconde indique que
463 le coefficient de nolet doit être imprimé en rouge sur le premier
464 crochet de triolet court.
465
466 @cindex @code{\tweak}, exemple
467 @cindex direction, exemple d'utilisation de la propriété
468 @cindex couleur, exemple d'utilisation de la propriété
469
470 @lilypond[quote,ragged-right,verbatim,fragment,relative=2]
471 \tweak #'direction #up
472 \times 4/3 {
473   \tweak #'color #red
474   \times 2/3 { c8[ c c] }
475   \times 2/3 { c8[ c c] }
476   \times 2/3 { c8[ c c] }
477 }
478 @end lilypond
479
480 Si les nolets imbriqués ne commencent pas au même moment,
481 leur apparence peut alors être modifiée de la façon habituelle,
482 avec la commande @code{\override} :
483
484 @cindex texte, exemple d'utilisation de la propriété
485 @cindex tuplet-number, exemple de fonction
486 @cindex transparence, exemple d'utilisation de la propriété
487 @cindex TupletNumber, exemple de dérogation
488
489 @c NOTE Tuplet brackets collide if notes are high on staff
490 @c See issue 509
491 @lilypond[quote,ragged-right,verbatim,fragment,relative=1]
492 \times 2/3 { c8[ c c] }
493 \once \override TupletNumber
494   #'text = #tuplet-number::calc-fraction-text
495 \times 2/3 {
496   c8[ c]
497   c8[ c]
498   \once \override TupletNumber #'transparent = ##t
499   \times 2/3 { c8[ c c] }
500   \times 2/3 { c8[ c c] }
501 }
502 @end lilypond
503
504 @seealso
505 Manuel de notation :
506 @ruser{La commande d'affinage (@emph{tweak})}.
507
508
509 @node Le manuel de référence des propriétés internes
510 @section Le manuel de référence des propriétés internes
511 @translationof The Internals Reference manual
512
513 @cindex Références internes
514
515 @menu
516 * Propriétés des objets de rendu::
517 * Propriétés listées par interface::
518 * Types de propriétés::
519 @end menu
520
521
522 @node Propriétés des objets de rendu
523 @subsection Propriétés des objets de rendu
524 @translationof Properties of layout objects
525
526 @cindex propriétés des objets de rendu
527 @cindex propriétés des objets graphiques (grobs)
528 @cindex grobs, propriétés
529 @cindex objets de rendu, propriétés
530 @cindex Manuel des références internes
531
532 Imaginons que votre partition contienne une liaison trop fine à votre
533 goût et que vous vouliez la rendre plus épaisse.  Comment vous y
534 prendre ?  Vous êtes convaincu, avec tout ce qui a été dit sur la
535 souplesse de LilyPond, qu'une telle retouche est réalisable et
536 vous vous dites qu'elle fera sans doute intervenir la commande
537 @code{\override}.  Mais existe-t-il une propriété épaisseur qui
538 s'applique à une liaison et, dans l'affirmative, comment faire pour la
539 modifier ?  C'est là qu'intervient la Référence des propriétés
540 internes.  Elle contient toutes les informations dont vous avez besoin
541 pour construire n'importe quelle commande @code{\override}.
542
543 Avant de nous plonger dans la Référence des propriétés
544 internes, un mot d'avertissement.  Il s'agit d'un document de
545 @strong{références}, de sorte qu'il ne contient pas ou peu
546 d'explications : son but est de présenter les informations de
547 façon précise et concise.  Cela peut paraître décourageant
548 à première vue.  Pas d'inquiétude !  Les conseils et les
549 explications fournis ici vous permettent de retrouver par vous-même les
550 informations dans la Référence des propriétés internes.  Il
551 suffit d'un peu de pratique.
552
553 @cindex override, exemple
554 @cindex dérogation, exemple
555 @cindex Références internes, exemple d'utilisation
556 @cindex @code{\addlyrics} -- exemple
557
558 Prenons un exemple concret tiré d'un morceau de musique connu :
559
560 @c Mozart, Die Zauberflöte Nr.7 Duett
561
562 @lilypond[quote,verbatim,relative=2]
563 {
564   \key es \major
565   \time 6/8
566   {
567     r4 bes8 bes[( g]) g |
568     g8[( es]) es d[( f]) as |
569     as8 g
570   }
571   \addlyrics {
572     The man who | feels love's sweet e -- | mo -- tion
573   }
574 }
575 @end lilypond
576
577 Admettons que nous voulions rendre les traits de liaison plus épais.
578 Est-ce possible ?  Une liaison est assurément un objet de rendu, si
579 bien que la question est @qq{Existe-t-il une propriété attachée aux
580 liaisons et qui en contrôle l'épaisseur ?}  Pour y répondre, nous
581 consultons la Référence des propriétés internes (ou RPI pour faire
582 court).
583
584 Vous trouverez sur le site de LilyPond @uref{http://lilypond.org} la
585 RPI correspondant à votre version du programme.  Allez sur la page
586 Documentation et cliquez sur Référence des propriétés internes.
587 Pour l'apprentissage, mieux vaut utiliser la version HTML standard,
588 et non la @qq{page unique en anglais} ou le PDF.  Durant la lecture
589 des prochains paragraphes, il vous est conseillé de vous y reporter
590 réellement afin que les explications prennent tout leur sens.
591
592 En dessous du bandeau d'en-tête figurent cinq liens.  Cliquez sur le
593 lien vers le @emph{Backend}, où se trouvent les informations sur les
594 objets de rendu.  En dessous du titre @strong{Backend}, choisissez
595 alors le lien vers @emph{Tous les objets de rendu}.  La page qui s'ouvre
596 énumère, dans l'ordre alphabétique, tous les objets utilisés dans votre
597 version de LilyPond.  Cliquez sur Liaisons (@emph{Slurs} en anglais),
598 et les propriétés des liaisons apparaîtront.
599
600 Il existe un autre moyen de trouver cette page, à partir du Manuel de
601 notation.  Une des pages qui traitent des liaisons contient un lien vers
602 la Référence des propriétés internes, qui mène directement à cette
603 page.  Mais lorsque vous connaissez le nom de l'objet à retoucher, le
604 plus simple est de consulter la RPI.
605
606 La page de la RPI sur les liaisons commence par préciser que les objets
607 « Liaison » sont créés par le graveur Slur_engraver.  Vient ensuite la
608 liste des réglages standard ; vous y trouverez la propriété susceptible
609 +de contrôler l'épaisseur des traits de liaison.
610
611 @example
612 @code{thickness} (nombre)
613      @code{1.2}
614      Épaisseur de ligne, généralement mesurée en @code{line-thickness}
615 @end example
616
617 Voilà qui semble approprié pour changer l'épaisseur (@emph{thickness} en
618 anglais).  On apprend que la valeur de @code{thickness} est un simple
619 nombre (@emph{number}), qu'elle est par défaut définie à 1,2 et que
620 l'unité de mesure est fixée par une autre propriété appelée
621 @code{line-thickness}.
622
623 Comme il a été indiqué, on ne trouve que peu, voire pas du tout
624 d'explication dans la RPI, mais nous en savons assez pour essayer
625 de changer l'épaisseur de la liaison.  Comme nous l'avons vu, le
626 nom de l'objet est @code{Slur}, le nom de la propriété à changer
627 est @code{thickness} et la nouvelle valeur sera un nombre supérieur
628 à @code{1.2} si l'on veut augmenter l'épaisseur du trait.
629
630 Pour construire la commande @code{\override}, il suffit donc de
631 remplacer les valeurs que nous avons trouvées en guise de noms, en
632 laissant de côté le contexte.  Commençons par une valeur très élevée
633 dans un premier temps, pour nous assurer que la commande fonctionne.
634 Nous obtenons :
635
636 @example
637 \override Slur #'thickness = #5.0
638 @end example
639
640 N'oublions pas le @code{#'} qui doit précéder le nom de la propriété et
641 le @code{#} qui doit précéder la nouvelle valeur.
642
643 La dernière question est : @qq{Où placer cette commande ?}
644 Tant qu'on n'est pas sûr de soi, la meilleure réponse est @qq{À
645 l'intérieur de l'expression musicale, avant la première liaison et
646 proche d'elle.}  Essayons :
647
648 @cindex Slur, exemple de dérogation
649 @cindex thickness, exemple d'utilisation de la propriété
650
651 @lilypond[quote,verbatim,relative=2]
652 {
653   \key es \major
654   \time 6/8
655   {
656     % Increase thickness of all following slurs from 1.2 to 5.0
657     \override Slur #'thickness = #5.0
658     r4 bes8 bes[( g]) g |
659     g8[( es]) es d[( f]) as |
660     as8 g
661   }
662   \addlyrics {
663     The man who | feels love's sweet e -- | mo -- tion
664   }
665 }
666 @end lilypond
667
668 @noindent
669 et nous constatons que le trait de liaison est beaucoup plus épais.
670
671 Telle est la façon normale de construire des commandes
672 @code{\override}.  Comme nous aurons l'occasion de le voir
673 par la suite, le problème est parfois plus complexe.  Dans
674 l'immédiat, nous en savons assez pour construire nos propres
675 commandes -- mais il faut encore s'exercer.  Les exemples
676 suivants sont là dans cette intention.
677
678
679 @subheading Détermination du contexte adéquat
680 @c VO Finding the context
681
682 @cindex contexte, détermination du
683 @cindex contexte, identification correcte du
684
685 Tout d'abord, de quoi avions-nous besoin pour préciser le contexte ?  À
686 quoi devait-il ressembler ?  Gageons que les liaisons appartiennent au
687 contexte Voix, dans la mesure où elles sont étroitement liées à une
688 ligne mélodique, mais comment en être sûr ?  Pour répondre à cette
689 question, revenons en haut de la page de la RPI consacrée aux liaisons ;
690 il est écrit : @qq{Les objets Liaison sont créés par le graveur
691 Slur_engraver}.  Ainsi les liaisons seront créées dans n'importe quel
692 contexte où se trouve le @code{Slur_engraver}.  Suivons le lien vers la
693 page @code{Slur_engraver}.  Tout en bas, on lit que le
694 @code{Slur_engraver} est un élément appartenant à sept contextes Voix,
695 dont le contexte de voix standard, @code{Voice}.  Notre hypothèse était
696 donc juste.  Et parce que @code{Voice} est un contexte de très bas
697 niveau, qu'il est activé sans ambiguïté par le fait que l'on est
698 en train de saisir des notes, on peut ici ne pas le mentionner.
699
700
701 @subheading Redéfinition pour une seule occurrence
702 @c VO Overriding once only
703
704 @cindex dérogation pour une seule fois
705 @cindex usage unique, dérogation à
706
707 @funindex \once
708 @funindex once
709
710 Dans le dernier exemple ci-dessus, @emph{toutes} les liaisons étaient
711 plus épaisses.  Et si on veut épaissir uniquement la première liaison ?
712 On recourt alors à la commande @code{\once}.  Placée juste avant la
713 commande @code{\override}, elle lui indique de ne changer que la liaison
714 commençant avec la note @strong{juste après}.  Si la note juste après
715 n'ouvre pas une liaison, la commande sera sans aucun effet -- elle ne
716 reste pas en mémoire jusqu'à la prochaine liaison, elle est purement et
717 simplement ignorée.  Il faut donc que la commande introduite par
718 @code{\once} soit insérée comme suit :
719
720 @cindex Slur, exemple de dérogation
721 @cindex thickness, exemple d'utilisation de la propriété
722 @cindex Liaison, exemple de dérogation
723 @cindex Épaisseur, exemple d'utilisation de la propriété
724
725 @lilypond[quote,verbatim,relative=2]
726 {
727   \key es \major
728   \time 6/8
729   {
730     r4 bes8
731     % Increase thickness of immediately following slur only
732     \once \override Slur #'thickness = #5.0
733     bes8[( g]) g |
734     g8[( es]) es d[( f]) as |
735     as8 g
736   }
737   \addlyrics {
738     The man who | feels love's sweet e -- | mo -- tion
739   }
740 }
741 @end lilypond
742
743 @noindent
744 Alors seule la première liaison est rendue plus épaisse.
745
746 La commande @code{\once} peut aussi être utilisée devant la commande
747 @code{\set}.
748
749
750 @subheading Rétablissement
751 @c VO Reverting
752
753 @cindex revert
754 @cindex rétablissement
755 @cindex retour
756 @cindex défaut, retour aux propriétés par
757
758 @funindex \revert
759 @funindex revert
760
761 Et si l'on voulait que les deux premières liaisons soient plus
762 épaisses ?  On pourrait bien sûr utiliser deux commandes, chacune
763 précédée de @code{\once} et placée juste avant la note par laquelle
764 débute la liaison :
765
766 @cindex liaison, exemple de dérogation
767 @cindex thickness, exemple d'utilisation de la propriété
768 @cindex épaisseur, exemple d'utilisation
769
770 @lilypond[quote,verbatim,relative=2]
771 {
772   \key es \major
773   \time 6/8
774   {
775     r4 bes8
776     % Increase thickness of immediately following slur only
777     \once \override Slur #'thickness = #5.0
778     bes[( g]) g |
779     % Increase thickness of immediately following slur only
780     \once \override Slur #'thickness = #5.0
781     g8[( es]) es d[( f]) as |
782     as8 g
783   }
784   \addlyrics {
785     The man who | feels love's sweet e -- | mo -- tion
786   }
787 }
788 @end lilypond
789
790 @noindent
791 mais on peut aussi, au lieu de la commande @code{\once}, utiliser après
792 la seconde liaison la commande @code{\revert}, qui ramène la propriété
793 @code{thickness} à sa valeur par défaut :
794
795 @cindex Slur, exemple de dérogation
796 @cindex thickness, exemple d'utilisation de la propriété
797 @cindex liaison, exemple de dérogation
798 @cindex épaisseur, exemple d'utilisation
799
800 @lilypond[quote,verbatim,relative=2]
801 {
802   \key es \major
803   \time 6/8
804   {
805     r4 bes8
806     % Increase thickness of all following slurs from 1.2 to 5.0
807     \override Slur #'thickness = #5.0
808     bes[( g]) g |
809     g8[( es]) es
810     % Revert thickness of all following slurs to default of 1.2
811     \revert Slur #'thickness
812     d8[( f]) as |
813     as8 g
814   }
815   \addlyrics {
816     The man who | feels love's sweet e -- | mo -- tion
817   }
818 }
819 @end lilypond
820
821 @noindent
822 N'importe quelle propriété modifiée par @code{\override} peut ainsi
823 être ramenée, grâce à la commande @code{\revert}, à sa valeur par
824 défaut.
825
826 Ici s'achève notre introduction à la RPI et aux retouches
827 simples.  Vous trouverez d'autres exemples dans les prochaines
828 sections de ce chapitre ; ils vous permettront, d'une part,
829 d'apprendre à connaître un peu mieux la RPI et, d'autre part, de
830 vous entraîner un peu plus à y chercher les informations.  Ces
831 exemples seront progressivement accompagnés d'explications et
832 introduiront des termes nouveaux.
833
834
835 @node Propriétés listées par interface
836 @subsection Propriétés listées par interface
837 @translationof Properties found in interfaces
838
839 @cindex interface
840 @cindex interfaces, propriétés des
841 @cindex propriétés des interfaces
842
843 Supposons maintenant que nous voulions imprimer des paroles en italique.
844 Quelle formulation de la commande @code{\override} allons-nous
845 utiliser ?  Nous consultons en premier lieu, comme précédemment, la
846 page de la RPI qui contient la liste @qq{Tous les objets de rendu}, et
847 recherchons un objet qui contrôle les paroles.  Nous trouvons
848 @code{LyricText}, qui semble approprié.  Nous cliquons dessus et nous
849 voyons apparaître les différentes propriétés des paroles, parmi
850 lesquelles @code{font-series} et @code{font-size}.  Mais aucune ne
851 propose l'italique.  Car la mise en forme des caractères est une
852 propriété commune à tous les objets d'écriture, si bien que, au lieu de
853 figurer dans tous les objets de rendu, elle est regroupée avec d'autres
854 propriétés semblables et placée dans une @strong{Interface}, la
855 @code{font-interface}.
856
857 Il nous faut donc apprendre à trouver les propriétés des interfaces
858 et découvrir les objets qui utilisent les propriétés de ces interfaces.
859
860 Retournons à la page de la RPI qui traite des paroles
861 (@emph{LyricText}).  En bas de la page est dressée sous forme de liens
862 la liste des interfaces qui concernent LyricText.  Cette liste comporte
863 plusieurs entrées, dont @code{font-interface}.  En cliquant dessus, nous
864 voyons apparaître les différentes propriétés associées à cette
865 interface, qui sont en même temps les propriétés de tous les objets qui
866 s'y rapportent, parmi lesquels LyricText.
867
868 Nous avons alors sous les yeux tous les réglages des propriétés qui
869 contrôlent les polices de caractères, et notamment
870 @code{font-shape(symbole)}, où @code{symbole} peut prendre la valeur
871 @code{upright}, @code{italics} ou @code{caps}.
872
873 Vous remarquerez que @code{font-series} et @code{font-size} figurent
874 aussi dans la liste.  La question qui ne manque pas de se poser
875 est : @qq{Comment se fait-il que les propriétés @code{font-series}
876 et @code{font-size} se retrouvent à la fois dans @code{LyricText} et
877 dans l'interface @code{font-interface} alors que ce n'est pas le cas
878 pour @code{font-shape} ?}  La réponse est que lorsqu'un objet
879 @code{LyricText} est créé, les valeurs globales par défaut de
880 @code{font-series} et @code{font-size} sont modifiées, mais pas celles
881 de @code{font-shape}.  Les possibilités de modification dans
882 @code{LyricText} ne concernent donc que les valeurs à appliquer à
883 @code{LyricText}.  Les autres objets qui dépendent de
884 @code{font-interface} fixeront leurs propriétés différemment lorsqu'ils
885 seront créés.
886
887 Voyons maintenant si nous sommes en mesure de formuler la commande
888 @code{\override} pour mettre les paroles en italique.  L'objet est
889 @code{LyricText}, la propriété est @code{font-shape} et la valeur est
890 @code{italic}.  Comme auparavant, nous laissons de côté le contexte.
891
892 Signalons rapidement -- même si cette remarque est importante -- que,
893 puisque les valeurs de @code{font-shape} se présentent sous forme de
894 symboles, elles doivent être précédées d'une simple apostrophe,
895 @code{'}.  C'est pour cette raison qu'il fallait une apostrophe devant
896 @code{thickness} dans l'exemple précédent, et qu'il en faut une devant
897 @code{font-shape}.  Ce sont à chaque fois des symboles, qui sont
898 interprétés comme tels par LilyPond.  Certains symboles peuvent être des
899 noms de propriété, comme @code{thickness} ou @code{font-shape},
900 d'autres sont des valeurs à attribuer aux propriétés, comme
901 @code{italic}.  À ne pas confondre avec les chaînes de caractères
902 libres, qui se présentent comme @code{"un texte libre"} ; pour plus
903 de détails sur les symboles et les chaînes de caractères, voir le
904 @rextend{Tutoriel Scheme}.
905
906 Ainsi, la commande @code{\override} pour mettre les paroles en italique
907 est :
908
909 @example
910 \override LyricText #'font-shape = #'italic
911 @end example
912
913 @noindent
914 et doit être placée juste devant et tout près des paroles à modifier,
915 comme ceci :
916
917 @cindex font-shape, exemple d'utilisation de la propriété
918 @cindex italic, exemple
919 @cindex LyricText, exemple de dérogation
920 @cindex @code{\addlyrics}, exemple
921
922 @lilypond[quote,fragment,ragged-right,verbatim,relative=2]
923 {
924   \key es \major
925   \time 6/8
926   {
927     r4 bes8 bes[( g]) g |
928     g8[( es]) es d[( f]) as |
929     as8 g
930   }
931   \addlyrics {
932     \override LyricText #'font-shape = #'italic
933     The man who | feels love's sweet e -- | mo -- tion
934   }
935 }
936 @end lilypond
937
938 @noindent
939 et voilà les paroles en italiques.
940
941
942 @subheading Spécification du contexte en mode lyrique
943 @c VO Specifying the context in lyric mode
944
945 @cindex contexte, spécification en mode lyrique
946 @cindex mode lyrique, spécification de contexte en
947
948 Lorsqu'il s'agit de paroles et qu'on cherche à préciser le contexte
949 sur le modèle de ce qui a été fait précédemment, la commande échoue.
950 Car une syllabe saisie en mode Paroles (@code{lyricmode}) se termine
951 obligatoirement par une espace, un saut de ligne ou un nombre.  Tout
952 autre caractère compte comme un élément de la syllabe.  C'est pourquoi
953 il faut une espace ou un saut de ligne avant le @code{@}} final, pour
954 éviter qu'il ne soit assimilé à la dernière syllabe.  De même, il faut
955 insérer des espaces de part et d'autre du point, @qq{.}, qui sépare le
956 nom de contexte du nom de l'objet, faute de quoi les deux noms seront
957 joints et l'interpréteur ne pourra pas les reconnaître.  La formulation
958 correcte est donc :
959
960 @example
961 \override Lyrics . LyricText #'font-shape = #'italic
962 @end example
963
964 @warning{Dans la saisie des paroles, pensez à toujours laisser une
965 espace entre la dernière syllabe et l'accolade fermante.}
966
967 @warning{Lorsqu'on retouche des paroles, toujours placer des espaces
968 autour du point qui sépare le nom de contexte du nom d'objet.}
969
970 @seealso
971 Manuel d'extension :
972 @rextend{Tutoriel Scheme}.
973
974
975 @node Types de propriétés
976 @subsection Types de propriétés
977 @translationof Types of properties
978
979 @cindex propriété, types de
980
981 Nous avons vu jusqu'à maintenant deux types de propriétés :
982 @code{nombre} et @code{symbole}.  Pour pouvoir fonctionner, la valeur
983 associée à une propriété doit correspondre au type attendu et suivre les
984 règles liées à ce type.  Le type de propriété est toujours donné entre
985 parenthèses après le nom de propriété dans la RPI.  Voici une liste des
986 différents types de propriétés, avec les règles qui les régissent et
987 quelques exemples d'utilisation.  Il faut, bien sûr, toujours ajouter un
988 symbole @emph{hash}, @code{#}, devant ces valeurs lors de la saisie de
989 la commande @code{\override}.
990
991 @multitable @columnfractions .2 .45 .35
992 @headitem Type de propriété
993   @tab Règles
994   @tab Exemples
995 @item Booléenne (@emph{Boolean} en anglais)
996   @tab Vrai (@emph{true} en anglais) ou Faux (@emph{false} en anglais),
997        sous la forme @code{#t} ou @code{#f}
998   @tab @code{#t}, @code{#f}
999 @item Dimension (en espaces de portée)
1000   @tab Un nombre positif décimal (en unités de lignes de portée)
1001   @tab @code{2.5}, @code{0.34}
1002 @item Direction
1003   @tab Une direction valide ou son équivalent numérique (valeur décimale
1004   comprise entre -1 et 1 seulement)
1005   @tab @code{LEFT}, @code{CENTER}, @code{UP}, @code{1}, @code{-1}
1006 @item Entier (@emph{Integer} en anglais)
1007   @tab Un nombre entier positif
1008   @tab @code{3}, @code{1}
1009 @item Liste
1010   @tab Plusieurs valeurs séparées par une espace, encadrées par des
1011   parenthèses et précédées par une apostrophe
1012   @tab @code{'(left-edge staff-bar)}, @code{'(1)},
1013        @code{'(1.0 0.25 0.5)}
1014 @item Markup (ou étiquette)
1015   @tab Toute commande @code{\markup} valide
1016   @tab @code{\markup @{ \italic "cresc." @}}
1017 @item Durée (@emph{Moment} en anglais)
1018   @tab Une durée de note construite avec la fonction make-moment
1019   @tab @code{(ly:make-moment 1 4)}, @code{(ly:make-moment 3 8)}
1020 @item Nombre
1021   @tab Une valeur décimale positive ou négative
1022   @tab @code{3.5}, @code{-2.45}
1023 @item Paire (de nombres)
1024   @tab Deux nombres séparées par @qq{espace point espace}, encadrés
1025 par des parenthèses et précédés par une apostrophe
1026   @tab @code{'(2 . 3.5)}, @code{'(0.1 . -3.2)}
1027 @item Symbole
1028   @tab L'un des symboles autorisés pour cette propriété, précédé par une
1029   apostrophe
1030   @tab @code{'italic}, @code{'inside}
1031 @item Inconnu (@emph{Unknown} en anglais)
1032   @tab Un processus, ou @code{#f} pour empêcher toute action
1033   @tab @code{bend::print}, @code{ly:text-interface::print}, @code{#f}
1034 @item Vecteur
1035   @tab Une liste de trois éléments encadrés par des parenthèses et
1036   précédés par apostrophe-hash, @code{'#}
1037   @tab @code{'#(#t #t #f)}
1038 @end multitable
1039
1040 @seealso
1041 Manuel d'extension :
1042 @rextend{Tutoriel Scheme}.
1043
1044
1045 @node Apparence des objets
1046 @section Apparence des objets
1047 @translationof Appearance of objects
1048
1049 Il est temps de mettre en pratique les notions apprises précédemment
1050 pour modifier l'allure de la partition ; les exemples qui suivent
1051 montrent l'utilisation des différentes méthodes de retouche.
1052
1053 @menu
1054 * Visibilité et couleur des objets::
1055 * Taille des objets::
1056 * Longueur et épaisseur des objets::
1057 @end menu
1058
1059
1060 @node Visibilité et couleur des objets
1061 @subsection Visibilité et couleur des objets
1062 @translationof Visibility and color of objects
1063
1064 Dans un but pédagogique, on peut être amené à masquer certains éléments
1065 d'une partition, que les élèves doivent ensuite compléter.  Imaginons,
1066 par exemple, un exercice dans lequel il faudrait rétablir les barres de
1067 mesure dans un morceau de musique.  En temps normal, les barres de
1068 mesure s'insèrent automatiquement.  Comment faire pour les effacer de la
1069 partition ?
1070
1071 Avant de nous y attaquer, souvenons-nous que les propriétés d'objets
1072 sont parfois groupées dans ce qu'on appelle des @emph{interfaces} --
1073 voir @ref{Propriétés listées par interface}.  Cela permet de rapprocher
1074 toutes les propriétés susceptibles d'être utilisées ensemble pour
1075 modifier un objet graphique -- si l'une d'elles est choisie pour un
1076 objet, elle s'appliquera à tous les autres.  Certains objets tirent
1077 alors leurs propriétés de telle ou telle interface, d'autres objets de
1078 telle ou telle autre interface.  La liste des interfaces qui contiennent
1079 les propriétés liées à un objet graphique (@emph{grob}) figure dans la
1080 RPI, en bas de la page de description du @emph{grob} ; pour voir
1081 ces propriétés, il faut aller voir ces interfaces.
1082
1083 Nous avons vu, dans @ref{Propriétés des objets de rendu}, comment
1084 trouver les informations sur les @emph{grobs}.  Nous procédons de la
1085 même manière et consultons la RPI pour connaître l'objet chargé
1086 d'imprimer les barres de mesure.  En cliquant sur @emph{Backend} puis
1087 sur @emph{Tous les objets de rendu}, nous trouvons un objet appelé
1088 @code{BarLine}.  Parmi ses propriétés, deux d'entre elles déterminent
1089 son aspect visuel : @code{break-visibility} et @code{stencil}.
1090 L'objet @code{BarLine} est également lié à plusieurs interfaces, dont la
1091 @code{grob-interface} où figurent les propriétés @code{transparent} et
1092 @code{color}.  Toutes peuvent modifier l'aspect visuel des barres de
1093 mesure -- et de beaucoup d'autres objets, bien sûr.  Examinons chacune
1094 d'elles tour à tour.
1095
1096
1097 @subheading stencil
1098 @c VO stencil
1099
1100 @cindex stencil, propriété
1101
1102 Cette propriété contrôle l'apparence des barres de mesure en précisant
1103 le type de symbole (glyphe) à imprimer.  Comme pour de nombreuses
1104 autres propriétés, on peut lui indiquer de ne rien imprimer en lui
1105 attribuant la valeur @code{#f}.  Essayons en laissant de côté, une fois
1106 encore, le contexte concerné (@code{Voice} en l'occurrence) :
1107
1108 @cindex BarLine, exemple de dérogation
1109 @cindex stencil, exemple d'utilisation de la propriété
1110
1111 @lilypond[quote,fragment,ragged-right,verbatim,relative=2]
1112 {
1113   \time 12/16
1114   \override BarLine #'stencil = ##f
1115   c4 b8 c d16 c d8 |
1116   g,8 a16 b8 c d4 e16 |
1117   e8
1118 }
1119 @end lilypond
1120
1121 Les barres de mesure sont encore là !  Pourquoi ?  Retournons
1122 à la RPI et regardons de nouveau la page qui traite des propriétés de
1123 @code{BarLine}.  En haut de la page, il est précisé que @qq{Les objets
1124 BarLine sont créés par le graveur Bar_engraver}.  Allons à la page de
1125 @code{Bar_engraver}.  Tout en bas se trouve la liste des contextes dans
1126 lesquels fonctionne ce graveur.  Tous sont du type @code{Staff}, de
1127 sorte que, si la commande @code{\override} n'a pas fonctionné comme
1128 prévu, c'est parce que @code{Barline} n'appartient pas au contexte par
1129 défaut, @code{Voice}.  Si le contexte spécifié est erroné, la commande
1130 ne fonctionne pas.  Cela n'entraîne pas de message d'erreur, et rien
1131 n'apparaît dans le fichier @emph{log}.  Essayons de corriger en
1132 mentionnant le bon contexte :
1133
1134 @cindex BarLine, exemple de dérogation
1135 @cindex stencil, exemple d'utilisation de la propriété
1136
1137 @lilypond[quote,fragment,ragged-right,verbatim,relative=2]
1138 {
1139   \time 12/16
1140   \override Staff.BarLine #'stencil = ##f
1141   c4 b8 c d16 c d8 |
1142   g,8 a16 b8 c d4 e16 |
1143   e8
1144 }
1145 @end lilypond
1146
1147 Cette fois, les barres de mesure ont disparu.
1148
1149 Vous remarquerez que l'affectation de la valeur @code{#f} à la propriété
1150 @code{stencil} déclenchera une erreur dès lors que l'objet en question se
1151 doit d'avoir des dimensions pour les nécessités du traitement.  Ce sera
1152 le cas, par exemple, si vous effacez le @code{stencil} d'un objet
1153 @code{NoteHead}.  Il vaut mieux, en pareil cas, utiliser la fonction
1154 @code{point-stencil} qui, quant à elle, attribue à l'objet une taille à
1155 zéro :
1156
1157 @lilypond[quote,verbatim,relative=2]
1158 {
1159   c4 c
1160   \once \override NoteHead #'stencil = #point-stencil
1161   c4 c
1162 }
1163 @end lilypond
1164
1165
1166 @subheading visibilité des barres (break-visibility)
1167 @c VO break-visibility
1168
1169 @cindex break-visibility, propriété
1170
1171 La RPI mentionne, à la page sur @code{BarLine}, que la propriété
1172 @code{break-visibility} attend comme argument un vecteur de trois
1173 booléens.  Ceux-ci indiquent respectivement si les barres de mesure
1174 doivent être imprimées ou non à la fin de la ligne, à l'intérieur de la
1175 ligne et au début de la ligne.  Dans notre cas, nous voulons que toutes
1176 les barres soient supprimées, si bien que la valeur dont nous avons
1177 besoin est @code{'#(#f #f #f)}.  Essayons, sans oublier d'ajouter le
1178 contexte @code{Staff}.  Vous remarquerez que, en plus de cette valeur,
1179 nous ajoutons @code{#'#} devant la parenthèse ouvrante.  Le @code{'#}
1180 est nécessaire car il fait partie intégrante de la valeur contenant un
1181 vecteur, et le premier @code{#} est là, comme toujours avec la commande
1182 @code{\override}, pour introduire la valeur elle-même.
1183
1184 @cindex BarLine, exemple de dérogation
1185 @cindex break-visibility exemple d'utilisation de la propriété
1186
1187 @lilypond[quote,fragment,ragged-right,verbatim,relative=2]
1188 {
1189   \time 12/16
1190   \override Staff.BarLine #'break-visibility = #'#(#f #f #f)
1191   c4 b8 c d16 c d8 |
1192   g,8 a16 b8 c d4 e16 |
1193   e8
1194 }
1195 @end lilypond
1196
1197 Comme on peut le constater, cette solution-là aussi supprime les barres
1198 de mesure.
1199
1200
1201 @subheading transparence
1202 @c VO transparent
1203
1204 @cindex transparent, propriété
1205 @cindex transparence
1206
1207 La RPI mentionne, à la page sur @code{grob-interface}, que la propriété
1208 @code{transparent} attend comme argument un booléen.  Il faudrait donc
1209 mettre @code{#t} pour rendre l'objet transparent.  Dans cet exemple,
1210 essayons de rendre transparente la métrique (@emph{time signature} en
1211 anglais) plutôt que les barres de mesure.  Pour cela, il nous faut
1212 trouver le nom du @emph{grob} chargé de l'indication de mesure.  De
1213 retour sur la page @qq{Tous les objets de rendu} de la RPI, nous
1214 cherchons les propriétés de l'objet @code{TimeSignature}.  Celui-ci est
1215 géré par le graveur @code{Time_signature_engraver} qui, comme vous
1216 pouvez le constater, appartient au contexte @code{Staff} et peut se
1217 rattacher à la @code{grob-interface}.  Dans ces conditions, la commande
1218 pour rendre la métrique transparente est :
1219
1220 @cindex TimeSignature, exemple de dérogation
1221 @cindex transparent, exemple d'utilisation de la propriété
1222
1223 @lilypond[quote,fragment,ragged-right,verbatim,relative=2]
1224 {
1225   \time 12/16
1226   \override Staff.TimeSignature #'transparent = ##t
1227   c4 b8 c d16 c d8 |
1228   g,8 a16 b8 c d4 e16 |
1229   e8
1230 }
1231 @end lilypond
1232
1233 @noindent
1234 La métrique a bien disparu mais la commande a laissé un blanc en lieu et
1235 place du chiffrage.  Ce peut être souhaitable dans le cadre d'un
1236 exercice, afin que les élèves aient la place pour compléter, mais dans
1237 d'autres circonstances, ce peut être gênant.  Pour y remédier,
1238 attribuons plutôt au stencil des métriques la valeur @code{#f} :
1239
1240 @cindex TimeSignature, exemple de dérogation
1241 @cindex stencil, exemple d'utilisation de la propriété
1242
1243 @lilypond[quote,fragment,ragged-right,verbatim,relative=2]
1244 {
1245   \time 12/16
1246   \override Staff.TimeSignature #'stencil = ##f
1247   c4 b8 c d16 c d8 |
1248   g,8 a16 b8 c d4 e16 |
1249   e8
1250 }
1251 @end lilypond
1252
1253 @noindent
1254 La différence est flagrante : le fait d'attribuer au stencil la
1255 valeur @code{#f} supprime totalement l'objet, tandis que le fait de le
1256 rendre @code{transparent} le laisse en place, mais de façon invisible.
1257
1258
1259 @subheading couleur
1260 @c VO color
1261
1262 @cindex color, propriété
1263
1264 Essayons enfin de rendre les barres de mesure invisibles en les colorant
1265 en blanc.  La difficulté est de savoir si les barres blanches vont
1266 couper ou non les lignes de la portée aux endroits où elles se
1267 croisent.  Vous verrez dans les exemples ci-dessous que cela peut se
1268 produire, sans qu'on le sache à l'avance.  Les explications de ce
1269 phénomène et les solutions pour y remédier sont exposées dans
1270 @ruser{Blanchiment des objets}.  Pour le moment, acceptons cet
1271 inconvénient et concentrons-nous sur l'apprentissage de la gestion des
1272 couleurs.
1273
1274 La @code{grob-interface} indique que la valeur de la propriété
1275 @code{color} est une liste, sans plus d'explication.  En fait, cette
1276 liste est une liste de valeurs en unités internes ; pour éviter
1277 d'avoir à chercher ce qu'il faut y mettre, il existe différents moyens
1278 d'indiquer la couleur.  Le premier moyen consiste à utiliser l'une des
1279 couleurs @emph{normales} de la première @ruser{Liste des couleurs}.
1280 Pour mettre les barres de mesure en blanc, on écrit :
1281
1282 @cindex BarLine, exemple de dérogation
1283 @cindex color, exemple d'utilisation de la propriété
1284
1285 @lilypond[quote,fragment,ragged-right,verbatim,relative=2]
1286 {
1287   \time 12/16
1288   \override Staff.BarLine #'color = #white
1289   c4 b8 c d16 c d8 |
1290   g,8 a16 b8 c d4 e16 |
1291   e8
1292 }
1293 @end lilypond
1294
1295 @noindent
1296 et nous constatons que les barres de mesure sont une fois de plus
1297 invisibles.  Attention : aucune apostrophe ne précède @code{white}
1298 -- il ne s'agit pas d'un symbole mais d'une @strong{fonction}.  Quand on
1299 l'invoque, elle fournit une liste de valeurs internes requises pour
1300 changer la couleur en blanc.  Les autres couleurs aussi, dans la
1301 @qq{liste normale}, sont des fonctions.  Pour en être certain, vous
1302 pouvez faire l'essai en choisissant une autre fonction de la liste en
1303 guise de couleur.
1304
1305 @cindex couleur X11
1306 @cindex X11, couleurs
1307
1308 @funindex x11-color
1309
1310 Le deuxième moyen de changer la couleur consiste à utiliser la deuxième
1311 @ruser{Liste des couleurs}, dite noms de couleurs X11.  Ceux-ci doivent
1312 obligatoirement être précédés d'une autre fonction, qui convertit les
1313 noms de couleurs X11 en une liste de valeurs internes, @code{x11-color},
1314 comme ceci :
1315
1316 @cindex BarLine, exemple de dérogation
1317 @cindex color, exemple d'utilisation de la propriété
1318
1319 @lilypond[quote,fragment,ragged-right,verbatim,relative=2]
1320 {
1321   \time 12/16
1322   \override Staff.BarLine #'color = #(x11-color 'white)
1323   c4 b8 c d16 c d8 |
1324   g,8 a16 b8 c d4 e16 |
1325   e8
1326 }
1327 @end lilypond
1328
1329 @noindent
1330 Vous noterez que, dans ce cas, la fonction @code{x11-color} admet un
1331 symbole comme argument ; il faut donc placer une apostrophe devant
1332 le symbole et insérer les deux à l'intérieur de parenthèses.
1333
1334 @cindex rgb, couleur
1335 @cindex couleurs rgb
1336
1337 @funindex rgb-color
1338
1339 Il existe une troisième fonction, écrite pour convertir les valeurs RVB
1340 en couleurs internes -- la fonction @code{rgb-color}.  Elle comporte
1341 trois arguments, donnant respectivement l'intensité du rouge, du vert et
1342 du bleu.  Ces arguments prennent des valeurs comprises entre 0 et 1.
1343 Ainsi, pour choisir la couleur rouge, la valeur serait
1344 @code{(rgb-color 1 0 0)} ; pour le blanc, ce serait
1345 @code{(rgb-color 1 1 1)} :
1346
1347 @cindex BarLine, exemple de dérogation
1348 @cindex color, exemple d'utilisation de la propriété
1349
1350 @lilypond[quote,fragment,ragged-right,verbatim,relative=2]
1351 {
1352   \time 12/16
1353   \override Staff.BarLine #'color = #(rgb-color 1 1 1)
1354   c4 b8 c d16 c d8 |
1355   g,8 a16 b8 c d4 e16 |
1356   e8
1357 }
1358 @end lilypond
1359
1360 Enfin, il existe une échelle de gris parmi les possibilités de couleurs
1361 X11.  Elle va du noir (@code{'grey0}) au blanc (@code{'grey100}), avec
1362 un pas de 1.  Essayons de l'utiliser en attribuant à tous les objets de
1363 notre exemple différentes nuances de gris :
1364
1365 @cindex StaffSymbol, exemple de dérogation
1366 @cindex TimeSignature, exemple de dérogation
1367 @cindex Clef, exemple de dérogation
1368 @cindex NoteHead, exemple de dérogation
1369 @cindex Stem, exemple de dérogation
1370 @cindex BarLine, exemple de dérogation
1371 @cindex color, exemple d'utilisation de la propriété
1372 @cindex x11-color, exemple d'utilisation
1373
1374 @lilypond[quote,fragment,ragged-right,verbatim,relative=2]
1375 {
1376   \time 12/16
1377   \override Staff.StaffSymbol   #'color = #(x11-color 'grey30)
1378   \override Staff.TimeSignature #'color = #(x11-color 'grey60)
1379   \override Staff.Clef          #'color = #(x11-color 'grey60)
1380   \override Voice.NoteHead      #'color = #(x11-color 'grey85)
1381   \override Voice.Stem          #'color = #(x11-color 'grey85)
1382   \override Staff.BarLine       #'color = #(x11-color 'grey10)
1383   c4 b8 c d16 c d8 |
1384   g,8 a16 b8 c d4 e16 |
1385   e8
1386 }
1387 @end lilypond
1388
1389 @noindent
1390 Vous remarquerez le contexte associé à chacun des objets.  Une erreur
1391 sur ce point empêcherait la commande de fonctionner.  Souvenez-vous que
1392 le contexte est celui dans lequel est placé le graveur approprié.  Pour
1393 chaque graveur, on peut trouver son contexte par défaut en partant de
1394 l'objet lui-même, puis en cherchant le graveur qui le produit ; la
1395 page du graveur dans la RPI nous indique alors le contexte dans lequel
1396 le graveur se trouve normalement.
1397
1398
1399 @node Taille des objets
1400 @subsection Taille des objets
1401 @translationof Size of objects
1402
1403 @cindex modification de la taille des objets
1404 @cindex taille d'objets
1405 @cindex objets, taille
1406 @cindex objets, modification de taille
1407
1408 Pour commencer, reprenons l'exemple qui se trouvait dans
1409 @ref{Expressions musicales imbriquées}, qui montrait comment créer une
1410 nouvelle portée temporaire, du type @rglos{ossia}.
1411
1412 @cindex alignAboveContext, exemple d'utilisation de la propriété
1413 @cindex @code{\with}, exemple
1414
1415 @lilypond[quote,fragment,ragged-right,verbatim,relative=2]
1416 \new Staff ="main" {
1417   \relative g' {
1418     r4 g8 g c4 c8 d |
1419     e4 r8
1420     <<
1421       { f8 c c }
1422       \new Staff \with {
1423         alignAboveContext = #"main" }
1424       { f8 f c }
1425     >>
1426     r4 |
1427   }
1428 }
1429 @end lilypond
1430
1431 Normalement, les ossias ne comportent ni clef ni indication de mesure,
1432 et elles sont imprimées légèrement plus petit que la portée principale.
1433 Nous avons déjà appris à enlever la clef et la métrique -- il suffit de
1434 régler le stencil de chacun sur @code{#f}, comme ceci :
1435
1436 @cindex alignAboveContext, exemple d'utilisation de la propriété
1437 @cindex @code{\with}, exemple
1438 @cindex stencil, exemple d'utilisation de la propriété
1439 @cindex Clef, exemple de dérogation
1440 @cindex TimeSignature, exemple de dérogation
1441
1442 @lilypond[quote,fragment,ragged-right,verbatim,relative=2]
1443 \new Staff ="main" {
1444   \relative g' {
1445     r4 g8 g c4 c8 d |
1446     e4 r8
1447     <<
1448       { f8 c c }
1449       \new Staff \with {
1450         alignAboveContext = #"main"
1451       }
1452       {
1453         \override Staff.Clef #'stencil = ##f
1454         \override Staff.TimeSignature #'stencil = ##f
1455         { f8 f c }
1456       }
1457     >>
1458     r4 |
1459   }
1460 }
1461 @end lilypond
1462
1463 @noindent
1464 La paire d'accolades ajoutée après la clause @code{\with} est nécessaire
1465 pour être sûr que les retouches (@code{\override}) ainsi que la musique
1466 qui se trouvent à l'intérieur soient bien appliquées à la portée
1467 d'ossia.
1468
1469 Mais alors, quelle différence y a-t-il à modifier le contexte de portée
1470 au moyen de @code{\with} ou à modifier les stencils de la clef et de la
1471 métrique  avec @code{\override} ?  La principale différence est que
1472 les changements opérés dans une clause @code{\with} sont réalisés au
1473 moment où le contexte est créé et restent par la suite les valeurs
1474 @strong{par défaut} aussi longtemps que ce contexte existe, tandis que
1475 les commandes @code{\set} ou @code{\override} insérées dans la musique
1476 sont dynamiques -- elles provoquent des changements synchronisés avec un
1477 point particulier de la musique.  Si les changements sont annulés ou
1478 désactivés par @code{\unset} ou @code{\revert}, les réglages reprennent
1479 leurs valeurs par défaut, c'est-à-dire celles qui ont été fixées dans la
1480 clause @code{\with}, ou, en l'absence de celle-ci, les valeurs par
1481 défaut normales.
1482
1483 Certaines propriétés de contexte ne peuvent être modifiées que dans une
1484 clause @code{\with}.  Il s'agit des propriétés qu'on ne peut évidemment
1485 plus changer après que le contexte a été créé.  C'est le cas de
1486 @code{alignAboveContext} et de son pendant, @code{alignBelowContext}
1487 -- une fois que la portée a été créée, son alignement est décidé et cela
1488 n'aurait aucun sens de vouloir le modifier par la suite.
1489
1490 Dans une clause @code{\with}, on peut aussi régler les valeurs par
1491 défaut des propriétés d'un objet.  Il suffit d'utiliser la commande
1492 @code{\override} normale, sans s'occuper du nom de contexte
1493 puisqu'il ne fait pas de doute qu'il s'agit du contexte en cours de
1494 modification par la clause @code{\with}.  Il se produirait même une
1495 erreur si le contexte était précisé.
1496
1497 Remplaçons donc l'exemple ci-dessus par celui-ci :
1498
1499 @cindex alignAboveContext, exemple d'utilisation de la propriété
1500 @cindex @code{\with}, exemple
1501 @cindex Clef, exemple de dérogation
1502 @cindex TimeSignature, exemple de dérogation
1503
1504 @lilypond[quote,fragment,ragged-right,verbatim,relative=2]
1505 \new Staff ="main" {
1506   \relative g' {
1507     r4 g8 g c4 c8 d |
1508     e4 r8
1509     <<
1510       { f8 c c }
1511       \new Staff \with {
1512         alignAboveContext = #"main"
1513         % Don't print clefs in this staff
1514         \override Clef #'stencil = ##f
1515         % Don't print time signatures in this staff
1516         \override TimeSignature #'stencil = ##f
1517       }
1518       { f8 f c }
1519     >>
1520     r4 |
1521   }
1522 }
1523 @end lilypond
1524
1525 Venons-en finalement au changement de taille des objets.
1526
1527 Certains objets sont créés comme des glyphes choisis dans une police de
1528 caractères.  C'est le cas des têtes de notes, des altérations, des
1529 @emph{markup}, des clefs, des métriques, des nuances et des paroles.
1530 Pour changer leur taille, on modifie la propriété @code{font-size},
1531 comme nous le verrons rapidement.  D'autres objets, comme les liaisons
1532 de phrasé ou de prolongation -- en général les objets étendus -- sont
1533 dessinés à la demande, si bien qu'aucune @code{font-size} ne leur est
1534 associée.  Ces objets tirent généralement leur dimension des objets
1535 auxquels ils sont rattachés, de sorte qu'on ne doit pas avoir à les
1536 redimensionner à la main.  D'autres propriétés, comme la hauteur des
1537 hampes et des barres de mesure, l'épaisseur des ligatures et d'autres
1538 lignes, et l'écartement des lignes de portée, doivent encore être
1539 modifiées de façon particulière.
1540
1541 Si l'on revient à l'exemple d'ossia, commençons par changer la taille de
1542 police.  Nous pouvons employer deux méthodes.  Soit nous changeons la
1543 taille de police de chaque type d'objet avec des commandes comme
1544 celle-ci pour les têtes de notes (@code{NoteHead}) :
1545
1546 @example
1547 \override NoteHead #'font-size = #-2
1548 @end example
1549
1550 soit nous changeons la taille de toutes les polices à la fois grâce à la
1551 propriété @code{fontSize}, en utilisant @code{\set} ou en l'insérant
1552 dans une clause @code{\with} (mais alors sans le @code{\set}).
1553
1554 @example
1555 \set fontSize = #-2
1556 @end example
1557
1558 Chacune de ces méthodes réduira la taille de police de deux points par
1559 rapport à sa valeur précédente, sachant que chaque point réduit ou
1560 augmente la taille d'environ 12 %.
1561
1562 Essayons sur l'exemple d'ossia :
1563
1564 @cindex alignAboveContext, exemple d'utilisation de la propriété
1565 @cindex @code{\with}, exemple
1566 @cindex Clef, exemple de dérogation
1567 @cindex TimeSignature, exemple de dérogation
1568 @cindex fontSize, exemple d'utilisation de la propriété
1569
1570 @lilypond[quote,fragment,ragged-right,verbatim,relative=2]
1571 \new Staff ="main" {
1572   \relative g' {
1573     r4 g8 g c4 c8 d |
1574     e4 r8
1575     <<
1576       { f8 c c }
1577       \new Staff \with {
1578         alignAboveContext = #"main"
1579         \override Clef #'stencil = ##f
1580         \override TimeSignature #'stencil = ##f
1581         % Reduce all font sizes by ~24%
1582         fontSize = #-2
1583       }
1584       { f8 f c }
1585     >>
1586     r4 |
1587   }
1588 }
1589 @end lilypond
1590
1591 Ce n'est pas encore parfait.  Les têtes de notes et les crochets sont
1592 plus petits mais, proportionnellement, les hampes sont trop longues et
1593 les lignes de la portée trop espacées.  Il faut donc les réduire dans
1594 les mêmes proportions que les polices de caractères.  La prochaine
1595 sous-section montrera comment faire.
1596
1597
1598 @node Longueur et épaisseur des objets
1599 @subsection Longueur et épaisseur des objets
1600 @translationof Length and thickness of objects
1601
1602 @cindex distance
1603 @cindex épaisseur
1604 @cindex longueur
1605 @cindex magstep
1606 @cindex taille, modification
1607 @cindex hampe, modification de longueur
1608 @cindex écartement des lignes, modification
1609
1610 Dans LilyPond, les écartements et longueurs sont généralement mesurés en
1611 @qq{intervalles de lignes} (@emph{staff-spaces} en anglais),
1612 c'est-à-dire l'écartement qui sépare deux lignes adjacentes dans la
1613 portée -- plus rarement, il est question de demi-intervalles de lignes.
1614 Les propriétés d'épaisseur (@code{thickness}), quant à elles, sont
1615 généralement mesurées en unités d'une propriété interne appelée
1616 @qq{épaisseur de ligne} (@code{line-thickness}).  Par exemple, les
1617 lignes de (de)crescendo présentent par défaut une épaisseur d'une
1618 unité de @code{line-thickness}, alors que l'épaisseur d'une hampe
1619 est de 1,3.  Toutefois, certaines propriétés d'épaisseur sont
1620 différentes : par exemple, l'épaisseur des ligature --
1621 @code{beam-thickness} -- se mesure en espaces de portée.
1622
1623 Dans ces conditions, comment ajuster les longueurs à la taille des
1624 polices de caractères ?  La solution consiste à utiliser une
1625 fonction spéciale appelée @code{magstep} -- pseudo facteur de zoom --,
1626 créée précisément dans ce but.  Elle comporte un argument, le changement
1627 de taille de police (@code{#-2} dans l'exemple précédent), à partir
1628 duquel elle applique un facteur de mise à l'échelle qui réduit, ou
1629 augmente, les objets en question.  Voici comment elle s'utilise :
1630
1631 @cindex alignAboveContext, exemple d'utilisation de la propriété
1632 @cindex @code{\with}, exemple
1633 @cindex Clef, exemple de dérogation
1634 @cindex TimeSignature, exemple de dérogation
1635 @cindex fontSize , exemple d'utilisation de la propriété
1636 @cindex StaffSymbol, exemple de dérogation
1637 @cindex magstep, exemple d'utilisation de la fonction
1638 @cindex staff-space, exemple d'utilisation de la propriété
1639 @cindex stencil, exemple d'utilisation de la propriété
1640
1641 @lilypond[quote,fragment,ragged-right,verbatim,relative=2]
1642 \new Staff ="main" {
1643   \relative g' {
1644     r4 g8 g c4 c8 d |
1645     e4 r8
1646     <<
1647       { f8 c c }
1648       \new Staff \with {
1649         alignAboveContext = #"main"
1650         \override Clef #'stencil = ##f
1651         \override TimeSignature #'stencil = ##f
1652         fontSize = #-2
1653         % Reduce stem length and line spacing to match
1654         \override StaffSymbol #'staff-space = #(magstep -2)
1655       }
1656       { f8 f c }
1657     >>
1658     r4 |
1659   }
1660 }
1661 @end lilypond
1662
1663 @noindent
1664 Puisque la longueur des hampes et plusieurs autres propriétés de
1665 longueur sont calculées par rapport à la valeur de la propriété
1666 @code{staff-space}, elles sont automatiquement mises à l'échelle.  Vous
1667 remarquerez que cela n'affecte que la dimension verticale de l'ossia --
1668 la dimension horizontale étant déterminée par les objets de la portée
1669 principale de façon à rester synchronisée vis-à-vis d'elle, elle n'est
1670 pas affectée par tous ces changements de taille.  Bien sûr, si l'échelle
1671 de toute la portée principale était modifiée, tout le placement
1672 horizontal s'en trouverait affecté.  Il en sera question plus bas dans
1673 cette section.
1674
1675 Voilà qui complète la création d'une ossia. Les taille et longueur de
1676 tous les objets peuvent être modifiées de manière analogue.
1677
1678 Pour de petits changements d'échelle, comme dans l'exemple ci-dessus, il
1679 n'est généralement pas utile d'ajuster l'épaisseur des différentes
1680 lignes telles que les barres de mesure, les ligatures, les soufflets de
1681 crescendo ou decrescendo, les liaisons, etc.  Si l'épaisseur d'un objet
1682 en particulier doit être ajustée, le mieux est de modifier sa propriété
1683 @code{thickness}.  Nous avons vu plus haut, dans
1684 @ref{Propriétés des objets de rendu}, un exemple de modification de
1685 l'épaisseur des liaisons.  L'épaisseur de tous les objets tracés
1686 (c'est-à-dire ceux qui ne proviennent pas d'une police de caractère)
1687 peut être changée de la même manière.
1688
1689
1690 @node Positionnement des objets
1691 @section Positionnement des objets
1692 @translationof Placement of objects
1693
1694  @menu
1695 * Comportement automatique::
1696 * Objets inclus dans la portée::
1697 * Objets hors de la portée::
1698 @end menu
1699
1700
1701 @node Comportement automatique
1702 @subsection Comportement automatique
1703 @translationof Automatic behavior
1704
1705 @cindex objets de la portée
1706 @cindex objets extérieurs à la portée
1707 @cindex portée, objets de la
1708 @cindex portée, objets extérieurs à la
1709
1710 Dans la notation musicale, il y a des objets qui appartiennent à la
1711 portée et d'autres qui sont placés à l'extérieur de la portée. On les
1712 appelle respectivement les @qq{objets de la portée} (@emph{within-staff
1713 objects} en anglais) et les @qq{objets extérieurs à la portée}
1714 (@emph{outside-staff objects} en anglais).
1715
1716 Les objets de la portée sont ceux qui sont placés sur la portée
1717 -- les têtes de notes et les hampes, les altérations, etc.  Leur
1718 position est généralement déterminée par la musique elle-même -- ils
1719 sont placés verticalement sur des lignes spécifiques ou sont liés à
1720 d'autres objets placés de cette manière.  Normalement, les collisions
1721 entre les têtes et queues de notes et les altérations dans des accords
1722 proches sont évitées automatiquement.  Comme nous le verrons rapidement,
1723 il existe des commandes et des possibilités de retouche qui permettent
1724 de modifier ce comportement automatique.
1725
1726 Parmi les objets extérieurs à la portée, on compte des éléments comme
1727 les marques de reprise, les indications de texte ou de nuance.  Dans
1728 LilyPond, la règle est de placer verticalement ces objets extérieurs à
1729 la portée le plus près possible de la portée, tout en évitant la
1730 collision avec d'autres objets.  LilyPond utilise la propriété
1731 @code{outside-staff-priority} pour déterminer l'ordre selon lequel
1732 placer ces objets, de la manière suivante :
1733
1734 D'abord, LilyPond dresse la liste de tous les objets extérieurs à la
1735 portée.  Puis ceux-ci sont classés suivant leur
1736 @code{outside-staff-priority}.  Enfin, ils sont pris un par un, en
1737 commençant par les objets avec la @code{outside-staff-priority} la plus
1738 basse, et placés de façon à ne pas entrer en collision avec d'autres
1739 objets déjà placés.  Cela signifie que, si deux @emph{grobs} extérieurs
1740 à la portée doivent occuper la même place, c'est celui qui a la
1741 @code{outside-staff-priority} la plus basse qui est placé le plus près
1742 de la portée.  Et si deux objets ont la même
1743 @code{outside-staff-priority}, le premier rencontré sera placé au plus
1744 près de la portée.
1745
1746 Dans l'exemple suivant, tous les @emph{markup} ont la même priorité,
1747 dans la mesure où rien n'est indiqué explicitement.  Vous remarquerez
1748 que @code{Text3} est également positionné près de la portée, juste
1749 en-dessous de @code{Text2}.
1750
1751 @cindex markup, exemple
1752
1753 @lilypond[quote,fragment,ragged-right,verbatim,relative=2]
1754 c2^"Text1"
1755 c2^"Text2" |
1756 c2^"Text3"
1757 c2^"Text4" |
1758 @end lilypond
1759
1760 Les portées aussi sont positionnées, par défaut, le plus près possible
1761 les unes des autres, en ménageant tout de même une certaine séparation.
1762 Si des notes se rapprochent nettement d'une portée adjacente, elles ne
1763 forceront les portées à s'écarter que s'il y a un risque de
1764 chevauchement.
1765
1766 @lilypond[quote,ragged-right,verbatim]
1767 <<
1768   \new Staff {
1769     \relative c' { c4 a, }
1770   }
1771   \new Staff {
1772     \relative c'''' { c4 a, }
1773   }
1774 >>
1775 @end lilypond
1776
1777
1778 @node Objets inclus dans la portée
1779 @subsection Objets inclus dans la portée
1780 @translationof Within-staff objects
1781
1782 Nous avons vu que les commandes @code{\voiceXXX} jouent sur la
1783 direction des liaisons, des doigtés et sur tout autre élément lié à
1784 l'orientation des hampes. Ces commandes sont essentielles dans
1785 la musique polyphonique pour distinguer des lignes mélodiques
1786 entremêlées.  Mais il arrive qu'on ait besoin de modifier ce
1787 comportement automatique.  On peut le faire pour toutes les parties de
1788 la musique ou juste pour une note.  La propriété qui contrôle ce
1789 comportement est la propriété @code{direction} de chaque objet.
1790 Expliquons d'abord ce qu'elle fait, puis nous présenterons un certain
1791 nombre de commandes déjà prêtes qui évitent, pour les modifications les
1792 plus courantes, d'avoir à encoder les retouches.
1793
1794 Certains objets comme les traits des liaisons se recourbent tantôt
1795 vers le haut, tantôt vers le bas ; d'autres encore, comme les hampes et
1796 les crochets, peuvent se décaler vers la gauche ou vers la droite selon
1797 qu'ils pointent vers le haut ou vers le bas.  Ce comportement est géré
1798 automatiquement dès lors que @code{direction} est activé.
1799
1800 @cindex down
1801 @cindex up
1802 @cindex center
1803 @cindex neutral
1804
1805 L'exemple ci-dessous montre dans la première mesure le comportement par
1806 défaut des hampes -- celles des notes les plus hautes pointant vers le
1807 bas et celles des notes les plus basses pointant vers le haut ;
1808 viennent ensuite quatre notes avec les hampes forcées vers le bas, puis
1809 quatre autres avec les hampes forcées vers le haut, et pour finir quatre
1810 notes de nouveau avec le comportement par défaut.
1811
1812 @cindex Stem, exemple de dérogation
1813 @cindex direction, exemple d'utilisation de la propriété
1814
1815 @lilypond[quote,fragment,ragged-right,verbatim,relative=2]
1816 a4 g c a |
1817 \override Stem #'direction = #DOWN
1818 a4 g c a |
1819 \override Stem #'direction = #UP
1820 a4 g c a |
1821 \revert Stem #'direction
1822 a4 g c a |
1823 @end lilypond
1824
1825 Nous utilisons ici les directions @code{DOWN} et @code{UP}.  Elles
1826 correspondent respectivement aux valeurs @code{-1} et @code{+1},
1827 que l'on peut utiliser à la place.  La valeur @code{0} peut aussi être
1828 utilisée dans certains cas.  Elle est interprétée comme un @code{UP}
1829 pour les hampes, et comme un @qq{centré} pour d'autres objets.  Il
1830 existe une direction, @code{CENTER}, qui correspond à la
1831 valeur @code{0}.
1832
1833 Quoi qu'il en soit, ces retouches manuelles sont rarement utilisées car
1834 il existe des équivalents sous forme de commandes prédéfinies.  Voici un
1835 tableau des plus courantes.  Lorsque ce n'est pas évident, leur
1836 signification est précisée.
1837
1838 @multitable @columnfractions .2 .2 .25 .35
1839 @headitem Bas/Gauche
1840   @tab Haut/Droite
1841   @tab Annulation
1842   @tab Effet
1843 @item @code{\arpeggioArrowDown}
1844   @tab @code{\arpeggioArrowUp}
1845   @tab @code{\arpeggioNormal}
1846   @tab Flèche en bas, en haut, ou pas de flèche
1847 @item @code{\dotsDown}
1848   @tab @code{\dotsUp}
1849   @tab @code{\dotsNeutral}
1850   @tab Déplacement des points pour éviter les lignes de portée
1851 @item @code{\dynamicDown}
1852   @tab @code{\dynamicUp}
1853   @tab @code{\dynamicNeutral}
1854   @tab
1855 @item @code{\phrasingSlurDown}
1856   @tab @code{\phrasingSlurUp}
1857   @tab @code{\phrasingSlurNeutral}
1858   @tab Attention : à distinguer des commandes de liaison ci-dessous
1859 @item @code{\slurDown}
1860   @tab @code{\slurUp}
1861   @tab @code{\slurNeutral}
1862   @tab
1863 @item @code{\stemDown}
1864   @tab @code{\stemUp}
1865   @tab @code{\stemNeutral}
1866   @tab
1867 @item @code{\textSpannerDown}
1868   @tab @code{\textSpannerUp}
1869   @tab @code{\textSpannerNeutral}
1870   @tab Le texte saisi en tant qu'extension est au-dessous/au-dessus de
1871   la portée
1872 @item @code{\tieDown}
1873   @tab @code{\tieUp}
1874   @tab @code{\tieNeutral}
1875   @tab
1876 @item @code{\tupletDown}
1877   @tab @code{\tupletUp}
1878   @tab @code{\tupletNeutral}
1879   @tab Les nolets sont au-dessous/au-dessus des notes
1880 @end multitable
1881
1882 Attention : ces commandes prédéfinies @strong{ne doivent pas} être
1883 précédées de @code{\once}.  Pour limiter l'effet à une seule note, il
1884 faut soit utiliser la commande équivalente @code{\once \override}, soit
1885 utiliser la commande prédéfinie, suivie, après la note à modifier, de la
1886 commande @code{\xxxNeutral} correspondante.
1887
1888
1889 @unnumberedsubsubsec Doigtés
1890 @c VO Fingering
1891
1892 @cindex doigtés, positionnement
1893 @cindex doigtés, accords
1894
1895 Le placement des doigtés sur des notes simples peut aussi être contrôlé
1896 par la propriété @code{direction}, mais le changement de
1897 @code{direction} n'a pas d'effet sur les accords.  Comme nous le
1898 verrons, il existe des commandes qui permettent de contrôler le doigté
1899 sur chaque note d'un accord, en plaçant l'indication de doigté
1900 au-dessus, en dessous, à gauche ou à droite de chaque note.
1901
1902 Tout d'abord, voici l'effet de @code{direction} sur le doigté lié à une
1903 note simple.  La première mesure montre le comportement par défaut, et
1904 les deux suivantes montrent l'effet lorsqu'on indique @code{DOWN} et
1905 @code{UP} :
1906
1907 @cindex doigtés, exemple de dérogation
1908 @cindex direction, exemple d'utilisation de la propriété
1909
1910 @lilypond[quote,verbatim,relative=2]
1911 c4-5 a-3 f-1 c'-5 |
1912 \override Fingering #'direction = #DOWN
1913 c4-5 a-3 f-1 c'-5 |
1914 \override Fingering #'direction = #UP
1915 c4-5 a-3 f-1 c'-5 |
1916 @end lilypond
1917
1918 Le fait d'intervenir sur la propriété @code{direction} n'est sûrement
1919 pas la façon la plus simple de placer manuellement les doigtés au-dessus
1920 ou en dessous des notes ; mieux vaut utiliser @code{_} ou @code{^}
1921 devant le chiffre de doigté plutôt que @code{-}.  Voici ce que donne
1922 l'exemple précédent avec cette méthode :
1923
1924 @cindex doigtés, exemple
1925
1926 @lilypond[quote,verbatim,relative=2]
1927 c4-5 a-3 f-1 c'-5 |
1928 c4_5 a_3 f_1 c'_5 |
1929 c4^5 a^3 f^1 c'^5 |
1930 @end lilypond
1931
1932 La propriété @code{direction} ne fonctionne pas pour les accords alors
1933 que les préfixes de direction, @code{_} et @code{^}, fonctionnent.  Par
1934 défaut, le doigté est placé automatiquement à la fois au-dessus et
1935 au-dessous des notes d'un accord, comme ceci :
1936
1937 @cindex doigtés, exemple
1938
1939 @lilypond[quote,verbatim,relative=2]
1940 <c-5 g-3>4
1941 <c-5 g-3 e-2>4
1942 <c-5 g-3 e-2 c-1>4
1943 @end lilypond
1944
1945 @noindent
1946 mais il est possible de forcer manuellement vers le haut ou vers le bas
1947 le placement de tous ou certains chiffres de doigté, comme ceci :
1948
1949 @cindex doigtés, exemple
1950
1951 @lilypond[quote,verbatim,relative=2]
1952 <c-5 g-3 e-2 c-1>4
1953 <c^5 g_3 e_2 c_1>4
1954 <c^5 g^3 e^2 c_1>4
1955 @end lilypond
1956
1957 On peut aller encore plus loin dans le positionnement des doigtés pour
1958 chacune des notes d'un accord grâce à la commande
1959 @code{\set fingeringOrientations}.  La syntaxe de cette commande est :
1960
1961 @example
1962 @code{\set fingeringOrientations = #'([up] [left/right] [down])}
1963 @end example
1964
1965 @noindent
1966 On utilise @code{\set} car @code{fingeringOrientations} est une
1967 propriété du contexte @code{Voice}, créée et utilisée par le graveur
1968 @code{New_fingering_engraver}.
1969
1970 On peut attribuer à cette propriété une liste composée de une à trois
1971 valeurs.  Celles-ci déterminent si l'indication de doigté doit être
1972 placée au-dessus (lorsque @code{up} apparaît dans la liste), au-dessous
1973 (lorsque @code{down} apparaît), à gauche (lorsque @code{left} apparaît)
1974 ou à droite (lorsque @code{right} apparaît).  En revanche, si une valeur
1975 n'est pas dans la liste, aucun doigté n'ira à cet emplacement.  LilyPond
1976 garde ces contraintes en mémoire et recherche le meilleur emplacement
1977 pour le doigté des notes des accords suivants.  Vous remarquerez que
1978 @code{left} et @code{right} s'excluent l'un l'autre -- l'indication de
1979 doigté ne peut être placée que d'un côté ou de l'autre, pas des deux.
1980
1981 @warning{Pour contrôler à l'aide de cette commande le placement du
1982 doigté sur une note simple, il faut la saisir comme un accord composé
1983 d'une note unique, en l'encadrant de chevrons.}
1984
1985 Voici quelques exemples :
1986
1987 @cindex doigtés, exemple
1988 @cindex @code{\set}, exemple d'utilisation
1989 @cindex fingeringOrientations, exemple d'utilisation de la propriété
1990
1991 @lilypond[quote,fragment,ragged-right,verbatim,relative=1]
1992 \set fingeringOrientations = #'(left)
1993 <f-2>4
1994 <c-1 e-2 g-3 b-5>4
1995 \set fingeringOrientations = #'(left)
1996 <f-2>4
1997 <c-1 e-2 g-3 b-5>4 |
1998 \set fingeringOrientations = #'(up left down)
1999 <f-2>4
2000 <c-1 e-2 g-3 b-5>4
2001 \set fingeringOrientations = #'(up left)
2002 <f-2>4
2003 <c-1 e-2 g-3 b-5>4 |
2004 \set fingeringOrientations = #'(right)
2005 <f-2>4
2006 <c-1 e-2 g-3 b-5>4
2007 @end lilypond
2008
2009 @noindent
2010 Si les indications de doigtés paraissent un peu serrées, on peut
2011 toujours réduire la taille de police (@code{font-size}).  La valeur
2012 par défaut donnée dans la RPI à la page de l'objet
2013 @code{Fingering} étant @code{-5}, essayons @code{-7} :
2014
2015 @lilypond[quote,fragment,ragged-right,verbatim,relative=1]
2016 \override Fingering #'font-size = #-7
2017 \set fingeringOrientations = #'(left)
2018 <f-2>4
2019 <c-1 e-2 g-3 b-5>4
2020 \set fingeringOrientations = #'(left)
2021 <f-2>4
2022 <c-1 e-2 g-3 b-5>4 |
2023 \set fingeringOrientations = #'(up left down)
2024 <f-2>4
2025 <c-1 e-2 g-3 b-5>4
2026 \set fingeringOrientations = #'(up left)
2027 <f-2>4
2028 <c-1 e-2 g-3 b-5>4 |
2029 \set fingeringOrientations = #'(right)
2030 <f-2>4
2031 <c-1 e-2 g-3 b-5>4
2032 @end lilypond
2033
2034
2035 @node Objets hors de la portée
2036 @subsection Objets hors de la portée
2037 @translationof Outside-staff objects
2038
2039 Les objets extérieurs à la portée sont placés automatiquement de façon à
2040 éviter les collisions.  Les objets avec la plus petite valeur de la
2041 propriété @code{outside-staff-priority} sont placés au plus près de la
2042 portée, tandis que les autres sont écartés autant qu'il faut pour éviter
2043 les collisions.  La @code{outside-staff-priority} est définie dans la
2044 @code{grob-interface} ; elle est donc une propriété commune à tous
2045 les objets de rendu.  Par défaut, elle est réglée sur @code{#f} pour
2046 tous les objets de la portée, et porte une valeur numérique appropriée à
2047 chacun des objets extérieurs à la portée, à mesure qu'ils sont créés.
2048 Le tableau suivant montre la valeur numérique par défaut pour
2049 quelques-uns des objets extérieurs à la portée les plus courant.
2050
2051 @cindex spanners
2052 @cindex bandeaux
2053 @cindex extenseurs
2054
2055 Vous noterez au passage certaines particularités quant au nom des
2056 objets.  En effet, des objets à extension sont automatiquement créés
2057 dans le but de pouvoir contrôler le positionnement vertical des
2058 extrémités d'un @emph{grob} qui commencerait et se terminerait à des
2059 instants musicaux différents.  C'est la raison pour laquelle modifier le
2060 @code{outside-staff-priority} du @emph{grob} sous-jacent n'aura aucun
2061 effet.  C'est par exemple le cas lorsque vous modifiez l'alignement d'un
2062 objet @code{Hairpin} à l'aide de @code{outside-staff-priority} ;
2063 puisque le soufflet est associé à un objet @code{DynamicLineSpanner},
2064 c'est sur celui-ci que doit porter l'effet de
2065 @code{outside-staff-priority}.  L'instruction dérogatoire se place au
2066 début du bandeau qui constitue une ligne de base susceptible de contenir
2067 plusieurs soufflets ou indications de nuance.
2068
2069 @multitable @columnfractions .3 .3 .3
2070 @headitem Objet de rendu
2071   @tab Priorité
2072   @tab Contrôle la position de :
2073 @item @code{RehearsalMark}
2074   @tab @code{1500}
2075   @tab Repère
2076 @item @code{MetronomeMark}
2077   @tab @code{1000}
2078   @tab Indication métronomique
2079 @item @code{VoltaBracketSpanner}
2080   @tab @code{600}
2081   @tab Bandeau de répétition
2082 @item @code{TextScript}
2083   @tab @code{450}
2084   @tab Texte des @emph{markup} (ou étiquettes)
2085 @item @code{MultiMeasureRestText}
2086   @tab @code{450}
2087   @tab Texte sur les silences qui couvrent des mesures entières
2088 @item @code{OttavaBracket}
2089   @tab @code{400}
2090   @tab Indication d'octaviation
2091 @item @code{TextSpanner}
2092   @tab @code{350}
2093   @tab Bandeau ou extension de texte
2094 @item @code{DynamicLineSpanner}
2095   @tab @code{250}
2096   @tab Toutes les marques de nuances
2097 @item @code{BarNumber}
2098   @tab @code{100}
2099   @tab Numéro de mesure
2100 @item @code{TrillSpanner}
2101   @tab @code{50}
2102   @tab Bandeau de trille
2103 @end multitable
2104
2105 Voici un exemple qui montre le placement par défaut de certains
2106 d'entre eux.
2107
2108 @cindex extension de texte
2109 @cindex indication d'octaviation
2110
2111 @funindex \startTextSpan
2112 @funindex startTextSpan
2113 @funindex \stopTextSpan
2114 @funindex stopTextSpan
2115
2116 @cindex TextSpanner, exemple de dérogation
2117 @cindex bound-details, exemple d'utilisation de la propriété
2118
2119 @lilypond[quote,fragment,ragged-right,verbatim,relative=1]
2120 % Set details for later Text Spanner
2121 \override TextSpanner #'(bound-details left text)
2122     = \markup { \small \bold Slower }
2123 % Place dynamics above staff
2124 \dynamicUp
2125 % Start Ottava Bracket
2126 \ottava #1
2127 c'4 \startTextSpan
2128 % Add Dynamic Text and hairpin
2129 c4\pp\<
2130 c4
2131 % Add Text Script
2132 c4^Text |
2133 c4 c
2134 % Add Dynamic Text and terminate hairpin
2135 c4\ff c \stopTextSpan |
2136 % Stop Ottava Bracket
2137 \ottava #0
2138 c,4 c c c |
2139 @end lilypond
2140
2141 Cet exemple montre comment créer des extensions de texte (@emph{Text
2142 Spanners} en anglais) -- texte avec des longues lignes au-dessus d'un
2143 passage musical.  L'extension s'étend depuis la commande
2144 @code{\startTextSpan} jusqu'à la commande @code{\stopTextSpan} et le
2145 format de texte est défini par la commande @code{\override TextSpanner}.
2146 Pour de plus amples détails, voir
2147 @ruser{Indication textuelle avec extension}.
2148
2149 Il montre aussi comment créer des marques d'octaviation.
2150
2151 @cindex modification du positionnement des numéros de mesure
2152 @cindex numéros de mesure, modification du positionnement
2153 @cindex modification du positionnement des indications métronomiques
2154 @cindex indications métronomiques, modification du positionnement
2155 @cindex modification du positionnement des marques de repère
2156 @cindex marques de repère, modification du positionnement
2157
2158 Si les valeurs de @code{outside-staff-priority} par défaut ne donnent
2159 pas les résultats escomptés, il suffit de modifier la priorité
2160 de l'un de ces objets.  Supposons que vous vouliez placer l'indication
2161 d'octaviation sous le bandeau de texte, dans l'exemple précédent.  Tout
2162 ce que nous devons faire, c'est regarder la priorité de
2163 @code{OttavaBracket} dans la Référence des propriétés internes ou dans
2164 le tableau plus haut, et la ramener à une valeur plus basse que celle de
2165 @code{TextSpanner}, en gardant à l'esprit que @code{OttavaBracket} est
2166 créé dans le contexte @code{Staff} :
2167
2168 @cindex TextSpanner, exemple de dérogation
2169 @cindex bound-details, exemple d'utilisation de la propriété
2170
2171 @lilypond[quote,fragment,ragged-right,verbatim,relative=1]
2172 % Set details for later Text Spanner
2173 \override TextSpanner #'(bound-details left text)
2174     = \markup { \small \bold Slower }
2175 % Place dynamics above staff
2176 \dynamicUp
2177 % Place following Ottava Bracket below Text Spanners
2178 \once \override Staff.OttavaBracket #'outside-staff-priority = #340
2179 % Start Ottava Bracket
2180 \ottava #1
2181 c'4 \startTextSpan
2182 % Add Dynamic Text
2183 c4\pp
2184 % Add Dynamic Line Spanner
2185 c4\<
2186 % Add Text Script
2187 c4^Text |
2188 c4 c
2189 % Add Dynamic Text
2190 c4\ff c \stopTextSpan |
2191 % Stop Ottava Bracket
2192 \ottava #0
2193 c,4 c c c |
2194 @end lilypond
2195
2196 N'oublions pas que certains objets, tels les numéros de mesure,
2197 indications métronomiques et marques-repères, sont par défaut attachés
2198 au contexte @code{Score}.
2199
2200 @cindex liaisons et outside-staff-priority
2201 @cindex liaisons et articulations
2202 @cindex articulations et liaisons
2203
2204 Les liaisons sont intrinsèquement des objets membres de la portée
2205 (@emph{within-staff objects}) bien qu'elles la surplombent lorsque les
2206 notes auxquelles elles se rattachent sont relativement hautes.  Ceci
2207 peut avoir pour conséquence de remonter d'autant les objets externes
2208 (@emph{outside-staff objects}) tels les articulations.  La propriété
2209 @code{avoid-slur} de l'articulation en question peut se voir déterminée
2210 à @code{'inside} dans le but de @qq{ramener} cette articulation à
2211 l'intérieur de la liaison.  Cette propriété @code{avoid-slur} ne sera
2212 toutefois effective que dans la mesure où la
2213 @code{outside-staff-priority} est désactivée (valeur @code{#f}).  Dans
2214 le même esprit, il est possible d'affecter une valeur numérique
2215 particulière à la propriété @code{outside-staff-priority} d'une
2216 liaison dans le but de regrouper la liaison avec les objets externes.
2217 L'exemple suivant illustre ces deux différentes méthodes.
2218
2219 @lilypond[quote,verbatim,relative=2]
2220 c4( c^\markup { \tiny \sharp } d4.) c8 |
2221 c4(
2222 \once \override TextScript #'avoid-slur = #'inside
2223 \once \override TextScript #'outside-staff-priority = ##f
2224 c4^\markup { \tiny \sharp } d4.) c8 |
2225 \once \override Slur #'outside-staff-priority = #500
2226 c4( c^\markup { \tiny \sharp } d4.) c8 |
2227 @end lilypond
2228
2229 Le fait de changer la @code{outside-staff-priority} peut aussi servir à
2230 contrôler le positionnement vertical des objets individuels, quoique le
2231 résultat ne soit pas toujours formidable.  Imaginons que nous voulions
2232 placer @qq{Text3} au-dessus de @qq{Text4} dans l'exemple de la section
2233 @ref{Comportement automatique}, plus haut.  Il nous suffit pour cela de
2234 regarder dans la Référence des propriétés internes ou dans le tableau
2235 plus haut la priorité de @code{TextScript}, et d'augmenter la priorité
2236 de @qq{Text3} jusqu'à une valeur très haute :
2237
2238 @cindex TextScript, exemple de dérogation
2239 @cindex outside-staff-priority, exemple d'utilisation de la propriété
2240
2241 @lilypond[quote,fragment,ragged-right,verbatim,relative=2]
2242 c2^"Text1"
2243 c2^"Text2" |
2244 \once \override TextScript #'outside-staff-priority = #500
2245 c2^"Text3"
2246 c2^"Text4" |
2247 @end lilypond
2248
2249 S'il est vrai que cela place @qq{Text3} au-dessus de @qq{Text4}, ça le
2250 place aussi plus haut que @qq{Text2} tandis que @qq{Text4} dégringole.
2251 Ce n'est peut-être pas si bien que ça.  En fait, ce que nous aimerions
2252 faire, c'est placer toutes les annotations à égale distance de la
2253 portée.  Pour cela, nous avons besoin d'espacer horizontalement les
2254 notes pour laisser plus de place au texte.  C'est possible grâce à la
2255 commande @code{textLengthOn}.
2256
2257
2258 @subheading \textLengthOn
2259
2260 @cindex notes, répartition selon le texte
2261
2262 @funindex \textLengthOn
2263 @funindex textLengthOn
2264 @funindex \textLengthOff
2265 @funindex textLengthOff
2266
2267 Par défaut, l'espacement horizontal d'un texte produit sous forme de
2268 @emph{markup} (ou d'étiquette) n'est pas pris en compte, dans la mesure
2269 où ce qui est concerné n'entre pas dans la musique.  La commande
2270 @code{\textLengthOn} inverse ce comportement, faisant en sorte que les
2271 notes soient espacées autant qu'il le faut pour s'adapter au texte :
2272
2273 @lilypond[quote,fragment,ragged-right,verbatim,relative=2]
2274 \textLengthOn  % Cause notes to space out to accommodate text
2275 c2^"Text1"
2276 c2^"Text2" |
2277 c2^"Text3"
2278 c2^"Text4" |
2279 @end lilypond
2280
2281 La commande qui permet de revenir au comportement par défaut est
2282 @code{\textLengthOff}.  Rappelez-vous que @code{\once} ne
2283 fonctionne qu'avec @code{\override}, @code{\set}, @code{\revert} ou
2284 @code{\unset}, et donc ne peut pas être utilisé avec
2285 @code{\textLengthOn}.
2286
2287 @cindex étiquette de texte et collision
2288
2289 Les textes des @emph{markup} éviteront également les notes qui
2290 s'échappent au-dessus de la portée.  Si ce n'est pas notre souhait, il
2291 est possible de supprimer ce déplacement automatique vers le haut en
2292 attribuant à la priorité la valeur @code{#f}.  Voici un exemple qui
2293 montre comment les textes des @emph{markup} interagissent avec ces types
2294 de note.
2295
2296 @cindex TextScript, exemple de dérogation
2297 @cindex outside-staff-priority, exemple d'utilisation de la propriété
2298
2299 @lilypond[quote,fragment,ragged-right,verbatim,relative=2]
2300 % This markup is short enough to fit without collision
2301 c2^"Tex" c'' |
2302 R1 |
2303
2304 % This is too long to fit, so it is displaced upwards
2305 c,,2^"Text" c'' |
2306 R1 |
2307
2308 % Turn off collision avoidance
2309 \once \override TextScript #'outside-staff-priority = ##f
2310 c,,2^"Long Text   " c'' |
2311 R1 |
2312
2313 % Turn off collision avoidance
2314 \once \override TextScript #'outside-staff-priority = ##f
2315 \textLengthOn        % and turn on textLengthOn
2316 c,,2^"Long Text   "  % Spaces at end are honored
2317 c''2 |
2318 @end lilypond
2319
2320
2321 @subheading Nuances
2322 @c VO Dynamics
2323
2324 @cindex modification du positionnement des nuances
2325 @cindex nuances, modification du positionnement
2326
2327 Les indications de nuance se placent normalement sous la portée, mais on
2328 peut les placer au-dessus avec la commande @code{\dynamicUp}.  Elles se
2329 positionnent verticalement par rapport à la note à laquelle elles sont
2330 liées et se décalent vers le bas (ou le haut) en fonction des objets de
2331 la portée comme les liaisons de phrasé ou les numéros de mesure.  Cela
2332 peut donner d'assez bons résultats, comme le montre cet exemple :
2333
2334 @lilypond[quote,fragment,ragged-right,verbatim,relative=1]
2335 \clef "bass"
2336 \key aes \major
2337 \time 9/8
2338 \dynamicUp
2339 bes4.~\f\< \( bes4 bes8 des4\ff\> c16 bes\! |
2340 ees,2.~\)\mf ees4 r8 |
2341 @end lilypond
2342
2343 De toute façon, si les notes et les nuances qui leur sont liées sont
2344 trop proches, le positionnement automatique évitera les collisions en
2345 déplaçant davantage les nuances suivantes, mais le résultat peut ne
2346 pas être très satisfaisant, comme le montre cet exemple artificiel :
2347
2348 @lilypond[quote,fragment,ragged-right,verbatim,relative=2]
2349 \dynamicUp
2350 a4\f b\mf c\mp b\p
2351 @end lilypond
2352
2353 @noindent
2354 Si une telle situation devait survenir dans de la musique @qq{réelle},
2355 il serait préférable d'espacer un peu plus les notes, de façon que les
2356 indications de nuance puissent toutes se situer à la même distance de la
2357 portée.  S'il est possible de faire cela pour les textes de
2358 @emph{markup} grâce à la commande @code{\textLengthOn}, il n'existe
2359 pas d'équivalent pour les indications de nuance.  Il nous faut donc
2360 chercher à faire cela avec la commande @code{\override}.
2361
2362
2363 @subheading Dimensionnement des objets graphiques
2364 @c VO Grob sizing
2365
2366 @cindex grob, dimensionnement
2367 @cindex dimensionnement des grobs
2368
2369 Tout d'abord, nous devons apprendre ce qui détermine la dimension des
2370 @emph{grobs}. Tous les @emph{grobs} portent en eux un point de référence
2371 qui est utilisé pour les positionner par rapport à leur objet parent. Ce
2372 point du @emph{grob} est placé à une distance horizontale,
2373 @code{X-offset}, et à une distance verticale, @code{Y-offset}, de son
2374 parent.  L'étendue horizontale de l'objet est fixée par une paire de
2375 nombres, @code{X-extent}, qui donnent la position du coin
2376 gauche et du coin droit par rapport au point de référence.  De
2377 même, l'amplitude verticale est fixée par une paire de nombres,
2378 @code{Y-extent}.  Ce sont des propriétés communes à tous les
2379 @emph{grobs} et que gère la @code{grob-interface}.
2380
2381 @cindex @code{extra-spacing-width}
2382
2383 Par défaut, la largeur des objets extérieurs à la portée est donnée
2384 comme étant nulle, si bien qu'ils peuvent se chevaucher
2385 horizontalement.  Pour remédier à cela, on a ajouté l'infini à
2386 l'extension gauche et moins l'infini à l'extension droite, en
2387 attribuant à @code{extra-spacing-width} la valeur
2388 @code{'(+inf.0 . -inf.0)}.  Pour être sûr que les objets ne se
2389 chevaucheront pas horizontalement, nous devons donc corriger cette
2390 valeur de @code{extra-spacing-width} en @code{'(0 . 0)}, afin que
2391 leur vraie largeur se manifeste.  La commande pour y parvenir avec des
2392 indications de nuances est :
2393
2394 @example
2395 \override DynamicText #'extra-spacing-width = #'(0 . 0)
2396 @end example
2397
2398 @noindent
2399 Voyons si ça marche sur notre exemple précédent :
2400
2401 @cindex DynamicText, exemple de dérogation
2402 @cindex extra-spacing-width, exemple d'utilisation de la propriété
2403
2404 @lilypond[quote,fragment,ragged-right,verbatim,relative=2]
2405 \dynamicUp
2406 \override DynamicText #'extra-spacing-width = #'(0 . 0)
2407 a4\f b\mf c\mp b\p |
2408 @end lilypond
2409
2410 @noindent
2411 Bon, cela a mis un terme aux déplacements verticaux des
2412 nuances mais il reste deux problèmes.  Il faudrait que les
2413 nuances soient un peu plus écartées et ce serait mieux si
2414 elles étaient toutes à la même distance de la portée.  Le
2415 premier problème est simple à résoudre.  Au lieu d'attribuer
2416 à @code{extra-spacing-width} la valeur zéro, nous pourrions
2417 mettre un peu plus.  L'unité est la distance entre deux lignes
2418 de portée, donc en écartant le bord gauche d'une demie unité
2419 et le bord droit d'une demie unité, on obtient :
2420
2421 @cindex DynamicText, exemple de dérogation
2422 @cindex extra-spacing-width, exemple d'utilisation de la propriété
2423
2424 @lilypond[quote,fragment,ragged-right,verbatim,relative=2]
2425 \dynamicUp
2426 % Extend width by 1 staff space
2427 \override DynamicText #'extra-spacing-width = #'(-0.5 . 0.5)
2428 a4\f b\mf c\mp b\p
2429 @end lilypond
2430
2431 @noindent
2432 C'est mieux mais nous voulons peut-être aligner les indications de
2433 nuance sur une même ligne plutôt que de les voir monter et
2434 descendre avec les notes.  La propriété qui gère cela est
2435 @code{staff-padding} ; la section suivante lui est consacrée.
2436
2437
2438 @node Collisions d'objets
2439 @section Collisions d'objets
2440 @translationof Collisions of objects
2441
2442 @menu
2443 * Déplacement d'objets::
2444 * Correction des collisions d'objets::
2445 * Exemple concret::
2446 @end menu
2447
2448
2449 @node Déplacement d'objets
2450 @subsection Déplacement d'objets
2451 @translationof Moving objects
2452
2453 @cindex déplacement d'objets se chevauchant
2454 @cindex déplacement d'objets en collision
2455 @cindex déplacement de grobs en collision
2456 @cindex objets, évitement des collisions
2457 @cindex grobs, évitement des collisions
2458
2459 Aussi surprenant que cela puisse paraître, LilyPond n'est pas parfait.
2460 Certains éléments sur la partition peuvent se chevaucher, ce qui est
2461 regrettable mais, le plus souvent, facile à corriger.  En général, quand
2462 on déplace des objets, c'est pour des raisons de lisibilité ou
2463 d'esthétique -- ils rendraient mieux avec un peu plus ou un peu moins
2464 d'espace autour d'eux.
2465
2466 Il y a trois façons de résoudre les problèmes de chevauchement.  Il est
2467 préférable de les aborder dans l'ordre suivant :
2468
2469 @enumerate
2470 @item
2471 L'@strong{orientation} d'un objet qui en chevauche un autre peut être
2472 changée grâce aux commandes prédéfinies dont la liste a été donnée
2473 plus haut à propos des objets de portée (voir
2474 @ref{Objets inclus dans la portée}).
2475 Les queues de note, les liaisons de phrasé et de prolongation, les
2476 crochets, les nuances et les nolets peuvent facilement être
2477 repositionnés de cette manière.  En contrepartie, vous n'avez le choix
2478 qu'entre deux positions, sans personnalisation possible.
2479
2480 @item
2481 Les @strong{propriétés d'objet}, auxquelles LilyPond a recours pour
2482 positionner les objets, sont modifiables avec @code{\override}.  Il y a
2483 deux avantages à changer ces propriétés : (a) d'autres objets
2484 pourront être déplacés automatiquement si nécessaire pour faire de la
2485 place, et (b) la même retouche peut s'appliquer à toutes les occurrences
2486 du même type d'objet.  Ces propriétés sont :
2487
2488 @itemize
2489
2490 @item
2491 @code{direction}
2492
2493 Ce point a déjà été traité en détails -- voir
2494 @ref{Objets inclus dans la portée}.
2495
2496
2497 @item
2498 @code{padding}, @code{right-padding}, @code{staff-padding}
2499
2500 @cindex décalage (padding)
2501 @cindex padding, propriété
2502 @cindex right-padding, propriété
2503 @cindex staff-padding, propriété
2504
2505 Au moment de positionner un objet, la valeur de sa propriété
2506 @code{padding} détermine l'espace à laisser libre entre celui-ci et le
2507 coin le plus proche de l'objet à côté duquel il est placé.  Vous
2508 remarquerez que c'est la valeur @code{padding} de l'objet @strong{à
2509 placer} qui compte ; la valeur @code{padding} de l'objet déjà placé
2510 est ignorée.  Les espaces libres déterminés par @code{padding}
2511 s'appliquent à tous les objets associés à la
2512 @code{side-position-interface}.
2513
2514 Le positionnement de groupes d'altérations est contrôlé par
2515 @code{right-padding}, et non plus @code{padding}.  Cette propriété
2516 appartient à l'objet @code{AccidentalPlacement} qui, vous le
2517 remarquerez, prend place dans le contexte @strong{Staff}.  Dans le
2518 processus de composition, les têtes de notes sont disposées en premier,
2519 puis les altérations, s'il y en a, sont ajoutées à gauche des têtes de
2520 note suivant la propriété @code{right-padding} qui détermine
2521 l'espacement par rapport aux têtes de note.  C'est pourquoi seule la
2522 propriété @code{right-padding} de l'objet @code{AccidentalPlacement}
2523 joue sur le positionnement des altérations.
2524
2525 La propriété @code{staff-padding} est très proche de la propriété
2526 @code{padding} : @code{padding} contrôle l'espace minimum entre un
2527 objet qui accepte la @code{side-position-interface} et l'objet le plus
2528 proche (généralement une note ou une ligne de portée) ;
2529 @code{staff-padding} ne s'applique qu'aux objets qui sont toujours
2530 placés au-dehors de la portée -- il contrôle l'espace minimum à insérer
2531 entre l'objet et la portée.  Attention : par défaut,
2532 @code{staff-padding} concerne les objets positionnés par rapport
2533 à la portée et n'a aucun effet sur les objets qui sont positionnés par
2534 rapport à une note ; il est toutefois possible de le régler pour
2535 fonctionner avec ces derniers.
2536
2537 Pour trouver quelle propriété @code{padding} employer pour l'objet que
2538 vous cherchez à repositionner, il vous faut consulter les propriétés de
2539 l'objet dans la RPI.  Prenez garde que les propriétés @code{padding} ne
2540 sont pas forcément traitées dans l'objet en question ; il faut
2541 alors regarder les objets qui semblent s'en rapprocher.
2542
2543 Toutes les valeurs @code{padding} sont exprimées en espace de portée.
2544 Pour la plupart des objets, la valeur par défaut est aux alentours de
2545 1,0 et parfois moins (cela dépend de chaque objet).  Il est possible de
2546 la modifier lorsqu'on a besoin d'un espace vide plus grand (ou plus
2547 petit).
2548
2549
2550 @item
2551 @code{self-alignment-X}
2552
2553 @cindex self-alignment-X,  propriété
2554
2555 Cette propriété sert à aligner les objets sur la gauche, sur la droite
2556 ou à les centrer par rapport au point de référence des objets parents.
2557 Elle peut être utilisée avec tous les objets qui acceptent la
2558 @code{self-alignment-interface}.  Il s'agit, en général, des objets qui
2559 contiennent du texte.  Les valeurs admises sont @code{LEFT},
2560 @code{RIGHT} et @code{CENTER}.  On peut aussi attribuer à
2561 la place une valeur numérique entre @code{-1} et @code{+1},
2562 où @code{-1} signifie alignement sur la gauche, @code{+1}
2563 alignement sur la droite, et les nombres intermédiaires déplacent
2564 progressivement le texte de la gauche vers la droite.  Des valeurs
2565 numériques supérieures à @code{1} sont également admises
2566 pour déplacer le texte encore plus loin vers la gauche, ou des
2567 valeurs inférieures à @code{-1} pour déplacer le texte encore
2568 plus loin vers la droite.  Un écart de @code{1} en valeur
2569 correspond à un déplacement de la moitié de la longueur du
2570 texte.
2571
2572
2573 @item
2574 @code{extra-spacing-width}
2575
2576 @cindex extra-spacing-width, propriété
2577
2578 Cette propriété est utilisée pour tous les objets qui acceptent la
2579 @code{item-interface}.  Elle reçoit deux nombres, le premier étant
2580 ajouté au bord gauche et le second au bord droit.  Des nombres
2581 négatifs déplacent le coin vers la gauche, des nombres positifs
2582 vers la droite, si bien que pour élargir un objet, le premier nombre
2583 doit être négatif et le second positif.  Attention : tous les
2584 objets n'acceptent pas forcément les deux nombres.  Par exemple, l'objet
2585 @code{Accidental} ne retient que le premier nombre (coin gauche).
2586
2587
2588 @item
2589 @code{staff-position}
2590
2591 @cindex staff-position, propriété
2592
2593 @code{staff-position} est une propriété de la
2594 @code{staff-symbol-referencer-interface}, qui s'applique aux objets
2595 positionnés par rapport à la portée.  Elle indique, en demi-espace de
2596 portée, la position verticale des objets par rapport à la ligne médiane
2597 de la portée.  C'est bien pratique pour résoudre des problèmes de
2598 collision entre des objets comme les silences valant mesure entière,
2599 les liaisons et les notes de différentes voix.
2600
2601
2602 @item
2603 @code{force-hshift}
2604
2605 @cindex force-hshift, propriété
2606
2607 Des notes très proches dans un accord, ou des notes simultanées dans
2608 différentes voix, peuvent être disposées sur deux colonnes, rarement
2609 plus, pour éviter que les têtes de notes ne se chevauchent.  On parle
2610 alors de colonnes (ou empilement) de notes et un objet appelé
2611 @code{NoteColumn} est créé pour placer les notes sur la colonne.
2612
2613 La propriété @code{force-hshift} appartient à @code{NoteColumn} (en
2614 réalité à la @code{note-column-interface}).  Le fait de la modifier
2615 permet de déplacer un empilement selon l'unité appropriée aux colonnes
2616 de notes, à savoir la largeur des têtes de note de la première voix.
2617 Son utilisation est réservée à des situations complexes dans lesquelles
2618 les commandes habituelles @code{\shiftOn}
2619 (voir @ref{Instanciation explicite des voix}) ne suffisent plus à
2620 résoudre les conflits.  Elle est alors préférable à l'utilisation de la
2621 propriété @code{extra-offset}, dans la mesure où on n'a pas besoin
2622 d'exprimer la distance en espace de portée et où le fait de déplacer
2623 les notes à l'intérieur ou à l'extérieur d'une @code{NoteColumn} affecte
2624 d'autres actions comme les fusions de notes.
2625
2626 @end itemize
2627
2628
2629 @item
2630 Pour terminer, quand toutes les autres méthodes ont échoué, il est
2631 possible de repositionner verticalement les objets à la main par rapport
2632 à la ligne médiane de la portée, ou en les déplaçant à une distance
2633 donnée vers une nouvelle position.  Les inconvénients sont qu'il faut
2634 individuellement, pour chaque objet, trouver les valeurs correctes de
2635 repositionnement souvent par tâtonnement et que, puisque le
2636 mouvement est opéré après que LilyPond a placé tous les autres
2637 objets, c'est à l'utilisateur de résoudre tous les problèmes de
2638 collision qui pourraient survenir.  Et le pire avec cette méthode est
2639 que, le jour où la musique est modifiée, il faut de nouveau rechercher
2640 les valeurs de repositionnement.  Les propriétés à utiliser pour ce type
2641 de repositionnement manuel sont :
2642
2643
2644 @table @code
2645 @item extra-offset
2646
2647 @cindex extra-offset, propriété
2648
2649 Cette propriété s'applique à tout objet acceptant la
2650 @code{grob-interface}.  Elle reçoit une paire de nombres qui indiquent
2651 le déplacement supplémentaire dans le sens horizontal et vertical.  Des
2652 nombres négatifs déplacent l'objet vers la gauche ou vers la droite.
2653 L'unité utilisée est l'espace de portée.  Le déplacement supplémentaire
2654 intervient une fois que la composition des objets est achevée, si bien
2655 qu'un objet peut être repositionné à n'importe quel endroit sans
2656 perturber quoi que ce soit.
2657
2658 @item positions
2659
2660 @cindex positions, propriété
2661
2662 Cette propriété est très utile pour ajuster manuellement l'inclinaison
2663 et la hauteur des barres de ligature, des liaisons et des nolets.  Elle
2664 est suivie de deux nombres qui donnent la position des extrémités gauche
2665 et droite des barres, liaisons, etc. par rapport à la ligne médiane de
2666 la portée.  L'unité de référence est l'intervalle de lignes de portée.
2667 Attention toutefois au fait que les liaisons et phrasés ne peuvent pas
2668 être repositionnés n'importe où.  LilyPond commence par dresser la liste
2669 des emplacements possibles pour les liaisons et choisit par défaut la
2670 liaison qui @qq{semble la meilleure}.  Si la propriété @code{positions}
2671 a été retouchée, la liaison la plus proche de la position demandée sera
2672 retenue dans la liste.
2673 @end table
2674
2675 @end enumerate
2676
2677 Il est possible qu'un objet ne dispose pas de toutes ces propriétés.  Il
2678 est donc nécessaire de consulter la RPI pour vérifier quelles sont les
2679 propriétés disponibles pour l'objet en question.
2680
2681 Voici une liste d'objets les plus couramment impliqués dans les
2682 collisions, avec le nom de l'objet à consulter dans la RPI afin de
2683 trouver les propriétés à retoucher pour obtenir un déplacement.
2684
2685
2686 @multitable @columnfractions .5 .5
2687 @headitem Type d'objet                @tab Nom d'objet
2688 @item Articulations                   @tab @code{Script}
2689 @item Barres de ligature              @tab @code{Beam}
2690 @item Doigté                          @tab @code{Fingering}
2691 @item Liaisons de phrasé              @tab @code{Slur}
2692 @item Liaisons de prolongation        @tab @code{Tie}
2693 @item Nolets                          @tab @code{TupletBracket}
2694 @item Nuances (verticalement)         @tab @code{DynamicLineSpanner}
2695 @item Nuances (horizontalement)       @tab @code{DynamicText}
2696 @item Reprises / marques de texte     @tab @code{RehearsalMark}
2697 @item Texte, par ex. @code{^"texte"}  @tab @code{TextScript}
2698 @end multitable
2699
2700
2701 @node Correction des collisions d'objets
2702 @subsection Correction des collisions d'objets
2703 @translationof Fixing overlapping notation
2704
2705 Voyons maintenant comment les propriétés décrites dans la section
2706 précédente peuvent nous aider à résoudre les collisions.
2707
2708
2709 @subheading la propriété padding
2710 @c VO padding property
2711
2712 @cindex décalage (padding)
2713 @cindex résolution des chevauchements de notation
2714 @cindex chevauchement de notation
2715
2716 En jouant sur la propriété @code{padding} (littéralement
2717 @qq{rembourrage}), on augmente (ou on diminue) la distance entre
2718 des symboles qui sont imprimés au-dessus ou en dessous des notes.
2719
2720 @cindex Script, exemple de dérogation
2721 @cindex padding, exemple d'utilisation de la propriété
2722
2723 @lilypond[quote,fragment,relative=1,verbatim]
2724 c2\fermata
2725 \override Script #'padding = #3
2726 b2\fermata
2727 @end lilypond
2728
2729 @cindex MetronomeMark, exemple de dérogation
2730 @cindex padding, exemple d'utilisation de la propriété
2731
2732 @lilypond[quote,fragment,relative=1,verbatim]
2733 % This will not work, see below:
2734 \override MetronomeMark #'padding = #3
2735 \tempo 4=120
2736 c1 |
2737 % This works:
2738 \override Score.MetronomeMark #'padding = #3
2739 \tempo 4=80
2740 d1 |
2741 @end lilypond
2742
2743 Vous remarquerez dans le second exemple à quel point il est important de
2744 préciser le nom du contexte qui contient l'objet.  Puisque l'objet
2745 @code{MetronomeMark} appartient au contexte @code{Score}, le fait de
2746 modifier la propriété dans le contexte @code{Voice} passera inaperçu.
2747 Pour plus de détails, voir @ruser{Modification de propriétés}.
2748
2749 Si on augmente la propriété @code{padding} d'un objet alors que celui-ci
2750 fait partie d'un ensemble d'objets positionnés en fonction de leur
2751 @code{outside-staff-priority}, cet objet sera déplacé, ainsi que tous
2752 les autres objets du groupe.
2753
2754
2755 @subheading la propriété right-padding
2756 @c VO right-padding
2757
2758 @cindex right-padding, propriété
2759
2760 La propriété @code{right-padding} joue sur l'espacement entre une
2761 altération et la note sur laquelle elle porte.  On ne l'utilise pas
2762 souvent, mais l'espacement par défaut peut se révéler inadéquat avec
2763 certaines altérations ou certains glyphes utilisés en musique
2764 microtonale.  Le stencil de l'altération devra alors être construit sous
2765 la forme d'un @code{markup} qui contiendra le ou les symboles requis,
2766 comme ceci :
2767
2768 @cindex Accidental, exemple de dérogation
2769 @cindex text, exemple d'utilisation de la propriété
2770 @cindex stencil, exemple d'utilisation de la propriété
2771 @cindex AccidentalPlacement, exemple de dérogation
2772 @cindex right-padding, exemple d'utilisation de la propriété
2773
2774 @lilypond[quote,ragged-right,verbatim]
2775 sesquisharp = \markup { \sesquisharp }
2776 \relative c'' {
2777   c4
2778   % This prints a sesquisharp but the spacing is too small
2779   \once \override Accidental
2780     #'stencil = #ly:text-interface::print
2781   \once \override Accidental #'text = #sesquisharp
2782   cis4 c
2783   % This improves the spacing
2784   \once \override Score.AccidentalPlacement #'right-padding = #0.6
2785   \once \override Accidental
2786     #'stencil = #ly:text-interface::print
2787   \once \override Accidental #'text = #sesquisharp
2788   cis4 |
2789 }
2790 @end lilypond
2791
2792 @noindent
2793 Cette méthode utilise, pour le stencil des altérations, une retouche
2794 qui ne sera pas reprise par la suite.  Le type de stencil est
2795 obligatoirement une procédure, qui consiste ici à imprimer le contenu de
2796 la propriété @code{text} de @code{Accidental}, déclaré comme étant un
2797 signe sesqui-dièse.  Celui-ci est ensuite repoussé devant la tête de
2798 note par la retouche de @code{right-padding}.
2799
2800 @noindent
2801
2802
2803 @subheading la propriété staff-padding
2804 @c VO staff-padding property
2805
2806 @cindex alignement d'objets sur une ligne de base
2807 @cindex objets, alignement sur une ligne de base
2808
2809 @code{staff-padding} sert à aligner des objets tels que des nuances
2810 sur une ligne fictive à une hauteur donnée par rapport à la portée
2811 plutôt qu'à une hauteur qui varie en fonction de la position de la note
2812 sur laquelle porte l'objet.  Ce n'est pas une propriété de
2813 @code{DynamicText} mais de @code{DynamicLineSpanner}, car la ligne
2814 fictive est destinée à s'appliquer autant à @strong{toutes} les nuances,
2815 notamment celles qui sont créées comme des bandeaux en longueur (en
2816 anglais @emph{Spanners}).  Tel est donc le moyen d'aligner les
2817 indications de nuance, comme dans cet exemple repris de la section
2818 précédente :
2819
2820 @cindex DynamicText, exemple de dérogation
2821 @cindex extra-spacing-width, exemple d'utilisation de la propriété
2822 @cindex DynamicLineSpanner, exemple de dérogation
2823 @cindex staff-padding, exemple d'utilisation de la propriété
2824
2825 @lilypond[quote,fragment,ragged-right,verbatim,relative=2]
2826 \dynamicUp
2827 % Extend width by 1 unit
2828 \override DynamicText #'extra-spacing-width = #'(-0.5 . 0.5)
2829 % Align dynamics to a base line 2 units above staff
2830 \override DynamicLineSpanner #'staff-padding = #2
2831 a4\f b\mf c\mp b\p
2832 @end lilypond
2833
2834
2835 @subheading la propriété self-alignment-X
2836 @c VO self-alignment-X property
2837
2838 L'exemple suivant montre comment résoudre une collision entre une
2839 indication de corde et une hampe, en alignant le coin droit sur le point
2840 de référence de la note parente :
2841
2842 @cindex StringNumber, exemple de dérogation
2843 @cindex self-alignment-X, exemple d'utilisation de la propriété
2844
2845 @lilypond[quote,fragment,ragged-right,verbatim,relative=3]
2846 \voiceOne
2847 <a\2>
2848 \once \override StringNumber #'self-alignment-X = #RIGHT
2849 <a\2>
2850 @end lilypond
2851
2852
2853 @subheading la propriété staff-position
2854 @c VO staff-position property
2855
2856 @cindex collision d'objets à l'intérieur d'une portée
2857
2858 Dans une voix, un silence valant une mesure entière peut chevaucher les
2859 notes d'une autre voix.  Vu que ces silences sont centrés entre les deux
2860 barres de mesure, il serait très compliqué de programmer LilyPond pour
2861 repérer ces risques de collision dans la mesure où, normalement, toutes
2862 les collisions entre notes ou entre notes et silences se produisent sur
2863 des notes et silences simultanés. Voici un exemple de collision de ce
2864 type :
2865
2866 @lilypond[quote,verbatim,fragment,ragged-right, relative=1]
2867 << { c4 c c c } \\ { R1 } >>
2868 @end lilypond
2869
2870 Ici, la meilleure solution consiste à déplacer le symbole de pause vers
2871 le bas -- puisque cette pause appartient à la voix deux.  Par défaut,
2872 dans la @code{\voiceTwo} (c'est-à-dire dans la seconde voix d'une
2873 construction @code{<<@{@dots{}@} \\ @{@dots{}@}>>}), la propriété
2874 @code{staff-position} est réglée sur @code{-4} pour les
2875 @code{MultiMeasureRest} ; nous avons donc besoin de la déplacer, disons,
2876 de quatre demi-intervalles vers le bas, ce qui donne @code{-8}.
2877
2878 @cindex MultiMeasureRest, exemple de dérogation
2879 @cindex staff-position, exemple d'utilisation de la propriété
2880
2881 @lilypond[quote,verbatim,fragment,ragged-right, relative=1]
2882 <<
2883   { c4 c c c }
2884   \\
2885   \override MultiMeasureRest #'staff-position = #-8
2886   { R1 }
2887 >>
2888 @end lilypond
2889
2890 C'est mieux que d'utiliser, par exemple, @code{extra-offset},
2891 car la ligne supplémentaire au-dessus du silence est insérée
2892 automatiquement.
2893
2894
2895 @subheading la propriété extra-offset
2896 @c VO extra-offset property
2897
2898 @cindex positionnement des objets
2899 @cindex positionnement des grobs
2900 @cindex objets, positionnement
2901 @cindex grobs, positionnement
2902
2903 La propriété @code{extra-offset} offre la possibilité de contrôler
2904 entièrement le placement d'un objet, aussi bien horizontalement que
2905 verticalement.
2906
2907 Dans l'exemple suivant, la seconde indication de doigté est déplacée
2908 légèrement vers la gauche et de 1,8 intervalle de lignes vers le bas :
2909
2910 @cindex Fingering, exemple de dérogation
2911 @cindex extra-offset, exemple d'utilisation de la propriété
2912
2913 @lilypond[quote,fragment,relative=1,verbatim]
2914 \stemUp
2915 f4-5
2916 \once \override Fingering #'extra-offset = #'(-0.3 . -1.8)
2917 f4-5
2918 @end lilypond
2919
2920
2921 @subheading la propriété positions
2922 @c VO positions property
2923
2924 @cindex contrôle des nolets, liaisons, phrasés et ligatures
2925 @cindex gestion manuelle des nolets, liaisons, phrasés et ligatures
2926 @cindex ligatures de nolet, gestion manuelle
2927 @cindex liaisons, gestion manuelle
2928 @cindex phrasés, gestion manuelle
2929 @cindex ligatures, gestion manuelle
2930
2931 La propriété @code{positions} permet de contrôler manuellement la
2932 position et l'inclinaison des nolets, coulés, liaisons de phrasé et
2933 barres de ligature.  Voici un exemple avec une horrible liaison de
2934 phrasé -- horrible pour avoir tenté de contourner la liaison de
2935 l'acciaccature.
2936
2937 @lilypond[quote,verbatim,fragment,ragged-right,relative=1]
2938 r4 \acciaccatura e8\( d8 c~ c d c d\)
2939 @end lilypond
2940
2941 @noindent
2942 Nous pourrions tout simplement déplacer la liaison de phrasé au-dessus
2943 des notes, et ce serait la meilleure solution :
2944
2945 @lilypond[quote,verbatim,fragment,ragged-right,relative=1]
2946 r4
2947 \phrasingSlurUp
2948 \acciaccatura e8\( d8 c~ c d c d\)
2949 @end lilypond
2950
2951 @noindent
2952 Mais si, pour une quelconque raison, cette solution n'était pas
2953 envisageable, l'autre solution consiste à déplacer légèrement vers le
2954 bas l'extrémité gauche de la liaison de phrasé, grâce à la propriété
2955 @code{positions}.  Cela corrige en même temps la forme plutôt
2956 disgracieuse de la liaison.
2957
2958 @cindex PhrasingSlur, exemple de dérogation
2959 @cindex positions, exemple d'utilisation de la propriété
2960
2961 @lilypond[quote,verbatim,fragment,ragged-right,relative=1]
2962 r4
2963 \once \override PhrasingSlur #'positions = #'(-4 . -3)
2964 \acciaccatura e8\( d8 c~ c d c d\)
2965 @end lilypond
2966
2967 Voici un autre exemple. Comme nous pouvons le constater, les barres de
2968 ligature chevauchent les liaisons de tenue :
2969
2970 @lilypond[quote,verbatim,fragment,ragged-right]
2971 {
2972   \time 4/2
2973   <<
2974     { c'1 ~ c'2. e'8 f' }
2975     \\
2976     { e''8 e'' e'' e''  e'' e'' e'' e''  f''2 g'' }
2977   >>
2978   <<
2979     { c'1 ~ c'2. e'8 f' }
2980     \\
2981     { e''8 e'' e'' e''  e'' e'' e'' e''  f''2 g'' }
2982   >>
2983 }
2984 @end lilypond
2985
2986 @noindent
2987 On peut y remédier en déplaçant manuellement vers le haut les deux
2988 extrémités des ligatures de croches, non plus à 1,81 intervalle
2989 au-dessous de la ligne médiane mais, disons, à 1 :
2990
2991 @cindex Beam, exemple de dérogation
2992 @cindex positions, exemple d'utilisation de la propriété
2993
2994 @lilypond[quote,verbatim,fragment,ragged-right]
2995 {
2996   \time 4/2
2997   <<
2998     { c'1 ~ c'2. e'8 f' }
2999     \\
3000     {
3001       \override Beam #'positions = #'(-1 . -1)
3002       e''8 e'' e'' e''  e'' e'' e'' e''  f''2 g''
3003     }
3004   >>
3005   <<
3006     { c'1 ~ c'2. e'8 f' }
3007     \\
3008     { e''8 e'' e'' e''  e'' e'' e'' e''  f''2 g'' }
3009   >>
3010 }
3011 @end lilypond
3012
3013 @noindent
3014 Vous remarquerez que la retouche continue de s'appliquer au
3015 second bloc de croches de la première voix mais qu'il ne s'applique
3016 à aucune mesure de la deuxième voix.
3017
3018
3019 @subheading la propriété force-hshift
3020 @c VO force-hshift property
3021
3022 Maintenant, nous sommes prêts à appliquer les dernières corrections à
3023 l'exemple de Chopin présenté à la fin de @ref{J'entends des Voix}, que
3024 nous avions laissé dans cet état :
3025
3026 @lilypond[quote,verbatim,fragment,ragged-right]
3027 \new Staff \relative c'' {
3028   \key aes \major
3029   <<
3030     { c2 aes4. bes8 }
3031     \\
3032     { <ees, c>2 des }
3033     \\
3034     \\
3035     { aes'2 f4 fes }
3036   >> |
3037   <c ees aes c>1 |
3038 }
3039 @end lilypond
3040
3041 @noindent
3042 La note intermédiaire du premier accord, le la bémol à la quatrième
3043 voix, doit rester dans le même empilement que la note haute.  Pour y
3044 remédier, nous réglons le @code{force-hshift} -- qui est une propriété
3045 de @code{NoteColumn} -- de cette note sur zéro.
3046
3047 Quant au second accord, il serait préférable que le fa s'aligne avec le
3048 la et que la note la plus basse se positionne un peu plus sur la droite
3049 pour éviter que les hampes se chevauchent.  Pour cela, nous réglons le
3050 @code{force-hshift} au niveau du @code{NoteColumn} du ré bémol de telle
3051 sorte qu'il se déplace de la moitié d'un espace de portée vers la
3052 droite.
3053
3054 Et voici le résultat final :
3055
3056 @cindex NoteColumn, exemple de dérogation
3057 @cindex force-hshift, exemple d'utilisation de la propriété
3058
3059 @lilypond[quote,verbatim,fragment,ragged-right]
3060 \new Staff \relative c'' {
3061   \key aes \major
3062   <<
3063     { c2 aes4. bes8 }
3064     \\
3065     {
3066       <ees, c>2
3067       \once \override NoteColumn #'force-hshift = #0.5
3068       des2
3069     }
3070     \\
3071     \\
3072     {
3073       \override NoteColumn #'force-hshift = #0
3074       aes'2 f4 fes
3075     }
3076   >> |
3077   <c ees aes c>1 |
3078 }
3079 @end lilypond
3080
3081
3082 @node Exemple concret
3083 @subsection Exemple concret
3084 @translationof Real music example
3085
3086 Pour terminer ce chapitre consacré aux retouches, voici, étape par
3087 étape, la mise en forme d'un exemple concret nécessitant un certain
3088 nombre de retouches jusqu'à l'obtention du résultat attendu.  Cet
3089 exemple a été choisi en raison des problèmes inhabituels de notation
3090 qu'il soulevait et pour vous apprendre à les résoudre grâce au Manuel de
3091 notation.  Il n'est pas représentatif d'une opération normale de
3092 gravure ; que ces difficultés ne vous découragent donc pas !  Des
3093 difficultés comme celles-ci ne sont, heureusement, pas courantes !
3094
3095 Cet exemple est tiré de la Première Ballade de Chopin, Op. 23, mesures
3096 6 à 9 ; cela correspond à la transition entre le Lento d'ouverture
3097 et le Moderato.  Voici, pour commencer, ce à quoi nous voulons que la
3098 partition ressemble ; pour limiter les complications, nous n'avons
3099 pas fait apparaître les indications de nuance, de doigté ni de pédale.
3100
3101
3102 @c The following should appear as music without code
3103 @c This example should not be indexed
3104 @c line-width ensures no break
3105 @lilypond[quote,ragged-right,line-width=6\in]
3106 rhMusic = \relative c'' {
3107   \new Voice {
3108     r2 c4.\( g8 |
3109     \once \override Tie #'staff-position = #3.5
3110     bes1~ |
3111     \bar "||"
3112     \time 6/4
3113     \mergeDifferentlyHeadedOn
3114     \mergeDifferentlyDottedOn
3115     bes2.^\markup { \bold "Moderato" } r8
3116     <<
3117       { c,8 d fis bes a }
3118       \new Voice {
3119         \voiceTwo
3120         c,8~
3121         % Reposition the c2 to the right of the merged note
3122         \once \override NoteColumn #'force-hshift = #1.0
3123         % Move the c2 out of the main note column
3124         % so the merge will work
3125         \shiftOnn
3126         c2
3127       }
3128       \new Voice {
3129         \voiceThree
3130         s8
3131         % Stem on the d2 must be down to permit merging
3132         \stemDown
3133         % Stem on the d2 should be invisible
3134         \tweak Stem #'transparent ##t
3135         \tweak Flag #'transparent ##t
3136         d2
3137       }
3138       \new Voice {
3139         \voiceFour
3140         s4 fis4.
3141       }
3142     >> |
3143     \mergeDifferentlyHeadedOff
3144     \mergeDifferentlyDottedOff
3145     g2.\)
3146   }
3147 }
3148
3149 lhMusic = \relative c' {
3150   r2 <c g ees>2( |
3151   <d g, d>1)\arpeggio |
3152   r2. d,,4 r4 r |
3153   r4
3154 }
3155
3156 \score {
3157   \new PianoStaff <<
3158     \new Staff = "RH"  <<
3159       \key g \minor
3160       \rhMusic
3161     >>
3162     \new Staff = "LH" <<
3163       \key g \minor
3164       \clef "bass"
3165       \lhMusic
3166     >>
3167   >>
3168 }
3169 @end lilypond
3170
3171 Nous constatons tout d'abord que, dans la troisième mesure, la main
3172 droite compte quatre voix.  Ce sont les cinq croches avec une barre,
3173 le do avec liaison, le ré blanche qui se fond avec le ré croche, et le
3174 fa dièse noire pointée qui se fond lui aussi avec la croche de même
3175 hauteur.  Tout le reste se réduit à une seule voix.  Le plus simple est
3176 donc de créer temporairement ces trois voix supplémentaires au moment
3177 opportun.  Si vous avez oublié comment faire, reportez-vous à
3178 @ref{J'entends des Voix} et @ref{Instanciation explicite des voix}.
3179 Nous opterons ici pour une déclaration explicite des voix du passage
3180 polyphonique, puisque LilyPond est alors plus performant en matière
3181 d'évitement des collisions. 
3182
3183 Commençons par saisir les notes comme appartenant à deux variables,
3184 mettons en place l'ossature des portées dans un bloc @code{\Score} et
3185 voyons ce que LilyPond propose par défaut :
3186
3187 @c line-width ensures no break
3188 @lilypond[quote,verbatim,ragged-right,line-width=6\in]
3189 rhMusic = \relative c'' {
3190   \new Voice {
3191     r2 c4. g8 |
3192     bes1~ |
3193     \time 6/4
3194     bes2. r8
3195     % Start polyphonic section of four voices
3196     <<
3197       { c,8 d fis bes a }  % continuation of main voice
3198       \new Voice {
3199         \voiceTwo
3200         c,8~ c2
3201       }
3202       \new Voice {
3203         \voiceThree
3204         s8 d2
3205       }
3206       \new Voice {
3207         \voiceFour
3208         s4 fis4.
3209       }
3210     >> |
3211     g2.  % continuation of main voice
3212   }
3213 }
3214
3215 lhMusic = \relative c' {
3216   r2 <c g ees>2 |
3217   <d g, d>1 |
3218   r2. d,,4 r4 r |
3219   r4
3220 }
3221
3222 \score {
3223   \new PianoStaff <<
3224     \new Staff = "RH"  <<
3225       \key g \minor
3226       \rhMusic
3227     >>
3228     \new Staff = "LH" <<
3229       \key g \minor
3230       \clef "bass"
3231       \lhMusic
3232     >>
3233   >>
3234 }
3235 @end lilypond
3236
3237 Toutes les notes sont correctes mais l'allure générale est loin d'être
3238 satisfaisante.  La liaison se heurte à l'indication de mesure lors du
3239 changement de métrique, la ligature des croches n'est pas bonne dans la
3240 troisième mesure, les notes ne sont pas fusionnées et il manque
3241 plusieurs éléments de notation.  Commençons par le plus simple.  Nous
3242 pouvons corriger la ligature des croches en la créant manuellement et
3243 nous pouvons facilement ajouter les limites droite et gauche de la
3244 liaison de phrasé, puisque tout cela a déjà été traité dans le tutoriel.
3245 Voici le résultat :
3246
3247 @c line-width ensures no break
3248 @lilypond[quote,verbatim,ragged-right,line-width=6\in]
3249 rhMusic = \relative c'' {
3250   \new Voice {
3251     r2 c4.\( g8 |
3252     bes1~ |
3253     \time 6/4
3254     bes2. r8
3255     % Start polyphonic section of four voices
3256     <<
3257       { c,8 d fis bes a }  % continuation of main voice
3258       \new Voice {
3259         \voiceTwo
3260         c,8~ c2
3261       }
3262       \new Voice {
3263         \voiceThree
3264         s8 d2
3265       }
3266       \new Voice {
3267         \voiceFour
3268         s4 fis4.
3269       }
3270     >> |
3271     g2.\)  % continuation of main voice
3272   }
3273 }
3274
3275 lhMusic = \relative c' {
3276   r2 <c g ees>2( |
3277   <d g, d>1) |
3278   r2. d,,4 r4 r |
3279   r4
3280 }
3281
3282 \score {
3283   \new PianoStaff <<
3284     \new Staff = "RH"  <<
3285       \key g \minor
3286       \rhMusic
3287     >>
3288     \new Staff = "LH" <<
3289       \key g \minor
3290       \clef "bass"
3291       \lhMusic
3292     >>
3293   >>
3294 }
3295 @end lilypond
3296
3297 La première mesure est maintenant correcte.  La seconde contient un
3298 arpège et doit se terminer par une double barre.  Comment faire, puisque
3299 cela n'a pas été traité dans le Manuel d'initiation ?  C'est alors
3300 qu'il faut nous reporter au Manuel de notation.  Quand on cherche
3301 @qq{arpège} et @qq{barre de mesure} dans l'index, on voit aisément qu'il
3302 faut ajouter @code{\arpeggio} à un accord pour produire un arpège et
3303 qu'une double barre est le résultat de la commande @code{\bar "||"}.
3304 Rien de plus facile !  Nous devons ensuite corriger la collision entre
3305 la liaison et l'indication de mesure.  Le mieux est de déplacer la
3306 liaison vers le haut.  La méthode pour déplacer les objets a déjà été
3307 présentée dans @ref{Déplacement d'objets}, et l'on sait que, pour des
3308 objets positionnés par rapport à la portée, il nous faut modifier leur
3309 propriété @code{staff-position}, exprimée en demi-intervalles de lignes
3310 par rapport à la ligne médiane de la portée.  Voici donc la retouche à
3311 insérer juste devant la première note liée ; elle est censée déplacer la
3312 liaison vers le haut de 3,5 demi-intervalles de lignes au-dessus de la
3313 ligne médiane :
3314
3315 @code{\once \override Tie #'staff-position = #3.5}
3316
3317 Cela s'adjoint à la deuxième mesure, pour donner :
3318
3319 @c line-width ensures no break
3320 @lilypond[quote,verbatim,ragged-right,line-width=6\in]
3321 rhMusic = \relative c'' {
3322   \new Voice {
3323     r2 c4.\( g8 |
3324     \once \override Tie #'staff-position = #3.5
3325     bes1~ |
3326     \bar "||"
3327     \time 6/4
3328     bes2. r8
3329     % Start polyphonic section of four voices
3330     <<
3331       { c,8 d fis bes a }  % continuation of main voice
3332       \new Voice {
3333         \voiceTwo
3334         c,8~ c2
3335       }
3336       \new Voice {
3337         \voiceThree
3338         s8 d2
3339       }
3340       \new Voice {
3341         \voiceFour
3342         s4 fis4.
3343       }
3344     >> |
3345     g2.\)  % continuation of main voice
3346   }
3347 }
3348
3349 lhMusic = \relative c' {
3350   r2 <c g ees>2( |
3351   <d g, d>1)\arpeggio |
3352   r2. d,,4 r4 r |
3353   r4
3354 }
3355
3356 \score {
3357   \new PianoStaff <<
3358     \new Staff = "RH"  <<
3359       \key g \minor
3360       \rhMusic
3361     >>
3362     \new Staff = "LH" <<
3363       \key g \minor
3364       \clef "bass"
3365       \lhMusic
3366     >>
3367   >>
3368 }
3369 @end lilypond
3370
3371 Venons-en à la troisième mesure et au début de la section Moderato.
3372 Dans le Tutoriel, il est indiqué comment insérer du texte en gras à
3373 l'aide de la commande @code{\markup} ; pas de problème, du coup,
3374 pour ajouter @qq{Moderato} en gras.  Mais comment faire pour fusionner
3375 les notes de différentes voix ?  C'est là que le Manuel de notation
3376 peut nous venir en aide.  Une recherche sur @qq{fusionnement de notes}
3377 dans l'index nous renvoie au chapitre @ruser{Résolution des collisions},
3378 et plus précisément aux commandes permettant de fusionner des notes en
3379 fonction de leur type et selon qu'elles sont pointées ou non.  Dans
3380 notre exemple, pour la durée de la polyphonie de la troisième mesure,
3381 nous avons besoin de fusionner deux types de notes ; grâce aux
3382 informations trouvées dans le Manuel de notation, nous ajoutons
3383
3384 @example
3385 \mergeDifferentlyHeadedOn
3386 \mergeDifferentlyDottedOn
3387 @end example
3388
3389 @noindent
3390 au début de cette section et
3391
3392 @example
3393 \mergeDifferentlyHeadedOff
3394 \mergeDifferentlyDottedOff
3395 @end example
3396
3397 @noindent
3398 à la fin, ce qui donne :
3399
3400 @c line-width ensures no break
3401 @lilypond[quote,verbatim,ragged-right,line-width=6\in]
3402 rhMusic = \relative c'' {
3403   \new Voice {
3404     r2 c4.\( g8 |
3405     \once \override Tie #'staff-position = #3.5
3406     bes1~ |
3407     \bar "||"
3408     \time 6/4
3409     bes2.^\markup { \bold "Moderato" } r8
3410     \mergeDifferentlyHeadedOn
3411     \mergeDifferentlyDottedOn
3412     % Start polyphonic section of four voices
3413     <<
3414       { c,8 d fis bes a }  % continuation of main voice
3415       \new Voice {
3416         \voiceTwo
3417         c,8~ c2
3418       }
3419       \new Voice {
3420         \voiceThree
3421         s8 d2
3422       }
3423       \new Voice {
3424         \voiceFour
3425         s4 fis4.
3426       }
3427     >> |
3428     \mergeDifferentlyHeadedOff
3429     \mergeDifferentlyDottedOff
3430     g2.\)  % continuation of main voice
3431   }
3432 }
3433
3434 lhMusic = \relative c' {
3435   r2 <c g ees>2( |
3436   <d g, d>1)\arpeggio |
3437   r2. d,,4 r4 r |
3438   r4
3439 }
3440
3441 \score {
3442   \new PianoStaff <<
3443     \new Staff = "RH"  <<
3444       \key g \minor
3445       \rhMusic
3446     >>
3447     \new Staff = "LH" <<
3448       \key g \minor
3449       \clef "bass"
3450       \lhMusic
3451     >>
3452   >>
3453 }
3454 @end lilypond
3455
3456 Ces retouches ont permis de fusionner les deux fa dièse mais pas les
3457 deux ré.  Pourquoi ?  La réponse se trouve dans la même section du
3458 Manuel de notation : les notes à fusionner doivent avoir des hampes
3459 dans des directions opposées et deux notes ne peuvent pas être
3460 fusionnées s'il y a une troisième note dans la même colonne.  Ici, les
3461 deux ré ont leur hampe orientée vers le haut et il y a une troisième
3462 note, do.  Nous savons changer l'orientation de la hampe avec
3463 @code{\stemDown} et le Manuel de notation nous indique également comment
3464 déplacer le do -- en produisant un décalage grâce à l'une des commandes
3465 @code{\shift}.  Mais laquelle ?  Le do appartient à la deuxième
3466 voix et n'est pas décalé ; les deux ré appartiennent respectivement
3467 à la première et à la troisième voix, et l'un n'est pas décalé tandis
3468 que l'autre l'est.  Il nous faut donc décaler largement le do avec la
3469 commande @code{\shiftOnn} pour éviter une interférence avec les deux ré.
3470 Voici ce que donnent ces modifications :
3471
3472 @cindex Tie, exemple de dérogation
3473 @cindex staff-position, exemple d'utilisation de la propriété
3474
3475 @c line-width ensures no break
3476 @lilypond[quote,verbatim,ragged-right,line-width=6\in]
3477 rhMusic = \relative c'' {
3478   \new Voice {
3479     r2 c4.\( g8 |
3480     \once \override Tie #'staff-position = #3.5
3481     bes1~ |
3482     \bar "||"
3483     \time 6/4
3484     bes2.^\markup { \bold "Moderato" } r8
3485     \mergeDifferentlyHeadedOn
3486     \mergeDifferentlyDottedOn
3487     % Start polyphonic section of four voices
3488     <<
3489       { c,8 d fis bes a }  % continuation of main voice
3490       \new Voice {
3491         \voiceTwo
3492         % Move the c2 out of the main note column
3493         % so the merge will work
3494         c,8~ \shiftOnn c2
3495       }
3496       \new Voice {
3497         \voiceThree
3498         % Stem on the d2 must be down to permit merging
3499         s8 \stemDown d2
3500       }
3501       \new Voice {
3502         \voiceFour
3503         s4 fis4.
3504       }
3505     >> |
3506     \mergeDifferentlyHeadedOff
3507     \mergeDifferentlyDottedOff
3508     g2.\)  % continuation of main voice
3509   }
3510 }
3511
3512 lhMusic = \relative c' {
3513   r2 <c g ees>2( |
3514   <d g, d>1)\arpeggio |
3515   r2. d,,4 r4 r |
3516   r4
3517 }
3518
3519 \score {
3520   \new PianoStaff <<
3521     \new Staff = "RH"  <<
3522       \key g \minor
3523       \rhMusic
3524     >>
3525     \new Staff = "LH" <<
3526       \key g \minor
3527       \clef "bass"
3528       \lhMusic
3529     >>
3530   >>
3531 }
3532 @end lilypond
3533
3534 Pas loin !  Il ne reste plus que deux problèmes : les ré une
3535 fois fusionnés ne devraient plus avoir de hampe vers le bas, et le do
3536 serait mieux à la droite des ré.  Nous savons remédier à ces deux
3537 problèmes grâce aux retouches précédentes : nous allons rendre la
3538 hampe transparente et déplacer le do avec la propriété
3539 @code{force-hshift}.  Et voici le résultat final :
3540
3541 @cindex NoteColumn, exemple de dérogation
3542 @cindex force-hshift, exemple d'utilisation de la propriété
3543 @cindex Stem, exemple de dérogation
3544 @cindex transparent, exemple d'utilisation de la propriété
3545
3546 @c line-width ensures no break
3547 @lilypond[quote,verbatim,ragged-right,line-width=6\in]
3548 rhMusic = \relative c'' {
3549   \new Voice {
3550     r2 c4.\( g8 |
3551     \once \override Tie #'staff-position = #3.5
3552     bes1~ |
3553     \bar "||"
3554     \time 6/4
3555     bes2.^\markup { \bold "Moderato" } r8
3556     \mergeDifferentlyHeadedOn
3557     \mergeDifferentlyDottedOn
3558     % Start polyphonic section of four voices
3559     <<
3560       { c,8 d fis bes a }  % continuation of main voice
3561       \new Voice {
3562         \voiceTwo
3563         c,8~
3564         % Reposition the c2 to the right of the merged note
3565         \once \override NoteColumn #'force-hshift = #1.0
3566         % Move the c2 out of the main note column
3567         % so the merge will work
3568         \shiftOnn
3569         c2
3570       }
3571       \new Voice {
3572         \voiceThree
3573         s8
3574         % Stem on the d2 must be down to permit merging
3575         \stemDown
3576         % Stem on the d2 should be invisible
3577         \tweak Stem #'transparent ##t
3578         \tweak Flag #'transparent ##t
3579         d2
3580       }
3581       \new Voice {
3582         \voiceFour
3583         s4 fis4.
3584       }
3585     >> |
3586     \mergeDifferentlyHeadedOff
3587     \mergeDifferentlyDottedOff
3588     g2.\)  % continuation of main voice
3589   }
3590 }
3591
3592 lhMusic = \relative c' {
3593   r2 <c g ees>2( |
3594   <d g, d>1)\arpeggio |
3595   r2. d,,4 r4 r |
3596   r4
3597 }
3598
3599 \score {
3600   \new PianoStaff <<
3601     \new Staff = "RH"  <<
3602       \key g \minor
3603       \rhMusic
3604     >>
3605     \new Staff = "LH" <<
3606       \key g \minor
3607       \clef "bass"
3608       \lhMusic
3609     >>
3610   >>
3611 }
3612 @end lilypond
3613
3614
3615 @node Autres retouches
3616 @section Autres retouches
3617 @translationof Further tweaking
3618
3619 @menu
3620 * Autres utilisations des retouches::
3621 * Utilisation de variables dans les retouches::
3622 * Feuilles de style::
3623 * Autres sources de documentation::
3624 * Retouches avancées avec Scheme::
3625 @end menu
3626
3627
3628 @node Autres utilisations des retouches
3629 @subsection Autres utilisations des retouches
3630 @translationof Other uses for tweaks
3631
3632 @cindex transparent, utilisation de la propriété
3633 @cindex création d'objet invisible
3634 @cindex suppression d'objets
3635 @cindex objets, suppression d'
3636 @cindex masquage d'objets
3637 @cindex objets, masquage d'
3638 @cindex invisibles, objets
3639 @cindex objets, invisibles
3640 @cindex liaison de tenue avec changement de voix
3641
3642
3643 @subheading Liaison entre plusieurs voix
3644 @c VO Tying notes across voices
3645
3646 Voici un exemple qui montre comment créer une liaison de
3647 prolongation entre des notes appartenant à des voix différentes.  En
3648 temps normal, seules deux notes appartenant à une même voix
3649 peuvent être ainsi liées.  La solution consiste à utiliser deux voix,
3650 dont l'une avec les notes liées
3651
3652 @lilypond[quote,fragment,relative=2]
3653 << { b8~ b8\noBeam } \\ { b[ g8] } >>
3654 @end lilypond
3655
3656 @noindent
3657 et à rendre transparente la première hampe de cette voix ;
3658 on a alors l'impression que la liaison couvre les deux voix.
3659
3660 @cindex Stem, exemple de dérogation
3661 @cindex transparent, exemple d'utilisation de la propriété
3662
3663 @lilypond[quote,fragment,relative=2,verbatim]
3664 <<
3665   {
3666     \tweak Stem #'transparent ##t
3667     \tweak Flag #'transparent ##t
3668     b8~ b\noBeam
3669   }
3670 \\
3671   { b8[ g] }
3672 >>
3673 @end lilypond
3674
3675 Pour être sûr que la hampe que nous avons rendue transparente
3676 n'empiète pas trop sur le trait de liaison, nous pouvons l'allonger en
3677 réglant la longueur (@code{length}) sur @code{8},
3678
3679 @lilypond[quote,fragment,relative=2,verbatim]
3680 <<
3681   {
3682     \tweak Stem #'transparent ##t
3683     \tweak Flag #'transparent ##t
3684     \tweak Stem #'length #8
3685     b8~ b8\noBeam
3686   }
3687 \\
3688   { b[ g8] }
3689 >>
3690 @end lilypond
3691
3692
3693 @subheading Rendu MIDI d'un point d'orgue
3694 @c VO Simulating a fermata in MIDI
3695
3696 @cindex stencil, utilisation de la propriété
3697 @cindex point d'orgue, rendu en MIDI
3698
3699 En ce qui concerne les objets extérieurs à la portée, quand on veut les
3700 faire disparaître de la partition imprimée, il est généralement
3701 préférable de modifier leur propriété @code{stencil} plutôt que leur
3702 propriété @code{transparent}.  Le fait d'attribuer à la propriété
3703 @code{stencil} d'un objet la valeur @code{#f} supprimera entièrement
3704 celui-ci de la partition.  Il ne risquera donc pas de gêner le placement
3705 d'autres objets.
3706
3707 Par exemple, si nous voulons changer le réglage de métronome pour
3708 simuler un point d'orgue dans le fichier MIDI, nous ne voulons surtout
3709 pas que cette indication métronomique apparaisse sur la partition ni
3710 qu'elle influence l'espacement entre les deux systèmes ou la position
3711 des annotations voisines sur la portée.  Le fait d'attribuer à la
3712 propriété @code{stencil} la valeur @code{#f} est donc la bonne solution.
3713 Nous montrons ci-dessous le résultat des deux méthodes :
3714
3715 @cindex MetronomeMark, exemple de dérogation
3716 @cindex transparent, exemple d'utilisation de la propriété
3717
3718 @lilypond[quote,verbatim,ragged-right]
3719 \score {
3720   \relative c'' {
3721     % Visible tempo marking
3722     \tempo 4=120
3723     a4 a a
3724     \once \override Score.MetronomeMark #'transparent = ##t
3725     % Invisible tempo marking to lengthen fermata in MIDI
3726     \tempo 4=80
3727     a4\fermata |
3728     % New tempo for next section
3729     \tempo 4=100
3730     a4 a a a |
3731   }
3732   \layout { }
3733   \midi { }
3734 }
3735 @end lilypond
3736
3737 @cindex MetronomeMark, exemple de dérogation
3738 @cindex stencil, exemple d'utilisation de la propriété
3739
3740 @lilypond[quote,verbatim,ragged-right]
3741 \score {
3742   \relative c'' {
3743     % Visible tempo marking
3744     \tempo 4=120
3745     a4 a a
3746     \once \override Score.MetronomeMark #'stencil = ##f
3747     % Invisible tempo marking to lengthen fermata in MIDI
3748     \tempo 4=80
3749     a4\fermata |
3750     % New tempo for next section
3751     \tempo 4=100
3752     a4 a a a |
3753   }
3754   \layout { }
3755   \midi { }
3756 }
3757 @end lilypond
3758
3759 @noindent
3760 Les deux méthodes permettent d'enlever l'indication métronomique qui
3761 allonge le point d'orgue de la partition, et toutes deux modifient le
3762 rythme MIDI comme souhaité  mais, dans la première, l'indication
3763 métronomique transparente repousse vers le haut l'indication de tempo,
3764 contrairement à la seconde (avec le stencil désactivé) qui la laisse à
3765 sa place.
3766
3767 @seealso
3768 Glossaire musicologique :
3769 @rglosnamed{system,système}.
3770
3771
3772 @node Utilisation de variables dans les retouches
3773 @subsection Utilisation de variables dans les retouches
3774 @translationof Using variables for tweaks
3775
3776 @cindex variables, utilisation dans les retouches
3777 @cindex utilisation de variables dans les retouches
3778 @cindex retouches et utilisation de variables
3779
3780 Les commandes de retouche sont souvent longues et pénibles à
3781 taper, et ne tolèrent pas la moindre erreur.  Lorsqu'on a besoin de
3782 faire plusieurs fois les mêmes retouches, il est préférable de
3783 définir des variables qui les contiennent.
3784
3785 Imaginons que nous voulions accentuer certains mots dans des paroles en
3786 les mettant en italique.  Au lieu des commandes @code{\italic} et
3787 @code{\bold}, qui ne fonctionnent dans les paroles que si elles sont
3788 enchâssées dans un @code{\markup} -- ce qui les rend pénibles à saisir
3789 -- pouvons-nous employer les commandes @code{\override} et
3790 @code{\revert} ?
3791
3792 @example
3793 @code{\override Lyrics . LyricText #'font-shape = #'italic}
3794 @code{\override Lyrics . LyricText #'font-series = #'bold}
3795
3796 @code{\revert Lyrics . LyricText #'font-shape}
3797 @code{\revert Lyrics . LyricText #'font-series}
3798 @end example
3799
3800 Là encore, ce serait extrêmement pénible à saisir, surtout s'il y avait
3801 beaucoup de mots à retoucher de cette façon.  Plutôt que cette
3802 solution, nous déclarons ces commandes comme étant deux variables,
3803 et les utilisons comme ci-après -- quoique on choisirait sans doute pour
3804 les variables des noms plus courts pour simplifier la frappe.  Par
3805 ailleurs, le fait de recourir à une variable ne nous expose plus à
3806 l'oubli des espaces entourant les points lorsqu'explicités au beau
3807 milieu d'un bloc @code{\lyricmode} !
3808
3809 @cindex LyricText, exemple de dérogation
3810 @cindex font-shape, exemple d'utilisation de la propriété
3811 @cindex font-series, exemple d'utilisation de la propriété
3812
3813 @lilypond[quote,verbatim]
3814 emphasize = {
3815   \override Lyrics.LyricText #'font-shape = #'italic
3816   \override Lyrics.LyricText #'font-series = #'bold
3817 }
3818
3819 normal = {
3820   \revert Lyrics.LyricText #'font-shape
3821   \revert Lyrics.LyricText #'font-series
3822 }
3823
3824 global = { \key c \major \time 4/4 \partial 4 }
3825
3826 SopranoMusic = \relative c' { c4 | e4. e8 g4 g    | a4   a   g  }
3827 AltoMusic    = \relative c' { c4 | c4. c8 e4 e    | f4   f   e  }
3828 TenorMusic   = \relative c  { e4 | g4. g8 c4.  b8 | a8 b c d e4 }
3829 BassMusic    = \relative c  { c4 | c4. c8 c4 c    | f8 g a b c4 }
3830
3831 VerseOne = \lyrics {
3832   E -- | ter -- nal \emphasize Fa -- ther, | \normal strong to save,
3833 }
3834
3835 VerseTwo = \lyricmode {
3836   O | \emphasize Christ, \normal whose voice the | wa -- ters heard,
3837 }
3838
3839 VerseThree = \lyricmode {
3840   O | \emphasize Ho -- ly Spi -- rit, | \normal who didst brood
3841 }
3842
3843 VerseFour = \lyricmode {
3844   O | \emphasize Tri -- ni -- ty \normal of | love and pow'r
3845 }
3846
3847 \score {
3848   \new ChoirStaff <<
3849     \new Staff <<
3850       \clef "treble"
3851       \new Voice = "Soprano"  { \voiceOne \global \SopranoMusic }
3852       \new Voice = "Alto" { \voiceTwo \AltoMusic }
3853       \new Lyrics \lyricsto "Soprano" { \VerseOne }
3854       \new Lyrics \lyricsto "Soprano" { \VerseTwo }
3855       \new Lyrics \lyricsto "Soprano" { \VerseThree }
3856       \new Lyrics \lyricsto "Soprano" { \VerseFour }
3857     >>
3858     \new Staff <<
3859       \clef "bass"
3860       \new Voice = "Tenor" { \voiceOne \TenorMusic }
3861       \new Voice = "Bass"  { \voiceTwo \BassMusic }
3862     >>
3863   >>
3864 }
3865 @end lilypond
3866
3867
3868 @node Feuilles de style
3869 @subsection Feuilles de style
3870 @translationof Style sheets
3871
3872 La sortie que produit LilyPond peut être largement modifiée -- voir
3873 @ref{Retouche de partition} pour plus de détails.  Mais que faire si
3874 vous avez beaucoup de fichiers auxquels vous souhaitez appliquer vos
3875 retouches ?  Ou si vous souhaitez simplement séparer les retouches
3876 de la musique elle-même ?  Rien de plus facile.
3877
3878 Prenons un exemple.  Ne vous inquiétez pas si vous ne comprenez pas
3879 les parties avec tous les @code{#()}.  Celles-ci sont expliquées dans
3880 @ref{Retouches avancées avec Scheme}.
3881
3882 @lilypond[quote,verbatim,ragged-right]
3883 mpdolce =
3884 #(make-dynamic-script
3885   (markup #:hspace 0
3886           #:translate '(5 . 0)
3887           #:line (#:dynamic "mp"
3888                   #:text #:italic "dolce")))
3889
3890 inst =
3891 #(define-music-function
3892      (parser location string)
3893      (string?)
3894    (make-music
3895     'TextScriptEvent
3896     'direction UP
3897     'text (markup #:bold (#:box string))))
3898
3899 \relative c'' {
3900   \tempo 4=50
3901   a4.\mpdolce d8 cis4--\glissando a |
3902   b4 bes a2 |
3903   \inst "Clarinet"
3904   cis4.\< d8 e4 fis |
3905   g8(\! fis)-. e( d)-. cis2 |
3906 }
3907 @end lilypond
3908
3909 On peut faire quelque chose pour les définitions de @code{mpdolce}
3910 et @code{inst}.  Elles produisent le résultat que nous désirons,
3911 mais nous pourrions aussi vouloir les utiliser dans une autre pièce.
3912 Il suffirait de les copier et coller au début de chaque
3913 fichier, mais c'est fastidieux.  De plus, cela laisse les définitions
3914 dans nos fichiers de musique, et je trouve personnellement tous ces
3915 @code{#()} assez laids.  Stockons-les dans un autre fichier :
3916
3917 @example
3918 %%% enregistrez ceci dans un fichier nommé "definitions.ily"
3919 mpdolce =
3920 #(make-dynamic-script
3921   #@{ \markup @{ \hspace #0
3922                \translate #'(5 . 0)
3923                \line @{ \dynamic "mp"
3924                        \text \italic "dolce" @} @}
3925   #@})
3926
3927 inst =
3928 #(define-music-function
3929      (parser location string)
3930      (string?)
3931    #@{ ^\markup \bold \box #string #@})
3932 @end example
3933
3934 Nous rappellerons ce fichier par une simple commande @code{\include} au
3935 début de notre fichier de musique.  Lui attribuer l'extension
3936 @code{.ily} nous permet de distinguer aisément qu'il s'agit d'un fichier
3937 voué à être inclus dans un fichier maître ; il n'est pas destiné à
3938 être compilé isolément.@*
3939 Maintenant, modifions notre musique (enregistrez ce fichier
3940 sous @file{musique.ly}).
3941
3942 @c  We have to do this awkward example/lilypond-non-verbatim
3943 @c  because we can't do the \include stuff in the manual.
3944
3945 @example
3946 \include "definitions.ily"
3947
3948 \relative c'' @{
3949   \tempo 4=50
3950   a4.\mpdolce d8 cis4--\glissando a |
3951   b4 bes a2 |
3952   \inst "Clarinet"
3953   cis4.\< d8 e4 fis |
3954   g8(\! fis)-. e( d)-. cis2 |
3955 @}
3956 @end example
3957
3958 @lilypond[quote,ragged-right]
3959 mpdolce =
3960 #(make-dynamic-script
3961   #{ \markup { \hspace #0
3962                \translate #'(5 . 0)
3963                \line { \dynamic "mp"
3964                        \text \italic "dolce" } }
3965   #})
3966
3967 inst =
3968 #(define-music-function
3969      (parser location string)
3970      (string?)
3971    #{ ^\markup \bold \box #string #})
3972
3973 \relative c'' {
3974   \tempo 4=50
3975   a4.\mpdolce d8 cis4--\glissando a |
3976   b4 bes a2 |
3977   \inst "Clarinet"
3978   cis4.\< d8 e4 fis |
3979   g8(\! fis)-. e( d)-. cis2 |
3980 }
3981 @end lilypond
3982
3983 C'est mieux, mais effectuons encore quelques retouches.  Le glissando
3984 est peu visible, c'est pourquoi nous allons l'épaissir et le
3985 rapprocher des têtes de note.  Déplaçons l'indication métronomique
3986 au-dessus de la clef, au lieu de la laisser au-dessus de la première
3987 note.  Et pour finir, mon professeur de composition déteste les
3988 chiffrages de mesure en @qq{C}, nous allons donc le transformer en
3989 @qq{4/4}.
3990
3991 Cependant, ne changez pas le fichier @file{musique.ly}.  Remplacez le
3992 fichier @file{definitions.ily} par ceci :
3993
3994 @example
3995 %%%  definitions.ily
3996 mpdolce =
3997 #(make-dynamic-script
3998   #@{ \markup @{ \hspace #0
3999                \translate #'(5 . 0)
4000                \line @{ \dynamic "mp"
4001                        \text \italic "dolce" @} @}
4002   #@})
4003
4004 inst =
4005 #(define-music-function
4006      (parser location string)
4007      (string?)
4008    #@{ ^\markup \bold \box #string #@})
4009
4010 \layout@{
4011   \context @{
4012     \Score
4013     \override MetronomeMark #'extra-offset = #'(-9 . 0)
4014     \override MetronomeMark #'padding = #'3
4015   @}
4016   \context @{
4017     \Staff
4018     \override TimeSignature #'style = #'numbered
4019   @}
4020   \context @{
4021     \Voice
4022     \override Glissando #'thickness = #3
4023     \override Glissando #'gap = #0.1
4024   @}
4025 @}
4026 @end example
4027
4028 @lilypond[quote,ragged-right]
4029 mpdolce =
4030 #(make-dynamic-script
4031   #{ \markup { \hspace #0
4032                \translate #'(5 . 0)
4033                \line { \dynamic "mp"
4034                        \text \italic "dolce" } }
4035   #})
4036
4037 inst =
4038 #(define-music-function
4039      (parser location string)
4040      (string?)
4041    #{ ^\markup \bold \box #string #})
4042
4043 \layout{
4044   \context {
4045     \Score
4046     \override MetronomeMark #'extra-offset = #'(-9 . 0)
4047     \override MetronomeMark #'padding = #'3
4048   }
4049   \context {
4050     \Staff
4051     \override TimeSignature #'style = #'numbered
4052   }
4053   \context {
4054     \Voice
4055     \override Glissando #'thickness = #3
4056     \override Glissando #'gap = #0.1
4057   }
4058 }
4059
4060 \relative c'' {
4061   \tempo 4=50
4062   a4.\mpdolce d8 cis4--\glissando a |
4063   b4 bes a2 |
4064   \inst "Clarinet"
4065   cis4.\< d8 e4 fis |
4066   g8(\! fis)-. e( d)-. cis2 |
4067 }
4068 @end lilypond
4069
4070 C'est encore mieux !  Mais supposons maintenant que je veuille
4071 publier cette pièce.  Mon professeur de composition n'aime pas les
4072 chiffrages de mesure en @qq{C}, mais moi je les aime bien.  Copions
4073 l'actuel @file{definitions.ily} dans le fichier
4074 @file{publication-web.ily}, et modifions ce dernier.  Puisque la musique
4075 est destinée à produire un fichier PDF affiché sur écran, nous allons
4076 aussi augmenter la taille globale de police.
4077
4078 @example
4079 %%%  web-publish.ily
4080 mpdolce =
4081 #(make-dynamic-script
4082   #@{ \markup @{ \hspace #0
4083                \translate #'(5 . 0)
4084                \line @{ \dynamic "mp"
4085                        \text \italic "dolce" @} @}
4086   #@})
4087
4088 inst =
4089 #(define-music-function
4090      (parser location string)
4091      (string?)
4092    #@{ ^\markup \bold \box #string #@})
4093
4094 #(set-global-staff-size 23)
4095
4096 \layout@{
4097   \context @{
4098     \Score
4099     \override MetronomeMark #'extra-offset = #'(-9 . 0)
4100     \override MetronomeMark #'padding = #'3
4101   @}
4102   \context @{
4103     \Staff
4104   @}
4105   \context @{
4106     \Voice
4107     \override Glissando #'thickness = #3
4108     \override Glissando #'gap = #0.1
4109   @}
4110 @}
4111 @end example
4112
4113 @lilypond[quote,ragged-right]
4114 mpdolce =
4115 #(make-dynamic-script
4116   #{ \markup { \hspace #0
4117                \translate #'(5 . 0)
4118                \line { \dynamic "mp"
4119                        \text \italic "dolce" } }
4120   #})
4121
4122 inst =
4123 #(define-music-function
4124      (parser location string)
4125      (string?)
4126    #{ ^\markup \bold \box #string #})
4127
4128 #(set-global-staff-size 23)
4129
4130 \layout{
4131   \context { \Score
4132     \override MetronomeMark #'extra-offset = #'(-9 . 0)
4133     \override MetronomeMark #'padding = #'3
4134   }
4135   \context { \Voice
4136     \override Glissando #'thickness = #3
4137     \override Glissando #'gap = #0.1
4138   }
4139 }
4140
4141 \relative c'' {
4142   \tempo 4=50
4143   a4.\mpdolce d8 cis4--\glissando a |
4144   b4 bes a2 |
4145   \inst "Clarinet"
4146   cis4.\< d8 e4 fis |
4147   g8(\! fis)-. e( d)-. cis2 |
4148 }
4149 @end lilypond
4150
4151 Il ne nous reste plus qu'à remplacer
4152 @code{\include "definitions.ily"} par
4153 @code{\include "publication-web.ily"} dans notre fichier de
4154 musique.
4155
4156 Il est possible, bien sûr, de rendre cela encore plus pratique.  Nous
4157 pourrions créer un fichier @file{definitions.ily} qui ne contiendrait
4158 que les définitions de @code{mpdolce} et de @code{inst}, un
4159 fichier @file{publication-web.ily} qui ne contiendrait que la section
4160 @code{layout} décrite ci-dessus et un fichier @file{universite.ily} qui
4161 ne contiendrait que les retouches pour produire le résultat que mon
4162 professeur préfère.  Le début du fichier @file{musique.ly} ressemblerait
4163 alors à
4164
4165 @example
4166 \include "definitions.ily"
4167
4168 %%%  Décommentez seulement une de ces deux lignes !
4169 \include "publication-web.ily"
4170 %\include "universite.ily"
4171 @end example
4172
4173 Cette approche peut être utile même si vous ne produisez qu'un seul
4174 jeu de partitions.  J'utilise personnellement une demi-douzaine de
4175 fichiers de @qq{feuille de style} pour mes projets.  Je commence
4176 chaque fichier de musique par @code{\include "../global.ily"} qui
4177 contient :
4178
4179 @example
4180 %%%   global.ily
4181 \version @w{"@version{}"}
4182
4183 #(ly:set-option 'point-and-click #f)
4184
4185 \include "../init/init-defs.ly"
4186 \include "../init/init-mise-en-page.ly"
4187 \include "../init/init-en-tetes.ly"
4188 \include "../init/init-papier.ly"
4189 @end example
4190
4191
4192 @node Autres sources de documentation
4193 @subsection Autres sources de documentation
4194 @translationof Other sources of information
4195
4196 La référence des propriétés internes contient beaucoup d'informations
4197 sur LilyPond.  Cependant vous pouvez en découvrir encore plus en
4198 consultant les fichiers internes de LilyPond.  Pour cela, il vous faut
4199 d'abord connaître le répertoire @emph{ad hoc} sur votre système.
4200 L'emplacement du répertoire dépend (a) du fait que, pour vous procurer
4201 LilyPond, vous avez téléchargé un paquet précompilé sur lilypond.org ou
4202 vous l'avez installé grâce à votre gestionnaire de paquetages
4203 (c'est-à-dire distribué avec GNU/Linux ou installé avec fink ou cygwin), ou
4204 encore vous l'avez compilé directement à partir des sources ; et
4205 (b) du système d'exploitation sur lequel il tourne.
4206
4207
4208 @strong{Téléchargé depuis lilypond.org}
4209
4210 @itemize @bullet
4211 @item GNU/Linux
4212
4213 @example
4214 @file{@var{INSTALLDIR}/lilypond/usr/@/share/lilypond/current/}
4215 @end example
4216
4217 @item MacOS X
4218
4219 @example
4220 @file{@var{INSTALLDIR}/LilyPond.app/Contents/@/Resources/share/lilypond/current/}
4221 @end example
4222
4223 Pour accéder à ce dossier, deux possibilités : soit, dans un
4224 Terminal, taper @code{cd} suivi du chemin complet ci-dessus ; soit
4225 Control-cliquer (ou clic droit) sur l'application LilyPond
4226 et sélectionner @qq{Afficher le contenu du paquet}.
4227
4228 @item Windows
4229
4230 Dans l'Explorateur Windows, voir
4231 @example
4232 @file{@var{INSTALLDIR}/LilyPond/usr/@/share/lilypond/current/}
4233 @end example
4234
4235 @end itemize
4236
4237
4238 @strong{Installé par un gestionnaire de paquetages ou compilé d'après
4239 les sources}
4240
4241 @code{@var{PREFIX}/share/lilypond/@var{X.Y.Z}/}, où
4242 @var{PREFIX} est déterminé par votre gestionnaire de paquetages ou par
4243 le script @code{configure}, et @var{X.Y.Z} représente le numéro de
4244 version de LilyPond.
4245
4246 @smallspace
4247
4248 Dans ce répertoire, deux sous-répertoires sont particulièrement
4249 intéressants :
4250
4251 @itemize
4252 @item @code{ly/} -- contient les fichiers en format LilyPond
4253 @item @code{scm/} -- contient les fichiers en format Scheme
4254 @end itemize
4255
4256 Commençons par examiner quelques fichiers contenus dans @file{ly/}.
4257 Nous ouvrons @file{ly/property-init.ly} dans un éditeur de texte --
4258 celui que vous avez l'habitude d'utiliser pour les fichiers @file{.ly}
4259 fera très bien l'affaire.  Ce fichier contient les définitions de toutes
4260 les commandes standard prédéfinies de LilyPond, comme @code{\stemUp} et
4261 @code{\slurDotted}.  Vous pouvez constater que ce n'est rien d'autre
4262 que des définitions de variables composées d'un ou plusieurs groupes
4263 de commandes @code{\override}.  Par exemple, @code{\tieDotted}
4264 est défini comme :
4265
4266 @example
4267 tieDotted = @{
4268   \override Tie #'dash-period = #0.75
4269   \override Tie #'dash-fraction = #0.1
4270 @}
4271 @end example
4272
4273 Si vous n'aimez pas les valeurs par défaut, les commandes prédéfinies
4274 peuvent être facilement redéfinies, comme n'importe quelle autre
4275 variable, en tête de votre fichier d'entrée.
4276
4277 Voici les fichiers les plus utiles dans le répertoire @file{ly/} :
4278
4279 @multitable @columnfractions .4 .6
4280 @headitem Nom de fichier
4281   @tab Contenu
4282 @item @file{ly/engraver-init.ly}
4283   @tab Définition des contextes de graveurs
4284 @item @file{ly/paper-defaults-init.ly}
4285   @tab Réglages papier par défaut
4286 @item @file{ly/performer-init.ly}
4287   @tab Définition des contextes d'interprétation
4288 @item @file{ly/property-init.ly}
4289   @tab Définition de toutes les commandes prédéfinies courantes
4290 @item @file{ly/spanner-init.ly}
4291   @tab Définition des commandes prédéfinies pour les bandeaux
4292 @end multitable
4293
4294 Les autres réglages (comme les définitions de commandes @emph{markup})
4295 sont conservés comme fichiers @file{.scm} (Scheme).  Le langage de
4296 programmation Scheme offre une interface programmable dans le
4297 processus interne de LilyPond.  De plus amples explications sur ces
4298 fichiers dépasseraient le cadre de ce manuel dans la mesure où elles
4299 requièrent la connaissance du langage Scheme.  Les utilisateurs qui
4300 souhaiteraient comprendre le fonctionnement de ces fichiers de
4301 configuration doivent être avertis que des connaissances techniques
4302 substantielles et beaucoup de temps sont nécessaires (voir le
4303 @rextend{Tutoriel Scheme}).
4304
4305 Si c'est votre cas, les fichiers Scheme les plus utiles à connaître
4306 sont :
4307
4308 @multitable @columnfractions .4 .6
4309 @headitem Nom de fichier
4310   @tab Contenu
4311 @item @file{scm/auto-beam.scm}
4312   @tab Règles par défaut des ligatures subalternes
4313 @item @file{scm/define-grobs.scm}
4314   @tab Réglages par défaut des propriétés de @emph{grobs}
4315 @item @file{scm/define-markup-commands.scm}
4316   @tab Spécification de toutes les commandes de @emph{markup}
4317 @item @file{scm/midi.scm}
4318   @tab Réglages par défaut pour les sorties MIDI
4319 @item @file{scm/output-lib.scm}
4320   @tab Réglages affectant l'apparence des frets, couleurs, altérations,
4321        barres de mesure, etc.
4322 @item @file{scm/parser-clef.scm}
4323   @tab Définition des clefs prises en charge
4324 @item @file{scm/script.scm}
4325   @tab Réglages par défaut des articulations
4326 @end multitable
4327
4328
4329 @node Retouches avancées avec Scheme
4330 @subsection Retouches avancées avec Scheme
4331 @translationof Advanced tweaks with Scheme
4332
4333 Nous avons vu à quel point le résultat obtenu avec LilyPond peut
4334 être largement personnalisé à l'aide de commandes comme
4335 @code{\override} et @code{\tweak}.  Et pourtant l'utilisation de
4336 Scheme ouvre des possibilités encore plus grandes.
4337 Le code écrit dans le langage de programmation Scheme peut être
4338 intégré directement dans le processus interne de LilyPond.  Bien sûr,
4339 il faut pour cela connaître un minimum de programmation en langage
4340 Scheme.  Pour des explications complètes là-dessus, consultez le
4341 @rextend{Tutoriel Scheme}.
4342
4343 En guise d'illustration -- et ce n'est qu'une possibilité parmi tant
4344 d'autres -- nous allons attribuer à une propriété non pas une valeur
4345 préétablie mais une procédure Scheme qui sera lancée à chaque
4346 utilisation de la propriété par LilyPond.  De cette façon, nous obtenons
4347 un réglage dynamique de la propriété par le simple fait d'invoquer la
4348 procédure.  Dans cet exemple, nous colorons les têtes de notes en
4349 fonction de leur position sur la portée.
4350
4351 @cindex x11-color, exemple d'utilisation de la fonction
4352 @cindex NoteHead, exemple de dérogation
4353 @cindex color, détermination de la propriété par une procédure Scheme
4354
4355 @lilypond[quote,verbatim,ragged-right]
4356 #(define (color-notehead grob)
4357    "Color the notehead according to its position on the staff."
4358    (let ((mod-position (modulo (ly:grob-property grob 'staff-position)
4359                                7)))
4360      (case mod-position
4361        ;;   Return rainbow colors
4362        ((1) (x11-color 'red    ))  ; for C
4363        ((2) (x11-color 'orange ))  ; for D
4364        ((3) (x11-color 'yellow ))  ; for E
4365        ((4) (x11-color 'green  ))  ; for F
4366        ((5) (x11-color 'blue   ))  ; for G
4367        ((6) (x11-color 'purple ))  ; for A
4368        ((0) (x11-color 'violet ))  ; for B
4369        )))
4370
4371 \relative c' {
4372   % Arrange to obtain color from color-notehead procedure
4373   \override NoteHead #'color = #color-notehead
4374   a2 b | c2 d | e2 f | g2 a |
4375 }
4376 @end lilypond
4377
4378 Vous trouverez dans @rextend{Fonctions de rappel} d'autres exemples
4379 d'utilisation de ces interfaces programmables.