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