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