1 @c -*- coding: utf-8; mode: texinfo; documentlanguage: fr -*-
3 Translation of GIT committish: 904ea9fed4c66f5b86f3ac6ffb9fa273f082f371
5 When revising a translation, copy the HEAD committish of the
6 version that you are working on. For details, see the Contributors'
7 Guide, node Updating translation committishes..
12 @c Translators: Valentin Villenave, Jean-Charles Malahieude
13 @c Translation checkers: Gilles Thibault
16 @node Modification des réglages prédéfinis
17 @chapter Modification des réglages prédéfinis
18 @translationof Changing defaults
20 LilyPond est conçu pour engendrer, par défaut, des partitions de la
21 plus haute qualité. Cependant, on peut parfois avoir à modifier cette
22 mise en forme par défaut. Celle-ci est réglée par tout un ensemble de
23 @qq{leviers et manettes} plus connus sous le terme de @qq{propriétés},
24 dont ce chapitre ne cherche pas à faire l'inventaire exhaustif -- le
25 chapitre @rlearning{Retouche de partition} du manuel d'initiation vous
26 en propose un aperçu. Le propos est plutôt ici de mettre en évidence
27 les différents groupes auxquels s'apparentent ces contrôles, et
28 d'expliquer comment trouver le bon levier pour obtenir tel ou tel effet
31 @cindex Référence des propriétés internes
33 Les moyens de contrôle des différents réglages sont décrits dans un
34 document séparé, @rinternalsnamed{Top,la référence des propriétés
35 internes}. Ce guide répertorie toutes les variables, fonctions et
36 autres options que LilyPond met à votre disposition. Il est consultable
37 @c leave the @uref as one long line.
38 @uref{http://@/lilypond@/.org/@/doc/@/stable/@/Documentation/@/internals/,en ligne},
39 au format HTML ; il est également inclus dans la documentation
40 fournie avec le logiciel.
42 En sous-main, LilyPond se sert du langage Scheme (un dérivé du LISP)
43 comme infrastructure. Modifier les choix de mise en page revient à
44 pénétrer dans les entrailles du programme, et de ce fait requiert
45 l'emploi du Scheme. Les fragments de Scheme, dans un fichier
46 @file{.ly}, sont introduits par le caractère @emph{hash} (@code{#}),
47 improprement surnommé @qq{dièse}.
48 @footnote{Le @rextend{Tutoriel Scheme} fournit quelques notions de base
49 pour saisir des nombres, des listes, des chaînes de caractères ou des
53 * Contextes d'interprétation::
54 * En quoi consiste la référence des propriétés internes::
55 * Modification de propriétés::
56 * Propriétés et contextes utiles::
57 * Retouches avancées::
58 * Utilisation de fonctions musicales::
62 @node Contextes d'interprétation
63 @section Contextes d'interprétation
64 @translationof Interpretation contexts
66 Cette section traite des contextes.
69 * Tout savoir sur les contextes::
70 * Création d'un contexte::
71 * Conservation d'un contexte::
72 * Modification des greffons de contexte::
73 * Modification des réglages par défaut d'un contexte::
74 * Définition de nouveaux contextes::
75 * Ordonnancement des contextes::
80 @rlearning{Contextes et graveurs}.
82 Fichiers d'initialisation :
83 @file{ly/engraver-init.ly},
84 @file{ly/performer-init.ly}.
87 @rlsrnamed{Contexts and engravers, Contextes et graveurs}.
89 Référence des propriétés internes :
90 @rinternals{Contexts},
91 @rinternals{Engravers and Performers}.
94 @node Tout savoir sur les contextes
95 @subsection Tout savoir sur les contextes
96 @translationof Contexts explained
99 @c TODO Rethink and rewrite
101 >> > > - list of contexts: my *danger unmaintainable*
102 >> > > alarm just went off. I'm
104 I knew it would... And leaving out some of them is perfectly fine
106 I do think that a list like this, with the main contexts and a
108 description of what they do (perhaps also with a note about what
110 behavior is associated with each of them, but this may be
112 should be there, and then we could simply list the remaining ones
114 further explanation and with links to the IR.
117 @c TODO Improve layout, order and consistency of wording -td
119 @c TODO Add introduction which explains contexts in generality -td
121 @c TODO Describe propagation of property values -td
123 Les contextes sont hiérarchisés :
126 * Score -- le père de tous les contextes::
127 * Contextes de haut niveau -- les systèmes::
128 * Contextes de niveau intermédiaire -- les portées::
129 * Contextes de bas niveau -- les voix::
133 @node Score -- le père de tous les contextes
134 @unnumberedsubsubsec Score -- le père de tous les contextes
135 @translationof Score - the master of all contexts
137 Il s'agit en l'occurrence du contexte le plus élevé, autrement dit le
138 plus important, en matière de notation. En effet, c'est au niveau de la
139 partition -- @emph{score} en anglais -- que se gèrent le temps et la
140 tonalité ; c'est donc là qu'il faut s'assurer que les différents
141 éléments, tels les clefs, métriques et armures sont bien répercutés sur
144 Dès lors que LilyPond rencontre un bloc @code{\score @{@dots{}@}}
145 ou @code{\layout @{@dots{}@}}, se crée implicitement un contexte
149 @node Contextes de haut niveau -- les systèmes
150 @unnumberedsubsubsec Contextes de haut niveau -- les systèmes
151 @translationof Top-level contexts - staff containers
153 De nombreuses partitions sont écrites sur plus d'une portée. Ces
154 portées peuvent être regroupées de différentes manières.
156 @strong{@emph{StaffGroup}}
158 Le groupe de portées est attaché par un crochet, et les barres de mesure
159 sont d'un seul tenant, de la première à la dernière portée. Le
160 @code{StaffGroup} constitue le regroupement le plus simple.
162 @strong{@emph{ChoirStaff}}
164 Ce regroupement est identique au @code{StaffGroup}, à ceci près que les
165 barres de mesure ne traversent pas l'espace inter-portées.
167 @strong{@emph{GrandStaff}}
169 Le groupe de portées est attaché par une accolade sur la gauche, et les
170 barres de mesure sont d'un seul tenant.
172 @strong{@emph{PianoStaff}}
174 Ce regroupement est identique au @code{GrandStaff}, à ceci près que le
175 nom de l'instrument sera directement attaché au système.
178 @node Contextes de niveau intermédiaire -- les portées
179 @unnumberedsubsubsec Contextes de niveau intermédiaire -- les portées
180 @translationof Intermediate-level contexts - staves
182 @strong{@emph{Staff}}
184 La portée prend en charge les clefs, barres de mesure, armures et les
185 altérations accidentelles. Un contexte @code{Staff} peut contenir
186 plusieurs contextes @code{Voice}.
188 @strong{@emph{RhythmicStaff}}
190 De même nature qu'un @code{Staff}, mais destiné à n'imprimer que du
191 rythme. Quelle que soit la hauteur, les notes seront imprimées sur une
192 même et unique ligne.
194 @strong{@emph{TabStaff}}
196 Ce contexte permet de générer des tablatures. La mise en forme par
197 défaut correspond à une tablature pour guitare, sur six lignes.
199 @strong{@emph{DrumStaff}}
201 Contexte dévolu tout spécialement aux parties de percussion ; il
202 peut contenir plusieurs @code{DrumVoice}.
204 @strong{@emph{VaticanaStaff}}
206 Identique au contexte @code{Staff}, à ceci près qu'il est tout
207 particulièrement adapté au grégorien.
209 @strong{@emph{MensuralStaff}}
211 Identique au contexte @code{Staff}, à ceci près qu'il est tout
212 particulièrement adapté au style mensural de musique ancienne.
215 @node Contextes de bas niveau -- les voix
216 @unnumberedsubsubsec Contextes de bas niveau -- les voix
217 @translationof Bottom-level contexts - voices
219 Les contextes de niveau @qq{voix} initialisent un certain nombre de
220 propriétés et activent les graveurs appropriés. S'agissant de contextes
221 du plus bas niveau, ils ne sauraient contenir d'autre contexte.
223 @strong{@emph{Voice}}
225 Correspond à une voix positionnée sur une portée. Le contexte
226 @code{Voice} s'occupe des indications de nuance, des hampes, des
227 ligatures, des scripts placés au-dessus ou au-dessous de la portée, des
228 différentes liaisons et des silences. Lorsque plusieurs voix doivent
229 cohabiter sur la même portée, il est indispensable de les instancier
232 @strong{@emph{VaticanaVoice}}
234 Fonctionnant comme le contexte @code{Voice}, il est tout
235 particulièrement destiné à gérer le grégorien.
237 @strong{@emph{MensuralVoice}}
239 Fonctionnant comme le contexte @code{Voice}, il est tout
240 particulièrement adapté aux musiques anciennes.
242 @strong{@emph{Lyrics}}
244 Correspond à une voix contenant des paroles. Le contexte @code{Lyrics}
245 gère l'impression d'une ligne de paroles.
247 @strong{@emph{DrumVoice}}
249 Contexte de voix dévolu à une portée de percussions.
251 @strong{@emph{FiguredBass}}
253 Contexte prenant en charge les objets @code{BassFigure} -- la basse
254 chiffrée -- créés à partir de ce qui a été saisi en mode
257 @strong{@emph{TabVoice}}
259 Contexte de voix dévolu au contexte @code{TabStaff}, il est
260 habituellement créé implicitement.
262 @strong{@emph{CueVoice}}
264 Contexte de voix utilisé essentiellement dans le cadre de citations
265 ajoutées à une portée -- voir @ref{Mise en forme d'une citation}. Il
266 est habituellement créé implicitement.
268 @strong{@emph{ChordNames}}
270 Permet d'imprimer des noms d'accord.
275 Then the following, which I don't know what to do with:
277 * GregorianTranscriptionVoice
278 * GregorianTranscriptionStaff
281 Engraves fretboards from chords. Not easy... Not
283 There is now some documentation on FretBoards in the NR, under
284 instrument-specific notation -- cds.
289 Hard coded entry point for LilyPond. Cannot be tuned.
291 Silently discards all musical information given to this
297 @node Création d'un contexte
298 @subsection Création d'un contexte
299 @translationof Creating contexts
301 @c TODO more complete descriptions rather than learning style
303 Lorsqu'une partition ne comporte qu'une portée avec une seule voix, les
304 contextes sont créés automatiquement. Dès que la structure s'étoffe, il
305 devient nécessaire de les créer explicitement, en suivant l'une des
306 trois méthodes suivantes :
311 La commande la plus simple à utiliser est @code{\new} ; c'est aussi
312 la plus courte. Elle se place juste avant une expression musicale et se
316 @cindex nouveau contexte
317 @cindex contexte, création
320 \new @var{type} @var{expression_musicale}
324 où @var{type} est le nom d'un contexte (par ex. @code{Staff} ou
325 @code{Voice}). Cette commande crée un nouveau contexte et y interprète
326 le contenu de l'@var{expression_musicale}.
328 C'est ce qui se passe lorsqu'une partition comporte plusieurs portées :
329 chaque partie qui doit apparaître sur une portée spécifique est précédée
330 d'un @code{\new Staff}.
332 @lilypond[quote,verbatim,relative=2,ragged-right]
339 La commande @code{\new} vous permet aussi d'attribuer un nom au
340 contexte que vous créez.
343 \new @var{type} = @var{nom} @var{musique}
345 Le nom que vous spécifiez ne pourra être utilisé que s'il n'a pas déjà
346 été attribué à un autre contexte.
350 Tout comme @code{\new}, la commande @code{\context} affectera une
351 expression musicale à un objet contextuel ; elle lui attribuera de
352 surcroît un nom. La commande @code{\context} s'emploie de la façon
356 \context @var{type} = @var{nom} @var{musique}
359 LilyPond va dans un premier temps vérifier l'existence d'un contexte du
360 type @var{type} appelé @var{nom}. En l'absence d'un tel contexte,
361 LilyPond crée un nouveau contexte du nom que vous avez spécifié. Cette
362 procédure est tout à fait pertinente lorsque vous faites appel à ce
363 contexte particulier par la suite. Prenons le cas d'un chant :
364 nous commençons par nommer la ligne mélodique,
367 \context Voice = "@b{tenor}" @var{musique}
371 de telle sorte que le texte s'aligne correctement sur les notes :
374 \new Lyrics \lyricsto "@b{tenor}" @var{paroles}
379 L'une des autres utilisations de contextes explicitement nommés consiste
380 à fusionner deux expressions musicales dans un même contexte. Dans
381 l'exemple qui suit, notes et articulations sont saisies indépendamment.
385 arts = @{ s4-. s4-> @}
388 Elles sont ensuite fusionnées par affectation au même contexte
393 \new Staff \context Voice = "A" \music
394 \context Voice = "A" \arts
397 @lilypond[quote,ragged-right]
401 \new Staff \context Voice = "A" \music
402 \context Voice = "A" \arts
406 Grâce à ce mécanisme, vous pouvez tout à fait générer une version
407 @qq{Urtext} (édition originale) et optionnellement ajouter distinctement
408 des articulations à ces mêmes notes.
410 @cindex création de contextes
413 Voici une troisième manière de créer un contexte :
416 \context @var{type} @var{musique}
420 Très comparable à une déclaration @code{\context = @var{nom}},
421 cette méthode permet de s'affranchir du type de contexte.
423 Cette variante s'utilise lorsque les expression musicales peuvent être
424 interprétées à différents niveaux, comme par exemple lorsque intervient
425 la commande @code{\applyOutput} -- pour de plus amples détails, voir
426 @rextend{Application d'une fonction à tous les objets de mise en forme}.
427 En l'absence de @code{\context} explicite, LilyPond considère qu'il
428 s'agit de @code{Voice}.
431 \applyOutput #'@var{contexte} #@var{fonction} % s'applique à Voice
434 Vous devrez respecter ces formulations si la fonction doit
435 s'interpréter au niveau @code{Score} ou @code{Staff} :
438 \applyOutput #'Score #@var{fonction}
439 \applyOutput #'Staff #@var{fonction}
445 @node Conservation d'un contexte
446 @subsection Conservation d'un contexte
447 @translationof Keeping contexts alive
449 @cindex contextes, maintien actif
450 @cindex contextes, durée de vie
452 En règle générale, un contexte disparaît dès qu'il n'y a plus rien à
453 faire. Autrement dit, un contexte @code{Voice} disparaît dès après le
454 dernier événement qu'il contient, et un contexte @code{Staff} dès que
455 les contextes @code{Voice} qu'il supporte ne contiennent plus rien.
456 Ceci peut avoir des conséquences néfastes lorsqu'il est fait référence à
457 un contexte alors disparu, comme dans le cas d'un changement de portée
458 introduit par la commande @code{\change}, l'association de paroles à
459 l'aide de la commande @code{\lyricsto} ou si des événements surviennent
460 à nouveau pour ce contexte précédemment actif.
462 Une exception cependant à cette règle : en présence d'un contexte
463 @code{Staff} ou dans une construction @code{<<...>>}, un seul des
464 contextes @code{Voice} inclus restera actif jusqu'à la fin du contexte
465 @code{Staff} ou de la construction @code{<<...>>}, y compris s'il y
466 a des @qq{trous}. Le contexte alors persistant sera le premier
467 rencontré dans la construction @code{@{...@}} sans tenir compte des
468 éventuels @code{<<...>>} qu'elle pourrait contenir.
470 Un contexte restera actif dès lors qu'il s'y passera toujours quelque
471 chose. Un contexte @code{Staff} restera actif si l'une des voix qu'il
472 supporte est toujours active. L'un des moyens de s'en assurer
473 consiste à ajouter des silences invisibles parallèlement à la musique.
474 Vous devrez les ajouter dans tous les contextes @code{Voice} qui doivent
475 rester actifs. Nous vous conseillons, lorsque plusieurs voix
476 interviennent de manière sporadique, de toutes les maintenir actives
477 plutôt que de vous fier aux exceptions mentionnées plus haut.
479 Dans l'exemple suivant, les deux voix A et B sont maintenues actives
480 jusqu'à la fin du morceau :
482 @lilypond[quote,verbatim]
483 musicA = \relative c'' { d4 d d d }
484 musicB = \relative c'' { g4 g g g }
487 \new Voice = "A" { s1*5 } % Keep Voice "A" alive for 5 bars
488 \new Voice = "B" { s1*5 } % Keep Voice "B" alive for 5 bars
493 \context Voice = "A" {
497 \context Voice = "B" {
501 \context Voice = "A" { \musicA }
502 \context Voice = "B" { \musicB }
503 \context Voice = "A" { \musicA }
514 @cindex paroles, alignement sur une mélodie épisodique
516 L'exemple suivant illustre la manière d'écrire selon cette méthode une
517 mélodie discontinue à laquelle se rattachent des paroles. Dans la
518 réalité, mélodie et accompagnement feraient l'objet de portées séparées.
520 @lilypond[quote,verbatim]
521 melody = \relative c'' { a4 a a a }
522 accompaniment = \relative c' { d4 d d d }
523 words = \lyricmode { These words fol -- low the mel -- o -- dy }
526 \new Staff = "music" {
528 \new Voice = "melody" {
530 s1*4 % Keep Voice "melody" alive for 4 bars
533 \new Voice = "accompaniment" {
538 \context Voice = "melody" { \melody }
539 \context Voice = "accompaniment" { \accompaniment }
541 \context Voice = "accompaniment" { \accompaniment }
543 \context Voice = "melody" { \melody }
544 \context Voice = "accompaniment" { \accompaniment }
549 \new Lyrics \with { alignAboveContext = #"music" }
550 \lyricsto "melody" { \words }
555 Une autre méthode, qui s'avère plus productive dans nombre de cas,
556 consiste à maintenir active la ligne mélodique en y insérant des
557 silences invisibles tout au long de l'accompagnement :
559 @lilypond[quote,verbatim]
560 melody = \relative c'' {
566 accompaniment = \relative c' {
572 words = \lyricmode { These words fol -- low the mel -- o -- dy }
576 \new Staff = "music" {
578 \new Voice = "melody" {
582 \new Voice = "accompaniment" {
588 \new Lyrics \with { alignAboveContext = #"music" }
589 \lyricsto "melody" { \words }
595 @node Modification des greffons de contexte
596 @subsection Modification des greffons de contexte
597 @translationof Modifying context plug-ins
599 @c TODO Should this be Modifying engravers or Modifying contexts?
601 Les contextes, tels que @code{Score} ou @code{Staff}, ne contiennent
602 pas que des propriétés ; ils mettent également en œuvre certains
603 sous-programmes (@emph{plug-ins} pour employer le terme consacré) nommés
604 @qq{graveurs} (@emph{engravers} pour reprendre le terme anglais).
605 Ces sous-programmes sont chargés de créer les différents éléments de
606 notation : on trouve ainsi dans le contexte @code{Voice} un graveur
607 @code{Note_heads_engraver}, chargé des têtes de notes et, dans le
608 contexte @code{Staff}, un graveur @code{Key_engraver}, chargé de
611 Vous trouverez une description exhaustive de chaque graveur dans
613 @rinternals{Engravers and Performers}.
616 Référence des propriétés internes @expansion{} Translation @expansion{} Engravers.
618 Chaque contexte mentionné dans
620 @rinternals{Contexts}
623 Référence des propriétés internes @expansion{} Translation @expansion{} Context.
625 répertorie les graveurs mis en œuvre.
627 On peut faire, au moyen de ces graveurs, sa propre @qq{cuisine}, en
628 modifiant les contextes à volonté.
630 Lorsqu'un contexte est créé, par la commande @code{\new} ou
631 @code{\context}, on peut y adjoindre un bloc @code{\with} (en anglais
632 @qq{avec}), dans lequel il est possible d'ajouter (commande
633 @code{\consists}) ou d'enlever (commande @code{\remove}) des
639 \new @var{contexte} \with @{
652 Ici les points de suspension @dots{} devront être remplacés par le nom
653 des graveurs désirés. Dans l'exemple suivant, on enlève du contexte
654 @code{Staff}, la métrique (graveur @code{Time_signature_engraver})
655 et la clef (graveur @code{Clef_engraver}).
657 @lilypond[quote,relative=1,verbatim]
663 \remove "Time_signature_engraver"
664 \remove "Clef_engraver"
671 La clef et le chiffre de mesure ont disparu de la deuxième portée.
672 C'est une méthode quelque peu radicale, puisqu'elle affectera toute la
673 portée jusqu'à la fin de la partition. L'espacement s'en trouve
674 également affecté, ce qui peut être ou non l'effet recherché. Une
675 méthode plus sophistiquée aurait été de rendre ces objets transparents
676 (voir @rlearning{Visibilité et couleur des objets}).
678 Dans l'exemple suivant, voici une mise en pratique plus utile. En temps
679 normal, les barres de mesure et la métrique sont synchronisées
680 verticalement dans toute la partition. Les graveurs qui en sont
681 responsables se nomment @code{Timing_translator} et
682 @code{Default_bar_line_engraver}. En les enlevant du contexte
683 @code{Score} pour les attribuer au contexte @code{Staff}, chaque portée
684 peut désormais avoir sa propre métrique.
686 @cindex polymétrique, partition
687 @cindex chiffres de mesure multiples
689 @lilypond[quote,verbatim]
693 \consists "Timing_translator"
694 \consists "Default_bar_line_engraver"
700 \consists "Timing_translator"
701 \consists "Default_bar_line_engraver"
710 \remove "Timing_translator"
711 \remove "Default_bar_line_engraver"
719 En règle générale, l'ordre dans lequel les graveurs sont mentionnés
720 importe peu. Il se peut toutefois qu'un graveur écrive une propriété
721 qui sera interprétée par un autre, ou qu'un graveur crée un objet
722 graphique qui sera traité par un autre ; l'ordre d'apparition de
723 ces graveurs prendra alors tout son importance.
725 Pour information, les ordonnancements suivants sont importants :
726 le @code{Bar_engraver} devrait toujours être le premier ; le
727 @code{New_fingering_engraver} doit toujours précéder le
728 @code{Script_column_engraver}. Nous vous conseillons, pour les autres,
729 de vérifier les éventuelles dépendances.
733 @node Modification des réglages par défaut d'un contexte
734 @subsection Modification des réglages par défaut d'un contexte
735 @translationof Changing context default settings
737 La personnalisation des réglages par défaut d'un contexte, qu'il
738 s'agisse de @code{Score}, @code{Staff} ou @code{Voice}, peut se réaliser
739 indépendamment de la musique dans un bloc @code{\layout} -- placé dans
740 le bloc @code{\score} auquel ces modifications doivent s'appliquer -- au
741 moyen de la commande @code{\context}.
743 Point n'est besoin d'utiliser la commande @code{\set @var{contexte}}
744 lorsque les réglages par défaut d'un contexte sont ainsi modifiés :
747 @lilypond[quote,verbatim]
750 a4^"Petite police, hampes épaisses, sans métrique" a a a
757 \override Stem #'thickness = #4.0
758 \remove "Time_signature_engraver"
764 Le raccourci @code{\Staff} invoque les définitions inhérentes au
765 contexte @code{Staff}, de façon à ce qu'elles puissent être modifiées.
766 Ces nouvelles spécifications affecteront toutes les portées (tous les
767 contextes @code{Staff}) de ce bloc @code{\score}.
769 Les adaptations peuvent aussi bien se faire au niveau du contexte
770 @code{Score} qu'au niveau de tous les contextes @code{Voice}.
772 Il est possible de stocker des modifications de contexte dans un
773 identificateur. Sa définition devra être précédée de l'instruction
776 @lilypond[quote,verbatim]
779 \override Stem #'thickness = #4.0
780 \remove "Time_signature_engraver"
785 \override Stem #'thickness = #-2.0
788 melody = \relative c'' {
797 s4^"Small, thicker stems, no time signature"
813 @c TODO: add \with in here.
816 @node Définition de nouveaux contextes
817 @subsection Définition de nouveaux contextes
818 @translationof Defining new contexts
820 @cindex contexte, création
821 @cindex graveur, affectation à un contexte
836 Les contextes tels que @code{Staff} ou @code{Voice} sont faits
837 de briques de construction empilées. En combinant divers graveurs,
838 il est possible de créer de nouveaux types de contextes.
840 Dans l'exemple suivant on construit, de zéro, un nouveau contexte très
841 semblable à @code{Voice}, mais qui n'imprime que des têtes de notes en
842 forme de barre oblique au centre de la portée. Un tel contexte peut
843 servir, par exemple, à indiquer un passage improvisé dans un morceau de
847 @lilypond[quote,ragged-right]
850 \type "Engraver_group"
851 \consists "Note_heads_engraver"
852 \consists "Rhythmic_column_engraver"
853 \consists "Text_engraver"
854 \consists Pitch_squash_engraver
855 squashedPosition = #0
856 \override NoteHead #'style = #'slash
857 \override Stem #'transparent = ##t
858 \override Flag #'transparent = ##t
862 \accepts "ImproVoice"
866 a4 d8 bes8 \new ImproVoice { c4^"ad lib" c
867 c4 c^"dévêtez-vous" c_"tout en jouant :)" c }
872 On a rassemblé les réglages dans un bloc @code{\context}, lui-même placé
873 dans le bloc @code{\layout} :
883 En lieu et place des points (@dots{}), voici les éléments à saisir :
885 Tout d'abord, il convient de donner un nom à notre nouveau contexte :
891 Comme il est très semblable à @code{Voice}, nous souhaitons que
892 toutes les commandes associées au @code{Voice} déjà existant restent
893 valables. D'où nécessité de la commande @code{\alias}, qui va
894 l'associer au contexte @code{Voice} :
900 Ce contexte doit pouvoir imprimer des notes et des indications
901 textuelles ; on ajoute donc les graveurs appropriés :
904 \consists Note_heads_engraver
905 \consists Text_engraver
908 Cependant, on veut que les notes s'affichent toutes au centre de
912 \consists Pitch_squash_engraver
913 squashedPosition = #0
916 Le graveur @rinternals{Pitch_squash_engraver} intercepte les notes
917 créées par le @rinternals{Note_heads_engraver}, et les @qq{écrase} pour
918 qu'elles aient toutes la même position verticale, définie par
919 @code{squashedPosition} : ici il s'agit de la valeur @code{0},
920 c'est-à-dire la ligne du milieu.
922 On veut que les notes aient la forme d'une barre oblique, sans
926 \override NoteHead #'style = #'slash
927 \override Stem #'transparent = ##t
928 \override Flag #'transparent = ##t
931 Afin que tous ces graveurs puissent travailler de concert, on leur
932 adjoint un sous-programme spécial, introduit par la commande
933 @code{\type} : il s'agit de @code{Engraver_group},
936 \type "Engraver_group"
939 Récapitulons ; on se retrouve avec le bloc suivant :
944 \type "Engraver_group"
945 \consists "Note_heads_engraver"
946 \consists "Text_engraver"
947 \consists Pitch_squash_engraver
948 squashedPosition = #0
949 \override NoteHead #'style = #'slash
950 \override Stem #'transparent = ##t
951 \override Flag #'transparent = ##t
958 Ce n'est pas tout. En effet, on veut intégrer le nouveau contexte
959 @code{ImproVoice} dans la hiérarchie des contextes. Tout comme le
960 contexte @code{Voice}, sa place est au sein du contexte @code{Staff}.
961 Nous allons donc modifier le contexte @code{Staff},
962 au moyen de la commande @code{\accepts} :
973 Le contraire de @code{\accepts} est @code{\denies} ; il est parfois
974 utile lorsque l'on recycle des définitions de contextes déjà existantes.
976 Enfin, tout cela doit prendre place dans le bloc @code{\layout},
987 \accepts "ImproVoice"
992 On peut alors saisir la musique, comme dans l'exemple plus haut :
1000 c c_"tout en jouant :)"
1007 @node Ordonnancement des contextes
1008 @subsection Ordonnancement des contextes
1009 @translationof Context layout order
1011 @cindex contextes, ordonnancement
1016 Les contextes viennent en principe se positionner selon leur ordre
1017 d'apparition dans le fichier source. Lorsque plusieurs contextes sont
1018 imbriqués, le contexte englobant supportera les différents contextes
1019 mentionnés dans le fichier source, à la stricte condition qu'ils soient
1020 dûment @qq{agréés}. Les contextes imbriqués qui ne font pas partie de
1021 la @qq{liste d'agréments} du contexte englobant se retrouveront en
1022 dessous de celui-ci au lieu d'y être imbriqués.
1024 La liste des @qq{agréments} d'un contexte se gère à l'aide des
1025 instructions @code{\accepts} et @code{\denies} -- @code{\accepts} pour
1026 ajouter un contexte à la liste, et @code{\denies} pour retirer
1027 l'agrément. Il est par exemple peu conventionnel que les accords nommés
1028 apparaissent dans un contexte @code{Staff} ; autrement dit, le
1029 contexte @code{ChordNames} ne fait pas partie de la @qq{liste
1030 d'agréments} du contexte @code{Staff} par défaut. Néanmoins, et s'il
1031 devait en être ainsi, vous pourriez le spécifier.
1033 @lilypond[verbatim,quote]
1037 \chords { d1:m7 b1:min7.5- }
1042 @lilypond[verbatim,quote]
1046 \chords { d1:m7 b1:min7.5- }
1051 \accepts "ChordNames"
1057 L'instruction @code{\denies} permet, lorsqu'un nouveau contexte reprend
1058 les définitions d'un contexte existant, d'en ajuster les composantes.
1059 C'est par exemple le cas du contexte @code{VaticanaStaff}, réplique du
1060 contexte @code{Staff} au sein duquel le contexte @code{VaticanaVoice} se
1061 substitue au contexte @code{Voice} dans la @qq{liste d'agrément}.
1063 Gardez à l'esprit que, face à une instruction qui ne s'appliquerait à
1064 aucun contexte déjà existant, LilyPond créera un nouveau contexte
1065 implicite. Ceci peut engendrer une nouvelle portée ou une autre
1069 Manuel d'utilisation :
1070 @rprogram{Apparition d'une portée supplémentaire}.
1072 Fichiers d'initialisation :
1073 @file{ly/engraver-init.ly}.
1076 @node En quoi consiste la référence des propriétés internes
1077 @section En quoi consiste la référence des propriétés internes
1078 @translationof Explaining the Internals Reference
1081 * Navigation dans les références du programme::
1082 * Interfaces de rendu::
1083 * Détermination de la propriété d'un objet graphique (grob)::
1084 * Conventions de nommage::
1088 @node Navigation dans les références du programme
1089 @subsection Navigation dans les références du programme
1090 @translationof Navigating the program reference
1092 @c TODO remove this (it's in the LM)
1093 @c Replace with more factual directions
1095 Comment, par exemple, déplacer le doigté dans le fragment suivant ?
1097 @lilypond[quote,relative=2,verbatim]
1103 Sur la page de la documentation relative aux doigtés, c'est-à-dire
1104 @ref{Doigtés}, se trouve l'indication suivante :
1109 Référence des propriétés internes : @rinternals{Fingering}.
1112 @c outdated info; probably will delete.
1114 This fragment points to two parts of the program reference: a page
1115 on @code{FingerEvent} and one on @code{Fingering}.
1117 The page on @code{FingerEvent} describes the properties of the music
1118 expression for the input @code{-2}. The page contains many links
1119 forward. For example, it says
1122 Accepted by: @rinternals{Fingering_engraver},
1126 That link brings us to the documentation for the Engraver, the
1130 This engraver creates the following layout objects: @rinternals{Fingering}.
1133 In other words, once the @code{FingerEvent}s are interpreted, the
1134 @code{Fingering_engraver} plug-in will process them.
1138 @c I can't figure out what this is supposed to mean. -gp
1140 The @code{Fingering_engraver} is also listed to create
1141 @rinternals{Fingering} objects,
1143 @c old info? it doesn't make any sense to me with our current docs.
1145 second bit of information listed under @b{See also} in the Notation
1150 Ladite référence est disponible au format HTML, ce qui rend la
1151 navigation bien plus aisée. Il est possible soit de la lire en ligne,
1152 soit de la télécharger dans ce format. La démarche présentée ici sera
1153 plus difficile à comprendre dans un document au format PDF.
1156 Suivons le lien @rinternals{Fingering}. En haut de la nouvelle page,
1160 Fingering objects are created by: @rinternals{Fingering_engraver} and
1161 @rinternals{New_fingering_engraver}.
1164 En d'autres termes, @emph{Les indications de doigtés}
1165 (@code{Fingering} en anglais) @emph{sont créées par les graveurs
1166 @rinternals{Fingering_engraver} et @rinternals{New_fingering_engraver}.}
1168 En suivant derechef les liens propres à la référence du programme, on
1169 suit en fait le cheminement qui aboutit à la création de la partition :
1173 @item @rinternals{Fingering}:
1174 @rinternals{Fingering} objects are created by:
1175 @rinternals{Fingering_engraver}
1177 @item @rinternals{Fingering_engraver}:
1178 Music types accepted: @rinternals{fingering-event}
1180 @item @rinternals{fingering-event}:
1181 Music event type @code{fingering-event} is in Music expressions named
1182 @rinternals{FingeringEvent}
1185 Ce cheminement se produit, bien sûr, en sens inverse : nous sommes
1186 ici partis du résultat, et avons abouti aux évènements (en anglais
1187 @emph{Events}) engendrés par le fichier d'entrée. L'inverse est
1188 également possible : on peut partir d'un évènement, et suivre le
1189 cheminement de LilyPond qui aboutit à la création d'un ou plusieurs
1192 La référence des propriétés internes peut également se parcourir comme
1193 un document normal. On y trouve des chapitres tels que
1195 @rinternals{Music definitions},
1198 @code{Music definitions}
1200 @rinternals{Translation}, ou encore @rinternals{Backend}. Chaque
1201 chapitre recense toutes les définitions employées, et les propriétés
1202 sujettes à ajustements.
1204 @c -- what about adding a link to the glossary here ? -vv
1205 La Référence des propriétés internes n'est pas traduite en français --
1206 notamment du fait qu'elle est en évolution constante, tout comme
1207 LilyPond. En revanche, les termes musicaux font l'objet d'un
1208 @rglosnamed{Top, glossaire} fort utile pour les utilisateurs
1212 @node Interfaces de rendu
1213 @subsection Interfaces de rendu
1214 @translationof Layout interfaces
1216 @cindex interfaces de rendu
1217 @cindex rendu, interfaces de
1218 @cindex objets graphiques
1220 Tous les éléments de notation sont considérés comme des objets
1221 graphiques (en anglais @emph{Graphical Object}, d'où le diminutif
1222 @emph{Grob}). Chaque objet est doté d'un certain nombre de propriétés
1223 (l'épaisseur du trait, l'orientation etc.), et lié à d'autres objets.
1224 Le fonctionnement de ces objets est décrit en détail dans
1225 @rinternals{grob-interface}.
1227 Prenons l'exemple des doigtés (en anglais @emph{Fingering}). La page
1228 @code{Fingering} de la Référence des propriétés internes établit une
1229 liste de définitions propres à ce type d'objet :
1232 @code{padding} (dimension, in staff space):
1238 Ce qui signifie que les doigtés doivent être maintenus à une certaine
1239 distance (@emph{padding}) des notes : 0,5 unités @emph{staff-space}
1242 Chaque objet peut avoir plusieurs attributs, en tant qu'élément
1243 typographique ou musical. Ainsi, un doigté (objet @emph{Fingering})
1244 possède les attributs suivants :
1248 Sa taille ne dépend pas de l'espacement horizontal, contrairement aux
1249 liaisons ou ligatures.
1252 C'est du texte -- un texte vraiment court, certes.
1255 Ce texte est imprimé au moyen d'une fonte, contrairement aux liaisons ou
1259 Sur l'axe horizontal, le centre de ce symbole doit être aligné avec le
1263 Sur l'axe vertical, le symbole doit être proche de la note et de la
1267 Sur l'axe vertical encore, il doit également s'ordonner avec les
1268 éventuels autres symboles, ponctuations ou éléments textuels.
1271 Faire appliquer ces différents attributs est le rôle des
1272 @emph{interfaces}, que l'on trouve en bas de la page
1273 @rinternals{Fingering}.
1276 This object supports the following interfaces:
1277 @rinternals{item-interface},
1278 @rinternals{self-alignment-interface},
1279 @rinternals{side-position-interface}, @rinternals{text-interface},
1280 @rinternals{text-script-interface}, @rinternals{font-interface},
1281 @rinternals{finger-interface}, and @rinternals{grob-interface}.
1288 Cet objet admet les interfaces suivantes :
1291 Suit la liste des interfaces en question, présentées comme autant de
1292 liens qui conduisent aux pages dédiées à chacune d'entre elles.
1293 Chaque interface est dotée d'un certain nombre de propriétés, dont
1294 certaines peuvent être modifiées, et d'autres non (les @emph{Internal
1295 properties}, ou propriétés internes).
1297 Pour aller encore plus loin, plutôt que de simplement parler de l'objet
1298 @code{Fingering}, ce qui ne nous avance pas à grand chose, on peut aller
1299 explorer son âme même, dans les fichiers source de LilyPond (voir
1300 @rlearning{Autres sources de documentation}), en l'occurrence le fichier
1301 @file{scm/define-grobs.scm} :
1306 (avoid-slur . around)
1307 (slur-padding . 0.2)
1308 (staff-padding . 0.5)
1309 (self-alignment-X . 0)
1310 (self-alignment-Y . 0)
1311 (script-priority . 100)
1312 (stencil . ,ly:text-interface::print)
1313 (direction . ,ly:script-interface::calc-direction)
1314 (font-encoding . fetaText)
1315 (font-size . -5) ; don't overlap when next to heads.
1316 (meta . ((class . Item)
1317 (interfaces . (finger-interface
1319 text-script-interface
1321 side-position-interface
1322 self-alignment-interface
1323 item-interface))))))
1327 @dots{}où l'on découvre que l'objet @code{Fingering} n'est rien de plus
1328 qu'un amas de variables et de réglages. La page de la Référence des
1329 propriétés internes est en fait directement engendrée par cette
1333 @node Détermination de la propriété d'un objet graphique (grob)
1334 @subsection Détermination de la propriété d'un objet graphique (grob)
1335 @translationof Determining the grob property
1337 @c TODO remove this (it's in the LM)
1338 @c Replace with more factual directions
1340 Nous voulions changer la position du chiffre @b{2} dans le fragment
1343 @lilypond[quote,relative=2,verbatim]
1349 Dans la mesure où le @b{2} est placé, verticalement, à proximité de la
1350 note qui lui correspond, nous allons devoir trouver l'interface en
1351 charge de ce placement, qui se trouve être
1352 @code{side-position-interface}. Sur la page de cette interface, on peut
1356 @code{side-position-interface}
1358 Position a victim object (this one) next to other objects (the
1359 support). The property @code{direction} signifies where to put the
1360 victim object relative to the support (left or right, up or down?)
1366 @code{side-position-interface}
1368 Placer l'objet affecté à proximité d'autres objets. La propriété
1369 @code{direction} indique où positionner l'objet (à droite ou à gauche,
1375 En dessous de cette description se trouve décrite la variable
1381 (dimension, in staff space)
1383 Add this much extra space between objects that are next to each other.
1390 Ajouter tel espace supplémentaire entre des objets proches les uns des
1395 En augmentant la valeur de @code{padding}, on peut donc éloigner le
1396 doigté de la note. La commande suivante insère trois unités d'espace
1397 vide entre la note et le doigté :
1400 \once \override Voice.Fingering #'padding = #3
1403 En ajoutant cette commande avant la création du doigté (de l'objet
1404 @code{Fingering}), donc avant @code{c2}, on obtient le résultat
1407 @lilypond[quote,relative=2,verbatim]
1408 \once \override Voice.Fingering #'padding = #3
1414 Dans le cas présent, le réglage intervient dans le contexte @code{Voice},
1415 ce qui pouvait également se déduire de la Référence des propriétés
1416 internes, où la page du graveur @rinternals{Fingering_engraver}
1420 Fingering_engraver is part of contexts: @dots{} @rinternals{Voice}
1426 Le graveur Fingering_engraver fait partie des contextes : @dots{}
1431 @node Conventions de nommage
1432 @subsection Conventions de nommage
1433 @translationof Naming conventions
1435 Afin de s'y retrouver plus aisément et d'éviter les erreurs de frappe,
1436 voici quelques conventions en matière de nommage :
1439 @item fonctions scheme :
1440 minuscule-avec-trait-d-union (y compris noms en mot-unique)
1441 @item fonctions scheme :
1442 ly:plus-style-scheme
1443 @item événements, classes et propriétés musicaux :
1444 identique-aux-fonctions-scheme
1445 @item interfaces d'objet graphique :
1447 @item propriétés d'arrière plan :
1448 style-scheme (mais X et Y pour les axes)
1449 @item contextes (ainsi que MusicExpressions et grobs) :
1450 Capitale initiale ou Camélisation (CamelCase)
1451 @item propriétés de contexte :
1452 minusculeSuivieDeCamélisation
1454 Capitale_initiale_puis_minuscules_séparées_par_un_souligné
1457 Les questions que vous devez vous poser sont :
1459 @item Qu'est-ce qui relève des conventions, et qu'est-ce qui relève de
1461 @item Qu'est-ce qui relève des règles du langage sous-jacent, et
1462 qu'est-ce qui est propre à LilyPond ?
1466 @node Modification de propriétés
1467 @section Modification de propriétés
1468 @translationof Modifying properties
1470 @c TODO change the menu and subsection node names to use
1471 @c backslash once the new macro to handle the refs
1472 @c is available. Need to find and change all refs at
1473 @c the same time. -td
1476 * Vue d'ensemble de la modification des propriétés::
1477 * La commande de fixation (set)::
1478 * La commande de dérogation (override)::
1479 * La commande d'affinage (tweak)::
1481 * Modification de listes associatives::
1485 @node Vue d'ensemble de la modification des propriétés
1486 @subsection Vue d'ensemble de la modification des propriétés
1487 @translationof Overview of modifying properties
1489 Chaque contexte est chargé de créer plusieurs types d'objets graphiques.
1490 Il contient également les réglages nécessaires pour chacun de ces
1491 objets. Si l'on modifie ces réglages, les objets n'auront plus la même
1494 Les contextes comportent deux types différents de propriétés : des
1495 propriétés de contexte et des propriétés d'objet graphique. Les
1496 propriétés de contexte sont celles qui s'appliqueront globalement au
1497 contexte en tant que tel ; elles gèrent la manière dont le contexte
1498 apparaîtra. Les propriétés d'objet graphique, par contre, s'appliquent
1499 à des types particuliers d'objet qui apparaissent dans le contexte en
1502 Les commandes @code{\set} et @code{\unset} permettent de modifier les
1503 valeurs des propriétés de contexte. Les commandes @code{\override} et
1504 @code{\revert} permettent de modifier les valeurs des propriétés des
1508 La syntaxe employée pour ce faire est
1511 \override @var{contexte}.@var{objet} #'@var{propriété} = #@var{valeur}
1514 Ici @var{objet} est un objet graphique, tel que @code{Stem} (les hampes)
1515 ou @code{NoteHead} (les têtes de note) ; @var{propriété} est une
1516 variable (désignée par un symbole, ce qui explique l'apostrophe)
1517 employée par le système de mise en page. La sous-section
1518 @ref{Élaboration d'une retouche} vous aidera à savoir quoi mettre à la
1519 place de @var{objet}, @var{propriété} et @var{valeur} ; notre propos
1520 n'est ici que d'examiner l'emploi de cette commande.
1522 La commande suivante :
1525 \override Staff.Stem #'thickness = #4.0
1529 rend les hampes plus épaisses (la valeur par défaut est 1.3, ce qui
1530 signifie qu'elles sont 1,3 fois plus épaisses que les lignes de la
1531 portée). Dans la mesure où nous avons indiqué @code{Staff} comme
1532 contexte, ce réglage ne s'appliquera qu'à la portée courante ; les
1533 autres portées demeureront intactes.
1535 @lilypond[quote,verbatim,relative=2,fragment]
1537 \override Staff.Stem #'thickness = #4.0
1543 La commande @code{\override} modifie donc la définition de l'objet
1544 @code{Stem} dans le contexte @code{Staff} ; toutes les hampes qui
1545 suivent seront affectées.
1547 Tout comme avec la commande @code{\set}, l'argument @var{contexte} peut
1548 être omis, auquel cas le contexte par défaut (ici, @code{Voice}) sera
1549 employé. La commande @code{\once} permet de n'appliquer la modification
1552 @lilypond[quote,fragment,verbatim,relative=2]
1554 \once \override Stem #'thickness = #4.0
1559 La commande @code{\override} doit être entrée @emph{avant} l'objet
1560 concerné. Ainsi, lorsque l'on veut altérer un objet qui se prolonge,
1561 tel qu'une liaison, une ligature ou tout autre objet dit @emph{Spanner},
1562 la commande @code{\override} doit être saisie avant que l'objet soit
1565 @lilypond[quote,fragment,verbatim,relative=2]
1566 \override Slur #'thickness = #3.0
1568 \override Beam #'beam-thickness = #0.6
1573 Dans cet exemple, la liaison (@emph{Slur}) est épaissie, mais non la
1574 ligature (@emph{Beam}). En effet, le code qui lui est relatif n'a pas
1575 été inséré avant le début de la ligature, et demeure donc sans effet.
1577 De même que la commande @code{\unset}, la commande @code{\revert} défait
1578 ce qui a été fait par une commande @code{\override}. Tout comme avec
1579 @code{\unset}, elle ne peut annuler que les réglages effectués dans le
1580 même contexte. Ainsi dans l'exemple suivant, la commande @code{\revert}
1584 \override Voice.Stem #'thickness = #4.0
1585 \revert Staff.Stem #'thickness
1588 Il existe, à l'intérieur même de certaines propriétés, des options que
1589 l'on nomme @qq{sous-propriétés}. La syntaxe est alors
1591 @c leave this as a long long
1593 \override @var{contexte}.@var{objet} #'@var{propriété} #'@var{sous-propriété} = #@var{valeur}
1597 Ainsi, par exemple :
1600 \override Stem #'(details beamed-lengths) = #'(4 4 3)
1606 Référence des propriétés internes :
1607 @rinternals{Backend},
1608 @rinternals{All layout objects},
1609 @rinternals{OverrideProperty},
1610 @rinternals{RevertProperty},
1611 @rinternals{PropertySet}.
1614 La sous-couche Scheme ne vérifie pas la saisie des propriétés de façon
1615 très stricte. Des références cycliques dans des valeurs Scheme peuvent
1616 de ce fait interrompre ou faire planter le programme -- ou bien les
1620 @node La commande de fixation (set)
1621 @subsection La commande de fixation @code{@bs{}set}
1622 @translationof The set command
1625 @cindex modifier des propriétés
1628 Chaque contexte peut avoir plusieurs @strong{propriétés}, c'est-à-dire
1629 des variables qu'il inclut. Ces dernières peuvent être modifiées @qq{à
1630 la volée}, c'est-à-dire pendant que la compilation s'accomplit. C'est
1631 ici le rôle de la commande @code{\set}.
1634 \set @var{contexte}.@var{propriété} = #@var{valeur}
1637 Dans la mesure où @var{valeur} est constituée d'un objet Scheme, elle
1638 doit être précédée du caractère @code{#}.
1640 Les propriétés des contextes se libellent sous la forme
1641 @code{minusculeMajuscule}. Leur rôle consiste principalement à traduire
1642 la musique en notation : par exemple, @code{localKeySignature}
1643 déterminera quand imprimer une altération accidentelle, et
1644 @code{measurePosition} quand imprimer une barre de mesure. La valeur
1645 des propriétés des contextes peuvent évoluer au fur et à mesure que l'on
1646 avance dans le morceau -- @code{measurePosition} en est l'illustration
1649 Ainsi la propriété de contexte @code{skipBars} permet de condenser les
1650 mesures vides de notes, en des silences multimesures. Il s'agit d'un
1651 objet Scheme, auquel on attribue la valeur booléenne @qq{vrai},
1652 c'est-à-dire la lettre @code{#t} pour @qq{True} en anglais :
1654 @lilypond[quote,verbatim,relative=2]
1656 \set Score.skipBars = ##t
1660 Si l'argument @var{contexte} n'est pas spécifié, alors la propriété
1661 cherchera à s'appliquer dans le contexte le plus restreint où elle est
1662 employée : le plus souvent @code{ChordNames}, @code{Voice} ou
1665 @lilypond[quote,verbatim,relative=2]
1666 \set Score.autoBeaming = ##f
1670 \set autoBeaming = ##t
1678 Ce changement étant appliqué @qq{à la volée}, il n'affecte que le second
1681 Notez que le contexte le plus restreint n'est pas toujours le bon, et
1682 peut ne pas contenir la propriété qui vous intéresse : ainsi, la
1683 propriété @code{skipBars}, évoquée plus haut, ne relève pas du contexte
1684 @code{Voice}, mais du contexte @code{Score} -- le code suivant ne
1687 @lilypond[quote,verbatim,relative=2]
1693 Les contextes s'organisent de façon hiérarchique : aussi, lorsqu'un
1694 contexte de niveau supérieur est spécifié (par exemple @code{Staff}), la
1695 propriété sera modifiée dans tous les contextes inférieurs (tous les
1696 contextes @code{Voice}, par exemple) qu'il contient.
1700 La commande @code{\unset} permet d'annuler la définition d'une
1704 \unset @var{contexte}.@var{propriété}
1708 si et seulement si cette @var{propriété} a été définie dans ce
1709 @var{contexte} précis. En d'autres termes, la commande @code{\unset}
1710 doit impérativement affecter le même contexte que la commande
1711 @code{\set} d'origine, même en cas d'imbrication.
1713 @lilypond[quote,verbatim,relative=2]
1714 \set Score.autoBeaming = ##t
1719 \unset Score.autoBeaming
1727 Si l'on se trouve dans le contexte le plus restreint, il n'est pas
1728 obligatoire, là encore, de spécifier le @var{contexte}. Ainsi, les deux
1732 \set Voice.autoBeaming = ##t
1733 \set autoBeaming = ##t
1737 sont équivalentes elles apparaissent dans un contexte @code{Voice}.
1741 Pour modifier une propriété de façon à ce que l'accommodement ne
1742 s'applique qu'une seule fois, il convient d'adjoindre l'instruction
1743 @code{\once} à la commande @code{\set} :
1745 @lilypond[quote,verbatim,relative=2]
1747 \once \set fontSize = #4.7
1752 Ici le changement de taille est annulé aussitôt après la note concernée.
1754 La référence des propriétés internes contient une description exhaustive
1755 de toutes les propriétés, contexte par contexte : voir
1757 @rinternals{Tunable context properties}.
1760 Translation @expansion{} Tunable context properties.
1765 Référence des propriétés internes :
1766 @rinternals{Tunable context properties}.
1769 @node La commande de dérogation (override)
1770 @subsection La commande de dérogation @code{@bs{}override}
1771 @translationof The override command
1773 @cindex grob, propriétés
1774 @cindex objet graphique, propriétés
1775 @cindex propriétés d'un grob
1776 @cindex propriétés d'objet graphique
1780 La commande @code{\override} permet de modifier la mise en forme des
1781 objets graphiques. Les descriptions d'objet graphique, dont les noms
1782 commencent par une majuscule, puis comprennent une ou plusieurs
1783 majuscules (de style @code{TotoTata}), contiennent les réglages @qq{par
1784 défaut} pour les objets graphiques. Ces réglages sont sous forme de
1785 liste Scheme ; on peut les consulter dans le fichier
1786 @file{scm/define-grobs.scm}.
1788 @code{\override} est en fait un raccourci :
1791 \override @var{contexte}.@var{NomObjet} #'@var{propriété} = #@var{valeur}
1795 plus ou moins équivalent à
1797 @c leave this long line -gp
1799 \set @var{contexte}.@var{NomObjet} =
1800 #(cons (cons '@var{propriété} @var{valeur})
1801 <valeur antérieure de @var{contexte}.@var{NomObjet}>)
1804 La valeur de @var{contexte}.@var{NomObjet} (une liste associative, ou
1805 @emph{alist}) permet d'initialiser les propriétés des objets un par un.
1806 Les objets eux-mêmes ont leurs propriétés, dont les noms, dans la
1807 tradition du langage Scheme, comprennent un trait d'union
1808 (@code{toto-titi}). Ces propriétés internes changent constamment au
1809 cours de la mise en page : en fait, la gravure d'une page n'est autre
1810 que le calcul de toutes ces propriétés au moyen de fonctions de rappel.
1812 Nous pouvons donc par exemple accroître l'épaisseur des hampes en jouant
1813 sur la propriété @code{thickness} de l'objet @code{stem} :
1815 @lilypond[quote,verbatim,relative=2]
1817 \override Voice.Stem #'thickness = #3.0
1821 Lorsqu'aucun contexte n'est spécifié dans une clause @code{\override},
1822 celle-ci s'appliquera au contexte le plus bas :
1824 @lilypond[quote,verbatim,relative=2]
1825 { \override Staff.Stem #'thickness = #3.0
1829 \override Stem #'thickness = #0.5
1838 @cindex annulation d'un override
1839 @cindex override, annulation des effets
1842 Les effets d'un @code{\override} prennent fin à l'aide de l'instruction
1845 @lilypond[quote,verbatim,relative=2]
1847 \override Voice.Stem #'thickness = #3.0
1849 \revert Voice.Stem #'thickness
1853 Les effets d'un @code{\override} ou d'un @code{\revert} s'appliquent dès
1854 l'endroit où ils apparaissent, et à tous les objets dans le contexte
1857 @lilypond[quote,verbatim,relative=2]
1862 \override Staff.Stem #'thickness = #3.0
1866 \revert Staff.Stem #'thickness
1873 @cindex override ponctuel
1876 L'instruction @code{\override} doit être précédée d'un @code{\once} dès
1877 lors que les effets de l'accommodement ne concernent que l'événement qui
1878 la suit directement :
1880 @lilypond[quote,verbatim,relative=2]
1884 \override Stem #'thickness = #3.0
1888 \once \override Stem #'thickness = #3.0
1896 Les commandes permettant de modifier l'apparence de la partition
1897 ressemblent en général à
1900 \override Voice.Stem #'thickness = #3.0
1904 Pour élaborer un réglage de ce type, on a besoin de connaître
1908 @item le contexte : ici @code{Voice} (la voix).
1909 @item l'objet à affecter : ici @code{Stem} (les hampes).
1910 @item la propriété à modifier : ici @code{thickness} (l'épaisseur
1912 @item la valeur désirée : ici @code{3.0} (par défaut, elle est de 1.3).
1915 Certaines @qq{sous-propriétés} sont parfois contenues dans une
1916 propriété. La commande devient alors :
1919 \override Stem #'(details beamed-lengths) = #'(4 4 3)
1922 @cindex documentation exhaustive
1923 @cindex trouver des objets graphiques
1924 @cindex objets graphiques, description
1928 Pour bien des propriétés, quel que soit le type de valeur requise,
1929 attribuer la valeur @qq{faux} (@code{##f} en Scheme) reviendra à
1930 désactiver complètement l'action de la propriété qui se trouve ainsi
1931 purement ignorée par LilyPond. Cela peut s'avérer fort utile pour des
1932 propriétés causant des désagréments.
1937 Référence des propriétés internes :
1938 @rinternals{Backend}
1941 @node La commande d'affinage (tweak)
1942 @subsection La commande d'affinage @code{@bs{}tweak}
1943 @translationof The tweak command
1945 @cindex retouche (tweak)
1946 @cindex affinage (tweak)
1947 @cindex ajustement (tweak)
1948 @cindex tweak (retouche, affinage)
1951 L'utilisation d'un @code{\override} pour modifier les propriétés d'un
1952 objet graphique affectera toutes les instances de l'objet en question au
1953 sein du contexte, et ce dès son apparition. Il peut parfois être
1954 préférable de n'affecter qu'un seul objet en particulier plutôt que tous
1955 les objets du contexte. C'est là rôle de l'instruction @code{\tweak},
1956 dont la syntaxe est :
1959 \tweak @var{objet-de-rendu} #'@code{objet-propriété} @code{valeur}
1962 Mention de l'@var{objet-de-rendu} est optionnel.
1963 La commande @code{\tweak} s'applique à l'objet qui apparaît
1964 immédiatement après @code{valeur}.
1967 Dans certains cas, on peut passer par un raccourci pour arranger les
1968 objets graphiques. Lorsqu'un objet est directement engendré par un
1969 élément distinct du fichier source, on peut utiliser la commande
1972 Dans l'accord suivant, les notes sont modifiées une par une :
1974 @lilypond[relative=2,verbatim,ragged-right]
1980 \tweak #'duration-log #1
1983 -\tweak #'padding #8
1987 Comme on peut le voir, les propriétés sont ici modifiées directement
1988 en même temps que les objets sont saisis. Il n'est plus besoin de
1989 spécifier ni le nom de l'objet (@emph{grob}), ni le contexte dans lequel
1990 cela doit s'appliquer. Ce procédé ne marche que pour des objets
1991 directement liés aux événements (@rinternals{Event}) du fichier source.
1995 @item Les têtes de notes au sein d'un accord, qui sont directement
1996 engendrées par les hauteurs indiquées
1998 @item Les signes d'articulation, engendrés par les indications de
2002 En revanche, les hampes ou les altérations sont engendrées par les têtes
2003 de notes, et non par des évènements dans le fichier source. De même
2004 pour les clés, qui ne sont pas directement engendrées par le fichier
2005 source, mais plutôt par le changement d'une propriété interne.
2007 En fait, très peu d'objets passent @emph{directement} du code source à
2008 la partition. Une note toute simple, par exemple @code{c4}, fait l'objet
2009 d'un traitement et n'est donc pas directement rendue ; c'est
2010 pourquoi le code suivant ne sera d'aucun effet :
2013 \tweak #'color #red c4
2017 Voir pour plus de détails
2018 @rextend{Affichage d'expressions musicales}.
2021 Pour une introduction à la syntaxe et l'utilisation des retouches, voir
2022 le chapitre @rlearning{Méthodes de retouche}.
2024 Lorsque plusieurs éléments de même nature surviennent au même instant,
2025 il devient impossible d'utiliser l'instruction @code{\override} pour
2026 n'en modifier qu'un seul individuellement, d'où l'intérêt de la commande
2027 @code{\tweak}. Entre autres éléments qui sont susceptibles de se
2028 produire au même instant, nous citerons :
2030 @c TODO expand to include any further uses of \tweak
2032 @item les têtes de notes au sein d'un accord,
2033 @item les signes d'articulation,
2034 @item les liaisons de prolongation sur des notes d'un accord,
2035 @item les crochets de nolets démarrant au même instant
2038 @c TODO add examples of these
2040 Dans l'exemple suivant, l'une des têtes de note de l'accord est
2041 colorisée, et l'aspect d'une autre est changé.
2043 @lilypond[relative=2,verbatim,quote]
2048 \tweak #'duration-log #1
2053 L'instruction @code{\tweak} permet aussi de modifier l'aspect d'une
2056 @lilypond[verbatim,quote,relative=1]
2057 c-\tweak #'thickness #5 ( d e f)
2060 La commande @code{\tweak} ne sera pleinement fonctionnelle que si elle
2061 est directement rattachée à l'objet auquel elle doit s'appliquer alors
2062 que le fichier source est converti en flux musical. Vouloir modifier la
2063 globalité d'un accord est sans résultat dans la mesure où il ne
2064 constitue qu'un conteneur pour des événements musicaux et que tous les
2065 objets seront créés à partir d'événements appartenant à un
2066 @code{EventChord} (un événement d'accord) :
2068 @lilypond[relative=2,verbatim,quote]
2069 \tweak #'color #red c4
2070 \tweak #'color #red <c e>4
2071 <\tweak #'color #red c>4
2074 La commande @code{\tweak} simple ne saurait servir à modifier un élément
2075 qui ne serait pas explicitement mentionné dans le fichier source. C'est
2076 notamment le cas des hampes, ligatures automatiques ou altérations, dans
2077 la mesure où elles seront ultérieurement générées et après les têtes de
2078 note (objets @code{NoteHead}, plutôt qu'au fil des éléments musicaux
2081 De tels objets créés indirectement peuvent être ajustés que par une
2082 forme dévelppée de la commande @code{\tweak} :
2084 @lilypond[relative=2,verbatim,quote]
2085 \tweak Stem #'color #red
2086 \tweak Beam #'color #green c8 e
2087 <c e \tweak Accidental #'font-size #-3 ges>4
2090 La commande @code{\tweak} ne peut non plus servir à modifier clefs ou
2091 métriques, puisqu'elles seront immanquablement séparées du @code{\tweak}
2092 par l'insertion automatique d'autres éléments requis pour spécifier le
2095 Plusieurs commandes @code{\tweak} en enfilade permettent d'affecter un
2096 même élément de notation :
2098 @lilypond[verbatim,quote,relative=1]
2100 -\tweak #'style #'dashed-line
2101 -\tweak #'dash-fraction #0.2
2102 -\tweak #'thickness #3
2103 -\tweak #'color #red
2108 Vous pouvez examiner le flux musical généré par une portion d'un
2109 fichier source, y compris les éléments automatiquement insérés, en
2110 suivant les indications portées à la rubrique
2111 @rextend{Affichage d'expressions musicales}. Ceci s'avère tout à fait
2112 approprié pour déterminer ce qui peut se modifier à l'aide d'un
2113 @code{\tweak} ou bien aider à rectifier votre source de telle sorte
2114 que le @code{\tweak} produise ses effets.
2117 Manuel d'initiation :
2118 @rlearning{Méthodes de retouche}.
2120 Manuel d'extension :
2121 @rextend{Affichage d'expressions musicales}.
2125 @cindex tweak et points de contrôle
2126 @cindex points de contrôle et tweak
2128 Lorsqu'il y a plusieurs liaisons de prolongation dans un accord, la
2129 commande @code{\tweak} ne s'applique qu'à la première.
2132 @node set ou override
2133 @subsection @code{\set} ou @code{\override}
2134 @translationof set versus override
2136 @c TODO -- This section is probably unnecessary now.
2139 Si les propriétés peuvent être modifiées de deux façons, par les
2140 commandes @code{\set} et @code{\override}, c'est qu'il y a deux types de
2143 La propriété @code{fontSize} est une exception : c'est un raccourci, qui
2144 équivaudrait à saisir @w{@code{\override @dots{} #'font-size}} pour tous
2145 les objets textuels. Dans la mesure où il s'agit d'une manipulation
2146 très courante, une propriété spéciale a été créée. Elle doit être
2147 modifiée avec la commande @code{\set}.
2152 @node Modification de listes associatives
2153 @subsection Modification de listes associatives
2154 @translationof Modifying alists
2156 Certaines propriétés configurables par l'utilisateur se présentent en
2157 interne comme étant des listes associatives -- les puristes diront des
2158 @emph{alists}. Une @emph{alist} est en fait constituée de plusieurs
2159 paires de @emph{clés} et @emph{valeurs} ; sa structure ressemble à :
2162 '((@var{clé1} . @var{valeur1})
2163 (@var{clé2} . @var{valeur2})
2164 (@var{clé3} . @var{valeur3})
2168 Dans le cas où cette liste représente les propriétés d'un objet
2169 graphique ou bien l'une des variables du bloc @code{\paper}, chaque clé
2170 peut être modifiée individuellement sans que cela n'affecte les autres.
2172 Par exemple, pour réduire l'espacement entre deux portées adjacentes
2173 d'un même système, on utilisera la propriété @code{staff-staff-spacing}
2174 qui est attachée à l'objet graphique @code{StaffGrouper}. Cette
2175 propriété est constituée d'une liste de quatre clés :
2176 @code{basic-distance}, @code{minimum-distance}, @code{padding} et
2177 @code{stretchability}. Ses réglages par défaut tels que mentionnés à la
2178 rubrique @emph{Backend} de la référence des propriétés internes -- voir
2179 @rinternals{StaffGrouper} -- sont :
2182 '((basic-distance . 9)
2183 (minimum-distance . 7)
2185 (stretchability . 5))
2188 Afin de rapprocher nos deux portées, il suffit de réduire la valeur
2189 (@code{9}) de la clé @code{basic-distance} au niveau de celle de la clé
2190 @code{minimum-distance} (@code{7}). La modification d'une seule clé
2191 individuellement peut se réaliser sous la forme d'une @emph{déclaration
2194 @lilypond[quote,verbatim]
2195 % default space between staves
2197 \new Staff { \clef treble c''1 }
2198 \new Staff { \clef bass c1 }
2201 % reduced space between staves
2202 \new PianoStaff \with {
2203 % this is the nested declaration
2204 \override StaffGrouper #'staff-staff-spacing #'basic-distance = #7
2206 \new Staff { \clef treble c''1 }
2207 \new Staff { \clef bass c1 }
2211 Le recours à une déclaration imbriquée touchera la clé indiquée
2212 (@code{basic-distance} dans l'exemple ci-dessus) sans pour autant
2213 modifier les autres clés de la propriété considérée.
2215 Considérons maintenant que nous souhaitions que les portées soient le
2216 plus proche possible les unes des autres, à la limite du chevauchement.
2217 Il suffirait de mettre les quatre clés à zéro. Nous pourrions saisir
2218 quatre déclarations, chacune d'elles touchant une clé. Nous pouvons
2219 tout aussi bien redéfinir la propriété en une seule clause, sous la
2220 forme d'une liste associative :
2222 @lilypond[quote,verbatim]
2223 \new PianoStaff \with {
2224 \override StaffGrouper #'staff-staff-spacing =
2225 #'((basic-distance . 0)
2226 (minimum-distance . 0)
2228 (stretchability . 0))
2230 \new Staff { \clef treble c''1 }
2231 \new Staff { \clef bass c1 }
2235 N'oubliez pas que dès lors qu'une clé n'apparaît pas dans la liste, elle
2236 retourne à sa valeur @emph{sauf-mention-contraire}. Autrement dit, dans
2237 le cas de @code{staff-staff-spacing} qui nous occupe, toutes les clés
2238 non mentionnées seront ramenées à zéro -- à l'exception de
2239 @code{stretchability} qui prend par défaut la valeur de
2240 @code{basic-distance}. Les deux assertions suivantes sont donc
2244 \override StaffGrouper #'staff-staff-spacing =
2245 #'((basic-distance . 7))
2247 \override StaffGrouper #'staff-staff-spacing =
2248 #'((basic-distance . 7)
2249 (minimum-distance . 0)
2251 (stretchability . 7))
2254 L'une des conséquences, parfois involontaire, de ceci est la suppression
2255 de réglages standards effectués par un fichier d'initialisation chargé à
2256 chaque compilation d'un fichier source. Dans l'exemple précédent, les
2257 réglages standards de @code{padding} et @code{minimum-distance}, tels
2258 que déterminés par @file{scm/define-grobs.scm}, se voient ramenés à leur
2259 valeur @emph{si-non-définie} ; autrement dit, les deux clés sont mises à
2260 zéro. La définition d'une propriété ou d'une variable sous forme de
2261 liste associative, quelle qu'en soit la taille, réinitialisera toujours
2262 les clés non mentionnées à leur valeur @emph{si-non-définie}. Si telle
2263 n'est pas votre intention, nous vous recommandons alors de régler la
2264 valeur des clés individuellement par des déclarations imbriquées.
2266 @warning{Les déclarations imbriquées ne sont pas fonctionnelles dans le
2267 cas des listes associatives des propriétés de contexte -- telles
2268 @code{beamExceptions}, @code{keySignature},
2269 @code{timeSignatureSettings}, etc. Ces propriétés ne sont modifiables
2270 qu'au travers d'une complète redéfinition de leur liste associative.}
2273 @node Propriétés et contextes utiles
2274 @section Propriétés et contextes utiles
2275 @translationof Useful concepts and properties
2279 * Direction et positionnement::
2280 * Distances et unités de mesure::
2281 * Propriétés des symboles de la portée::
2282 * Extenseurs et prolongateurs::
2283 * Visibilité des objets::
2285 * Rotation des objets::
2289 @node Modes de saisie
2290 @subsection Modes de saisie
2291 @translationof Input modes
2293 La manière dont sera interprétée la notation contenue dans un fichier
2294 source dépend du mode affecté à la saisie.
2296 @strong{Mode accords}
2298 Ce mode, activé par la commande @code{\chordmode}, permet d'interpréter
2299 les saisies comme étant des accords, qui seront imprimés sous forme
2300 de notes sur une portée -- voir @ref{Notation des accords}.
2302 Le mode accords s'active aussi par la commande @code{\chords}, qui
2303 créera un contexte @code{ChordNames}. Les saisies, interprétées comme
2304 étant des accords, seront alors rendues sous forme nominale dans ce
2305 contexte @code{ChordNames} -- voir @ref{Impression des noms d'accord}.
2307 @strong{Mode percussions}
2309 Ce mode, activé par la commande @code{\drummode}, permet d'interpréter
2310 les saisies comme étant de la notation pour percussions -- voir
2311 @ref{Notation de base pour percussions}.
2313 Le mode percussions s'active aussi par la commande @code{\drums}, qui
2314 créera un contexte @code{DrumStaff}. Les saisies, interprétées comme
2315 étant de la notation pour percussions, seront alors rendues sous
2316 forme symbolique sur une portée de percussions -- voir
2317 @ref{Notation de base pour percussions}.
2319 @strong{Mode figures}
2321 Ce mode, activé par la commande @code{\figuremode}, permet d'interpréter
2322 les saisies comme étant de la basse chiffrée (ou figurée) -- voir
2323 @ref{Saisie de la basse chiffrée}.
2325 Le mode figures s'active aussi par la commande @code{\figures}, qui
2326 créera un contexte @code{FiguredBass}. Les saisies interprétées comme
2327 étant de la basse chiffrée, seront alors rendues sous forme symbolique
2328 dans le contexte @code{FiguredBass} -- voir
2329 @ref{Introduction à la basse chiffrée}.
2331 @strong{Mode frets et tablatures}
2333 Il n'existe pas de mode spécifique pour saisir des symboles de fret ou
2336 Notes ou accords saisis en mode note puis affectés à un contexte
2337 @code{TabStaff} seront rendus sous forme de diagramme de tablature --
2338 voir @ref{Tablatures par défaut}.
2340 Deux options différentes permettent d'obtenir des diagrammes de fret en
2341 surplomb d'une portée : directement à l'aide d'un contexte
2342 @code{FretBoards} -- voir @ref{Tablatures automatiques} -- ou en
2343 attachant aux notes des @emph{markups} créés par la commande
2344 @code{\fret-diagram} -- voir @ref{Tablatures sous forme d'étiquette}.
2346 @strong{Mode paroles}
2348 Ce mode, activé par la commande @code{\lyricmode}, permet d'interpréter
2349 les saisies comme étant des syllabes, ayant éventuellement une durée, et
2350 des indications habituelles aux paroles -- voir @ref{Musique vocale}.
2352 Le mode paroles s'active aussi par la commande @code{\addlyrics}, qui
2353 créera un contexte @code{Lyrics} et ajoutera implicitement une commande
2354 @code{\lyricsto} afin d'associer les paroles qui suivent à la musique
2355 précédemment saisie.
2357 @strong{Mode @emph{markup}}
2359 Ce mode, activé par la commande @code{\markup}, permet d'interpréter les
2360 saisies comme étant des @emph{markups} (annotations ou étiquettes) --
2361 voir @rusernamed{Text markup commands,Commandes pour le mode markup}.
2364 @c silly work-around for texinfo broken-ness
2365 @c (@strong{Note...} causes a spurious cross-reference in Info)
2368 Le mode notes est le mode par défaut dans LilyPond. Il peut aussi
2369 s'activer par la commande @code{\notemode}. Les saisies seront
2370 interprétées comme étant des hauteurs, durées, @emph{markups} etc. qui
2371 seront rendues sous forme de notation musicale sur une portée.
2373 Nul n'est besoin de spécifier le mode notes de manière explicite, hormis
2374 dans certaines situations particulières, notamment lorsque vous êtes en
2375 mode paroles, accords, ou tout autre mode, et que vous deviez insérer
2376 un élément qui ne serait disponible que grâce à la syntaxe du mode
2379 Il en va ainsi lorsque, par exemple, vous voulez ajouter une indication
2380 de nuance au numéro de couplet d'un chant choral :
2382 @lilypond[verbatim,relative=2,quote]
2385 \notemode{\set stanza = \markup{ \dynamic f 1. } }
2389 \notemode{\set stanza = \markup{ \dynamic p 2. } }
2395 @node Direction et positionnement
2396 @subsection Direction et positionnement
2397 @translationof Direction and placement
2399 En matière de typographie musicale, l'orientation et le positionnement
2400 de nombreux éléments est affaire de goût. Par exemple, les hampes
2401 peuvent être ascendantes ou descendantes, les paroles, nuances ou autres
2402 indications d'expression peuvent apparaître au-dessus ou en dessous de
2403 la portée, les indications textuelles s'alignent tantôt par la gauche,
2404 tantôt par la droite, ou être centrées. La plupart de ces choix peuvent
2405 être laissés à l'appréciation de LilyPond. Il peut être préférable,
2406 dans certains cas, d'imposer l'orientation ou le positionnement des
2409 @strong{Indicateurs de position d'une articulation}
2411 Certains positionnements sont opérés par défaut -- toujours au-dessus ou
2412 toujours en dessous (nuances ou points d'orgue) -- alors que d'autres
2413 alterneront selon l'orientation des hampes (liaisons ou accents).
2415 @c TODO Add table showing these
2417 Le positionnement par défaut peut être outrepassé à l'aide d'un
2418 @emph{indicateur de positionnement}, qui vient s'insérer juste avant
2419 l'articulation. LilyPond met à votre disposition trois indicateurs de
2420 positionnement : @code{^} (pour @qq{au-dessus}), @code{_} (pour
2421 @qq{au-dessous}), et @code{-} (pour @qq{appliquer le positionnement par
2422 défaut}). L'indicateur de positionnement n'est pas obligatoire ;
2423 LilyPond considère alors qu'il y a un @code{-}. Un indicateur de
2424 positionnement est cependant @strong{obligatoire} dans les cas
2428 @item une commande @code{\tweak},
2429 @item une commande @code{\markup},
2430 @item une commande @code{\tag},
2431 @item les indications de corde, par exemple @code{-"corde"},
2432 @item les indications de doigté, par exemple @w{@code{-1}},
2433 @item les raccourcis d'articulation, par exemple @w{@code{-.}},
2434 @w{@code{->}} ou @w{@code{--}}.
2437 Les indicateurs de positionnement n'affectent que la note qui suit :
2439 @lilypond[verbatim,quote,relative=2]
2446 @strong{La propriété @code{direction}}
2448 Le positionnement ou l'orientation de nombreux objets de rendu sont
2449 gérés par la propriété @code{direction}.
2451 La propriété @code{direction} peut prendre la valeur @code{1}, qui
2452 signifie @qq{ascendant} ou @qq{au-dessus}, ou @w{@code{-1}}, qui
2453 signifie @qq{descendant} ou @qq{au-dessous}. Les symboliques @code{UP}
2454 et @code{DOWN} peuvent remplacer respectivement @code{1} et
2455 @w{@code{-1}}. Les valeurs @code{0} ou @code{CENTER} permettent de
2456 réaffecter à la propriété @code{direction} son comportement par défaut.
2457 Certaines commandes prédéfinies permettent par ailleurs de spécifier un
2458 comportement en matière d'orientation ou positionnement ; elles
2462 @code{\xxxUp}, @code{\xxxDown} et @code{\xxxNeutral}
2466 auquel cas @code{\xxxNeutral} signifie @qq{retour au comportement par
2467 défaut} -- voir @rlearning{Objets inclus dans la portée}.
2469 Dans quelques cas particuliers, comme l'indication d'un @emph{arpeggio},
2470 la valeur affectée à la propriété @code{direction} déterminera si
2471 l'objet doit se placer à gauche ou à droite de son parent. Un
2472 @w{@code{-1}} ou @code{LEFT} signifiera alors @qq{sur la gauche}, et un
2473 @code{1} ou @code{RIGHT} @qq{sur la droite}. Comme de bien entendu, un
2474 @code{0} ou @code{CENTER} signifiera @qq{appliquer le positionnement par
2478 These all have side-axis set to #X
2479 AmbitusAccidental - direction has no effect
2481 StanzaNumber - not tried
2482 TrillPitchAccidental - not tried
2483 TrillPitchGroup - not tried
2486 Notez que ces commandes resteront effectives jusqu'à ce qu'elles soient
2489 @lilypond[verbatim,quote,relative=2]
2498 En matière de musique polyphonique, il est souvent plus judicieux
2499 d'utiliser des contextes @code{Voice} explicites que de modifier
2500 l'orientation des objets. Pour de plus amples informations, voir
2501 @ref{Plusieurs voix}.
2504 Manuel d'initiation :
2505 @rlearning{Objets inclus dans la portée}.
2507 Manuel de notation :
2508 @ref{Plusieurs voix}.
2511 @node Distances et unités de mesure
2512 @subsection Distances et unités de mesure
2513 @translationof Distances and measurements
2515 @cindex distance absolue
2516 @cindex distance relative
2517 @cindex distance extensible
2524 LilyPond considère deux types de distances : les distances absolues
2525 et les distances relatives ou extensibles.
2527 Les distances absolues permettent de spécifier les marges, indentations
2528 et autres détails de mise en page ; elles s'expriment par défaut en
2529 millimètres. Vous pouvez utiliser d'autres systèmes de mesure, dès lors
2530 que la quantité est suivie de la mesure : @code{\mm}, @code{\cm},
2531 @code{\in} (pouces) ou @code{\pt} (points, 1/72,27 pouce).
2532 Les mesures de mise en page peuvent aussi s'exprimer en unité extensible
2533 de portée @code{\staff-space} (voir ci-après). Pour plus d'information
2534 concernant la mise en page, voir la rubrique
2535 @ref{Mise en forme de la page}.
2537 Les distances relatives ou extensibles s'expriment toujours en
2538 @qq{espace de portée} ou, plus rarement, en @qq{demi espace de portée}.
2539 L'espace de portée correspond à la distance qui sépare deux lignes
2540 adjacentes d'une portée. Sa valeur par défaut est déterminée
2541 globalement par la taille de portée. Elle peut aussi s'ajuster
2542 ponctuellement en jouant sur la propriété @code{staff-space} de l'objet
2543 @code{StaffSymbol}. Les distances relatives s'ajustent automatiquement
2544 dès qu'une modification de la taille globale de portée ou bien de la
2545 propriété @code{staff-space} du @code{StaffSymbol} intervient.
2546 Cependant, les tailles de fonte ne s'ajusteront automatiquement que si
2547 la modification touche la taille globale des portées. La taille globale
2548 de portée permet ainsi de gérer l'aspect général de la partition --
2549 voir @ref{Définition de la taille de portée}.
2553 Lorsque seulement une portion de partition doit apparaître dans une
2554 taille, comme par exemple une portée d'ossia ou une note de bas de page,
2555 influer sur la taille globale de portée affecterait l'intégralité de la
2556 partition. Il convient donc dans ce cas de modifier à la fois la
2557 propriété @code{staff-space} du @code{StaffSymbol} et la taille des
2558 fontes. La fonction Scheme @code{magstep} est tout spécialement chargée
2559 d'adapter une modification du @code{staff-space} aux fontes. Pour de
2560 plus amples informations, reportez-vous à la rubrique
2561 @rlearning{Longueur et épaisseur des objets}.
2564 Manuel d'initiation :
2565 @rlearning{Longueur et épaisseur des objets}.
2567 Manuel de notation :
2568 @ref{Définition de la taille de portée},
2569 @ref{Mise en forme de la page}.
2572 @node Propriétés des symboles de la portée
2573 @subsection Propriétés des symboles de la portée
2574 @translationof Staff symbol properties
2576 @cindex ajustement des symboles de portée
2577 @cindex dessin des symboles de portée
2578 @cindex symboles de portée, dessin
2580 @c TODO Extend or remove this section. See also NR 1.6.2 Staff symbol
2581 @c Need to think of uses for these properties. Eg 'line-positions
2582 @c is used in a snippet to thicken centre line.
2583 @c If retained, add @ref to here in 1.6.2 -td
2585 L'emplacement vertical et le nombre de lignes d'une portée se
2586 définissent conjointement. Comme l'illustre l'exemple suivant, le
2587 positionnement des notes n'est en rien influencé par le positionnement
2588 des lignes de la portée.
2590 @warning{La propriété @code{'line-positions} écrase la propriété
2591 @code{'line-count}. Le nombre de lignes d'une portée est implicitement
2592 défini par le nombre d'éléments dans la liste des valeurs de
2593 @code{'line-positions}.}
2595 @lilypond[verbatim,quote,relative=1]
2597 \override StaffSymbol #'line-positions = #'(7 3 0 -4 -6 -7)
2602 La largeur d'une portée, exprimée en espace de portée, peut être figée.
2603 L'espacement des objets inclus dans cette portée ne sera en rien affecté
2606 @lilypond[verbatim,quote,relative=1]
2608 \override StaffSymbol #'width = #23
2614 @node Extenseurs et prolongateurs
2615 @subsection Extenseurs et prolongateurs
2616 @translationof Spanners
2618 De nombreux objets de notation musicale s'étendent sur plusieurs notes,
2619 voire même sur plusieurs mesures. Il en va ainsi des liaisons,
2620 ligatures, crochets de nolet, crochets de reprise, crescendos, trilles
2621 ou glissandos. Ces objets, que l'on englobe sous l'appellation
2622 @qq{d'extenseur}, sont pourvus de propriétés spécifiques destinées à
2623 contrôler leur apparence et leur comportement. Un certain nombre de ces
2624 propriétés sont communes à tous les extenseurs, d'autres n'affectent que
2625 certains d'entre eux.
2627 Tout extenseur dispose de la @code{spanner-interface}. Quelques uns,
2628 tout particulièrement ceux chargés de dessiner une ligne droite entre
2629 deux objets, disposent aussi de la @code{line-spanner-interface}.
2632 @unnumberedsubsubsec Utilisation de @code{spanner-interface}
2633 @translationof Using the @code{spanner-interface}
2635 Cette interface fournit deux propriétés qui s'appliquent à certains
2638 @strong{@i{La propriété @code{minimum-length}}}
2640 La longueur minimale d'un extenseur est déterminée par la propriété
2641 @code{minimum-length}. Au plus sa valeur est élevée, au plus
2642 l'espacement des notes qui le bornent sera grand. Forcer sa valeur
2643 restera néanmoins sans effet pour un certain nombre d'extenseurs dont la
2644 longueur dépend d'autres considérations. Voici quelques exemples de
2645 mise en œuvre de cette propriété.
2648 Cette propriété est pleinement fonctionnelle pour :
2649 Tie (liaison de prolongation)
2650 MultiMeasureRest (silence multimesures)
2652 Slur (liaison d'articulation)
2653 PhrasingSlur (liaison de phrasé)
2655 Cette propriété est fonctionnelle en présence d'un @emph{callback} :
2659 Cette propriété est sans effet sur :
2668 @lilypond[verbatim,quote,relative=2]
2671 % increase the length of the tie
2672 -\tweak #'minimum-length #5
2676 @lilypond[verbatim,quote,relative=2]
2678 \compressFullBarRests
2680 % increase the length of the rest bar
2681 \once \override MultiMeasureRest #'minimum-length = #20
2686 @lilypond[verbatim,quote,relative=2]
2688 % increase the length of the hairpin
2689 \override Hairpin #'minimum-length = #20
2693 Cette propriété permet aussi de jouer sur l'envergure d'une liaison
2694 d'articulation ou de phrasé.
2696 @lilypond[verbatim,quote,relative=2]
2699 -\tweak #'minimum-length #5
2704 -\tweak #'minimum-length #5
2708 Certains objets requièrent un appel explicite à la procédure
2709 @code{set-spacing-rods} pour que la propriété @code{minimum-length}
2710 produise ses effets. La propriété @code{set-spacing-rods} doit alors
2711 prendre pour valeur @code{ly:spanner::set-spacing-rods}. Par exemple, la
2712 longueur minimale d'un glissando ne pourra être forcée tant que la
2713 propriété @code{springs-and-rods} n'est pas définie :
2715 @lilypond[verbatim,quote,relative=1]
2719 % not effective alone
2720 \once \override Glissando #'minimum-length = #20
2723 % effective only when both overrides are present
2724 \once \override Glissando #'minimum-length = #20
2725 \once \override Glissando #'springs-and-rods = #ly:spanner::set-spacing-rods
2729 Il en va de même pour l'objet @code{Beam} (ligature) :
2731 @lilypond[verbatim,quote,relative=1]
2732 % not effective alone
2733 \once \override Beam #'minimum-length = #20
2736 % effective only when both overrides are present
2737 \once \override Beam #'minimum-length = #20
2738 \once \override Beam #'springs-and-rods = #ly:spanner::set-spacing-rods
2742 @strong{@i{La propriété @code{to-barline}}}
2744 La seconde propriété fournie par la @code{spanner-interface} est
2745 @code{to-barline}. Elle est activée par défaut, raison pour laquelle
2746 les soufflets et autres extenseurs finissant sur la première note d'une
2747 mesure s'arrêtent visuellement au niveau de la barre de mesure qui la
2748 précède. Le fait de désactiver la propriété @code{to-barline} aura pour
2749 effet de prolonger l'extenseur au delà de la barre de mesure et jusqu'à
2750 la note qui le borne :
2752 @lilypond[verbatim,quote,relative=2]
2753 a \< a a a a \! a a a \break
2754 \override Hairpin #'to-barline = ##f
2755 a \< a a a a \! a a a
2758 Cette propriété n'est pas opérationnelle pour tous les extenseurs. Il
2759 serait en effet quelque peu surprenant de l'activer (lui
2760 affecter @code{#t}) dans le cas d'une liaison d'articulation ou de
2764 @unnumberedsubsubsec Utilisation de @code{line-spanner-interface}
2765 @translationof Using the @code{line-spanner-interface}
2767 Un certain nombre d'objets disposent de la propriété
2768 @code{line-spanner-interface}, entre autres :
2771 @item @code{DynamicTextSpanner}
2772 @item @code{Glissando}
2773 @item @code{TextSpanner}
2774 @item @code{TrillSpanner}
2775 @item @code{VoiceFollower}
2778 La routine en charge de dessiner le stencil de ces extenseurs est
2779 @code{ly:line-interface::print}. Elle va déterminer les deux points
2780 extrêmes et dessiner entre eux une ligne du style requis. Bien que la
2781 localisation des deux bornes de l'extenseur soit calculée à la volée,
2782 vous pouvez cependant forcer leur ordonnée (coordonnée-Y). Les
2783 propriétés que vous devrez ajuster résident au deuxième niveau dans la
2784 hiérarchie, mais la syntaxe de la commande @code{\override} nécessaire
2785 demeure relativement simple :
2787 @lilypond[relative=2,quote,verbatim]
2789 \once \override Glissando #'(bound-details left Y) = #3
2790 \once \override Glissando #'(bound-details right Y) = #-2
2794 La propriété @code{Y} est valorisée en unités de @code{staff-space}, la
2795 ligne médiane de la portée correspondant au point zéro. Pour le
2796 glissando qui nous occupe, il s'agit du @code{Y} à l'aplomb
2797 (coordonnée-X) du centre de la tête de chacune des deux notes, si tant
2798 est que la ligne doive s'étendre entre ces deux points.
2800 Si le @code{Y} n'est pas défini, sa valeur sera calculée en fonction de
2801 la position verticale du point d'attachement de l'extenseur.
2803 Dans le cas où l'extenseur est interrompu par un saut de ligne, les
2804 terminaisons à cet endroit se gèrent grâce aux sous-clés
2805 @code{left-broken} et @code{right-broken} de @code{bound-details}, comme
2808 @lilypond[relative=2,ragged-right,verbatim,quote]
2809 \override Glissando #'breakable = ##t
2810 \override Glissando #'(bound-details right-broken Y) = #-3
2811 c1 \glissando \break
2815 Les sous-propriétés @code{left} et @code{right} du @code{bound-details}
2816 disposent d'autres clés modifiables de la même manière que @code{Y} :
2820 Détermine l'ordonnée (coordonnée-Y) de la terminaison, avec un
2821 décalage en @code{staff-space} par rapport à la ligne médiane de la
2822 portée. Il s'agit par défaut du centre de l'objet d'attachement, qui
2823 est le centre vertical de la tête de note pour un glissando.
2825 En ce qui concerne les extenseurs horizontaux, tels ceux comportant du
2826 texte ou les trilles, il est fixé à @code{0}.
2829 Détermine le début et la fin de la ligne sur l'axe des abscisses,
2830 relativement à l'objet de rattachement. Une valeur de @w{@code{-1}} (ou
2831 @code{LEFT}) aura pour effet de commencer ou terminer la ligne sur la
2832 gauche de la tête de note de rattachement.
2835 Il s'agit de l'abscisse (coordonnée-X) absolue de la terminaison. Elle
2836 se calcule à la volée, et son forçage n'apporte rien de plus.
2839 Les extenseurs linéaires peuvent commencer ou finir par un symbole,
2840 enregistré dans cette sous-propriété. Elle est conçue pour un usage
2841 interne, aussi nous vous conseillons de plutôt recourir à @code{text}.
2844 Il s'agit d'un @emph{markup} qui se poursuivra par l'extenseur. C'est la
2845 sous-propriété utilisée pour ajouter @i{cresc.}, @i{tr} ou autre texte à
2846 un extenseur horizontal.
2848 @lilypond[quote,ragged-right,relative=2,verbatim]
2849 \override TextSpanner #'(bound-details left text)
2850 = \markup { \small \bold Slower }
2851 c2\startTextSpan b c a\stopTextSpan
2854 @item stencil-align-dir-y
2855 @item stencil-offset
2856 Lorsqu'aucune de ces deux sous-propriétés n'est définie, le stencil est
2857 simplement positionné à l'extrémité, centré sur la ligne telle que
2858 définie par les sous-propriétés @code{X} et @code{Y}. L'utilisation de
2859 @code{stencil-align-dir-y} ou @code{stencil-offset} permettra d'aligner
2860 le symbole verticalement par rapport au coin de la ligne :
2862 @lilypond[relative=1,quote,verbatim]
2863 \override TextSpanner
2864 #'(bound-details left stencil-align-dir-y) = #-2
2865 \override TextSpanner
2866 #'(bound-details right stencil-align-dir-y) = #UP
2868 \override TextSpanner
2869 #'(bound-details left text) = #"ggg"
2870 \override TextSpanner
2871 #'(bound-details right text) = #"hhh"
2872 c4^\startTextSpan c c c \stopTextSpan
2875 Vous n'aurez pas manqué de constater qu'une valeur négative place le
2876 texte @emph{en haut} -- contrairement à ce que l'on serait en droit
2877 d'attendre. Ceci est dû au fait que la valeur @w{@code{-1}} ou
2878 @code{DOWN} signifie @qq{aligner le bord @emph{inférieur} du texte sur
2879 la ligne d'extension}. Une valeur égale à @code{1} ou @code{UP}
2880 alignera le sommet du texte sur cette ligne d'extension.
2883 L'activation de cette sous-propriété (lui affecter @code{#t}) ajoutera
2884 à l'extenseur une terminaison en flèche.
2887 Cette sous-propriété contrôle l'espace qui doit séparer l'extrémité de
2888 la ligne et la fin réelle de l'extenseur. Sans ce @qq{décalage}, le
2889 trait indiquant un glissando commencerait et finirait au beau milieu de
2890 chacune des têtes de note.
2894 La fonction @code{\endSpanners} permet d'interrompre l'extenseur qui
2895 vient dès la note suivante. Autrement dit, il ne s'étendra que sur une
2896 seule note, ou jusqu'à la prochaine barre de mesure si @code{to-barline}
2897 a été activé et que survient une barre avant la note suivante.
2899 @lilypond[verbatim,quote,ragged-right,relative=2]
2901 c2 \startTextSpan c2 c2
2906 L'utilisation de @code{\endSpanners} permet de s'affranchir d'insérer un
2907 @code{\stopTextSpan} pour clôturer un @code{\startTextSpan} ou un
2908 @code{\!} pour terminer un soufflet.
2911 Référence des propriétés internes :
2912 @rinternals{Glissando},
2913 @rinternals{line-spanner-interface},
2914 @rinternals{TextSpanner},
2915 @rinternals{TrillSpanner},
2916 @rinternals{VoiceFollower}.
2919 @node Visibilité des objets
2920 @subsection Visibilité des objets
2921 @translationof Visibility of objects
2923 @cindex objets, visibilité
2924 @cindex grobs, visibilité
2925 @cindex visibilité d'objets
2927 La visibilité des objets de rendu se contrôle de quatre façons
2928 différentes : vous pouvez supprimer leur stencil, les rendre
2929 transparents, les coloriser en blanc ou bien encore forcer leur
2930 propriété @code{break-visibility}. Les trois premières options peuvent
2931 s'appliquer à tous les objets, la dernière étant réservée aux objets
2932 @emph{changeables}. Le Manuel d'initiation contient une introduction à
2933 ces quatre techniques, à la rubrique
2934 @rlearning{Visibilité et couleur des objets}.
2936 LilyPond met en œuvre quelques techniques particulières adaptées à
2937 certains objets ; elles sont couvertes par une rubrique spécifique.
2940 * Suppression des stencils::
2941 * Transparence des objets::
2942 * Blanchiment des objets::
2943 * Utilisation de break-visibility::
2944 * Considérations spécifiques::
2948 @node Suppression des stencils
2949 @unnumberedsubsubsec Suppression des stencils
2950 @translationof Removing the stencil
2952 @cindex stencil, suppression
2954 Tout objet de rendu se voit attribuer une propriété @code{stencil}.
2955 Elle est par défaut définie par la fonction chargée de dessiner cet
2956 objet. Lorsque cette propriété est désactivée de force -- en lui
2957 attribuant la valeur @code{#f} -- aucune fonction ne sera appelée ;
2958 l'objet ne sera donc pas dessiné. Le retour au comportement par défaut
2959 s'opère à l'aide d'un @code{\revert}.
2961 @lilypond[quote,verbatim,relative=1]
2963 \override Score.BarLine #'stencil = ##f
2965 \revert Score.BarLine #'stencil
2970 @node Transparence des objets
2971 @unnumberedsubsubsec Transparence des objets
2972 @translationof Making objects transparent
2974 @cindex transparent, objet
2976 Tout objet de rendu dispose d'une propriété de transparence, qui est par
2977 défaut définie à @code{#f}. Le fait de l'activer rendra l'objet
2978 transparent tout en préservant la place qu'il occupe.
2980 @lilypond[quote,verbatim,relative=2]
2982 \once \override NoteHead #'transparent = ##t
2987 @node Blanchiment des objets
2988 @unnumberedsubsubsec Blanchiment des objets
2989 @translationof Painting objects white
2991 @cindex objets, couleur
2992 @cindex couleur d'objet
2995 @cindex impression, ordre
2996 @cindex surimpression d'objets
2997 @cindex objets, surimpression
2998 @cindex grobs, superposition
3000 Tout objet de rendu dispose d'une propriété couleur, par défaut définie
3001 à @code{black} (noir). Le fait de la forcer à @code{white} (blanc)
3002 rendra l'objet indistinct du fond blanc. Néanmoins, lorsque cet objet
3003 en recouvre d'autres, la couleur de leurs points de jonction dépendra de
3004 l'ordre dans lequel ils sont dessinés, ce qui peut laisser apparaître
3005 un fantôme de l'objet blanchi comme ci-dessous :
3007 @lilypond[quote,verbatim,relative=2]
3008 \override Staff.Clef #'color = #white
3012 Cet inconvénient peut être évité en modifiant l'ordre dans lequel les
3013 objets sont dessinés. Chaque objet de rendu dispose d'une propriété
3014 @code{layer} (calque ou niveau) à laquelle est affecté un nombre entier.
3015 Les objets ayant la plus faible valeur sont dessinés en premier, puis
3016 les autres, de telle sorte qu'un objet ayant une valeur plus élevée les
3017 recouvrira. La plupart des objet ont un @code{layer} valorisé
3018 à @code{1} -- quelques uns, dont @code{StaffSymbol} et
3019 @code{BarLine}, ont une valeur à @code{0}. L'ordre d'impression
3020 d'objets ayant une même valeur de @code{layer} est indéterminé.
3022 La clef de l'exemple précédent a par défaut un @code{layer}
3023 à @code{1} ; elle est donc dessinée après les lignes de la
3024 portée -- @code{layer} valorisé par défaut à @code{0} -- et donc
3025 les recouvre. Pour changer cet état de fait, l'objet @code{Clef} doit
3026 avoir un @code{layer} de valeur inférieure, disons @w{@code{-1}}, pour
3027 pouvoir être dessiné avant.
3029 @lilypond[quote,verbatim,relative=2]
3030 \override Staff.Clef #'color = #white
3031 \override Staff.Clef #'layer = #-1
3036 @node Utilisation de break-visibility
3037 @unnumberedsubsubsec Utilisation de break-visibility
3038 @translationof Using break-visibility
3040 @c TODO Add making other objects breakable
3042 @cindex break-visibility
3044 La plupart des objets de rendu ne sont imprimés qu'une seule fois ;
3045 certains cependant, tels les barres de mesure, clefs, métriques ou
3046 armures, apparaîtront deux fois lors d'un saut de ligne -- une première
3047 fois en fin de ligne, puis à nouveau au début de la ligne suivante. Ces
3048 objets, que l'on peut traiter de @emph{changeables} (@emph{breakable} en
3049 anglais) disposent de la propriété @code{break-visibility} spécialement
3050 chargée de contrôler leur visibilité aux trois endroits où il sont
3051 susceptibles d'apparaître : en début de ligne, en cours de ligne ou
3052 en fin de ligne -- si tant est qu'un changement s'y produise.
3054 Par exemple, la métrique est imprimée par défaut au début de la première
3055 ligne, et nulle part ailleurs. En cas de modification, une nouvelle
3056 métrique sera imprimée à l'endroit du changement. Dans le cas où ce
3057 changement intervient en fin de ligne, la nouvelle métrique s'imprime au
3058 début de la ligne suivante, et une métrique @qq{de précaution} viendra
3059 se placer au bout de la ligne précédente.
3061 Ce comportement est géré par la propriété @code{break-visibility}, dont
3062 vous trouverez une explication à la rubrique
3063 @rlearning{Visibilité et couleur des objets}. Cette propriété est
3064 constituée d'un vecteur de trois booléens qui, dans l'ordre, déterminent
3065 si l'objet sera imprimé à la fin, en cours, et au début d'une ligne --
3066 on pourrait aussi dire avant un saut de ligne, là où il n'y a pas de
3067 saut de ligne, et après un saut de ligne.
3069 Les huit combinaisons possibles sont aussi disponibles sous la forme de
3070 fonctions prédéfinies, regroupées dans le fichier
3071 @file{scm/output-lib.scm}. Le tableau suivant vous les présente ;
3072 les trois dernières colonnes indiquent l'endroit où l'objet sera visible.
3074 @multitable {@code{begin-of-line-invisible}} {@code{'#(#t #t #t. )}} {apres} {apres} {apres}
3075 @headitem Forme @tab Forme @tab Avant @tab Hors @tab Après
3076 @headitem fonctionnelle @tab vectorielle @tab saut @tab saut @tab saut
3078 @item @code{all-visible} @tab @code{'#(#t #t #t)} @tab oui @tab oui @tab oui
3079 @item @code{begin-of-line-visible} @tab @code{'#(#f #f #t)} @tab non @tab non @tab oui
3080 @item @code{center-visible} @tab @code{'#(#f #t #f)} @tab non @tab oui @tab non
3081 @item @code{end-of-line-visible} @tab @code{'#(#t #f #f)} @tab oui @tab non @tab non
3082 @item @code{begin-of-line-invisible} @tab @code{'#(#t #t #f)} @tab oui @tab oui @tab non
3083 @item @code{center-invisible} @tab @code{'#(#t #f #t)} @tab oui @tab non @tab oui
3084 @item @code{end-of-line-invisible} @tab @code{'#(#f #t #t)} @tab non @tab oui @tab oui
3085 @item @code{all-invisible} @tab @code{'#(#f #f #f)} @tab non @tab non @tab non
3088 Les réglages par défaut de la propriété @code{break-visibility}
3089 diffèrent selon l'objet de rendu. Le tableau suivant présente, pour la
3090 plupart des objets comportant la propriété @code{break-visibility},
3091 ces réglages par défaut.
3093 @multitable @columnfractions .3 .3 .4
3095 @headitem Objet de rendu @tab Contexte habituel @tab Réglage par défaut
3097 @c omit Ambitus as it appears not to be affected by break-visibility -td
3098 @c @item @code{Ambitus} @tab as specified @tab @code{begin-of-line-visible}
3099 @item @code{BarLine} @tab @code{Score} @tab calculé
3100 @item @code{BarNumber} @tab @code{Score} @tab @code{begin-of-line-visible}
3101 @c omit the following item until it can be explained -td
3102 @c @item @code{BreakAlignGroup} @tab @code{Score} @tab calculé
3103 @item @code{BreathingSign} @tab @code{Voice} @tab @code{begin-of-line-invisible}
3104 @item @code{Clef} @tab @code{Staff} @tab @code{begin-of-line-visible}
3105 @item @code{Custos} @tab @code{Staff} @tab @code{end-of-line-visible}
3106 @item @code{DoublePercentRepeat} @tab @code{Voice} @tab @code{begin-of-line-invisible}
3107 @c omit KeyCancellation until it can be explained -td
3108 @c @item @code{KeyCancellation} @tab ?? @tab @code{begin-of-line-invisible}
3109 @item @code{KeySignature} @tab @code{Staff} @tab @code{begin-of-line-visible}
3110 @c omit LeftEdge until it can be explained -td
3111 @c @item @code{LeftEdge} @tab @code{Score} @tab @code{center-invisible}
3112 @item @code{OctavateEight} @tab @code{Staff} @tab @code{begin-of-line-visible}
3113 @item @code{RehearsalMark} @tab @code{Score} @tab @code{end-of-line-invisible}
3114 @item @code{TimeSignature} @tab @code{Staff} @tab @code{all-visible}
3118 Voici un exemple d'utilisation de la forme vectorielle pour contrôler la
3119 visibilité des barres de mesure :
3121 @lilypond[quote,verbatim,relative=1,ragged-right]
3124 % Remove bar line at the end of the current line
3125 \once \override Score.BarLine #'break-visibility = #'#(#f #t #t)
3131 Lors d'un forçage de @code{break-visibility} sous une forme vectorielle,
3132 les trois éléments doivent impérativement être mentionnés. Ces formes
3133 vectorielles ne sont d'ailleurs pas prises en charge par tous les objets
3134 de rendu, et certaines combinaisons peuvent entraîner des erreurs ;
3135 nous citerons entre autres :
3138 @item Une barre de mesure ne peut s'imprimer en début de ligne.
3139 @item Un numéro de mesure ne peut apparaître au début de la première
3140 ligne, à moins d'être différent de 1.
3141 @item Clef -- voir ci-après.
3142 @item Les répétitions en pourcentage sont soit toutes imprimées, soit
3143 aucune. Vous devrez utiliser @code{begin-of-line-invisible} pour les
3144 voir et @code{all-invisible} pour les masquer.
3145 @item Armure -- voir ci-après.
3146 @item Indication d'octaviation -- voir ci-après.
3150 @node Considérations spécifiques
3151 @unnumberedsubsubsec Considérations spécifiques
3152 @translationof Special considerations
3154 @strong{@emph{Visibilité après changement explicite}}
3156 @cindex armure, visibilité après changement explicite
3157 @cindex explicitKeySignatureVisibility
3158 @cindex clef, visibilité après changement explicite
3159 @cindex explicitClefVisibility
3161 La propriété @code{break-visibility} contrôle la visibilité des armures
3162 ou changements de clef en début de ligne uniquement, donc après un saut.
3163 Elle ne produit aucun effet sur la visibilité d'une armure ou d'une clef
3164 après un changement explicite de tonalité ou de clef, ni en cours, ni en
3165 fin de ligne. Dans l'exemple suivant, l'armure est présente même après
3166 le passage en si bémol majeur malgré l'activation de
3167 @code{all-invisible} (@emph{tous invisibles}).
3169 @lilypond[quote,verbatim,relative=1,ragged-right]
3172 % Try to remove all key signatures
3173 \override Staff.KeySignature #'break-visibility = #all-invisible
3181 La visibilité lors de ces changements explicites d'armure ou de clef est
3182 géré respectivement par les propriétés
3183 @code{explicitKeySignatureVisibility} et @code{explicitClefVisibility}.
3184 Leur fonctionnement est en tout point identique à celui de la propriété
3185 @code{break-visibility} -- forme vectorielle à trois éléments ou forme
3186 fonctionnelle comme indiqué ci-avant. Toutes deux sont attachées au
3187 contexte @code{Staff} (la portée) et non directement aux objets de
3188 rendu ; elles sont de ce fait introduites par une instruction
3189 @code{\set}. Leur valeur par défaut est de toujours imprimer les objets
3190 -- réglage sur @code{all-visible}. Ces deux propriétés gèrent
3191 uniquement la visibilité des armures et clefs lors d'un changement
3192 explicite, et en dehors d'un début de ligne ; il faudra en pareil
3193 cas forcer la @code{break-visibility} de ces objets pour les supprimer.
3195 @lilypond[quote,verbatim,relative=1,ragged-right]
3198 \set Staff.explicitKeySignatureVisibility = #all-invisible
3199 \override Staff.KeySignature #'break-visibility = #all-invisible
3206 @strong{@emph{Visibilité des altérations de précaution}}
3208 L'impression d'altérations de précaution au moment d'un changement
3209 explicite de tonalité sera annulée dès lors que vous aurez désactivé la
3210 propriété @code{printKeyCancellation} du contexte @code{Staff} :
3212 @lilypond[quote,verbatim,relative=1,ragged-right]
3215 \set Staff.explicitKeySignatureVisibility = #all-invisible
3216 \set Staff.printKeyCancellation = ##f
3217 \override Staff.KeySignature #'break-visibility = #all-invisible
3224 Avec de tels réglages particuliers, seules les altérations accidentelles
3225 permettront d'indiquer le changement de tonalité.
3227 @c TODO Add visibility of cautionary accidentals before notes
3229 @strong{@emph{Barres de mesure automatiques}}
3231 @cindex automaticBars
3232 @cindex barres de mesure, suppression
3234 La désactivation de la propriété @code{automaticBars}, qui réside dans
3235 le contexte @code{Score}, permet de s'affranchir d'imprimer
3236 automatiquement les barres de mesure ; seules seront imprimées les
3237 barres explicitées à l'aide de la commande @code{\bar}. Néanmoins, et
3238 contrairement à ce qui se passe avec la commande @code{\cadenzaOn}, le
3239 compteur de numéro de mesure continuera de s'incrémenter. Les barres
3240 s'imprimeront à nouveau, au niveau où en est le compteur, dès que la
3241 propriété @code{automaticBars} sera réactivée. Gardez à l'esprit que
3242 les sauts de ligne, lorsque cette propriété est désactivée, ne peuvent
3243 intervenir qu'à l'occasion d'un @code{\bar} explicite.
3247 @strong{@emph{Clefs octaviées}}
3249 @cindex octaviation, visibilité de la clef
3250 @cindex visibilité d'un clef octaviée
3251 @cindex clef, visibilité de l'octaviation
3253 L'indication d'octaviation d'une clef est produite par l'objet de rendu
3254 @code{OctavateEight}. Sa visibilité étant gérée par héritage direct de
3255 l'objet @code{Clef}, nul n'est besoin de forcer un quelconque
3256 @code{break-visibility} au niveau des objets @code{OctavateEight} pour
3257 éliminer une indication d'octaviation lorsque la clef est invisible.
3259 Lors d'un changement explicite de clef, la propriété
3260 @code{explicitClefVisibility} gère à la fois le symbole de la clef et
3261 l'indication d'octaviation qui lui est attachée.
3264 Manuel d'initiation :
3265 @rlearning{Visibilité et couleur des objets}
3268 @node Styles de ligne
3269 @subsection Styles de ligne
3270 @translationof Line styles
3272 Certaines indications portées à l'attention de l'exécutant -- tels
3273 @i{rallentando}, @i{accelerando} et @i{trilles} -- apparaissent sous la
3274 forme d'un texte qui peut s'étendre sur plusieurs mesures à l'aide d'une
3275 ligne parfois pointillée ou ondulée.
3277 En matière de dessin du texte et des lignes, ces indications font appel
3278 aux mêmes routines que le glissando ; leur comportement peut donc
3279 être affiné selon les mêmes préceptes, au moyen de la routine
3280 @code{ly:line-interface::print} qui est tout spécialement chargée de
3281 dessiner les extenseurs. Cette routine détermine l'emplacement exact
3282 des deux points extrêmes de l'extenseur, puis trace une ligne du style
3283 demandé entre ces deux points.
3285 L'exemple ci-dessous indique les différents styles de ligne disponibles,
3286 ainsi que la manière de les spécifier.
3288 @lilypond[relative=2,ragged-right,verbatim,quote]
3290 \once \override Glissando #'style = #'dashed-line
3292 \override Glissando #'style = #'dotted-line
3294 \override Glissando #'style = #'zigzag
3296 \override Glissando #'style = #'trill
3300 Les points d'ancrage de l'extension sont calculés à la volée pour chaque
3301 objet graphique, mais rien ne vous empêche de les forcer :
3304 @lilypond[relative=2,ragged-right,verbatim,quote]
3306 \once \override Glissando #'(bound-details right Y) = #-2
3310 La valeur de @code{Y} est ainsi fixée à @w{@code{-2}} en ce qui concerne
3311 la borne droite. Il en irait de même pour la borne gauche en spécifiant
3312 @code{left} (gauche) au lieu de @code{right} (droite).
3314 En l'absence de réglage du @code{Y}, celui-ci est calculé à partir de
3315 l'emplacement vertical des points d'attache gauche et droit de
3318 De plus amples informations quant à l'ajustement des extenseurs font
3319 l'objet de la rubrique @ref{Extenseurs et prolongateurs}.
3322 @node Rotation des objets
3323 @subsection Rotation des objets
3324 @translationof Rotating objects
3326 Qu'il s'agisse des objets de rendu ou d'éléments textuels sous forme de
3327 @emph{markup}, vous pouvez les faire pivoter selon vos désirs et à
3328 partir de n'importe quel point. La méthode diffère cependant selon ce
3329 que vous désirez manipuler.
3332 * Rotation des objets de mise en forme::
3333 * Rotation des étiquettes::
3337 @node Rotation des objets de mise en forme
3338 @unnumberedsubsubsec Rotation des objets de mise en forme
3339 @translationof Rotating layout objects
3341 Tout objet de rendu disposant de la @code{grob-interface} est
3342 susceptible de pivoter, grâce à la propriété @code{rotation}. Celle-ci
3343 prend en argument une liste de trois éléments : l'angle de rotation
3344 -- dans le sens inverse des aiguilles d'une montre -- ainsi que les
3345 coordonnées @code{x} et @code{y} du point appartenant à l'objet en
3346 question et à partir duquel doit s'effectuer cette rotation. L'angle
3347 est exprimé en degrés, les coordonnées en espaces de portée.
3349 L'angle et les coordonnées ne peuvent se déterminer que par tâtonnement.
3351 @cindex soufflet penché
3353 Il existe assez peu de situation où faire pivoter un objet de mise en
3354 forme soit réellement opportun ; en voici une :
3356 @lilypond[quote,verbatim,relative=1]
3358 \override Hairpin #'rotation = #'(20 -1 0)
3363 @node Rotation des étiquettes
3364 @unnumberedsubsubsec Rotation des étiquettes
3365 @translationof Rotating markup
3367 Tout texte faisant l'objet d'un @emph{markup} peut pivoter selon
3368 n'importe quel angle, à l'aide de la commande @code{\rotate}. Celle-ci
3369 prend deux arguments : l'angle de rotation exprimé en degrés --
3370 dans le sens inverse des aiguilles d'une montre -- et le texte à
3371 basculer. Il ne s'agit pas ici de faire pivoter les extrémités du
3372 texte ; celles-ci récupéreront leurs coordonnées x et y du@emph{markup}
3373 pivoté. Dans l'exemple ci-dessous, la propriété
3374 @code{outside-staff-priority} à été fixée à @code{#f} afin de désactiver
3375 l'évitement automatique des collisions qui pourrait repousser certains
3379 @lilypond[quote,verbatim,relative=1]
3380 \override TextScript #'outside-staff-priority = ##f
3381 g4^\markup { \rotate #30 "un sol" }
3382 b^\markup { \rotate #30 "un si" }
3383 des^\markup { \rotate #30 "un ré bémol" }
3384 fis^\markup { \rotate #30 "un fa dièse" }
3388 @node Retouches avancées
3389 @section Retouches avancées
3390 @translationof Advanced tweaks
3392 Nous allons voir, au fil des paragraphes qui suivent, différentes
3393 approches permettant de fignoler l'apparence d'une partition.
3396 * Alignement des objets::
3397 * Regroupement vertical d'objets graphiques::
3398 * Modification des stencils::
3399 * Modification de l'allure des éléments::
3400 * Conteneurs requalifiants::
3404 Manuel d'initiation :
3405 @rlearning{Autres sources de documentation},
3406 @rlearning{Retouche de partition}.
3408 Manuel de notation :
3409 @ref{En quoi consiste la référence des propriétés internes},
3410 @ref{Modification de propriétés}.
3412 Manuel d'extension :
3413 @rextend{Interfaces pour programmeurs}.
3415 Fichiers d'initialisation :
3416 @file{scm/define-grobs.scm}.
3419 @rlsrnamed{Tweaks and overrides,Retouches}.
3421 Référence des propriétés internes :
3422 @rinternals{All layout objects}.
3425 @node Alignement des objets
3426 @subsection Alignement des objets
3427 @translationof Aligning objects
3429 Les objets graphiques disposant des interfaces
3430 @code{self-alignment-interface} ou @code{side-position-interface}
3431 peuvent s'aligner par rapport à un objet précédemment positionné, ce de
3432 différentes manières. Ces objets sont référencés aux rubriques
3433 @rinternals{self-alignment-interface} et
3434 @rinternals{side-position-interface}.
3436 Tous les objets graphiques ont un point de référence, une étendue
3437 horizontale et une étendue verticale. L'étendue horizontale est
3438 représentée par une paire de nombres indiquant l'écart entre le point de
3439 référence et les bords gauche et droit -- l'écart à gauche étant
3440 négatif. L'étendue verticale est représentée par une paire de nombres
3441 indiquant l'écart entre le point de référence et les bords inférieur et
3442 supérieur -- l'écart vers le bas étant négatif.
3444 La position d'un objet sur la portée est donnée par la valeur des
3445 propriétés @code{X-offset} et @code{Y-offset}. La valeur de
3446 @code{X-offset} indique l'écart en abscisse (coordonnée X) par rapport
3447 au point de référence de l'objet parent ; la valeur de
3448 @code{Y-offset} indique l'écart par rapport à la ligne médiane de la
3449 portée. Les valeurs de @code{X-offset} et @code{Y-offset} peuvent être
3450 fournies arbitrairement, ou bien être calculé par des procédures
3451 spécifiques qui détermineront l'alignement par rapport à l'objet parent.
3453 @warning{Nombre d'objets sont affectés par des considérations
3454 spécifiques en matière de positionnement ; jouer sur les valeurs de
3455 @code{X-offset} ou @code{Y-offset} se révélera inefficace en pareil
3456 cas, même si l'objet dispose de la @code{self-alignment-interface}.
3457 Fixer arbitrairement les propriétés @code{X-offset} ou @code{Y-offset}
3458 annihilera alors les effets de la propriété @code{self-alignment}
3461 Par exemple, une altération peut se repositionner verticalement grâce à
3462 son @code{Y-offset} ; toute modification de son @code{X-offset}
3463 restera par contre sans effet.
3465 Les indications de repère s'alignent sur des objets de rupture -- tels
3466 les barres de mesure, clefs, métriques et armures. Certaines propriétés
3467 spécifiques -- dépendant de la @code{break-aligned-interface} --
3468 permettent de gérer le positionnement des indications de repère sur ces
3472 * Détermination directe de X-offset et Y-offset::
3473 * Utilisation de side-position-interface::
3474 * Utilisation de self-alignment-interface::
3475 * Utilisation de break-aligned-interface::
3479 Manuel de notation :
3480 @ref{Utilisation de break-aligned-interface}.
3482 Manuel d'extension :
3483 @rextend{Fonctions de rappel}.
3486 @node Détermination directe de X-offset et Y-offset
3487 @unnumberedsubsubsec Détermination directe de @code{X-offset} et @code{Y-offset}
3488 @translationof Setting X-offset and Y-offset directly
3490 Vous pouvez fournir, pour de nombreux objets, des valeurs numériques aux
3491 propriétés @code{X-offset} et @code{Y-offset}. Voici par exemple une
3492 note avec indication du doigté tout d'abord avec un positionnement par
3493 défaut, puis repositionnement par modification successive du
3494 @code{X-offset} et du @code{Y-offset}.
3496 @lilypond[verbatim,quote,relative=2]
3499 -\tweak #'X-offset #0
3500 -\tweak #'Y-offset #0
3503 -\tweak #'X-offset #-1
3504 -\tweak #'Y-offset #1
3511 @node Utilisation de side-position-interface
3512 @unnumberedsubsubsec Utilisation de @code{side-position-interface}
3513 @translationof Using the side-position-interface
3515 Un objet disposant de la @code{side-position-interface} peut se voir
3516 accolé à son voisin de telle sorte que les bords des deux objets se
3517 touchent. Un tel objet peut se positionner au-dessus, en dessous, à
3518 droite ou à gauche de son parent. Ce parent ne saurait être
3519 stipulé ; il est déterminé par l'ordre d'apparition des éléments
3520 dans le flux des saisies. La plupart de ces objets ont pour parent une
3523 Les valeurs des propriétés @code{side-axis} et @code{direction}
3524 détermineront l'endroit où viendra se positionner l'objet, selon les
3525 préceptes suivants :
3527 @c TODO add an example of each to the table
3529 @multitable @columnfractions .3 .3 .3
3530 @headitem Propriété @tab Propriété @tab Positionnement
3531 @headitem @code{side-axis} @tab @code{direction} @tab
3533 @item @code{0} @tab @code{-1} @tab gauche
3534 @item @code{0} @tab @code{1} @tab droite
3535 @item @code{1} @tab @code{-1} @tab en dessous
3536 @item @code{1} @tab @code{1} @tab au-dessus
3540 Pour un @code{side-axis} à @code{0}, le @code{X-offset} devrait engager
3541 la procédure @code{ly:side-position-interface::x-aligned-side}.
3542 Celle-ci renverra la valeur adéquate de @code{X-offset} permettant
3543 d'accoler l'objet sur la droite ou sur la gauche de son parent, selon la
3544 valeur de @code{direction}.
3546 Pour un @code{side-axis} à @code{1}, le @code{Y-offset} devrait engager
3547 la procédure @code{ly:side-position-interface::y-aligned-side}.
3548 Celle-ci renverra la valeur adéquate de @code{Y-offset} permettant
3549 d'accoler l'objet au-dessus ou en dessous de son parent, selon la
3550 valeur de @code{direction}.
3552 @c TODO Add examples
3555 @node Utilisation de self-alignment-interface
3556 @unnumberedsubsubsec Utilisation de @code{self-alignment-interface}
3557 @translationof Using the self-alignment-interface
3559 @emph{Réalignement d'objets horizontalement}
3561 L'alignement horizontal d'un objet disposant de la
3562 @code{self-alignment-interface} dépend de la valeur de sa propriété
3563 @code{self-alignment-X}, si tant est que la propriété @code{X-offset} de
3564 cet objet engage la procédure
3565 @code{ly:self-alignment-interface::x-aligned-on-self}.
3566 La propriété @code{self-alignment-X} peut contenir un nombre réel,
3567 l'unité de base étant la moitié de l'étendue horizontale de l'objet.
3568 Une valeur négative décalera l'objet vers la droite, une valeur positive
3569 vers la gauche. La valeur @code{0} permet de centrer l'objet sur
3570 le point de référence de son parent. Une valeur de @w{@code{-1}}
3571 alignera le bord gauche de l'objet sur le point de référence de son
3572 parent, et une valeur de @code{1} alignera le bord droit de l'objet
3573 sur le point de référence de son parent. Les valeurs symboliques
3574 @code{LEFT}, @code{CENTER} et @code{RIGHT} correspondent respectivement
3575 à @w{@code{-1}}, @code{0} et @code{1}.
3577 En règle générale, la valeur de @code{self-alignment-X} se modifie à
3578 l'aide d'une commande @code{\override}. Le recours à la commande
3579 @code{\tweak} permet de traiter séparément plusieurs annotations
3580 affectées à une même note :
3582 @lilypond[quote,verbatim,relative=1]
3584 -\tweak #'self-alignment-X #-1
3586 -\tweak #'self-alignment-X #0
3588 -\tweak #'self-alignment-X #RIGHT
3590 -\tweak #'self-alignment-X #-2.5
3591 ^"aligned further to the right"
3595 @emph{Réalignement d'objets verticalement}
3597 L'alignement vertical suit le même principe : la propriété
3598 @code{Y-offset} doit alors engager la procédure
3599 @code{ly:self-alignment-interface::y-aligned-on-self}. Toutefois, il
3600 arrive bien souvent que d'autres mécanismes interviennent dans
3601 l'alignement vertical. La valeur de @code{Y-offset} n'étant que
3602 l'une des variables qui seront prises en compte, l'ajustement pour
3603 certains objets peut se révéler fastidieux. L'unité de base est
3604 relativement réduite, puisqu'elle est de la moitié de l'étendue
3605 verticale de l'objet ; le nombre à fournir en argument pourrait
3606 donc être relativement élevé. Une valeur de @w{@code{-1}}
3607 alignera le bord inférieur de l'objet sur le point de référence de son
3608 parent, et une valeur de @code{1} alignera le bord supérieur de
3609 l'objet sur le point de référence de son parent. La
3610 valeur @code{0} permet de centrer l'objet sur le point de référence
3611 de son parent. Les valeurs symboliques @code{DOWN}, @code{CENTER} et
3612 @code{UP} correspondent respectivement à @w{@code{-1}}, @code{0}
3616 @emph{Réalignement d'objets sur les deux axes}
3618 Définir à la fois @code{X-offset} et @code{Y-offset} permet de réaligner
3619 un objet sur les deux axes.
3621 Dans l'exemple ci-dessous, nous ajustons l'indication de doigté de telle
3622 sorte qu'elle se place au plus près de la tête de note.
3624 @lilypond[quote,verbatim,relative=2]
3626 -\tweak #'self-alignment-X #0.5 % move horizontally left
3627 -\tweak #'Y-offset #ly:self-alignment-interface::y-aligned-on-self
3628 -\tweak #'self-alignment-Y #-1 % move vertically up
3634 @unnumberedsubsubsec Utilisation de @code{aligned-on-parent}
3636 @c Cannot document as they do not seem to operate consistently on all objects -td
3637 @c TODO investigate further
3639 The @code{aligned-on-parent} procedures are used in the same way
3640 as the @code{aligned-on-self} procedures, they difference being
3641 that they permit an object to be aligned with the @emph{edges} of
3642 the parent rather than the parent's reference point. The following
3643 example shows the difference:
3647 @lilypond[verbatim,quote]
3654 @c unnumberedsubsubsec Utilisation de @code{centered-on-parent}
3656 @c Cannot document as they do not seem to operate consistently on all objects -td
3657 @c TODO investigate further
3661 @c TODO The align-interface, BassFigureAlignment and VerticalAlignment
3664 @node Utilisation de break-aligned-interface
3665 @unnumberedsubsubsec Utilisation de @code{break-aligned-interface}
3666 @translationof Using the break-alignable-interface
3668 @cindex alignement sur un objet
3669 @cindex break-align-symbols
3671 Indications de repère et numéros de mesure peuvent s'aligner sur des
3672 objets de notation autres qu'une barre de mesure. Parmi ces objets,
3673 nous citerons @code{ambitus}, @code{breathing-sign}, @code{clef},
3674 @code{custos}, @code{staff-bar}, @code{left-edge},
3675 @code{key-cancellation}, @code{key-signature}, et @code{time-signature}.
3677 Ces indications et numéros de mesure sont par défaut centrés
3678 horizontalement au-dessus de l'objet :
3680 @lilypond[verbatim,quote,relative=1]
3681 % The rehearsal mark will be centered above the Clef
3682 \override Score.RehearsalMark #'break-align-symbols = #'(clef)
3687 % The rehearsal mark will be centered above the Time Signature
3688 \override Score.RehearsalMark #'break-align-symbols = #'(time-signature)
3694 % The rehearsal mark will be centered above the Breath Mark
3695 \override Score.RehearsalMark #'break-align-symbols = #'(breathing-sign)
3704 Les différents objets sur lesquels l'alignement pourrait intervenir
3705 seront regroupés dans une liste. Si l'un des objets est invisible à
3706 l'endroit voulu, en raison d'un réglage de @code{break-visibility} ou
3707 bien par forçage de la visibilité des armures et clefs, le repère ou le
3708 numéro de mesure viendra s'aligner sur le premier élément de cette liste
3709 qui soit visible. Dans le cas où aucun objet de la liste n'est visible,
3710 l'alignement se fera sur la barre de mesure ou, dans le cas où la barre
3711 de mesure est invisible, à l'endroit même où la barre prendrait place.
3713 @lilypond[verbatim,quote,relative=1]
3714 % The rehearsal mark will be centered above the Key Signature
3715 \override Score.RehearsalMark #'break-align-symbols = #'(key-signature clef)
3720 % The rehearsal mark will be centered above the Clef
3721 \set Staff.explicitKeySignatureVisibility = #all-invisible
3722 \override Score.RehearsalMark #'break-align-symbols = #'(key-signature clef)
3727 % The rehearsal mark will be centered above the Bar Line
3728 \set Staff.explicitKeySignatureVisibility = #all-invisible
3729 \set Staff.explicitClefVisibility = #all-invisible
3730 \override Score.RehearsalMark #'break-align-symbols = #'(key-signature clef)
3737 L'alignement d'un repère sur un objet de notation peut se modifier,
3738 comme l'illustre l'exemple suivant. Toutefois, si la partition comporte
3739 plusieurs portées, ce réglage devra apparaître dans chacune des portées.
3741 @lilypond[verbatim,quote,relative=1]
3742 % The RehearsalMark will be centered above the Key Signature
3743 \override Score.RehearsalMark #'break-align-symbols = #'(key-signature)
3749 % The RehearsalMark will be aligned with the left edge of the Key Signature
3750 \once \override Score.KeySignature #'break-align-anchor-alignment = #LEFT
3754 % The RehearsalMark will be aligned with the right edge of the Key Signature
3755 \once \override Score.KeySignature #'break-align-anchor-alignment = #RIGHT
3761 Le bord gauche d'un repère peut se décaler arbitrairement sur la gauche
3762 ou la droite. La valeur est exprimée en espaces de portée.
3764 @lilypond[verbatim,quote,relative=1]
3765 % The RehearsalMark will be aligned with the left edge of the Key Signature
3766 % and then shifted right by 3.5 staff-spaces
3767 \override Score.RehearsalMark #'break-align-symbols = #'(key-signature)
3768 \once \override Score.KeySignature #'break-align-anchor = #3.5
3772 % The RehearsalMark will be aligned with the left edge of the Key Signature
3773 % and then shifted left by 2 staff-spaces
3774 \once \override Score.KeySignature #'break-align-anchor = #-2
3781 @node Regroupement vertical d'objets graphiques
3782 @subsection Regroupement vertical d'objets graphiques
3783 @translationof Vertical grouping of grobs
3785 @c TODO Expand this section
3787 Les objets @code{VerticalAlignment} et @code{VerticalAxisGroup}
3788 travaillent de concert. Comme leur nom anglais l'indiquent,
3789 @code{VerticalAxisGroup} regroupe différents objets tels que les portées
3790 (@code{Staff}), les paroles (@code{Lyrics}) et ainsi de suite ;
3791 puis @code{VerticalAlignment} synchronise verticalement ces différents
3792 groupes. En général, il n'y a qu'un seul @code{VerticalAlignment} pour
3793 l'ensemble de la partition, mais chaque contexte @code{Staff},
3794 @code{Lyrics} etc. possède son propre @code{VerticalAxisGroup}.
3797 @node Modification des stencils
3798 @subsection Modification des stencils
3799 @translationof Modifying stencils
3801 Tout objet de rendu dispose d'une propriété @code{stencil} attachée à la
3802 @code{grob-interface}. En règle générale, cette propriété référence
3803 par défaut une fonction spécifique à l'objet et taillée sur mesure pour
3804 fournir le symbole qui va le représenter dans l'output. Par exemple,
3805 le réglage standard de la propriété @code{stencil} de l'objet
3806 @code{MultiMeasureRest} est @code{ly:multi-measure-rest::print}.
3808 Le symbole standard d'un objet quel qu'il soit peut être remplacé à
3809 partir du moment où la propriété @code{stencil} référence une procédure
3810 différente et écrite à cet effet. Ceci requiert une bonne maîtrise du
3811 fonctionnement interne de LilyPond, mais est grandement facilité dans
3812 bien des cas et permet d'obtenir le résultat escompté.
3814 En effet, rien ne nous interdit, à partir de la propriété
3815 @code{stencil}, d'appeler la procédure qui génère du texte,
3816 @code{ly:text-interface::print} en l'occurrence, et d'adjoindre à l'objet
3817 une propriété @code{text} qui contiendra, sous forme de @emph{markup},
3818 le symbole à dessein. Grâce à l'extrême flexibilité des @emph{markups},
3819 vous pourrez parvenir à bien des choses -- voir à ce sujet
3820 @ref{Éléments graphiques dans du texte formaté}.
3822 C'est la technique employée ici, où l'une des têtes de note est
3823 remplacée par une croix inscrite dans un cercle :
3825 @lilypond[verbatim,quote]
3827 \once \override NoteHead #'stencil = #ly:text-interface::print
3828 \once \override NoteHead #'text = \markup {
3830 \halign #-0.7 \draw-circle #0.85 #0.2 ##f
3831 \musicglyph #"noteheads.s2cross"
3839 Tous les glyphes de la fonte Feta sont accessibles à l'aide de la
3840 commande de @emph{markup} @code{\musicglyph} -- voir
3841 @ref{La fonte Feta}.
3843 @c TODO Add inserting eps files or ref to later
3845 @c TODO Add inserting Postscript or ref to later
3848 Manuel de notation :
3849 @ref{Text markup commands},
3850 @ref{Éléments graphiques dans du texte formaté},
3851 @ref{La fonte Feta},
3852 @ref{Mise en forme du texte}.
3855 @node Modification de l'allure des éléments
3856 @subsection Modification de l'allure des éléments
3857 @translationof Modifying shapes
3860 * Modification des liaisons::
3864 @node Modification des liaisons
3865 @unnumberedsubsubsec Modification des liaisons
3866 @translationof Modifying ties and slurs
3868 @cindex liaison, modification
3869 @cindex Bézier, points de contrôle d'une courbe
3870 @cindex points de contrôle, courbe de Bézier
3872 Les liaisons, qu'elles soient de prolongation, d'articulation ou de
3873 phrasé, sont dessinées sous la forme de courbes de Bézier de degré
3874 trois. Lorsque l'aspect de la liaison automatiquement calculé n'est pas
3875 satisfaisant, il peut être modifié manuellement, en fournissant
3876 explicitement les quatre points de contrôle qui permettront de définir
3879 Quatre points définissent une courbe de Bézier cubique. Les premier et
3880 quatrième points sont les points de départ et d'arrivée de la
3881 courbe ; les deux autres points de contrôle -- P1 et P2 -- en
3882 détermineront l'allure. La courbe se trace en partant du point P0, en
3883 se dirigeant vers P1 et en arrivant au point P3 selon la direction
3884 @w{P2-P3}. La courbe est à l'intérieur de l'enveloppe convexe des
3887 Voici par exemple une liaison de prolongation dont l'allure n'est pas
3888 des plus heureuses, même en optant pour un @code{\tieDown}.
3890 @lilypond[verbatim,quote,relative=1]
3894 { r4 <g c,> <g c,> <g c,> }
3898 L'un des moyens d'améliorer cette liaison consiste à modifier
3899 manuellement ses quatre points de contrôle.
3901 Les coordonnées des points de contrôle sont données en unités d'espace
3902 de portée. L'abscisse est relative au point de référence de la note de
3903 départ de la liaison ; l'ordonnée est relative à la ligne médiane
3904 de la portée. Les différentes coordonnées sont entrées sous la forme
3905 d'une liste de quatre paires de nombres décimaux (ou nombres réels).
3906 L'une des manières de procéder consiste à tout d'abord estimer les
3907 coordonnées des deux extrémités puis, par tâtonnement, déterminer les
3908 deux points intermédiaires.
3910 Remarque intéressante au sujet des courbes : une courbe sera
3911 symétrique si ses points de contrôle sont symétriques. L'une des
3912 propriétés avantageuses des courbes de Bézier est que leur
3913 transformation -- déplacement, rotation ou échelonnement -- est
3914 réalisable en simplement corrigeant de manière identique ses points de
3917 Pour l'exemple qui nous occupe, l'adaptation suivante nous permet
3918 d'obtenir un résultat plutôt satisfaisant. Notez bien l'endroit où
3919 cette adaptation est stipulée : juste avant la note de départ de la
3922 @lilypond[verbatim,quote,relative=1]
3926 #'control-points = #'((1 . -1) (3 . 0.6) (12.5 . 0.6) (14.5 . -1))
3930 { r4 <g c,> <g c,> <g c,> }
3935 Lorsque plusieurs liaisons, quelle qu'en soit la nature, commencent au
3936 même moment, jouer sur la propriété @code{control-points} est
3937 impossible, et la commande @code{\tweak} inefficace. Vous pouvez
3938 néanmoins influer sur la propriété @code{tie-configuration} de l'objet
3939 @code{TieColumn} pour déterminer la ligne de départ et l'orientation.
3942 Référence des propriétés internes :
3943 @rinternals{TieColumn}.
3946 @node Conteneurs requalifiants
3947 @subsection Conteneurs requalifiants
3948 @translationof Unpure-pure containers
3950 @cindex Scheme, pure containers
3951 @cindex Scheme, unpure containers
3952 @cindex pure containers, Scheme
3953 @cindex unpure containers, Scheme
3954 @cindex espacement horizontal, affinage
3956 Les conteneurs requalifiants permettent de faciliter le calcul des
3957 espacements en cas de modification du @emph{Y-axis} -- plus
3958 particulièrement les composantes @code{Y-offset} et @code{Y-extent} -- à
3959 l'aide d'une fonction scheme en lieu et place de valeurs.
3961 L'envergure verticale (@code{Y-extent}) de certains objets dépend de la
3962 propriété @code{stencil} ; jouer sur leur stencil requiert alors une
3963 intervention supplémentaire au niveau du @code{Y-extent} à l'aide d'un
3964 conteneur transitoire. Lorsqu'une fonction affecte un @code{Y-offset} ou
3965 un @code{Y-extent}, cela déclenche la détermination des sauts de ligne
3966 de manière anticipée dans la séquence des traitements. Il en résulte
3967 que cette opération n'est en fait pas exécutée ; elle renvoie
3968 habituellement @code{0} ou @code{'(0 . 0)}, ce qui peut engendrer des
3969 collisions. Une fonction @qq{pure} évitera d'avorter la construction
3970 des propriétés ou objets, qui de ce fait verront leurs arguments liés à
3971 la verticalité (@code{Y-axis}) correctement évalués.
3973 Il existe actuellement une trentaine de fonctions que l'on peut
3974 qualifier de @qq{pures}. Le recours à un conteneur transitoire permet
3975 de requalifier une fonction de telle sorte qu'elle soit reconnue comme
3976 @qq{pure} et soit donc évaluée @strong{avant} détermination des sauts de
3977 ligne -- l'espacement horizontal sera de fait ajusté en temps et en heure.
3978 La fonction @qq{impure} sera ensuite évaluée @strong{après} le
3979 positionnement des sauts de ligne.
3981 @warning{Il n'est pas toujours facile d'avoir l'assurance qu'une
3982 fonction soit qualifiée de @qq{pure} ; aussi nous vous recommandons
3983 d'éviter d'utiliser les objets @code{Beam} or @code{VerticalAlignment}
3984 lorsque vous désirez en créer une.}
3986 Un conteneur requalifiant se construit selon la syntaxe
3988 @code{(ly:make-unpure-pure-container f0 f1)}
3990 où @code{f0} est une fonction prenant @var{n} arguments (@var{n_>=_1}),
3991 le premier devant être l'objet en question ; il s'agit de la
3992 fonction dont le résultat sera réutilisé. @var{f1} est la fonction qui
3993 sera qualifiée de @qq{pure}. Elle prend @var{n_+_2} arguments, le
3994 premier devant être lui aussi l'objet en question, et les second et
3995 troisième étant respectivement les @qq{point de départ} (@var{start}) et
3996 @qq{point d'arrivée} (@var{end}).
3998 @var{start} et @var{end} sont dans tous les cas des valeurs fictives qui
3999 trouveront leur utilité dans le cas d'objets de type @code{Spanner},
4000 tels les soufflets (@code{Hairpin}) ou barres de ligature (@code{Beam}),
4001 en retournant les différentes estimations de hauteur basées sur leurs
4002 début et fin d'extension.
4004 Viennent ensuite les autres arguments de la fonction initiale @code{f0}
4005 -- autrement dit aucun si @var{n_=_1}.
4007 Les résultats de la deuxième fonction (@code{f1}) permettent une
4008 approximation des valeurs qui seront ensuite utilisées par la fonction
4009 initiale aux fins d'ajustement lors des phases ultérieures d'espacement.
4011 @lilypond[verbatim,quote,ragged-right]
4012 #(define (square-line-circle-space grob)
4013 (let* ((pitch (ly:event-property (ly:grob-property grob 'cause) 'pitch))
4014 (notename (ly:pitch-notename pitch)))
4015 (if (= 0 (modulo notename 2))
4016 (make-circle-stencil 0.5 0.0 #t)
4017 (make-filled-box-stencil '(0 . 1.0)
4020 squareLineCircleSpace = {
4021 \override NoteHead #'stencil = #square-line-circle-space
4024 smartSquareLineCircleSpace = {
4025 \squareLineCircleSpace
4026 \override NoteHead #'Y-extent =
4027 #(ly:make-unpure-pure-container
4028 ly:grob::stencil-height
4029 (lambda (grob start end) (ly:grob::stencil-height grob)))
4032 \new Voice \with { \remove "Stem_engraver" }
4034 \squareLineCircleSpace
4036 \smartSquareLineCircleSpace
4041 La première mesure de l'exemple ci-dessus ne fait pas appel à un
4042 conteneur requalifiant ; le moteur d'espacement n'a donc aucune
4043 connaissance de la largeur des têtes de note et ne peut empêcher
4044 qu'elles chevauchent les altérations. Dans la deuxième mesure, par
4045 contre, le recours à un conteneur requalifiant informe le moteur
4046 d'espacement de la largeur des têtes de note ; les collisions sont
4047 alors évitées du fait de l'espace réservé à chacune des têtes.
4049 Lorsqu'il s'agit de calculs simples, les fonctions, tant pour la partie
4050 @qq{pure} que pour la partie @qq{impure}, peuvent être identiques au
4051 détail près du nombre d'arguments utilisés ou du domaine d'intervention.
4053 @warning{Le fait de qualifier une fonction de @qq{pure} alors qu'elle ne
4054 l'est pas peut générer des résultats imprévisibles.}
4057 @node Utilisation de fonctions musicales
4058 @section Utilisation de fonctions musicales
4059 @translationof Using music functions
4061 @c TODO -- add @seealso, etc. to these subsections
4063 Une adaptation ou un affinage qui devient récurrent parce que doit
4064 s'appliquer à différentes expressions musicales peut faire l'objet d'une
4065 @emph{fonction musicale}. Nous ne traiterons ici que des fonctions de
4066 @emph{substitution}, dont le but est de substituer une variable en un
4067 bout de code LilyPond. D'autres fonctions, plus complexes, sont
4068 abordées au chapitre @rextend{Fonctions musicales}.
4071 * Syntaxe d'une fonction de substitution::
4072 * Exemples de fonction de substitution::
4076 @node Syntaxe d'une fonction de substitution
4077 @subsection Syntaxe d'une fonction de substitution
4078 @translationof Substitution function syntax
4080 La rédaction d'une fonction chargée de substituer du code LilyPond à une
4081 variable est chose relativement aisée. Une telle fonction est de la
4086 #(define-music-function
4087 (parser location @var{arg1} @var{arg2} @dots{})
4088 (@var{type1?} @var{type2?} @dots{})
4090 @var{@dots{}musique@dots{}}
4097 @multitable @columnfractions .33 .66
4098 @item @code{@var{argN}}
4099 @tab @var{n}ième argument.
4101 @item @code{@var{typeN?}}
4102 @tab un @emph{type de prédicat} Scheme pour lequel @code{@var{argN}}
4103 doit renvoyer @code{#t}.
4105 @item @code{@var{@dots{}musique@dots{}}}
4106 @tab du code LilyPond tout ce qu'il y a de plus ordinaire, avec des
4107 @code{$} (là où seule une construction LilyPond est autorisée) et des
4108 @code{#} (lorsqu'il s'agit d'une valeur en Scheme ou d'un argument de
4109 fonction musicale) pour référencer les arguments (par ex. @samp{#arg1}).
4112 Les arguments @code{parser} et @code{location} sont obligatoires ;
4113 ils sont utilisés dans certaines situations évoluées, comme indiqué dans
4114 le manuel d'extension des fonctionnalités à au chapitre
4115 @rextend{Fonctions musicales}. Assurez-vous bien de ne pas les omettre
4116 dans vos fonctions de substitution.
4118 La liste des types de prédicat est elle aussi obligatoire. Voici
4119 quelques uns des types de prédicat les plus utilisés dans les fonctions
4124 cheap-list? @emph{(au lieu de }@qq{list?}@emph{, pour accélérer le traitement)}
4136 Une liste plus fournie est disponible à l'annexe
4137 @ref{Types de prédicats prédéfinis}. Vous pouvez par ailleurs définir
4138 vos propres types de prédicat.
4141 Manuel de notation :
4142 @ref{Types de prédicats prédéfinis}.
4144 Manuel d'extension :
4145 @rextend{Fonctions musicales}.
4147 Fichiers d'initialisation :
4148 @file{lily/music-scheme.cc},
4150 @file{scm/lily.scm}.
4153 @node Exemples de fonction de substitution
4154 @subsection Exemples de fonction de substitution
4155 @translationof Substitution function examples
4157 La présente rubrique regroupe quelques exemples de fonction
4158 substitutive. Le propos est ici d'illustrer les possibilités qu'offrent
4159 les fonctions de substitution simple.
4161 Dans ce premier exemple, nous définissons une fonction dans le but de
4162 simplifier le réglage du décalage d'une annotation (un
4165 @lilypond[quote,verbatim,ragged-right]
4167 #(define-music-function
4168 (parser location padding)
4171 \once \override TextScript #'padding = #padding
4175 c4^"piu mosso" b a b
4177 c4^"piu mosso" d e f
4179 c4^"piu mosso" fis a g
4183 Nous pouvons utiliser autre chose que des nombres au sein d'une
4184 fonction, y compris une expression musicale :
4186 @lilypond[quote,verbatim,ragged-right]
4188 #(define-music-function
4189 (parser location note)
4192 \tweak NoteHead #'stencil #ly:text-interface::print
4193 \tweak NoteHead #'text
4194 \markup \musicglyph #"custodes.mensural.u0"
4195 \tweak Stem #'stencil ##f
4199 \relative c' { c4 d e f \custosNote g }
4202 Une fonction de substitution peut traiter plusieurs arguments :
4204 @lilypond[quote,verbatim,ragged-right]
4206 #(define-music-function
4207 (parser location padding tempotext)
4210 \once \override Score.MetronomeMark #'padding = #padding
4211 \tempo \markup { \bold #tempotext }
4215 \tempo \markup { "Low tempo" }
4217 \tempoPadded #4.0 "High tempo"
4222 @c TODO: add appropriate @@ref's here.