1 @c -*- coding: utf-8; mode: texinfo; documentlanguage: fr -*-
4 Translation of GIT committish: 057106293b07b74b00553fe4dc3dfac5c1f3b682
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 -- vous
26 en trouverez un @rlearningnamed{Retouche de partition,apperçu} dans le
27 manuel d'initiation. Le propos est plutôt ici de mettre en évidence les
28 différents groupes auxquels s'apparentent ces contrôles, et d'expliquer
29 comment trouver le bon levier pour obtenir tel ou tel effet en
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/@/user/@/lilypond@/-internals/,en@tie{}ligne},
40 au format HTML, mais 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
50 base pour saisir des nombres, des listes, des chaînes de caractères ou
51 des symboles, en Scheme.}
53 Il est quatre domaines dans lesquels on peut modifier les réglages par
58 La notation automatique, ce qui revient à modifier la manière dont les
59 éléments de notation sont automatiquement créés -- par exemple, les
63 L'apparence, qui se rapporte aux objets pris individuellement -- ainsi
64 de la direction des hampes, du placement des indications textuelles.
67 Les contextes, qui recouvrent la manière dont les évènements musicaux
68 sont représentés sous forme de notation -- par exemple, le fait
69 d'attribuer un chiffre de mesure distinct à chaque portée.
72 La mise en page, autrement dit les marges, l'espacement, la taille du
73 papier@tie{}; tous ces facteurs font l'objet des chapitres
74 @ref{Généralités en matière d'entrée et sortie} et
75 @ref{Gestion de l'espace}.
80 * Contextes d'interprétation::
81 * En quoi consiste la référence des propriétés internes::
82 * Modification de propriétés::
83 * Propriétés et contextes utiles::
84 * Retouches avancées::
85 * Utilisation de fonctions musicales::
88 @node Contextes d'interprétation
89 @section Contextes d'interprétation
90 @translationof Interpretation contexts
92 Cette section traite des contextes.
95 * Tout savoir sur les contextes::
96 * Création d'un contexte::
97 * Conservation d'un contexte::
98 * Modification des greffons de contexte::
99 * Modification des réglages par défaut d'un contexte::
100 * Définition de nouveaux contextes::
101 * Alignement des contextes::
106 Manuel d'initiation :
107 @rlearning{Contextes et graveurs}.
109 Fichiers d'initialisation :
110 @file{ly/engraver-init.ly},
111 @file{ly/performer-init.ly}.
114 @rlsr{Contexts and engravers}.
116 Référence des propriétés internes :
117 @rinternals{Contexts},
118 @rinternals{Engravers and Performers}.
121 @node Tout savoir sur les contextes
122 @subsection Tout savoir sur les contextes
123 @translationof Contexts explained
126 @c TODO Rethink and rewrite
128 >> > > - list of contexts: my *danger unmaintainable*
129 >> > > alarm just went off. I'm
131 I knew it would... And leaving out some of them is perfectly fine
133 I do think that a list like this, with the main contexts and a
135 description of what they do (perhaps also with a note about what
137 behavior is associated with each of them, but this may be
139 should be there, and then we could simply list the remaining ones
141 further explanation and with links to the IR.
144 @c TODO Improve layout, order and consistency of wording -td
146 @c TODO Add introduction which explains contexts in generality -td
148 @c TODO Describe propagation of property values -td
152 * Score -- le père de tous les contextes::
153 * Contextes de haut niveau -- les systèmes::
154 * Contextes de niveau intermédiaire -- les portées::
155 * Contextes de bas niveau -- les voix::
158 @node Score -- le père de tous les contextes
159 @unnumberedsubsubsec Score -- le père de tous les contextes
160 @translationof Score - the master of all contexts
165 @node Contextes de haut niveau -- les systèmes
166 @unnumberedsubsubsec Contextes de haut niveau -- les systèmes
167 @translationof Top-level contexts - staff containers
172 @node Contextes de niveau intermédiaire -- les portées
173 @unnumberedsubsubsec Contextes de niveau intermédiaire -- les portées
174 @translationof Intermediate-level contexts - staves
179 @node Contextes de bas niveau -- les voix
180 @unnumberedsubsubsec Contextes de bas niveau -- les voix
181 @translationof Bottom-level contexts - voices
186 @node Création d'un contexte
187 @subsection Création d'un contexte
188 @translationof Creating contexts
193 @node Conservation d'un contexte
194 @subsection Conservation d'un contexte
195 @translationof Keeping contexts alive
200 @node Modification des greffons de contexte
201 @subsection Modification des greffons de contexte
202 @translationof Modifying context plug-ins
204 Les contextes, tels que @code{Score} ou @code{Staff}, ne contiennent
205 pas que des propriétés@tie{}; ils mettent également en œuvre certains
206 sous-programmes (@emph{plug-ins} pour employer le terme consacré) nommés
207 @qq{graveurs} (@emph{engravers} pour reprendre le terme anglais).
208 Ces sous-programmes sont chargés de créer les différents éléments de
209 notation@tie{}: on trouve ainsi dans le contexte @code{Voice} un graveur
210 @code{Note_heads_engraver}, chargé des têtes de notes et, dans le
211 contexte @code{Staff}, un graveur @code{Key_signature_engraver}, chargé
214 Vous trouverez une description exhaustive de chaque graveur dans
216 @rinternals{Engravers and Performers}.
219 Référence des propriétés internes @expansion{} Translation @expansion{} Engravers.
221 Chaque contexte mentionné dans
223 @rinternals{Contexts}
226 Référence des propriétés internes @expansion{} Translation @expansion{} Context.
228 répertorie les graveurs mis en œuvre.
231 On peut faire, au moyen de ces graveurs, sa propre @qq{cuisine}, en
232 modifiant les contextes à volonté.
234 Lorsque un contexte est créé, par la commande @code{\new} ou
235 @code{\context}, on peut y adjoindre un bloc @code{\with} (en anglais
236 @q{avec}), dans lequel il est possible d'ajouter (commande
237 @code{\consists}) ou d'enlever (commande @code{\remove}) des
243 \new @var{contexte} \with @{
256 Ici les points de suspension @dots{} devront être remplacés par les noms
257 des graveurs désirés. Dans l'exemple suivant, on enlève du contexte
258 @code{Staff}, la métrique (graveur @code{Time_signature_engraver})
259 et la clé (graveur @code{Clef_engraver}).
261 @lilypond[quote,relative=1,verbatim]
267 \remove "Time_signature_engraver"
268 \remove "Clef_engraver"
275 La clé et le chiffre de mesure ont disparu de la deuxième portée. C'est
276 une méthode quelque peu radicale, puisqu'elle affectera toute la portée
277 jusqu'à la fin de la partition. L'espacement s'en trouve également
278 affecté, ce qui peut être ou non l'effet recherché. Une méthode plus
279 sophistiquée aurait été de rendre ces objets transparents (voir
280 @rlearning{Visibilité et couleur des objets}).
282 Dans l'exemple suivant, voici une mise en pratique plus utile. En temps
283 normal, les barres de mesure et la métrique sont synchronisées
284 verticalement dans toute la partition. Les graveurs qui en sont
285 responsables se nomment @code{Timing_translator} et
286 @code{Default_bar_line_engraver}. En les enlevant du contexte
287 @code{Score} pour les attribuer au contexte @code{Staff}, chaque portée
288 peut désormais avoir sa propre métrique.
290 @cindex polymétrique, partition
291 @cindex chiffres de mesure multiples
293 @lilypond[quote,verbatim]
297 \consists "Timing_translator"
298 \consists "Default_bar_line_engraver"
304 \consists "Timing_translator"
305 \consists "Default_bar_line_engraver"
314 \remove "Timing_translator"
315 \remove "Default_bar_line_engraver"
321 En règle générale, l'ordre dans lequel les graveurs sont mentionnés
322 importe peu. Il se peut toutefois qu'un graveur écrive une propriété
323 qui sera interprétée par un autre, ou qu'un graveur crée un objet
324 graphique qui sera traité par un autre@tie{}; l'ordre d'apparition de
325 ces graveurs prendra lors tout son importance.
327 Pour information, les ordonnancements suivants sont importants@tie{}:
328 le @code{Bar_engraver} devrait toujours être le premier@tie{}; le
329 @code{New_fingering_engraver} doit toujours précéder le
330 @code{Script_column_engraver}. Nous vous conseillons, pour les autres,
331 de vérifier les évenntuelles dépendances.
333 @c deprecated node: delete. --fv
335 @n ode Retouches de mise en forme au sein des contextes
336 @s ubsection Retouches de mise en forme au sein des contextes
337 @t ranslationof Layout tunings within contexts
339 Chaque contexte est chargé de créer plusieurs types d'objets graphiques.
340 Il contient également les réglages nécessaires pour chacun de ces
341 objets. Si l'on modifie ces réglages, les objets n'auront plus la même
344 La syntaxe employée pour ce faire est
347 \override @var{contexte}.@var{objet} #'@var{propriété} = #@var{valeur}
350 Ici @var{objet} est un objet graphique, tel que @code{Stem} (les hampes)
351 ou @code{NoteHead} (les têtes de note)@tie{}; @var{propriété} est une
352 variable (désignée par un symbole, ce qui explique l'apostrophe)
353 employée par le système de mise en page. La sous-section
354 @ref{Élaboration d'une retouche} vous aidera à savoir quoi mettre à la
355 place de @var{objet}, @var{propriété} et @var{valeur}@tie{}; notre
356 propos n'est ici que d'examiner l'emploi de cette commande.
358 La commande suivante@tie{}:
361 \override Staff.Stem #'thickness = #4.0
365 rend les hampes plus épaisses (la valeur par défaut est 1.3, ce qui
366 signifie qu'elles sont 1,3 fois plus épaisses que les lignes de la
367 portée). Dans la mesure où nous avons indiqué @code{Staff} comme
368 contexte, ce réglage ne s'appliquera qu'à la portée courante@tie{}; les
369 autres portées demeureront intactes.
372 @lilypond[quote,verbatim,relative=2,fragment]
374 \override Staff.Stem #'thickness = #4.0
380 La commande @code{\override} modifie donc la définition de l'objet
381 @code{Stem} dans le contexte @code{Staff}@tie{}; toutes les hampes qui
382 suivent seront affectées. Tout comme avec la commande @code{\set},
383 l'argument @var{contexte} peut être omis, auquel cas le contexte par
384 défaut (ici, @code{Voice}) sera employé. La commande @code{\once}
385 permet de n'appliquer la modification qu'une seule fois.
387 @lilypond[quote,fragment,verbatim,relative=2]
389 \once \override Stem #'thickness = #4.0
394 La commande @code{\override} doit être entrée @emph{avant} l'objet
395 concerné. Ainsi, lorsque l'on veut altérer un objet qui se prolonge,
396 tel qu'une liaison, une ligature ou tout autre objet dit @emph{Spanner},
397 la commande @code{\override} doit être saisie avant que l'objet soit
400 @lilypond[quote,fragment,verbatim,relative=2]
401 \override Slur #'thickness = #3.0
403 \override Beam #'beam-thickness = #0.6
408 Dans cet exemple, la liaison (@emph{Slur}) est épaissie, mais non la
409 ligature (@emph{Beam}). En effet, le code qui lui est relatif n'a pas
410 été inséré avant le début de la ligature, et demeure donc sans effet.
412 De même que la commande @code{\unset}, la commande @code{\revert} défait
413 ce qui a été fait par une commande @code{\override}. Tout comme avec
414 @code{\unset}, elle ne peut annuler que les réglages effectués dans le
415 même contexte. Ainsi dans l'exemple suivant, la commande @code{\revert}
419 \override Voice.Stem #'thickness = #4.0
420 \revert Staff.Stem #'thickness
423 Il existe, à l'intérieur même de certaines propriétés, des options que
424 l'on nomme @q{sous-propriétés}. La syntaxe est alors
426 @c leave this as a long long
428 \override @var{contexte}.@var{objet} #'@var{propriété} #'@var{sous-propriété} = #@var{valeur}
432 Ainsi, par exemple@tie{}:
435 \override Stem #'(details beamed-lengths) = #'(4 4 3)
440 Référence des propriétés internes :
441 @rinternals{OverrideProperty},
442 @rinternals{RevertProperty},
443 @rinternals{PropertySet},
444 @rinternals{Backend},
445 @rinternals{All layout objects}.
450 La sous-couche Scheme ne vérifie pas la saisie des propriétés de façon
451 très stricte. Des références cycliques dans des valeurs Scheme peuvent
452 de ce fait interrompre, ou faire planter le programme -- ou bien les
456 @node Modification des réglages par défaut d'un contexte
457 @subsection Modification des réglages par défaut d'un contexte
458 @translationof Changing context default settings
460 Les réglages montrés dans les sous-sections
461 @ref{La commande de fixation (set)},
462 @ref{Modification des greffons de contexte}
463 @c et @c r ef{Retouches de mise en forme au sein des contextes}
464 peuvent également être saisis indépendamment de la musique dans le bloc
465 @code{\layout}, au moyen de la commande @code{\context}@tie{}:
474 \override Stem #'thickness = #4.0
475 \remove "Time_signature_engraver"
480 Le raccourci @code{\Staff} invoque les définitions inhérentes au
481 contexte @code{Staff}, de façon à ce qu'elles puissent être modifiées.
483 Les lignes suivantes affecteront toutes les portées (tous les contextes
484 @code{Staff}) dans la partition.
487 \override Stem #'thickness = #4.0
488 \remove "Time_signature_engraver"
492 Les autres contextes peuvent être modifiés de même manière.
494 La commande @code{\set}, dans le bloc @code{\layout}, est
495 facultative@tie{}; aussi les lignes suivantes produiront-elles le même
508 Il est impossible de stocker des modifications de contexte dans un
511 Le raccourci @code{\Staff \RemoveEmptyStaves} détruit tous les réglages
512 du contexte @code{\Staff}. Pour modifier des propriétés de portées
513 gouvernées par @code{\Staff \RemoveEmptyStaves}, il faut le faire
514 impérativement @strong{après} avoir invoqué @code{\Staff
515 \RemoveEmptyStaves}@tie{}:
520 \Staff \RemoveEmptyStaves
522 \override Stem #'thickness = #4.0
528 @node Définition de nouveaux contextes
529 @subsection Définition de nouveaux contextes
530 @translationof Defining new contexts
532 Les contextes tels que @code{Staff} ou @code{Voice} sont faits
533 de briques de constructions empilées. En combinant divers graveurs,
534 il est possible de créer de nouveaux types de contextes.
536 Dans l'exemple suivant, on construit, de zéro, un nouveau contexte très
537 semblable à @code{Voice}, mais qui n'imprime que des têtes de notes en
538 forme de barres obliques au centre de la portée. Un tel contexte, par
539 exemple, peut servir à indiquer un passage improvisé dans un morceau de
543 @lilypond[quote,ragged-right]
546 \type "Engraver_group"
547 \consists "Note_heads_engraver"
548 \consists "Rhythmic_column_engraver"
549 \consists "Text_engraver"
550 \consists Pitch_squash_engraver
551 squashedPosition = #0
552 \override NoteHead #'style = #'slash
553 \override Stem #'transparent = ##t
554 \override Flag #'transparent = ##t
558 \accepts "ImproVoice"
562 a4 d8 bes8 \new ImproVoice { c4^"ad lib" c
563 c4 c^"dévêtez-vous" c_"tout en jouant :)" c }
569 On a rassemblé les réglages dans un bloc @code{\context}, lui-même dans
570 le bloc @code{\layout}@tie{}:
580 En lieu et place des points (@dots{}), voici les éléments à
584 @item Tout d'abord, il convient de donner un nom @code{\name} à notre
585 nouveau contexte@tie{}:
591 @item Comme il est très semblable à @code{Voice}, nous souhaitons que
592 toutes les commandes associées au @code{Voice} déjà existant, restent
593 valables. D'où nécessité de la commande @code{\alias}, qui va
594 l'associer au contexte @code{Voice}@tie{}:
600 @item Ce contexte doit pouvoir imprimer des notes, et des indications
601 textuelles@tie{}; on ajoute donc les graveurs appropriés.
604 \consists Note_heads_engraver
605 \consists Text_engraver
608 @item Cependant, on veut que les notes s'affichent toutes au centre de
612 \consists Pitch_squash_engraver
613 squashedPosition = #0
617 Le graveur @rinternals{Pitch_squash_engraver} intercepte les notes
618 créées par @rinternals{Note_heads_engraver}, et les @qq{écrase} pour
619 qu'elles aient toutes la même position verticale, définie par
620 @code{squashedPosition}@tie{}: ici il s'agit de la valeur@tie{}@code{0},
621 c'est-à-dire la ligne du milieu.
623 @item On veut que les notes aient la forme d'une barre oblique, sans
627 \override NoteHead #'style = #'slash
628 \override Stem #'transparent = ##t
629 \override Flag #'transparent = ##t
632 @item Afin que tous ces graveurs puissent travailler de concert, on leur
633 adjoint un sous-programme spécial, introduit par la commande
634 @code{\type}@tie{}: il s'agit de @code{Engraver_group},
637 \type "Engraver_group"
642 Récapitulons -- on se retrouve avec le bloc suivant@tie{}:
647 \type "Engraver_group"
648 \consists "Note_heads_engraver"
649 \consists "Text_engraver"
650 \consists Pitch_squash_engraver
651 squashedPosition = #0
652 \override NoteHead #'style = #'slash
653 \override Stem #'transparent = ##t
654 \override Flag #'transparent = ##t
661 Ce n'est pas tout. En effet, on veut intégrer le nouveau contexte
662 @code{ImproVoice} dans la hiérarchie des contextes. Tout comme le
663 contexte @code{Voice}, sa place est au sein du contexte @code{Staff}.
664 Nous allons donc modifier le contexte @code{Staff},
665 au moyen de la commande @code{\accepts}@tie{}:
676 Le contraire de @code{\accepts} est @code{\denies},
677 qui est parfois utile lorsque l'on recycle des définitions de
678 contextes déjà existantes.
680 Enfin, tout cela doit prendre place dans le bloc @code{\layout},
691 \accepts "ImproVoice"
696 On peut alors saisir la musique, comme dans l'exemple plus haut@tie{}:
704 c c_"tout en jouant :)"
711 @node Alignement des contextes
712 @subsection Alignement des contextes
713 @translationof Aligning contexts
716 Il est possible d'aligner verticalement chaque nouveau contexte,
717 en-dessous ou au-dessus, par exemple dans le cas de musique vocale
718 (@rlearning{Ensemble vocal}) ou d'@emph{ossias}.
722 @findex alignAboveContext
723 @findex alignBelowContext
725 @lilypond[quote,ragged-right]
728 \relative c' \new Staff = "main" {
731 \new Staff \with { alignAboveContext = #"main" } \ossia
739 @node En quoi consiste la référence des propriétés internes
740 @section En quoi consiste la référence des propriétés internes
741 @translationof Explaining the Internals Reference
745 * Navigation dans les références du programme::
746 * Interfaces de rendu::
747 * Détermination de la propriété d'un objet graphique (grob)::
748 * Conventions de nommage::
751 @node Navigation dans les références du programme
752 @subsection Navigation dans les références du programme
753 @translationof Navigating the program reference
755 Comment, par exemple, déplacer le doigté dans le fragment suivant@tie{}?
757 @lilypond[quote,relative=2,verbatim]
763 Sur la page de la documentation relative aux doigtés, c'est-à-dire
764 @ref{Doigtés}, se trouve l'indication suivante@tie{}:
768 Référence des propriétés internes :
769 @rinternals{Fingering}.
772 @c outdated info; probably will delete.
774 This fragment points to two parts of the program reference: a page
775 on @code{FingerEvent} and one on @code{Fingering}.
777 The page on @code{FingerEvent} describes the properties of the music
778 expression for the input @code{-2}. The page contains many links
779 forward. For example, it says
782 Accepted by: @rinternals{Fingering_engraver},
786 That link brings us to the documentation for the Engraver, the
790 This engraver creates the following layout objects: @rinternals{Fingering}.
793 In other words, once the @code{FingerEvent}s are interpreted, the
794 @code{Fingering_engraver} plug-in will process them.
798 @c I can't figure out what this is supposed to mean. -gp
800 The @code{Fingering_engraver} is also listed to create
801 @rinternals{Fingering} objects,
803 @c old info? it doesn't make any sense to me with our current docs.
805 second bit of information listed under @b{See also} in the Notation
810 Ladite référence est disponible au format HTML, ce qui rend la
811 navigation bien plus aisée. Il est possible soit de la lire en ligne,
812 soit de la télécharger dans ce format. La démarche présentée ici sera
813 plus difficile à comprendre dans un document au format PDF.
816 Suivons le lien @rinternals{Fingering}. En haut de la nouvelle page,
820 Fingering objects are created by: @rinternals{Fingering_engraver} and
821 @rinternals{New_fingering_engraver}.
824 En d'autres termes, @emph{Les indications de doigtés}
825 (@code{Fingering} en anglais) @emph{sont créées par les graveurs
826 @rinternals{Fingering_engraver} et @rinternals{New_fingering_engraver}.}
828 En suivant derechef les liens propres à la référence du programme, on
829 suit en fait le cheminement qui aboutit à la création de la
834 @item @rinternals{Fingering}:
835 @rinternals{Fingering} objects are created by:
836 @rinternals{Fingering_engraver}
838 @item @rinternals{Fingering_engraver}:
839 Music types accepted: @rinternals{fingering-event}
841 @item @rinternals{fingering-event}:
842 Music event type @code{fingering-event} is in Music expressions named
843 @rinternals{FingeringEvent}
846 Ce cheminement se produit, bien sûr, en sens inverse@tie{}: nous sommes
847 ici partis du résultat, et avons abouti aux évènements (en anglais
848 @emph{Events}) engendrés par le fichier d'entrée. L'inverse est
849 également possible@tie{}: on peut partir d'un évènement, et suivre le
850 cheminement de LilyPond qui aboutit à la création d'un ou plusieurs
853 La référence des propriétés internes peut également se parcourir comme
854 un document normal. On y trouve des chapitres tels que
856 @rinternals{Music definitions},
859 @code{Music definitions}
861 @rinternals{Translation}, ou encore @rinternals{Backend}. Chaque
862 chapitre recense toutes les définitions employées, et les propriétés
863 sujettes à ajustements.
865 @c -- what about adding a link to the glossary here ? -vv
867 La Référence du programme n'est pas traduite en français -- notamment du
868 fait qu'elle est en évolution constante, tout comme LilyPond. En
869 revanche, les termes musicaux font l'objet d'un
870 @commentfairelelien{glossaire} fort utile pour les utilisateurs francophones.
874 @node Interfaces de rendu
875 @subsection Interfaces de rendu
876 @translationof Layout interfaces
878 @cindex interfaces de rendu
879 @cindex rendu, interfaces de
880 @cindex objets graphiques
882 Tous les éléments de notation sont considérés comme des objets
883 graphiques (en anglais @emph{Graphical Object}, d'où le diminutif
884 @emph{Grob}). Chaque objet est doté d'un certain nombre de propriétés
885 (l'épaisseur du trait, l'orientation, etc.), et lié à d'autres objets.
886 Le fonctionnement de ces objets est décrit en détail dans
887 @rinternals{grob-interface}.
889 Prenons l'exemple des doigtés (en anglais @emph{Fingering}). La page
890 @code{Fingering} de la Référence des propriétés internes établit une
891 liste de définitions propres à ce type d'objet@tie{}:
894 @code{padding} (dimension, in staff space):
900 Ce qui signifie que les doigtés doivent être maintenus à une certaine
901 distance (@emph{padding}) des notes@tie{}: 0,5 unités @emph{staff-space}
904 Chaque objet peut avoir plusieurs attributs, en tant qu'élément
905 typographique ou musical. Ainsi, un doigté (objet @emph{Fingering})
906 possède les attributs suivants@tie{}:
911 Sa taille ne dépend pas de l'espacement horizontal, contrairement aux
912 liaisons ou ligatures.
915 C'est du texte -- un texte vraiment court, certes.
918 Ce texte est imprimé au moyen d'une fonte, contrairement aux liaisons ou
922 Sur l'axe horizontal, le centre de ce symbole doit être aligné avec le
926 Sur l'axe vertical, le symbole doit être proche de la note et de la
930 Sur l'axe vertical encore, il doit également s'ordonner avec les
931 éventuels autres symboles, ponctuations, ou éléments textuels.
934 Faire appliquer ces différents attributs est le rôle des
935 @emph{interfaces}, que l'on trouve en bas de la page
936 @rinternals{Fingering}.
939 This object supports the following interfaces:
940 @rinternals{item-interface},
941 @rinternals{self-alignment-interface},
942 @rinternals{side-position-interface}, @rinternals{text-interface},
943 @rinternals{text-script-interface}, @rinternals{font-interface},
944 @rinternals{finger-interface}, and @rinternals{grob-interface}.
951 Cet objet admet les interfaces suivantes@tie{}:
954 Suit la liste des interfaces en question, présentées comme autant de
955 liens, qui conduisent sur les pages dédiées à chacune d'entre elles.
956 Chaque interface est dotée d'un certain nombre de propriétés, dont
957 certaines peuvent être modifiées, et d'autres non (les @emph{Internal
958 properties}, ou propriétés internes).
960 Pour aller encore plus loin, plutôt que de simplement parler de l'objet
961 @code{Fingering}, ce qui ne nous avance pas à grand chose, on peut aller
962 explorer son âme même, dans les fichiers source de LilyPond (voir
963 @rlearning{Autres sources de documentation}), en l'occurence le fichier
964 @file{scm/define-grobs.scm}@tie{}:
969 (avoid-slur . around)
971 (staff-padding . 0.5)
972 (self-alignment-X . 0)
973 (self-alignment-Y . 0)
974 (script-priority . 100)
975 (stencil . ,ly:text-interface::print)
976 (direction . ,ly:script-interface::calc-direction)
977 (font-encoding . fetaText)
978 (font-size . -5) ; don't overlap when next to heads.
979 (meta . ((class . Item)
980 (interfaces . (finger-interface
982 text-script-interface
984 side-position-interface
985 self-alignment-interface
990 @dots{}où l'on découvre que l'objet @code{Fingering} n'est rien de plus
991 qu'un amas de variables et de réglages. La page de la Référence du
992 programme est en fait directement engendrée par cette définition.
995 @node Détermination de la propriété d'un objet graphique (grob)
996 @subsection Détermination de la propriété d'un objet graphique (grob)
997 @translationof Determining the grob property
1000 Nous voulions changer la position du chiffre @b{2} dans le fragment
1003 @lilypond[quote,relative=2,verbatim]
1009 Dans la mesure où le @b{2} est placé, verticalement, à proximité de la
1010 note qui lui correspond, nous allons devoir trouver l'interface en
1011 charge de ce placement, qui se trouve être
1012 @code{side-position-interface}. Sur la page de cette interface, on peut
1016 @code{side-position-interface}
1018 Position a victim object (this one) next to other objects (the
1019 support). The property @code{direction} signifies where to put the
1020 victim object relative to the support (left or right, up or down?)
1026 @code{side-position-interface}
1028 Placer l'objet affecté à proximité d'autres objets. La propriété
1029 @code{direction} indique où placer l'objet (à droite ou à gauche,
1035 En-dessous de cette description se trouve décrite la variable
1036 @code{padding}@tie{}:
1041 (dimension, in staff space)
1043 Add this much extra space between objects that are next to each other.
1050 Ajouter tel espace supplémentaire entre des objets proches les uns des
1055 En augmentant la valeur de @code{padding}, on peut donc éloigner le
1056 doigté de la note. La commande suivante insère trois unités d'espace
1057 vide entre la note et le doigté@tie{}:
1060 \once \override Voice.Fingering #'padding = #3
1063 En ajoutant cette commande avant la création du doigté (de l'objet
1064 @code{Fingering}), donc avant @code{c2}, on obtient le résultat
1067 @lilypond[quote,relative=2,verbatim]
1068 \once \override Voice.Fingering #'padding = #3
1075 Dans le cas présent, le réglage intervient dans le contexte @code{Voice},
1076 ce qui pouvait également se déduire de la Référence du programme, où la
1077 page du graveur @rinternals{Fingering_engraver} indique@tie{}:
1080 Fingering_engraver is part of contexts: @dots{} @rinternals{Voice}
1086 Le graveur Fingering_engraver fait partie des contextes@tie{}: @dots{}
1091 @node Conventions de nommage
1092 @subsection Conventions de nommage
1093 @translationof Naming conventions
1098 @node Modification de propriétés
1099 @section Modification de propriétés
1100 @translationof Modifying properties
1102 @c TODO change the menu and subsection node names to use
1103 @c backslash once the new macro to handle the refs
1104 @c is available. Need to find and change all refs at
1105 @c the same time. -td
1108 * Vue d'ensemble de la modification des propriétés::
1109 * La commande de fixation (set)::
1110 * La commande de dérogation (override)::
1111 * La commande d'affinage (tweak)::
1113 * Modification de listes associatives::
1116 @node Vue d'ensemble de la modification des propriétés
1117 @subsection Vue d'ensemble de la modification des propriétés
1118 @translationof Overview of modifying properties
1123 @node La commande de fixation (set)
1124 @subsection La commande de fixation @code{@bs{}set}
1125 @translationof The set command
1129 @cindex modifier des propriétés
1131 Chaque contexte peut avoir plusieurs @emph{propriétés}, c'est-à-dire
1132 des variables qu'il inclut. Ces dernières peuvent être modifiées @qq{à
1133 la volée}, c'est-à-dire pendant que la compilation s'accomplit. C'est
1134 là le rôle de la commande @code{\set}.
1137 \set @var{contexte}.@var{propriété} = #@var{valeur}
1141 @lilypond[quote,verbatim,relative=2]
1143 \set Score.skipBars = ##t
1147 Cette commande permet de condenser les mesures vides de notes, en des
1148 silences multimesures. Il s'agit d'un objet Scheme, auquel on attribue
1149 la valeur booléenne @qq{vrai}, c'est-à-dire la lettre @code{#t} pour
1150 @qq{True} en anglais.
1152 Ce changement étant appliqué @qq{à la volée}, il n'affecte que le second
1155 Si l'argument @var{contexte} n'est pas spécifié, alors la propriété
1156 cherchera à s'appliquer dans le contexte le plus restreint où elle est
1157 employée@tie{}: le plus souvent @code{ChordNames}, @code{Voice}, ou
1158 @code{Lyrics}. Dans l'exemple suivant,
1160 @lilypond[quote,verbatim,relative=2]
1162 \set autoBeaming = ##f
1167 aucun argument @var{contexte} n'a été donné à la commande @code{\set}.
1168 De ce fait, les ligatures automatiques sont désactivées dans le contexte
1169 actuel, c'est-à-dire @rinternals{Voice}. Notez que le contexte le plus
1170 restreint n'est pas toujours le bon, et peut ne pas contenir la
1171 propriété qui vous intéresse@tie{}: ainsi, la propriété @code{skipBars},
1172 évoquée plus haut, ne relève pas du contexte @code{Voice}, et le code
1173 suivant ne fonctionnera pas.
1175 @lilypond[quote,verbatim,relative=2]
1181 Les contextes s'organisent de façon hiérarchique@tie{}: aussi, lorsqu'un
1182 contexte de niveau supérieur est spécifié (par exemple @code{Staff}), la
1183 propriété sera modifée dans tous les contextes inférieurs (tous les
1184 contextes @code{Voice}, par exemple) qu'il contient.
1188 La commande @code{\unset} permet d'annuler la définition d'une
1192 \unset @var{contexte}.@var{propriété}
1196 si et seulement si cette propriété à été définie dans ce @var{contexte}
1197 précis@tie{}; ainsi,
1200 \set Staff.autoBeaming = ##f
1204 même s'il s'applique à tous les contextes @code{Voice} contenus dans le
1205 contexte @code{Staff}, ne peut être annulé au niveau @code{Voice}. Le
1206 code suivant sera sans effet.
1209 \unset Voice.autoBeaming
1213 En d'autres termes, la commande @code{\unset} doit impérativement être
1214 accompagnée du même contexte que la commande @code{\set} d'origine.
1215 Pour annuler l'effet, dans notre exemple, de
1216 @w{@code{Staff.autoBeaming@tie{}=@tie{}##f}}, il faut donc entrer@tie{}:
1219 \unset Staff.autoBeaming
1222 Si l'on se trouve dans le contexte le plus restreint, il n'est pas
1223 obligatoire, là encore, de spécifier le @var{contexte}. Ainsi, les deux
1224 lignes suivantes sont équivalentes.
1227 \set Voice.autoBeaming = ##t
1228 \set autoBeaming = ##t
1233 Pour modifier une propriété de façon à ce qu'elle ne s'applique qu'une
1234 seule fois, il convient d'employer la commande @code{\once}@tie{}:
1236 @lilypond[quote,verbatim,relative=2]
1238 \once \set fontSize = #4.7
1243 Ici le changement de taille est annulé aussitôt après la note concernée.
1245 La référence du programme contient une description exhaustive de toutes
1246 les propriétés contexte par contexte@tie{}: voir
1248 @rinternals{Tunable context properties}.
1251 Translation @expansion{} Tunable context properties.
1255 @node La commande de dérogation (override)
1256 @subsection La commande de dérogation @code{@bs{}override}
1257 @translationof The override command
1260 La commande @code{\override} permet de modifier la mise en page
1261 en détail. Examinons son utilisation concrètementet dans les détails.
1262 La syntaxe de cette commande ressemble généralement à@tie{}:
1265 \override @var{contexte}.@var{objet} #'@var{propriété} = #@var{valeur}
1268 La propriété @var{propriété} de l'objet @var{objet}, appartenant au
1269 contexte @var{contexte}, se voit ainsi attribuer la valeur @var{valeur}.
1272 @c deprecated node. Delete. --fv
1273 @c @n ode Élaboration d'une retouche
1274 @c @s ubsection Élaboration d'une retouche
1275 @c @t ranslationof Constructing a tweak
1277 Les commandes permettant de modifier l'apparence de la partition
1278 ressemblent en général à
1281 \override Voice.Stem #'thickness = #3.0
1285 Pour élaborer un réglage de ce type, on a besoin de connaître
1289 @item le contexte@tie{}: ici @code{Voice} (la voix).
1290 @item l'objet à affecter@tie{}: ici @code{Stem} (les hampes).
1291 @item la propriété à modifier@tie{}: ici @code{thickness} (l'épaisseur
1293 @item la valeur désirée@tie{}: ici @code{3.0} (par défaut, elle est de
1297 Certaines @q{sous-propriétés} sont parfois contenues dans une propriété.
1298 La commande devient alors@tie{}:
1301 \override Stem #'(details beamed-lengths) = #'(4 4 3)
1304 @cindex documentation exhaustive
1305 @cindex trouver des objets graphiques
1306 @cindex objets graphiques, description
1310 Pour bien des propriétés, quel que soit le type de valeur requise,
1311 attribuer la valeur @q{faux} (@code{##f} en Scheme) reviendra à
1312 désactiver complètement l'action de la propriété qui se trouve ainsi
1313 purement ignorée par LilyPond. Cela peut s'avérer fort utile pour des
1314 propriétés causant des désagréments.
1319 @node La commande d'affinage (tweak)
1320 @subsection La commande d'affinage @code{@bs{}tweak}
1321 @translationof The tweak command
1326 Dans certains cas, on peut passer par un raccourci pour arranger les
1327 objets graphiques. Lorsqu'un objet est directement engendré par un
1328 élément distinct du fichier source, on peut utiliser la commande
1331 Dans l'accord suivant, les notes sont modifiées une par une@tie{}:
1333 @lilypond[relative=2,verbatim,ragged-right]
1336 \tweak #'color #red d
1338 \tweak #'duration-log #1 a
1339 >4-\tweak #'padding #10 -.
1342 Comme on peut le voir, les propriétés sont ici modifiées directement
1343 en même temps que les objets sont saisis. Il n'est plus besoin de
1344 spécifier ni le nom de l'objet (@emph{grob}), ni le contexte dans lequel
1345 cela doit s'appliquer. Ce procédé ne marche que pour des objets
1346 directement liés aux évènements (@rinternals{Event}) du fichier source.
1350 @item Les têtes de notes au sein d'un accord, qui sont directement
1351 engendrées par les hauteurs indiquées
1353 @item Les signes d'articulation, engendrés par les indications de
1357 En revanche, les hampes ou les altérations sont engendrées par les têtes
1358 de notes, et non par des évènements dans le fichier source. De même
1359 pour les clés, qui ne sont pas directement engendrées par le fichier
1360 source, mais plutôt par le changement d'une propriété interne.
1362 En fait, très peu d'objets passent @emph{directement} du code source à
1363 la partition. Une note toute simple, par exemple @code{c4}, fait l'objet
1364 d'un traitement et n'est donc pas directement rendue@tie{}; c'est
1365 pourquoi le code suivant ne sera d'aucun effet@tie{}:
1368 \tweak #'color #red c4
1372 Voir pour plus de détails
1373 @rextendnamed{Displaying music expressions,Affichage d'expressions musicales}.
1376 @node set ou override
1377 @subsection @code{\set} ou @code{\override}
1378 @translationof set versus override
1381 Si les propriétés peuvent être modifiées de deux façons, par les
1382 commandes @code{\set} et @code{\override}, c'est qu'il y a deux types de
1385 Les contextes peuvent avoir des propriétés, dont les noms commencent par
1386 une minuscule puis comprennent une ou plusieurs majuscules (de style
1387 @code{totoTutu}). Elles ont surtout trait à la notation des éléments
1388 musicaux@tie{}: par exemple, @code{localKeySignature} permet de choisir
1389 s'il faut ou non imprimer une altération, ou @code{measurePosition}
1390 permet de choisir quand il faut imprimer une barre de mesure. Ces
1391 propriétés de contextes sont appelées à changer au long de
1392 l'interprétation de la partition@tie{}: @code{measurePosition} en est un
1393 exemple évident. Ces propriétés doivent être modifiées avec la commande
1396 Il existe un type particulier de propriété@tie{}@tie{}: les descriptions
1397 d'éléments. Ces propriétés, dont les noms commencent par une majuscule,
1398 puis comprennent une ou plusieurs majuscules (de style @code{TotoTata}),
1399 contiennent les réglages @qq{par défaut} pour les objets graphiques.
1400 Ces réglages sont sous forme de liste Scheme@tie{}; on peut les
1401 consulter dans le fichier @file{scm/define-grobs.scm}.
1403 Les descriptions d'éléments doivent être modifiées avec la commande
1406 @code{\override} est en fait un raccourci@tie{}:
1409 \override @var{contexte}.@var{objet} #'@var{propriété} = #@var{valeur}
1413 est plus ou moins l'équivalent de
1415 @c leave this long line -gp
1417 \set @var{contexte}.@var{objet} #'@var{propriété} = #(cons (cons '@var{propriété} @var{valeur}) <valeur précédente de @var{contexte})
1420 La valeur de @code{context} (la liste Scheme, ou @emph{alist}) sert à
1421 initialiser les propriétés des objets un par un. Les objets eux-même
1422 ont leurs propriétés, dont les noms, dans la tradition du langage
1423 Scheme, comprennent un trait d'union (@code{toto-titi}). Ces propriétés
1424 internes changent constamment au cours de la mise en page@tie{}: en
1425 fait, la gravure d'une page n'est autre que le calcul de toutes ces
1426 propriétés, au moyen de fonctions de rappel.
1428 La propriété @code{fontSize} est une exception@tie{}: c'est un
1429 raccourci, qui équivaudrait à saisir @w{@code{\override @dots{}
1430 #'font-size}} pour tous les objets textuels. Dans la mesure où il
1431 s'agit d'une manipulation très courante, une propriété spéciale a été
1432 créée. Elle doit être modifiée avec la commande @code{\set}.
1435 @node Modification de listes associatives
1436 @subsection Modification de listes associatives
1437 @translationof Modifying alists
1442 @node Propriétés et contextes utiles
1443 @section Propriétés et contextes utiles
1444 @translationof Useful concepts and properties
1449 * Direction et positionnement::
1450 * Ordre des contextes de mise en forme::
1451 * Distances et unités de mesure::
1452 * Propriétés des symboles de la portée::
1453 * Extenseurs et prolongateurs::
1454 * Visibilité des objets::
1456 * Rotation des objets::
1459 @node Modes de saisie
1460 @subsection Modes de saisie
1461 @translationof Input modes
1466 @node Direction et positionnement
1467 @subsection Direction et positionnement
1468 @translationof Direction and placement
1473 @node Ordre des contextes de mise en forme
1474 @subsection Ordre des contextes de mise en forme
1475 @translationof Context layout order
1480 @node Distances et unités de mesure
1481 @subsection Distances et unités de mesure
1482 @translationof Distances and measurements
1487 @node Propriétés des symboles de la portée
1488 @subsection Propriétés des symboles de la portée
1489 @translationof Staff symbol properties
1494 @node Extenseurs et prolongateurs
1495 @subsection Extenseurs et prolongateurs
1496 @translationof Spanners
1501 @unnumberedsubsubsec Utilisation de @code{spanner-interface}
1502 @unnumberedsubsubsec Utilisation de @code{line-spanner-interface}
1503 @node Visibilité des objets
1504 @subsection Visibilité des objets
1505 @translationof Visibility of objects
1511 * Suppression des stencils::
1512 * Transparence des objets::
1513 * Blanchiment des objets::
1514 * Utilisation de break-visibility::
1515 * Considérations spécifiques::
1518 @node Suppression des stencils
1519 @unnumberedsubsubsec Suppression des stencils
1520 @translationof Removing the stencil
1525 @node Transparence des objets
1526 @unnumberedsubsubsec Transparence des objets
1527 @translationof Making objects transparent
1532 @node Blanchiment des objets
1533 @unnumberedsubsubsec Blanchiment des objets
1534 @translationof Painting objects white
1539 @node Utilisation de break-visibility
1540 @unnumberedsubsubsec Utilisation de break-visibility
1541 @translationof Using break-visibility
1546 @node Considérations spécifiques
1547 @unnumberedsubsubsec Considérations spécifiques
1548 @translationof Special considerations
1553 @node Styles de ligne
1554 @subsection Styles de ligne
1555 @translationof Line styles
1560 @node Rotation des objets
1561 @subsection Rotation des objets
1562 @translationof Rotating objects
1568 * Rotation des objets de mise en forme::
1569 * Rotation des étiquettes::
1572 @node Rotation des objets de mise en forme
1573 @unnumberedsubsubsec Rotation des objets de mise en forme
1574 @translationof Rotating layout objects
1579 @node Rotation des étiquettes
1580 @unnumberedsubsubsec Rotation des étiquettes
1581 @translationof Rotating markup
1586 @node Retouches avancées
1587 @section Retouches avancées
1588 @translationof Advanced tweaks
1594 * Alignement des objets::
1595 * Regroupement vertical d'objets graphiques::
1596 * Modification des stencils::
1597 * Modification de l'allure des éléments::
1600 @node Alignement des objets
1601 @subsection Alignement des objets
1602 @translationof Aligning objects
1608 * Détermination directe de @code{X-offset} et @code{Y-offset}::
1609 * Utilisation de @code{side-position-interface}::
1610 * Utilisation de @code{self-alignment-interface}::
1611 * Utilisation de @code{break-aligned-interface}::
1614 @node Détermination directe de @code{X-offset} et @code{Y-offset}
1615 @unnumberedsubsubsec Détermination directe de @code{X-offset} et @code{Y-offset}
1616 @translationof Setting @code{X-offset} and @code{Y-offset} directly
1621 @node Utilisation de @code{side-position-interface}
1622 @unnumberedsubsubsec Utilisation de @code{side-position-interface}
1623 @translationof Using the @code{side-position-interface}
1628 @node Utilisation de @code{self-alignment-interface}
1629 @unnumberedsubsubsec Utilisation de @code{self-alignment-interface}
1630 @translationof Using the @code{self-alignment-interface}
1635 @c @u nnumberedsubsubsec Utilisation des procédures @code{aligned-on-parent}
1637 @unnumberedsubsubsec Utilisation des procédures @code{centered-on-parent}
1638 @node Utilisation de @code{break-aligned-interface}
1642 @unnumberedsubsubsec Utilisation de @code{break-aligned-interface}
1643 @translationof Using the @code{break-alignable-interface}
1648 @node Regroupement vertical d'objets graphiques
1649 @subsection Regroupement vertical d'objets graphiques
1650 @translationof Vertical grouping of grobs
1652 Les objets @code{VerticalAlignment} et @code{VerticalAxisGroup}
1653 travaillent de concert. Comme leurs noms anglais l'indiquent,
1654 @code{VerticalAxisGroup} regroupe différents objets tels que les portées
1655 (@code{Staff}), les paroles (@code{Lyrics}) et ainsi de suite@tie{};
1656 puis @code{VerticalAlignment} synchronise verticalement ces différents
1657 groupes. En général, il n'y a qu'un seul @code{VerticalAlignment} pour
1658 l'ensemble de la partition, mais chaque contexte @code{Staff},
1659 @code{Lyrics}, etc. possède son propre @code{VerticalAxisGroup}.
1662 @node Modification des stencils
1663 @subsection Modification des stencils
1664 @translationof Modifying stencils
1669 @node Modification de l'allure des éléments
1670 @subsection Modification de l'allure des éléments
1671 @translationof Modifying shapes
1674 * Modification des liaisons::
1677 @node Modification des liaisons
1678 @unnumberedsubsubsec Modification des liaisons
1679 @translationof Modifying ties and slurs
1684 @node Utilisation de fonctions musicales
1685 @section Utilisation de fonctions musicales
1686 @translationof Using music functions
1689 * Syntaxe d'une fonction de substitution::
1690 * Exemples de fonction de substitution::
1693 @node Syntaxe d'une fonction de substitution
1694 @subsection Syntaxe d'une fonction de substitution
1695 @translationof Substitution function syntax
1700 @node Exemples de fonction de substitution
1701 @subsection Exemples de fonction de substitution
1702 @translationof Substitution function examples