]> git.donarmstrong.com Git - lilypond.git/blob - Documentation/fr/notation/changing-defaults.itely
Doc-fr: updates to LM and NR
[lilypond.git] / Documentation / fr / notation / changing-defaults.itely
1 @c -*- coding: utf-8; mode: texinfo; documentlanguage: fr -*-
2 @ignore
3     Translation of GIT committish: 2a87f1e1f98b76751482cae4474d41aa5e38e37b
4
5     When revising a translation, copy the HEAD committish of the
6     version that you are working on.  For details, see the Contributors'
7     Guide, node Updating translation committishes..
8 @end ignore
9
10 @c \version "2.15.39"
11
12 @c Translators: Valentin Villenave, Jean-Charles Malahieude
13 @c Translation checkers: Gilles Thibault
14
15
16 @node Modification des réglages prédéfinis
17 @chapter Modification des réglages prédéfinis
18 @translationof Changing defaults
19
20 LilyPond est conçu pour engendrer, par défaut, des partitions de la
21 plus haute qualité.  Cependant, on peut parfois avoir à modifier cette
22 mise en forme par défaut.  Celle-ci est réglée par tout un ensemble de
23 @qq{leviers et manettes} plus connus sous le terme de @qq{propriétés},
24 dont ce chapitre ne cherche pas à faire l'inventaire exhaustif -- le
25 chapitre @rlearning{Retouche de partition} du manuel d'initiation vous
26 en propose un aperçu.  Le propos est plutôt ici de mettre en évidence
27 les différents groupes auxquels s'apparentent ces contrôles, et
28 d'expliquer comment trouver le bon levier pour obtenir tel ou tel effet
29 en particulier.
30
31 @cindex Référence des propriétés internes
32
33 Les moyens de contrôle des différents réglages sont décrits dans un
34 document séparé, @rinternalsnamed{Top,la référence des propriétés
35 internes}.  Ce guide répertorie toutes les variables, fonctions et
36 autres options que LilyPond met à votre disposition.  Il est consultable
37 @c leave the @uref as one long line.
38 @uref{http://@/lilypond@/.org/@/doc/@/stable/@/Documentation/@/internals/,en ligne},
39 au format HTML ; il est également inclus dans la documentation
40 fournie avec le logiciel.
41
42 En sous-main, LilyPond se sert du langage Scheme (un dérivé du LISP)
43 comme infrastructure.  Modifier les choix de mise en page revient à
44 pénétrer dans les entrailles du programme, et de ce fait requiert
45 l'emploi du Scheme.  Les fragments de Scheme, dans un fichier
46 @file{.ly}, sont introduits par le caractère @emph{hash} (@code{#}),
47 improprement surnommé @qq{dièse}.
48 @footnote{Le @rextend{Tutoriel Scheme} fournit quelques notions de base
49 pour saisir des nombres, des listes, des chaînes de caractères ou des
50 symboles, en Scheme.}
51
52 @menu
53 * Contextes d'interprétation::
54 * En quoi consiste la référence des propriétés internes::
55 * Modification de propriétés::
56 * Propriétés et contextes utiles::
57 * Retouches avancées::
58 * Utilisation de fonctions musicales::
59 @end menu
60
61
62 @node Contextes d'interprétation
63 @section Contextes d'interprétation
64 @translationof Interpretation contexts
65
66 Cette section traite des contextes.
67
68 @menu
69 * Tout savoir sur les contextes::
70 * Création d'un contexte::
71 * Conservation d'un contexte::
72 * Modification des greffons de contexte::
73 * Modification des réglages par défaut d'un contexte::
74 * Définition de nouveaux contextes::
75 * Ordonnancement des contextes::
76 @end menu
77
78 @seealso
79 Manuel d'initiation :
80 @rlearning{Contextes et graveurs}.
81
82 Fichiers d'initialisation :
83 @file{ly/engraver-init.ly},
84 @file{ly/performer-init.ly}.
85
86 Morceaux choisis :
87 @rlsrnamed{Contexts and engravers, Contextes et graveurs}.
88
89 Référence des propriétés internes :
90 @rinternals{Contexts},
91 @rinternals{Engravers and Performers}.
92
93
94 @node Tout savoir sur les contextes
95 @subsection Tout savoir sur les contextes
96 @translationof Contexts explained
97
98 @ignore
99 @c TODO Rethink and rewrite
100
101 >> > > - list of contexts: my *danger unmaintainable*
102 >> > > alarm just went off.  I'm
103
104 I knew it would... And leaving out some of them is perfectly fine
105 with me.
106 I do think that a list like this, with the main contexts and a
107 brief
108 description of  what they do (perhaps also with a note about what
109 default
110 behavior is associated with each of them, but this may be
111 unmanageable),
112 should be there, and then we could simply list the remaining ones
113 without
114 further explanation and with links to the IR.
115 @end ignore
116
117 @c TODO Improve layout, order and consistency of wording -td
118
119 @c TODO Add introduction which explains contexts in generality  -td
120
121 @c TODO Describe propagation of property values -td
122
123 Les contextes sont hiérarchisés :
124
125 @menu
126 * Score -- le père de tous les contextes::
127 * Contextes de haut niveau -- les systèmes::
128 * Contextes de niveau intermédiaire -- les portées::
129 * Contextes de bas niveau -- les voix::
130 @end menu
131
132
133 @node Score -- le père de tous les contextes
134 @unnumberedsubsubsec Score -- le père de tous les contextes
135 @translationof Score - the master of all contexts
136
137 Il s'agit en l'occurrence du contexte le plus élevé, autrement dit le
138 plus important, en matière de notation.  En effet, c'est au niveau de la
139 partition -- @emph{score} en anglais -- que se gèrent le temps et la
140 tonalité ; c'est donc là qu'il faut s'assurer que les différents
141 éléments, tels les clefs, métriques et armures sont bien répercutés sur
142 toutes les portées.
143
144 Dès lors que LilyPond rencontre un bloc @code{\score @{@dots{}@}}
145 ou @code{\layout @{@dots{}@}}, se crée implicitement un contexte
146 @code{Score}.
147
148
149 @node Contextes de haut niveau -- les systèmes
150 @unnumberedsubsubsec Contextes de haut niveau -- les systèmes
151 @translationof Top-level contexts - staff containers
152
153 De nombreuses partitions sont écrites sur plus d'une portée.  Ces
154 portées peuvent être regroupées de différentes manières.
155
156 @strong{@emph{StaffGroup}}
157
158 Le groupe de portées est attaché par un crochet, et les barres de mesure
159 sont d'un seul tenant, de la première à la dernière portée.  Le
160 @code{StaffGroup} constitue le regroupement le plus simple.
161
162 @strong{@emph{ChoirStaff}}
163
164 Ce regroupement est identique au @code{StaffGroup}, à ceci près que les
165 barres de mesure ne traversent pas l'espace inter-portées.
166
167 @strong{@emph{GrandStaff}}
168
169 Le groupe de portées est attaché par une accolade sur la gauche, et les
170 barres de mesure sont d'un seul tenant.
171
172 @strong{@emph{PianoStaff}}
173
174 Ce regroupement est identique au @code{GrandStaff}, à ceci près que le
175 nom de l'instrument sera directement attaché au système.
176
177
178 @node Contextes de niveau intermédiaire -- les portées
179 @unnumberedsubsubsec Contextes de niveau intermédiaire -- les portées
180 @translationof Intermediate-level contexts - staves
181
182 @strong{@emph{Staff}}
183
184 La portée prend en charge les clefs, barres de mesure, armures et les
185 altérations accidentelles.  Un contexte @code{Staff} peut contenir
186 plusieurs contextes @code{Voice}.
187
188 @strong{@emph{RhythmicStaff}}
189
190 De même nature qu'un @code{Staff}, mais destiné à n'imprimer que du
191 rythme.  Quelle que soit la hauteur, les notes seront imprimées sur une
192 même et unique ligne.
193
194 @strong{@emph{TabStaff}}
195
196 Ce contexte permet de générer des tablatures.  La mise en forme par
197 défaut correspond à une tablature pour guitare, sur six lignes.
198
199 @strong{@emph{DrumStaff}}
200
201 Contexte dévolu tout spécialement aux parties de percussion ; il
202 peut contenir plusieurs @code{DrumVoice}.
203
204 @strong{@emph{VaticanaStaff}}
205
206 Identique au contexte @code{Staff}, à ceci près qu'il est tout
207 particulièrement adapté au grégorien.
208
209 @strong{@emph{MensuralStaff}}
210
211 Identique au contexte @code{Staff}, à ceci près qu'il est tout
212 particulièrement adapté au style mensural de musique ancienne.
213
214
215 @node Contextes de bas niveau -- les voix
216 @unnumberedsubsubsec Contextes de bas niveau -- les voix
217 @translationof Bottom-level contexts - voices
218
219 Les contextes de niveau @qq{voix} initialisent un certain nombre de
220 propriétés et activent les graveurs appropriés.  S'agissant de contextes
221 du plus bas niveau, ils ne sauraient contenir d'autre contexte.
222
223 @strong{@emph{Voice}}
224
225 Correspond à une voix positionnée sur une portée.  Le contexte
226 @code{Voice} s'occupe des indications de nuance, des hampes, des
227 ligatures, des scripts placés au-dessus ou au-dessous de la portée, des
228 différentes liaisons et des silences.  Lorsque plusieurs voix doivent
229 cohabiter sur la même portée, il est indispensable de les instancier
230 explicitement.
231
232 @strong{@emph{VaticanaVoice}}
233
234 Fonctionnant comme le contexte @code{Voice}, il est tout
235 particulièrement destiné à gérer le grégorien.
236
237 @strong{@emph{MensuralVoice}}
238
239 Fonctionnant comme le contexte @code{Voice}, il est tout
240 particulièrement adapté aux musiques anciennes.
241
242 @strong{@emph{Lyrics}}
243
244 Correspond à une voix contenant des paroles.  Le contexte @code{Lyrics}
245 gère l'impression d'une ligne de paroles.
246
247 @strong{@emph{DrumVoice}}
248
249 Contexte de voix dévolu à une portée de percussions.
250
251 @strong{@emph{FiguredBass}}
252
253 Contexte prenant en charge les objets @code{BassFigure} -- la basse
254 chiffrée -- créés à partir de ce qui a été saisi en mode
255 @code{\figuremode}.
256
257 @strong{@emph{TabVoice}}
258
259 Contexte de voix dévolu au contexte @code{TabStaff}, il est
260 habituellement créé implicitement.
261
262 @strong{@emph{CueVoice}}
263
264 Contexte de voix utilisé essentiellement dans le cadre de citations
265 ajoutées à une portée -- voir @ref{Mise en forme d'une citation}.  Il
266 est habituellement créé implicitement.
267
268 @strong{@emph{ChordNames}}
269
270 Permet d'imprimer des noms d'accord.
271
272 @ignore
273 TODO
274
275 Then the following, which I don't know what to do with:
276
277     * GregorianTranscriptionVoice
278     * GregorianTranscriptionStaff
279
280     * FretBoards
281         Engraves fretboards from chords. Not easy... Not
282 documented.
283         There is now some documentation on FretBoards in the NR, under
284          instrument-specific notation -- cds.
285
286     * NoteNames
287
288     * Global
289         Hard coded entry point for LilyPond. Cannot be tuned.
290     * Devnull
291         Silently discards all musical information given to this
292 context.
293
294 @end ignore
295
296
297 @node Création d'un contexte
298 @subsection Création d'un contexte
299 @translationof Creating contexts
300
301 @c TODO more complete descriptions rather than learning style
302
303 Lorsqu'une partition ne comporte qu'une portée avec une seule voix, les
304 contextes sont créés automatiquement.  Dès que la structure s'étoffe, il
305 devient nécessaire de les créer explicitement, en suivant l'une des
306 trois méthodes suivantes :
307
308 @itemize
309
310 @item
311 La commande la plus simple à utiliser est @code{\new} ; c'est aussi
312 la plus courte.  Elle se place juste avant une expression musicale et se
313 libelle ainsi :
314
315 @funindex \new
316 @cindex nouveau contexte
317 @cindex contexte, création
318
319 @example
320 \new @var{type} @var{expression_musicale}
321 @end example
322
323 @noindent
324 où @var{type} est le nom d'un contexte (par ex. @code{Staff} ou
325 @code{Voice}).  Cette commande crée un nouveau contexte et y interprète
326 le contenu de l'@var{expression_musicale}.
327
328 C'est ce qui se passe lorsqu'une partition comporte plusieurs portées :
329 chaque partie qui doit apparaître sur une portée spécifique est précédée
330 d'un @code{\new Staff}.
331
332 @lilypond[quote,verbatim,relative=2,ragged-right]
333 <<
334   \new Staff { c4 c }
335   \new Staff { d4 d }
336 >>
337 @end lilypond
338
339 La commande @code{\new} vous permet aussi d'attribuer un nom au
340 contexte que vous créez.
341
342 @example
343 \new @var{type} = @var{nom} @var{musique}
344 @end example
345 Le nom que vous spécifiez ne pourra être utilisé que s'il n'a pas déjà
346 été attribué à un autre contexte.
347
348 @funindex \context
349 @item
350 Tout comme @code{\new}, la commande @code{\context} affectera une
351 expression musicale à un objet contextuel ; elle lui attribuera de
352 surcroît un nom.  La commande @code{\context} s'emploie de la façon
353 suivante :
354
355 @example
356 \context @var{type} = @var{nom} @var{musique}
357 @end example
358
359 LilyPond va dans un premier temps vérifier l'existence d'un contexte du
360 type @var{type} appelé @var{nom}.  En l'absence d'un tel contexte,
361 LilyPond crée un nouveau contexte du nom que vous avez spécifié.  Cette
362 procédure est tout à fait pertinente lorsque vous faites appel à ce
363 contexte particulier par la suite.  Prenons le cas d'un chant :
364 nous commençons par nommer la ligne mélodique,
365
366 @example
367 \context Voice = "@b{tenor}" @var{musique}
368 @end example
369
370 @noindent
371 de telle sorte que le texte s'aligne correctement sur les notes :
372
373 @example
374 \new Lyrics \lyricsto "@b{tenor}" @var{paroles}
375 @end example
376
377 @noindent
378
379 L'une des autres utilisations de contextes explicitement nommés consiste
380 à fusionner deux expressions musicales dans un même contexte.  Dans
381 l'exemple qui suit, notes et articulations sont saisies indépendamment.
382
383 @example
384 music = @{ c4 c4 @}
385 arts = @{ s4-. s4-> @}
386 @end example
387
388 Elles sont ensuite fusionnées par affectation au même contexte
389 @code{Voice} :
390
391 @example
392 <<
393   \new Staff \context Voice = "A" \music
394   \context Voice = "A" \arts
395 >>
396 @end example
397 @lilypond[quote,ragged-right]
398 music = { c4 c4 }
399 arts = { s4-. s4-> }
400 \relative c'' <<
401   \new Staff \context Voice = "A" \music
402   \context Voice = "A" \arts
403 >>
404 @end lilypond
405
406 Grâce à ce mécanisme, vous pouvez tout à fait générer une version
407 @qq{Urtext} (édition originale) et optionnellement ajouter distinctement
408 des articulations à ces mêmes notes.
409
410 @cindex création de contextes
411
412 @item
413 Voici une troisième manière de créer un contexte :
414
415 @example
416 \context @var{type} @var{musique}
417 @end example
418
419 @noindent
420 Très comparable à une déclaration @code{\context = @var{nom}},
421 cette méthode permet de s'affranchir du type de contexte.
422
423 Cette variante s'utilise lorsque les expression musicales peuvent être
424 interprétées à différents niveaux, comme par exemple lorsque intervient
425 la commande @code{\applyOutput} -- pour de plus amples détails, voir
426 @rextend{Application d'une fonction à tous les objets de mise en forme}.
427 En l'absence de @code{\context} explicite, LilyPond considère qu'il
428 s'agit de @code{Voice}.
429
430 @example
431 \applyOutput #'@var{contexte} #@var{fonction}   % s'applique à Voice
432 @end example
433
434 Vous devrez respecter ces formulations si la fonction doit
435 s'interpréter au niveau @code{Score} ou @code{Staff} :
436
437 @example
438 \applyOutput #'Score #@var{fonction}
439 \applyOutput #'Staff #@var{fonction}
440 @end example
441
442 @end itemize
443
444
445 @node Conservation d'un contexte
446 @subsection Conservation d'un contexte
447 @translationof Keeping contexts alive
448
449 @cindex contextes, maintien actif
450 @cindex contextes, durée de vie
451
452 En règle générale, un contexte disparaît dès qu'il n'y a plus rien à
453 faire.  Autrement dit, un contexte @code{Voice} disparaît dès après le
454 dernier événement qu'il contient, et un contexte @code{Staff} dès que
455 les contextes @code{Voice} qu'il supporte ne contiennent plus rien.
456 Ceci peut avoir des conséquences néfastes lorsqu'il est fait référence à
457 un contexte alors disparu, comme dans le cas d'un changement de portée
458 introduit par la commande @code{\change}, l'association de paroles à
459 l'aide de la commande @code{\lyricsto} ou si des événements surviennent
460 à nouveau pour ce contexte précédemment actif.
461
462 Une exception cependant à cette règle : en présence d'un contexte
463 @code{Staff} ou dans une construction @code{<<...>>}, un seul des
464 contextes @code{Voice} inclus restera actif jusqu'à la fin du contexte
465 @code{Staff} ou de la construction @code{<<...>>}, y compris s'il y
466 a des @qq{trous}.  Le contexte alors persistant sera le premier
467 rencontré dans la construction @code{@{...@}} sans tenir compte des
468 éventuels @code{<<...>>} qu'elle pourrait contenir.
469
470 Un contexte restera actif dès lors qu'il s'y passera toujours quelque
471 chose.  Un contexte @code{Staff} restera actif si l'une des voix qu'il
472 supporte est toujours active.  L'un des moyens de s'en assurer
473 consiste à ajouter des silences invisibles parallèlement à la musique.
474 Vous devrez les ajouter dans tous les contextes @code{Voice} qui doivent
475 rester actifs.  Nous vous conseillons, lorsque plusieurs voix
476 interviennent de manière sporadique, de toutes les maintenir actives
477 plutôt que de vous fier aux exceptions mentionnées plus haut.
478
479 Dans l'exemple suivant, les deux voix A et B sont maintenues actives
480 jusqu'à la fin du morceau :
481
482 @lilypond[quote,verbatim]
483 musicA = \relative c'' { d4 d d d }
484 musicB = \relative c'' { g4 g g g }
485 keepVoicesAlive = {
486   <<
487     \new Voice = "A" { s1*5 }  % Keep Voice "A" alive for 5 bars
488     \new Voice = "B" { s1*5 }  % Keep Voice "B" alive for 5 bars
489   >>
490 }
491
492 music = {
493   \context Voice = "A" {
494     \voiceOneStyle
495     \musicA
496   }
497   \context Voice = "B" {
498     \voiceTwoStyle
499     \musicB
500   }
501   \context Voice = "A" { \musicA }
502   \context Voice = "B" { \musicB }
503   \context Voice = "A" { \musicA }
504 }
505
506 \score {
507   \new Staff <<
508     \keepVoicesAlive
509     \music
510   >>
511 }
512 @end lilypond
513
514 @cindex paroles, alignement sur une mélodie épisodique
515
516 L'exemple suivant illustre la manière d'écrire selon cette méthode une
517 mélodie discontinue à laquelle se rattachent des paroles.  Dans la
518 réalité, mélodie et accompagnement feraient l'objet de portées séparées.
519
520 @lilypond[quote,verbatim]
521 melody = \relative c'' { a4 a a a }
522 accompaniment = \relative c' { d4 d d d }
523 words = \lyricmode { These words fol -- low the mel -- o -- dy }
524 \score {
525   <<
526     \new Staff = "music" {
527       <<
528         \new Voice = "melody" {
529           \voiceOne
530           s1*4  % Keep Voice "melody" alive for 4 bars
531         }
532         {
533           \new Voice = "accompaniment" {
534             \voiceTwo
535             \accompaniment
536           }
537           <<
538             \context Voice = "melody" { \melody }
539             \context Voice = "accompaniment" { \accompaniment }
540           >>
541           \context Voice = "accompaniment" { \accompaniment }
542           <<
543             \context Voice = "melody" { \melody }
544             \context Voice = "accompaniment" { \accompaniment }
545           >>
546         }
547       >>
548     }
549     \new Lyrics \with { alignAboveContext = #"music" }
550     \lyricsto "melody" { \words }
551   >>
552 }
553 @end lilypond
554
555 Une autre méthode, qui s'avère plus productive dans nombre de cas,
556 consiste à maintenir active la ligne mélodique en y insérant des
557 silences invisibles tout au long de l'accompagnement :
558
559 @lilypond[quote,verbatim]
560 melody = \relative c'' {
561   s1  % skip a bar
562   a4 a a a
563   s1  % skip a bar
564   a4 a a a
565 }
566 accompaniment = \relative c' {
567   d4 d d d
568   d4 d d d
569   d4 d d d
570   d4 d d d
571 }
572 words = \lyricmode { These words fol -- low the mel -- o -- dy }
573
574 \score {
575   <<
576     \new Staff = "music" {
577       <<
578         \new Voice = "melody" {
579           \voiceOne
580           \melody
581         }
582         \new Voice = "accompaniment" {
583           \voiceTwo
584           \accompaniment
585         }
586       >>
587     }
588     \new Lyrics \with { alignAboveContext = #"music" }
589     \lyricsto "melody" { \words }
590   >>
591 }
592 @end lilypond
593
594
595 @node Modification des greffons de contexte
596 @subsection Modification des greffons de contexte
597 @translationof Modifying context plug-ins
598
599 @c TODO Should this be Modifying engravers or Modifying contexts?
600
601 Les contextes, tels que @code{Score} ou @code{Staff}, ne contiennent
602 pas que des propriétés ; ils mettent également en œuvre certains
603 sous-programmes (@emph{plug-ins} pour employer le terme consacré) nommés
604 @qq{graveurs} (@emph{engravers} pour reprendre le terme anglais).
605 Ces sous-programmes sont chargés de créer les différents éléments de
606 notation : on trouve ainsi dans le contexte @code{Voice} un graveur
607 @code{Note_heads_engraver}, chargé des têtes de notes et, dans le
608 contexte @code{Staff}, un graveur @code{Key_engraver}, chargé de
609 l'armure.
610
611 Vous trouverez une description exhaustive de chaque graveur dans
612 @ifhtml
613 @rinternals{Engravers and Performers}.
614 @end ifhtml
615 @ifnothtml
616 Référence des propriétés internes @expansion{} Translation @expansion{} Engravers.
617 @end ifnothtml
618 Chaque contexte mentionné dans
619 @ifhtml
620 @rinternals{Contexts}
621 @end ifhtml
622 @ifnothtml
623 Référence des propriétés internes @expansion{} Translation @expansion{} Context.
624 @end ifnothtml
625 répertorie les graveurs mis en œuvre.
626
627 On peut faire, au moyen de ces graveurs, sa propre @qq{cuisine}, en
628 modifiant les contextes à volonté.
629
630 Lorsqu'un contexte est créé, par la commande @code{\new} ou
631 @code{\context}, on peut y adjoindre un bloc @code{\with} (en anglais
632 @qq{avec}), dans lequel il est possible d'ajouter (commande
633 @code{\consists}) ou d'enlever (commande @code{\remove}) des
634 graveurs :
635
636 @funindex \with
637
638 @example
639 \new @var{contexte} \with @{
640   \consists @dots{}
641   \consists @dots{}
642   \remove @dots{}
643   \remove @dots{}
644   @emph{etc.}
645 @}
646 @{
647   @emph{..musique..}
648 @}
649 @end example
650
651 @noindent
652 Ici les points de suspension @dots{} devront être remplacés par le nom
653 des graveurs désirés.  Dans l'exemple suivant, on enlève du contexte
654 @code{Staff}, la métrique (graveur @code{Time_signature_engraver})
655 et la clef (graveur @code{Clef_engraver}).
656
657 @lilypond[quote,relative=1,verbatim]
658 <<
659   \new Staff {
660     f2 g
661   }
662   \new Staff \with {
663      \remove "Time_signature_engraver"
664      \remove "Clef_engraver"
665   } {
666     f2 g2
667   }
668 >>
669 @end lilypond
670
671 La clef et le chiffre de mesure ont disparu de la deuxième portée.
672 C'est une méthode quelque peu radicale, puisqu'elle affectera toute la
673 portée jusqu'à la fin de la partition.  L'espacement s'en trouve
674 également affecté, ce qui peut être ou non l'effet recherché.  Une
675 méthode plus sophistiquée aurait été de rendre ces objets transparents
676 (voir @rlearning{Visibilité et couleur des objets}).
677
678 Dans l'exemple suivant, voici une mise en pratique plus utile.  En temps
679 normal, les barres de mesure et la métrique sont synchronisées
680 verticalement dans toute la partition.  Les graveurs qui en sont
681 responsables se nomment @code{Timing_translator} et
682 @code{Default_bar_line_engraver}.  En les enlevant du contexte
683 @code{Score} pour les attribuer au contexte @code{Staff}, chaque portée
684 peut désormais avoir sa propre métrique.
685
686 @cindex polymétrique, partition
687 @cindex chiffres de mesure multiples
688
689 @lilypond[quote,verbatim]
690 \score {
691   <<
692     \new Staff \with {
693       \consists "Timing_translator"
694       \consists "Default_bar_line_engraver"
695     } {
696         \time 3/4
697         c4 c c c c c
698     }
699   \new Staff \with {
700     \consists "Timing_translator"
701     \consists "Default_bar_line_engraver"
702   } {
703       \time 2/4
704       c4 c c c c c
705   }
706 >>
707 \layout {
708   \context {
709     \Score
710     \remove "Timing_translator"
711     \remove "Default_bar_line_engraver"
712     }
713   }
714 }
715 @end lilypond
716
717 @knownissues
718
719 En règle générale, l'ordre dans lequel les graveurs sont mentionnés
720 importe peu.  Il se peut toutefois qu'un graveur écrive une propriété
721 qui sera interprétée par un autre, ou qu'un graveur crée un objet
722 graphique qui sera traité par un autre ; l'ordre d'apparition de
723 ces graveurs prendra alors tout son importance.
724
725 Pour information, les ordonnancements suivants sont importants :
726 le @code{Bar_engraver} devrait toujours être le premier ; le
727 @code{New_fingering_engraver} doit toujours précéder le
728 @code{Script_column_engraver}.  Nous vous conseillons, pour les autres,
729 de vérifier les éventuelles dépendances.
730
731
732
733 @node Modification des réglages par défaut d'un contexte
734 @subsection Modification des réglages par défaut d'un contexte
735 @translationof Changing context default settings
736
737 La personnalisation des réglages par défaut d'un contexte, qu'il
738 s'agisse de @code{Score}, @code{Staff} ou @code{Voice}, peut se réaliser
739 indépendamment de la musique dans un bloc @code{\layout} -- placé dans
740 le bloc @code{\score} auquel ces modifications doivent s'appliquer -- au
741 moyen de la commande @code{\context}.
742
743 Point n'est besoin d'utiliser la commande @code{\set @var{contexte}}
744 lorsque les réglages par défaut d'un contexte sont ainsi modifiés :
745
746 @c KEEP LY
747 @lilypond[quote,verbatim]
748 \score {
749   \relative c'' {
750     a4^"Petite police, hampes épaisses, sans métrique" a a a
751     a a a a
752   }
753   \layout {
754     \context {
755       \Staff
756       fontSize = #-4
757       \override Stem #'thickness = #4.0
758       \remove "Time_signature_engraver"
759     }
760   }
761 }
762 @end lilypond
763
764 Le raccourci @code{\Staff} invoque les définitions inhérentes au
765 contexte @code{Staff}, de façon à ce qu'elles puissent être modifiées.
766 Ces nouvelles spécifications affecteront toutes les portées (tous les
767 contextes @code{Staff}) de ce bloc @code{\score}.
768
769 Les adaptations peuvent aussi bien se faire au niveau du contexte
770 @code{Score} qu'au niveau de tous les contextes @code{Voice}.
771
772 Il est possible de stocker des modifications de contexte dans un
773 identificateur. Sa définition devra être précédée de l'instruction
774 @code{\with}.
775
776 @lilypond[quote,verbatim]
777 blubb = \with {
778   fontSize = #-4
779   \override Stem #'thickness = #4.0
780   \remove "Time_signature_engraver"
781 }
782
783 bla = \with {
784   fontSize = #3
785   \override Stem #'thickness = #-2.0
786 }
787
788 melody = \relative c'' {
789   a4 a a a |
790   a4 a a a |
791 }
792
793 \score {
794   <<
795     \new Staff <<
796       \melody
797       s1*0^"Small, thicker stems, no time signature"
798     >>
799     \new Staff \bla <<
800       \melody
801       s1*0^"Different"
802     >>
803   >>
804   \layout {
805     \context {
806       \Staff
807       \blubb
808     }
809   }
810 }
811 @end lilypond
812
813 @c TODO: add \with in here.
814
815
816 @node Définition de nouveaux contextes
817 @subsection Définition de nouveaux contextes
818 @translationof Defining new contexts
819
820 @cindex contexte, création
821 @cindex graveur, affectation à un contexte
822
823 @funindex \alias
824 @funindex alias
825 @funindex \name
826 @funindex name
827 @funindex \type
828 @funindex type
829 @funindex \consists
830 @funindex consists
831 @funindex \accepts
832 @funindex accepts
833 @funindex \denies
834 @funindex denies
835
836 Les contextes tels que @code{Staff} ou @code{Voice} sont faits
837 de briques de construction empilées.  En combinant divers graveurs,
838 il est possible de créer de nouveaux types de contextes.
839
840 Dans l'exemple suivant on construit, de zéro, un nouveau contexte très
841 semblable à @code{Voice}, mais qui n'imprime que des têtes de notes en
842 forme de barre oblique au centre de la portée.  Un tel contexte peut
843 servir, par exemple, à indiquer un passage improvisé dans un morceau de
844 jazz.
845
846 @c KEEP LY
847 @lilypond[quote,ragged-right]
848 \layout { \context {
849   \name ImproVoice
850   \type "Engraver_group"
851   \consists "Note_heads_engraver"
852   \consists "Rhythmic_column_engraver"
853   \consists "Text_engraver"
854   \consists Pitch_squash_engraver
855   squashedPosition = #0
856   \override NoteHead #'style = #'slash
857   \override Stem #'transparent = ##t
858   \override Flag #'transparent = ##t
859   \alias Voice
860 }
861 \context { \Staff
862   \accepts "ImproVoice"
863 }}
864
865 \relative c'' {
866   a4 d8 bes8 \new ImproVoice { c4^"ad lib" c
867    c4 c^"dévêtez-vous" c_"tout en jouant :)" c }
868   a1
869 }
870 @end lilypond
871
872 On a rassemblé les réglages dans un bloc @code{\context}, lui-même placé
873 dans le bloc @code{\layout} :
874
875 @example
876 \layout @{
877   \context @{
878     @dots{}
879   @}
880 @}
881 @end example
882
883 En lieu et place des points (@dots{}), voici les éléments à saisir :
884
885 Tout d'abord, il convient de donner un nom à notre nouveau contexte :
886
887 @example
888 \name ImproVoice
889 @end example
890
891 Comme il est très semblable à @code{Voice}, nous souhaitons que
892 toutes les commandes associées au @code{Voice} déjà existant restent
893 valables.  D'où nécessité de la commande @code{\alias}, qui va
894 l'associer au contexte @code{Voice} :
895
896 @example
897 \alias Voice
898 @end example
899
900 Ce contexte doit pouvoir imprimer des notes et des indications
901 textuelles ; on ajoute donc les graveurs appropriés :
902
903 @example
904 \consists Note_heads_engraver
905 \consists Text_engraver
906 @end example
907
908 Cependant, on veut que les notes s'affichent toutes au centre de
909 la portée :
910
911 @example
912 \consists Pitch_squash_engraver
913 squashedPosition = #0
914 @end example
915
916 Le graveur @rinternals{Pitch_squash_engraver} intercepte les notes
917 créées par le @rinternals{Note_heads_engraver}, et les @qq{écrase} pour
918 qu'elles aient toutes la même position verticale, définie par
919 @code{squashedPosition} : ici il s'agit de la valeur @code{0},
920 c'est-à-dire la ligne du milieu.
921
922 On veut que les notes aient la forme d'une barre oblique, sans
923 aucune hampe :
924
925 @example
926 \override NoteHead #'style = #'slash
927 \override Stem #'transparent = ##t
928 \override Flag #'transparent = ##t
929 @end example
930
931 Afin que tous ces graveurs puissent travailler de concert, on leur
932 adjoint un sous-programme spécial, introduit par la commande
933 @code{\type} : il s'agit de @code{Engraver_group},
934
935 @example
936 \type "Engraver_group"
937 @end example
938
939 Récapitulons ; on se retrouve avec le bloc suivant :
940
941 @example
942 \context @{
943   \name ImproVoice
944   \type "Engraver_group"
945   \consists "Note_heads_engraver"
946   \consists "Text_engraver"
947   \consists Pitch_squash_engraver
948   squashedPosition = #0
949   \override NoteHead #'style = #'slash
950   \override Stem #'transparent = ##t
951   \override Flag #'transparent = ##t
952   \alias Voice
953 @}
954 @end example
955
956 @funindex \accepts
957
958 Ce n'est pas tout.  En effet, on veut intégrer le nouveau contexte
959 @code{ImproVoice} dans la hiérarchie des contextes.  Tout comme le
960 contexte @code{Voice}, sa place est au sein du contexte @code{Staff}.
961 Nous allons donc modifier le contexte @code{Staff},
962 au moyen de la commande @code{\accepts} :
963
964 @example
965 \context @{
966   \Staff
967   \accepts ImproVoice
968 @}
969 @end example
970
971 @funindex \denies
972
973 Le contraire de @code{\accepts} est @code{\denies} ; il est parfois
974 utile lorsque l'on recycle des définitions de contextes déjà existantes.
975
976 Enfin, tout cela doit prendre place dans le bloc @code{\layout},
977 comme ici :
978
979 @example
980 \layout @{
981   \context @{
982     \name ImproVoice
983     @dots{}
984   @}
985   \context @{
986     \Staff
987     \accepts "ImproVoice"
988   @}
989 @}
990 @end example
991
992 On peut alors saisir la musique, comme dans l'exemple plus haut :
993
994 @example
995 \relative c'' @{
996   a4 d8 bes8
997   \new ImproVoice @{
998     c4^"ad lib" c
999     c4 c^"dévêtez-vous"
1000     c c_"tout en jouant :)"
1001   @}
1002   a1
1003 @}
1004 @end example
1005
1006
1007 @node Ordonnancement des contextes
1008 @subsection Ordonnancement des contextes
1009 @translationof Context layout order
1010
1011 @cindex contextes, ordonnancement
1012
1013 @funindex \accepts
1014 @funindex \denies
1015
1016 Les contextes viennent en principe se positionner selon leur ordre
1017 d'apparition dans le fichier source.  Lorsque plusieurs contextes sont
1018 imbriqués, le contexte englobant supportera les différents contextes
1019 mentionnés dans le fichier source, à la stricte condition qu'ils soient
1020 dûment @qq{agréés}.  Les contextes imbriqués qui ne font pas partie de
1021 la @qq{liste d'agréments} du contexte englobant se retrouveront en
1022 dessous de celui-ci au lieu d'y être imbriqués.
1023
1024 La liste des @qq{agréments} d'un contexte se gère à l'aide des
1025 instructions @code{\accepts} et @code{\denies} -- @code{\accepts} pour
1026 ajouter un contexte à la liste, et @code{\denies} pour retirer
1027 l'agrément.  Il est par exemple peu conventionnel que les accords nommés
1028 apparaissent dans un contexte @code{Staff} ; autrement dit, le
1029 contexte @code{ChordNames} ne fait pas partie de la @qq{liste
1030 d'agréments} du contexte @code{Staff} par défaut.  Néanmoins, et s'il
1031 devait en être ainsi, vous pourriez le spécifier.
1032
1033 @lilypond[verbatim,quote]
1034 \score {
1035   \new Staff {
1036     c' d' e' f'
1037     \chords { d1:m7 b1:min7.5- }
1038   }
1039 }
1040 @end lilypond
1041
1042 @lilypond[verbatim,quote]
1043 \score {
1044   \new Staff {
1045     c' d' e' f'
1046     \chords { d1:m7 b1:min7.5- }
1047   }
1048   \layout {
1049     \context {
1050       \Staff
1051       \accepts "ChordNames"
1052     }
1053   }
1054 }
1055 @end lilypond
1056
1057 L'instruction @code{\denies} permet, lorsqu'un nouveau contexte reprend
1058 les définitions d'un contexte existant, d'en ajuster les composantes.
1059 C'est par exemple le cas du contexte @code{VaticanaStaff}, réplique du
1060 contexte @code{Staff} au sein duquel le contexte @code{VaticanaVoice} se
1061 substitue au contexte @code{Voice} dans la @qq{liste d'agrément}.
1062
1063 Gardez à l'esprit que, face à une instruction qui ne s'appliquerait à
1064 aucun contexte déjà existant, LilyPond créera un nouveau contexte
1065 implicite.  Ceci peut engendrer une nouvelle portée ou une autre
1066 partition.
1067
1068 @seealso
1069 Manuel d'utilisation :
1070 @rprogram{Apparition d'une portée supplémentaire}.
1071
1072 Fichiers d'initialisation :
1073 @file{ly/engraver-init.ly}.
1074
1075
1076 @node En quoi consiste la référence des propriétés internes
1077 @section En quoi consiste la référence des propriétés internes
1078 @translationof Explaining the Internals Reference
1079
1080 @menu
1081 * Navigation dans les références du programme::
1082 * Interfaces de rendu::
1083 * Détermination de la propriété d'un objet graphique (grob)::
1084 * Conventions de nommage::
1085 @end menu
1086
1087
1088 @node Navigation dans les références du programme
1089 @subsection Navigation dans les références du programme
1090 @translationof Navigating the program reference
1091
1092 @c TODO remove this (it's in the LM)
1093 @c Replace with more factual directions
1094
1095 Comment, par exemple, déplacer le doigté dans le fragment suivant ?
1096
1097 @lilypond[quote,relative=2,verbatim]
1098 c-2
1099 \stemUp
1100 f
1101 @end lilypond
1102
1103 Sur la page de la documentation relative aux doigtés, c'est-à-dire
1104 @ref{Doigtés}, se trouve l'indication suivante :
1105
1106 @quotation
1107 @strong{Voir aussi}
1108
1109 Référence des propriétés internes : @rinternals{Fingering}.
1110 @end quotation
1111
1112 @c  outdated info; probably will delete.
1113 @ignore
1114 This fragment points to two parts of the program reference: a page
1115 on @code{FingerEvent} and one on @code{Fingering}.
1116
1117 The page on @code{FingerEvent} describes the properties of the music
1118 expression for the input @code{-2}.  The page contains many links
1119 forward.  For example, it says
1120
1121 @quotation
1122 Accepted by: @rinternals{Fingering_engraver},
1123 @end quotation
1124
1125 @noindent
1126 That link brings us to the documentation for the Engraver, the
1127 plug-in, which says
1128
1129 @quotation
1130 This engraver creates the following layout objects: @rinternals{Fingering}.
1131 @end quotation
1132
1133 In other words, once the @code{FingerEvent}s are interpreted, the
1134 @code{Fingering_engraver} plug-in will process them.
1135 @end ignore
1136
1137 @ignore
1138 @c  I can't figure out what this is supposed to mean.  -gp
1139
1140 The @code{Fingering_engraver} is also listed to create
1141 @rinternals{Fingering} objects,
1142
1143 @c  old info?  it doesn't make any sense to me with our current docs.
1144 This is also the
1145 second bit of information listed under @b{See also} in the Notation
1146 manual.
1147 @end ignore
1148
1149 @ifnothtml
1150 Ladite référence est disponible au format HTML, ce qui rend la
1151 navigation bien plus aisée.  Il est possible soit de la lire en ligne,
1152 soit de la télécharger dans ce format.  La démarche présentée ici sera
1153 plus difficile à comprendre dans un document au format PDF.
1154 @end ifnothtml
1155
1156 Suivons le lien @rinternals{Fingering}.  En haut de la nouvelle page,
1157 on peut lire
1158
1159 @quotation
1160 Fingering objects are created by: @rinternals{Fingering_engraver} and
1161 @rinternals{New_fingering_engraver}.
1162 @end quotation
1163
1164 En d'autres termes, @emph{Les indications de doigtés}
1165 (@code{Fingering} en anglais) @emph{sont créées par les graveurs
1166 @rinternals{Fingering_engraver} et @rinternals{New_fingering_engraver}.}
1167
1168 En suivant derechef les liens propres à la référence du programme, on
1169 suit en fait le cheminement qui aboutit à la création de la partition :
1170
1171 @itemize
1172
1173 @item @rinternals{Fingering}:
1174 @rinternals{Fingering} objects are created by:
1175 @rinternals{Fingering_engraver}
1176
1177 @item @rinternals{Fingering_engraver}:
1178 Music types accepted: @rinternals{fingering-event}
1179
1180 @item @rinternals{fingering-event}:
1181 Music event type @code{fingering-event} is in Music expressions named
1182 @rinternals{FingeringEvent}
1183 @end itemize
1184
1185 Ce cheminement se produit, bien sûr, en sens inverse : nous sommes
1186 ici partis du résultat, et avons abouti aux évènements (en anglais
1187 @emph{Events}) engendrés par le fichier d'entrée.  L'inverse est
1188 également possible : on peut partir d'un évènement, et suivre le
1189 cheminement de LilyPond qui aboutit à la création d'un ou plusieurs
1190 objets graphiques.
1191
1192 La référence des propriétés internes peut également se parcourir comme
1193 un document normal. On y trouve des chapitres tels que
1194 @ifhtml
1195 @rinternals{Music definitions},
1196 @end ifhtml
1197 @ifnothtml
1198 @code{Music definitions}
1199 @end ifnothtml
1200 @rinternals{Translation}, ou encore @rinternals{Backend}.  Chaque
1201 chapitre recense toutes les définitions employées, et les propriétés
1202 sujettes à ajustements.
1203
1204 @c -- what about adding a link to the glossary here ? -vv
1205 La Référence des propriétés internes n'est pas traduite en français --
1206 notamment du fait qu'elle est en évolution constante, tout comme
1207 LilyPond.  En revanche, les termes musicaux font l'objet d'un
1208 @rglosnamed{Top, glossaire} fort utile pour les utilisateurs
1209 francophones.
1210
1211
1212 @node Interfaces de rendu
1213 @subsection Interfaces de rendu
1214 @translationof Layout interfaces
1215
1216 @cindex interfaces de rendu
1217 @cindex rendu, interfaces de
1218 @cindex objets graphiques
1219
1220 Tous les éléments de notation sont considérés comme des objets
1221 graphiques (en anglais @emph{Graphical Object}, d'où le diminutif
1222 @emph{Grob}).  Chaque objet est doté d'un certain nombre de propriétés
1223 (l'épaisseur du trait, l'orientation etc.), et lié à d'autres objets.
1224 Le fonctionnement de ces objets est décrit en détail dans
1225 @rinternals{grob-interface}.
1226
1227 Prenons l'exemple des doigtés (en anglais @emph{Fingering}).  La page
1228 @code{Fingering} de la Référence des propriétés internes établit une
1229 liste de définitions propres à ce type d'objet :
1230
1231 @quotation
1232 @code{padding} (dimension, in staff space):
1233
1234 @code{0.5}
1235 @end quotation
1236
1237 @noindent
1238 Ce qui signifie que les doigtés doivent être maintenus à une certaine
1239 distance (@emph{padding}) des notes : 0,5 unités @emph{staff-space}
1240 (espace de portée).
1241
1242 Chaque objet peut avoir plusieurs attributs, en tant qu'élément
1243 typographique ou musical.  Ainsi, un doigté (objet @emph{Fingering})
1244 possède les attributs suivants :
1245
1246 @itemize
1247 @item
1248 Sa taille ne dépend pas de l'espacement horizontal, contrairement aux
1249 liaisons ou ligatures.
1250
1251 @item
1252 C'est du texte -- un texte vraiment court, certes.
1253
1254 @item
1255 Ce texte est imprimé au moyen d'une fonte, contrairement aux liaisons ou
1256 ligatures.
1257
1258 @item
1259 Sur l'axe horizontal, le centre de ce symbole doit être aligné avec le
1260 centre de la note.
1261
1262 @item
1263 Sur l'axe vertical, le symbole doit être proche de la note et de la
1264 portée.
1265
1266 @item
1267 Sur l'axe vertical encore, il doit également s'ordonner avec les
1268 éventuels autres symboles, ponctuations ou éléments textuels.
1269 @end itemize
1270
1271 Faire appliquer ces différents attributs est le rôle des
1272 @emph{interfaces}, que l'on trouve en bas de la page
1273 @rinternals{Fingering}.
1274
1275 @quotation
1276 This object supports the following interfaces:
1277 @rinternals{item-interface},
1278 @rinternals{self-alignment-interface},
1279 @rinternals{side-position-interface}, @rinternals{text-interface},
1280 @rinternals{text-script-interface}, @rinternals{font-interface},
1281 @rinternals{finger-interface}, and @rinternals{grob-interface}.
1282 @end quotation
1283
1284 @noindent
1285 En français,
1286
1287 @quotation
1288 Cet objet admet les interfaces suivantes :
1289 @end quotation
1290
1291 Suit la liste des interfaces en question, présentées comme autant de
1292 liens qui conduisent aux pages dédiées à chacune d'entre elles.
1293 Chaque interface est dotée d'un certain nombre de propriétés, dont
1294 certaines peuvent être modifiées, et d'autres non (les @emph{Internal
1295 properties}, ou propriétés internes).
1296
1297 Pour aller encore plus loin, plutôt que de simplement parler de l'objet
1298 @code{Fingering}, ce qui ne nous avance pas à grand chose, on peut aller
1299 explorer son âme même, dans les fichiers source de LilyPond (voir
1300 @rlearning{Autres sources de documentation}), en l'occurrence le fichier
1301 @file{scm/define-grobs.scm} :
1302
1303 @example
1304 (Fingering
1305   . ((padding . 0.5)
1306      (avoid-slur . around)
1307      (slur-padding . 0.2)
1308      (staff-padding . 0.5)
1309      (self-alignment-X . 0)
1310      (self-alignment-Y . 0)
1311      (script-priority . 100)
1312      (stencil . ,ly:text-interface::print)
1313      (direction . ,ly:script-interface::calc-direction)
1314      (font-encoding . fetaText)
1315      (font-size . -5)           ; don't overlap when next to heads.
1316      (meta . ((class . Item)
1317      (interfaces . (finger-interface
1318                     font-interface
1319                     text-script-interface
1320                     text-interface
1321                     side-position-interface
1322                     self-alignment-interface
1323                     item-interface))))))
1324 @end example
1325
1326 @noindent
1327 @dots{}où l'on découvre que l'objet @code{Fingering} n'est rien de plus
1328 qu'un amas de variables et de réglages.  La page de la Référence des
1329 propriétés internes est en fait directement engendrée par cette
1330 définition.
1331
1332
1333 @node Détermination de la propriété d'un objet graphique (grob)
1334 @subsection Détermination de la propriété d'un objet graphique (grob)
1335 @translationof Determining the grob property
1336
1337 @c TODO remove this (it's in the LM)
1338 @c Replace with more factual directions
1339
1340 Nous voulions changer la position du chiffre @b{2} dans le fragment
1341 suivant :
1342
1343 @lilypond[quote,relative=2,verbatim]
1344 c-2
1345 \stemUp
1346 f
1347 @end lilypond
1348
1349 Dans la mesure où le @b{2} est placé, verticalement, à proximité de la
1350 note qui lui correspond, nous allons devoir trouver l'interface en
1351 charge de ce placement, qui se trouve être
1352 @code{side-position-interface}.  Sur la page de cette interface, on peut
1353 lire :
1354
1355 @quotation
1356 @code{side-position-interface}
1357
1358 Position a victim object (this one) next to other objects (the
1359 support).  The property @code{direction} signifies where to put the
1360 victim object relative to the support (left or right, up or down?)
1361 @end quotation
1362
1363 @noindent
1364 Ce qui signifie
1365 @quotation
1366 @code{side-position-interface}
1367
1368 Placer l'objet affecté à proximité d'autres objets.  La propriété
1369 @code{direction} indique où positionner l'objet (à droite ou à gauche,
1370 en haut ou en bas).
1371 @end quotation
1372
1373 @cindex padding
1374 @noindent
1375 En dessous de cette description se trouve décrite la variable
1376 @code{padding} :
1377
1378 @quotation
1379 @table @code
1380 @item padding
1381 (dimension, in staff space)
1382
1383 Add this much extra space between objects that are next to each other.
1384 @end table
1385 @end quotation
1386
1387 @noindent
1388 Ce qui signifie
1389 @quotation
1390 Ajouter tel espace supplémentaire entre des objets proches les uns des
1391 autres.
1392 @end quotation
1393
1394 @noindent
1395 En augmentant la valeur de @code{padding}, on peut donc éloigner le
1396 doigté de la note.  La commande suivante insère trois unités d'espace
1397 vide entre la note et le doigté :
1398
1399 @example
1400 \once \override Voice.Fingering #'padding = #3
1401 @end example
1402
1403 En ajoutant cette commande avant la création du doigté (de l'objet
1404 @code{Fingering}), donc avant @code{c2}, on obtient le résultat
1405 suivant :
1406
1407 @lilypond[quote,relative=2,verbatim]
1408 \once \override Voice.Fingering #'padding = #3
1409 c-2
1410 \stemUp
1411 f
1412 @end lilypond
1413
1414 Dans le cas présent, le réglage intervient dans le contexte @code{Voice},
1415 ce qui pouvait également se déduire de la Référence des propriétés
1416 internes, où la page du graveur @rinternals{Fingering_engraver}
1417 indique :
1418
1419 @quotation
1420 Fingering_engraver is part of contexts: @dots{} @rinternals{Voice}
1421 @end quotation
1422
1423 @noindent
1424 Ce qui signifie
1425 @quotation
1426 Le graveur Fingering_engraver fait partie des contextes : @dots{}
1427 @rinternals{Voice}
1428 @end quotation
1429
1430
1431 @node Conventions de nommage
1432 @subsection Conventions de nommage
1433 @translationof Naming conventions
1434
1435 Afin de s'y retrouver plus aisément et d'éviter les erreurs de frappe,
1436 voici quelques conventions en matière de nommage :
1437
1438 @itemize
1439 @item fonctions scheme :
1440  minuscule-avec-trait-d-union (y compris noms en mot-unique)
1441 @item fonctions scheme :
1442  ly:plus-style-scheme
1443 @item événements, classes et propriétés musicaux :
1444  identique-aux-fonctions-scheme
1445 @item interfaces d'objet graphique :
1446  style-scheme
1447 @item propriétés d'arrière plan :
1448  style-scheme (mais X et Y pour les axes)
1449 @item contextes (ainsi que MusicExpressions et grobs) :
1450  Capitale initiale ou Camélisation (CamelCase)
1451 @item propriétés de contexte :
1452  minusculeSuivieDeCamélisation
1453 @item graveurs :
1454  Capitale_initiale_puis_minuscules_séparées_par_un_souligné
1455 @end itemize
1456
1457 Les questions que vous devez vous poser sont :
1458 @itemize
1459 @item Qu'est-ce qui relève des conventions, et qu'est-ce qui relève de
1460 la règle ?
1461 @item Qu'est-ce qui relève des règles du langage sous-jacent, et
1462 qu'est-ce qui est propre à LilyPond ?
1463 @end itemize
1464
1465
1466 @node Modification de propriétés
1467 @section Modification de propriétés
1468 @translationof Modifying properties
1469
1470 @c TODO change the menu and subsection node names to use
1471 @c backslash once the new macro to handle the refs
1472 @c is available.  Need to find and change all refs at
1473 @c the same time. -td
1474
1475 @menu
1476 * Vue d'ensemble de la modification des propriétés::
1477 * La commande de fixation (set)::
1478 * La commande de dérogation (override)::
1479 * La commande d'affinage (tweak)::
1480 * set ou override::
1481 * Modification de listes associatives::
1482 @end menu
1483
1484
1485 @node Vue d'ensemble de la modification des propriétés
1486 @subsection Vue d'ensemble de la modification des propriétés
1487 @translationof Overview of modifying properties
1488
1489 Chaque contexte est chargé de créer plusieurs types d'objets graphiques.
1490 Il contient également les réglages nécessaires pour chacun de ces
1491 objets.  Si l'on modifie ces réglages, les objets n'auront plus la même
1492 apparence.
1493
1494 Les contextes comportent deux types différents de propriétés : des
1495 propriétés de contexte et des propriétés d'objet graphique.  Les
1496 propriétés de contexte sont celles qui s'appliqueront globalement au
1497 contexte en tant que tel ; elles gèrent la manière dont le contexte
1498 apparaîtra.  Les propriétés d'objet graphique, par contre, s'appliquent
1499 à des types particuliers d'objet qui apparaissent dans le contexte en
1500 question.
1501
1502 Les commandes @code{\set} et @code{\unset} permettent de modifier les
1503 valeurs des propriétés de contexte.  Les commandes @code{\override} et
1504 @code{\revert} permettent de modifier les valeurs des propriétés des
1505 objets graphiques.
1506
1507 @ignore
1508 La syntaxe employée pour ce faire est
1509
1510 @example
1511 \override @var{contexte}.@var{objet} #'@var{propriété} = #@var{valeur}
1512 @end example
1513
1514 Ici @var{objet} est un objet graphique, tel que @code{Stem} (les hampes)
1515 ou @code{NoteHead} (les têtes de note) ; @var{propriété} est une
1516 variable (désignée par un symbole, ce qui explique l'apostrophe)
1517 employée par le système de mise en page.  La sous-section
1518 @ref{Élaboration d'une retouche} vous aidera à savoir quoi mettre à la
1519 place de @var{objet}, @var{propriété} et @var{valeur} ; notre propos
1520 n'est ici que d'examiner l'emploi de cette commande.
1521
1522 La commande suivante :
1523
1524 @verbatim
1525 \override Staff.Stem #'thickness = #4.0
1526 @end verbatim
1527
1528 @noindent
1529 rend les hampes plus épaisses (la valeur par défaut est 1.3, ce qui
1530 signifie qu'elles sont 1,3 fois plus épaisses que les lignes de la
1531 portée).  Dans la mesure où nous avons indiqué @code{Staff} comme
1532 contexte, ce réglage ne s'appliquera qu'à la portée courante ; les
1533 autres portées demeureront intactes.
1534
1535 @lilypond[quote,verbatim,relative=2,fragment]
1536 c4
1537 \override Staff.Stem #'thickness = #4.0
1538 c4
1539 c4
1540 c4
1541 @end lilypond
1542
1543 La commande @code{\override} modifie donc la définition de l'objet
1544 @code{Stem} dans le contexte @code{Staff} ; toutes les hampes qui
1545 suivent seront affectées.
1546
1547 Tout comme avec la commande @code{\set}, l'argument @var{contexte} peut
1548 être omis, auquel cas le contexte par défaut (ici, @code{Voice}) sera
1549 employé.  La commande @code{\once} permet de n'appliquer la modification
1550 qu'une seule fois.
1551
1552 @lilypond[quote,fragment,verbatim,relative=2]
1553 c4
1554 \once \override Stem #'thickness = #4.0
1555 c4
1556 c4
1557 @end lilypond
1558
1559 La commande @code{\override} doit être entrée @emph{avant} l'objet
1560 concerné.  Ainsi, lorsque l'on veut altérer un objet qui se prolonge,
1561 tel qu'une liaison, une ligature ou tout autre objet dit @emph{Spanner},
1562 la commande @code{\override} doit être saisie avant que l'objet soit
1563 créé.
1564
1565 @lilypond[quote,fragment,verbatim,relative=2]
1566 \override Slur #'thickness = #3.0
1567 c8[( c
1568 \override Beam #'beam-thickness = #0.6
1569 c8 c])
1570 @end lilypond
1571
1572 @noindent
1573 Dans cet exemple, la liaison (@emph{Slur}) est épaissie, mais non la
1574 ligature (@emph{Beam}).  En effet, le code qui lui est relatif n'a pas
1575 été inséré avant le début de la ligature, et demeure donc sans effet.
1576
1577 De même que la commande @code{\unset}, la commande @code{\revert} défait
1578 ce qui a été fait par une commande @code{\override}.  Tout comme avec
1579 @code{\unset}, elle ne peut annuler que les réglages effectués dans le
1580 même contexte.  Ainsi dans l'exemple suivant, la commande @code{\revert}
1581 est sans effet.
1582
1583 @example
1584 \override Voice.Stem #'thickness = #4.0
1585 \revert Staff.Stem #'thickness
1586 @end example
1587
1588 Il existe, à l'intérieur même de certaines propriétés, des options que
1589 l'on nomme @qq{sous-propriétés}.  La syntaxe est alors
1590
1591 @c leave this as a long long
1592 @example
1593 \override @var{contexte}.@var{objet} #'@var{propriété} #'@var{sous-propriété} = #@var{valeur}
1594 @end example
1595
1596 @noindent
1597 Ainsi, par exemple :
1598
1599 @example
1600 \override Stem #'(details beamed-lengths) = #'(4 4 3)
1601 @end example
1602
1603 @end ignore
1604
1605 @seealso
1606 Référence des propriétés internes :
1607 @rinternals{Backend},
1608 @rinternals{All layout objects},
1609 @rinternals{OverrideProperty},
1610 @rinternals{RevertProperty},
1611 @rinternals{PropertySet}.
1612
1613 @knownissues
1614 La sous-couche Scheme ne vérifie pas la saisie des propriétés de façon
1615 très stricte.  Des références cycliques dans des valeurs Scheme peuvent
1616 de ce fait interrompre ou faire planter le programme -- ou bien les
1617 deux.
1618
1619
1620 @node La commande de fixation (set)
1621 @subsection La commande de fixation @code{@bs{}set}
1622 @translationof The set command
1623
1624 @cindex propriétés
1625 @cindex modifier des propriétés
1626 @funindex \set
1627
1628 Chaque contexte peut avoir plusieurs @strong{propriétés}, c'est-à-dire
1629 des variables qu'il inclut.  Ces dernières peuvent être modifiées @qq{à
1630 la volée}, c'est-à-dire pendant que la compilation s'accomplit.  C'est
1631 ici le rôle de la commande @code{\set}.
1632
1633 @example
1634 \set @var{contexte}.@var{propriété} = #@var{valeur}
1635 @end example
1636
1637 Dans la mesure où @var{valeur} est constituée d'un objet Scheme, elle
1638 doit être précédée du caractère @code{#}.
1639
1640 Les propriétés des contextes se libellent sous la forme
1641 @code{minusculeMajuscule}.  Leur rôle consiste principalement à traduire
1642 la musique en notation : par exemple, @code{localKeySignature}
1643 déterminera quand imprimer une altération accidentelle, et
1644 @code{measurePosition} quand imprimer une barre de mesure.  La valeur
1645 des propriétés des contextes peuvent évoluer au fur et à mesure que l'on
1646 avance dans le morceau -- @code{measurePosition} en est l'illustration
1647 parfaite.
1648
1649 Ainsi la propriété de contexte @code{skipBars} permet de condenser les
1650 mesures vides de notes, en des silences multimesures.  Il s'agit d'un
1651 objet Scheme, auquel on attribue la valeur booléenne @qq{vrai},
1652 c'est-à-dire la lettre @code{#t} pour @qq{True} en anglais :
1653
1654 @lilypond[quote,verbatim,relative=2]
1655 R1*2
1656 \set Score.skipBars = ##t
1657 R1*2
1658 @end lilypond
1659
1660 Si l'argument @var{contexte} n'est pas spécifié, alors la propriété
1661 cherchera à s'appliquer dans le contexte le plus restreint où elle est
1662 employée : le plus souvent  @code{ChordNames}, @code{Voice} ou
1663 @code{Lyrics}.
1664
1665 @lilypond[quote,verbatim,relative=2]
1666 \set Score.autoBeaming = ##f
1667 <<
1668   {
1669     e8 e e e
1670     \set autoBeaming = ##t
1671     e8 e e e
1672   } \\ {
1673     c8 c c c c8 c c c
1674   }
1675 >>
1676 @end lilypond
1677
1678 Ce changement étant appliqué @qq{à la volée}, il n'affecte que le second
1679 groupe de notes.
1680
1681 Notez que le contexte le plus restreint n'est pas toujours le bon, et
1682 peut ne pas contenir la propriété qui vous intéresse : ainsi, la
1683 propriété @code{skipBars}, évoquée plus haut, ne relève pas du contexte
1684 @code{Voice}, mais du contexte @code{Score} -- le code suivant ne
1685 fonctionnera pas.
1686
1687 @lilypond[quote,verbatim,relative=2]
1688 R1*2
1689 \set skipBars = ##t
1690 R1*2
1691 @end lilypond
1692
1693 Les contextes s'organisent de façon hiérarchique : aussi, lorsqu'un
1694 contexte de niveau supérieur est spécifié (par exemple @code{Staff}), la
1695 propriété sera modifiée dans tous les contextes inférieurs (tous les
1696 contextes @code{Voice}, par exemple) qu'il contient.
1697
1698 @funindex \unset
1699
1700 La commande @code{\unset} permet d'annuler la définition d'une
1701 propriété :
1702
1703 @example
1704 \unset @var{contexte}.@var{propriété}
1705 @end example
1706
1707 @noindent
1708 si et seulement si cette @var{propriété} a été définie dans ce
1709 @var{contexte} précis.  En d'autres termes, la commande @code{\unset}
1710 doit impérativement affecter le même contexte que la commande
1711 @code{\set} d'origine, même en cas d'imbrication.
1712
1713 @lilypond[quote,verbatim,relative=2]
1714 \set Score.autoBeaming = ##t
1715 <<
1716   {
1717     \unset autoBeaming
1718     e8 e e e
1719     \unset Score.autoBeaming
1720     e8 e e e
1721   } \\ {
1722     c8 c c c c8 c c c
1723   }
1724 >>
1725 @end lilypond
1726
1727 Si l'on se trouve dans le contexte le plus restreint, il n'est pas
1728 obligatoire, là encore, de spécifier le @var{contexte}.  Ainsi, les deux
1729 lignes suivantes
1730
1731 @example
1732 \set Voice.autoBeaming = ##t
1733 \set autoBeaming = ##t
1734 @end example
1735
1736 @noindent
1737 sont équivalentes elles apparaissent dans un contexte @code{Voice}.
1738
1739 @cindex \once
1740
1741 Pour modifier une propriété de façon à ce que l'accommodement ne
1742 s'applique qu'une seule fois, il convient d'adjoindre l'instruction
1743 @code{\once} à la commande @code{\set} :
1744
1745 @lilypond[quote,verbatim,relative=2]
1746 c4
1747 \once \set fontSize = #4.7
1748 c4
1749 c4
1750 @end lilypond
1751
1752 Ici le changement de taille est annulé aussitôt après la note concernée.
1753
1754 La référence des propriétés internes contient une description exhaustive
1755 de toutes les propriétés, contexte par contexte : voir
1756 @ifhtml
1757 @rinternals{Tunable context properties}.
1758 @end ifhtml
1759 @ifnothtml
1760 Translation @expansion{} Tunable context properties.
1761 @end ifnothtml
1762
1763
1764 @seealso
1765 Référence des propriétés internes :
1766 @rinternals{Tunable context properties}.
1767
1768
1769 @node La commande de dérogation (override)
1770 @subsection La commande de dérogation @code{@bs{}override}
1771 @translationof The override command
1772
1773 @cindex grob, propriétés
1774 @cindex objet graphique, propriétés
1775 @cindex propriétés d'un grob
1776 @cindex propriétés d'objet graphique
1777
1778 @funindex \override
1779
1780 La commande @code{\override} permet de modifier la mise en forme des
1781 objets graphiques.  Les descriptions d'objet graphique, dont les noms
1782 commencent par une majuscule, puis comprennent une ou plusieurs
1783 majuscules (de style @code{TotoTata}), contiennent les réglages @qq{par
1784 défaut} pour les objets graphiques.  Ces réglages sont sous forme de
1785 liste Scheme ; on peut les consulter dans le fichier
1786 @file{scm/define-grobs.scm}.
1787
1788 @code{\override} est en fait un raccourci :
1789
1790 @example
1791 \override @var{contexte}.@var{NomObjet} #'@var{propriété} = #@var{valeur}
1792 @end example
1793
1794 @noindent
1795 plus ou moins équivalent à
1796
1797 @c  leave this long line -gp
1798 @example
1799 \set @var{contexte}.@var{NomObjet}  =
1800   #(cons (cons '@var{propriété} @var{valeur})
1801          <valeur antérieure de @var{contexte}.@var{NomObjet}>)
1802 @end example
1803
1804 La valeur de @var{contexte}.@var{NomObjet} (une liste associative, ou
1805 @emph{alist}) permet d'initialiser les propriétés des objets un par un.
1806 Les objets eux-mêmes ont leurs propriétés, dont les noms, dans la
1807 tradition du langage Scheme, comprennent un trait d'union
1808 (@code{toto-titi}).  Ces propriétés internes changent constamment au
1809 cours de la mise en page : en fait, la gravure d'une page n'est autre
1810 que le calcul de toutes ces propriétés au moyen de fonctions de rappel.
1811
1812 Nous pouvons donc par exemple accroître l'épaisseur des hampes en jouant
1813 sur la propriété @code{thickness} de l'objet @code{stem} :
1814
1815 @lilypond[quote,verbatim,relative=2]
1816 c4 c
1817 \override Voice.Stem #'thickness = #3.0
1818 c4 c
1819 @end lilypond
1820
1821 Lorsqu'aucun contexte n'est spécifié dans une clause @code{\override},
1822 celle-ci s'appliquera au contexte le plus bas :
1823
1824 @lilypond[quote,verbatim,relative=2]
1825 { \override Staff.Stem #'thickness = #3.0
1826   <<
1827     {
1828       e4 e
1829       \override Stem #'thickness = #0.5
1830       e4 e
1831     } \\ {
1832       c4 c c c
1833     }
1834   >>
1835 }
1836 @end lilypond
1837
1838 @cindex annulation d'un override
1839 @cindex override, annulation des effets
1840 @funindex \revert
1841
1842 Les effets d'un @code{\override} prennent fin à l'aide de l'instruction
1843 @code{\revert} :
1844
1845 @lilypond[quote,verbatim,relative=2]
1846 c4
1847 \override Voice.Stem #'thickness = #3.0
1848 c4 c
1849 \revert Voice.Stem #'thickness
1850 c4
1851 @end lilypond
1852
1853 Les effets d'un @code{\override} ou d'un @code{\revert} s'appliquent dès
1854 l'endroit où ils apparaissent, et à tous les objets dans le contexte
1855 mentionné :
1856
1857 @lilypond[quote,verbatim,relative=2]
1858 {
1859   <<
1860     {
1861       e4
1862       \override Staff.Stem #'thickness = #3.0
1863       e4 e e
1864     } \\ {
1865       c4 c c
1866       \revert Staff.Stem #'thickness
1867       c4
1868     }
1869   >>
1870 }
1871 @end lilypond
1872
1873 @cindex override ponctuel
1874 @funindex \once
1875
1876 L'instruction @code{\override} doit être précédée d'un @code{\once} dès
1877 lors que les effets de l'accommodement ne concernent que l'événement qui
1878 la suit directement :
1879
1880 @lilypond[quote,verbatim,relative=2]
1881 {
1882   <<
1883     {
1884       \override Stem #'thickness = #3.0
1885       e4 e e e
1886     } \\ {
1887       c4
1888       \once \override Stem #'thickness = #3.0
1889       c4 c c
1890     }
1891   >>
1892 }
1893 @end lilypond
1894
1895 @ignore
1896 Les commandes permettant de modifier l'apparence de la partition
1897 ressemblent en général à
1898
1899 @example
1900 \override Voice.Stem #'thickness = #3.0
1901 @end example
1902
1903 @noindent
1904 Pour élaborer un réglage de ce type, on a besoin de connaître
1905 précisément :
1906
1907 @itemize
1908 @item le contexte : ici @code{Voice} (la voix).
1909 @item l'objet à affecter : ici @code{Stem} (les hampes).
1910 @item la propriété à modifier : ici @code{thickness} (l'épaisseur
1911 du trait).
1912 @item la valeur désirée : ici @code{3.0} (par défaut, elle est de 1.3).
1913 @end itemize
1914
1915 Certaines @qq{sous-propriétés} sont parfois contenues dans une
1916 propriété.  La commande devient alors :
1917
1918 @example
1919 \override Stem #'(details beamed-lengths) = #'(4 4 3)
1920 @end example
1921
1922 @cindex documentation exhaustive
1923 @cindex trouver des objets graphiques
1924 @cindex objets graphiques, description
1925 @cindex régler
1926 @funindex \override
1927
1928 Pour bien des propriétés, quel que soit le type de valeur requise,
1929 attribuer la valeur @qq{faux} (@code{##f} en Scheme) reviendra à
1930 désactiver complètement l'action de la propriété qui se trouve ainsi
1931 purement ignorée par LilyPond.  Cela peut s'avérer fort utile pour des
1932 propriétés causant des désagréments.
1933
1934 @end ignore
1935
1936 @seealso
1937 Référence des propriétés internes :
1938 @rinternals{Backend}
1939
1940
1941 @node La commande d'affinage (tweak)
1942 @subsection La commande d'affinage @code{@bs{}tweak}
1943 @translationof The tweak command
1944
1945 @cindex retouche (tweak)
1946 @cindex affinage (tweak)
1947 @cindex ajustement (tweak)
1948 @cindex tweak (retouche, affinage)
1949 @funindex \tweak
1950
1951 L'utilisation d'un @code{\override} pour modifier les propriétés d'un
1952 objet graphique affectera toutes les instances de l'objet en question au
1953 sein du contexte, et ce dès son apparition.  Il peut parfois être
1954 préférable de n'affecter qu'un seul objet en particulier plutôt que tous
1955 les objets du contexte.  C'est là rôle de l'instruction @code{\tweak},
1956 dont la syntaxe est :
1957
1958 @example
1959 \tweak @var{objet-de-rendu} #'@code{objet-propriété} @code{valeur}
1960 @end example
1961
1962 Mention de l'@var{objet-de-rendu} est optionnel.
1963 La commande @code{\tweak} s'applique à l'objet qui apparaît
1964 immédiatement après @code{valeur}.
1965
1966 @ignore
1967 Dans certains cas, on peut passer par un raccourci pour arranger les
1968 objets graphiques.  Lorsqu'un objet est directement engendré par un
1969 élément distinct du fichier source, on peut utiliser la commande
1970 @code{\tweak}.
1971
1972 Dans l'accord suivant, les notes sont modifiées une par une :
1973
1974 @lilypond[relative=2,verbatim,ragged-right]
1975 <
1976   c
1977   \tweak #'color #red
1978   d
1979   g
1980   \tweak #'duration-log #1 
1981    a
1982 >4
1983 -\tweak #'padding #8
1984 -^
1985 @end lilypond
1986
1987 Comme on peut le voir, les propriétés sont ici modifiées directement
1988 en même temps que les objets sont saisis.  Il n'est plus besoin de
1989 spécifier ni le nom de l'objet (@emph{grob}), ni le contexte dans lequel
1990 cela doit s'appliquer.  Ce procédé ne marche que pour des objets
1991 directement liés aux événements (@rinternals{Event}) du fichier source.
1992 Par exemple :
1993
1994 @itemize
1995 @item Les têtes de notes au sein d'un accord, qui sont directement
1996 engendrées par les hauteurs indiquées
1997
1998 @item Les signes d'articulation, engendrés par les indications de
1999 ponctuation.
2000 @end itemize
2001
2002 En revanche, les hampes ou les altérations sont engendrées par les têtes
2003 de notes, et non par des évènements dans le fichier source.  De même
2004 pour les clés, qui ne sont pas directement engendrées par le fichier
2005 source, mais plutôt par le changement d'une propriété interne.
2006
2007 En fait, très peu d'objets passent @emph{directement} du code source à
2008 la partition. Une note toute simple, par exemple @code{c4}, fait l'objet
2009 d'un traitement et n'est donc pas directement rendue ; c'est
2010 pourquoi le code suivant ne sera d'aucun effet :
2011
2012 @example
2013 \tweak #'color #red c4
2014 @end example
2015
2016 @noindent
2017 Voir pour plus de détails
2018 @rextend{Affichage d'expressions musicales}.
2019 @end ignore
2020
2021 Pour une introduction à la syntaxe et l'utilisation des retouches, voir
2022 le chapitre @rlearning{Méthodes de retouche}.
2023
2024 Lorsque plusieurs éléments de même nature surviennent au même instant,
2025 il devient impossible d'utiliser l'instruction @code{\override} pour
2026 n'en modifier qu'un seul individuellement, d'où l'intérêt de la commande
2027 @code{\tweak}.  Entre autres éléments qui sont susceptibles de se
2028 produire au même instant, nous citerons :
2029
2030 @c TODO expand to include any further uses of \tweak
2031 @itemize
2032 @item les têtes de notes au sein d'un accord,
2033 @item les signes d'articulation,
2034 @item les liaisons de prolongation sur des notes d'un accord,
2035 @item les crochets de nolets démarrant au même instant
2036 @end itemize
2037
2038 @c TODO add examples of these
2039
2040 Dans l'exemple suivant, l'une des têtes de note de l'accord est
2041 colorisée, et l'aspect d'une autre est changé.
2042
2043 @lilypond[relative=2,verbatim,quote]
2044 < c
2045   \tweak #'color #red
2046   d
2047   g
2048   \tweak #'duration-log #1
2049   a
2050 > 4
2051 @end lilypond
2052
2053 L'instruction @code{\tweak} permet aussi de modifier l'aspect d'une
2054 liaison :
2055
2056 @lilypond[verbatim,quote,relative=1]
2057 c-\tweak #'thickness #5 ( d e f)
2058 @end lilypond
2059
2060 La commande @code{\tweak} ne sera pleinement fonctionnelle que si elle
2061 est directement rattachée à l'objet auquel elle doit s'appliquer alors
2062 que le fichier source est converti en flux musical.  Vouloir modifier la
2063 globalité d'un accord est sans résultat dans la mesure où il ne
2064 constitue qu'un conteneur pour des événements musicaux et que tous les
2065 objets seront créés à partir d'événements appartenant à un
2066 @code{EventChord} (un événement d'accord) :
2067
2068 @lilypond[relative=2,verbatim,quote]
2069 \tweak #'color #red c4
2070 \tweak #'color #red <c e>4
2071 <\tweak #'color #red c>4
2072 @end lilypond
2073
2074 La commande @code{\tweak} simple ne saurait servir à modifier un élément
2075 qui ne serait pas explicitement mentionné dans le fichier source.  C'est
2076 notamment le cas des hampes, ligatures automatiques ou altérations, dans
2077 la mesure où elles seront ultérieurement générées et après les têtes de
2078 note (objets @code{NoteHead}, plutôt qu'au fil des éléments musicaux
2079 saisis.
2080
2081 De tels objets créés indirectement peuvent être ajustés que par une
2082 forme dévelppée de la commande @code{\tweak} :
2083
2084 @lilypond[relative=2,verbatim,quote]
2085 \tweak Stem #'color #red
2086 \tweak Beam #'color #green c8 e
2087 <c e \tweak Accidental #'font-size #-3 ges>4
2088 @end lilypond
2089
2090 La commande @code{\tweak} ne peut non plus servir à modifier clefs ou
2091 métriques, puisqu'elles seront immanquablement séparées du @code{\tweak}
2092 par l'insertion automatique d'autres éléments requis pour spécifier le
2093 contexte.
2094
2095 Plusieurs commandes @code{\tweak} en enfilade permettent d'affecter un
2096 même élément de notation :
2097
2098 @lilypond[verbatim,quote,relative=1]
2099 c
2100 -\tweak #'style #'dashed-line
2101 -\tweak #'dash-fraction #0.2
2102 -\tweak #'thickness #3
2103 -\tweak #'color #red
2104  \glissando
2105 f'
2106 @end lilypond
2107
2108 Vous pouvez examiner le flux musical généré par une portion d'un
2109 fichier source, y compris les éléments automatiquement insérés, en
2110 suivant les indications portées à la rubrique
2111 @rextend{Affichage d'expressions musicales}.  Ceci s'avère tout à fait
2112 approprié pour déterminer ce qui peut se modifier à l'aide d'un
2113 @code{\tweak} ou bien aider à rectifier votre source de telle sorte
2114 que le @code{\tweak} produise ses effets.
2115
2116 @seealso
2117 Manuel d'initiation :
2118 @rlearning{Méthodes de retouche}.
2119
2120 Manuel d'extension :
2121 @rextend{Affichage d'expressions musicales}.
2122
2123 @knownissues
2124
2125 @cindex tweak et points de contrôle
2126 @cindex points de contrôle et tweak
2127
2128 Lorsqu'il y a plusieurs liaisons de prolongation dans un accord, la
2129 commande @code{\tweak} ne s'applique qu'à la première.
2130
2131
2132 @node set ou override
2133 @subsection @code{\set} ou @code{\override}
2134 @translationof set versus override
2135
2136 @c TODO -- This section is probably unnecessary now.
2137
2138 @ignore
2139 Si les propriétés peuvent être modifiées de deux façons, par les
2140 commandes @code{\set} et @code{\override}, c'est qu'il y a deux types de
2141 propriétés.
2142
2143 La propriété @code{fontSize} est une exception : c'est un raccourci, qui
2144 équivaudrait à saisir @w{@code{\override @dots{} #'font-size}} pour tous
2145 les objets textuels.  Dans la mesure où il s'agit d'une manipulation
2146 très courante, une propriété spéciale a été créée.  Elle doit être
2147 modifiée avec la commande @code{\set}.
2148
2149 @end ignore
2150
2151
2152 @node Modification de listes associatives
2153 @subsection Modification de listes associatives
2154 @translationof Modifying alists
2155
2156 Certaines propriétés configurables par l'utilisateur se présentent en
2157 interne comme étant des listes associatives -- les puristes diront des
2158 @emph{alists}.  Une @emph{alist} est en fait constituée de plusieurs
2159 paires de @emph{clés} et @emph{valeurs} ; sa structure ressemble à :
2160
2161 @example
2162 '((@var{clé1} . @var{valeur1})
2163   (@var{clé2} . @var{valeur2})
2164   (@var{clé3} . @var{valeur3})
2165   @dots{})
2166 @end example
2167
2168 Dans le cas où cette liste représente les propriétés d'un objet
2169 graphique ou bien l'une des variables du bloc @code{\paper}, chaque clé
2170 peut être modifiée individuellement sans que cela n'affecte les autres.
2171
2172 Par exemple, pour réduire l'espacement entre deux portées adjacentes
2173 d'un même système, on utilisera la propriété @code{staff-staff-spacing}
2174 qui est attachée à l'objet graphique @code{StaffGrouper}.  Cette
2175 propriété est constituée d'une liste de quatre clés :
2176 @code{basic-distance}, @code{minimum-distance}, @code{padding} et
2177 @code{stretchability}.  Ses réglages par défaut tels que mentionnés à la
2178 rubrique @emph{Backend} de la référence des propriétés internes -- voir
2179 @rinternals{StaffGrouper} -- sont :
2180
2181 @example
2182 '((basic-distance . 9)
2183   (minimum-distance . 7)
2184   (padding . 1)
2185   (stretchability . 5))
2186 @end example
2187
2188 Afin de rapprocher nos deux portées, il suffit de réduire la valeur
2189 (@code{9}) de la clé @code{basic-distance} au niveau de celle de la clé
2190 @code{minimum-distance} (@code{7}).  La modification d'une seule clé
2191 individuellement peut se réaliser sous la forme d'une @emph{déclaration
2192 imbriquée} :
2193
2194 @lilypond[quote,verbatim]
2195 % default space between staves
2196 \new PianoStaff <<
2197   \new Staff { \clef treble c''1 }
2198   \new Staff { \clef bass   c1   }
2199 >>
2200
2201 % reduced space between staves
2202 \new PianoStaff \with {
2203   % this is the nested declaration
2204   \override StaffGrouper #'staff-staff-spacing #'basic-distance = #7
2205 } <<
2206   \new Staff { \clef treble c''1 }
2207   \new Staff { \clef bass   c1   }
2208 >>
2209 @end lilypond
2210
2211 Le recours à une déclaration imbriquée touchera la clé indiquée
2212 (@code{basic-distance} dans l'exemple ci-dessus) sans pour autant
2213 modifier les autres clés de la propriété considérée.
2214
2215 Considérons maintenant que nous souhaitions que les portées soient le
2216 plus proche possible les unes des autres, à la limite du chevauchement.
2217 Il suffirait de mettre les quatre clés à zéro.  Nous pourrions saisir
2218 quatre déclarations, chacune d'elles touchant une clé.  Nous pouvons
2219 tout aussi bien redéfinir la propriété en une seule clause, sous la
2220 forme d'une liste associative :
2221
2222 @lilypond[quote,verbatim]
2223 \new PianoStaff \with {
2224   \override StaffGrouper #'staff-staff-spacing =
2225     #'((basic-distance . 0)
2226        (minimum-distance . 0)
2227        (padding . 0)
2228        (stretchability . 0))
2229 } <<
2230   \new Staff { \clef treble c''1 }
2231   \new Staff { \clef bass   c1   }
2232 >>
2233 @end lilypond
2234
2235 N'oubliez pas que dès lors qu'une clé n'apparaît pas dans la liste, elle
2236 retourne à sa valeur @emph{sauf-mention-contraire}.  Autrement dit, dans
2237 le cas de @code{staff-staff-spacing} qui nous occupe, toutes les clés
2238 non mentionnées seront ramenées à zéro -- à l'exception de
2239 @code{stretchability} qui prend par défaut la valeur de
2240 @code{basic-distance}.  Les deux assertions suivantes sont donc
2241 équivalentes.
2242
2243 @example
2244 \override StaffGrouper #'staff-staff-spacing =
2245   #'((basic-distance . 7))
2246
2247 \override StaffGrouper #'staff-staff-spacing =
2248   #'((basic-distance . 7)
2249      (minimum-distance . 0)
2250      (padding . 0)
2251      (stretchability . 7))
2252 @end example
2253
2254 L'une des conséquences, parfois involontaire, de ceci est la suppression
2255 de réglages standards effectués par un fichier d'initialisation chargé à
2256 chaque compilation d'un fichier source.  Dans l'exemple précédent, les
2257 réglages standards de @code{padding} et @code{minimum-distance}, tels
2258 que déterminés par @file{scm/define-grobs.scm}, se voient ramenés à leur
2259 valeur @emph{si-non-définie} ; autrement dit, les deux clés sont mises à
2260 zéro.  La définition d'une propriété ou d'une variable sous forme de
2261 liste associative, quelle qu'en soit la taille, réinitialisera toujours
2262 les clés non mentionnées à leur valeur @emph{si-non-définie}.  Si telle
2263 n'est pas votre intention, nous vous recommandons alors de régler la
2264 valeur des clés individuellement par des déclarations imbriquées.
2265
2266 @warning{Les déclarations imbriquées ne sont pas fonctionnelles dans le
2267 cas des listes associatives des propriétés de contexte -- telles
2268 @code{beamExceptions}, @code{keySignature},
2269 @code{timeSignatureSettings}, etc.  Ces propriétés ne sont modifiables
2270 qu'au travers d'une complète redéfinition de leur liste associative.}
2271
2272
2273 @node Propriétés et contextes utiles
2274 @section Propriétés et contextes utiles
2275 @translationof Useful concepts and properties
2276
2277 @menu
2278 * Modes de saisie::
2279 * Direction et positionnement::
2280 * Distances et unités de mesure::
2281 * Propriétés des symboles de la portée::
2282 * Extenseurs et prolongateurs::
2283 * Visibilité des objets::
2284 * Styles de ligne::
2285 * Rotation des objets::
2286 @end menu
2287
2288
2289 @node Modes de saisie
2290 @subsection Modes de saisie
2291 @translationof Input modes
2292
2293 La manière dont sera interprétée la notation contenue dans un fichier
2294 source dépend du mode affecté à la saisie.
2295
2296 @strong{Mode accords}
2297
2298 Ce mode, activé par la commande @code{\chordmode}, permet d'interpréter
2299 les saisies comme étant des accords, qui seront imprimés sous forme
2300 de notes sur une portée -- voir @ref{Notation des accords}.
2301
2302 Le mode accords s'active aussi par la commande @code{\chords}, qui
2303 créera un contexte @code{ChordNames}.  Les saisies, interprétées comme
2304 étant des accords, seront alors rendues sous forme nominale dans ce
2305 contexte @code{ChordNames} -- voir @ref{Impression des noms d'accord}.
2306
2307 @strong{Mode percussions}
2308
2309 Ce mode, activé par la commande @code{\drummode}, permet d'interpréter
2310 les saisies comme étant de la notation pour percussions -- voir
2311 @ref{Notation de base pour percussions}.
2312
2313 Le mode percussions s'active aussi par la commande @code{\drums}, qui
2314 créera un contexte @code{DrumStaff}.  Les saisies, interprétées comme
2315 étant de la notation pour percussions, seront alors rendues sous
2316 forme symbolique sur une portée de percussions -- voir
2317 @ref{Notation de base pour percussions}.
2318
2319 @strong{Mode figures}
2320
2321 Ce mode, activé par la commande @code{\figuremode}, permet d'interpréter
2322 les saisies comme étant de la basse chiffrée (ou figurée) -- voir
2323 @ref{Saisie de la basse chiffrée}.
2324
2325 Le mode figures s'active aussi par la commande @code{\figures}, qui
2326 créera un contexte @code{FiguredBass}.  Les saisies interprétées comme
2327 étant de la basse chiffrée, seront alors rendues sous forme symbolique
2328 dans le contexte @code{FiguredBass} -- voir
2329 @ref{Introduction à la basse chiffrée}.
2330
2331 @strong{Mode frets et tablatures}
2332
2333 Il n'existe pas de mode spécifique pour saisir des symboles de fret ou
2334 de tablature.
2335
2336 Notes ou accords saisis en mode note puis affectés à un contexte
2337 @code{TabStaff} seront rendus sous forme de diagramme de tablature --
2338 voir @ref{Tablatures par défaut}.
2339
2340 Deux options différentes permettent d'obtenir des diagrammes de fret en
2341 surplomb d'une portée : directement à l'aide d'un contexte
2342 @code{FretBoards} -- voir @ref{Tablatures automatiques} -- ou en
2343 attachant aux notes des @emph{markups} créés par la commande
2344 @code{\fret-diagram} -- voir @ref{Tablatures sous forme d'étiquette}.
2345
2346 @strong{Mode paroles}
2347
2348 Ce mode, activé par la commande @code{\lyricmode}, permet d'interpréter
2349 les saisies comme étant des syllabes, ayant éventuellement une durée, et
2350 des indications habituelles aux paroles -- voir @ref{Musique vocale}.
2351
2352 Le mode paroles s'active aussi par la commande @code{\addlyrics}, qui
2353 créera un contexte @code{Lyrics} et ajoutera implicitement une commande
2354 @code{\lyricsto} afin d'associer les paroles qui suivent à la musique
2355 précédemment saisie.
2356
2357 @strong{Mode @emph{markup}}
2358
2359 Ce mode, activé par la commande @code{\markup}, permet d'interpréter les
2360 saisies comme étant des @emph{markups} (annotations ou étiquettes) --
2361 voir @rusernamed{Text markup commands,Commandes pour le mode markup}.
2362
2363
2364 @c silly work-around for texinfo broken-ness
2365 @c (@strong{Note...} causes a spurious cross-reference in Info)
2366 @b{Mode notes}
2367
2368 Le mode notes est le mode par défaut dans LilyPond.  Il peut aussi
2369 s'activer par la commande @code{\notemode}.  Les saisies seront
2370 interprétées comme étant des hauteurs, durées, @emph{markups} etc. qui
2371 seront rendues sous forme de notation musicale sur une portée.
2372
2373 Nul n'est besoin de spécifier le mode notes de manière explicite, hormis
2374 dans certaines situations particulières, notamment lorsque vous êtes en
2375 mode paroles, accords, ou tout autre mode, et que vous deviez insérer
2376 un élément qui ne serait disponible que grâce à la syntaxe du mode
2377 notes.
2378
2379 Il en va ainsi lorsque, par exemple, vous voulez ajouter une indication
2380 de nuance au numéro de couplet d'un chant choral :
2381
2382 @lilypond[verbatim,relative=2,quote]
2383 { c4 c4 c4 c4 }
2384 \addlyrics {
2385   \notemode{\set stanza = \markup{ \dynamic f 1. } }
2386   To be sung loudly
2387 }
2388 \addlyrics {
2389   \notemode{\set stanza = \markup{ \dynamic p 2. } }
2390   To be sung quietly
2391 }
2392 @end lilypond
2393
2394
2395 @node Direction et positionnement
2396 @subsection Direction et positionnement
2397 @translationof Direction and placement
2398
2399 En matière de typographie musicale, l'orientation et le positionnement
2400 de nombreux éléments est affaire de goût.  Par exemple, les hampes
2401 peuvent être ascendantes ou descendantes, les paroles, nuances ou autres
2402 indications d'expression peuvent apparaître au-dessus ou en dessous de
2403 la portée, les indications textuelles s'alignent tantôt par la gauche,
2404 tantôt par la droite, ou être centrées.  La plupart de ces choix peuvent
2405 être laissés à l'appréciation de LilyPond.  Il peut être préférable,
2406 dans certains cas, d'imposer l'orientation ou le positionnement des
2407 éléments.
2408
2409 @strong{Indicateurs de position d'une articulation}
2410
2411 Certains positionnements sont opérés par défaut -- toujours au-dessus ou
2412 toujours en dessous (nuances ou points d'orgue) -- alors que d'autres
2413 alterneront selon l'orientation des hampes (liaisons ou accents).
2414
2415 @c TODO Add table showing these
2416
2417 Le positionnement par défaut peut être outrepassé à l'aide d'un
2418 @emph{indicateur de positionnement}, qui vient s'insérer juste avant
2419 l'articulation.  LilyPond met à votre disposition trois indicateurs de
2420 positionnement : @code{^} (pour @qq{au-dessus}), @code{_} (pour
2421 @qq{au-dessous}), et @code{-} (pour @qq{appliquer le positionnement par
2422 défaut}).  L'indicateur de positionnement n'est pas obligatoire ;
2423 LilyPond considère alors qu'il y a un @code{-}.  Un indicateur de
2424 positionnement est cependant @strong{obligatoire} dans les cas
2425 suivants :
2426
2427 @itemize
2428 @item une commande @code{\tweak},
2429 @item une commande @code{\markup},
2430 @item une commande @code{\tag},
2431 @item les indications de corde, par exemple @code{-"corde"},
2432 @item les indications de doigté, par exemple @w{@code{-1}},
2433 @item les raccourcis d'articulation, par exemple @w{@code{-.}},
2434 @w{@code{->}} ou @w{@code{--}}.
2435 @end itemize
2436
2437 Les indicateurs de positionnement n'affectent que la note qui suit :
2438
2439 @lilypond[verbatim,quote,relative=2]
2440 c2( c)
2441 c2_( c)
2442 c2( c)
2443 c2^( c)
2444 @end lilypond
2445
2446 @strong{La propriété @code{direction}}
2447
2448 Le positionnement ou l'orientation de nombreux objets de rendu sont
2449 gérés par la propriété @code{direction}.
2450
2451 La propriété @code{direction} peut prendre la valeur @code{1}, qui
2452 signifie @qq{ascendant} ou @qq{au-dessus}, ou @w{@code{-1}}, qui
2453 signifie @qq{descendant} ou @qq{au-dessous}.  Les symboliques @code{UP}
2454 et @code{DOWN} peuvent remplacer respectivement @code{1} et
2455 @w{@code{-1}}.  Les valeurs @code{0} ou @code{CENTER} permettent de
2456 réaffecter à la propriété @code{direction} son comportement par défaut.
2457 Certaines commandes prédéfinies permettent par ailleurs de spécifier un
2458 comportement en matière d'orientation ou positionnement ; elles
2459 sont de la forme
2460
2461 @example
2462 @code{\xxxUp}, @code{\xxxDown} et @code{\xxxNeutral}
2463 @end example
2464
2465 @noindent
2466 auquel cas @code{\xxxNeutral} signifie @qq{retour au comportement par
2467 défaut} -- voir @rlearning{Objets inclus dans la portée}.
2468
2469 Dans quelques cas particuliers, comme l'indication d'un @emph{arpeggio},
2470 la valeur affectée à la propriété @code{direction} déterminera si
2471 l'objet doit se placer à gauche ou à droite de son parent.  Un
2472 @w{@code{-1}} ou @code{LEFT} signifiera alors @qq{sur la gauche}, et un
2473 @code{1} ou @code{RIGHT} @qq{sur la droite}.  Comme de bien entendu, un
2474 @code{0} ou @code{CENTER} signifiera @qq{appliquer le positionnement par
2475 défaut}.
2476
2477 @ignore
2478 These all have side-axis set to #X
2479 AmbitusAccidental - direction has no effect
2480 Arpeggio - works
2481 StanzaNumber - not tried
2482 TrillPitchAccidental - not tried
2483 TrillPitchGroup - not tried
2484 @end ignore
2485
2486 Notez que ces commandes resteront effectives jusqu'à ce qu'elles soient
2487 annulées.
2488
2489 @lilypond[verbatim,quote,relative=2]
2490 c2( c)
2491 \slurDown
2492 c2( c)
2493 c2( c)
2494 \slurNeutral
2495 c2( c)
2496 @end lilypond
2497
2498 En matière de musique polyphonique, il est souvent plus judicieux
2499 d'utiliser des contextes @code{Voice} explicites que de modifier
2500 l'orientation des objets.  Pour de plus amples informations, voir
2501 @ref{Plusieurs voix}.
2502
2503 @seealso
2504 Manuel d'initiation :
2505 @rlearning{Objets inclus dans la portée}.
2506
2507 Manuel de notation :
2508 @ref{Plusieurs voix}.
2509
2510
2511 @node Distances et unités de mesure
2512 @subsection Distances et unités de mesure
2513 @translationof Distances and measurements
2514
2515 @cindex distance absolue
2516 @cindex distance relative
2517 @cindex distance extensible
2518
2519 @funindex \mm
2520 @funindex \cm
2521 @funindex \in
2522 @funindex \pt
2523
2524 LilyPond considère deux types de distances : les distances absolues
2525 et les distances relatives ou extensibles.
2526
2527 Les distances absolues permettent de spécifier les marges, indentations
2528 et autres détails de mise en page ; elles s'expriment par défaut en
2529 millimètres.  Vous pouvez utiliser d'autres systèmes de mesure, dès lors
2530 que la quantité est suivie de la mesure : @code{\mm}, @code{\cm},
2531 @code{\in} (pouces) ou @code{\pt} (points, 1/72,27 pouce).
2532 Les mesures de mise en page peuvent aussi s'exprimer en unité extensible
2533 de portée @code{\staff-space} (voir ci-après).  Pour plus d'information
2534 concernant la mise en page, voir la rubrique
2535 @ref{Mise en forme de la page}.
2536
2537 Les distances relatives ou extensibles s'expriment toujours en
2538 @qq{espace de portée} ou, plus rarement, en @qq{demi espace de portée}.
2539 L'espace de portée correspond à la distance qui sépare deux lignes
2540 adjacentes d'une portée.  Sa valeur par défaut est déterminée
2541 globalement par la taille de portée.  Elle peut aussi s'ajuster
2542 ponctuellement en jouant sur la propriété @code{staff-space} de l'objet
2543 @code{StaffSymbol}.  Les distances relatives s'ajustent automatiquement
2544 dès qu'une modification de la taille globale de portée ou bien de la
2545 propriété @code{staff-space} du @code{StaffSymbol} intervient.
2546 Cependant, les tailles de fonte ne s'ajusteront automatiquement que si
2547 la modification touche la taille globale des portées.  La taille globale
2548 de portée permet ainsi de gérer l'aspect général de la partition --
2549 voir @ref{Définition de la taille de portée}.
2550
2551 @funindex magstep
2552
2553 Lorsque seulement une portion de partition doit apparaître dans une
2554 taille, comme par exemple une portée d'ossia ou une note de bas de page,
2555 influer sur la taille globale de portée affecterait l'intégralité de la
2556 partition.  Il convient donc dans ce cas de modifier à la fois la
2557 propriété @code{staff-space} du @code{StaffSymbol} et la taille des
2558 fontes.  La fonction Scheme @code{magstep} est tout spécialement chargée
2559 d'adapter une modification du @code{staff-space} aux fontes.  Pour de
2560 plus amples informations, reportez-vous à la rubrique
2561 @rlearning{Longueur et épaisseur des objets}.
2562
2563 @seealso
2564 Manuel d'initiation :
2565 @rlearning{Longueur et épaisseur des objets}.
2566
2567 Manuel de notation :
2568 @ref{Définition de la taille de portée},
2569 @ref{Mise en forme de la page}.
2570
2571
2572 @node Propriétés des symboles de la portée
2573 @subsection Propriétés des symboles de la portée
2574 @translationof Staff symbol properties
2575
2576 @cindex ajustement des symboles de portée
2577 @cindex dessin des symboles de portée
2578 @cindex symboles de portée, dessin
2579
2580 @c TODO Extend or remove this section.  See also NR 1.6.2 Staff symbol
2581 @c      Need to think of uses for these properties.  Eg 'line-positions
2582 @c      is used in a snippet to thicken centre line.
2583 @c      If retained, add @ref to here in 1.6.2  -td
2584
2585 L'emplacement vertical et le nombre de lignes d'une portée se
2586 définissent conjointement.  Comme l'illustre l'exemple suivant, le
2587 positionnement des notes n'est en rien influencé par le positionnement
2588 des lignes de la portée.
2589
2590 @warning{La propriété @code{'line-positions} écrase la propriété
2591 @code{'line-count}.  Le nombre de lignes d'une portée est implicitement
2592 défini par le nombre d'éléments dans la liste des valeurs de
2593 @code{'line-positions}.}
2594
2595 @lilypond[verbatim,quote,relative=1]
2596 \new Staff \with {
2597   \override StaffSymbol #'line-positions = #'(7 3 0 -4 -6 -7)
2598 }
2599 { a4 e' f b | d1 }
2600 @end lilypond
2601
2602 La largeur d'une portée, exprimée en espace de portée, peut être figée.
2603 L'espacement des objets inclus dans cette portée ne sera en rien affecté
2604 par ce réglage.
2605
2606 @lilypond[verbatim,quote,relative=1]
2607 \new Staff \with {
2608   \override StaffSymbol #'width = #23
2609 }
2610 { a4 e' f b | d1 }
2611 @end lilypond
2612
2613
2614 @node Extenseurs et prolongateurs
2615 @subsection Extenseurs et prolongateurs
2616 @translationof Spanners
2617
2618 De nombreux objets de notation musicale s'étendent sur plusieurs notes,
2619 voire même sur plusieurs mesures.  Il en va ainsi des liaisons,
2620 ligatures, crochets de nolet, crochets de reprise, crescendos, trilles
2621 ou glissandos.  Ces objets, que l'on englobe sous l'appellation
2622 @qq{d'extenseur}, sont pourvus de propriétés spécifiques destinées à
2623 contrôler leur apparence et leur comportement.  Un certain nombre de ces
2624 propriétés sont communes à tous les extenseurs, d'autres n'affectent que
2625 certains d'entre eux.
2626
2627 Tout extenseur dispose de la @code{spanner-interface}.  Quelques uns,
2628 tout particulièrement ceux chargés de dessiner une ligne droite entre
2629 deux objets, disposent aussi de la @code{line-spanner-interface}.
2630
2631
2632 @unnumberedsubsubsec Utilisation de @code{spanner-interface}
2633 @translationof Using the @code{spanner-interface}
2634
2635 Cette interface fournit deux propriétés qui s'appliquent à certains
2636 extenseurs.
2637
2638 @strong{@i{La propriété @code{minimum-length}}}
2639
2640 La longueur minimale d'un extenseur est déterminée par la propriété
2641 @code{minimum-length}.  Au plus sa valeur est élevée, au plus
2642 l'espacement des notes qui le bornent sera grand.  Forcer sa valeur
2643 restera néanmoins sans effet pour un certain nombre d'extenseurs dont la
2644 longueur dépend d'autres considérations.  Voici quelques exemples de
2645 mise en œuvre de cette propriété.
2646
2647 @ignore
2648 Cette propriété est pleinement fonctionnelle pour :
2649   Tie (liaison de prolongation)
2650   MultiMeasureRest (silence multimesures)
2651   Hairpin (soufflet)
2652   Slur (liaison d'articulation)
2653   PhrasingSlur (liaison de phrasé)
2654
2655 Cette propriété est fonctionnelle en présence d'un @emph{callback} :
2656   Glissando
2657   Beam (ligature)
2658
2659 Cette propriété est sans effet sur :
2660   LyricSpace
2661   LyricHyphen
2662   LyricExtender
2663   TextSpanner
2664   System
2665
2666 @end ignore
2667
2668 @lilypond[verbatim,quote,relative=2]
2669 a~a
2670 a
2671 % increase the length of the tie
2672 -\tweak #'minimum-length #5
2673 ~a
2674 @end lilypond
2675
2676 @lilypond[verbatim,quote,relative=2]
2677 a1
2678 \compressFullBarRests
2679 R1*23
2680 % increase the length of the rest bar
2681 \once \override MultiMeasureRest #'minimum-length = #20
2682 R1*23
2683 a1
2684 @end lilypond
2685
2686 @lilypond[verbatim,quote,relative=2]
2687 a \< a a a \!
2688 % increase the length of the hairpin
2689 \override Hairpin #'minimum-length = #20
2690 a \< a a a \!
2691 @end lilypond
2692
2693 Cette propriété permet aussi de jouer sur l'envergure d'une liaison
2694 d'articulation ou de phrasé.
2695
2696 @lilypond[verbatim,quote,relative=2]
2697 a( a)
2698 a
2699 -\tweak #'minimum-length #5
2700 ( a)
2701
2702 a\( a\)
2703 a
2704 -\tweak #'minimum-length #5
2705 \( a\)
2706 @end lilypond
2707
2708 Certains objets requièrent un appel explicite à la procédure
2709 @code{set-spacing-rods} pour que la propriété @code{minimum-length}
2710 produise ses effets.  La propriété @code{set-spacing-rods} doit alors
2711 prendre pour valeur @code{ly:spanner::set-spacing-rods}. Par exemple, la
2712 longueur minimale d'un glissando ne pourra être forcée tant que la
2713 propriété @code{springs-and-rods} n'est pas définie :
2714
2715 @lilypond[verbatim,quote,relative=1]
2716 % default
2717 e \glissando c'
2718
2719 % not effective alone
2720 \once \override Glissando #'minimum-length = #20
2721 e, \glissando c'
2722
2723 % effective only when both overrides are present
2724 \once \override Glissando #'minimum-length = #20
2725 \once \override Glissando #'springs-and-rods = #ly:spanner::set-spacing-rods
2726 e, \glissando c'
2727 @end lilypond
2728
2729 Il en va de même pour l'objet @code{Beam} (ligature) :
2730
2731 @lilypond[verbatim,quote,relative=1]
2732 % not effective alone
2733 \once \override Beam #'minimum-length = #20
2734 e8 e e e
2735
2736 % effective only when both overrides are present
2737 \once \override Beam #'minimum-length = #20
2738 \once \override Beam #'springs-and-rods = #ly:spanner::set-spacing-rods
2739 e8 e e e
2740 @end lilypond
2741
2742 @strong{@i{La propriété @code{to-barline}}}
2743
2744 La seconde propriété fournie par la @code{spanner-interface} est 
2745 @code{to-barline}.  Elle est activée par défaut, raison pour laquelle
2746 les soufflets et autres extenseurs finissant sur la première note d'une
2747 mesure s'arrêtent visuellement au niveau de la barre de mesure qui la
2748 précède.  Le fait de désactiver la propriété @code{to-barline} aura pour
2749 effet de prolonger l'extenseur au delà de la barre de mesure et jusqu'à
2750 la note qui le borne :
2751
2752 @lilypond[verbatim,quote,relative=2]
2753 a \< a a a a \! a a a \break
2754 \override Hairpin #'to-barline = ##f
2755 a \< a a a a \! a a a
2756 @end lilypond
2757
2758 Cette propriété n'est pas opérationnelle pour tous les extenseurs.  Il
2759 serait en effet quelque peu surprenant de l'activer (lui
2760 affecter @code{#t}) dans le cas d'une liaison d'articulation ou de
2761 phrasé !
2762
2763
2764 @unnumberedsubsubsec Utilisation de @code{line-spanner-interface}
2765 @translationof Using the @code{line-spanner-interface}
2766
2767 Un certain nombre d'objets disposent de la propriété
2768 @code{line-spanner-interface}, entre autres :
2769
2770 @itemize
2771 @item @code{DynamicTextSpanner}
2772 @item @code{Glissando}
2773 @item @code{TextSpanner}
2774 @item @code{TrillSpanner}
2775 @item @code{VoiceFollower}
2776 @end itemize
2777
2778 La routine en charge de dessiner le stencil de ces extenseurs est
2779 @code{ly:line-interface::print}.  Elle va déterminer les deux points
2780 extrêmes et dessiner entre eux une ligne du style requis.  Bien que la
2781 localisation des deux bornes de l'extenseur soit calculée à la volée,
2782 vous pouvez cependant forcer leur ordonnée (coordonnée-Y).  Les
2783 propriétés que vous devrez ajuster résident au deuxième niveau dans la
2784 hiérarchie, mais la syntaxe de la commande @code{\override} nécessaire
2785 demeure relativement simple :
2786
2787 @lilypond[relative=2,quote,verbatim]
2788 e2 \glissando b
2789 \once \override Glissando #'(bound-details left Y) = #3
2790 \once \override Glissando #'(bound-details right Y) = #-2
2791 e2 \glissando b
2792 @end lilypond
2793
2794 La propriété @code{Y} est valorisée en unités de @code{staff-space}, la
2795 ligne médiane de la portée correspondant au point zéro.  Pour le
2796 glissando qui nous occupe, il s'agit du @code{Y} à l'aplomb
2797 (coordonnée-X) du centre de la tête de chacune des deux notes, si tant
2798 est que la ligne doive s'étendre entre ces deux points.
2799
2800 Si le @code{Y} n'est pas défini, sa valeur sera calculée en fonction de
2801 la position verticale du point d'attachement de l'extenseur.
2802
2803 Dans le cas où l'extenseur est interrompu par un saut de ligne, les
2804 terminaisons à cet endroit se gèrent grâce aux sous-clés
2805 @code{left-broken} et @code{right-broken} de @code{bound-details}, comme
2806 ci-dessous :
2807
2808 @lilypond[relative=2,ragged-right,verbatim,quote]
2809 \override Glissando #'breakable = ##t
2810 \override Glissando #'(bound-details right-broken Y) = #-3
2811 c1 \glissando \break
2812 f1
2813 @end lilypond
2814
2815 Les sous-propriétés @code{left} et @code{right} du @code{bound-details}
2816 disposent d'autres clés modifiables de la même manière que @code{Y} :
2817
2818 @table @code
2819 @item Y
2820 Détermine l'ordonnée (coordonnée-Y) de la terminaison, avec un
2821 décalage en @code{staff-space} par rapport à la ligne médiane de la
2822 portée.  Il s'agit par défaut du centre de l'objet d'attachement, qui
2823 est le centre vertical de la tête de note pour un glissando.
2824
2825 En ce qui concerne les extenseurs horizontaux, tels ceux comportant du
2826 texte ou les trilles, il est fixé à @code{0}.
2827
2828 @item attach-dir
2829 Détermine le début et la fin de la ligne sur l'axe des abscisses,
2830 relativement à l'objet de rattachement.  Une valeur de @w{@code{-1}} (ou
2831 @code{LEFT}) aura pour effet de commencer ou terminer la ligne sur la
2832 gauche de la tête de note de rattachement.
2833
2834 @item X
2835 Il s'agit de l'abscisse (coordonnée-X) absolue de la terminaison.  Elle
2836 se calcule à la volée, et son forçage n'apporte rien de plus.
2837
2838 @item stencil
2839 Les extenseurs linéaires peuvent commencer ou finir par un symbole,
2840 enregistré dans cette sous-propriété.  Elle est conçue pour un usage
2841 interne, aussi nous vous conseillons de plutôt recourir à @code{text}.
2842
2843 @item text
2844 Il s'agit d'un @emph{markup} qui se poursuivra par l'extenseur. C'est la
2845 sous-propriété utilisée pour ajouter @i{cresc.}, @i{tr} ou autre texte à
2846 un extenseur horizontal.
2847
2848 @lilypond[quote,ragged-right,relative=2,verbatim]
2849 \override TextSpanner #'(bound-details left text)
2850    = \markup { \small \bold Slower }
2851 c2\startTextSpan b c a\stopTextSpan
2852 @end lilypond
2853
2854 @item stencil-align-dir-y
2855 @item stencil-offset
2856 Lorsqu'aucune de ces deux sous-propriétés n'est définie, le stencil est
2857 simplement positionné à l'extrémité, centré sur la ligne telle que
2858 définie par les sous-propriétés @code{X} et @code{Y}.  L'utilisation de
2859 @code{stencil-align-dir-y} ou @code{stencil-offset} permettra d'aligner
2860 le symbole verticalement par rapport au coin de la ligne :
2861
2862 @lilypond[relative=1,quote,verbatim]
2863 \override TextSpanner
2864   #'(bound-details left stencil-align-dir-y) = #-2
2865 \override TextSpanner
2866   #'(bound-details right stencil-align-dir-y) = #UP
2867
2868 \override TextSpanner
2869   #'(bound-details left text) = #"ggg"
2870 \override TextSpanner
2871   #'(bound-details right text) = #"hhh"
2872 c4^\startTextSpan c c c \stopTextSpan
2873 @end lilypond
2874
2875 Vous n'aurez pas manqué de constater qu'une valeur négative place le
2876 texte @emph{en haut} -- contrairement à ce que l'on serait en droit
2877 d'attendre.  Ceci est dû au fait que la valeur @w{@code{-1}} ou
2878 @code{DOWN} signifie @qq{aligner le bord @emph{inférieur} du texte sur
2879 la ligne d'extension}.  Une valeur égale à @code{1} ou @code{UP}
2880 alignera le sommet du texte sur cette ligne d'extension.
2881
2882 @item arrow
2883 L'activation de cette sous-propriété (lui affecter @code{#t}) ajoutera
2884 à l'extenseur une terminaison en flèche.
2885
2886 @item padding
2887 Cette sous-propriété contrôle l'espace qui doit séparer l'extrémité de
2888 la ligne et la fin réelle de l'extenseur.  Sans ce @qq{décalage}, le
2889 trait indiquant un glissando commencerait et finirait au beau milieu de
2890 chacune des têtes de note.
2891
2892 @end table
2893
2894 La fonction @code{\endSpanners} permet d'interrompre l'extenseur qui
2895 vient dès la note suivante.  Autrement dit, il ne s'étendra que sur une
2896 seule note, ou jusqu'à la prochaine barre de mesure si @code{to-barline}
2897 a été activé et que survient une barre avant la note suivante.
2898
2899 @lilypond[verbatim,quote,ragged-right,relative=2]
2900 \endSpanners
2901 c2 \startTextSpan c2 c2
2902 \endSpanners
2903 c2 \< c2 c2
2904 @end lilypond
2905
2906 L'utilisation de @code{\endSpanners} permet de s'affranchir d'insérer un
2907 @code{\stopTextSpan} pour clôturer un @code{\startTextSpan} ou un
2908 @code{\!} pour terminer un soufflet.
2909
2910 @seealso
2911 Référence des propriétés internes :
2912 @rinternals{Glissando},
2913 @rinternals{line-spanner-interface},
2914 @rinternals{TextSpanner},
2915 @rinternals{TrillSpanner},
2916 @rinternals{VoiceFollower}.
2917
2918
2919 @node Visibilité des objets
2920 @subsection Visibilité des objets
2921 @translationof Visibility of objects
2922
2923 @cindex objets, visibilité
2924 @cindex grobs, visibilité
2925 @cindex visibilité d'objets
2926
2927 La visibilité des objets de rendu se contrôle de quatre façons
2928 différentes : vous pouvez supprimer leur stencil, les rendre
2929 transparents, les coloriser en blanc ou bien encore forcer leur
2930 propriété @code{break-visibility}.  Les trois premières options peuvent
2931 s'appliquer à tous les objets, la dernière étant réservée aux objets
2932 @emph{changeables}.  Le Manuel d'initiation contient une introduction à
2933 ces quatre techniques, à la rubrique
2934 @rlearning{Visibilité et couleur des objets}.
2935
2936 LilyPond met en œuvre quelques techniques particulières adaptées à
2937 certains objets ; elles sont couvertes par une rubrique spécifique.
2938
2939 @menu
2940 * Suppression des stencils::
2941 * Transparence des objets::
2942 * Blanchiment des objets::
2943 * Utilisation de break-visibility::
2944 * Considérations spécifiques::
2945 @end menu
2946
2947
2948 @node Suppression des stencils
2949 @unnumberedsubsubsec Suppression des stencils
2950 @translationof Removing the stencil
2951
2952 @cindex stencil, suppression
2953
2954 Tout objet de rendu se voit attribuer une propriété @code{stencil}.
2955 Elle est par défaut définie par la fonction chargée de dessiner cet
2956 objet.  Lorsque cette propriété est désactivée de force -- en lui
2957 attribuant la valeur @code{#f} -- aucune fonction ne sera appelée ;
2958 l'objet ne sera donc pas dessiné.  Le retour au comportement par défaut
2959 s'opère à l'aide d'un @code{\revert}.
2960
2961 @lilypond[quote,verbatim,relative=1]
2962 a1 a
2963 \override Score.BarLine #'stencil = ##f
2964 a a
2965 \revert Score.BarLine #'stencil
2966 a a a
2967 @end lilypond
2968
2969
2970 @node Transparence des objets
2971 @unnumberedsubsubsec Transparence des objets
2972 @translationof Making objects transparent
2973
2974 @cindex transparent, objet
2975
2976 Tout objet de rendu dispose d'une propriété de transparence, qui est par
2977 défaut définie à @code{#f}.  Le fait de l'activer rendra l'objet
2978 transparent tout en préservant la place qu'il occupe.
2979
2980 @lilypond[quote,verbatim,relative=2]
2981 a4 a
2982 \once \override NoteHead #'transparent = ##t
2983 a a
2984 @end lilypond
2985
2986
2987 @node Blanchiment des objets
2988 @unnumberedsubsubsec Blanchiment des objets
2989 @translationof Painting objects white
2990
2991 @cindex objets, couleur
2992 @cindex couleur d'objet
2993 @cindex layers
2994 @cindex calque
2995 @cindex impression, ordre
2996 @cindex surimpression d'objets
2997 @cindex objets, surimpression
2998 @cindex grobs, superposition
2999
3000 Tout objet de rendu dispose d'une propriété couleur, par défaut définie
3001 à @code{black} (noir).  Le fait de la forcer à @code{white} (blanc)
3002 rendra l'objet indistinct du fond blanc.  Néanmoins, lorsque cet objet
3003 en recouvre d'autres, la couleur de leurs points de jonction dépendra de
3004 l'ordre dans lequel ils sont dessinés, ce qui peut laisser apparaître
3005 un fantôme de l'objet blanchi comme ci-dessous :
3006
3007 @lilypond[quote,verbatim,relative=2]
3008 \override Staff.Clef #'color = #white
3009 a1
3010 @end lilypond
3011
3012 Cet inconvénient peut être évité en modifiant l'ordre dans lequel les
3013 objets sont dessinés.  Chaque objet de rendu dispose d'une propriété
3014 @code{layer} (calque ou niveau) à laquelle est affecté un nombre entier.
3015 Les objets ayant la plus faible valeur sont dessinés en premier, puis
3016 les autres, de telle sorte qu'un objet ayant une valeur plus élevée les
3017 recouvrira.  La plupart des objet ont un @code{layer} valorisé
3018 à @code{1} -- quelques uns, dont @code{StaffSymbol} et
3019 @code{BarLine}, ont une valeur à @code{0}.  L'ordre d'impression
3020 d'objets ayant une même valeur de @code{layer} est indéterminé.
3021
3022 La clef de l'exemple précédent a par défaut un @code{layer}
3023 à @code{1} ; elle est donc dessinée après les lignes de la
3024 portée -- @code{layer} valorisé par défaut à @code{0} -- et donc
3025 les recouvre.  Pour changer cet état de fait, l'objet @code{Clef} doit
3026 avoir un @code{layer} de valeur inférieure, disons @w{@code{-1}}, pour
3027 pouvoir être dessiné avant.
3028
3029 @lilypond[quote,verbatim,relative=2]
3030 \override Staff.Clef #'color = #white
3031 \override Staff.Clef #'layer = #-1
3032 a1
3033 @end lilypond
3034
3035
3036 @node Utilisation de break-visibility
3037 @unnumberedsubsubsec Utilisation de break-visibility
3038 @translationof Using break-visibility
3039
3040 @c TODO Add making other objects breakable
3041
3042 @cindex break-visibility
3043
3044 La plupart des objets de rendu ne sont imprimés qu'une seule fois ;
3045 certains cependant, tels les barres de mesure, clefs, métriques ou
3046 armures, apparaîtront deux fois lors d'un saut de ligne -- une première
3047 fois en fin de ligne, puis à nouveau au début de la ligne suivante.  Ces
3048 objets, que l'on peut traiter de @emph{changeables} (@emph{breakable} en
3049 anglais) disposent de la propriété @code{break-visibility} spécialement
3050 chargée de contrôler leur visibilité aux trois endroits où il sont
3051 susceptibles d'apparaître : en début de ligne, en cours de ligne ou
3052 en fin de ligne -- si tant est qu'un changement s'y produise.
3053
3054 Par exemple, la métrique est imprimée par défaut au début de la première
3055 ligne, et nulle part ailleurs.  En cas de modification, une nouvelle
3056 métrique sera imprimée à l'endroit du changement.  Dans le cas où ce
3057 changement intervient en fin de ligne, la nouvelle métrique s'imprime au
3058 début de la ligne suivante, et une métrique @qq{de précaution} viendra
3059 se placer au bout de la ligne précédente.
3060
3061 Ce comportement est géré par la propriété @code{break-visibility}, dont
3062 vous trouverez une explication à la rubrique
3063 @rlearning{Visibilité et couleur des objets}.  Cette propriété est
3064 constituée d'un vecteur de trois booléens qui, dans l'ordre, déterminent
3065 si l'objet sera imprimé à la fin, en cours, et au début d'une ligne --
3066 on pourrait aussi dire avant un saut de ligne, là où il n'y a pas de
3067 saut de ligne, et après un saut de ligne.
3068
3069 Les huit combinaisons possibles sont aussi disponibles sous la forme de
3070 fonctions prédéfinies, regroupées dans le fichier
3071 @file{scm/output-lib.scm}.  Le tableau suivant vous les présente ;
3072 les trois dernières colonnes indiquent l'endroit où l'objet sera visible.
3073
3074 @multitable {@code{begin-of-line-invisible}} {@code{'#(#t #t #t. )}} {apres} {apres} {apres}
3075 @headitem Forme                      @tab Forme                  @tab Avant @tab Hors    @tab Après
3076 @headitem fonctionnelle              @tab vectorielle            @tab saut  @tab saut    @tab saut
3077
3078 @item @code{all-visible}             @tab @code{'#(#t #t #t)}    @tab oui    @tab oui    @tab oui
3079 @item @code{begin-of-line-visible}   @tab @code{'#(#f #f #t)}    @tab non    @tab non    @tab oui
3080 @item @code{center-visible}          @tab @code{'#(#f #t #f)}    @tab non    @tab oui    @tab non
3081 @item @code{end-of-line-visible}     @tab @code{'#(#t #f #f)}    @tab oui    @tab non    @tab non
3082 @item @code{begin-of-line-invisible} @tab @code{'#(#t #t #f)}    @tab oui    @tab oui    @tab non
3083 @item @code{center-invisible}        @tab @code{'#(#t #f #t)}    @tab oui    @tab non    @tab oui
3084 @item @code{end-of-line-invisible}   @tab @code{'#(#f #t #t)}    @tab non    @tab oui    @tab oui
3085 @item @code{all-invisible}           @tab @code{'#(#f #f #f)}    @tab non    @tab non    @tab non
3086 @end multitable
3087
3088 Les réglages par défaut de la propriété @code{break-visibility}
3089 diffèrent selon l'objet de rendu.  Le tableau suivant présente, pour la
3090 plupart des  objets comportant la propriété @code{break-visibility},
3091 ces réglages par défaut.
3092
3093 @multitable @columnfractions .3 .3 .4
3094
3095 @headitem Objet de rendu   @tab Contexte habituel  @tab Réglage par défaut
3096
3097 @c omit Ambitus as it appears not to be affected by break-visibility -td
3098 @c @item @code{Ambitus}          @tab as specified   @tab @code{begin-of-line-visible}
3099 @item @code{BarLine}             @tab @code{Score}          @tab calculé
3100 @item @code{BarNumber}           @tab @code{Score}          @tab @code{begin-of-line-visible}
3101 @c omit the following item until it can be explained -td
3102 @c @item @code{BreakAlignGroup}  @tab @code{Score}          @tab calculé
3103 @item @code{BreathingSign}       @tab @code{Voice}          @tab @code{begin-of-line-invisible}
3104 @item @code{Clef}                @tab @code{Staff}          @tab @code{begin-of-line-visible}
3105 @item @code{Custos}              @tab @code{Staff}          @tab @code{end-of-line-visible}
3106 @item @code{DoublePercentRepeat} @tab @code{Voice}          @tab @code{begin-of-line-invisible}
3107 @c omit KeyCancellation until it can be explained -td
3108 @c @item @code{KeyCancellation}  @tab ??             @tab @code{begin-of-line-invisible}
3109 @item @code{KeySignature}        @tab @code{Staff}          @tab @code{begin-of-line-visible}
3110 @c omit LeftEdge until it can be explained -td
3111 @c @item @code{LeftEdge}         @tab @code{Score}          @tab @code{center-invisible}
3112 @item @code{OctavateEight}       @tab @code{Staff}          @tab @code{begin-of-line-visible}
3113 @item @code{RehearsalMark}       @tab @code{Score}          @tab @code{end-of-line-invisible}
3114 @item @code{TimeSignature}       @tab @code{Staff}          @tab @code{all-visible}
3115
3116 @end multitable
3117
3118 Voici un exemple d'utilisation de la forme vectorielle pour contrôler la
3119 visibilité des barres de mesure :
3120
3121 @lilypond[quote,verbatim,relative=1,ragged-right]
3122 f4 g a b
3123 f4 g a b
3124 % Remove bar line at the end of the current line
3125 \once \override Score.BarLine #'break-visibility = #'#(#f #t #t)
3126 \break
3127 f4 g a b
3128 f4 g a b
3129 @end lilypond
3130
3131 Lors d'un forçage de @code{break-visibility} sous une forme vectorielle,
3132 les trois éléments doivent impérativement être mentionnés.  Ces formes
3133 vectorielles ne sont d'ailleurs pas prises en charge par tous les objets
3134 de rendu, et certaines combinaisons peuvent entraîner des erreurs ;
3135 nous citerons entre autres :
3136
3137 @itemize @bullet
3138 @item Une barre de mesure ne peut s'imprimer en début de ligne.
3139 @item Un numéro de mesure ne peut apparaître au début de la première
3140 ligne, à moins d'être différent de 1.
3141 @item Clef -- voir ci-après.
3142 @item Les répétitions en pourcentage sont soit toutes imprimées, soit
3143 aucune.  Vous devrez utiliser @code{begin-of-line-invisible} pour les
3144 voir et @code{all-invisible} pour les masquer.
3145 @item Armure -- voir ci-après.
3146 @item Indication d'octaviation -- voir ci-après.
3147 @end itemize
3148
3149
3150 @node Considérations spécifiques
3151 @unnumberedsubsubsec Considérations spécifiques
3152 @translationof Special considerations
3153
3154 @strong{@emph{Visibilité après changement explicite}}
3155
3156 @cindex armure, visibilité après changement explicite
3157 @cindex explicitKeySignatureVisibility
3158 @cindex clef, visibilité après changement explicite
3159 @cindex explicitClefVisibility
3160
3161 La propriété @code{break-visibility} contrôle la visibilité des armures
3162 ou changements de clef en début de ligne uniquement, donc après un saut.
3163 Elle ne produit aucun effet sur la visibilité d'une armure ou d'une clef
3164 après un changement explicite de tonalité ou de clef, ni en cours, ni en
3165 fin de ligne.  Dans l'exemple suivant, l'armure est présente même après
3166 le passage en si bémol majeur malgré l'activation de
3167 @code{all-invisible} (@emph{tous invisibles}).
3168
3169 @lilypond[quote,verbatim,relative=1,ragged-right]
3170 \key g \major
3171 f4 g a b
3172 % Try to remove all key signatures
3173 \override Staff.KeySignature #'break-visibility = #all-invisible
3174 \key bes \major
3175 f4 g a b
3176 \break
3177 f4 g a b
3178 f4 g a b
3179 @end lilypond
3180
3181 La visibilité lors de ces changements explicites d'armure ou de clef est
3182 géré respectivement par les propriétés
3183 @code{explicitKeySignatureVisibility} et @code{explicitClefVisibility}.
3184 Leur fonctionnement est en tout point identique à celui de la propriété
3185 @code{break-visibility} -- forme vectorielle à trois éléments ou forme
3186 fonctionnelle comme indiqué ci-avant.  Toutes deux sont attachées au
3187 contexte @code{Staff} (la portée) et non directement aux objets de
3188 rendu ; elles sont de ce fait introduites par une instruction
3189 @code{\set}.  Leur valeur par défaut est de toujours imprimer les objets
3190 -- réglage sur @code{all-visible}.  Ces deux propriétés gèrent
3191 uniquement la visibilité des armures et clefs lors d'un changement
3192 explicite, et en dehors d'un début de ligne ; il faudra en pareil
3193 cas forcer la @code{break-visibility} de ces objets pour les supprimer.
3194
3195 @lilypond[quote,verbatim,relative=1,ragged-right]
3196 \key g \major
3197 f4 g a b
3198 \set Staff.explicitKeySignatureVisibility = #all-invisible
3199 \override Staff.KeySignature #'break-visibility = #all-invisible
3200 \key bes \major
3201 f4 g a b \break
3202 f4 g a b
3203 f4 g a b
3204 @end lilypond
3205
3206 @strong{@emph{Visibilité des altérations de précaution}}
3207
3208 L'impression d'altérations de précaution au moment d'un changement
3209 explicite de tonalité sera annulée dès lors que vous aurez désactivé la
3210 propriété @code{printKeyCancellation} du contexte @code{Staff} :
3211
3212 @lilypond[quote,verbatim,relative=1,ragged-right]
3213 \key g \major
3214 f4 g a b
3215 \set Staff.explicitKeySignatureVisibility = #all-invisible
3216 \set Staff.printKeyCancellation = ##f
3217 \override Staff.KeySignature #'break-visibility = #all-invisible
3218 \key bes \major
3219 f4 g a b \break
3220 f4 g a b
3221 f4 g a b
3222 @end lilypond
3223
3224 Avec de tels réglages particuliers, seules les altérations accidentelles
3225 permettront d'indiquer le changement de tonalité.
3226
3227 @c TODO Add visibility of cautionary accidentals before notes
3228
3229 @strong{@emph{Barres de mesure automatiques}}
3230
3231 @cindex automaticBars
3232 @cindex barres de mesure, suppression
3233
3234 La désactivation de la propriété @code{automaticBars}, qui réside dans
3235 le contexte @code{Score}, permet de s'affranchir d'imprimer
3236 automatiquement les barres de mesure ; seules seront imprimées les
3237 barres explicitées à l'aide de la commande @code{\bar}.  Néanmoins, et
3238 contrairement à ce qui se passe avec la commande @code{\cadenzaOn}, le
3239 compteur de numéro de mesure continuera de s'incrémenter.  Les barres
3240 s'imprimeront à nouveau, au niveau où en est le compteur, dès que la
3241 propriété @code{automaticBars} sera réactivée.  Gardez à l'esprit que
3242 les sauts de ligne, lorsque cette propriété est désactivée,  ne peuvent
3243 intervenir qu'à l'occasion d'un @code{\bar} explicite.
3244
3245 @c TODO Add example
3246
3247 @strong{@emph{Clefs octaviées}}
3248
3249 @cindex octaviation, visibilité de la clef
3250 @cindex visibilité d'un clef octaviée
3251 @cindex clef, visibilité de l'octaviation
3252
3253 L'indication d'octaviation d'une clef est produite par l'objet de rendu
3254 @code{OctavateEight}.  Sa visibilité étant gérée par héritage direct de
3255 l'objet @code{Clef}, nul n'est besoin de forcer un quelconque
3256 @code{break-visibility} au niveau des objets @code{OctavateEight} pour
3257 éliminer une indication d'octaviation lorsque la clef est invisible.
3258
3259 Lors d'un changement explicite de clef, la propriété
3260 @code{explicitClefVisibility} gère à la fois le symbole de la clef et
3261 l'indication d'octaviation qui lui est attachée.
3262
3263 @seealso
3264 Manuel d'initiation :
3265 @rlearning{Visibilité et couleur des objets}
3266
3267
3268 @node Styles de ligne
3269 @subsection Styles de ligne
3270 @translationof Line styles
3271
3272 Certaines indications portées à l'attention de l'exécutant -- tels 
3273 @i{rallentando}, @i{accelerando} et @i{trilles} -- apparaissent sous la
3274 forme d'un texte qui peut s'étendre sur plusieurs mesures à l'aide d'une
3275 ligne parfois pointillée ou ondulée.
3276
3277 En matière de dessin du texte et des lignes, ces indications font appel
3278 aux mêmes routines que le glissando ; leur comportement peut donc
3279 être affiné selon les mêmes préceptes, au moyen de la routine
3280 @code{ly:line-interface::print} qui est tout spécialement chargée de
3281 dessiner les extenseurs.  Cette routine détermine l'emplacement exact
3282 des deux points extrêmes de l'extenseur, puis trace une ligne du style
3283 demandé entre ces deux points.
3284
3285 L'exemple ci-dessous indique les différents styles de ligne disponibles,
3286 ainsi que la manière de les spécifier.
3287
3288 @lilypond[relative=2,ragged-right,verbatim,quote]
3289 d2 \glissando d'2
3290 \once \override Glissando #'style = #'dashed-line
3291 d,2 \glissando d'2
3292 \override Glissando #'style = #'dotted-line
3293 d,2 \glissando d'2
3294 \override Glissando #'style = #'zigzag
3295 d,2 \glissando d'2
3296 \override Glissando #'style = #'trill
3297 d,2 \glissando d'2
3298 @end lilypond
3299
3300 Les points d'ancrage de l'extension sont calculés à la volée pour chaque
3301 objet graphique, mais rien ne vous empêche de les forcer :
3302
3303 @c TODO Complete
3304 @lilypond[relative=2,ragged-right,verbatim,quote]
3305 e2 \glissando f
3306 \once \override Glissando #'(bound-details right Y) = #-2
3307 e2 \glissando f
3308 @end lilypond
3309
3310 La valeur de @code{Y} est ainsi fixée à @w{@code{-2}} en ce qui concerne
3311 la borne droite.  Il en irait de même pour la borne gauche en spécifiant
3312 @code{left} (gauche) au lieu de @code{right} (droite).
3313
3314 En l'absence de réglage du @code{Y}, celui-ci est calculé à partir de
3315 l'emplacement vertical des points d'attache gauche et droit de
3316 l'extenseur.
3317
3318 De plus amples informations quant à l'ajustement des extenseurs font
3319 l'objet de la rubrique @ref{Extenseurs et prolongateurs}.
3320
3321
3322 @node Rotation des objets
3323 @subsection Rotation des objets
3324 @translationof Rotating objects
3325
3326 Qu'il s'agisse des objets de rendu ou d'éléments textuels sous forme de
3327 @emph{markup}, vous pouvez les faire pivoter selon vos désirs et à
3328 partir de n'importe quel point.  La méthode diffère cependant selon ce
3329 que vous désirez manipuler.
3330
3331 @menu
3332 * Rotation des objets de mise en forme::
3333 * Rotation des étiquettes::
3334 @end menu
3335
3336
3337 @node Rotation des objets de mise en forme
3338 @unnumberedsubsubsec Rotation des objets de mise en forme
3339 @translationof Rotating layout objects
3340
3341 Tout objet de rendu disposant de la @code{grob-interface} est
3342 susceptible de pivoter, grâce à la propriété @code{rotation}.  Celle-ci
3343 prend en argument une liste de trois éléments : l'angle de rotation
3344 -- dans le sens inverse des aiguilles d'une montre -- ainsi que les
3345 coordonnées @code{x} et @code{y} du point appartenant à l'objet en
3346 question et à partir duquel doit s'effectuer cette rotation.  L'angle
3347 est exprimé en degrés, les coordonnées en espaces de portée.
3348
3349 L'angle et les coordonnées ne peuvent se déterminer que par tâtonnement.
3350
3351 @cindex soufflet penché
3352
3353 Il existe assez peu de situation où faire pivoter un objet de mise en
3354 forme soit réellement opportun ; en voici une :
3355
3356 @lilypond[quote,verbatim,relative=1]
3357 g4\< e' d' f\!
3358 \override Hairpin #'rotation = #'(20 -1 0)
3359 g,,4\< e' d' f\!
3360 @end lilypond
3361
3362
3363 @node Rotation des étiquettes
3364 @unnumberedsubsubsec Rotation des étiquettes
3365 @translationof Rotating markup
3366
3367 Tout texte faisant l'objet d'un @emph{markup} peut pivoter selon
3368 n'importe quel angle, à l'aide de la commande @code{\rotate}.  Celle-ci
3369 prend deux arguments : l'angle de rotation exprimé en degrés --
3370 dans le sens inverse des aiguilles d'une montre -- et le texte à
3371 basculer.  Il ne s'agit pas ici de faire pivoter les extrémités du
3372 texte ; celles-ci récupéreront leurs coordonnées x et y du@emph{markup}
3373 pivoté.  Dans l'exemple ci-dessous, la propriété
3374 @code{outside-staff-priority} à été fixée à @code{#f} afin de désactiver
3375 l'évitement automatique des collisions qui pourrait repousser certains
3376 textes trop haut.
3377
3378 @c KEEP LY
3379 @lilypond[quote,verbatim,relative=1]
3380 \override TextScript #'outside-staff-priority = ##f
3381 g4^\markup { \rotate #30 "un sol" }
3382 b^\markup { \rotate #30 "un si" }
3383 des^\markup { \rotate #30 "un ré bémol" }
3384 fis^\markup { \rotate #30 "un fa dièse" }
3385 @end lilypond
3386
3387
3388 @node Retouches avancées
3389 @section Retouches avancées
3390 @translationof Advanced tweaks
3391
3392 Nous allons voir, au fil des paragraphes qui suivent, différentes
3393 approches permettant de fignoler l'apparence d'une partition.
3394
3395 @menu
3396 * Alignement des objets::
3397 * Regroupement vertical d'objets graphiques::
3398 * Modification des stencils::
3399 * Modification de l'allure des éléments::
3400 * Conteneurs requalifiants::
3401 @end menu
3402
3403 @seealso
3404 Manuel d'initiation :
3405 @rlearning{Autres sources de documentation},
3406 @rlearning{Retouche de partition}.
3407
3408 Manuel de notation :
3409 @ref{En quoi consiste la référence des propriétés internes},
3410 @ref{Modification de propriétés}.
3411
3412 Manuel d'extension :
3413 @rextend{Interfaces pour programmeurs}.
3414
3415 Fichiers d'initialisation :
3416 @file{scm/define-grobs.scm}.
3417
3418 Morceaux choisis :
3419 @rlsrnamed{Tweaks and overrides,Retouches}.
3420
3421 Référence des propriétés internes :
3422 @rinternals{All layout objects}.
3423
3424
3425 @node Alignement des objets
3426 @subsection Alignement des objets
3427 @translationof Aligning objects
3428
3429 Les objets graphiques disposant des interfaces
3430 @code{self-alignment-interface} ou @code{side-position-interface}
3431 peuvent s'aligner par rapport à un objet précédemment positionné, ce de
3432 différentes manières.  Ces objets sont référencés aux rubriques
3433 @rinternals{self-alignment-interface} et
3434 @rinternals{side-position-interface}.
3435
3436 Tous les objets graphiques ont un point de référence, une étendue
3437 horizontale et une étendue verticale.  L'étendue horizontale est
3438 représentée par une paire de nombres indiquant l'écart entre le point de
3439 référence et les bords gauche et droit -- l'écart à gauche étant
3440 négatif.  L'étendue verticale est représentée par une paire de nombres
3441 indiquant l'écart entre le point de référence et les bords inférieur et
3442 supérieur -- l'écart vers le bas étant négatif.
3443
3444 La position d'un objet sur la portée est donnée par la valeur des
3445 propriétés @code{X-offset} et @code{Y-offset}.  La valeur de
3446 @code{X-offset} indique l'écart en abscisse (coordonnée X) par rapport
3447 au point de référence de l'objet parent ; la valeur de
3448 @code{Y-offset} indique l'écart par rapport à la ligne médiane de la
3449 portée.  Les valeurs de @code{X-offset} et @code{Y-offset} peuvent être
3450 fournies arbitrairement, ou bien être calculé par des procédures
3451 spécifiques qui détermineront l'alignement par rapport à l'objet parent.
3452
3453 @warning{Nombre d'objets sont affectés par des considérations
3454 spécifiques en matière de positionnement ; jouer sur les valeurs de
3455 @code{X-offset} ou @code{Y-offset} se révélera inefficace en pareil
3456 cas, même si l'objet dispose de la @code{self-alignment-interface}.
3457 Fixer arbitrairement les propriétés @code{X-offset} ou @code{Y-offset}
3458 annihilera alors les effets de la propriété @code{self-alignment}
3459 correspondante.}
3460
3461 Par exemple, une altération peut se repositionner verticalement grâce à
3462 son @code{Y-offset} ; toute modification de son @code{X-offset}
3463 restera par contre sans effet.
3464
3465 Les indications de repère s'alignent sur des objets de rupture -- tels
3466 les barres de mesure, clefs, métriques et armures.  Certaines propriétés
3467 spécifiques -- dépendant de la @code{break-aligned-interface} --
3468 permettent de gérer le positionnement des indications de repère sur ces
3469 objets.
3470
3471 @menu
3472 * Détermination directe de X-offset et Y-offset::
3473 * Utilisation de side-position-interface::
3474 * Utilisation de self-alignment-interface::
3475 * Utilisation de break-aligned-interface::
3476 @end menu
3477
3478 @seealso
3479 Manuel de notation :
3480 @ref{Utilisation de break-aligned-interface}.
3481
3482 Manuel d'extension :
3483 @rextend{Fonctions de rappel}.
3484
3485
3486 @node Détermination directe de X-offset et Y-offset
3487 @unnumberedsubsubsec Détermination directe de @code{X-offset} et @code{Y-offset}
3488 @translationof Setting X-offset and Y-offset directly
3489
3490 Vous pouvez fournir, pour de nombreux objets, des valeurs numériques aux
3491 propriétés @code{X-offset} et @code{Y-offset}.  Voici par exemple une
3492 note avec indication du doigté tout d'abord avec un positionnement par
3493 défaut, puis repositionnement par modification successive du
3494 @code{X-offset} et du @code{Y-offset}.
3495
3496 @lilypond[verbatim,quote,relative=2]
3497 a-3
3498 a
3499 -\tweak #'X-offset #0
3500 -\tweak #'Y-offset #0
3501 -3
3502 a
3503 -\tweak #'X-offset #-1
3504 -\tweak #'Y-offset #1
3505 -3
3506 @end lilypond
3507
3508 @c TODO write more
3509
3510
3511 @node Utilisation de side-position-interface
3512 @unnumberedsubsubsec Utilisation de @code{side-position-interface}
3513 @translationof Using the side-position-interface
3514
3515 Un objet disposant de la @code{side-position-interface} peut se voir
3516 accolé à son voisin de telle sorte que les bords des deux objets se
3517 touchent.  Un tel objet peut se positionner au-dessus, en dessous, à
3518 droite ou à gauche de son parent.  Ce parent ne saurait être
3519 stipulé ; il est déterminé par l'ordre d'apparition des éléments
3520 dans le flux des saisies.  La plupart de ces objets ont pour parent une
3521 tête de note.
3522
3523 Les valeurs des propriétés @code{side-axis} et @code{direction}
3524 détermineront l'endroit où viendra se positionner l'objet, selon les
3525 préceptes suivants :
3526
3527 @c TODO add an example of each to the table
3528
3529 @multitable @columnfractions .3 .3 .3
3530 @headitem Propriété         @tab Propriété         @tab Positionnement
3531 @headitem @code{side-axis}  @tab @code{direction}  @tab
3532
3533 @item     @code{0}          @tab @code{-1}         @tab gauche
3534 @item     @code{0}          @tab @code{1}          @tab droite
3535 @item     @code{1}          @tab @code{-1}         @tab en dessous
3536 @item     @code{1}          @tab @code{1}          @tab au-dessus
3537
3538 @end multitable
3539
3540 Pour un @code{side-axis} à @code{0}, le @code{X-offset} devrait engager
3541 la procédure @code{ly:side-position-interface::x-aligned-side}.
3542 Celle-ci renverra la valeur adéquate de @code{X-offset} permettant
3543 d'accoler l'objet sur la droite ou sur la gauche de son parent, selon la
3544 valeur de @code{direction}.
3545
3546 Pour un @code{side-axis} à @code{1}, le @code{Y-offset} devrait engager
3547 la procédure @code{ly:side-position-interface::y-aligned-side}.
3548 Celle-ci renverra la valeur adéquate de @code{Y-offset} permettant
3549 d'accoler l'objet au-dessus ou en dessous de son parent, selon la
3550 valeur de @code{direction}.
3551
3552 @c TODO Add examples
3553
3554
3555 @node Utilisation de self-alignment-interface
3556 @unnumberedsubsubsec Utilisation de @code{self-alignment-interface}
3557 @translationof Using the self-alignment-interface
3558
3559 @emph{Réalignement d'objets horizontalement}
3560
3561 L'alignement horizontal d'un objet disposant de la
3562 @code{self-alignment-interface} dépend de la valeur de sa propriété
3563 @code{self-alignment-X}, si tant est que la propriété @code{X-offset} de
3564 cet objet engage la procédure
3565 @code{ly:self-alignment-interface::x-aligned-on-self}.
3566 La propriété @code{self-alignment-X} peut contenir un nombre réel,
3567 l'unité de base étant la moitié de l'étendue horizontale de l'objet.
3568 Une valeur négative décalera l'objet vers la droite, une valeur positive
3569 vers la gauche.  La valeur @code{0} permet de centrer l'objet sur
3570 le point de référence de son parent.  Une valeur de @w{@code{-1}}
3571 alignera le bord gauche de l'objet sur le point de référence de son
3572 parent, et une valeur de @code{1} alignera le bord droit de l'objet
3573 sur le point de référence de son parent.  Les valeurs symboliques
3574 @code{LEFT}, @code{CENTER} et @code{RIGHT} correspondent respectivement
3575 à @w{@code{-1}}, @code{0} et @code{1}.
3576
3577 En règle générale, la valeur de @code{self-alignment-X} se modifie à
3578 l'aide d'une commande @code{\override}.  Le recours à la commande
3579 @code{\tweak} permet de traiter séparément plusieurs annotations
3580 affectées à une même note :
3581
3582 @lilypond[quote,verbatim,relative=1]
3583 a'
3584 -\tweak #'self-alignment-X #-1
3585 ^"left-aligned"
3586 -\tweak #'self-alignment-X #0
3587 ^"center-aligned"
3588 -\tweak #'self-alignment-X #RIGHT
3589 ^"right-aligned"
3590 -\tweak #'self-alignment-X #-2.5
3591 ^"aligned further to the right"
3592 @end lilypond
3593
3594
3595 @emph{Réalignement d'objets verticalement}
3596
3597 L'alignement vertical suit le même principe : la propriété
3598 @code{Y-offset} doit alors engager la procédure
3599 @code{ly:self-alignment-interface::y-aligned-on-self}.  Toutefois, il
3600 arrive bien souvent que d'autres mécanismes interviennent dans
3601 l'alignement vertical.  La valeur de @code{Y-offset} n'étant que
3602 l'une des variables qui seront prises en compte, l'ajustement pour
3603 certains objets peut se révéler fastidieux.  L'unité de base est
3604 relativement réduite, puisqu'elle est de la moitié de l'étendue
3605 verticale de l'objet ; le nombre à fournir en argument pourrait
3606 donc être relativement élevé.  Une valeur de @w{@code{-1}}
3607 alignera le bord inférieur de l'objet sur le point de référence de son
3608 parent, et une valeur de @code{1} alignera le bord supérieur de
3609 l'objet sur le point de référence de son parent.  La
3610 valeur @code{0} permet de centrer l'objet sur le point de référence
3611 de son parent.  Les valeurs symboliques @code{DOWN}, @code{CENTER} et
3612 @code{UP} correspondent respectivement à @w{@code{-1}}, @code{0}
3613 et @code{1}.
3614
3615
3616 @emph{Réalignement d'objets sur les deux axes}
3617
3618 Définir à la fois @code{X-offset} et @code{Y-offset} permet de réaligner
3619 un objet sur les deux axes.
3620
3621 Dans l'exemple ci-dessous, nous ajustons l'indication de doigté de telle
3622 sorte qu'elle se place au plus près de la tête de note.
3623
3624 @lilypond[quote,verbatim,relative=2]
3625 a
3626 -\tweak #'self-alignment-X #0.5  % move horizontally left
3627 -\tweak #'Y-offset #ly:self-alignment-interface::y-aligned-on-self
3628 -\tweak #'self-alignment-Y #-1  % move vertically up
3629 -3  % third finger
3630 @end lilypond
3631
3632
3633 @ignore
3634 @unnumberedsubsubsec Utilisation de @code{aligned-on-parent}
3635
3636 @c Cannot document as they do not seem to operate consistently on all objects -td
3637 @c TODO investigate further
3638
3639 The @code{aligned-on-parent} procedures are used in the same way
3640 as the @code{aligned-on-self} procedures, they difference being
3641 that they permit an object to be aligned with the @emph{edges} of
3642 the parent rather than the parent's reference point.  The following
3643 example shows the difference:
3644
3645 @c TODO Add example
3646
3647 @lilypond[verbatim,quote]
3648 @end lilypond
3649
3650 @end ignore
3651
3652
3653 @ignore
3654 @c unnumberedsubsubsec Utilisation de @code{centered-on-parent}
3655
3656 @c Cannot document as they do not seem to operate consistently on all objects -td
3657 @c TODO investigate further
3658
3659 @end ignore
3660
3661 @c TODO The align-interface, BassFigureAlignment and VerticalAlignment
3662
3663
3664 @node Utilisation de break-aligned-interface
3665 @unnumberedsubsubsec Utilisation de @code{break-aligned-interface}
3666 @translationof Using the break-alignable-interface
3667
3668 @cindex alignement sur un objet
3669 @cindex break-align-symbols
3670
3671 Indications de repère et numéros de mesure peuvent s'aligner sur des
3672 objets de notation autres qu'une barre de mesure.  Parmi ces objets,
3673 nous citerons @code{ambitus}, @code{breathing-sign}, @code{clef},
3674 @code{custos}, @code{staff-bar}, @code{left-edge},
3675 @code{key-cancellation}, @code{key-signature}, et @code{time-signature}.
3676
3677 Ces indications et numéros de mesure sont par défaut centrés
3678 horizontalement au-dessus de l'objet :
3679
3680 @lilypond[verbatim,quote,relative=1]
3681 % The rehearsal mark will be centered above the Clef
3682 \override Score.RehearsalMark #'break-align-symbols = #'(clef)
3683 \key a \major
3684 \clef treble
3685 \mark "↓"
3686 e1
3687 % The rehearsal mark will be centered above the Time Signature
3688 \override Score.RehearsalMark #'break-align-symbols = #'(time-signature)
3689 \key a \major
3690 \clef treble
3691 \time 3/4
3692 \mark "↓"
3693 e2.
3694 % The rehearsal mark will be centered above the Breath Mark
3695 \override Score.RehearsalMark #'break-align-symbols = #'(breathing-sign)
3696 \key a \major
3697 \clef treble
3698 \time 4/4
3699 e1
3700 \breathe
3701 \mark "↓"
3702 @end lilypond
3703
3704 Les différents objets sur lesquels l'alignement pourrait intervenir
3705 seront regroupés dans une liste.  Si l'un des objets est invisible à
3706 l'endroit voulu, en raison d'un réglage de @code{break-visibility} ou
3707 bien par forçage de la visibilité des armures et clefs, le repère ou le
3708 numéro de mesure viendra s'aligner sur le premier élément de cette liste
3709 qui soit visible.  Dans le cas où aucun objet de la liste n'est visible,
3710 l'alignement se fera sur la barre de mesure ou, dans le cas où la barre
3711 de mesure est invisible, à l'endroit même où la barre prendrait place.
3712
3713 @lilypond[verbatim,quote,relative=1]
3714 % The rehearsal mark will be centered above the Key Signature
3715 \override Score.RehearsalMark #'break-align-symbols = #'(key-signature clef)
3716 \key a \major
3717 \clef treble
3718 \mark "↓"
3719 e1
3720 % The rehearsal mark will be centered above the Clef
3721 \set Staff.explicitKeySignatureVisibility = #all-invisible
3722 \override Score.RehearsalMark #'break-align-symbols = #'(key-signature clef)
3723 \key a \major
3724 \clef bass
3725 \mark "↓"
3726 gis,,1
3727 % The rehearsal mark will be centered above the Bar Line
3728 \set Staff.explicitKeySignatureVisibility = #all-invisible
3729 \set Staff.explicitClefVisibility = #all-invisible
3730 \override Score.RehearsalMark #'break-align-symbols = #'(key-signature clef)
3731 \key a \major
3732 \clef treble
3733 \mark "↓"
3734 e''1
3735 @end lilypond
3736
3737 L'alignement d'un repère sur un objet de notation peut se modifier,
3738 comme l'illustre l'exemple suivant.  Toutefois, si la partition comporte
3739 plusieurs portées, ce réglage devra apparaître dans chacune des portées.
3740
3741 @lilypond[verbatim,quote,relative=1]
3742 % The RehearsalMark will be centered above the Key Signature
3743 \override Score.RehearsalMark #'break-align-symbols = #'(key-signature)
3744 \key a \major
3745 \clef treble
3746 \time 4/4
3747 \mark "↓"
3748 e1
3749 % The RehearsalMark will be aligned with the left edge of the Key Signature
3750 \once \override Score.KeySignature #'break-align-anchor-alignment = #LEFT
3751 \mark "↓"
3752 \key a \major
3753 e1
3754 % The RehearsalMark will be aligned with the right edge of the Key Signature
3755 \once \override Score.KeySignature #'break-align-anchor-alignment = #RIGHT
3756 \key a \major
3757 \mark "↓"
3758 e1
3759 @end lilypond
3760
3761 Le bord gauche d'un repère peut se décaler arbitrairement sur la gauche
3762 ou la droite.  La valeur est exprimée en espaces de portée.
3763
3764 @lilypond[verbatim,quote,relative=1]
3765 % The RehearsalMark will be aligned with the left edge of the Key Signature
3766 % and then shifted right by 3.5 staff-spaces
3767 \override Score.RehearsalMark #'break-align-symbols = #'(key-signature)
3768 \once \override Score.KeySignature #'break-align-anchor = #3.5
3769 \key a \major
3770 \mark "↓"
3771 e1
3772 % The RehearsalMark will be aligned with the left edge of the Key Signature
3773 % and then shifted left by 2 staff-spaces
3774 \once \override Score.KeySignature #'break-align-anchor = #-2
3775 \key a \major
3776 \mark "↓"
3777 e1
3778 @end lilypond
3779
3780
3781 @node Regroupement vertical d'objets graphiques
3782 @subsection Regroupement vertical d'objets graphiques
3783 @translationof Vertical grouping of grobs
3784
3785 @c TODO Expand this section
3786
3787 Les objets @code{VerticalAlignment} et @code{VerticalAxisGroup}
3788 travaillent de concert.  Comme leur nom anglais l'indiquent,
3789 @code{VerticalAxisGroup} regroupe différents objets tels que les portées
3790 (@code{Staff}), les paroles (@code{Lyrics}) et ainsi de suite ;
3791 puis @code{VerticalAlignment} synchronise verticalement ces différents
3792 groupes.  En général, il n'y a qu'un seul @code{VerticalAlignment} pour
3793 l'ensemble de la partition, mais chaque contexte @code{Staff},
3794 @code{Lyrics} etc. possède son propre @code{VerticalAxisGroup}.
3795
3796
3797 @node Modification des stencils
3798 @subsection Modification des stencils
3799 @translationof Modifying stencils
3800
3801 Tout objet de rendu dispose d'une propriété @code{stencil} attachée à la
3802 @code{grob-interface}.  En règle générale, cette propriété référence
3803 par défaut une fonction spécifique à l'objet et taillée sur mesure pour
3804 fournir le symbole qui va le représenter dans l'output.  Par exemple,
3805 le réglage standard de la propriété @code{stencil} de l'objet
3806 @code{MultiMeasureRest} est @code{ly:multi-measure-rest::print}.
3807
3808 Le symbole standard d'un objet quel qu'il soit peut être remplacé à
3809 partir du moment où la propriété @code{stencil} référence une procédure
3810 différente et écrite à cet effet.  Ceci requiert une bonne maîtrise du
3811 fonctionnement interne de LilyPond, mais est grandement facilité dans
3812 bien des cas et permet d'obtenir le résultat escompté.
3813
3814 En effet, rien ne nous interdit, à partir de la propriété
3815 @code{stencil}, d'appeler la procédure qui génère du texte,
3816 @code{ly:text-interface::print} en l'occurrence, et d'adjoindre à l'objet
3817 une propriété @code{text} qui contiendra, sous forme de @emph{markup},
3818 le symbole à dessein.  Grâce à l'extrême flexibilité des @emph{markups},
3819 vous pourrez parvenir à bien des choses -- voir à ce sujet
3820 @ref{Éléments graphiques dans du texte formaté}.
3821
3822 C'est la technique employée ici, où l'une des têtes de note est
3823 remplacée par une croix inscrite dans un cercle :
3824
3825 @lilypond[verbatim,quote]
3826 XinO = {
3827   \once \override NoteHead  #'stencil = #ly:text-interface::print
3828   \once \override NoteHead #'text = \markup {
3829     \combine
3830       \halign #-0.7 \draw-circle #0.85 #0.2 ##f
3831       \musicglyph #"noteheads.s2cross"
3832   }
3833 }
3834 \relative c'' {
3835   a a \XinO a a
3836 }
3837 @end lilypond
3838
3839 Tous les glyphes de la fonte Feta sont accessibles à l'aide de la
3840 commande de @emph{markup} @code{\musicglyph} -- voir
3841 @ref{La fonte Feta}.
3842
3843 @c TODO Add inserting eps files or ref to later
3844
3845 @c TODO Add inserting Postscript or ref to later
3846
3847 @seealso
3848 Manuel de notation :
3849 @ref{Text markup commands},
3850 @ref{Éléments graphiques dans du texte formaté},
3851 @ref{La fonte Feta},
3852 @ref{Mise en forme du texte}.
3853
3854
3855 @node Modification de l'allure des éléments
3856 @subsection Modification de l'allure des éléments
3857 @translationof Modifying shapes
3858
3859 @menu
3860 * Modification des liaisons::
3861 @end menu
3862
3863
3864 @node Modification des liaisons
3865 @unnumberedsubsubsec Modification des liaisons
3866 @translationof Modifying ties and slurs
3867
3868 @cindex liaison, modification
3869 @cindex Bézier, points de contrôle d'une courbe
3870 @cindex points de contrôle, courbe de Bézier
3871
3872 Les liaisons, qu'elles soient de prolongation, d'articulation ou de
3873 phrasé, sont dessinées sous la forme de courbes de Bézier de degré
3874 trois.  Lorsque l'aspect de la liaison automatiquement calculé n'est pas
3875 satisfaisant,  il peut être modifié manuellement, en fournissant
3876 explicitement les quatre points de contrôle qui permettront de définir
3877 cette courbe.
3878
3879 Quatre points définissent une courbe de Bézier cubique. Les premier et
3880 quatrième points sont les points de départ et d'arrivée de la
3881 courbe ; les deux autres points de contrôle -- P1 et P2 -- en
3882 détermineront l'allure.  La courbe se trace en partant du point P0, en
3883 se dirigeant vers P1 et en arrivant au point P3 selon la direction
3884 @w{P2-P3}.  La courbe est à l'intérieur de l'enveloppe convexe des
3885 points de contrôle.
3886
3887 Voici par exemple une liaison de prolongation dont l'allure n'est pas
3888 des plus heureuses, même en optant pour un @code{\tieDown}.
3889
3890 @lilypond[verbatim,quote,relative=1]
3891 <<
3892   { e1~ e }
3893 \\
3894   { r4 <g c,> <g c,> <g c,> }
3895 >>
3896 @end lilypond
3897
3898 L'un des moyens d'améliorer cette liaison consiste à modifier
3899 manuellement ses quatre points de contrôle.
3900
3901 Les coordonnées des points de contrôle sont données en unités d'espace
3902 de portée.  L'abscisse est relative au point de référence de la note de
3903 départ de la liaison ; l'ordonnée est relative à la ligne médiane
3904 de la portée.  Les différentes coordonnées sont entrées sous la forme
3905 d'une liste de quatre paires de nombres décimaux (ou nombres réels).
3906 L'une des manières de procéder consiste à tout d'abord estimer les
3907 coordonnées des deux extrémités puis, par tâtonnement, déterminer les
3908 deux points intermédiaires.
3909
3910 Remarque intéressante au sujet des courbes : une courbe sera
3911 symétrique si ses points de contrôle sont symétriques.  L'une des
3912 propriétés avantageuses des courbes de Bézier est que leur
3913 transformation -- déplacement, rotation ou échelonnement -- est
3914 réalisable en simplement corrigeant de manière identique ses points de
3915 contrôle.
3916
3917 Pour l'exemple qui nous occupe, l'adaptation suivante nous permet
3918 d'obtenir un résultat plutôt satisfaisant.  Notez bien l'endroit où
3919 cette adaptation est stipulée : juste avant la note de départ de la
3920 liaison.
3921
3922 @lilypond[verbatim,quote,relative=1]
3923 <<
3924   {
3925     \once \override Tie
3926       #'control-points = #'((1 . -1) (3 . 0.6) (12.5 . 0.6) (14.5 . -1))
3927      e1 ~ e
3928   }
3929 \\
3930   { r4 <g c,> <g c,> <g c,> }
3931 >>
3932 @end lilypond
3933
3934 @knownissues
3935 Lorsque plusieurs liaisons, quelle qu'en soit la nature, commencent au
3936 même moment, jouer sur la propriété @code{control-points} est
3937 impossible, et la commande @code{\tweak} inefficace.  Vous pouvez
3938 néanmoins influer sur la propriété @code{tie-configuration} de l'objet
3939 @code{TieColumn} pour déterminer la ligne de départ et l'orientation.
3940
3941 @seealso
3942 Référence des propriétés internes :
3943 @rinternals{TieColumn}.
3944
3945
3946 @node Conteneurs requalifiants
3947 @subsection Conteneurs requalifiants
3948 @translationof Unpure-pure containers
3949
3950 @cindex Scheme, pure containers
3951 @cindex Scheme, unpure containers
3952 @cindex pure containers, Scheme
3953 @cindex unpure containers, Scheme
3954 @cindex espacement horizontal, affinage
3955
3956 Les conteneurs requalifiants permettent de faciliter le calcul des
3957 espacements en cas de modification du @emph{Y-axis} -- plus
3958 particulièrement les composantes @code{Y-offset} et @code{Y-extent} -- à
3959 l'aide d'une fonction scheme en lieu et place de valeurs.
3960
3961 L'envergure verticale (@code{Y-extent}) de certains objets dépend de la
3962 propriété @code{stencil} ; jouer sur leur stencil requiert alors une
3963 intervention supplémentaire au niveau du @code{Y-extent} à l'aide d'un
3964 conteneur transitoire.  Lorsqu'une fonction affecte un @code{Y-offset} ou
3965 un @code{Y-extent}, cela déclenche la détermination des sauts de ligne
3966 de manière anticipée dans la séquence des traitements.  Il en résulte
3967 que cette opération n'est en fait pas exécutée ; elle renvoie
3968 habituellement @code{0} ou @code{'(0 . 0)}, ce qui peut engendrer des
3969 collisions.  Une fonction @qq{pure} évitera d'avorter la construction
3970 des propriétés ou objets, qui de ce fait verront leurs arguments liés à
3971 la verticalité (@code{Y-axis}) correctement évalués.
3972
3973 Il existe actuellement une trentaine de fonctions que l'on peut
3974 qualifier de @qq{pures}.  Le recours à un conteneur transitoire permet
3975 de requalifier une fonction de telle sorte qu'elle soit reconnue comme
3976 @qq{pure} et soit donc évaluée @strong{avant} détermination des sauts de
3977 ligne -- l'espacement horizontal sera de fait ajusté en temps et en heure.
3978 La fonction @qq{impure} sera ensuite évaluée @strong{après} le
3979 positionnement des sauts de ligne.
3980
3981 @warning{Il n'est pas toujours facile d'avoir l'assurance qu'une
3982 fonction soit qualifiée de @qq{pure} ; aussi nous vous recommandons
3983 d'éviter d'utiliser les objets @code{Beam} or @code{VerticalAlignment}
3984 lorsque vous désirez en créer une.}
3985
3986 Un conteneur requalifiant se construit selon la syntaxe
3987
3988 @code{(ly:make-unpure-pure-container f0 f1)}
3989
3990 où @code{f0} est une fonction prenant @var{n} arguments (@var{n_>=_1}),
3991 le premier devant être l'objet en question ; il s'agit de la
3992 fonction dont le résultat sera réutilisé.  @var{f1} est la fonction qui
3993 sera qualifiée de @qq{pure}.  Elle prend @var{n_+_2} arguments, le
3994 premier devant être lui aussi l'objet en question, et les second et
3995 troisième étant respectivement les @qq{point de départ} (@var{start}) et
3996 @qq{point d'arrivée} (@var{end}).
3997
3998 @var{start} et @var{end} sont dans tous les cas des valeurs fictives qui
3999 trouveront leur utilité dans le cas d'objets de type @code{Spanner},
4000 tels les soufflets (@code{Hairpin}) ou barres de ligature (@code{Beam}),
4001 en retournant les différentes estimations de hauteur basées sur leurs
4002 début et fin d'extension.
4003
4004 Viennent ensuite les autres arguments de la fonction initiale @code{f0}
4005 -- autrement dit aucun si @var{n_=_1}.
4006
4007 Les résultats de la deuxième fonction (@code{f1}) permettent une
4008 approximation des valeurs qui seront ensuite utilisées par la fonction
4009 initiale aux fins d'ajustement lors des phases ultérieures d'espacement.
4010
4011 @lilypond[verbatim,quote,ragged-right]
4012 #(define (square-line-circle-space grob)
4013 (let* ((pitch (ly:event-property (ly:grob-property grob 'cause) 'pitch))
4014       (notename (ly:pitch-notename pitch)))
4015  (if (= 0 (modulo notename 2))
4016      (make-circle-stencil 0.5 0.0 #t)
4017      (make-filled-box-stencil '(0 . 1.0)
4018                               '(-0.5 . 0.5)))))
4019
4020 squareLineCircleSpace = {
4021   \override NoteHead #'stencil = #square-line-circle-space
4022 }
4023
4024 smartSquareLineCircleSpace = {
4025   \squareLineCircleSpace
4026   \override NoteHead #'Y-extent =
4027    #(ly:make-unpure-pure-container
4028       ly:grob::stencil-height
4029       (lambda (grob start end) (ly:grob::stencil-height grob)))
4030 }
4031
4032 \new Voice \with { \remove "Stem_engraver" }
4033 \relative c'' {
4034   \squareLineCircleSpace
4035   cis4 ces cisis c
4036   \smartSquareLineCircleSpace
4037   cis4 ces cisis c
4038 }
4039 @end lilypond
4040
4041 La première mesure de l'exemple ci-dessus ne fait pas appel à un
4042 conteneur requalifiant ; le moteur d'espacement n'a donc aucune
4043 connaissance de la largeur des têtes de note et ne peut empêcher
4044 qu'elles chevauchent les altérations.  Dans la deuxième mesure, par
4045 contre, le recours à un conteneur requalifiant informe le moteur
4046 d'espacement de la largeur des têtes de note ; les collisions sont
4047 alors évitées du fait de l'espace réservé à chacune des têtes.
4048
4049 Lorsqu'il s'agit de calculs simples, les fonctions, tant pour la partie
4050 @qq{pure} que pour la partie @qq{impure}, peuvent être identiques au
4051 détail près du nombre d'arguments utilisés ou du domaine d'intervention.
4052
4053 @warning{Le fait de qualifier une fonction de @qq{pure} alors qu'elle ne
4054 l'est pas peut générer des résultats imprévisibles.}
4055
4056
4057 @node Utilisation de fonctions musicales
4058 @section Utilisation de fonctions musicales
4059 @translationof Using music functions
4060
4061 @c TODO -- add @seealso, etc. to these subsections
4062
4063 Une adaptation ou un affinage qui devient récurrent parce que doit
4064 s'appliquer à différentes expressions musicales peut faire l'objet d'une
4065 @emph{fonction musicale}.  Nous ne traiterons ici que des fonctions de
4066 @emph{substitution}, dont le but est de substituer une variable en un
4067 bout de code LilyPond.  D'autres fonctions, plus complexes, sont
4068 abordées au chapitre @rextend{Fonctions musicales}.
4069
4070 @menu
4071 * Syntaxe d'une fonction de substitution::
4072 * Exemples de fonction de substitution::
4073 @end menu
4074
4075
4076 @node Syntaxe d'une fonction de substitution
4077 @subsection Syntaxe d'une fonction de substitution
4078 @translationof Substitution function syntax
4079
4080 La rédaction d'une fonction chargée de substituer du code LilyPond à une
4081 variable est chose relativement aisée.  Une telle fonction est de la
4082 forme
4083
4084 @example
4085 fonction =
4086 #(define-music-function
4087      (parser location @var{arg1} @var{arg2} @dots{})
4088      (@var{type1?} @var{type2?} @dots{})
4089    #@{
4090      @var{@dots{}musique@dots{}}
4091    #@})
4092 @end example
4093
4094 @noindent
4095
4096
4097 @multitable @columnfractions .33 .66
4098 @item @code{@var{argN}}
4099 @tab @var{n}ième argument.
4100
4101 @item @code{@var{typeN?}}
4102 @tab un @emph{type de prédicat} Scheme pour lequel @code{@var{argN}}
4103 doit renvoyer @code{#t}.
4104
4105 @item @code{@var{@dots{}musique@dots{}}}
4106 @tab du code LilyPond tout ce qu'il y a de plus ordinaire, avec des
4107 @code{$} (là où seule une construction LilyPond est autorisée) et des
4108 @code{#} (lorsqu'il s'agit d'une valeur en Scheme ou d'un argument de
4109 fonction musicale) pour référencer les arguments (par ex. @samp{#arg1}).
4110 @end multitable
4111
4112 Les arguments @code{parser} et @code{location} sont obligatoires ;
4113 ils sont utilisés dans certaines situations évoluées, comme indiqué dans
4114 le manuel d'extension des fonctionnalités à au chapitre
4115 @rextend{Fonctions musicales}.  Assurez-vous bien de ne pas les omettre
4116 dans vos fonctions de substitution.
4117
4118 La liste des types de prédicat est elle aussi obligatoire.  Voici
4119 quelques uns des types de prédicat les plus utilisés dans les fonctions
4120 musicales :
4121
4122 @example
4123 boolean?
4124 cheap-list?  @emph{(au lieu de }@qq{list?}@emph{, pour accélérer le traitement)}
4125 ly:duration?
4126 ly:music?
4127 ly:pitch?
4128 markup?
4129 number?
4130 pair?
4131 string?
4132 symbol?
4133 @end example
4134
4135 @noindent
4136 Une liste plus fournie est disponible à l'annexe
4137 @ref{Types de prédicats prédéfinis}.  Vous pouvez par ailleurs définir
4138 vos propres types de prédicat.
4139
4140 @seealso
4141 Manuel de notation :
4142 @ref{Types de prédicats prédéfinis}.
4143
4144 Manuel d'extension :
4145 @rextend{Fonctions musicales}.
4146
4147 Fichiers d'initialisation :
4148 @file{lily/music-scheme.cc},
4149 @file{scm/c++.scm},
4150 @file{scm/lily.scm}.
4151
4152
4153 @node Exemples de fonction de substitution
4154 @subsection Exemples de fonction de substitution
4155 @translationof Substitution function examples
4156
4157 La présente rubrique regroupe quelques exemples de fonction
4158 substitutive.  Le propos est ici d'illustrer les possibilités qu'offrent
4159 les fonctions de substitution simple.
4160
4161 Dans ce premier exemple, nous définissons une fonction dans le but de
4162 simplifier le réglage du décalage d'une annotation (un
4163 @code{TextScript}).
4164
4165 @lilypond[quote,verbatim,ragged-right]
4166 padText =
4167 #(define-music-function
4168      (parser location padding)
4169      (number?)
4170    #{
4171      \once \override TextScript #'padding = #padding
4172    #})
4173
4174 \relative c''' {
4175   c4^"piu mosso" b a b
4176   \padText #1.8
4177   c4^"piu mosso" d e f
4178   \padText #2.6
4179   c4^"piu mosso" fis a g
4180 }
4181 @end lilypond
4182
4183 Nous pouvons utiliser autre chose que des nombres au sein d'une
4184 fonction, y compris une expression musicale :
4185
4186 @lilypond[quote,verbatim,ragged-right]
4187 custosNote =
4188 #(define-music-function
4189      (parser location note)
4190      (ly:music?)
4191    #{
4192      \tweak NoteHead #'stencil #ly:text-interface::print
4193      \tweak NoteHead #'text
4194         \markup \musicglyph #"custodes.mensural.u0"
4195      \tweak Stem #'stencil ##f
4196      $note
4197    #})
4198
4199 \relative c' { c4 d e f \custosNote g }
4200 @end lilypond
4201
4202 Une fonction de substitution peut traiter plusieurs arguments :
4203
4204 @lilypond[quote,verbatim,ragged-right]
4205 tempoPadded =
4206 #(define-music-function
4207      (parser location padding tempotext)
4208      (number? markup?)
4209    #{
4210      \once \override Score.MetronomeMark #'padding = #padding
4211      \tempo \markup { \bold #tempotext }
4212    #})
4213
4214 \relative c'' {
4215   \tempo \markup { "Low tempo" }
4216   c4 d e f g1
4217   \tempoPadded #4.0 "High tempo"
4218   g4 f e d c1
4219 }
4220 @end lilypond
4221
4222 @c TODO: add appropriate @@ref's here.
4223