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