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