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