1 @c -*- coding: utf-8; mode: texinfo; documentlanguage: fr -*-
4 Translation of GIT committish: 47c20999a49c7c77167089761a4dd964884e53fe
6 When revising a translation, copy the HEAD committish of the
7 version that you are working on. For details, see the Contributors'
8 Guide, node Updating translation committishes..
13 @c Translators: Valentin Villenave, Jean-Charles Malahieude
14 @c Translation checkers: Gilles Thibault
17 @node Modification des réglages prédéfinis
18 @chapter Modification des réglages prédéfinis
19 @translationof Changing defaults
21 LilyPond est conçu pour engendrer, par défaut, des partitions de la
22 plus haute qualité. Cependant, on peut parfois avoir à modifier cette
23 mise en forme par défaut. Celle-ci est réglée par tout un ensemble de
24 @qq{leviers et manettes} plus connus sous le terme de @qq{propriétés},
25 dont ce chapitre ne cherche pas à faire l'inventaire exhaustif -- le
26 chapitre @rlearning{Retouche de partition} du manuel d'initiation vous
27 en propose un aperçu. Le propos est plutôt ici de mettre en évidence
28 les différents groupes auxquels s'apparentent ces contrôles, et
29 d'expliquer comment trouver le bon levier pour obtenir tel ou tel effet
32 @cindex Référence des propriétés internes
34 Les moyens de contrôle des différents réglages sont décrits dans un
35 document séparé, @rinternalsnamed{Top,la référence des propriétés
36 internes}. Ce guide répertorie toutes les variables, fonctions et
37 autres options que LilyPond met à votre disposition. Il est consultable
38 @c leave the @uref as one long line.
39 @uref{http://@/lilypond@/.org/@/doc/@/stable/@/Documentation/@/internals/,en ligne},
40 au format HTML ; il est également inclus dans la documentation
41 fournie avec le logiciel.
43 En sous-main, LilyPond se sert du langage Scheme (un dérivé du LISP)
44 comme infrastructure. Modifier les choix de mise en page revient à
45 pénétrer dans les entrailles du programme, et de ce fait requiert
46 l'emploi du Scheme. Les fragments de Scheme, dans un fichier
47 @file{.ly}, sont introduits par le caractère @emph{hash} (@code{#}),
48 improprement surnommé @qq{dièse}.
49 @footnote{Le @rextend{Tutoriel Scheme} fournit quelques notions de base
50 pour saisir des nombres, des listes, des chaînes de caractères ou des
54 * Contextes d'interprétation::
55 * En quoi consiste la référence des propriétés internes::
56 * Modification de propriétés::
57 * Propriétés et contextes utiles::
58 * Retouches avancées::
59 * Utilisation de fonctions musicales::
63 @node Contextes d'interprétation
64 @section Contextes d'interprétation
65 @translationof Interpretation contexts
67 Nous allons voir ici ce que sont les contextes et comment les modifier.
70 * Tout savoir sur les contextes::
71 * Création et référencement d'un contexte::
72 * Conservation d'un contexte::
73 * Modification des greffons de contexte::
74 * Modification des réglages par défaut d'un contexte::
75 * Définition de nouveaux contextes::
76 * Ordonnancement des contextes::
81 @rlearning{Contextes et graveurs}.
83 Fichiers d'initialisation :
84 @file{ly/engraver-init.ly},
85 @file{ly/performer-init.ly}.
88 @rlsrnamed{Contexts and engravers, Contextes et graveurs}.
90 Référence des propriétés internes :
91 @rinternals{Contexts},
92 @rinternals{Engravers and Performers}.
95 @node Tout savoir sur les contextes
96 @subsection Tout savoir sur les contextes
97 @translationof Contexts explained
100 @c TODO Rethink and rewrite
102 >> > > - list of contexts: my *danger unmaintainable*
103 >> > > alarm just went off. I'm
105 I knew it would... And leaving out some of them is perfectly fine
107 I do think that a list like this, with the main contexts and a
108 brief description of what they do (perhaps also with a note about what
109 default behavior is associated with each of them, but this may be
110 unmanageable), should be there, and then we could simply list the
111 remaining ones without further explanation and with links to the IR.
114 @c TODO Improve layout, order and consistency of wording -td
116 @c TODO Add introduction which explains contexts in generality -td
118 @c TODO Describe propagation of property values -td
120 Les contextes sont hiérarchisés :
123 * Score -- le père de tous les contextes::
124 * Contextes de haut niveau -- les systèmes::
125 * Contextes de niveau intermédiaire -- les portées::
126 * Contextes de bas niveau -- les voix::
130 @node Score -- le père de tous les contextes
131 @unnumberedsubsubsec Score -- le père de tous les contextes
132 @translationof Score - the master of all contexts
134 Il s'agit en l'occurrence du contexte le plus élevé, autrement dit le
135 plus important, en matière de notation. En effet, c'est au niveau de la
136 partition -- @emph{score} en anglais -- que se gèrent le temps et la
137 tonalité ; c'est donc là qu'il faut s'assurer que les différents
138 éléments, tels les clefs, métriques et armures sont bien répercutés sur
141 Dès lors que LilyPond rencontre un bloc @code{\score @{@dots{}@}}
142 ou @code{\layout @{@dots{}@}}, se crée implicitement un contexte
146 @node Contextes de haut niveau -- les systèmes
147 @unnumberedsubsubsec Contextes de haut niveau -- les systèmes
148 @translationof Top-level contexts - staff containers
150 De nombreuses partitions sont écrites sur plus d'une portée. Ces
151 portées peuvent être regroupées de différentes manières.
153 @strong{@emph{StaffGroup}}
155 Le groupe de portées est attaché par un crochet, et les barres de mesure
156 sont d'un seul tenant, de la première à la dernière portée. Le
157 @code{StaffGroup} constitue le regroupement le plus simple.
159 @strong{@emph{ChoirStaff}}
161 Ce regroupement est identique au @code{StaffGroup}, à ceci près que les
162 barres de mesure ne traversent pas l'espace inter-portées.
164 @strong{@emph{GrandStaff}}
166 Le groupe de portées est attaché par une accolade sur la gauche, et les
167 barres de mesure sont d'un seul tenant.
169 @strong{@emph{PianoStaff}}
171 Ce regroupement est identique au @code{GrandStaff}, à ceci près que le
172 nom de l'instrument sera directement attaché au système.
175 @node Contextes de niveau intermédiaire -- les portées
176 @unnumberedsubsubsec Contextes de niveau intermédiaire -- les portées
177 @translationof Intermediate-level contexts - staves
179 @strong{@emph{Staff}}
181 La portée prend en charge les clefs, barres de mesure, armures et les
182 altérations accidentelles. Un contexte @code{Staff} peut contenir
183 plusieurs contextes @code{Voice}.
185 @strong{@emph{RhythmicStaff}}
187 De même nature qu'un @code{Staff}, mais destiné à n'imprimer que du
188 rythme. Quelle que soit la hauteur, les notes seront imprimées sur une
189 même et unique ligne.
191 @strong{@emph{TabStaff}}
193 Ce contexte permet de générer des tablatures. La mise en forme par
194 défaut correspond à une tablature pour guitare, sur six lignes.
196 @strong{@emph{DrumStaff}}
198 Contexte dévolu tout spécialement aux parties de percussion ; il
199 peut contenir plusieurs @code{DrumVoice}.
201 @strong{@emph{VaticanaStaff}}
203 Identique au contexte @code{Staff}, à ceci près qu'il est tout
204 particulièrement adapté au grégorien.
206 @strong{@emph{MensuralStaff}}
208 Identique au contexte @code{Staff}, à ceci près qu'il est tout
209 particulièrement adapté au style mensural de musique ancienne.
212 @node Contextes de bas niveau -- les voix
213 @unnumberedsubsubsec Contextes de bas niveau -- les voix
214 @translationof Bottom-level contexts - voices
216 Les contextes de niveau « voix » initialisent un certain nombre de
217 propriétés et activent les graveurs appropriés. Un contexte de bas
218 niveau est un contexte n'ayant aucun contexte enfant -- ou
219 @code{defaultchild}. Bien qu'ils puissent accepter ou contenir des
220 sous-contextes, ceux-ci devront être libellés et créés explicitement.
222 @strong{@emph{Voice}}
224 Correspond à une voix positionnée sur une portée. Le contexte
225 @code{Voice} s'occupe des indications de nuance, des hampes, des
226 ligatures, des scripts placés au-dessus ou au-dessous de la portée, des
227 différentes liaisons et des silences. Lorsque plusieurs voix doivent
228 cohabiter sur la même portée, il est indispensable de les instancier
231 @strong{@emph{VaticanaVoice}}
233 Fonctionnant comme le contexte @code{Voice}, il est tout
234 particulièrement destiné à gérer le grégorien.
236 @strong{@emph{MensuralVoice}}
238 Fonctionnant comme le contexte @code{Voice}, il est tout
239 particulièrement adapté aux musiques anciennes.
241 @strong{@emph{Lyrics}}
243 Correspond à une voix contenant des paroles. Le contexte @code{Lyrics}
244 gère l'impression d'une ligne de paroles.
246 @strong{@emph{DrumVoice}}
248 Contexte de voix dévolu à une portée de percussions.
250 @strong{@emph{FiguredBass}}
252 Contexte prenant en charge les objets @code{BassFigure} -- la basse
253 chiffrée -- créés à partir de ce qui a été saisi en mode
256 @strong{@emph{TabVoice}}
258 Contexte de voix dévolu au contexte @code{TabStaff}, il est
259 habituellement créé implicitement.
261 @strong{@emph{CueVoice}}
263 Contexte de voix utilisé essentiellement dans le cadre de citations
264 ajoutées à une portée -- voir @ref{Mise en forme d'une citation}. Il
265 est habituellement créé implicitement.
267 @strong{@emph{ChordNames}}
269 Permet d'imprimer des noms d'accord.
274 Then the following, which I don't know what to do with:
276 * GregorianTranscriptionVoice
277 * GregorianTranscriptionStaff
280 Engraves fretboards from chords. Not easy... Not
282 There is now some documentation on FretBoards in the NR, under
283 instrument-specific notation -- cds.
288 Hard coded entry point for LilyPond. Cannot be tuned.
290 Silently discards all musical information given to this
296 @node Création et référencement d'un contexte
297 @subsection Création et référencement d'un contexte
298 @translationof Creating and referencing contexts
300 @cindex contexte, création
301 @cindex contexte, référencement
306 LilyPond crée automatiquement des contextes de bas niveau lorsque
307 l'expression musicale intervient avant qu'un contexte adéquat n'existe,
308 ce qui peut être pratique dans le cadre d'une partition simple ou de
309 courts fragments tels ceux inclus dans cette documentation. Dès que la
310 structure s'étoffe, il devient nécessaire de créer explicitement tous
311 les contextes, à l'aide des commandes @code{\new} ou @code{\context}.
312 Leur syntaxe est très similaire :
315 [\new | \context] @var{Contexte} [ = @var{nom}] [@var{musique}]
319 où peuvent intervenir aussi bien @code{\new} que @code{\context}.
320 Le @var{Contexte} est le nom du contexte à créer, qui éventuellement
321 s'appellera plus particulièrement @var{nom} ; il contient l'expression
322 musicale unique @var{musique} qui devra être interprétée dans ce
323 contexte par les graveurs ou exécutants.
325 Le préfixe @code{\new} non suivi d'un nom s'utilise principalement pour
326 créer une partition avec plusieurs portées :
328 @lilypond[quote,verbatim,relative=2]
331 % leave the Voice context to be created implicitly
341 et pour regrouper des voix sur une même portée :
343 @lilypond[quote,verbatim,relative=2]
359 @code{\new} est à priviliégier lorsque les contextes ne sont pas nommés.
361 La différence entre les commandes @code{\new} et @code{\context} se
362 situe au niveau de leurs effets :
366 La commande @code{\new}, suivie ou non d'un nom, crée un tout
367 nouveau contexte même s'il en existe déjà un portant le même nom :
369 @lilypond[quote,verbatim,relative=2]
385 La commande @code{\context} avec nommage créera un contexte distinct
386 uniquement dans le cas où ne préexiste aucun contexte du même nom dans
387 la même hiérarchie de contextes. Dans le cas contraire, il servira de
388 référence au contexte précédemment créé, et son expression musicale sera
389 transmise dans ce contexte pour interprétation.
391 Cette procédure est tout à fait pertinente lorsque l'on sépare mise en
392 forme de la partition et contenu musical. Les deux formulations
393 ci-après sont tout à fait valides :
395 @lilypond[quote,verbatim]
409 \context Voice = "one" {
414 \context Voice = "two" {
423 @lilypond[quote,verbatim]
428 \context Voice = "one" {
431 \context Voice = "two" {
437 \context Voice = "one" {
442 \context Voice = "two" {
452 Par ailleurs, le recours à des variables produira les mêmes effets --
453 voir @rlearning{Organisation du code source avec des variables}.
456 La commande @code{\context} utilisée sans nommage recherchera le premier
457 de tous les contextes du même type précédemment créés dans la même
458 hiérarchie de contextes ; l'expression musicale lui sera alors transmise
459 pour interprétation. Bien que rarement utilisée, cette formulation de
460 @code{\context} sans nommage ni expression musicale permet de définir le
461 contexte dans lequel une procédure Scheme comportant une clause
462 @code{\applyContext} devra s'exécuter.
465 \new Staff \relative c' @{
468 \applyContext #(lambda (ctx)
470 (display (ly:context-current-moment ctx)))
477 Un contexte auquel il est ultérieurement fait référence doit
478 impérativement être nommé. C'est le cas par exemple lorsque des paroles
479 sont associées à de la musique :
482 \new Voice = "tenor" @var{musique}
484 \new Lyrics \lyricsto "tenor" @var{paroles}
488 L'association de paroles à de la musique est abordée en détails à la
489 rubrique @ref{Durée automatique des syllabes}.
491 Les propriétés de tous les contextes d'un même type se modifient au sein
492 d'un bloc @code{\layout}, selon une syntaxe différente -- voir
493 @ref{Modification de tous les contextes d'un même type}. Une telle
494 construction permet de séparer mise en forme et contenu musical.
495 Lorsque un seul contexte requiert une adaptation, mieux vaut recourir à
496 un bloc @code{\with} -- voir
497 @ref{Modification d'un contexte particulier}.
501 Manuel d'initiation :
502 @rlearning{Organisation du code source avec des variables}.
505 @ref{Modification d'un contexte particulier},
506 @ref{Durée automatique des syllabes}.
509 @node Conservation d'un contexte
510 @subsection Conservation d'un contexte
511 @translationof Keeping contexts alive
513 @cindex contextes, maintien actif
514 @cindex contextes, durée de vie
516 En règle générale, un contexte disparaît dès qu'il n'y a plus rien à
517 faire. Autrement dit, un contexte @code{Voice} disparaît dès après le
518 dernier événement qu'il contient, et un contexte @code{Staff} dès que
519 les contextes @code{Voice} qu'il supporte ne contiennent plus rien.
520 Ceci peut avoir des conséquences néfastes lorsqu'il est fait référence à
521 un contexte alors disparu, comme dans le cas d'un changement de portée
522 introduit par la commande @code{\change}, l'association de paroles à
523 l'aide de la commande @code{\lyricsto} ou si des événements surviennent
524 à nouveau pour ce contexte précédemment actif.
526 Une exception cependant à cette règle : en présence d'un contexte
527 @code{Staff} ou dans une construction @code{<<...>>}, un seul des
528 contextes @code{Voice} inclus restera actif jusqu'à la fin du contexte
529 @code{Staff} ou de la construction @code{<<...>>}, y compris s'il y
530 a des @qq{trous}. Le contexte alors persistant sera le premier
531 rencontré dans la construction @code{@{...@}} sans tenir compte des
532 éventuels @code{<<...>>} qu'elle pourrait contenir.
534 Un contexte restera actif dès lors qu'il s'y passera toujours quelque
535 chose. Un contexte @code{Staff} restera actif si l'une des voix qu'il
536 supporte est toujours active. L'un des moyens de s'en assurer
537 consiste à ajouter des silences invisibles parallèlement à la musique.
538 Vous devrez les ajouter dans tous les contextes @code{Voice} qui doivent
539 rester actifs. Nous vous conseillons, lorsque plusieurs voix
540 interviennent de manière sporadique, de toutes les maintenir actives
541 plutôt que de vous fier aux exceptions mentionnées plus haut.
543 Dans l'exemple suivant, les deux voix A et B sont maintenues actives
544 jusqu'à la fin du morceau :
546 @lilypond[quote,verbatim]
547 musicA = \relative c'' { d4 d d d }
548 musicB = \relative c'' { g4 g g g }
551 \new Voice = "A" { s1*5 } % Keep Voice "A" alive for 5 bars
552 \new Voice = "B" { s1*5 } % Keep Voice "B" alive for 5 bars
557 \context Voice = "A" {
561 \context Voice = "B" {
565 \context Voice = "A" { \musicA }
566 \context Voice = "B" { \musicB }
567 \context Voice = "A" { \musicA }
578 @cindex paroles, alignement sur une mélodie épisodique
580 L'exemple suivant illustre la manière d'écrire selon cette méthode une
581 mélodie discontinue à laquelle se rattachent des paroles. Dans la
582 réalité, mélodie et accompagnement feraient l'objet de portées séparées.
584 @lilypond[quote,verbatim]
585 melody = \relative c'' { a4 a a a }
586 accompaniment = \relative c' { d4 d d d }
587 words = \lyricmode { These words fol -- low the mel -- o -- dy }
590 \new Staff = "music" {
592 \new Voice = "melody" {
594 s1*4 % Keep Voice "melody" alive for 4 bars
597 \new Voice = "accompaniment" {
602 \context Voice = "melody" { \melody }
603 \context Voice = "accompaniment" { \accompaniment }
605 \context Voice = "accompaniment" { \accompaniment }
607 \context Voice = "melody" { \melody }
608 \context Voice = "accompaniment" { \accompaniment }
613 \new Lyrics \with { alignAboveContext = #"music" }
614 \lyricsto "melody" { \words }
619 Une autre méthode, qui s'avère plus productive dans nombre de cas,
620 consiste à maintenir active la ligne mélodique en y insérant des
621 silences invisibles tout au long de l'accompagnement :
623 @lilypond[quote,verbatim]
624 melody = \relative c'' {
630 accompaniment = \relative c' {
636 words = \lyricmode { These words fol -- low the mel -- o -- dy }
640 \new Staff = "music" {
642 \new Voice = "melody" {
646 \new Voice = "accompaniment" {
652 \new Lyrics \with { alignAboveContext = #"music" }
653 \lyricsto "melody" { \words }
659 @node Modification des greffons de contexte
660 @subsection Modification des greffons de contexte
661 @translationof Modifying context plug-ins
663 @c TODO Should this be Modifying engravers or Modifying contexts?
665 Les contextes, tels que @code{Score} ou @code{Staff}, ne contiennent
666 pas que des propriétés ; ils mettent également en œuvre certains
667 sous-programmes (@emph{plug-ins} pour employer le terme consacré) nommés
668 @qq{graveurs} (@emph{engravers} pour reprendre le terme anglais).
669 Ces sous-programmes sont chargés de créer les différents éléments de
670 notation : on trouve ainsi dans le contexte @code{Voice} un graveur
671 @code{Note_heads_engraver}, chargé des têtes de notes et, dans le
672 contexte @code{Staff}, un graveur @code{Key_engraver}, chargé de
675 Vous trouverez une description exhaustive de chaque graveur dans
677 @rinternals{Engravers and Performers}.
680 Référence des propriétés internes @expansion{} Translation @expansion{} Engravers.
682 Chaque contexte mentionné dans
684 @rinternals{Contexts}
687 Référence des propriétés internes @expansion{} Translation @expansion{} Context.
689 répertorie les graveurs mis en œuvre.
691 On peut faire, au moyen de ces graveurs, sa propre @qq{cuisine}, en
692 modifiant les contextes à volonté.
694 Lorsqu'un contexte est créé, par la commande @code{\new} ou
695 @code{\context}, on peut y adjoindre un bloc @code{\with} (en anglais
696 @qq{avec}), dans lequel il est possible d'ajouter (commande
697 @code{\consists}) ou d'enlever (commande @code{\remove}) des
703 \new @var{contexte} \with @{
716 Ici les points de suspension @dots{} devront être remplacés par le nom
717 des graveurs désirés. Dans l'exemple suivant, on enlève du contexte
718 @code{Staff}, la métrique (graveur @code{Time_signature_engraver})
719 et la clef (graveur @code{Clef_engraver}).
721 @lilypond[quote,relative=1,verbatim]
727 \remove "Time_signature_engraver"
728 \remove "Clef_engraver"
735 La clef et le chiffre de mesure ont disparu de la deuxième portée.
736 C'est une méthode quelque peu radicale, puisqu'elle affectera toute la
737 portée jusqu'à la fin de la partition. L'espacement s'en trouve
738 également affecté, ce qui peut être ou non l'effet recherché. Une
739 méthode plus sophistiquée aurait été de rendre ces objets transparents
740 (voir @rlearning{Visibilité et couleur des objets}).
742 Dans l'exemple suivant, voici une mise en pratique plus utile. En temps
743 normal, les barres de mesure et la métrique sont synchronisées
744 verticalement dans toute la partition. Les graveurs qui en sont
745 responsables se nomment @code{Timing_translator} et
746 @code{Default_bar_line_engraver}. En les enlevant du contexte
747 @code{Score} pour les attribuer au contexte @code{Staff}, chaque portée
748 peut désormais avoir sa propre métrique.
750 @cindex polymétrique, partition
751 @cindex chiffres de mesure multiples
753 @lilypond[quote,verbatim]
757 \consists "Timing_translator"
758 \consists "Default_bar_line_engraver"
764 \consists "Timing_translator"
765 \consists "Default_bar_line_engraver"
774 \remove "Timing_translator"
775 \remove "Default_bar_line_engraver"
783 L'ordre dans lequel les graveurs sont spécifiés correspond à leur ordre
784 d'apparition dans le processus d'élaboration de la partition.
785 En règle générale, l'ordre dans lequel les graveurs sont mentionnés
786 importe peu. Il se peut toutefois qu'un graveur écrive une propriété
787 qui sera interprétée par un autre, ou qu'un graveur crée un objet
788 graphique qui sera traité par un autre ; l'ordre d'apparition de
789 ces graveurs prendra alors tout son importance.
791 Pour information, les ordonnancements suivants sont importants :
795 le @code{Bar_engraver} devrait toujours être le premier ;
798 le @code{New_fingering_engraver} doit toujours précéder le
799 @code{Script_column_engraver} ;
802 le @code{Timing_translator} doit toujours précéder le
803 @code{Bar_number_engraver}.
808 Fichiers d'initialisation :
809 @file{ly/engraver-init.ly}.
813 @node Modification des réglages par défaut d'un contexte
814 @subsection Modification des réglages par défaut d'un contexte
815 @translationof Changing context default settings
817 @cindex réglages par défaut, modification
818 @cindex contexte, modification des propriétés par défaut
820 Les propriétés des contextes et objets graphiques se modifient à l'aide
821 des commandes @code{\set} et @code{\override}, comme indiqué à la
822 rubrique @ref{Modification de propriétés}. Ces commandes créent des
823 événements musicaux qui feront que la modification produira ses effets
824 dès l'instant où la musique est traitée.
826 Le propos est ici de voir comment modifier les valeurs @emph{par défaut}
827 des propriétés de contexte ou d'objet graphique dès la création de ces
828 contextes. Deux manières de procéder sont envisageables : l'une
829 consiste à modifier les valeurs pour tous les contextes d'un même type,
830 l'autre s'attache à adapter les valeurs par défaut d'une instance
831 particulière d'un contexte.
834 * Modification de tous les contextes d'un même type::
835 * Modification d'un contexte particulier::
836 * Ordre de préséance::
840 @node Modification de tous les contextes d'un même type
841 @unnumberedsubsubsec Modification de tous les contextes d'un même type
842 @translationof Changing all contexts of the same type
844 @cindex \context dans un bloc \layout
849 La personnalisation des réglages par défaut d'un contexte, qu'il
850 s'agisse de @code{Score}, @code{Staff} ou @code{Voice}, peut se réaliser
851 indépendamment de la musique dans un bloc @code{\layout} -- placé dans
852 le bloc @code{\score} auquel ces modifications doivent s'appliquer -- au
853 moyen d'un bloc @code{\context}.
859 [réglage de contexte pour tous les contextes @emph{Voice}]
863 [réglage de contexte pour tous les contextes @emph{Staff}]
868 La spécification des adaptations peut se faire de différentes manières :
872 à l'aide d'une commande @code{\override}, sans lui adjoindre le nom du
876 @lilypond[quote,verbatim]
879 a4^"Hampes épaisses" a a a
885 \override Stem.thickness = #4.0
892 en définissant directement une propriété de contexte :
895 @lilypond[quote,verbatim]
898 a4^"Fontes plus petites" a a a
912 à l'aide d'une commande prédéfinie comme @code{\dynamicUp}, ou bien une
913 expression musicale telle que @code{\accidentalStyle dodecaphonic} :
916 @lilypond[quote,verbatim]
919 a4^"Nuance en surplomb" a a a
929 \accidentalStyle dodecaphonic
936 à l'aide d'une variable personnalisée contenant un bloc @code{\with} :
937 pour de plus amples informations sur le bloc @code{\with}, voir
938 @ref{Modification d'un contexte particulier}.
941 @lilypond[quote,verbatim]
942 StaffDefauts = \with {
949 a4^"Petite police" a a a
964 Les instructions destinées à modifier les propriétés peuvent se placer
965 dans un bloc @code{\layout} sans pour autant être incluses dans un bloc
966 @code{\context}. Expliciter des réglages de la sorte équivaut à inclure
967 les commandes de modification des propriétés au début de chacun des
968 contextes du type en question. Lorsque le contexte n'est pas spécifié,
969 @emph{tous} les contextes de bas niveau seront affectés -- voir
970 @ref{Contextes de bas niveau -- les voix}. La syntaxe appropriée répond
971 aux mêmes critères que si la commande était écrite dans le flot
975 @lilypond[quote,verbatim]
979 a4^"Petite police" a a a
984 \accidentalStyle dodecaphonic
986 \override Voice.Stem.thickness = #4.0
992 @node Modification d'un contexte particulier
993 @unnumberedsubsubsec Modification d'un contexte particulier
994 @translationof Changing just one specific context
999 Dans le cas d'un contexte pris individuellement, ses propriétés se
1000 modifient à l'aide d'un bloc @code{\with}. Toutes les autres instances
1001 de contexte appartenant au même type seront affectées des réglages
1002 prédéfinis par LilyPond, modifiés le cas échéant par un bloc
1003 @code{\layout}. Le bloc @code{\with} se place directement à la suite de
1004 la commande @code{\new} @var{type-de-contexte}.
1009 [réglages pour ce contexte pris individuellement]
1015 La spécification des adaptations peut se faire de différentes manières :
1019 à l'aide d'une commande @code{\override}, sans lui adjoindre le nom du
1023 @lilypond[quote,verbatim]
1028 \override Stem.thickness = #4.0
1032 a4^"Hampes épaisses" a a a
1041 en définissant directement une propriété de contexte :
1043 @lilypond[quote,verbatim]
1048 a4^"Default font" a a a
1057 a4^"Smaller font" a a a
1066 à l'aide d'une commande prédéfinie comme @code{\dynamicUp} :
1069 @lilypond[quote,verbatim]
1075 a4^"Nuances en dessous" a a a
1081 \with { \accidentalStyle dodecaphonic }
1084 \with { \dynamicUp }
1087 a4^"Nuances en surplomb" a a a
1099 @node Ordre de préséance
1100 @unnumberedsubsubsec Ordre de préséance
1101 @translationof Order of precedence
1103 La valeur d'une propriété qui doit s'appliquer à un instant particulier
1104 est déterminée comme suit :
1108 s'il y a une instruction @code{\override} ou @code{\set} active dans le
1109 flot d'information, sa valeur s'applique,
1112 en l'absence de quoi sera utilisée la valeur par défaut telle que
1113 définie dans une clause @code{\with} stipulée à l'initialisation du
1117 en l'absence de quoi sera retenue la valeur par défaut issue du bloc
1118 @code{\context} approprié le plus récent dans le bloc @code{\layout},
1121 en l'absence de quoi s'appliqueront les réglages prédéfinis de LilyPond.
1125 Manuel d'initiation :
1126 @rlearning{Modification des propriétés d'un contexte}.
1128 Manuel de notation :
1129 @ref{Tout savoir sur les contextes},
1130 @ref{Contextes de bas niveau -- les voix},
1131 @ref{La commande de fixation (set)},
1132 @ref{La commande de dérogation (override)},
1133 @ref{Le bloc \layout}.
1136 @node Définition de nouveaux contextes
1137 @subsection Définition de nouveaux contextes
1138 @translationof Defining new contexts
1140 @cindex contexte, création
1141 @cindex graveur, affectation à un contexte
1156 Les contextes tels que @code{Staff} ou @code{Voice} sont faits
1157 de briques de construction empilées. En combinant divers graveurs,
1158 il est possible de créer de nouveaux types de contextes.
1160 Dans l'exemple suivant on construit, de zéro, un nouveau contexte très
1161 semblable à @code{Voice}, mais qui n'imprime que des têtes de notes en
1162 forme de barre oblique au centre de la portée. Un tel contexte peut
1163 servir, par exemple, à indiquer un passage improvisé dans un morceau de
1167 @lilypond[quote,ragged-right]
1168 \layout { \context {
1170 \type "Engraver_group"
1171 \consists "Note_heads_engraver"
1172 \consists "Rhythmic_column_engraver"
1173 \consists "Text_engraver"
1174 \consists "Pitch_squash_engraver"
1175 squashedPosition = #0
1176 \override NoteHead.style = #'slash
1177 \override Stem.transparent = ##t
1181 \accepts "ImproVoice"
1185 a4 d8 bes8 \new ImproVoice { c4^"ad lib" c
1186 c4 c^"dévêtez-vous" c_"tout en jouant :)" c }
1191 On a rassemblé les réglages dans un bloc @code{\context}, lui-même placé
1192 dans le bloc @code{\layout} :
1202 En lieu et place des points (@dots{}), voici les éléments à saisir :
1204 Tout d'abord, il convient de donner un nom à notre nouveau contexte :
1210 Comme il est très semblable à un contexte @code{Voice}, nous
1211 souhaitons que toutes les commandes associées au @code{Voice} déjà
1212 existant restent valables. D'où nécessité de la commande
1213 @code{\alias}, qui va l'associer au contexte @code{Voice} :
1219 Ce contexte doit pouvoir imprimer des notes et des indications
1220 textuelles ; on ajoute donc les graveurs appropriés ainsi que celui
1221 dévolu au regroupement sous forme de colonne des notes, hampes et
1222 silences qui interviennent au même moment musical :
1225 \consists "Note_heads_engraver"
1226 \consists "Text_engraver"
1227 \consists "Rhythmic_column_engraver"
1230 Toutes les notes devraient s'afficher au centre de la portée :
1233 \consists "Pitch_squash_engraver"
1234 squashedPosition = #0
1237 Le graveur @code{Pitch_squash_engraver} intercepte les notes créées par
1238 le @code{Note_heads_engraver}, et les « écrase » pour qu'elles aient
1239 toutes la même position verticale, définie par @code{squashedPosition} :
1240 ici il s'agit de la valeur @code{0}, c'est-à-dire la ligne du milieu.
1242 On veut que les notes aient la forme d'une barre oblique, sans
1246 \override NoteHead.style = #'slash
1247 \override Stem.transparent = ##t
1250 Afin que tous ces graveurs puissent travailler de concert, on leur
1251 adjoint un sous-programme spécial, introduit par la commande
1252 @code{\type} : il s'agit de @code{Engraver_group},
1255 \type "Engraver_group"
1258 Récapitulons ; on se retrouve avec le bloc suivant :
1263 \type "Engraver_group"
1264 \consists "Note_heads_engraver"
1265 \consists "Text_engraver"
1266 \consists "Rhythmic_column_engraver"
1267 \consists "Pitch_squash_engraver"
1268 squashedPosition = #0
1269 \override NoteHead.style = #'slash
1270 \override Stem.transparent = ##t
1277 Ce n'est pas tout. En effet, on veut intégrer le nouveau contexte
1278 @code{ImproVoice} dans la hiérarchie des contextes. Tout comme le
1279 contexte @code{Voice}, sa place est au sein du contexte @code{Staff}.
1280 Nous allons donc modifier la définition du contexte @code{Staff},
1281 au moyen de la commande @code{\accepts} :
1292 Le contraire de @code{\accepts} est @code{\denies} ; il est parfois
1293 utile lorsque l'on recycle des définitions de contextes déjà existantes.
1295 Enfin, tout cela doit prendre place dans le bloc @code{\layout},
1306 \accepts "ImproVoice"
1311 On peut alors saisir la musique, comme dans l'exemple plus haut :
1319 c c_"tout en jouant :)"
1327 Référence des propriétés internes :
1328 @rinternals{Engraver_group},
1329 @rinternals{Note_heads_engraver},
1330 @rinternals{Text_engraver},
1331 @rinternals{Rhythmic_column_engraver},
1332 @rinternals{Pitch_squash_engraver}.
1335 @node Ordonnancement des contextes
1336 @subsection Ordonnancement des contextes
1337 @translationof Context layout order
1339 @cindex contextes, ordonnancement
1344 Les contextes viennent en principe se positionner selon leur ordre
1345 d'apparition dans le fichier source. Lorsque plusieurs contextes sont
1346 imbriqués, le contexte englobant supportera les différents contextes
1347 mentionnés dans le fichier source, à la stricte condition qu'ils soient
1348 dûment « agréés ». Les contextes imbriqués qui ne font pas partie de
1349 la « liste d'agréments » du contexte englobant se retrouveront en
1350 dessous de celui-ci au lieu d'y être imbriqués.
1352 La liste des « agréments » d'un contexte se gère à l'aide des
1353 instructions @code{\accepts} et @code{\denies} -- @code{\accepts} pour
1354 ajouter un contexte à la liste, et @code{\denies} pour retirer
1355 l'agrément. Il est par exemple peu conventionnel que les accords nommés
1356 apparaissent dans un contexte @code{Staff} ; autrement dit, le contexte
1357 @code{ChordNames} ne fait pas partie de la « liste d'agréments » du
1358 contexte @code{Staff} par défaut. Néanmoins, et s'il devait en être
1359 ainsi, vous pourriez le spécifier.
1361 @lilypond[verbatim,quote]
1365 \chords { d1:m7 b1:min7.5- }
1370 @lilypond[verbatim,quote]
1374 \chords { d1:m7 b1:min7.5- }
1379 \accepts "ChordNames"
1385 L'instruction @code{\denies} permet, lorsqu'un nouveau contexte reprend
1386 les définitions d'un contexte existant, d'en ajuster les composantes.
1387 C'est par exemple le cas du contexte @code{VaticanaStaff}, réplique du
1388 contexte @code{Staff} au sein duquel le contexte @code{VaticanaVoice} se
1389 substitue au contexte @code{Voice} dans la « liste d'agrément ».
1391 @cindex contextes implicites
1392 @cindex implicites, contextes
1393 @funindex \defaultchild
1395 Gardez à l'esprit que, face à une instruction qui ne s'appliquerait à
1396 aucun contexte déjà existant, LilyPond créera un nouveau contexte
1399 Lors de la définition d'un contexte, les types de contextes
1400 sous-jascents susceptibles d'être créés implicitement sont spécifiés à
1401 l'aide d'une commande @code{\defaultchild}. Un certain nombre
1402 d'événements musicaux requièrent un contexte de plus bas niveau ; face à
1403 un tel événement, LilyPond crée autant de « sous-contextes » que
1404 nécessaire, jusqu'au contexte ne comportant aucun @emph{defaultchild}.
1406 La création implicite de contexte peut donc finir par engendrer de
1407 manière intempestive une nouvelle portée ou une autre partition.
1408 L'utilisation d'une instruction @code{\new} pour créer explicitement des
1409 contextes permet d'éviter ces problèmes.
1411 @cindex alignAboveContext
1412 @cindex alignBelowContext
1413 @funindex alignAboveContext
1414 @funindex alignBelowContext
1416 Il arrive qu'un contexte ne doive exister que pendant un court instant,
1417 ce qui est le cas par exemple pour une @emph{ossia}. Le plus simple
1418 consiste alors à initialiser la définition d'un contexte à l'endroit
1419 approprié, en parallèle avec le fragment correspondant dans la musique
1420 principale. Ce contexte temporaire sera par défaut positionné sous les
1421 autres contextes existants. Le repositionner au-dessus du contexte
1422 « principal » demande de le définir ainsi :
1425 @code{\new Staff \with @{ alignAboveContext = #"principal" @} }
1428 Il en va de même pour les contextes temporaires de paroles au sein d'un
1429 système à plusieurs portées comme un @code{ChoirStaff} lorsque, par
1430 exemple, un couplet supplémentaire apparaît à l'occasion d'une reprise.
1431 Ce contexte de paroles temporaire se place par défaut sous les portées
1432 inférieures. Lui adjoindre une instruction @code{alignBelowContext} dès
1433 son initialisation permet de l'accoler au contexte de paroles (nommé)
1434 qui contient le premier couplet.
1436 Des exemples de repositionnement de contexte temporaire sont disponibles
1437 aux rubriques @rlearning{Expressions musicales imbriquées},
1438 @ref{Modification de portées individuelles} et
1439 @ref{Situations particulières en matière de paroles}.
1442 Manuel d'initiation :
1443 @rlearning{Expressions musicales imbriquées}.
1445 Manuel de notation :
1446 @ref{Modification de portées individuelles},
1447 @ref{Situations particulières en matière de paroles}.
1449 Manuel d'utilisation :
1450 @rprogram{Apparition d'une portée supplémentaire}.
1452 Fichiers d'initialisation :
1453 @file{ly/engraver-init.ly}.
1456 @node En quoi consiste la référence des propriétés internes
1457 @section En quoi consiste la référence des propriétés internes
1458 @translationof Explaining the Internals Reference
1461 * Navigation dans les références du programme::
1462 * Interfaces de rendu::
1463 * Détermination de la propriété d'un objet graphique (grob)::
1464 * Conventions de nommage::
1468 @node Navigation dans les références du programme
1469 @subsection Navigation dans les références du programme
1470 @translationof Navigating the program reference
1472 @c TODO remove this (it's in the LM)
1473 @c Replace with more factual directions
1475 Comment, par exemple, déplacer le doigté dans le fragment suivant ?
1477 @lilypond[quote,relative=2,verbatim]
1483 Sur la page de la documentation relative aux doigtés, c'est-à-dire
1484 @ref{Doigtés}, se trouve l'indication suivante :
1489 Référence des propriétés internes : @rinternals{Fingering}.
1492 @c outdated info; probably will delete.
1494 This fragment points to two parts of the program reference: a page
1495 on @code{FingerEvent} and one on @code{Fingering}.
1497 The page on @code{FingerEvent} describes the properties of the music
1498 expression for the input @code{-2}. The page contains many links
1499 forward. For example, it says
1502 Accepted by: @rinternals{Fingering_engraver},
1506 That link brings us to the documentation for the Engraver, the
1510 This engraver creates the following layout objects: @rinternals{Fingering}.
1513 In other words, once the @code{FingerEvent}s are interpreted, the
1514 @code{Fingering_engraver} plug-in will process them.
1518 @c I can't figure out what this is supposed to mean. -gp
1520 The @code{Fingering_engraver} is also listed to create
1521 @rinternals{Fingering} objects,
1523 @c old info? it doesn't make any sense to me with our current docs.
1525 second bit of information listed under @b{See also} in the Notation
1530 Ladite référence est disponible au format HTML, ce qui rend la
1531 navigation bien plus aisée. Il est possible soit de la lire en ligne,
1532 soit de la télécharger dans ce format. La démarche présentée ici sera
1533 plus difficile à comprendre dans un document au format PDF.
1536 Suivons le lien @rinternals{Fingering}. En haut de la nouvelle page,
1540 Fingering objects are created by: @rinternals{Fingering_engraver} and
1541 @rinternals{New_fingering_engraver}.
1544 En d'autres termes, @emph{Les indications de doigtés}
1545 (@code{Fingering} en anglais) @emph{sont créées par les graveurs
1546 @rinternals{Fingering_engraver} et @rinternals{New_fingering_engraver}.}
1548 En suivant derechef les liens propres à la référence du programme, on
1549 suit en fait le cheminement qui aboutit à la création de la partition :
1553 @item @rinternals{Fingering}:
1554 @rinternals{Fingering} objects are created by:
1555 @rinternals{Fingering_engraver}
1557 @item @rinternals{Fingering_engraver}:
1558 Music types accepted: @rinternals{fingering-event}
1560 @item @rinternals{fingering-event}:
1561 Music event type @code{fingering-event} is in Music expressions named
1562 @rinternals{FingeringEvent}
1565 Ce cheminement se produit, bien sûr, en sens inverse : nous sommes
1566 ici partis du résultat, et avons abouti aux évènements (en anglais
1567 @emph{Events}) engendrés par le fichier d'entrée. L'inverse est
1568 également possible : on peut partir d'un évènement, et suivre le
1569 cheminement de LilyPond qui aboutit à la création d'un ou plusieurs
1572 La référence des propriétés internes peut également se parcourir comme
1573 un document normal. On y trouve des chapitres tels que
1575 @rinternals{Music definitions},
1578 @code{Music definitions}
1580 @rinternals{Translation}, ou encore @rinternals{Backend}. Chaque
1581 chapitre recense toutes les définitions employées, et les propriétés
1582 sujettes à ajustements.
1584 @c -- what about adding a link to the glossary here ? -vv
1585 La Référence des propriétés internes n'est pas traduite en français --
1586 notamment du fait qu'elle est en évolution constante, tout comme
1587 LilyPond. En revanche, les termes musicaux font l'objet d'un
1588 @rglosnamed{Top, glossaire} fort utile pour les utilisateurs
1592 @node Interfaces de rendu
1593 @subsection Interfaces de rendu
1594 @translationof Layout interfaces
1596 @cindex interfaces de rendu
1597 @cindex rendu, interfaces de
1598 @cindex objets graphiques
1601 Tous les éléments de notation sont considérés comme des objets
1602 graphiques (en anglais @emph{Graphical Object}, d'où le diminutif
1603 @emph{Grob}). Chaque objet est doté d'un certain nombre de propriétés
1604 (l'épaisseur du trait, l'orientation, etc.), et lié à d'autres objets.
1605 Le fonctionnement de ces objets est décrit en détail dans
1606 @rinternals{grob-interface}.
1608 Prenons l'exemple des doigtés (en anglais @emph{Fingering}). La page
1609 @code{Fingering} de la Référence des propriétés internes établit une
1610 liste de définitions propres à ce type d'objet :
1613 @code{padding} (dimension, in staff space):
1619 Ce qui signifie que les doigtés doivent être maintenus à une certaine
1620 distance (@emph{padding}) des notes : 0,5 unités @emph{staff-space}
1623 Chaque objet peut avoir plusieurs attributs, en tant qu'élément
1624 typographique ou musical. Ainsi, un doigté (objet @emph{Fingering})
1625 possède les attributs suivants :
1629 Sa taille ne dépend pas de l'espacement horizontal, contrairement aux
1630 liaisons ou ligatures.
1633 C'est du texte -- un texte vraiment court, certes.
1636 Ce texte est imprimé au moyen d'une fonte, contrairement aux liaisons ou
1640 Sur l'axe horizontal, le centre de ce symbole doit être aligné avec le
1644 Sur l'axe vertical, le symbole doit être proche de la note et de la
1648 Sur l'axe vertical encore, il doit également s'ordonner avec les
1649 éventuels autres symboles, ponctuations ou éléments textuels.
1652 Faire appliquer ces différents attributs est le rôle des
1653 @emph{interfaces}, que l'on trouve en bas de la page
1654 @rinternals{Fingering}.
1657 This object supports the following interfaces:
1658 @rinternals{item-interface},
1659 @rinternals{self-alignment-interface},
1660 @rinternals{side-position-interface}, @rinternals{text-interface},
1661 @rinternals{text-script-interface}, @rinternals{font-interface},
1662 @rinternals{finger-interface}, and @rinternals{grob-interface}.
1669 Cet objet admet les interfaces suivantes :
1672 Suit la liste des interfaces en question, présentées comme autant de
1673 liens qui conduisent aux pages dédiées à chacune d'entre elles.
1674 Chaque interface est dotée d'un certain nombre de propriétés, dont
1675 certaines peuvent être modifiées, et d'autres non (les @emph{Internal
1676 properties}, ou propriétés internes).
1678 Pour aller encore plus loin, plutôt que de simplement parler de l'objet
1679 @code{Fingering}, ce qui ne nous avance pas à grand chose, on peut aller
1680 explorer son âme même, dans les fichiers source de LilyPond (voir
1681 @rlearning{Autres sources de documentation}), en l'occurrence le fichier
1682 @file{scm/define-grobs.scm} :
1687 (avoid-slur . around)
1688 (slur-padding . 0.2)
1689 (staff-padding . 0.5)
1690 (self-alignment-X . 0)
1691 (self-alignment-Y . 0)
1692 (script-priority . 100)
1693 (stencil . ,ly:text-interface::print)
1694 (direction . ,ly:script-interface::calc-direction)
1695 (font-encoding . fetaText)
1696 (font-size . -5) ; don't overlap when next to heads.
1697 (meta . ((class . Item)
1698 (interfaces . (finger-interface
1700 text-script-interface
1702 side-position-interface
1703 self-alignment-interface
1704 item-interface))))))
1708 @dots{}où l'on découvre que l'objet @code{Fingering} n'est rien de plus
1709 qu'un amas de variables et de réglages. La page de la Référence des
1710 propriétés internes est en fait directement engendrée par cette
1714 @node Détermination de la propriété d'un objet graphique (grob)
1715 @subsection Détermination de la propriété d'un objet graphique (grob)
1716 @translationof Determining the grob property
1718 @c TODO remove this (it's in the LM)
1719 @c Replace with more factual directions
1721 Nous voulions changer la position du chiffre @b{2} dans le fragment
1724 @lilypond[quote,relative=2,verbatim]
1730 Dans la mesure où le @b{2} est placé, verticalement, à proximité de la
1731 note qui lui correspond, nous allons devoir trouver l'interface en
1732 charge de ce placement, qui se trouve être
1733 @code{side-position-interface}. Sur la page de cette interface, on peut
1737 @code{side-position-interface}
1739 Position a victim object (this one) next to other objects (the
1740 support). The property @code{direction} signifies where to put the
1741 victim object relative to the support (left or right, up or down?)
1747 @code{side-position-interface}
1749 Placer l'objet affecté à proximité d'autres objets. La propriété
1750 @code{direction} indique où positionner l'objet (à droite ou à gauche,
1756 En dessous de cette description se trouve décrite la variable
1762 (dimension, in staff space)
1764 Add this much extra space between objects that are next to each other.
1771 Ajouter tel espace supplémentaire entre des objets proches les uns des
1776 En augmentant la valeur de @code{padding}, on peut donc éloigner le
1777 doigté de la note. La commande suivante insère trois unités d'espace
1778 vide entre la note et le doigté :
1781 \once \override Voice.Fingering.padding = #3
1784 En ajoutant cette commande avant la création du doigté (de l'objet
1785 @code{Fingering}), donc avant @code{c2}, on obtient le résultat
1788 @lilypond[quote,relative=2,verbatim]
1789 \once \override Voice.Fingering.padding = #3
1795 Dans le cas présent, le réglage intervient dans le contexte @code{Voice},
1796 ce qui pouvait également se déduire de la Référence des propriétés
1797 internes, où la page du graveur @rinternals{Fingering_engraver}
1801 Fingering_engraver is part of contexts: @dots{} @rinternals{Voice}
1807 Le graveur Fingering_engraver fait partie des contextes : @dots{}
1812 @node Conventions de nommage
1813 @subsection Conventions de nommage
1814 @translationof Naming conventions
1816 Afin de s'y retrouver plus aisément et d'éviter les erreurs de frappe,
1817 voici quelques conventions en matière de nommage :
1820 @item fonctions scheme :
1821 minuscule-avec-trait-d-union (y compris noms en mot-unique)
1822 @item fonctions scheme :
1823 ly:plus-style-scheme
1824 @item événements, classes et propriétés musicaux :
1825 identique-aux-fonctions-scheme
1826 @item interfaces d'objet graphique :
1828 @item propriétés d'arrière plan :
1829 style-scheme (mais X et Y pour les axes)
1830 @item contextes (ainsi que MusicExpressions et grobs) :
1831 Capitale initiale ou Camélisation (CamelCase)
1832 @item propriétés de contexte :
1833 minusculeSuivieDeCamélisation
1835 Capitale_initiale_puis_minuscules_séparées_par_un_souligné
1838 Les questions que vous devez vous poser sont :
1840 @item Qu'est-ce qui relève des conventions, et qu'est-ce qui relève de
1842 @item Qu'est-ce qui relève des règles du langage sous-jacent, et
1843 qu'est-ce qui est propre à LilyPond ?
1847 @node Modification de propriétés
1848 @section Modification de propriétés
1849 @translationof Modifying properties
1851 @c TODO change the menu and subsection node names to use
1852 @c backslash once the new macro to handle the refs
1853 @c is available. Need to find and change all refs at
1854 @c the same time. -td
1857 * Vue d'ensemble de la modification des propriétés::
1858 * La commande de fixation (set)::
1859 * La commande de dérogation (override)::
1860 * La commande d'affinage (tweak)::
1862 * Modification de listes associatives::
1866 @node Vue d'ensemble de la modification des propriétés
1867 @subsection Vue d'ensemble de la modification des propriétés
1868 @translationof Overview of modifying properties
1870 Chaque contexte est chargé de créer plusieurs types d'objets graphiques.
1871 Il contient également les réglages nécessaires pour chacun de ces
1872 objets. Si l'on modifie ces réglages, les objets n'auront plus la même
1875 Les contextes comportent deux types différents de propriétés : des
1876 propriétés de contexte et des propriétés d'objet graphique. Les
1877 propriétés de contexte sont celles qui s'appliqueront globalement au
1878 contexte en tant que tel ; elles gèrent la manière dont le contexte
1879 apparaîtra. Les propriétés d'objet graphique, par contre, s'appliquent
1880 à des types particuliers d'objet qui apparaissent dans le contexte en
1883 Les commandes @code{\set} et @code{\unset} permettent de modifier les
1884 valeurs des propriétés de contexte. Les commandes @code{\override} et
1885 @code{\revert} permettent de modifier les valeurs des propriétés des
1889 La syntaxe employée pour ce faire est
1892 \override @var{contexte}.@var{objet}.@var{propriété} = #@var{valeur}
1895 Ici @var{objet} est un objet graphique, tel que @code{Stem} (les hampes)
1896 ou @code{NoteHead} (les têtes de note) ; @var{propriété} est une
1897 variable (désignée par un symbole, ce qui explique l'apostrophe)
1898 employée par le système de mise en page. La sous-section
1899 @ref{Élaboration d'une retouche} vous aidera à savoir quoi mettre à la
1900 place de @var{objet}, @var{propriété} et @var{valeur} ; notre propos
1901 n'est ici que d'examiner l'emploi de cette commande.
1903 La commande suivante :
1906 \override Staff.Stem.thickness = #4.0
1910 rend les hampes plus épaisses (la valeur par défaut est 1.3, ce qui
1911 signifie qu'elles sont 1,3 fois plus épaisses que les lignes de la
1912 portée). Dans la mesure où nous avons indiqué @code{Staff} comme
1913 contexte, ce réglage ne s'appliquera qu'à la portée courante ; les
1914 autres portées demeureront intactes.
1916 @lilypond[quote,verbatim,relative=2,fragment]
1918 \override Staff.Stem.thickness = #4.0
1924 La commande @code{\override} modifie donc la définition de l'objet
1925 @code{Stem} dans le contexte @code{Staff} ; toutes les hampes qui
1926 suivent seront affectées.
1928 Tout comme avec la commande @code{\set}, l'argument @var{contexte} peut
1929 être omis, auquel cas le contexte par défaut (ici, @code{Voice}) sera
1930 employé. La commande @code{\once} permet de n'appliquer la modification
1933 @lilypond[quote,fragment,verbatim,relative=2]
1935 \once \override Stem.thickness = #4.0
1940 La commande @code{\override} doit être entrée @emph{avant} l'objet
1941 concerné. Ainsi, lorsque l'on veut altérer un objet qui se prolonge,
1942 tel qu'une liaison, une ligature ou tout autre objet dit @emph{Spanner},
1943 la commande @code{\override} doit être saisie avant que l'objet soit
1946 @lilypond[quote,fragment,verbatim,relative=2]
1947 \override Slur.thickness = #3.0
1949 \override Beam.beam-thickness = #0.6
1954 Dans cet exemple, la liaison (@emph{Slur}) est épaissie, mais non la
1955 ligature (@emph{Beam}). En effet, le code qui lui est relatif n'a pas
1956 été inséré avant le début de la ligature, et demeure donc sans effet.
1958 De même que la commande @code{\unset}, la commande @code{\revert} défait
1959 ce qui a été fait par une commande @code{\override}. Tout comme avec
1960 @code{\unset}, elle ne peut annuler que les réglages effectués dans le
1961 même contexte. Ainsi dans l'exemple suivant, la commande @code{\revert}
1965 \override Voice.Stem.thickness = #4.0
1966 \revert Staff.Stem.thickness
1969 Il existe, à l'intérieur même de certaines propriétés, des options que
1970 l'on nomme @qq{sous-propriétés}. La syntaxe est alors
1972 @c leave this as a long long
1974 \override @var{contexte}.@var{objet} #'@var{propriété} #'@var{sous-propriété} = #@var{valeur}
1978 Ainsi, par exemple :
1981 \override Stem.details.beamed-lengths = #'(4 4 3)
1987 Référence des propriétés internes :
1988 @rinternals{Backend},
1989 @rinternals{All layout objects},
1990 @rinternals{OverrideProperty},
1991 @rinternals{RevertProperty},
1992 @rinternals{PropertySet}.
1995 La sous-couche Scheme ne vérifie pas la saisie des propriétés de façon
1996 très stricte. Des références cycliques dans des valeurs Scheme peuvent
1997 de ce fait interrompre ou faire planter le programme -- ou bien les
2001 @node La commande de fixation (set)
2002 @subsection La commande de fixation @code{@bs{}set}
2003 @translationof The set command
2006 @cindex modifier des propriétés
2009 Chaque contexte peut avoir plusieurs @strong{propriétés}, c'est-à-dire
2010 des variables qu'il inclut. Ces dernières peuvent être modifiées @qq{à
2011 la volée}, c'est-à-dire pendant que la compilation s'accomplit. C'est
2012 ici le rôle de la commande @code{\set}.
2015 \set @var{contexte}.@var{propriété} = #@var{valeur}
2018 Dans la mesure où @var{valeur} est constituée d'un objet Scheme, elle
2019 doit être précédée du caractère @code{#}.
2021 Les propriétés des contextes se libellent sous la forme
2022 @code{minusculeMajuscule}. Leur rôle consiste principalement à traduire
2023 la musique en notation : par exemple, @code{localKeySignature}
2024 déterminera quand imprimer une altération accidentelle, et
2025 @code{measurePosition} quand imprimer une barre de mesure. La valeur
2026 des propriétés des contextes peuvent évoluer au fur et à mesure que l'on
2027 avance dans le morceau -- @code{measurePosition} en est l'illustration
2030 Ainsi la propriété de contexte @code{skipBars} permet de condenser les
2031 mesures vides de notes, en des silences multimesures. Il s'agit d'un
2032 objet Scheme, auquel on attribue la valeur booléenne @qq{vrai},
2033 c'est-à-dire la lettre @code{#t} pour @qq{True} en anglais :
2035 @lilypond[quote,verbatim,relative=2]
2037 \set Score.skipBars = ##t
2041 Si l'argument @var{contexte} n'est pas spécifié, alors la propriété
2042 cherchera à s'appliquer dans le contexte le plus restreint où elle est
2043 employée : le plus souvent @code{ChordNames}, @code{Voice} ou
2046 @lilypond[quote,verbatim,relative=2]
2047 \set Score.autoBeaming = ##f
2051 \set autoBeaming = ##t
2059 Ce changement étant appliqué @qq{à la volée}, il n'affecte que le second
2062 Notez que le contexte le plus restreint n'est pas toujours le bon, et
2063 peut ne pas contenir la propriété qui vous intéresse : ainsi, la
2064 propriété @code{skipBars}, évoquée plus haut, ne relève pas du contexte
2065 @code{Voice}, mais du contexte @code{Score} -- le code suivant ne
2068 @lilypond[quote,verbatim,relative=2]
2074 Les contextes s'organisent de façon hiérarchique : aussi, lorsqu'un
2075 contexte de niveau supérieur est spécifié (par exemple @code{Staff}), la
2076 propriété sera modifiée dans tous les contextes inférieurs (tous les
2077 contextes @code{Voice}, par exemple) qu'il contient.
2081 La commande @code{\unset} permet d'annuler la définition d'une
2085 \unset @var{contexte}.@var{propriété}
2089 si et seulement si cette @var{propriété} a été définie dans ce
2090 @var{contexte} précis. En d'autres termes, la commande @code{\unset}
2091 doit impérativement affecter le même contexte que la commande
2092 @code{\set} d'origine, même en cas d'imbrication.
2094 @lilypond[quote,verbatim,relative=2]
2095 \set Score.autoBeaming = ##t
2100 \unset Score.autoBeaming
2108 Si l'on se trouve dans le contexte le plus restreint, il n'est pas
2109 obligatoire, là encore, de spécifier le @var{contexte}. Ainsi, les deux
2113 \set Voice.autoBeaming = ##t
2114 \set autoBeaming = ##t
2118 sont équivalentes elles apparaissent dans un contexte @code{Voice}.
2122 Pour modifier une propriété de façon à ce que l'accommodement ne
2123 s'applique qu'une seule fois, il convient d'adjoindre l'instruction
2124 @code{\once} à la commande @code{\set} :
2126 @lilypond[quote,verbatim,relative=2]
2128 \once \set fontSize = #4.7
2133 Ici le changement de taille est annulé aussitôt après la note concernée.
2135 La référence des propriétés internes contient une description exhaustive
2136 de toutes les propriétés, contexte par contexte : voir
2138 @rinternals{Tunable context properties}.
2141 Translation @expansion{} Tunable context properties.
2146 Référence des propriétés internes :
2147 @rinternals{Tunable context properties}.
2150 @node La commande de dérogation (override)
2151 @subsection La commande de dérogation @code{@bs{}override}
2152 @translationof The override command
2154 @cindex grob, propriétés
2155 @cindex objet graphique, propriétés
2156 @cindex propriétés d'un grob
2157 @cindex propriétés d'objet graphique
2161 La commande @code{\override} permet de modifier la mise en forme des
2162 objets graphiques. Les descriptions d'objet graphique, dont les noms
2163 commencent par une majuscule, puis comprennent une ou plusieurs
2164 majuscules (de style @code{TotoTata}), contiennent les réglages @qq{par
2165 défaut} pour les objets graphiques. Ces réglages sont sous forme de
2166 liste Scheme ; on peut les consulter dans le fichier
2167 @file{scm/define-grobs.scm}.
2169 @code{\override} est en fait un raccourci :
2172 \override [@var{contexte}.]@var{NomObjet}.@var{propriété} = #@var{valeur}
2175 Nous pouvons donc par exemple accroître l'épaisseur des hampes en jouant
2176 sur la propriété @code{thickness} de l'objet @code{stem} :
2178 @lilypond[quote,verbatim,relative=2]
2180 \override Voice.Stem.thickness = #3.0
2184 Lorsqu'aucun contexte n'est spécifié dans une clause @code{\override},
2185 celle-ci s'appliquera au contexte le plus bas :
2187 @lilypond[quote,verbatim,relative=2]
2188 { \override Staff.Stem.thickness = #3.0
2192 \override Stem.thickness = #0.5
2201 Certaines @qq{sous-propriétés} sont parfois contenues dans une
2202 propriété. La commande devient alors :
2205 \override Stem.details.beamed-lengths = #'(4 4 3)
2208 ou, pour modifier les extrémités d'un objet à extension :
2211 \override TextSpanner.bound-details.left.text = #"texte de gauche"
2212 \override TextSpanner.bound-details.right.text = #"texte de droite"
2215 @cindex annulation d'un override
2216 @cindex override, annulation des effets
2219 Les effets d'un @code{\override} prennent fin à l'aide de l'instruction
2222 La syntaxe de la commande @code{\revert} command est :
2225 \revert [@var{contexte}.]@var{NomObjet}.@var{propriété}
2230 @lilypond[quote,verbatim,relative=2]
2232 \override Voice.Stem.thickness = #3.0
2234 \revert Voice.Stem.thickness
2238 Les effets d'un @code{\override} ou d'un @code{\revert} s'appliquent dès
2239 l'endroit où ils apparaissent, et à tous les objets dans le contexte
2242 @lilypond[quote,verbatim,relative=2]
2247 \override Staff.Stem.thickness = #3.0
2251 \revert Staff.Stem.thickness
2258 @cindex override ponctuel
2261 L'instruction @code{\override} doit être précédée d'un @code{\once} dès
2262 lors que les effets de l'accommodement ne concernent que l'événement qui
2263 la suit directement :
2265 @lilypond[quote,verbatim,relative=2]
2269 \override Stem.thickness = #3.0
2273 \once \override Stem.thickness = #3.0
2281 Les commandes permettant de modifier l'apparence de la partition
2282 ressemblent en général à
2285 \override Voice.Stem.thickness = #3.0
2289 Pour élaborer un réglage de ce type, on a besoin de connaître
2293 @item le contexte : ici @code{Voice} (la voix).
2294 @item l'objet à affecter : ici @code{Stem} (les hampes).
2295 @item la propriété à modifier : ici @code{thickness} (l'épaisseur
2297 @item la valeur désirée : ici @code{3.0} (par défaut, elle est de 1.3).
2300 @cindex documentation exhaustive
2301 @cindex trouver des objets graphiques
2302 @cindex objets graphiques, description
2306 Pour bien des propriétés, quel que soit le type de valeur requise,
2307 attribuer la valeur @qq{faux} (@code{##f} en Scheme) reviendra à
2308 désactiver complètement l'action de la propriété qui se trouve ainsi
2309 purement ignorée par LilyPond. Cela peut s'avérer fort utile pour des
2310 propriétés causant des désagréments.
2315 Référence des propriétés internes :
2316 @rinternals{Backend}
2319 @node La commande d'affinage (tweak)
2320 @subsection La commande d'affinage @code{@bs{}tweak}
2321 @translationof The tweak command
2323 @cindex retouche (tweak)
2324 @cindex affinage (tweak)
2325 @cindex ajustement (tweak)
2326 @cindex tweak (retouche, affinage)
2329 L'utilisation d'un @code{\override} pour modifier les propriétés d'un
2330 objet graphique affectera toutes les instances de l'objet en question au
2331 sein du contexte, et ce dès son apparition. Il peut parfois être
2332 préférable de n'affecter qu'un seul objet en particulier plutôt que tous
2333 les objets du contexte. C'est là le rôle de l'instruction @code{\tweak},
2334 dont la syntaxe est :
2337 \tweak [@var{objet-de-rendu}.]@code{objet-propriété} @code{valeur}
2340 Mention de l'@var{objet-de-rendu} est optionnel.
2341 La commande @code{\tweak} s'applique à l'objet qui apparaît
2342 immédiatement après @code{valeur}.
2345 Dans certains cas, on peut passer par un raccourci pour arranger les
2346 objets graphiques. Lorsqu'un objet est directement engendré par un
2347 élément distinct du fichier source, on peut utiliser la commande
2350 Dans l'accord suivant, les notes sont modifiées une par une :
2352 @lilypond[relative=2,verbatim,ragged-right]
2358 \tweak duration-log #1
2365 Comme on peut le voir, les propriétés sont ici modifiées directement
2366 en même temps que les objets sont saisis. Il n'est plus besoin de
2367 spécifier ni le nom de l'objet (@emph{grob}), ni le contexte dans lequel
2368 cela doit s'appliquer. Ce procédé ne marche que pour des objets
2369 directement liés aux événements (@rinternals{Event}) du fichier source.
2373 @item Les têtes de notes au sein d'un accord, qui sont directement
2374 engendrées par les hauteurs indiquées
2376 @item Les signes d'articulation, engendrés par les indications de
2380 En revanche, les hampes ou les altérations sont engendrées par les têtes
2381 de notes, et non par des évènements dans le fichier source. De même
2382 pour les clés, qui ne sont pas directement engendrées par le fichier
2383 source, mais plutôt par le changement d'une propriété interne.
2385 En fait, très peu d'objets passent @emph{directement} du code source à
2386 la partition. Une note toute simple, par exemple @code{c4}, fait l'objet
2387 d'un traitement et n'est donc pas directement rendue ; c'est
2388 pourquoi le code suivant ne sera d'aucun effet :
2391 \tweak color #red c4
2395 Voir pour plus de détails
2396 @rextend{Affichage d'expressions musicales}.
2399 Pour une introduction à la syntaxe et l'utilisation des retouches, voir
2400 le chapitre @rlearning{Méthodes de retouche}.
2402 Lorsque plusieurs éléments de même nature surviennent au même instant,
2403 il devient impossible d'utiliser l'instruction @code{\override} pour
2404 n'en modifier qu'un seul individuellement, d'où l'intérêt de la commande
2405 @code{\tweak}. Entre autres éléments qui sont susceptibles de se
2406 produire au même instant, nous citerons :
2408 @c TODO expand to include any further uses of \tweak
2410 @item les têtes de notes au sein d'un accord,
2411 @item les signes d'articulation,
2412 @item les liaisons de prolongation sur des notes d'un accord,
2413 @item les crochets de nolets démarrant au même instant
2416 @c TODO add examples of these
2418 Dans l'exemple suivant, l'une des têtes de note de l'accord est
2419 colorisée, et l'aspect d'une autre est changé.
2421 @lilypond[relative=2,verbatim,quote]
2426 \tweak duration-log #1
2431 L'instruction @code{\tweak} permet aussi de modifier l'aspect d'une
2434 @lilypond[verbatim,quote,relative=1]
2435 c-\tweak thickness #5 ( d e f)
2438 La commande @code{\tweak} ne sera pleinement fonctionnelle que si elle
2439 est directement rattachée à l'objet auquel elle doit s'appliquer alors
2440 que le fichier source est converti en flux musical. Vouloir modifier la
2441 globalité d'un accord est sans résultat dans la mesure où il ne
2442 constitue qu'un conteneur pour des événements musicaux et que tous les
2443 objets seront créés à partir d'événements appartenant à un
2444 @code{EventChord} (un événement d'accord) :
2446 @lilypond[relative=2,verbatim,quote]
2447 \tweak color #red c4
2448 \tweak color #red <c e>4
2449 <\tweak color #red c>4
2452 La commande @code{\tweak} simple ne saurait servir à modifier un élément
2453 qui ne serait pas explicitement mentionné dans le fichier source. C'est
2454 notamment le cas des hampes, ligatures automatiques ou altérations, dans
2455 la mesure où elles seront ultérieurement générées et après les têtes de
2456 note (objets @code{NoteHead}, plutôt qu'au fil des éléments musicaux
2459 De tels objets créés indirectement ne peuvent être ajustés que par une
2460 forme développée de la commande @code{\tweak}, autrement dit
2461 lorsque l'objet est explicitement mentionné :
2463 @lilypond[relative=2,verbatim,quote]
2464 \tweak Stem.color #red
2465 \tweak Beam.color #green c8 e
2466 <c e \tweak Accidental.font-size #-3 ges>4
2469 La commande @code{\tweak} ne peut non plus servir à modifier clefs ou
2470 métriques, puisqu'elles seront immanquablement séparées du @code{\tweak}
2471 par l'insertion automatique d'autres éléments requis pour spécifier le
2474 Plusieurs commandes @code{\tweak} en enfilade permettent d'affecter un
2475 même élément de notation :
2477 @lilypond[verbatim,quote,relative=1]
2479 -\tweak style #'dashed-line
2480 -\tweak dash-fraction #0.2
2481 -\tweak thickness #3
2487 Vous pouvez examiner le flux musical généré par une portion d'un
2488 fichier source, y compris les éléments automatiquement insérés, en
2489 suivant les indications portées à la rubrique
2490 @rextend{Affichage d'expressions musicales}. Ceci s'avère tout à fait
2491 approprié pour déterminer ce qui peut se modifier à l'aide d'un
2492 @code{\tweak} ou bien aider à rectifier votre source de telle sorte
2493 que le @code{\tweak} produise ses effets.
2496 Manuel d'initiation :
2497 @rlearning{Méthodes de retouche}.
2499 Manuel d'extension :
2500 @rextend{Affichage d'expressions musicales}.
2504 @cindex tweak et points de contrôle
2505 @cindex points de contrôle et tweak
2507 Lorsqu'il y a plusieurs liaisons de prolongation dans un accord, la
2508 commande @code{\tweak} ne permet de modifier les points de contrôle que
2509 pour la première rencontrée dans le fichier source.
2512 @node set ou override
2513 @subsection @code{\set} ou @code{\override}
2514 @translationof set versus override
2516 @c TODO -- This section is probably unnecessary now.
2519 Si les propriétés peuvent être modifiées de deux façons, par les
2520 commandes @code{\set} et @code{\override}, c'est qu'il y a deux types de
2523 La propriété @code{fontSize} est une exception : c'est un raccourci, qui
2524 équivaudrait à saisir @w{@code{\override @dots{} #'font-size}} pour tous
2525 les objets textuels. Dans la mesure où il s'agit d'une manipulation
2526 très courante, une propriété spéciale a été créée. Elle doit être
2527 modifiée avec la commande @code{\set}.
2532 @node Modification de listes associatives
2533 @subsection Modification de listes associatives
2534 @translationof Modifying alists
2536 Certaines propriétés configurables par l'utilisateur se présentent en
2537 interne comme étant des listes associatives -- les puristes diront des
2538 @emph{alists}. Une @emph{alist} est en fait constituée de plusieurs
2539 paires de @emph{clés} et @emph{valeurs} ; sa structure ressemble à :
2542 '((@var{clé1} . @var{valeur1})
2543 (@var{clé2} . @var{valeur2})
2544 (@var{clé3} . @var{valeur3})
2548 Dans le cas où cette liste représente les propriétés d'un objet
2549 graphique ou bien l'une des variables du bloc @code{\paper}, chaque clé
2550 peut être modifiée individuellement sans que cela n'affecte les autres.
2552 Par exemple, pour réduire l'espacement entre deux portées adjacentes
2553 d'un même système, on utilisera la propriété @code{staff-staff-spacing}
2554 qui est attachée à l'objet graphique @code{StaffGrouper}. Cette
2555 propriété est constituée d'une liste de quatre clés :
2556 @code{basic-distance}, @code{minimum-distance}, @code{padding} et
2557 @code{stretchability}. Ses réglages par défaut tels que mentionnés à la
2558 rubrique @emph{Backend} de la référence des propriétés internes -- voir
2559 @rinternals{StaffGrouper} -- sont :
2562 '((basic-distance . 9)
2563 (minimum-distance . 7)
2565 (stretchability . 5))
2568 Afin de rapprocher nos deux portées, il suffit de réduire la valeur
2569 (@code{9}) de la clé @code{basic-distance} au niveau de celle de la clé
2570 @code{minimum-distance} (@code{7}). La modification d'une seule clé
2571 individuellement peut se réaliser sous la forme d'une @emph{déclaration
2574 @lilypond[quote,verbatim]
2575 % default space between staves
2577 \new Staff { \clef treble c''1 }
2578 \new Staff { \clef bass c1 }
2581 % reduced space between staves
2582 \new PianoStaff \with {
2583 % this is the nested declaration
2584 \override StaffGrouper.staff-staff-spacing.basic-distance = #7
2586 \new Staff { \clef treble c''1 }
2587 \new Staff { \clef bass c1 }
2591 Le recours à une déclaration imbriquée touchera la clé indiquée
2592 (@code{basic-distance} dans l'exemple ci-dessus) sans pour autant
2593 modifier les autres clés de la propriété considérée.
2595 Considérons maintenant que nous souhaitions que les portées soient le
2596 plus proche possible les unes des autres, à la limite du chevauchement.
2597 Il suffirait de mettre les quatre clés à zéro. Nous pourrions saisir
2598 quatre déclarations, chacune d'elles touchant une clé. Nous pouvons
2599 tout aussi bien redéfinir la propriété en une seule clause, sous la
2600 forme d'une liste associative :
2602 @lilypond[quote,verbatim]
2603 \new PianoStaff \with {
2604 \override StaffGrouper.staff-staff-spacing =
2605 #'((basic-distance . 0)
2606 (minimum-distance . 0)
2608 (stretchability . 0))
2610 \new Staff { \clef treble c''1 }
2611 \new Staff { \clef bass c1 }
2615 N'oubliez pas que dès lors qu'une clé n'apparaît pas dans la liste, elle
2616 retourne à sa valeur @emph{sauf-mention-contraire}. Autrement dit, dans
2617 le cas de @code{staff-staff-spacing} qui nous occupe, toutes les clés
2618 non mentionnées seront ramenées à zéro -- à l'exception de
2619 @code{stretchability} qui prend par défaut la valeur de
2620 @code{basic-distance}. Les deux assertions suivantes sont donc
2624 \override StaffGrouper.staff-staff-spacing =
2625 #'((basic-distance . 7))
2627 \override StaffGrouper.staff-staff-spacing =
2628 #'((basic-distance . 7)
2629 (minimum-distance . 0)
2631 (stretchability . 7))
2634 L'une des conséquences, parfois involontaire, de ceci est la suppression
2635 de réglages standards effectués par un fichier d'initialisation chargé à
2636 chaque compilation d'un fichier source. Dans l'exemple précédent, les
2637 réglages standards de @code{padding} et @code{minimum-distance}, tels
2638 que déterminés par @file{scm/define-grobs.scm}, se voient ramenés à leur
2639 valeur @emph{si-non-définie} ; autrement dit, les deux clés sont mises à
2640 zéro. La définition d'une propriété ou d'une variable sous forme de
2641 liste associative, quelle qu'en soit la taille, réinitialisera toujours
2642 les clés non mentionnées à leur valeur @emph{si-non-définie}. Si telle
2643 n'est pas votre intention, nous vous recommandons alors de régler la
2644 valeur des clés individuellement par des déclarations imbriquées.
2646 @warning{Les déclarations imbriquées ne sont pas fonctionnelles dans le
2647 cas des listes associatives des propriétés de contexte -- telles
2648 @code{beamExceptions}, @code{keySignature},
2649 @code{timeSignatureSettings}, etc. Ces propriétés ne sont modifiables
2650 qu'au travers d'une complète redéfinition de leur liste associative.}
2653 @node Propriétés et contextes utiles
2654 @section Propriétés et contextes utiles
2655 @translationof Useful concepts and properties
2659 * Direction et positionnement::
2660 * Distances et unités de mesure::
2661 * Propriétés des symboles de la portée::
2662 * Extenseurs et prolongateurs::
2663 * Visibilité des objets::
2665 * Rotation des objets::
2669 @node Modes de saisie
2670 @subsection Modes de saisie
2671 @translationof Input modes
2673 La manière dont sera interprétée la notation contenue dans un fichier
2674 source dépend du mode affecté à la saisie.
2676 @strong{Mode accords}
2678 Ce mode, activé par la commande @code{\chordmode}, permet d'interpréter
2679 les saisies comme étant des accords, qui seront imprimés sous forme
2680 de notes sur une portée -- voir @ref{Notation des accords}.
2682 Le mode accords s'active aussi par la commande @code{\chords}, qui
2683 créera un contexte @code{ChordNames}. Les saisies, interprétées comme
2684 étant des accords, seront alors rendues sous forme nominale dans ce
2685 contexte @code{ChordNames} -- voir @ref{Impression des noms d'accord}.
2687 @strong{Mode percussions}
2689 Ce mode, activé par la commande @code{\drummode}, permet d'interpréter
2690 les saisies comme étant de la notation pour percussions -- voir
2691 @ref{Notation de base pour percussions}.
2693 Le mode percussions s'active aussi par la commande @code{\drums}, qui
2694 créera un contexte @code{DrumStaff}. Les saisies, interprétées comme
2695 étant de la notation pour percussions, seront alors rendues sous
2696 forme symbolique sur une portée de percussions -- voir
2697 @ref{Notation de base pour percussions}.
2699 @strong{Mode figures}
2701 Ce mode, activé par la commande @code{\figuremode}, permet d'interpréter
2702 les saisies comme étant de la basse chiffrée (ou figurée) -- voir
2703 @ref{Saisie de la basse chiffrée}.
2705 Le mode figures s'active aussi par la commande @code{\figures}, qui
2706 créera un contexte @code{FiguredBass}. Les saisies interprétées comme
2707 étant de la basse chiffrée, seront alors rendues sous forme symbolique
2708 dans le contexte @code{FiguredBass} -- voir
2709 @ref{Introduction à la basse chiffrée}.
2711 @strong{Mode frets et tablatures}
2713 Il n'existe pas de mode spécifique pour saisir des symboles de fret ou
2716 Notes ou accords saisis en mode note puis affectés à un contexte
2717 @code{TabStaff} seront rendus sous forme de diagramme de tablature --
2718 voir @ref{Tablatures par défaut}.
2720 Deux options différentes permettent d'obtenir des diagrammes de fret en
2721 surplomb d'une portée : directement à l'aide d'un contexte
2722 @code{FretBoards} -- voir @ref{Tablatures automatiques} -- ou en
2723 attachant aux notes des @emph{markups} créés par la commande
2724 @code{\fret-diagram} -- voir @ref{Tablatures sous forme d'étiquette}.
2726 @strong{Mode paroles}
2728 Ce mode, activé par la commande @code{\lyricmode}, permet d'interpréter
2729 les saisies comme étant des syllabes, ayant éventuellement une durée, et
2730 des indications habituelles aux paroles -- voir @ref{Musique vocale}.
2732 Le mode paroles s'active aussi par la commande @code{\addlyrics}, qui
2733 créera un contexte @code{Lyrics} et ajoutera implicitement une commande
2734 @code{\lyricsto} afin d'associer les paroles qui suivent à la musique
2735 précédemment saisie.
2737 @strong{Mode @emph{markup}}
2739 Ce mode, activé par la commande @code{\markup}, permet d'interpréter les
2740 saisies comme étant des @emph{markups} (annotations ou étiquettes) --
2741 voir @rusernamed{Text markup commands,Commandes pour le mode markup}.
2744 @c silly work-around for texinfo broken-ness
2745 @c (@strong{Note...} causes a spurious cross-reference in Info)
2748 Le mode notes est le mode par défaut dans LilyPond. Il peut aussi
2749 s'activer par la commande @code{\notemode}. Les saisies seront
2750 interprétées comme étant des hauteurs, durées, @emph{markups}, etc. qui
2751 seront rendues sous forme de notation musicale sur une portée.
2753 Nul n'est besoin de spécifier le mode notes de manière explicite, hormis
2754 dans certaines situations particulières, notamment lorsque vous êtes en
2755 mode paroles, accords, ou tout autre mode, et que vous deviez insérer
2756 un élément qui ne serait disponible que grâce à la syntaxe du mode
2759 Il en va ainsi lorsque, par exemple, vous voulez ajouter une indication
2760 de nuance au numéro de couplet d'un chant choral :
2762 @lilypond[verbatim,relative=2,quote]
2765 \notemode{\set stanza = \markup{ \dynamic f 1. } }
2769 \notemode{\set stanza = \markup{ \dynamic p 2. } }
2775 @node Direction et positionnement
2776 @subsection Direction et positionnement
2777 @translationof Direction and placement
2779 En matière de typographie musicale, l'orientation et le positionnement
2780 de nombreux éléments est affaire de goût. Par exemple, les hampes
2781 peuvent être ascendantes ou descendantes, les paroles, nuances ou autres
2782 indications d'expression peuvent apparaître au-dessus ou en dessous de
2783 la portée, les indications textuelles s'alignent tantôt par la gauche,
2784 tantôt par la droite, ou être centrées. La plupart de ces choix peuvent
2785 être laissés à l'appréciation de LilyPond. Il peut être préférable,
2786 dans certains cas, d'imposer l'orientation ou le positionnement des
2790 * Indicateurs de position d'une articulation::
2791 * La propriété direction::
2795 @node Indicateurs de position d'une articulation
2796 @unnumberedsubsubsec Indicateurs de position d'une articulation
2797 @translationof Articulation direction indicators
2799 Certains positionnements sont opérés par défaut -- toujours au-dessus ou
2800 toujours en dessous (nuances ou points d'orgue) -- alors que d'autres
2801 alterneront selon l'orientation des hampes (liaisons ou accents).
2803 @c TODO Add table showing these
2805 Le positionnement par défaut peut être outrepassé à l'aide d'un
2806 @emph{indicateur de positionnement}, qui vient s'insérer juste avant
2807 l'articulation. LilyPond met à votre disposition trois indicateurs de
2808 positionnement : @code{^} (pour @qq{au-dessus}), @code{_} (pour
2809 @qq{au-dessous}), et @code{-} (pour @qq{appliquer le positionnement par
2810 défaut}). L'indicateur de positionnement n'est pas obligatoire ;
2811 LilyPond considère alors qu'il y a un @code{-}. Un indicateur de
2812 positionnement est cependant @strong{obligatoire} dans les cas
2816 @item une commande @code{\tweak},
2817 @item une commande @code{\markup},
2818 @item une commande @code{\tag},
2819 @item les indications de corde, par exemple @code{-"corde"},
2820 @item les indications de doigté, par exemple @w{@code{-1}},
2821 @item les raccourcis d'articulation, par exemple @w{@code{-.}},
2822 @w{@code{->}} ou @w{@code{--}}.
2825 Les indicateurs de positionnement n'affectent que la note qui suit :
2827 @lilypond[verbatim,quote,relative=2]
2835 @node La propriété direction
2836 @unnumberedsubsubsec La propriété @code{direction}
2837 @translationof The direction property
2839 Le positionnement ou l'orientation de nombreux objets de rendu sont
2840 gérés par la propriété @code{direction}.
2842 La propriété @code{direction} peut prendre la valeur @code{1}, qui
2843 signifie @qq{ascendant} ou @qq{au-dessus}, ou @w{@code{-1}}, qui
2844 signifie @qq{descendant} ou @qq{au-dessous}. Les symboliques @code{UP}
2845 et @code{DOWN} peuvent remplacer respectivement @code{1} et
2846 @w{@code{-1}}. Les valeurs @code{0} ou @code{CENTER} permettent de
2847 réaffecter à la propriété @code{direction} son comportement par défaut.
2848 Certaines commandes prédéfinies permettent par ailleurs de spécifier un
2849 comportement en matière d'orientation ou positionnement ; elles
2853 @code{\xxxUp}, @code{\xxxDown} et @code{\xxxNeutral}
2857 auquel cas @code{\xxxNeutral} signifie @qq{retour au comportement par
2858 défaut} -- voir @rlearning{Objets inclus dans la portée}.
2860 Dans quelques cas particuliers, comme l'indication d'un @emph{arpeggio},
2861 la valeur affectée à la propriété @code{direction} déterminera si
2862 l'objet doit se placer à gauche ou à droite de son parent. Un
2863 @w{@code{-1}} ou @code{LEFT} signifiera alors @qq{sur la gauche}, et un
2864 @code{1} ou @code{RIGHT} @qq{sur la droite}. Comme de bien entendu, un
2865 @code{0} ou @code{CENTER} signifiera @qq{appliquer le positionnement par
2869 These all have side-axis set to #X
2870 AmbitusAccidental - direction has no effect
2872 StanzaNumber - not tried
2873 TrillPitchAccidental - not tried
2874 TrillPitchGroup - not tried
2877 Notez que ces commandes resteront effectives jusqu'à ce qu'elles soient
2880 @lilypond[verbatim,quote,relative=2]
2889 En matière de musique polyphonique, il est souvent plus judicieux
2890 d'utiliser des contextes @code{Voice} explicites que de modifier
2891 l'orientation des objets. Pour de plus amples informations, voir
2892 @ref{Plusieurs voix}.
2895 Manuel d'initiation :
2896 @rlearning{Objets inclus dans la portée}.
2898 Manuel de notation :
2899 @ref{Plusieurs voix}.
2902 @node Distances et unités de mesure
2903 @subsection Distances et unités de mesure
2904 @translationof Distances and measurements
2906 @cindex distance absolue
2907 @cindex distance relative
2908 @cindex distance extensible
2915 LilyPond considère deux types de distances : les distances absolues
2916 et les distances relatives ou extensibles.
2918 Les distances absolues permettent de spécifier les marges, indentations
2919 et autres détails de mise en page ; elles s'expriment par défaut en
2920 millimètres. Vous pouvez utiliser d'autres systèmes de mesure, dès lors
2921 que la quantité est suivie de la mesure : @code{\mm}, @code{\cm},
2922 @code{\in} (pouces) ou @code{\pt} (points, 1/72,27 pouce).
2923 Les mesures de mise en page peuvent aussi s'exprimer en unité extensible
2924 de portée @code{\staff-space} (voir ci-après). Pour plus d'information
2925 concernant la mise en page, voir la rubrique
2926 @ref{Mise en forme de la page}.
2928 Les distances relatives ou extensibles s'expriment toujours en
2929 @qq{espace de portée} ou, plus rarement, en @qq{demi espace de portée}.
2930 L'espace de portée correspond à la distance qui sépare deux lignes
2931 adjacentes d'une portée. Sa valeur par défaut est déterminée
2932 globalement par la taille de portée. Elle peut aussi s'ajuster
2933 ponctuellement en jouant sur la propriété @code{staff-space} de l'objet
2934 @code{StaffSymbol}. Les distances relatives s'ajustent automatiquement
2935 dès qu'une modification de la taille globale de portée ou bien de la
2936 propriété @code{staff-space} du @code{StaffSymbol} intervient.
2937 Cependant, les tailles de fonte ne s'ajusteront automatiquement que si
2938 la modification touche la taille globale des portées. La taille globale
2939 de portée permet ainsi de gérer l'aspect général de la partition --
2940 voir @ref{Définition de la taille de portée}.
2944 Lorsque seulement une portion de partition doit apparaître dans une
2945 taille, comme par exemple une portée d'ossia ou une note de bas de page,
2946 influer sur la taille globale de portée affecterait l'intégralité de la
2947 partition. Il convient donc dans ce cas de modifier à la fois la
2948 propriété @code{staff-space} du @code{StaffSymbol} et la taille des
2949 fontes. La fonction Scheme @code{magstep} est tout spécialement chargée
2950 d'adapter une modification du @code{staff-space} aux fontes. Pour de
2951 plus amples informations, reportez-vous à la rubrique
2952 @rlearning{Longueur et épaisseur des objets}.
2955 Manuel d'initiation :
2956 @rlearning{Longueur et épaisseur des objets}.
2958 Manuel de notation :
2959 @ref{Définition de la taille de portée},
2960 @ref{Mise en forme de la page}.
2963 @node Propriétés des symboles de la portée
2964 @subsection Propriétés des symboles de la portée
2965 @translationof Staff symbol properties
2967 @cindex ajustement des symboles de portée
2968 @cindex dessin des symboles de portée
2969 @cindex symboles de portée, dessin
2971 @c TODO Extend or remove this section. See also NR 1.6.2 Staff symbol
2972 @c Need to think of uses for these properties. Eg 'line-positions
2973 @c is used in a snippet to thicken centre line.
2974 @c If retained, add @ref to here in 1.6.2 -td
2976 L'emplacement vertical et le nombre de lignes d'une portée se
2977 définissent conjointement. Comme l'illustre l'exemple suivant, le
2978 positionnement des notes n'est en rien influencé par le positionnement
2979 des lignes de la portée.
2981 @warning{La propriété @code{'line-positions} écrase la propriété
2982 @code{'line-count}. Le nombre de lignes d'une portée est implicitement
2983 défini par le nombre d'éléments dans la liste des valeurs de
2984 @code{'line-positions}.}
2986 @lilypond[verbatim,quote,relative=1]
2988 \override StaffSymbol.line-positions = #'(7 3 0 -4 -6 -7)
2993 La largeur d'une portée, exprimée en espace de portée, peut être figée.
2994 L'espacement des objets inclus dans cette portée ne sera en rien affecté
2997 @lilypond[verbatim,quote,relative=1]
2999 \override StaffSymbol.width = #23
3005 @node Extenseurs et prolongateurs
3006 @subsection Extenseurs et prolongateurs
3007 @translationof Spanners
3009 De nombreux objets de notation musicale s'étendent sur plusieurs notes,
3010 voire même sur plusieurs mesures. Il en va ainsi des liaisons,
3011 ligatures, crochets de nolet, crochets de reprise, crescendos, trilles
3012 ou glissandos. Ces objets, que l'on englobe sous l'appellation
3013 @qq{d'extenseur}, sont pourvus de propriétés spécifiques destinées à
3014 contrôler leur apparence et leur comportement. Un certain nombre de ces
3015 propriétés sont communes à tous les extenseurs, d'autres n'affectent que
3016 certains d'entre eux.
3018 Tout extenseur dispose de la @code{spanner-interface}. Quelques uns,
3019 tout particulièrement ceux chargés de dessiner une ligne droite entre
3020 deux objets, disposent aussi de la @code{line-spanner-interface}.
3023 * Utilisation de spanner-interface::
3024 * Utilisation de line-spanner-interface::
3028 @node Utilisation de spanner-interface
3029 @unnumberedsubsubsec Utilisation de @code{spanner-interface}
3030 @translationof Using the spanner-interface
3032 Cette interface fournit deux propriétés qui s'appliquent à certains
3035 @strong{@i{La propriété @code{minimum-length}}}
3037 La longueur minimale d'un extenseur est déterminée par la propriété
3038 @code{minimum-length}. Au plus sa valeur est élevée, au plus
3039 l'espacement des notes qui le bornent sera grand. Forcer sa valeur
3040 restera néanmoins sans effet pour un certain nombre d'extenseurs dont la
3041 longueur dépend d'autres considérations. Voici quelques exemples de
3042 mise en œuvre de cette propriété.
3045 Cette propriété est pleinement fonctionnelle pour :
3046 Tie (liaison de prolongation)
3047 MultiMeasureRest (silence multimesures)
3049 Slur (liaison d'articulation)
3050 PhrasingSlur (liaison de phrasé)
3052 Cette propriété est fonctionnelle en présence d'un @emph{callback} :
3056 Cette propriété est sans effet sur :
3065 @lilypond[verbatim,quote,relative=2]
3068 % increase the length of the tie
3069 -\tweak minimum-length #5
3073 @lilypond[verbatim,quote,relative=2]
3075 \compressFullBarRests
3077 % increase the length of the rest bar
3078 \once \override MultiMeasureRest.minimum-length = #20
3083 @lilypond[verbatim,quote,relative=2]
3085 % increase the length of the hairpin
3086 \override Hairpin.minimum-length = #20
3090 Cette propriété permet aussi de jouer sur l'envergure d'une liaison
3091 d'articulation ou de phrasé.
3093 @lilypond[verbatim,quote,relative=2]
3096 -\tweak minimum-length #5
3101 -\tweak minimum-length #5
3105 Certains objets requièrent un appel explicite à la procédure
3106 @code{set-spacing-rods} pour que la propriété @code{minimum-length}
3107 produise ses effets. La propriété @code{set-spacing-rods} doit alors
3108 prendre pour valeur @code{ly:spanner::set-spacing-rods}. Par exemple, la
3109 longueur minimale d'un glissando ne pourra être forcée tant que la
3110 propriété @code{springs-and-rods} n'est pas définie :
3112 @lilypond[verbatim,quote,relative=1]
3116 % not effective alone
3117 \once \override Glissando.minimum-length = #20
3120 % effective only when both overrides are present
3121 \once \override Glissando.minimum-length = #20
3122 \once \override Glissando.springs-and-rods = #ly:spanner::set-spacing-rods
3126 Il en va de même pour l'objet @code{Beam} (ligature) :
3128 @lilypond[verbatim,quote,relative=1]
3129 % not effective alone
3130 \once \override Beam.minimum-length = #20
3133 % effective only when both overrides are present
3134 \once \override Beam.minimum-length = #20
3135 \once \override Beam.springs-and-rods = #ly:spanner::set-spacing-rods
3139 @strong{@i{La propriété @code{to-barline}}}
3141 La seconde propriété fournie par la @code{spanner-interface} est
3142 @code{to-barline}. Elle est activée par défaut, raison pour laquelle
3143 les soufflets et autres extenseurs finissant sur la première note d'une
3144 mesure s'arrêtent visuellement au niveau de la barre de mesure qui la
3145 précède. Le fait de désactiver la propriété @code{to-barline} aura pour
3146 effet de prolonger l'extenseur au delà de la barre de mesure et jusqu'à
3147 la note qui le borne :
3149 @lilypond[verbatim,quote,relative=2]
3150 a \< a a a a \! a a a \break
3151 \override Hairpin.to-barline = ##f
3152 a \< a a a a \! a a a
3155 Cette propriété n'est pas opérationnelle pour tous les extenseurs. Il
3156 serait en effet quelque peu surprenant de l'activer (lui
3157 affecter @code{#t}) dans le cas d'une liaison d'articulation ou de
3161 @node Utilisation de line-spanner-interface
3162 @unnumberedsubsubsec Utilisation de @code{line-spanner-interface}
3163 @translationof Using the line-spanner-interface
3165 Un certain nombre d'objets disposent de la propriété
3166 @code{line-spanner-interface}, entre autres :
3169 @item @code{DynamicTextSpanner}
3170 @item @code{Glissando}
3171 @item @code{TextSpanner}
3172 @item @code{TrillSpanner}
3173 @item @code{VoiceFollower}
3176 La routine en charge de dessiner le stencil de ces extenseurs est
3177 @code{ly:line-interface::print}. Elle va déterminer les deux points
3178 extrêmes et dessiner entre eux une ligne du style requis. Bien que la
3179 localisation des deux bornes de l'extenseur soit calculée à la volée,
3180 vous pouvez cependant forcer leur ordonnée (coordonnée-Y). Les
3181 propriétés que vous devrez ajuster résident au deuxième niveau dans la
3182 hiérarchie, mais la syntaxe de la commande @code{\override} nécessaire
3183 demeure relativement simple :
3185 @lilypond[relative=2,quote,verbatim]
3187 \once \override Glissando.bound-details.left.Y = #3
3188 \once \override Glissando.bound-details.right.Y = #-2
3192 La propriété @code{Y} est valorisée en unités de @code{staff-space}, la
3193 ligne médiane de la portée correspondant au point zéro. Pour le
3194 glissando qui nous occupe, il s'agit du @code{Y} à l'aplomb
3195 (coordonnée-X) du centre de la tête de chacune des deux notes, si tant
3196 est que la ligne doive s'étendre entre ces deux points.
3198 Si le @code{Y} n'est pas défini, sa valeur sera calculée en fonction de
3199 la position verticale du point d'attachement de l'extenseur.
3201 Dans le cas où l'extenseur est interrompu par un saut de ligne, les
3202 terminaisons à cet endroit se gèrent grâce aux sous-clés
3203 @code{left-broken} et @code{right-broken} de @code{bound-details}, comme
3206 @lilypond[relative=2,ragged-right,verbatim,quote]
3207 \override Glissando.breakable = ##t
3208 \override Glissando.bound-details.right-broken.Y = #-3
3209 c1 \glissando \break
3213 Les sous-propriétés @code{left} et @code{right} du @code{bound-details}
3214 disposent d'autres clés modifiables de la même manière que @code{Y} :
3218 Détermine l'ordonnée (coordonnée-Y) de la terminaison, avec un
3219 décalage en @code{staff-space} par rapport à la ligne médiane de la
3220 portée. Il s'agit par défaut du centre de l'objet d'attachement, qui
3221 est le centre vertical de la tête de note pour un glissando.
3223 En ce qui concerne les extenseurs horizontaux, tels ceux comportant du
3224 texte ou les trilles, il est fixé à @code{0}.
3227 Détermine le début et la fin de la ligne sur l'axe des abscisses,
3228 relativement à l'objet de rattachement. Une valeur de @w{@code{-1}} (ou
3229 @code{LEFT}) aura pour effet de commencer ou terminer la ligne sur la
3230 gauche de la tête de note de rattachement.
3233 Il s'agit de l'abscisse (coordonnée-X) absolue de la terminaison. Elle
3234 se calcule à la volée, et son forçage n'apporte rien de plus.
3237 Les extenseurs linéaires peuvent commencer ou finir par un symbole,
3238 enregistré dans cette sous-propriété. Elle est conçue pour un usage
3239 interne, aussi nous vous conseillons de plutôt recourir à @code{text}.
3242 Il s'agit d'un @emph{markup} qui se poursuivra par l'extenseur. C'est la
3243 sous-propriété utilisée pour ajouter @i{cresc.}, @i{tr} ou autre texte à
3244 un extenseur horizontal.
3246 @lilypond[quote,ragged-right,relative=2,verbatim]
3247 \override TextSpanner.bound-details.left.text
3248 = \markup { \small \bold Slower }
3249 c2\startTextSpan b c a\stopTextSpan
3252 @item stencil-align-dir-y
3253 @item stencil-offset
3254 Lorsqu'aucune de ces deux sous-propriétés n'est définie, le stencil est
3255 simplement positionné à l'extrémité, centré sur la ligne telle que
3256 définie par les sous-propriétés @code{X} et @code{Y}. L'utilisation de
3257 @code{stencil-align-dir-y} ou @code{stencil-offset} permettra d'aligner
3258 le symbole verticalement par rapport au coin de la ligne :
3260 @lilypond[relative=1,quote,verbatim]
3261 \override TextSpanner.bound-details.left.stencil-align-dir-y = #-2
3262 \override TextSpanner.bound-details.right.stencil-align-dir-y = #UP
3264 \override TextSpanner.bound-details.left.text = #"ggg"
3265 \override TextSpanner.bound-details.right.text = #"hhh"
3266 c4^\startTextSpan c c c \stopTextSpan
3269 Vous n'aurez pas manqué de constater qu'une valeur négative place le
3270 texte @emph{en haut} -- contrairement à ce que l'on serait en droit
3271 d'attendre. Ceci est dû au fait que la valeur @w{@code{-1}} ou
3272 @code{DOWN} signifie @qq{aligner le bord @emph{inférieur} du texte sur
3273 la ligne d'extension}. Une valeur égale à @code{1} ou @code{UP}
3274 alignera le sommet du texte sur cette ligne d'extension.
3277 L'activation de cette sous-propriété (lui affecter @code{#t}) ajoutera
3278 à l'extenseur une terminaison en flèche.
3281 Cette sous-propriété contrôle l'espace qui doit séparer l'extrémité de
3282 la ligne et la fin réelle de l'extenseur. Sans ce @qq{décalage}, le
3283 trait indiquant un glissando commencerait et finirait au beau milieu de
3284 chacune des têtes de note.
3288 La fonction @code{\endSpanners} permet d'interrompre l'extenseur qui
3289 vient dès la note suivante. Autrement dit, il ne s'étendra que sur une
3290 seule note, ou jusqu'à la prochaine barre de mesure si @code{to-barline}
3291 a été activé et que survient une barre avant la note suivante.
3293 @lilypond[verbatim,quote,ragged-right,relative=2]
3295 c2 \startTextSpan c2 c2
3300 L'utilisation de @code{\endSpanners} permet de s'affranchir d'insérer un
3301 @code{\stopTextSpan} pour clôturer un @code{\startTextSpan} ou un
3302 @code{\!} pour terminer un soufflet.
3305 Référence des propriétés internes :
3306 @rinternals{Glissando},
3307 @rinternals{line-spanner-interface},
3308 @rinternals{TextSpanner},
3309 @rinternals{TrillSpanner},
3310 @rinternals{VoiceFollower}.
3313 @node Visibilité des objets
3314 @subsection Visibilité des objets
3315 @translationof Visibility of objects
3317 @cindex objets, visibilité
3318 @cindex grobs, visibilité
3319 @cindex visibilité d'objets
3321 La visibilité des objets de rendu se contrôle de quatre façons
3322 différentes : vous pouvez supprimer leur stencil, les rendre
3323 transparents, les coloriser en blanc ou bien encore forcer leur
3324 propriété @code{break-visibility}. Les trois premières options peuvent
3325 s'appliquer à tous les objets, la dernière étant réservée aux objets
3326 @emph{changeables}. Le Manuel d'initiation contient une introduction à
3327 ces quatre techniques, à la rubrique
3328 @rlearning{Visibilité et couleur des objets}.
3330 LilyPond met en œuvre quelques techniques particulières adaptées à
3331 certains objets ; elles sont couvertes par une rubrique spécifique.
3334 * Suppression des stencils::
3335 * Transparence des objets::
3336 * Blanchiment des objets::
3337 * Utilisation de break-visibility::
3338 * Considérations spécifiques::
3342 @node Suppression des stencils
3343 @unnumberedsubsubsec Suppression des stencils
3344 @translationof Removing the stencil
3346 @cindex stencil, suppression
3348 Tout objet de rendu se voit attribuer une propriété @code{stencil}.
3349 Elle est par défaut définie par la fonction chargée de dessiner cet
3350 objet. Lorsque cette propriété est désactivée de force -- en lui
3351 attribuant la valeur @code{#f} -- aucune fonction ne sera appelée ;
3352 l'objet ne sera donc pas dessiné. Le retour au comportement par défaut
3353 s'opère à l'aide d'un @code{\revert}.
3355 @lilypond[quote,verbatim,relative=1]
3357 \override Score.BarLine.stencil = ##f
3359 \revert Score.BarLine.stencil
3364 @node Transparence des objets
3365 @unnumberedsubsubsec Transparence des objets
3366 @translationof Making objects transparent
3368 @cindex transparent, objet
3370 Tout objet de rendu dispose d'une propriété de transparence, qui est par
3371 défaut définie à @code{#f}. Le fait de l'activer rendra l'objet
3372 transparent tout en préservant la place qu'il occupe.
3374 @lilypond[quote,verbatim,relative=2]
3376 \once \override NoteHead.transparent = ##t
3381 @node Blanchiment des objets
3382 @unnumberedsubsubsec Blanchiment des objets
3383 @translationof Painting objects white
3385 @cindex objets, couleur
3386 @cindex couleur d'objet
3389 @cindex impression, ordre
3390 @cindex surimpression d'objets
3391 @cindex objets, surimpression
3392 @cindex grobs, superposition
3394 Tout objet de rendu dispose d'une propriété couleur, par défaut définie
3395 à @code{black} (noir). Le fait de la forcer à @code{white} (blanc)
3396 rendra l'objet indistinct du fond blanc. Néanmoins, lorsque cet objet
3397 en recouvre d'autres, la couleur de leurs points de jonction dépendra de
3398 l'ordre dans lequel ils sont dessinés, ce qui peut laisser apparaître
3399 un fantôme de l'objet blanchi comme ci-dessous :
3401 @lilypond[quote,verbatim,relative=2]
3402 \override Staff.Clef.color = #white
3406 Cet inconvénient peut être évité en modifiant l'ordre dans lequel les
3407 objets sont dessinés. Chaque objet de rendu dispose d'une propriété
3408 @code{layer} (calque ou niveau) à laquelle est affecté un nombre entier.
3409 Les objets ayant la plus faible valeur sont dessinés en premier, puis
3410 les autres, de telle sorte qu'un objet ayant une valeur plus élevée les
3411 recouvrira. La plupart des objet ont un @code{layer} valorisé
3412 à @code{1} -- quelques uns, dont @code{StaffSymbol} et
3413 @code{BarLine}, ont une valeur à @code{0}. L'ordre d'impression
3414 d'objets ayant une même valeur de @code{layer} est indéterminé.
3416 La clef de l'exemple précédent a par défaut un @code{layer}
3417 à @code{1} ; elle est donc dessinée après les lignes de la
3418 portée -- @code{layer} valorisé par défaut à @code{0} -- et donc
3419 les recouvre. Pour changer cet état de fait, l'objet @code{Clef} doit
3420 avoir un @code{layer} de valeur inférieure, disons @w{@code{-1}}, pour
3421 pouvoir être dessiné avant.
3423 @lilypond[quote,verbatim,relative=2]
3424 \override Staff.Clef.color = #white
3425 \override Staff.Clef.layer = #-1
3430 @node Utilisation de break-visibility
3431 @unnumberedsubsubsec Utilisation de break-visibility
3432 @translationof Using break-visibility
3434 @c TODO Add making other objects breakable
3436 @cindex break-visibility
3438 La plupart des objets de rendu ne sont imprimés qu'une seule fois ;
3439 certains cependant, tels les barres de mesure, clefs, métriques ou
3440 armures, apparaîtront deux fois lors d'un saut de ligne -- une première
3441 fois en fin de ligne, puis à nouveau au début de la ligne suivante. Ces
3442 objets, que l'on peut traiter de @emph{changeables} (@emph{breakable} en
3443 anglais) disposent de la propriété @code{break-visibility} spécialement
3444 chargée de contrôler leur visibilité aux trois endroits où il sont
3445 susceptibles d'apparaître : en début de ligne, en cours de ligne ou
3446 en fin de ligne -- si tant est qu'un changement s'y produise.
3448 Par exemple, la métrique est imprimée par défaut au début de la première
3449 ligne, et nulle part ailleurs. En cas de modification, une nouvelle
3450 métrique sera imprimée à l'endroit du changement. Dans le cas où ce
3451 changement intervient en fin de ligne, la nouvelle métrique s'imprime au
3452 début de la ligne suivante, et une métrique @qq{de précaution} viendra
3453 se placer au bout de la ligne précédente.
3455 Ce comportement est géré par la propriété @code{break-visibility}, dont
3456 vous trouverez une explication à la rubrique
3457 @rlearning{Visibilité et couleur des objets}. Cette propriété est
3458 constituée d'un vecteur de trois booléens qui, dans l'ordre, déterminent
3459 si l'objet sera imprimé à la fin, en cours, et au début d'une ligne --
3460 on pourrait aussi dire avant un saut de ligne, là où il n'y a pas de
3461 saut de ligne, et après un saut de ligne.
3463 Les huit combinaisons possibles sont aussi disponibles sous la forme de
3464 fonctions prédéfinies, regroupées dans le fichier
3465 @file{scm/output-lib.scm}. Le tableau suivant vous les présente ;
3466 les trois dernières colonnes indiquent l'endroit où l'objet sera visible.
3468 @multitable {@code{begin-of-line-invisible}} {@code{'#(#t #t #t)}} {apres} {apres} {apres}
3469 @headitem Forme @tab Forme @tab Avant @tab Hors @tab Après
3470 @headitem fonctionnelle @tab vectorielle @tab saut @tab saut @tab saut
3472 @item @code{all-visible} @tab @code{'#(#t #t #t)} @tab oui @tab oui @tab oui
3473 @item @code{begin-of-line-visible} @tab @code{'#(#f #f #t)} @tab non @tab non @tab oui
3474 @item @code{center-visible} @tab @code{'#(#f #t #f)} @tab non @tab oui @tab non
3475 @item @code{end-of-line-visible} @tab @code{'#(#t #f #f)} @tab oui @tab non @tab non
3476 @item @code{begin-of-line-invisible} @tab @code{'#(#t #t #f)} @tab oui @tab oui @tab non
3477 @item @code{center-invisible} @tab @code{'#(#t #f #t)} @tab oui @tab non @tab oui
3478 @item @code{end-of-line-invisible} @tab @code{'#(#f #t #t)} @tab non @tab oui @tab oui
3479 @item @code{all-invisible} @tab @code{'#(#f #f #f)} @tab non @tab non @tab non
3482 Les réglages par défaut de la propriété @code{break-visibility}
3483 diffèrent selon l'objet de rendu. Le tableau suivant présente, pour la
3484 plupart des objets comportant la propriété @code{break-visibility},
3485 ces réglages par défaut.
3487 @multitable @columnfractions .3 .3 .4
3489 @headitem Objet de rendu @tab Contexte habituel @tab Réglage par défaut
3491 @c omit Ambitus as it appears not to be affected by break-visibility -td
3492 @c @item @code{Ambitus} @tab as specified @tab @code{begin-of-line-visible}
3493 @item @code{BarLine} @tab @code{Score} @tab calculé
3494 @item @code{BarNumber} @tab @code{Score} @tab @code{begin-of-line-visible}
3495 @c omit the following item until it can be explained -td
3496 @c @item @code{BreakAlignGroup} @tab @code{Score} @tab calculé
3497 @item @code{BreathingSign} @tab @code{Voice} @tab @code{begin-of-line-invisible}
3498 @item @code{Clef} @tab @code{Staff} @tab @code{begin-of-line-visible}
3499 @item @code{Custos} @tab @code{Staff} @tab @code{end-of-line-visible}
3500 @item @code{DoublePercentRepeat} @tab @code{Voice} @tab @code{begin-of-line-invisible}
3501 @c omit KeyCancellation until it can be explained -td
3502 @c @item @code{KeyCancellation} @tab ?? @tab @code{begin-of-line-invisible}
3503 @item @code{KeySignature} @tab @code{Staff} @tab @code{begin-of-line-visible}
3504 @c omit LeftEdge until it can be explained -td
3505 @c @item @code{LeftEdge} @tab @code{Score} @tab @code{center-invisible}
3506 @item @code{ClefModifier} @tab @code{Staff} @tab @code{begin-of-line-visible}
3507 @item @code{RehearsalMark} @tab @code{Score} @tab @code{end-of-line-invisible}
3508 @item @code{TimeSignature} @tab @code{Staff} @tab @code{all-visible}
3512 Voici un exemple d'utilisation de la forme vectorielle pour contrôler la
3513 visibilité des barres de mesure :
3515 @lilypond[quote,verbatim,relative=1,ragged-right]
3518 % Remove bar line at the end of the current line
3519 \once \override Score.BarLine.break-visibility = #'#(#f #t #t)
3525 Lors d'un forçage de @code{break-visibility} sous une forme vectorielle,
3526 les trois éléments doivent impérativement être mentionnés. Ces formes
3527 vectorielles ne sont d'ailleurs pas prises en charge par tous les objets
3528 de rendu, et certaines combinaisons peuvent entraîner des erreurs ;
3529 nous citerons entre autres :
3532 @item Une barre de mesure ne peut s'imprimer en début de ligne.
3533 @item Un numéro de mesure ne peut apparaître au début de la première
3534 ligne, à moins d'être différent de 1.
3535 @item Clef -- voir ci-après.
3536 @item Les répétitions en pourcentage sont soit toutes imprimées, soit
3537 aucune. Vous devrez utiliser @code{begin-of-line-invisible} pour les
3538 voir et @code{all-invisible} pour les masquer.
3539 @item Armure -- voir ci-après.
3540 @item Modificateur de clef -- voir ci-après.
3544 @node Considérations spécifiques
3545 @unnumberedsubsubsec Considérations spécifiques
3546 @translationof Special considerations
3548 @subsubsubheading Visibilité après changement explicite
3550 @cindex armure, visibilité après changement explicite
3551 @cindex explicitKeySignatureVisibility
3552 @cindex clef, visibilité après changement explicite
3553 @cindex explicitClefVisibility
3555 La propriété @code{break-visibility} contrôle la visibilité des armures
3556 ou changements de clef en début de ligne uniquement, donc après un saut.
3557 Elle ne produit aucun effet sur la visibilité d'une armure ou d'une clef
3558 après un changement explicite de tonalité ou de clef, ni en cours, ni en
3559 fin de ligne. Dans l'exemple suivant, l'armure est présente même après
3560 le passage en si bémol majeur malgré l'activation de
3561 @code{all-invisible} (@emph{tous invisibles}).
3563 @lilypond[quote,verbatim,relative=1,ragged-right]
3566 % Try to remove all key signatures
3567 \override Staff.KeySignature.break-visibility = #all-invisible
3575 La visibilité lors de ces changements explicites d'armure ou de clef est
3576 géré respectivement par les propriétés
3577 @code{explicitKeySignatureVisibility} et @code{explicitClefVisibility}.
3578 Leur fonctionnement est en tout point identique à celui de la propriété
3579 @code{break-visibility} -- forme vectorielle à trois éléments ou forme
3580 fonctionnelle comme indiqué ci-avant. Toutes deux sont attachées au
3581 contexte @code{Staff} (la portée) et non directement aux objets de
3582 rendu ; elles sont de ce fait introduites par une instruction
3583 @code{\set}. Leur valeur par défaut est de toujours imprimer les objets
3584 -- réglage sur @code{all-visible}. Ces deux propriétés gèrent
3585 uniquement la visibilité des armures et clefs lors d'un changement
3586 explicite, et en dehors d'un début de ligne ; il faudra en pareil
3587 cas forcer la @code{break-visibility} de ces objets pour les supprimer.
3589 @lilypond[quote,verbatim,relative=1,ragged-right]
3592 \set Staff.explicitKeySignatureVisibility = #all-invisible
3593 \override Staff.KeySignature.break-visibility = #all-invisible
3600 @subsubsubheading Visibilité des altérations de précaution
3602 L'impression d'altérations de précaution au moment d'un changement
3603 explicite de tonalité sera annulée dès lors que vous aurez désactivé la
3604 propriété @code{printKeyCancellation} du contexte @code{Staff} :
3606 @lilypond[quote,verbatim,relative=1,ragged-right]
3609 \set Staff.explicitKeySignatureVisibility = #all-invisible
3610 \set Staff.printKeyCancellation = ##f
3611 \override Staff.KeySignature.break-visibility = #all-invisible
3618 Avec de tels réglages particuliers, seules les altérations accidentelles
3619 permettront d'indiquer le changement de tonalité.
3621 @c TODO Add visibility of cautionary accidentals before notes
3623 @subsubsubheading Barres de mesure automatiques
3625 @cindex automaticBars
3626 @cindex barres de mesure, suppression
3628 La désactivation de la propriété @code{automaticBars}, qui réside dans
3629 le contexte @code{Score}, permet de s'affranchir d'imprimer
3630 automatiquement les barres de mesure ; seules seront imprimées les
3631 barres explicitées à l'aide de la commande @code{\bar}. Néanmoins, et
3632 contrairement à ce qui se passe avec la commande @code{\cadenzaOn}, le
3633 compteur de numéro de mesure continuera de s'incrémenter. Les barres
3634 s'imprimeront à nouveau, au niveau où en est le compteur, dès que la
3635 propriété @code{automaticBars} sera réactivée. Gardez à l'esprit que
3636 les sauts de ligne, lorsque cette propriété est désactivée, ne peuvent
3637 intervenir qu'à l'occasion d'un @code{\bar} explicite.
3641 @subsubsubheading Clefs transposées
3644 @cindex clef transposée, visibilité
3645 @cindex visibilité d'une clef transposée
3646 @cindex clef, visibilité de la transposition
3648 L'indication de transposition d'une clef est produite par l'objet
3649 de rendu @code{ClefModifier}. Sa visibilité étant gérée par
3650 héritage direct de l'objet @code{Clef}, nul n'est besoin de forcer
3651 un quelconque @code{break-visibility} au niveau des objets
3652 @code{ClefModifier} pour éliminer une indication de transposition
3653 lorsque la clef est invisible.
3655 Lors d'un changement explicite de clef, la propriété
3656 @code{explicitClefVisibility} gère à la fois le symbole de la clef et
3657 l'indication de transposition qui lui est attachée.
3660 Manuel d'initiation :
3661 @rlearning{Visibilité et couleur des objets}
3664 @node Styles de ligne
3665 @subsection Styles de ligne
3666 @translationof Line styles
3668 Certaines indications portées à l'attention de l'exécutant -- tels
3669 @i{rallentando}, @i{accelerando} et @i{trilles} -- apparaissent sous la
3670 forme d'un texte qui peut s'étendre sur plusieurs mesures à l'aide d'une
3671 ligne parfois pointillée ou ondulée.
3673 En matière de dessin du texte et des lignes, ces indications font appel
3674 aux mêmes routines que le glissando ; leur comportement peut donc
3675 être affiné selon les mêmes préceptes, au moyen de la routine
3676 @code{ly:line-interface::print} qui est tout spécialement chargée de
3677 dessiner les extenseurs. Cette routine détermine l'emplacement exact
3678 des deux points extrêmes de l'extenseur, puis trace une ligne du style
3679 demandé entre ces deux points.
3681 L'exemple ci-dessous indique les différents styles de ligne disponibles,
3682 ainsi que la manière de les spécifier.
3684 @lilypond[relative=2,ragged-right,verbatim,quote]
3686 \once \override Glissando.style = #'dashed-line
3688 \override Glissando.style = #'dotted-line
3690 \override Glissando.style = #'zigzag
3692 \override Glissando.style = #'trill
3696 Les points d'ancrage de l'extension sont calculés à la volée pour chaque
3697 objet graphique, mais rien ne vous empêche de les forcer :
3700 @lilypond[relative=2,ragged-right,verbatim,quote]
3702 \once \override Glissando.bound-details.right.Y = #-2
3706 La valeur de @code{Y} est ainsi fixée à @w{@code{-2}} en ce qui concerne
3707 la borne droite. Il en irait de même pour la borne gauche en spécifiant
3708 @code{left} (gauche) au lieu de @code{right} (droite).
3710 En l'absence de réglage du @code{Y}, celui-ci est calculé à partir de
3711 l'emplacement vertical des points d'attache gauche et droit de
3714 De plus amples informations quant à l'ajustement des extenseurs font
3715 l'objet de la rubrique @ref{Extenseurs et prolongateurs}.
3718 @node Rotation des objets
3719 @subsection Rotation des objets
3720 @translationof Rotating objects
3722 Qu'il s'agisse des objets de rendu ou d'éléments textuels sous forme de
3723 @emph{markup}, vous pouvez les faire pivoter selon vos désirs et à
3724 partir de n'importe quel point. La méthode diffère cependant selon ce
3725 que vous désirez manipuler.
3728 * Rotation des objets de mise en forme::
3729 * Rotation des étiquettes::
3733 @node Rotation des objets de mise en forme
3734 @unnumberedsubsubsec Rotation des objets de mise en forme
3735 @translationof Rotating layout objects
3737 Tout objet de rendu disposant de la @code{grob-interface} est
3738 susceptible de pivoter, grâce à la propriété @code{rotation}. Celle-ci
3739 prend en argument une liste de trois éléments : l'angle de rotation
3740 -- dans le sens inverse des aiguilles d'une montre -- ainsi que les
3741 coordonnées @code{x} et @code{y} du point appartenant à l'objet en
3742 question et à partir duquel doit s'effectuer cette rotation. L'angle
3743 est exprimé en degrés, les coordonnées en espaces de portée.
3745 L'angle et les coordonnées ne peuvent se déterminer que par tâtonnement.
3747 @cindex soufflet penché
3749 Il existe assez peu de situation où faire pivoter un objet de mise en
3750 forme soit réellement opportun ; en voici une :
3752 @lilypond[quote,verbatim,relative=1]
3754 \override Hairpin.rotation = #'(20 -1 0)
3759 @node Rotation des étiquettes
3760 @unnumberedsubsubsec Rotation des étiquettes
3761 @translationof Rotating markup
3763 Tout texte faisant l'objet d'un @emph{markup} peut pivoter selon
3764 n'importe quel angle, à l'aide de la commande @code{\rotate}. Celle-ci
3765 prend deux arguments : l'angle de rotation exprimé en degrés --
3766 dans le sens inverse des aiguilles d'une montre -- et le texte à
3767 basculer. Il ne s'agit pas ici de faire pivoter les extrémités du
3768 texte ; celles-ci récupéreront leurs coordonnées x et y du@emph{markup}
3769 pivoté. Dans l'exemple ci-dessous, la propriété
3770 @code{outside-staff-priority} à été fixée à @code{#f} afin de désactiver
3771 l'évitement automatique des collisions qui pourrait repousser certains
3775 @lilypond[quote,verbatim,relative=1]
3776 \override TextScript.outside-staff-priority = ##f
3777 g4^\markup { \rotate #30 "un sol" }
3778 b^\markup { \rotate #30 "un si" }
3779 des^\markup { \rotate #30 "un ré bémol" }
3780 fis^\markup { \rotate #30 "un fa dièse" }
3784 @node Retouches avancées
3785 @section Retouches avancées
3786 @translationof Advanced tweaks
3788 Nous allons voir, au fil des paragraphes qui suivent, différentes
3789 approches permettant de fignoler l'apparence d'une partition.
3792 * Alignement des objets::
3793 * Regroupement vertical d'objets graphiques::
3794 * Modification des stencils::
3795 * Modification de l'allure des éléments::
3796 * Conteneurs requalifiants::
3800 Manuel d'initiation :
3801 @rlearning{Autres sources de documentation},
3802 @rlearning{Retouche de partition}.
3804 Manuel de notation :
3805 @ref{En quoi consiste la référence des propriétés internes},
3806 @ref{Modification de propriétés}.
3808 Manuel d'extension :
3809 @rextend{Interfaces pour programmeurs}.
3811 Fichiers d'initialisation :
3812 @file{scm/define-grobs.scm}.
3815 @rlsrnamed{Tweaks and overrides,Retouches}.
3817 Référence des propriétés internes :
3818 @rinternals{All layout objects}.
3821 @node Alignement des objets
3822 @subsection Alignement des objets
3823 @translationof Aligning objects
3825 Les objets graphiques disposant des interfaces
3826 @code{self-alignment-interface} ou @code{side-position-interface}
3827 peuvent s'aligner par rapport à un objet précédemment positionné, ce de
3828 différentes manières. Ces objets sont référencés aux rubriques
3829 @rinternals{self-alignment-interface} et
3830 @rinternals{side-position-interface}.
3832 Tous les objets graphiques ont un point de référence, une étendue
3833 horizontale et une étendue verticale. L'étendue horizontale est
3834 représentée par une paire de nombres indiquant l'écart entre le point de
3835 référence et les bords gauche et droit -- l'écart à gauche étant
3836 négatif. L'étendue verticale est représentée par une paire de nombres
3837 indiquant l'écart entre le point de référence et les bords inférieur et
3838 supérieur -- l'écart vers le bas étant négatif.
3840 La position d'un objet sur la portée est donnée par la valeur des
3841 propriétés @code{X-offset} et @code{Y-offset}. La valeur de
3842 @code{X-offset} indique l'écart en abscisse (coordonnée X) par rapport
3843 au point de référence de l'objet parent ; la valeur de
3844 @code{Y-offset} indique l'écart par rapport à la ligne médiane de la
3845 portée. Les valeurs de @code{X-offset} et @code{Y-offset} peuvent être
3846 fournies arbitrairement, ou bien être calculé par des procédures
3847 spécifiques qui détermineront l'alignement par rapport à l'objet parent.
3849 @warning{Nombre d'objets sont affectés par des considérations
3850 spécifiques en matière de positionnement ; jouer sur les valeurs de
3851 @code{X-offset} ou @code{Y-offset} se révélera inefficace en pareil
3852 cas, même si l'objet dispose de la @code{self-alignment-interface}.
3853 Fixer arbitrairement les propriétés @code{X-offset} ou @code{Y-offset}
3854 annihilera alors les effets de la propriété @code{self-alignment}
3857 Par exemple, une altération peut se repositionner verticalement grâce à
3858 son @code{Y-offset} ; toute modification de son @code{X-offset}
3859 restera par contre sans effet.
3861 Les indications de repère s'alignent sur des objets de rupture -- tels
3862 les barres de mesure, clefs, métriques et armures. Certaines propriétés
3863 spécifiques -- dépendant de la @code{break-aligned-interface} --
3864 permettent de gérer le positionnement des indications de repère sur ces
3868 * Détermination directe de X-offset et Y-offset::
3869 * Utilisation de side-position-interface::
3870 * Utilisation de self-alignment-interface::
3871 * Utilisation de break-aligned-interface::
3875 Manuel de notation :
3876 @ref{Utilisation de break-aligned-interface}.
3878 Manuel d'extension :
3879 @rextend{Fonctions de rappel}.
3882 @node Détermination directe de X-offset et Y-offset
3883 @unnumberedsubsubsec Détermination directe de @code{X-offset} et @code{Y-offset}
3884 @translationof Setting X-offset and Y-offset directly
3886 Vous pouvez fournir, pour de nombreux objets, des valeurs numériques aux
3887 propriétés @code{X-offset} et @code{Y-offset}. Voici par exemple une
3888 note avec indication du doigté tout d'abord avec un positionnement par
3889 défaut, puis repositionnement par modification successive du
3890 @code{X-offset} et du @code{Y-offset}.
3892 @lilypond[verbatim,quote,relative=2]
3899 -\tweak X-offset #-1
3907 @node Utilisation de side-position-interface
3908 @unnumberedsubsubsec Utilisation de @code{side-position-interface}
3909 @translationof Using the side-position-interface
3911 Un objet disposant de la @code{side-position-interface} peut se voir
3912 accolé à son voisin de telle sorte que les bords des deux objets se
3913 touchent. Un tel objet peut se positionner au-dessus, en dessous, à
3914 droite ou à gauche de son parent. Ce parent ne saurait être
3915 stipulé ; il est déterminé par l'ordre d'apparition des éléments
3916 dans le flux des saisies. La plupart de ces objets ont pour parent une
3919 Les valeurs des propriétés @code{side-axis} et @code{direction}
3920 détermineront l'endroit où viendra se positionner l'objet, selon les
3921 préceptes suivants :
3923 @c TODO add an example of each to the table
3925 @multitable @columnfractions .3 .3 .3
3926 @headitem Propriété @tab Propriété @tab Positionnement
3927 @headitem @code{side-axis} @tab @code{direction} @tab
3929 @item @code{0} @tab @code{-1} @tab gauche
3930 @item @code{0} @tab @code{1} @tab droite
3931 @item @code{1} @tab @code{-1} @tab en dessous
3932 @item @code{1} @tab @code{1} @tab au-dessus
3936 Pour un @code{side-axis} à @code{0}, le @code{X-offset} devrait engager
3937 la procédure @code{ly:side-position-interface::x-aligned-side}.
3938 Celle-ci renverra la valeur adéquate de @code{X-offset} permettant
3939 d'accoler l'objet sur la droite ou sur la gauche de son parent, selon la
3940 valeur de @code{direction}.
3942 Pour un @code{side-axis} à @code{1}, le @code{Y-offset} devrait engager
3943 la procédure @code{ly:side-position-interface::y-aligned-side}.
3944 Celle-ci renverra la valeur adéquate de @code{Y-offset} permettant
3945 d'accoler l'objet au-dessus ou en dessous de son parent, selon la
3946 valeur de @code{direction}.
3948 @c TODO Add examples
3951 @node Utilisation de self-alignment-interface
3952 @unnumberedsubsubsec Utilisation de @code{self-alignment-interface}
3953 @translationof Using the self-alignment-interface
3955 @subsubsubheading Réalignement d'objets horizontalement
3957 L'alignement horizontal d'un objet disposant de la
3958 @code{self-alignment-interface} dépend de la valeur de sa propriété
3959 @code{self-alignment-X}, si tant est que la propriété @code{X-offset} de
3960 cet objet engage la procédure
3961 @code{ly:self-alignment-interface::x-aligned-on-self}.
3962 La propriété @code{self-alignment-X} peut contenir un nombre réel,
3963 l'unité de base étant la moitié de l'étendue horizontale de l'objet.
3964 Une valeur négative décalera l'objet vers la droite, une valeur positive
3965 vers la gauche. La valeur @code{0} permet de centrer l'objet sur
3966 le point de référence de son parent. Une valeur de @w{@code{-1}}
3967 alignera le bord gauche de l'objet sur le point de référence de son
3968 parent, et une valeur de @code{1} alignera le bord droit de l'objet
3969 sur le point de référence de son parent. Les valeurs symboliques
3970 @code{LEFT}, @code{CENTER} et @code{RIGHT} correspondent respectivement
3971 à @w{@code{-1}}, @code{0} et @code{1}.
3973 En règle générale, la valeur de @code{self-alignment-X} se modifie à
3974 l'aide d'une commande @code{\override}. Le recours à la commande
3975 @code{\tweak} permet de traiter séparément plusieurs annotations
3976 affectées à une même note :
3978 @lilypond[quote,verbatim,relative=1]
3980 -\tweak self-alignment-X #-1
3982 -\tweak self-alignment-X #0
3984 -\tweak self-alignment-X #RIGHT
3986 -\tweak self-alignment-X #-2.5
3987 ^"aligned further to the right"
3991 @subsubsubheading Réalignement d'objets verticalement
3993 L'alignement vertical suit le même principe : la propriété
3994 @code{Y-offset} doit alors engager la procédure
3995 @code{ly:self-alignment-interface::y-aligned-on-self}. Toutefois, il
3996 arrive bien souvent que d'autres mécanismes interviennent dans
3997 l'alignement vertical. La valeur de @code{Y-offset} n'étant que
3998 l'une des variables qui seront prises en compte, l'ajustement pour
3999 certains objets peut se révéler fastidieux. L'unité de base est
4000 relativement réduite, puisqu'elle est de la moitié de l'étendue
4001 verticale de l'objet ; le nombre à fournir en argument pourrait
4002 donc être relativement élevé. Une valeur de @w{@code{-1}}
4003 alignera le bord inférieur de l'objet sur le point de référence de son
4004 parent, et une valeur de @code{1} alignera le bord supérieur de
4005 l'objet sur le point de référence de son parent. La
4006 valeur @code{0} permet de centrer l'objet sur le point de référence
4007 de son parent. Les valeurs symboliques @code{DOWN}, @code{CENTER} et
4008 @code{UP} correspondent respectivement à @w{@code{-1}}, @code{0}
4012 @subsubsubheading Réalignement d'objets sur les deux axes
4014 Définir à la fois @code{X-offset} et @code{Y-offset} permet de réaligner
4015 un objet sur les deux axes.
4017 Dans l'exemple ci-dessous, nous ajustons l'indication de doigté de telle
4018 sorte qu'elle se place au plus près de la tête de note.
4020 @lilypond[quote,verbatim,relative=2]
4022 -\tweak self-alignment-X #0.5 % move horizontally left
4023 -\tweak Y-offset #ly:self-alignment-interface::y-aligned-on-self
4024 -\tweak self-alignment-Y #-1 % move vertically up
4030 @unnumberedsubsubsec Utilisation de @code{aligned-on-parent}
4032 @c Cannot document as they do not seem to operate consistently on all objects -td
4033 @c TODO investigate further
4035 The @code{aligned-on-parent} procedures are used in the same way
4036 as the @code{aligned-on-self} procedures, they difference being
4037 that they permit an object to be aligned with the @emph{edges} of
4038 the parent rather than the parent's reference point. The following
4039 example shows the difference:
4043 @lilypond[verbatim,quote]
4050 @unnumberedsubsubsec Utilisation de @code{centered-on-parent}
4052 @c Cannot document as they do not seem to operate consistently on all objects -td
4053 @c TODO investigate further
4057 @c TODO The align-interface, BassFigureAlignment and VerticalAlignment
4060 @node Utilisation de break-aligned-interface
4061 @unnumberedsubsubsec Utilisation de @code{break-aligned-interface}
4062 @translationof Using the break-alignable-interface
4064 @cindex alignement sur un objet
4065 @cindex break-align-symbols
4067 Indications de repère et numéros de mesure peuvent s'aligner sur des
4068 objets de notation autres qu'une barre de mesure. Parmi ces objets,
4069 nous citerons @code{ambitus}, @code{breathing-sign}, @code{clef},
4070 @code{custos}, @code{staff-bar}, @code{left-edge},
4071 @code{key-cancellation}, @code{key-signature}, et @code{time-signature}.
4073 Chaque objet possède son propre point de référence par défaut, sur
4074 lequel viendra s'aligner les indications de repère :
4076 @lilypond[verbatim,quote,relative=1]
4077 % The rehearsal mark will be aligned to right edge of the Clef
4078 \override Score.RehearsalMark.break-align-symbols = #'(clef)
4083 % The rehearsal mark will be centered above the Time Signature
4084 \override Score.RehearsalMark.break-align-symbols = #'(time-signature)
4090 % The rehearsal mark will be centered above the Breath Mark
4091 \override Score.RehearsalMark.break-align-symbols = #'(breathing-sign)
4100 Les différents objets sur lesquels l'alignement pourrait intervenir
4101 seront regroupés dans une liste. Si l'un des objets est invisible à
4102 l'endroit voulu, en raison d'un réglage de @code{break-visibility} ou
4103 bien par forçage de la visibilité des armures et clefs, le repère ou le
4104 numéro de mesure viendra s'aligner sur le premier élément de cette liste
4105 qui soit visible. Dans le cas où aucun objet de la liste n'est visible,
4106 l'alignement se fera sur la barre de mesure ou, dans le cas où la barre
4107 de mesure est invisible, à l'endroit même où la barre prendrait place.
4109 @lilypond[verbatim,quote,relative=1]
4110 % The rehearsal mark will be aligned to the right edge of the Key Signature
4111 \override Score.RehearsalMark.break-align-symbols = #'(key-signature clef)
4116 % The rehearsal mark will be aligned to the right edge of the Clef
4117 \set Staff.explicitKeySignatureVisibility = #all-invisible
4118 \override Score.RehearsalMark.break-align-symbols = #'(key-signature clef)
4123 % The rehearsal mark will be centered above the Bar Line
4124 \set Staff.explicitKeySignatureVisibility = #all-invisible
4125 \set Staff.explicitClefVisibility = #all-invisible
4126 \override Score.RehearsalMark.break-align-symbols = #'(key-signature clef)
4133 L'alignement d'un repère sur un objet de notation peut se modifier,
4134 comme l'illustre l'exemple suivant. Toutefois, si la partition comporte
4135 plusieurs portées, ce réglage devra apparaître dans chacune des portées.
4137 @lilypond[verbatim,quote,relative=1]
4138 % The RehearsalMark will be aligned with the right edge of the Key Signature
4139 \override Score.RehearsalMark.break-align-symbols = #'(key-signature)
4145 % The RehearsalMark will be centered above the Key Signature
4146 \once \override Score.KeySignature.break-align-anchor-alignment = #CENTER
4150 % The RehearsalMark will be aligned with the left edge of the Key Signature
4151 \once \override Score.KeySignature.break-align-anchor-alignment = #LEFT
4157 Le bord gauche d'un repère peut se décaler arbitrairement sur la gauche
4158 ou la droite. La valeur est exprimée en espaces de portée.
4160 @lilypond[verbatim,quote,relative=1]
4161 % The RehearsalMark will be aligned with the left edge of the Key Signature
4162 % and then shifted right by 3.5 staff-spaces
4163 \override Score.RehearsalMark.break-align-symbols = #'(key-signature)
4164 \once \override Score.KeySignature.break-align-anchor = #3.5
4168 % The RehearsalMark will be aligned with the left edge of the Key Signature
4169 % and then shifted left by 2 staff-spaces
4170 \once \override Score.KeySignature.break-align-anchor = #-2
4177 @node Regroupement vertical d'objets graphiques
4178 @subsection Regroupement vertical d'objets graphiques
4179 @translationof Vertical grouping of grobs
4181 @c TODO Expand this section
4183 Les objets @code{VerticalAlignment} et @code{VerticalAxisGroup}
4184 travaillent de concert. Comme leur nom anglais l'indiquent,
4185 @code{VerticalAxisGroup} regroupe différents objets tels que les portées
4186 (@code{Staff}), les paroles (@code{Lyrics}) et ainsi de suite ;
4187 puis @code{VerticalAlignment} synchronise verticalement ces différents
4188 groupes. En général, il n'y a qu'un seul @code{VerticalAlignment} pour
4189 l'ensemble de la partition, mais chaque contexte @code{Staff},
4190 @code{Lyrics}, etc. possède son propre @code{VerticalAxisGroup}.
4193 @node Modification des stencils
4194 @subsection Modification des stencils
4195 @translationof Modifying stencils
4197 Tout objet de rendu dispose d'une propriété @code{stencil} attachée à la
4198 @code{grob-interface}. En règle générale, cette propriété référence
4199 par défaut une fonction spécifique à l'objet et taillée sur mesure pour
4200 fournir le symbole qui va le représenter dans l'output. Par exemple,
4201 le réglage standard de la propriété @code{stencil} de l'objet
4202 @code{MultiMeasureRest} est @code{ly:multi-measure-rest::print}.
4204 Le symbole standard d'un objet quel qu'il soit peut être remplacé à
4205 partir du moment où la propriété @code{stencil} référence une procédure
4206 différente et écrite à cet effet. Ceci requiert une bonne maîtrise du
4207 fonctionnement interne de LilyPond, mais est grandement facilité dans
4208 bien des cas et permet d'obtenir le résultat escompté.
4210 En effet, rien ne nous interdit, à partir de la propriété
4211 @code{stencil}, d'appeler la procédure qui génère du texte,
4212 @code{ly:text-interface::print} en l'occurrence, et d'adjoindre à l'objet
4213 une propriété @code{text} qui contiendra, sous forme de @emph{markup},
4214 le symbole à dessein. Grâce à l'extrême flexibilité des @emph{markups},
4215 vous pourrez parvenir à bien des choses -- voir à ce sujet
4216 @ref{Éléments graphiques dans du texte formaté}.
4218 C'est la technique employée ici, où l'une des têtes de note est
4219 remplacée par une croix inscrite dans un cercle :
4221 @lilypond[verbatim,quote]
4223 \once \override NoteHead.stencil = #ly:text-interface::print
4224 \once \override NoteHead.text = \markup {
4226 \halign #-0.7 \draw-circle #0.85 #0.2 ##f
4227 \musicglyph #"noteheads.s2cross"
4235 Tous les glyphes de la fonte Feta sont accessibles à l'aide de la
4236 commande de @emph{markup} @code{\musicglyph} -- voir
4237 @ref{La fonte Feta}.
4239 @c TODO Add inserting eps files or ref to later
4241 @c TODO Add inserting Postscript or ref to later
4244 Manuel de notation :
4245 @ref{Text markup commands},
4246 @ref{Éléments graphiques dans du texte formaté},
4247 @ref{La fonte Feta},
4248 @ref{Mise en forme du texte}.
4251 @node Modification de l'allure des éléments
4252 @subsection Modification de l'allure des éléments
4253 @translationof Modifying shapes
4256 * Modification des liaisons::
4260 @node Modification des liaisons
4261 @unnumberedsubsubsec Modification des liaisons
4262 @translationof Modifying ties and slurs
4264 @cindex liaison, modification
4265 @cindex Bézier, points de contrôle d'une courbe
4266 @cindex points de contrôle, courbe de Bézier
4268 Les liaisons, qu'elles soient de prolongation (@code{Tie}),
4269 d'articulation (@code{Slur}), de phrasé (@code{PhrasingSlur}), de
4270 laisser-vibrer (@code{LaissezVibrerTie} ou de reprise
4271 (@code{RepeatTie}), sont dessinées sous la forme de courbes de
4272 Bézier de degré trois. Lorsque l'aspect de la liaison
4273 automatiquement calculé n'est pas satisfaisant, il peut être
4274 modifié manuellement de deux manières différentes :
4278 en spécifiant l'ajustement qui doit être apporté aux points de
4279 contrôle de la courbe calculée automatiquement, ou
4281 en fournissant explicitement les quatre points de contrôle qui
4282 permettront de définir cette courbe.
4285 Ces deux méthodes sont expliquées ci-dessous. La première
4286 convient mieux dans le cas d'une légère adaptation de la courbe ;
4287 la seconde sera plus efficace lorsqu'il s'agira de créer une courbe
4288 sur une seule et unique note.
4290 @subsubsubheading Courbes de Bézier cubiques
4291 @c VO Cubic Bézier curves
4293 Quatre points définissent une courbe de Bézier cubique. Les premier et
4294 quatrième points sont les points de départ et d'arrivée de la
4295 courbe ; les deux autres points de contrôle -- P1 et P2 -- en
4296 détermineront l'allure. La courbe se trace en partant du point P0, en
4297 se dirigeant vers P1 et en arrivant au point P3 selon la direction
4298 @w{P2-P3}. La courbe est à l'intérieur de l'enveloppe convexe des
4299 points de contrôle. Tout déplacement (translation, rotation,
4300 échelonnement) des points de contrôle sera répercuté sur le dessin
4304 @subsubsubheading Spécification de l'ajustement des points de contrôle
4305 @c VO Specifying displacements from current control points
4307 Voici par exemple une liaison de prolongation dont l'allure n'est pas
4308 des plus heureuses, même en optant pour un @code{\tieDown}.
4310 @cindex galbe des liaisons
4313 @lilypond[verbatim,quote,relative=1]
4317 { r4 <g c,> <g c,> <g c,> }
4321 L'ajustement des points de contrôle de cette liaison de tenue à
4322 l'aide de @code{\shape} permet d'éviter les collisions.
4324 L'instruction @code{\shape} obéit à la syntaxe
4327 [-]@code{\shape} @var{déplacements} @var{élément}
4330 Ceci aura pour effet de repositionner les points de contrôle de
4331 @var{élément} des différents montants fournis par
4332 @var{déplacements}. L'argument @var{déplacements} est constitué
4333 d'une liste de paires de nombres ou bien d'une liste de telles
4334 listes. Chacun des membres de l'une des paires indique
4335 l'ajustement de la coordonnée d'un point de contrôle. Lorsque
4336 @var{élément} est textuel, il en résulte une dérogation
4337 particulière appliquée au type d'objet considéré, alors que dans
4338 le cas d'une expression musicale sera appliqué un affinage
4341 En d'autres termes, la fonction @code{\shape} se comporte soit
4342 comme un @code{\once \override}, soit comme un @code{\tweak} selon
4343 que l'argument @var{élément} est un nom d'objet -- tel « Slur »
4344 -- ou une expression musicale tel un « ( ». L'argument
4345 @var{déplacements} spécifie les ajustements à apporter aux quatre
4346 points de contrôle, sous la forme d'une liste de paires
4347 @w{@code{(dx . dy)}} dont les valeurs sont exprimées en espace de
4348 portée ; on utilisera une liste de listes de paires dans le cas où
4349 la courbe comporte plusieurs segments.
4351 La fonction sera précédée d'un tiret si et seulement si elle doit
4352 s'appliquer sous forme de @code{\tweak}.
4354 Pour l'exemple qui nous occupe, l'adaptation sous forme
4355 dérogatoire -- recours à @code{\once\override} -- de la fonction
4356 @code{\shape}, nous pouvons remonter la liaison d'un demi espace
4359 @lilypond[verbatim,quote,relative=1]
4362 \shape #'((0 . 0.5) (0 . 0.5) (0 . 0.5) (0 . 0.5)) Tie
4366 { r4 <g c,> <g c,> <g c,> }
4370 La liaison est maintenant mieux positionnée ; mais sa partie
4371 centrale pourrait être un peu plus relevée, en procédant comme
4372 ci-dessous, cette fois en utilisant la formulation d'affinage
4373 -- la forme @code{\tweak} :
4375 @lilypond[verbatim,quote,relative=1]
4378 e1-\shape #'((0 . 0.5) (0 . 1) (0 . 1) (0 . 0.5)) ~ e
4381 { r4 <g c,> <g c,> <g c,> }
4385 L'adaptation du positionnement horizontal des points de contrôle
4386 se réalise de la même manière, ce qui permet de gérer le galbe de
4387 deux courbes débutant au même instant musical :
4389 @lilypond[verbatim,quote,ragged-right,relative=2]
4391 \shape #'((0.7 . -0.4) (0.5 . -0.4) (0.3 . -0.3) (0 . -0.2)) Slur
4392 \shape #'((0 . 0) (0 . 0.5) (0 . 0.5) (0 . 0)) PhrasingSlur
4396 La fonction @code{\shape} permet aussi d'adapter les points de
4397 contrôle d'une courbe qui se prolonge après un saut de ligne.
4398 Chaque portion de la courbe peut se voir appliquer sa propre liste
4399 d'ajustements. Lorsque l'un des segments ne nécessite pas de
4400 retouche, il suffit de lui fournir une liste vide. Dans l'exemple
4401 suivant, le saut de ligne laisse à croire qu'il y a non pas une
4402 seule mais deux liaisons :
4404 @lilypond[verbatim,quote,ragged-right,relative=1]
4410 Regalber les deux moitiés de la liaison rend plus évident le fait
4411 qu'elle d'étend par delà le saut de ligne :
4413 @lilypond[verbatim,quote,ragged-right,relative=1]
4414 % () may be used as a shorthand for ((0 . 0) (0 . 0) (0 . 0) (0 . 0))
4415 % if any of the segments does not need to be changed
4417 (( 0 . 0) (0 . 0) (0 . 0) (0 . 1))
4418 ((0.5 . 1.5) (1 . 0) (0 . 0) (0 . -1.5))
4425 La présence d'une courbe en S requiert obligatoirement d'ajuster
4426 manuellement les points de contrôle -- LilyPond n'optera jamais
4427 automatiquement pour un tel galbe.
4429 @lilypond[verbatim,quote,relative=2]
4430 c8( e b-> f d' a e-> g)
4431 \shape #'((0 . -1) (5.5 . -0.5) (-5.5 . -10.5) (0 . -5.5)) PhrasingSlur
4432 c8\( e b-> f d' a e-> g\)
4435 @subsubsubheading Déclaration explicite des points de contrôle
4436 @c VO Specifying control points explicitly
4438 Les coordonnées des points de contrôle sont données en unités d'espace
4439 de portée. L'abscisse est relative au point de référence de la note de
4440 départ de la liaison ; l'ordonnée est relative à la ligne médiane
4441 de la portée. Les différentes coordonnées sont entrées sous la forme
4442 d'une liste de quatre paires de nombres décimaux (ou nombres réels).
4443 L'une des manières de procéder consiste à tout d'abord estimer les
4444 coordonnées des deux extrémités puis, par tâtonnement, déterminer les
4445 deux points intermédiaires. Gardez à l'esprit que ces valeurs
4446 pourront devoir être revues si la musique ou sa mise en forme sont
4449 L'une des situation où spécifier explicitement les points de
4450 contrôle se révèle être tout à fait appropriée est lorsqu'ils se
4451 réfèrent à une seul et unique note. L'exemple suivant illustre
4452 l'un des moyens d'indiquer une liaison qui se prolonge sur les
4453 alternatives d'une répétition.
4455 @lilypond[verbatim,quote,relative=2]
4457 \repeat volta 3 { c4 d( e f }
4462 % create a slur and move it to a new position
4463 % the <> is just an empty chord to carry the slur termination
4464 -\tweak control-points #'((-2 . 3.8) (-1 . 3.9) (0 . 4) (1 . 3.4)) ( <> )
4469 % create a slur and move it to a new position
4470 -\tweak control-points #'((-2 . 3) (-1 . 3.1) (0 . 3.2) (1 . 2.4)) ( <> )
4477 Lorsque plusieurs liaisons, quelle qu'en soit la nature, commencent au
4478 même moment, jouer sur la propriété @code{control-points} est
4479 impossible, et la commande @code{\tweak} inefficace. Vous pouvez
4480 néanmoins influer sur la propriété @code{tie-configuration} de l'objet
4481 @code{TieColumn} pour déterminer la ligne de départ et l'orientation.
4484 Référence des propriétés internes :
4485 @rinternals{TieColumn}.
4488 @node Conteneurs requalifiants
4489 @subsection Conteneurs requalifiants
4490 @translationof Unpure-pure containers
4492 @cindex Scheme, pure containers
4493 @cindex Scheme, unpure containers
4494 @cindex pure containers, Scheme
4495 @cindex unpure containers, Scheme
4496 @cindex espacement horizontal, affinage
4498 Les conteneurs requalifiants permettent de faciliter le calcul des
4499 espacements en cas de modification du @emph{Y-axis} -- plus
4500 particulièrement les composantes @code{Y-offset} et @code{Y-extent} -- à
4501 l'aide d'une fonction scheme en lieu et place de valeurs.
4503 L'envergure verticale (@code{Y-extent}) de certains objets dépend de la
4504 propriété @code{stencil} ; jouer sur leur stencil requiert alors une
4505 intervention supplémentaire au niveau du @code{Y-extent} à l'aide d'un
4506 conteneur transitoire. Lorsqu'une fonction affecte un @code{Y-offset} ou
4507 un @code{Y-extent}, cela déclenche la détermination des sauts de ligne
4508 de manière anticipée dans la séquence des traitements. Il en résulte
4509 que cette opération n'est en fait pas exécutée ; elle renvoie
4510 habituellement @code{0} ou @code{'(0 . 0)}, ce qui peut engendrer des
4511 collisions. Une fonction @qq{pure} évitera d'avorter la construction
4512 des propriétés ou objets, qui de ce fait verront leurs arguments liés à
4513 la verticalité (@code{Y-axis}) correctement évalués.
4515 Il existe actuellement une trentaine de fonctions que l'on peut
4516 qualifier de @qq{pures}. Le recours à un conteneur transitoire permet
4517 de requalifier une fonction de telle sorte qu'elle soit reconnue comme
4518 @qq{pure} et soit donc évaluée @strong{avant} détermination des sauts de
4519 ligne -- l'espacement horizontal sera de fait ajusté en temps et en heure.
4520 La fonction @qq{impure} sera ensuite évaluée @strong{après} le
4521 positionnement des sauts de ligne.
4523 @warning{Il n'est pas toujours facile d'avoir l'assurance qu'une
4524 fonction soit qualifiée de @qq{pure} ; aussi nous vous recommandons
4525 d'éviter d'utiliser les objets @code{Beam} or @code{VerticalAlignment}
4526 lorsque vous désirez en créer une.}
4528 Un conteneur requalifiant se construit selon la syntaxe
4530 @code{(ly:make-unpure-pure-container f0 f1)}
4532 où @code{f0} est une fonction prenant @var{n} arguments (@var{n_>=_1}),
4533 le premier devant être l'objet en question ; il s'agit de la
4534 fonction dont le résultat sera réutilisé. @var{f1} est la fonction qui
4535 sera qualifiée de @qq{pure}. Elle prend @var{n_+_2} arguments, le
4536 premier devant être lui aussi l'objet en question, et les second et
4537 troisième étant respectivement les @qq{point de départ} (@var{start}) et
4538 @qq{point d'arrivée} (@var{end}).
4540 @var{start} et @var{end} sont dans tous les cas des valeurs fictives qui
4541 trouveront leur utilité dans le cas d'objets de type @code{Spanner},
4542 tels les soufflets (@code{Hairpin}) ou barres de ligature (@code{Beam}),
4543 en retournant les différentes estimations de hauteur basées sur leurs
4544 début et fin d'extension.
4546 Viennent ensuite les autres arguments de la fonction initiale @code{f0}
4547 -- autrement dit aucun si @var{n_=_1}.
4549 Les résultats de la deuxième fonction (@code{f1}) permettent une
4550 approximation des valeurs qui seront ensuite utilisées par la fonction
4551 initiale aux fins d'ajustement lors des phases ultérieures d'espacement.
4553 @lilypond[verbatim,quote,ragged-right]
4554 #(define (square-line-circle-space grob)
4555 (let* ((pitch (ly:event-property (ly:grob-property grob 'cause) 'pitch))
4556 (notename (ly:pitch-notename pitch)))
4557 (if (= 0 (modulo notename 2))
4558 (make-circle-stencil 0.5 0.0 #t)
4559 (make-filled-box-stencil '(0 . 1.0)
4562 squareLineCircleSpace = {
4563 \override NoteHead.stencil = #square-line-circle-space
4566 smartSquareLineCircleSpace = {
4567 \squareLineCircleSpace
4568 \override NoteHead.Y-extent =
4569 #(ly:make-unpure-pure-container
4570 ly:grob::stencil-height
4571 (lambda (grob start end) (ly:grob::stencil-height grob)))
4574 \new Voice \with { \remove "Stem_engraver" }
4576 \squareLineCircleSpace
4578 \smartSquareLineCircleSpace
4583 La première mesure de l'exemple ci-dessus ne fait pas appel à un
4584 conteneur requalifiant ; le moteur d'espacement n'a donc aucune
4585 connaissance de la largeur des têtes de note et ne peut empêcher
4586 qu'elles chevauchent les altérations. Dans la deuxième mesure, par
4587 contre, le recours à un conteneur requalifiant informe le moteur
4588 d'espacement de la largeur des têtes de note ; les collisions sont
4589 alors évitées du fait de l'espace réservé à chacune des têtes.
4591 Lorsqu'il s'agit de calculs simples, les fonctions, tant pour la partie
4592 @qq{pure} que pour la partie @qq{impure}, peuvent être identiques au
4593 détail près du nombre d'arguments utilisés ou du domaine d'intervention.
4595 @warning{Le fait de qualifier une fonction de @qq{pure} alors qu'elle ne
4596 l'est pas peut générer des résultats imprévisibles.}
4599 @node Utilisation de fonctions musicales
4600 @section Utilisation de fonctions musicales
4601 @translationof Using music functions
4603 @c TODO -- add @seealso, etc. to these subsections
4605 Une adaptation ou un affinage qui devient récurrent parce que doit
4606 s'appliquer à différentes expressions musicales peut faire l'objet d'une
4607 @emph{fonction musicale}. Nous ne traiterons ici que des fonctions de
4608 @emph{substitution}, dont le but est de substituer une variable en un
4609 bout de code LilyPond. D'autres fonctions, plus complexes, sont
4610 abordées au chapitre @rextend{Fonctions musicales}.
4613 * Syntaxe d'une fonction de substitution::
4614 * Exemples de fonction de substitution::
4618 @node Syntaxe d'une fonction de substitution
4619 @subsection Syntaxe d'une fonction de substitution
4620 @translationof Substitution function syntax
4622 La rédaction d'une fonction chargée de substituer du code LilyPond à une
4623 variable est chose relativement aisée. Une telle fonction est de la
4628 #(define-music-function
4629 (parser location @var{arg1} @var{arg2} @dots{})
4630 (@var{type1?} @var{type2?} @dots{})
4632 @var{@dots{}musique@dots{}}
4639 @multitable @columnfractions .33 .66
4640 @item @code{@var{argN}}
4641 @tab @var{n}ième argument.
4643 @item @code{@var{typeN?}}
4644 @tab un @emph{type de prédicat} Scheme pour lequel @code{@var{argN}}
4645 doit renvoyer @code{#t}.
4647 @item @code{@var{@dots{}musique@dots{}}}
4648 @tab du code LilyPond tout ce qu'il y a de plus ordinaire, avec des
4649 @code{$} (là où seule une construction LilyPond est autorisée) et des
4650 @code{#} (lorsqu'il s'agit d'une valeur en Scheme, d'un argument de
4651 fonction musicale ou de musique faisant partie d'une liste) pour
4652 référencer les arguments (par ex. @samp{#arg1}).
4655 Les arguments @code{parser} et @code{location} sont obligatoires ;
4656 ils sont utilisés dans certaines situations évoluées, comme indiqué dans
4657 le manuel d'extension des fonctionnalités à au chapitre
4658 @rextend{Fonctions musicales}. Assurez-vous bien de ne pas les omettre
4659 dans vos fonctions de substitution.
4661 La liste des types de prédicat est elle aussi obligatoire. Voici
4662 quelques uns des types de prédicat les plus utilisés dans les fonctions
4667 cheap-list? @emph{(au lieu de }@qq{list?}@emph{, pour accélérer le traitement)}
4679 Une liste plus fournie est disponible à l'annexe
4680 @ref{Types de prédicats prédéfinis}. Vous pouvez par ailleurs définir
4681 vos propres types de prédicat.
4684 Manuel de notation :
4685 @ref{Types de prédicats prédéfinis}.
4687 Manuel d'extension :
4688 @rextend{Fonctions musicales}.
4690 Fichiers d'initialisation :
4691 @file{lily/music-scheme.cc},
4693 @file{scm/lily.scm}.
4696 @node Exemples de fonction de substitution
4697 @subsection Exemples de fonction de substitution
4698 @translationof Substitution function examples
4700 La présente rubrique regroupe quelques exemples de fonction
4701 substitutive. Le propos est ici d'illustrer les possibilités qu'offrent
4702 les fonctions de substitution simple.
4704 Dans ce premier exemple, nous définissons une fonction dans le but de
4705 simplifier le réglage du décalage d'une annotation (un
4708 @lilypond[quote,verbatim,ragged-right]
4710 #(define-music-function
4711 (parser location padding)
4714 \once \override TextScript.padding = #padding
4718 c4^"piu mosso" b a b
4720 c4^"piu mosso" d e f
4722 c4^"piu mosso" fis a g
4726 Nous pouvons utiliser autre chose que des nombres au sein d'une
4727 fonction, y compris une expression musicale :
4729 @lilypond[quote,verbatim,ragged-right]
4731 #(define-music-function
4732 (parser location note)
4735 \tweak NoteHead.stencil #ly:text-interface::print
4736 \tweak NoteHead.text
4737 \markup \musicglyph #"custodes.mensural.u0"
4738 \tweak Stem.stencil ##f
4742 \relative c' { c4 d e f \custosNote g }
4745 Une fonction de substitution peut traiter plusieurs arguments :
4747 @lilypond[quote,verbatim,ragged-right]
4749 #(define-music-function
4750 (parser location padding tempotext)
4753 \once \override Score.MetronomeMark.padding = #padding
4754 \tempo \markup { \bold #tempotext }
4758 \tempo \markup { "Low tempo" }
4760 \tempoPadded #4.0 "High tempo"
4765 @c TODO: add appropriate @@ref's here.