1 @c -*- coding: utf-8; mode: texinfo; documentlanguage: fr -*-
4 Translation of GIT committish: 76de7e168dbc9ffc7671d99663c5ce50dae42abb
6 When revising a translation, copy the HEAD committish of the
7 version that you are working on. See TRANSLATION for details.
12 @c Translators: Valentin Villenave, Jean-Charles Malahieude
13 @c Translation checkers: Gilles Thibault
16 @node Modification des réglages prédéfinis
17 @chapter Modification des réglages prédéfinis
18 @translationof Changing defaults
20 LilyPond est conçu pour engendrer, par défaut, des partitions de la
21 plus haute qualité. Cependant, on peut parfois avoir à modifier cette
22 mise en page par défaut. Celle-ci est réglée par tout un ensemble de
23 @qq{leviers et manettes}, dont ce chapitre ne cherche pas à faire
24 l'inventaire exhaustif. Le propos est plutôt ici de mettre en évidence
25 les différents groupes auxquels s'apparentent ces contrôles, et d'expliquer
26 comment trouver le bon levier pour obtenir tel ou tel effet en particulier.
28 @cindex Référence des propriétés internes
30 Les moyens de contrôle des différents réglages sont décrits dans un document
33 référence des propriétés internes
36 @ref{Top,Référence des propriétés internes,,lilypond-internals}.
38 Ce guide répertorie toutes les variables, fonctions et autres options que
39 LilyPond met à votre disposition. Il est consultable
40 @c leave the @uref as one long line.
41 @uref{http://@/lilypond@/.org/@/doc/@/stable/@/Documentation/@/user/@/lilypond@/-internals/,en@tie{}ligne},
42 au format HTML, mais est également inclus dans la documentation
43 fournie avec le logiciel.
45 Il est quatre domaines dans lesquels on peut modifier les réglages par
50 La notation automatique, ce qui revient à modifier la manière dont les
51 éléments de notation sont automatiquement créés -- par exemple, les
55 L'apparence, qui se rapporte aux objets pris individuellement -- ainsi
56 de la direction des hampes, du placement des indications textuelles.
59 Les contextes, qui recouvrent la manière dont les évènements musicaux
60 sont représentés sous forme de notation -- par exemple, le fait
61 d'attribuer un chiffre de mesure distinct à chaque portée.
64 La mise en page, autrement dit les marges, l'espacement, la taille du
65 papier ; tous ces facteurs font l'objet des chapitres
66 @ref{Généralités en matière d'entrée et sortie} et @ref{Gestion de l'espace}.
69 En sous-main, LilyPond se sert du langage Scheme (un dérivé du LISP) comme
70 infrastructure. Modifier les choix de mise en page revient à pénétrer dans
71 les entrailles du programme, et de ce fait requiert l'emploi du Scheme.
72 Les fragments de Scheme, dans un fichier @code{.ly}, sont introduits par le
73 caractère @q{hash}, (@code{#}, improprement surnommé @q{dièse}).@footnote{Le
74 @rlearning{Tutoriel Scheme} fournit quelques notions de base pour saisir
75 des nombres, des listes, des chaînes de caractères ou des symboles, en
80 * Contextes d'interprétation::
81 * En quoi consiste la référence du programme::
82 * Modification de propriétés::
83 * Propriétés et contextes utiles::
84 * Retouches avancées::
87 @node Contextes d'interprétation
88 @section Contextes d'interprétation
89 @translationof Interpretation contexts
91 Cette section traite des contextes.
94 * Tout savoir sur les contextes::
95 * Création d'un contexte::
96 * Conservation d'un contexte::
97 * Modification des greffons de contexte::
98 * Modification des réglages par défaut d'un contexte::
99 * Définition de nouveaux contextes::
100 * Alignement des contextes::
105 Manuel d'initiation :
106 @rlearning{Contextes et graveurs}.
108 Fichiers d'initialisation :
109 @file{ly/@/engraver@/-init@/.ly},
110 @file{ly/@/performer@/-init@/.ly}.
113 @rlsr{Contexts and engravers}.
115 Référence des propriétés internes :
116 @rinternals{Contexts},
117 @rinternals{Engravers and Performers}.
120 @node Tout savoir sur les contextes
121 @subsection Tout savoir sur les contextes
122 @translationof Contexts explained
125 @c TODO Rethink and rewrite
127 >> > > - list of contexts: my *danger unmaintainable*
128 >> > > alarm just went off. I'm
130 I knew it would... And leaving out some of them is perfectly fine
132 I do think that a list like this, with the main contexts and a
134 description of what they do (perhaps also with a note about what
136 behavior is associated with each of them, but this may be
138 should be there, and then we could simply list the remaining ones
140 further explanation and with links to the IR.
143 @c TODO Improve layout, order and consistency of wording -td
145 @c TODO Add introduction which explains contexts in generality -td
147 @c TODO Describe propagation of property values -td
151 * Score -- le père de tous les contextes::
152 * Contextes de haut niveau -- les systèmes::
153 * Contextes de niveau intermédiaire -- les portées::
154 * Contextes de bas niveau -- les voix::
157 @node Score -- le père de tous les contextes
158 @unnumberedsubsubsec Score -- le père de tous les contextes
159 @translationof Score - the master of all contexts
164 @node Contextes de haut niveau -- les systèmes
165 @unnumberedsubsubsec Contextes de haut niveau -- les systèmes
166 @translationof Top-level contexts - staff containers
171 @node Contextes de niveau intermédiaire -- les portées
172 @unnumberedsubsubsec Contextes de niveau intermédiaire -- les portées
173 @translationof Intermediate-level contexts - staves
178 @node Contextes de bas niveau -- les voix
179 @unnumberedsubsubsec Contextes de bas niveau -- les voix
180 @translationof Bottom-level contexts - voices
185 @node Création d'un contexte
186 @subsection Création d'un contexte
187 @translationof Creating contexts
192 @node Conservation d'un contexte
193 @subsection Conservation d'un contexte
194 @translationof Keeping contexts alive
199 @node Modification des greffons de contexte
200 @subsection Modification des greffons de contexte
201 @translationof Modifying context plug-ins
203 Les contextes, tels que @code{Score} ou @code{Staff}, ne contiennent
204 pas que des propriétés ; ils mettent également en œuvre certains
205 sous-programmes (@q{plug-ins}, pour employer le terme consacré) nommés
206 @q{graveurs} (@q{engravers}, pour reprendre le terme anglais).
207 Ces sous-programmes sont chargés de créer les différents éléments de
209 On trouve ainsi dans le contexte @code{Voice}, un graveur
210 @code{Note_head_engraver},
211 chargé des têtes de notes, et dans le contexte @code{Staff}, un graveur
212 @code{Key_signature_engraver}, chargé de l'armure.
214 Vous trouverez une description exhaustive de chaque graveur dans
216 @rinternals{Engravers and Performers}.
219 Program reference @expansion{} Translation @expansion{} Engravers.
221 Chaque contexte mentionné dans
223 @rinternals{Contexts}
226 Program reference @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é.
235 Lorsque un contexte est créé, par la commande @code{\new} ou @code{\context}, on peut
236 y adjoindre un bloc @code{\with} (en anglais @q{avec}), dans lequel il est possible
237 d'ajouter (commande @code{\consists}) ou d'enlever (commande @code{\remove})
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}, le chiffre de mesure (graveur @code{Time_signature_engraver})
259 et la clé (graveur @code{Clef_engraver}).
261 @lilypond[quote,relative=1,verbatim,fragment]
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 verticalement
284 dans toute la partition. Les graveurs qui en sont responsables se nomment
285 @code{Timing_translator} et @code{Default_bar_line_engraver}.
286 En les enlevant du contexte @code{Score} pour les attribuer au contexte
287 @code{Staff}, chaque portée peut désormais avoir sa propre métrique.
289 @cindex polymétrique, partition
290 @cindex Chiffres de mesure multiples
292 @lilypond[quote,relative=1,ragged-right,verbatim,fragment]
294 \remove "Timing_translator"
295 \remove "Default_bar_line_engraver"
298 \consists "Timing_translator"
299 \consists "Default_bar_line_engraver"
305 \consists "Timing_translator"
306 \consists "Default_bar_line_engraver"
315 @c deprecated node: delete. --fv
317 @n ode Retouches de mise en forme au sein des contextes
318 @s ubsection Retouches de mise en forme au sein des contextes
319 @t ranslationof Layout tunings within contexts
321 Chaque contexte est chargé de créer plusieurs types d'objets graphiques.
322 Il contient également les réglages nécessaires pour chacun de ces objets.
323 Si l'on modifie ces réglages, les objets n'auront plus la même apparence.
325 La syntaxe employée pour ce faire est
328 \override @var{contexte}.@var{objet} #'@var{propriété} = #@var{valeur}
331 Ici @var{objet} est un objet graphique, tel que @code{Stem} (les hampes)
332 ou @code{NoteHead} (les têtes de note) ; @var{propriété} est une variable
333 (désignée par un symbole, ce qui explique l'apostrophe) employée par le système
334 de mise en page. La sous-section @ref{Élaboration d'une retouche} vous
335 aidera à savoir quoi mettre à la place de @var{objet}, @var{propriété} et
336 @var{valeur} ; notre propos n'est ici que d'examiner l'emploi de cette commande.
338 La commande suivante :
341 \override Staff.Stem #'thickness = #4.0
345 rend les hampes plus épaisses (la valeur par défaut est 1.3, ce qui signifie qu'elles
346 sont 1,3 fois plus épaisses que les lignes de la portée). Dans la mesure où nous avons
347 indiqué @code{Staff} comme contexte, ce réglage ne s'appliquera qu'à la portée courante ;
348 les autres portées demeureront intactes.
351 @lilypond[quote,verbatim,relative=2,fragment]
353 \override Staff.Stem #'thickness = #4.0
359 La commande @code{\override} modifie donc la définition de l'objet @code{Stem}
360 dans le contexte @code{Staff} ; toutes les hampes qui suivent seront affectées.
362 Tout comme avec la commande @code{\set}, l'argument @var{contexte} peut être omis, auquel
363 cas le contexte par défaut (ici, @code{Voice}) sera employé. La commande @code{\once}
364 permet de n'appliquer la modification qu'une seule fois.
366 @lilypond[quote,fragment,verbatim,relative=2]
368 \once \override Stem #'thickness = #4.0
373 La commande @code{\override} doit être entrée @emph{avant} l'objet concerné.
374 Ainsi, lorsque l'on veut altérer un objet qui se prolonge, tel qu'une liaison,
375 une ligature ou tout autre objet dit @emph{Spanner}, la commande @code{\override}
376 doit être saisie avant que l'objet soit créé.
378 @lilypond[quote,fragment,verbatim,relative=2]
379 \override Slur #'thickness = #3.0
381 \override Beam #'thickness = #0.6
386 Dans cet exemple, la liaison (@emph{Slur}) est épaissie, mais non la ligature
387 (@emph{Beam}). En effet, le code qui lui est relatif n'a pas été inséré avant le début de
388 la ligature, et demeure donc sans effet.
390 De même que la commande @code{\unset}, la commande @code{\revert} défait
391 ce qui a été fait par une commande @code{\override}. Tout comme avec @code{\unset},
392 elle ne peut annuler que les réglages effectués dans le même contexte.
393 Ainsi dans l'exemple suivant, la commande @code{\revert} est sans effet.
396 \override Voice.Stem #'thickness = #4.0
397 \revert Staff.Stem #'thickness
400 Il existe, à l'intérieur même de certaines propriétés, des options que l'on
401 nomme @q{sous-propriétés}. La syntaxe est alors
403 @c leave this as a long long
405 \override @var{contexte}.@var{objet} #'@var{propriété} #'@var{sous-propriété} = #@var{valeur}
412 \override Stem #'(details beamed-lengths) = #'(4 4 3)
417 Référence du programme : @rinternals{OverrideProperty}, @rinternals{RevertProperty},
418 @rinternals{PropertySet}, @rinternals{Backend}, et
419 @rinternals{All layout objects}.
424 La sous-couche Scheme ne vérifie pas la saisie des propriétés de façon
425 très stricte. Des références cycliques dans des valeurs Scheme peuvent
426 de ce fait interrompre, ou faire planter le programme -- ou bien les deux.
429 @node Modification des réglages par défaut d'un contexte
430 @subsection Modification des réglages par défaut d'un contexte
431 @translationof Changing context default settings
433 Les réglages montrés dans les sous-sections @ref{La commande de fixation (set)}, @ref{Modification des greffons de contexte} et
434 @ref{Retouches de mise en forme au sein des contextes} peuvent également être saisis indépendamment
435 de la musique dans le bloc @code{\layout}, au moyen de la commande @code{\context} :
444 \override Stem #'thickness = #4.0
445 \remove "Time_signature_engraver"
450 Le raccourci @code{\Staff} invoque les définitions inhérentes au contexte
451 @code{Staff}, de façon à ce qu'elles puissent être modifiées.
453 Les lignes suivantes affecteront toutes les portées (tous les contextes @code{Staff})
457 \override Stem #'thickness = #4.0
458 \remove "Time_signature_engraver"
462 Les autres contextes peuvent être modifiés de même manière.
464 La commande @code{\set}, dans le bloc @code{\layout}, est facultative ; aussi
465 les lignes suivantes produiront-elles le même effet.
477 Il est impossible de stocker des modifications de contexte dans un identificateur.
479 Le raccourci @code{\RemoveEmptyStaffContext} détruit tous les réglages
480 du contexte @code{\Staff}. Pour modifier des propriétés de portées gouvernées
481 par @code{\RemoveEmptyStaffContext}, il faut le faire impérativement @emph{après}
482 avoir invoqué @code{\RemoveEmptyStaffContext} :
487 \RemoveEmptyStaffContext
489 \override Stem #'thickness = #4.0
495 @node Définition de nouveaux contextes
496 @subsection Définition de nouveaux contextes
497 @translationof Defining new contexts
499 Les contextes tels que @code{Staff} ou @code{Voice} sont faits
500 de briques de constructions empilées. En combinant divers graveurs,
501 il est possible de créer de nouveaux types de contextes.
503 Dans l'exemple suivant, on construit, de zéro, un nouveau contexte très
504 semblable à @code{Voice}, mais qui n'imprime que des têtes de notes en forme
505 de barres obliques au centre de la portée. Un tel contexte, par exemple, peut
506 servir à indiquer un passage improvisé dans un morceau de jazz.
509 @lilypond[quote,ragged-right]
512 \type "Engraver_group"
513 \consists "Note_heads_engraver"
514 \consists "Rhythmic_column_engraver"
515 \consists "Text_engraver"
516 \consists Pitch_squash_engraver
517 squashedPosition = #0
518 \override NoteHead #'style = #'slash
519 \override Stem #'transparent = ##t
523 \accepts "ImproVoice"
527 a4 d8 bes8 \new ImproVoice { c4^"ad lib" c
528 c4 c^"dévêtez-vous" c_"tout en jouant :)" c }
534 On a rassemblé les réglages dans un bloc @code{\context}, lui-même dans
535 le bloc @code{\layout} :
545 En lieu et place des points (@dots{}), voici les éléments à saisir :
548 @item Tout d'abord, il convient de donner un nom @code{\name} à notre nouveau contexte :
554 @item Comme il est très semblable à @code{Voice}, nous souhaitons que toutes les
555 commandes associées au @code{Voice} déjà existant, restent valables. D'où nécessité
556 de la commande @code{\alias}, qui va l'associer au contexte @code{Voice} :
562 @item Ce contexte doit pouvoir imprimer des notes, et des indications textuelles ;
563 on ajoute donc les graveurs appropriés.
566 \consists Note_heads_engraver
567 \consists Text_engraver
570 @item Cependant, on veut que les notes s'affichent toutes au centre de la portée :
573 \consists Pitch_squash_engraver
574 squashedPosition = #0
578 Le graveur @rinternals{Pitch_squash_engraver} intercepte les notes créées par
579 @rinternals{Note_heads_engraver}, et les @q{écrase} pour qu'elles aient toutes la
580 même position verticale, définie par @code{squashedPosition} : ici il s'agit de la
581 valeur@tie{}@code{0}, c'est-à-dire la ligne du milieu.
583 @item On veut que les notes aient la forme d'une barre oblique, sans aucune hampe :
586 \override NoteHead #'style = #'slash
587 \override Stem #'transparent = ##t
590 @item Afin que tous ces graveurs puissent travailler de concert, on leur adjoint un
591 sous-programme spécial, introduit par la commande @code{\type} : il s'agit de
592 @code{Engraver_group},
595 \type "Engraver_group"
600 Récapitulons -- on se retrouve avec le bloc suivant :
605 \type "Engraver_group"
606 \consists "Note_heads_engraver"
607 \consists "Text_engraver"
608 \consists Pitch_squash_engraver
609 squashedPosition = #0
610 \override NoteHead #'style = #'slash
611 \override Stem #'transparent = ##t
617 Ce n'est pas tout. En effet, on veut intégrer le nouveau contexte
618 @code{ImproVoice} dans la hiérarchie des contextes. Tout comme le
619 contexte @code{Voice}, sa place est au sein du contexte @code{Staff}.
620 Nous allons donc modifier le contexte @code{Staff},
621 au moyen de la commande @code{\accepts} :
631 Le contraire de @code{\accepts} est @code{\denies},
632 qui est parfois utile lorsque l'on recycle des définitions de
633 contextes déjà existantes.
635 Enfin, tout cela doit prendre place dans le bloc @code{\layout},
646 \accepts "ImproVoice"
651 On peut alors saisir la musique, comme dans l'exemple plus haut :
659 c c_"tout en jouant :)"
666 @node Alignement des contextes
667 @subsection Alignement des contextes
668 @translationof Aligning contexts
671 Il est possible d'aligner verticalement chaque nouveau contexte,
672 en-dessous ou au-dessus, par exemple dans le cas de musique vocale
673 (@rlearning{Ensemble vocal}) ou d'@qq{ossias}.
676 @findex alignAboveContext
677 @findex alignBelowContext
679 @lilypond[quote,ragged-right]
682 \relative c' \new Staff = "main" {
685 \new Staff \with { alignAboveContext = #"main" } \ossia
693 @node En quoi consiste la référence des propriétés internes
694 @section En quoi consiste la référence des propriétés internes
695 @translationof Explaining the Internals Reference
699 * Navigation dans la référence du programme::
700 * Interfaces de rendu::
701 * Détermination de la propriété d'un objet graphique (grob)::
702 * Conventions de nommage::
705 @node Navigation dans la référence du programme
706 @subsection Navigation dans la référence du programme
707 @translationof Navigating the program reference
709 Comment, par exemple, déplacer le doigté dans le fragment suivant ?
711 @lilypond[quote,fragment,relative=2,verbatim]
717 Sur la page de la documentation relative aux doigtés, c'est-à-dire
718 @ref{Doigtés}, se trouve l'indication suivante :
722 Référence du programme : @rinternals{Fingering}.
725 @c outdated info; probably will delete.
727 This fragment points to two parts of the program reference: a page
728 on @code{FingerEvent} and one on @code{Fingering}.
730 The page on @code{FingerEvent} describes the properties of the music
731 expression for the input @code{-2}. The page contains many links
732 forward. For example, it says
735 Accepted by: @rinternals{Fingering_engraver},
739 That link brings us to the documentation for the Engraver, the
743 This engraver creates the following layout objects: @rinternals{Fingering}.
746 In other words, once the @code{FingerEvent}s are interpreted, the
747 @code{Fingering_engraver} plug-in will process them.
751 @c I can't figure out what this is supposed to mean. -gp
753 The @code{Fingering_engraver} is also listed to create
754 @rinternals{Fingering} objects,
756 @c old info? it doesn't make any sense to me with our current docs.
758 second bit of information listed under @b{See also} in the Notation
763 Ladite référence est disponible au format HTML, ce qui rend la navigation bien
764 plus aisée. Il est possible soit de la lire en ligne, soit de la télécharger
765 dans ce format. La démarche présentée ici sera plus difficle à comprendre
766 dans un document au format PDF.
769 Suivons le lien @rinternals{Fingering}. En haut de la nouvelle page,
773 Fingering objects are created by: @rinternals{Fingering_engraver} and
774 @rinternals{New_fingering_engraver}.
777 En d'autres termes, @emph{Les indications de doigtés}
778 (@code{Fingering} en anglais) @emph{sont créées par les graveurs
779 @rinternals{Fingering_engraver} et @rinternals{New_fingering_engraver}.}
781 En suivant derechef les liens propres à la référence du programme, on suit en fait
782 le cheminement qui aboutit à la création de la partition :
786 @item @rinternals{Fingering}:
787 @rinternals{Fingering} objects are created by:
788 @rinternals{Fingering_engraver}
790 @item @rinternals{Fingering_engraver}:
791 Music types accepted: @rinternals{fingering-event}
793 @item @rinternals{fingering-event}:
794 Music event type @code{fingering-event} is in Music expressions named
795 @rinternals{FingeringEvent}
798 Ce cheminement se produit, bien sûr, en sens inverse : nous sommes ici partis
799 du résultat, et avons abouti aux évènements (en anglais @q{Events}) engendrés
800 par le fichier d'entrée. L'inverse est également possible : on peut partir d'un
801 évènement, et suivre le cheminement de LilyPond qui aboutit à la création d'un
802 ou plusieurs objets graphiques.
804 La référence du programme peut également se parcourir comme un document normal.
805 On y trouve des chapitres tels que
807 @rinternals{Music definitions},
810 @code{Music definitions}
812 @rinternals{Translation}, ou encore @rinternals{Backend}. Chaque chapitre
813 recense toutes les définitions employées, et les propriétés sujettes à
816 @c -- what about adding a link to the glossary here ? -vv
818 La Référence du programme n'est pas traduite en français -- notamment du fait
819 qu'elle est en évolution constante, tout comme LilyPond. En revanche, les termes
820 musicaux font l'objet d'un @commentfairelelien{glossaire} fort utile pour les utilisateurs
825 @node Interfaces de rendu
826 @subsection Interfaces de rendu
827 @translationof Layout interfaces
829 @cindex interfaces de rendu
830 @cindex rendu, interfaces de
831 @cindex objets graphiques
833 Tous les éléments de notation sont considérés comme des objets graphiques
834 (en anglais @q{Graphical Object}, d'où le diminutif @emph{Grob}).
835 Chaque objet est doté d'un certain nombre de propriétés (l'épaisseur du trait,
836 l'orientation, etc.), et lié à d'autres objets.
837 Le fonctionnement de ces objets est décrit en détail dans @rinternals{grob-interface}.
839 Prenons l'exemple des doigtés (en anglais @q{Fingering}).
840 La page @code{Fingering} de la Référence du programme établit une liste de définitions
841 propres à ce type d'objets :
844 @code{padding} (dimension, in staff space):
850 Ce qui signifie que les doigtés doivent être maintenus à une certaine distance (@emph{padding})
851 des notes : 0,5 unités @emph{staff-space} (espace de portée).
854 Chaque objet peut avoir plusieurs attributs, en tant qu'élément typographique
855 ou musical. Ainsi, un doigté (objet @q{Fingering}) possède les attributs suivants :
860 Sa taille ne dépend pas de l'espacement horizontal, contrairement aux liaisons ou ligatures.
863 C'est du texte -- un texte vraiment court, certes.
866 Ce texte est imprimé au moyen d'une fonte, contrairement aux liaisons ou ligatures.
869 Sur l'axe horizontal, le centre de ce symbole doit être aligné avec le centre de la note.
872 Sur l'axe vertical, le symbole doit être proche de la note et de la portée.
875 Sur l'axe vertical encore, il doit également s'ordonner avec les éventuels
876 autres symboles, ponctuations, ou éléments textuels.
879 Faire appliquer ces différents attributs est le rôle des @emph{interfaces},
880 que l'on trouve en bas de la page @rinternals{Fingering}.
883 This object supports the following interfaces:
884 @rinternals{item-interface},
885 @rinternals{self-alignment-interface},
886 @rinternals{side-position-interface}, @rinternals{text-interface},
887 @rinternals{text-script-interface}, @rinternals{font-interface},
888 @rinternals{finger-interface}, and @rinternals{grob-interface}.
895 Cet objet admet les interfaces suivantes :
898 Suit la liste des interfaces en question, présentées comme autant de liens,
899 qui conduisent sur les pages dédiées à chacune d'entre elles.
900 Chaque interface est dotée d'un certain nombre de propriétés, dont certaines
901 peuvent être modifiées, et d'autres non (les @q{Internal properties}, ou
902 propriétés internes).
904 Pour aller encore plus loin, plutôt que de simplement parler de l'objet
905 @code{Fingering}, ce qui ne nous avance pas à grand chose, on peut aller explorer
906 son âme même, dans les fichiers source de LilyPond (voir
907 @rlearning{Autres sources de documentation}), en l'occurence le fichier
908 @file{scm/@/define@/-grobs@/.scm} :
913 (avoid-slur . around)
915 (staff-padding . 0.5)
916 (self-alignment-X . 0)
917 (self-alignment-Y . 0)
918 (script-priority . 100)
919 (stencil . ,ly:text-interface::print)
920 (direction . ,ly:script-interface::calc-direction)
921 (font-encoding . fetaNumber)
922 (font-size . -5) ; don't overlap when next to heads.
923 (meta . ((class . Item)
924 (interfaces . (finger-interface
926 text-script-interface
928 side-position-interface
929 self-alignment-interface
934 @dots{}où l'on découvre que l'objet @code{Fingering} n'est rien de plus qu'un
935 amas de variables et de réglages. La page de la Référence du programme est
936 en fait directement engendrée par cette définition.
939 @node Détermination de la propriété d'un objet graphique (grob)
940 @subsection Détermination de la propriété d'un objet graphique (grob)
941 @translationof Determining the grob property
944 Nous voulions changer la position du chiffre @b{2} dans le fragment suivant :
946 @lilypond[quote,fragment,relative=2,verbatim]
952 Dans la mesure où le @b{2} est placé, verticalement, à proximité de la note qui lui
953 correspond, nous allons devoir trouver l'interface en charge de ce placement, qui se
954 trouve être @code{side-position-interface}. Sur la page de cette interface, on
958 @code{side-position-interface}
960 Position a victim object (this one) next to other objects (the
961 support). The property @code{direction} signifies where to put the
962 victim object relative to the support (left or right, up or down?)
968 @code{side-position-interface}
970 Placer l'objet affecté à proximité d'autres objets. La propriété
971 @code{direction} indique où placer l'objet (à droite ou à gauche,
977 En-dessous de cette description se trouve décrite la variable @code{padding} :
982 (dimension, in staff space)
984 Add this much extra space between objects that are next to each other.
991 Ajouter tel espace supplémentaire entre des objets proches les uns des
996 En augmentant la valeur de @code{padding}, on peut donc éloigner le doigté de la
997 note. La commande suivante insère trois unités d'espace vide entre la note et le doigté :
1000 \once \override Voice.Fingering #'padding = #3
1003 En ajoutant cette commande avant la création du doigté (de l'objet @q{Fingering}),
1004 donc avant @code{c2}, on obtient le résultat suivant :
1006 @lilypond[quote,relative=2,fragment,verbatim]
1007 \once \override Voice.Fingering #'padding = #3
1014 Dans le cas présent, le réglage intervient dans le contexte @code{Voice},
1015 ce qui pouvait également se déduire de la Référence du programme, où la page
1016 du graveur @rinternals{Fingering_engraver} indique :
1019 Fingering_engraver is part of contexts: @dots{} @rinternals{Voice}
1025 Le graveur Fingering_engraver fait partie des contextes : @dots{} @rinternals{Voice}
1029 @node Conventions de nommage
1030 @subsection Conventions de nommage
1031 @translationof Naming conventions
1036 @node Modification de propriétés
1037 @section Modification de propriétés
1038 @translationof Modifying properties
1040 @c TODO change the menu and subsection node names to use
1041 @c backslash once the new macro to handle the refs
1042 @c is available. Need to find and change all refs at
1043 @c the same time. -td
1046 * Vue d'ensemble de la modification des propriétés::
1047 * La commande de fixation (set)::
1048 * La commande de dérogation (@emph{override})::
1049 * Élaboration d'une retouche::
1050 * La commande d'affinage (@emph{tweak})::
1054 @node Vue d'ensemble de la modification des propriétés
1055 @subsection Vue d'ensemble de la modification des propriétés
1056 @translationof Overview of modifying properties
1061 @node La commande de fixation (set)
1062 @subsection La commande @code{\set}
1063 @translationof The set command
1067 @cindex modifier des propriétés
1069 Chaque contexte peut avoir plusieurs @emph{propriétés}, c'est-à-dire
1070 des variables qu'il inclut. Ces dernières peuvent être modifiées @qq{à la volée},
1071 c'est-à-dire pendant que la compilation s'accomplit. C'est là le rôle de la
1072 commande @code{\set}.
1075 \set @var{contexte}.@var{propriété} = #@var{valeur}
1079 @lilypond[quote,verbatim,relative=2,fragment]
1081 \set Score.skipBars = ##t
1085 Cette commande permet de condenser les mesures vides de notes, en des silences
1086 multi-mesures. Il s'agit d'un objet Scheme, auquel on attribue la valeur booléenne
1087 @q{vrai}, c'est-à-dire la lettre @code{#t} pour @q{True} en anglais.
1089 Ce changement étant appliqué @q{à la volée}, il n'affecte que le second groupe de notes.
1091 Si l'argument @var{contexte} n'est pas spécifié, alors la propriété cherchera à s'appliquer
1092 dans le contexte le plus restreint où elle est employée : le plus souvent
1093 @code{ChordNames}, @code{Voice}, ou @code{Lyrics}. Dans l'exemple suivant,
1095 @lilypond[quote,verbatim,relative=2,fragment]
1097 \set autoBeaming = ##f
1102 aucun argument @var{contexte} n'a été donné à la commande @code{\set}.
1103 De ce fait, les ligatures automatiques sont désactivées dans le
1104 contexte actuel, c'est-à-dire @rinternals{Voice}. Notez que le
1105 contexte le plus restreint n'est pas toujours le bon,
1106 et peut ne pas contenir la propriété qui vous intéresse : ainsi, la propriété
1107 @code{skipBars}, évoquée plus haut, ne relève pas du contexte @code{Voice},
1108 et le code suivant ne fonctionnera pas.
1110 @lilypond[quote,verbatim,relative=2,fragment]
1116 Les contextes s'organisent de façon hiérarchique : aussi, lorsqu'un contexte de niveau
1117 supérieur est spécifié (par exemple @code{Staff}), la propriété sera modifée dans
1118 tous les contextes inférieurs (tous les contextes @code{Voice}, par exemple)
1123 La commande @code{\unset} permet d'annuler la définition d'une propriété :
1126 \unset @var{contexte}.@var{propriété}
1130 si et seulement si cette propriété à été définie dans ce @var{contexte}
1134 \set Staff.autoBeaming = ##f
1138 même s'il s'applique à tous les contextes @code{Voice} contenus dans le
1139 contexte @code{Staff}, ne peut être annulé au niveau @code{Voice}. Le code
1140 suivant sera sans effet.
1143 \unset Voice.autoBeaming
1147 En d'autres termes, la commande @code{\unset} doit impérativement être
1148 accompagnée du même contexte que la commande @code{\set} d'origine.
1149 Pour annuler l'effet, dans notre exemple, de @code{Staff.autoBeaming = ##f},
1150 il faut donc entrer :
1152 \unset Staff.autoBeaming
1155 Si l'on se trouve dans le contexte le plus restreint, il n'est pas obligatoire,
1156 là encore, de spécifier le @var{contexte}. Ainsi, les deux lignes suivantes sont équivalentes.
1160 \set Voice.autoBeaming = ##t
1161 \set autoBeaming = ##t
1166 Pour modifier une propriété de façon à ce qu'elle ne s'applique qu'une seule fois,
1167 il convient d'employer la commande @code{\once} :
1169 @lilypond[quote,verbatim,relative=2,fragment]
1171 \once \set fontSize = #4.7
1176 Ici le changement de taille est annulé aussitôt après la note concernée.
1178 La référence du programme contient une description exhaustive de toutes les
1179 propriétés contexte par contexte : voir
1181 @rinternals{Tunable context properties}.
1184 Translation @expansion{} Tunable context properties.
1188 @node La commande de dérogation (@emph{override})
1189 @subsection La commande @code{\override}
1190 @translationof The override command
1193 La commande @code{\override} permet de modifier la mise en page
1194 en détail. Examinons son utilisation concrètementet dans les détails.
1195 La syntaxe de cette commande ressemble généralement à :
1198 \override @var{contexte}.@var{objet} #'@var{propriété} = #@var{valeur}
1201 La propriété @var{propriété} de l'objet @var{objet}, appartenant au contexte
1202 @var{contexte}, se voit ainsi attribuer la valeur @var{valeur}.
1205 @c deprecated node. Delete. --fv
1206 @node Élaboration d'une retouche
1207 @subsection Élaboration d'une retouche
1208 @translationof Constructing a tweak
1210 Les commandes permettant de modifier l'apparence de la partition
1211 ressemblent en général à
1214 \override Voice.Stem #'thickness = #3.0
1218 Pour élaborer un réglage de ce type, on a besoin de connaître précisément :
1221 @item le contexte : ici @code{Voice} (la voix).
1222 @item l'objet à affecter : ici @code{Stem} (les hampes).
1223 @item la propriété à modifier : ici @code{thickness} (l'épaisseur du trait).
1224 @item la valeur désirée : ici @code{3.0} (par défaut, elle est de 1.3).
1227 Certaines @q{sous-propriétés} sont parfois contenues dans une propriété.
1228 La commande devient alors :
1231 \override Stem #'(details beamed-lengths) = #'(4 4 3)
1234 @cindex documentation exhaustive
1235 @cindex trouver des objets graphiques
1236 @cindex objets graphiques, description
1240 Pour bien des propriétés, quel que soit le type de valeur requise,
1241 attribuer la valeur @q{faux} (@code{##f} en Scheme) reviendra à désactiver
1242 complètement l'action de la propriété qui se trouve ainsi purement
1243 ignorée par LilyPond. Cela peut s'avérer fort utile pour des propriétés
1244 causant des désagréments.
1246 @c such announcements are to be avoided -vv
1248 We demonstrate how to glean this information from the notation manual
1249 and the program reference.
1253 @node La commande d'affinage (@emph{tweak})
1254 @subsection La commande @code{\tweak}
1255 @translationof The tweak command
1260 Dans certains cas, on peut passer par un raccourci pour arranger les
1261 objets graphiques. Lorsqu'un objet est directement engendré par un élément distinct
1262 du fichier source, on peut utiliser la commande @code{\tweak}.
1264 Dans l'accord suivant, les notes sont modifiées une par une :
1266 @lilypond[relative=2,fragment,verbatim,ragged-right]
1269 \tweak #'color #red d
1271 \tweak #'duration-log #1 a
1272 >4-\tweak #'padding #10 -.
1275 Comme on peut le voir, les propriétés sont ici modifiées directement
1276 en même temps que les objets sont saisis. Il n'est plus besoin de spécifier ni
1277 le nom de l'objet (@emph{grob}), ni le contexte dans lequel cela doit s'appliquer.
1279 Ce procédé ne marche que pour des objets directement liés aux évènements
1280 (@rinternals{Event}) du fichier source. Par exemple :
1283 @item Les têtes de notes au sein d'un accord, qui sont directement engendrées par
1284 les hauteurs indiquées
1285 @item Les signes d'articulation, engendrés par les indications de ponctuation.
1288 En revanche, les hampes ou les altérations sont engendrées par les têtes de notes,
1289 et non par des évènements dans le fichier source. De même pour les clés, qui ne
1290 sont pas directement engendrées par le fichier source, mais plutôt par le
1291 changement d'une propriété interne.
1293 En fait, très peu d'objets passent @emph{directement} du code source à la partition.
1294 Une note toute simple, par exemple @code{c4}, fait l'objet d'un traitement et n'est donc
1295 pas directement rendue ; c'est pourquoi le code suivant ne sera d'aucun effet :
1298 \tweak #'color #red c4
1302 Voir pour plus de détails @ref{Affichage d'expressions musicales}.
1305 @node set ou override
1306 @subsection @code{\set} ou @code{\override}
1307 @translationof set versus override
1310 Si les propriétés peuvent être modifiées de deux façons, par les commandes
1311 @code{\set} et @code{\override}, c'est qu'il y a deux types de propriétés.
1313 Les contextes peuvent avoir des propriétés, dont les noms commencent par une
1314 minuscule puis comprennent une ou plusieurs majuscules (de style
1315 @code{totoTutu}). Elles ont surtout trait
1316 à la notation des éléments musicaux : par exemple, @code{localKeySignature} permet
1317 de choisir s'il faut ou non imprimer une altération, ou @code{measurePosition} permet
1318 de choisir quand il faut imprimer une barre de mesure. Ces propriétés de contextes
1319 sont appelées à changer au long de l'interprétation de la partition :
1320 @code{measurePosition} en est un exemple évident. Ces propriétés doivent
1321 être modifiées avec la commande @code{\set}.
1323 Il existe un type particulier de propriétés : les descriptions
1324 d'éléments. Ces propriétés, dont les noms commencent par une majuscule, puis comprennent
1325 une ou plusieurs majuscules (de style @code{TotoTata}), contiennent les réglages
1326 @q{par défaut} pour les objets graphiques. Ces réglages sont sous forme de liste Scheme ; on
1327 peut les consulter dans le fichier @file{scm/@/define@/-grobs@/.scm}.
1328 Les descriptions d'éléments doivent être modifiées avec la commande @code{\override}.
1330 @code{\override} est en fait un raccourci :
1333 \override @var{contexte}.@var{objet} #'@var{propriété} = #@var{valeur}
1337 est plus ou moins l'équivalent de
1339 @c leave this long line -gp
1341 \set @var{contexte}.@var{objet} #'@var{propriété} = #(cons (cons '@var{propriété} @var{valeur}) <valeur précédente de @var{contexte})
1344 La valeur de @code{context} (la liste Scheme, ou @q{alist}) sert à initialiser
1345 les propriétés des objets un par un. Les objets eux-même ont leurs propriétés,
1346 dont les noms, dans la tradition du langage Scheme, comprennent un trait d'union
1347 (@code{toto-titi}). Ces propriétés internes changent constamment au cours de la mise
1348 en page : en fait, la gravure d'une page n'est autre que le calcul de toutes
1349 ces propriétés, au moyen de fonctions de rappel.
1351 La propriété @code{fontSize} est une exception : c'est un raccourci, qui équivaudrait
1352 à saisir @code{\override @dots{} #'font-size} pour tous les objets
1353 textuels. Dans la mesure où il s'agit d'une manipulation très
1354 courante, une propriété spéciale a été créée. Elle doit
1355 être modifiée avec la commande @code{\set}.
1359 @node Propriétés et contextes utiles
1360 @section Propriétés et contextes utiles
1361 @translationof Useful concepts and properties
1366 * Direction et positionnement::
1367 * Distances et unités de mesure::
1368 * Propriétés des lignes de portée::
1369 * Extenseurs et prolongateurs::
1370 * Visibilité des objets::
1372 * Rotation des objets::
1375 @node Modes de saisie
1376 @subsection Modes de saisie
1377 @translationof Input modes
1382 @node Direction et positionnement
1383 @subsection Direction et positionnement
1384 @translationof Direction and placement
1389 @node Distances et unités de mesure
1390 @subsection Distances et unités de mesure
1391 @translationof Distances and measurements
1396 @node Propriétés des lignes de portée
1397 @subsection Propriétés des lignes de portée
1398 @translationof Staff symbol properties
1403 @node Extenseurs et prolongateurs
1404 @subsection Extenseurs et prolongateurs
1405 @translationof Spanners
1410 @unnumberedsubsubsec Utilisation de @code{spanner-interface}
1411 @unnumberedsubsubsec Utilisation de @code{line-spanner-interface}
1412 @node Visibilité des objets
1413 @subsection Visibilité des objets
1414 @translationof Visibility of objects
1420 * Suppression des stencils::
1421 * Transparence des objets::
1422 * Blanchiment des objets::
1423 * Utilisation de break-visibility::
1424 * Considérations spécifiques::
1427 @node Suppression des stencils
1428 @unnumberedsubsubsec Suppression des stencils
1429 @translationof Removing the stencil
1434 @node Transparence des objets
1435 @unnumberedsubsubsec Transparence des objets
1436 @translationof Making objects transparent
1441 @node Blanchiment des objets
1442 @unnumberedsubsubsec Blanchiment des objets
1443 @translationof Painting objects white
1448 @node Utilisation de break-visibility
1449 @unnumberedsubsubsec Utilisation de break-visibility
1450 @translationof Using break-visibility
1455 @node Considérations spécifiques
1456 @unnumberedsubsubsec Considérations spécifiques
1457 @translationof Special considerations
1462 @node Styles de ligne
1463 @subsection Styles de ligne
1464 @translationof Line styles
1469 @node Rotation des objets
1470 @subsection Rotation des objets
1471 @translationof Rotating objects
1477 * Rotation des objets de mise en forme::
1478 * Rotation des étiquettes::
1481 @node Rotation des objets de mise en forme
1482 @unnumberedsubsubsec Rotation des objets de mise en forme
1483 @translationof Rotating layout objects
1488 @node Rotation des étiquettes
1489 @unnumberedsubsubsec Rotation des étiquettes
1490 @translationof Rotating markup
1495 @node Retouches avancées
1496 @section Retouches avancées
1497 @translationof Advanced tweaks
1503 * Alignement des objets::
1504 * Regroupement vertical d'objets graphiques::
1505 * Modification des stencils::
1506 * Modification de l'allure des éléments::
1509 @node Alignement des objets
1510 @subsection Alignement des objets
1511 @translationof Aligning objects
1517 * Détermination directe de @code{X-offset} et @code{Y-offset}::
1518 * Utilisation de @code{side-position-interface}::
1519 * Utilisation de @code{self-alignment-interface}::
1520 * Utilisation de @code{break-aligned-interface}::
1523 @node Détermination directe de @code{X-offset} et @code{Y-offset}
1524 @unnumberedsubsubsec Détermination directe de @code{X-offset} et @code{Y-offset}
1525 @translationof Setting @code{X-offset} and @code{Y-offset} directly
1530 @node Utilisation de @code{side-position-interface}
1531 @unnumberedsubsubsec Utilisation de @code{side-position-interface}
1532 @translationof Using the @code{side-position-interface}
1537 @node Utilisation de @code{self-alignment-interface}
1538 @unnumberedsubsubsec Utilisation de @code{self-alignment-interface}
1539 @translationof Using the @code{self-alignment-interface}
1544 @unnumberedsubsubsec Utilisation des procédures @code{aligned-on-parent}
1545 @unnumberedsubsubsec Utilisation des procédures @code{centered-on-parent}
1546 @node Utilisation de @code{break-aligned-interface}
1547 @unnumberedsubsubsec Utilisation de @code{break-aligned-interface}
1548 @translationof Using the @code{break-alignable-interface}
1553 @node Regroupement vertical d'objets graphiques
1554 @subsection Regroupement vertical d'objets graphiques
1555 @translationof Vertical grouping of grobs
1557 Les objets @code{VerticalAlignment} et @code{VerticalAxisGroup}
1558 travaillent de concert. Comme leurs noms anglais l'indiquent,
1559 @code{VerticalAxisGroup} regroupe différents objets tels que les portées
1560 (@code{Staff}), les paroles (@code{Lyrics}) et ainsi de suite ; puis
1561 @code{VerticalAlignment} synchronise verticalement ces différents groupes.
1562 En général, il n'y a qu'un seul @code{VerticalAlignment} pour l'ensemble
1563 de la partition, mais chaque contexte @code{Staff}, @code{Lyrics}, etc.
1564 possède son propre @code{VerticalAxisGroup}.
1567 @node Modification des stencils
1568 @subsection Modification des stencils
1569 @translationof Modifying stencils
1574 @node Modification de l'allure des éléments
1575 @subsection Modification de l'allure des éléments
1576 @translationof Modifying shapes
1579 * Modification des liaisons::
1582 @node Modification des liaisons
1583 @unnumberedsubsubsec Modification des liaisons
1584 @translationof Modifying ties and slurs