| [ < ] | [ > ] | [ << ] | [Plus haut] | [ >> ] | [Racine] | [Table des matières] | [Index] | [ ? ] |
@translationof Advanced tweaks
Nous allons voir, au fil des paragraphes qui suivent, différentes approches permettant de fignoler l’apparence d’une partition.
Manuel d’initiation : (learning)Autres sources de documentation section ‘Autres sources de documentation’ dans Manuel d’initiation, (learning)Retouche de partition section ‘Retouche de partition’ dans Manuel d’initiation.
Manuel de notation : En quoi consiste la référence des propriétés internes, Modification de propriétés.
Manuel d’extension : (extending)Interfaces pour programmeurs section ‘Interfaces pour programmeurs’ dans Extension de LilyPond.
Fichiers d’initialisation : ‘scm/define-grobs.scm’.
Morceaux choisis : (snippets)Tweaks and overrides section ‘Retouches’ dans Morceaux choisis.
Référence des propriétés internes : (internals)All layout objects section ‘All layout objects’ dans Référence des propriétés internes.
| [ < ] | [ > ] | [ << ] | [Plus haut] | [ >> ] | [Racine] | [Table des matières] | [Index] | [ ? ] |
@translationof Aligning objects
Les objets graphiques disposant des interfaces
self-alignment-interface ou side-position-interface
peuvent s’aligner par rapport à un objet précédemment positionné, ce de
différentes manières. Ces objets sont référencés aux rubriques
(internals)self-alignment-interface section ‘self-alignment-interface’ dans Référence des propriétés internes et
(internals)side-position-interface section ‘side-position-interface’ dans Référence des propriétés internes.
Tous les objets graphiques ont un point de référence, une étendue horizontale et une étendue verticale. L’étendue horizontale est représentée par une paire de nombres indiquant l’écart entre le point de référence et les bords gauche et droit – l’écart à gauche étant négatif. L’étendue verticale est représentée par une paire de nombres indiquant l’écart entre le point de référence et les bords inférieur et supérieur – l’écart vers le bas étant négatif.
La position d’un objet sur la portée est donnée par la valeur des
propriétés X-offset et Y-offset. La valeur de
X-offset indique l’écart en abscisse (coordonnée X) par rapport
au point de référence de l’objet parent ; la valeur de Y-offset
indique l’écart par rapport à la ligne médiane de la portée. Les
valeurs de X-offset et Y-offset peuvent être fournies
arbitrairement, ou bien être calculé par des procédures spécifiques qui
détermineront l’alignement par rapport à l’objet parent.
Note : Nombre d’objets sont affectés par des considérations
spécifiques en matière de positionnement ; jouer sur les valeurs de
X-offset ou Y-offset se révélera inefficace en pareil
cas, même si l’objet dispose de la self-alignment-interface.
Fixer arbitrairement les propriétés X-offset ou Y-offset
annihilera alors les effets de la propriété self-alignment
correspondante.
Par exemple, une altération peut se repositionner verticalement grâce à
son Y-offset ; toute modification de son X-offset
restera par contre sans effet.
Les indications de repère s’alignent sur des objets de rupture – tels
les barres de mesure, clefs, métriques et armures. Certaines propriétés
spécifiques – dépendant de la break-aligned-interface –
permettent de gérer le positionnement des indications de repère sur ces
objets.
Détermination directe de X-offset et Y-offset | ||
Utilisation de side-position-interface | ||
Utilisation de self-alignment-interface | ||
Utilisation de break-aligned-interface |
Manuel de notation :
Utilisation de break-aligned-interface.
Manuel d’extension : (extending)Fonctions de rappel section ‘Fonctions de rappel’ dans Extension de LilyPond.
| [ < ] | [ > ] | [ << ] | [Plus haut] | [ >> ] | [Racine] | [Table des matières] | [Index] | [ ? ] |
X-offset et Y-offset@translationof Setting X-offset and Y-offset directly
Vous pouvez fournir, pour de nombreux objets, des valeurs numériques aux
propriétés X-offset et Y-offset. Voici par exemple une
note avec indication du doigté tout d’abord avec un positionnement par
défaut, puis repositionnement par modification successive du
X-offset et du Y-offset.
a'-3 a' -\tweak X-offset #0 -\tweak Y-offset #0 -3 a' -\tweak X-offset #-1 -\tweak Y-offset #1 -3
| [ < ] | [ > ] | [ << ] | [Plus haut] | [ >> ] | [Racine] | [Table des matières] | [Index] | [ ? ] |
side-position-interface@translationof Using the side-position-interface
Un objet disposant de la side-position-interface peut se voir
accolé à son voisin de telle sorte que les bords des deux objets se
touchent. Un tel objet peut se positionner au-dessus, en dessous, à
droite ou à gauche de son parent. Ce parent ne saurait être
stipulé ; il est déterminé par l’ordre d’apparition des éléments
dans le flux des saisies. La plupart de ces objets ont pour parent la
tête de note qui leur est associée.
Les valeurs des propriétés side-axis et direction
détermineront l’endroit où viendra se positionner l’objet, selon les
préceptes suivants :
| Propriété | Propriété | Positionnement |
|---|---|---|
side-axis | direction | |
0 | -1 | gauche |
0 | 1 | droite |
1 | -1 | en dessous |
1 | 1 | au-dessus |
Pour un side-axis à 0, le X-offset devrait engager
la procédure ly:side-position-interface::x-aligned-side.
Celle-ci renverra la valeur adéquate de X-offset permettant
d’accoler l’objet sur la droite ou sur la gauche de son parent, selon la
valeur de direction.
Pour un side-axis à 1, le Y-offset devrait engager
la procédure ly:side-position-interface::y-aligned-side.
Celle-ci renverra la valeur adéquate de Y-offset permettant
d’accoler l’objet au-dessus ou en dessous de son parent, selon la valeur
de direction.
| [ < ] | [ > ] | [ << ] | [Plus haut] | [ >> ] | [Racine] | [Table des matières] | [Index] | [ ? ] |
self-alignment-interface@translationof Using the self-alignment-interface
L’alignement horizontal d’un objet disposant de la
self-alignment-interface dépend de la valeur de sa propriété
self-alignment-X, si tant est que la propriété X-offset de
cet objet engage la procédure
ly:self-alignment-interface::x-aligned-on-self.
La propriété self-alignment-X peut contenir un nombre réel,
l’unité de base étant la moitié de l’étendue horizontale de l’objet.
Une valeur négative décalera l’objet vers la droite, une valeur positive
vers la gauche. La valeur 0 permet de centrer l’objet sur
le point de référence de son parent. Une valeur de -1
alignera le bord gauche de l’objet sur le point de référence de son
parent, et une valeur de 1 alignera le bord droit de l’objet
sur le point de référence de son parent. Les valeurs symboliques
LEFT, CENTER et RIGHT correspondent respectivement
à -1, 0 et 1.
En règle générale, la valeur de self-alignment-X se modifie à
l’aide d’une commande \override. Le recours à la commande
\tweak permet de traiter séparément plusieurs annotations
affectées à une même note :
a' -\tweak self-alignment-X #-1 ^"left-aligned" -\tweak self-alignment-X #0 ^"center-aligned" -\tweak self-alignment-X #RIGHT ^"right-aligned" -\tweak self-alignment-X #-2.5 ^"aligned further to the right"
L’alignement vertical suit le même principe : la propriété
Y-offset doit alors engager la procédure
ly:self-alignment-interface::y-aligned-on-self. Toutefois, il
arrive bien souvent que d’autres mécanismes interviennent dans
l’alignement vertical. La valeur de Y-offset n’étant que l’une
des variables qui seront prises en compte, l’ajustement pour certains
objets peut se révéler fastidieux. L’unité de base est relativement
réduite, puisqu’elle est de la moitié de l’étendue verticale de
l’objet ; le nombre à fournir en argument pourrait donc être
relativement élevé. Une valeur de -1 alignera le bord
inférieur de l’objet sur le point de référence de son parent, et une
valeur de 1 alignera le bord supérieur de l’objet sur le point de
référence de son parent. La valeur 0 permet de centrer l’objet
sur le point de référence de son parent. Les valeurs symboliques
DOWN, CENTER et UP correspondent respectivement
à -1, 0 et 1.
Définir à la fois X-offset et Y-offset permet de réaligner
un objet sur les deux axes.
Dans l’exemple ci-dessous, nous ajustons l’indication de doigté de telle sorte qu’elle se place au plus près de la tête de note.
a' -\tweak self-alignment-X #0.5 % move horizontally left -\tweak Y-offset #ly:self-alignment-interface::y-aligned-on-self -\tweak self-alignment-Y #-1 % move vertically up -3 % third finger
| [ < ] | [ > ] | [ << ] | [Plus haut] | [ >> ] | [Racine] | [Table des matières] | [Index] | [ ? ] |
break-aligned-interface@translationof Using the break-alignable-interface
Indications de repère et numéros de mesure peuvent s’aligner sur des
objets de notation autres qu’une barre de mesure. Parmi ces objets,
nous citerons ambitus, breathing-sign, clef,
custos, staff-bar, left-edge,
key-cancellation, key-signature, et time-signature.
Chaque objet possède son propre point de référence par défaut, sur lequel viendront s’aligner les indications de repère :
% The rehearsal mark will be aligned to the right edge of the Clef \override Score.RehearsalMark.break-align-symbols = #'(clef) \key a \major \clef treble \mark "↓" e'1 % The rehearsal mark will be aligned to the left edge of the Time Signature \override Score.RehearsalMark.break-align-symbols = #'(time-signature) \key a \major \clef treble \time 3/4 \mark "↓" e'2. % The rehearsal mark will be centered above the Breath Mark \override Score.RehearsalMark.break-align-symbols = #'(breathing-sign) \key a \major \clef treble \time 4/4 e'1 \breathe \mark "↓"
Les différents objets sur lesquels l’alignement pourrait intervenir
seront regroupés dans une liste. Si l’un des objets est invisible à
l’endroit voulu, en raison d’un réglage de break-visibility ou
bien par forçage de la visibilité des armures et clefs, le repère ou le
numéro de mesure viendra s’aligner sur le premier élément de cette liste
qui soit visible. Dans le cas où aucun objet de la liste n’est visible,
l’alignement se fera sur la barre de mesure ou, dans le cas où la barre
de mesure est invisible, à l’endroit même où la barre prendrait place.
% The rehearsal mark will be aligned to the right edge of the Key Signature \override Score.RehearsalMark.break-align-symbols = #'(key-signature clef) \key a \major \clef treble \mark "↓" e'1 % The rehearsal mark will be aligned to the right edge of the Clef \set Staff.explicitKeySignatureVisibility = #all-invisible \override Score.RehearsalMark.break-align-symbols = #'(key-signature clef) \key a \major \clef bass \mark "↓" gis,1 % The rehearsal mark will be centered above the Bar Line \set Staff.explicitKeySignatureVisibility = #all-invisible \set Staff.explicitClefVisibility = #all-invisible \override Score.RehearsalMark.break-align-symbols = #'(key-signature clef) \key a \major \clef treble \mark "↓" e'1
L’alignement d’un repère sur un objet de notation peut se modifier, comme l’illustre l’exemple suivant. Toutefois, si la partition comporte plusieurs portées, ce réglage devra apparaître dans chacune des portées.
% The RehearsalMark will be aligned with the right edge of the Key Signature \override Score.RehearsalMark.break-align-symbols = #'(key-signature) \key a \major \clef treble \time 4/4 \mark "↓" e'1 % The RehearsalMark will be centered above the Key Signature \once \override Score.KeySignature.break-align-anchor-alignment = #CENTER \mark "↓" \key a \major e'1 % The RehearsalMark will be aligned with the left edge of the Key Signature \once \override Score.KeySignature.break-align-anchor-alignment = #LEFT \key a \major \mark "↓" e'1
Le bord gauche d’un repère peut se décaler arbitrairement sur la gauche ou sur la droite. La valeur est exprimée en espaces de portée.
% The RehearsalMark will be aligned with the left edge of the Key Signature % and then shifted right by 3.5 staff-spaces \override Score.RehearsalMark.break-align-symbols = #'(key-signature) \once \override Score.KeySignature.break-align-anchor = #3.5 \key a \major \mark "↓" e'1 % The RehearsalMark will be aligned with the left edge of the Key Signature % and then shifted left by 2 staff-spaces \once \override Score.KeySignature.break-align-anchor = #-2 \key a \major \mark "↓" e'1
| [ < ] | [ > ] | [ << ] | [Plus haut] | [ >> ] | [Racine] | [Table des matières] | [Index] | [ ? ] |
@translationof Vertical grouping of grobs
Les objets VerticalAlignment et VerticalAxisGroup
travaillent de concert. Comme leur nom anglais l’indiquent,
VerticalAxisGroup regroupe différents objets tels que les portées
(Staff), les paroles (Lyrics) et ainsi de suite ;
puis VerticalAlignment synchronise verticalement ces différents
groupes. En général, il n’y a qu’un seul VerticalAlignment pour
l’ensemble de la partition, mais chaque contexte Staff,
Lyrics, etc. possède son propre VerticalAxisGroup.
| [ < ] | [ > ] | [ << ] | [Plus haut] | [ >> ] | [Racine] | [Table des matières] | [Index] | [ ? ] |
@translationof Modifying stencils
Tout objet de rendu dispose d’une propriété stencil attachée à la
grob-interface. En règle générale, cette propriété référence
par défaut une fonction spécifique à l’objet et taillée sur mesure pour
fournir le symbole qui va le représenter dans l’output. Par exemple,
le réglage standard de la propriété stencil de l’objet
MultiMeasureRest est ly:multi-measure-rest::print.
Le symbole standard d’un objet quel qu’il soit peut être remplacé à
partir du moment où la propriété stencil référence une procédure
différente et écrite à cet effet. Ceci requiert une bonne maîtrise du
fonctionnement interne de LilyPond, mais est grandement facilité dans
bien des cas et permet d’obtenir le résultat escompté.
En effet, rien ne nous interdit, à partir de la propriété
stencil, d’appeler la procédure qui génère du texte,
ly:text-interface::print en l’occurrence, et d’adjoindre à l’objet
une propriété text qui contiendra, sous forme de markup,
le symbole à dessein. Grâce à l’extrême flexibilité des markups,
vous pourrez parvenir à bien des choses – voir à ce sujet
Éléments graphiques dans du texte formaté.
C’est la technique employée ici, où l’une des têtes de note est remplacée par une croix inscrite dans un cercle :
XinO = { \once \override NoteHead.stencil = #ly:text-interface::print \once \override NoteHead.text = \markup { \combine \halign #-0.7 \draw-circle #0.85 #0.2 ##f \musicglyph "noteheads.s2cross" } } \relative { a' a \XinO a a }
Tous les glyphes Feta de la fonte Emmentaler sont
accessibles à l’aide de la commande de markup \musicglyph
– voir La fonte Emmentaler.
L’insertion de fichier ‘EPS’ ou d’instructions Postscript sont
accessibles par les commandes de markup \epsfile et
\postscript respectivement – voir l’annexe
(notation)Graphic section ‘Graphisme’ dans Manuel de notation.
Manuel de notation : Commandes pour markup, Éléments graphiques dans du texte formaté, (notation)Graphic section ‘Graphisme’ dans Manuel de notation, La fonte Emmentaler, Mise en forme du texte.
| [ < ] | [ > ] | [ << ] | [Plus haut] | [ >> ] | [Racine] | [Table des matières] | [Index] | [ ? ] |
@translationof Modifying shapes
| Modification des liaisons |
| [ < ] | [ > ] | [ << ] | [Plus haut] | [ >> ] | [Racine] | [Table des matières] | [Index] | [ ? ] |
@translationof Modifying ties and slurs
Les liaisons, qu’elles soient de prolongation (Tie),
d’articulation (Slur), de phrasé (PhrasingSlur), de
laisser-vibrer (LaissezVibrerTie) ou de reprise
(RepeatTie), sont dessinées sous la forme de courbes de Bézier de
degré trois. Lorsque l’aspect de la liaison automatiquement calculé
n’est pas satisfaisant, il peut être modifié manuellement de deux
manières différentes :
Ces deux méthodes sont expliquées ci-dessous. La première convient mieux dans le cas d’une légère adaptation de la courbe ; la seconde sera plus efficace lorsqu’il s’agira de créer une courbe sur une seule et unique note.
Quatre points définissent une courbe de Bézier cubique. Les premier et quatrième points sont les points de départ et d’arrivée de la courbe ; les deux autres points de contrôle – P1 et P2 – en détermineront l’allure. La courbe se trace en partant du point P0, en se dirigeant vers P1 et en arrivant au point P3 selon la direction P2-P3. La courbe est à l’intérieur de l’enveloppe convexe des points de contrôle. Tout déplacement (translation, rotation, échelonnement) des points de contrôle sera répercuté sur le dessin de la courbe.
Voici par exemple une liaison de prolongation dont l’allure n’est pas
des plus heureuses, même en optant pour un \tieDown.
<< { e'1~ 1 } \\ \relative { r4 <g' c,> <g c,> <g c,> } >>
L’ajustement des points de contrôle de cette liaison de tenue à
l’aide de \shape permet d’éviter les collisions.
L’instruction \shape obéit à la syntaxe
[-]\shape déplacements élément |
Ceci aura pour effet de repositionner les points de contrôle de élément des différents montants fournis par déplacements. L’argument déplacements est constitué d’une liste de paires de nombres ou bien d’une liste de telles listes. Chacun des membres de l’une des paires indique l’ajustement de la coordonnée d’un point de contrôle. Lorsque élément est textuel, il en résulte une dérogation particulière appliquée au type d’objet considéré, alors que dans le cas d’une expression musicale sera appliqué un affinage approprié.
En d’autres termes, la fonction \shape se comporte soit comme un
\once \override, soit comme un \tweak selon que l’argument
élément est un nom d’objet – tel « Slur » – ou une expression
musicale tel un « ( ». L’argument déplacements spécifie les
ajustements à apporter aux quatre points de contrôle, sous la forme
d’une liste de paires (dx . dy) dont les valeurs sont
exprimées en espace de portée ; on utilisera une liste de listes de
paires dans le cas où la courbe comporte plusieurs segments.
La fonction sera précédée d’un tiret si et seulement si elle doit
s’appliquer sous forme de \tweak.
Pour l’exemple qui nous occupe, l’adaptation sous forme dérogatoire –
recours à \once\override – de la fonction \shape, nous
pouvons remonter la liaison d’un demi espace de portée :
<< { \shape #'((0 . 0.5) (0 . 0.5) (0 . 0.5) (0 . 0.5)) Tie e'1~ 1 } \\ \relative { r4 <g' c,> <g c,> <g c,> } >>
La liaison est maintenant mieux positionnée ; mais sa partie centrale
pourrait être un peu plus relevée, en procédant comme ci-dessous, cette
fois en utilisant la formulation d’affinage – la forme \tweak :
<< { e'1-\shape #'((0 . 0.5) (0 . 1) (0 . 1) (0 . 0.5)) ~ e' } \\ \relative { r4 <g' c,> <g c,> <g c,> } >>
L’adaptation du positionnement horizontal des points de contrôle se réalise de la même manière, ce qui permet de gérer le galbe de deux courbes débutant au même instant musical :
\relative { c''8(\( a) a'4 e c\) \shape #'((0.7 . -0.4) (0.5 . -0.4) (0.3 . -0.3) (0 . -0.2)) Slur \shape #'((0 . 0) (0 . 0.5) (0 . 0.5) (0 . 0)) PhrasingSlur c8(\( a) a'4 e c\) }
La fonction \shape permet aussi d’adapter les points de
contrôle d’une courbe qui se prolonge après un saut de ligne.
Chaque portion de la courbe peut se voir appliquer sa propre liste
d’ajustements. Lorsque l’un des segments ne nécessite pas de
retouche, il suffit de lui fournir une liste vide. Dans l’exemple
suivant, le saut de ligne laisse à croire qu’il y a non pas une
seule mais deux liaisons :
\relative { c'4( f g c \break d,4 c' f, c) }
Regalber les deux moitiés de la liaison rend plus évident le fait qu’elle s’étend par delà le saut de ligne :
% () may be used as a shorthand for ((0 . 0) (0 . 0) (0 . 0) (0 . 0)) % if any of the segments does not need to be changed \relative c' { \shape #'( (( 0 . 0) (0 . 0) (0 . 0) (0 . 1)) ((0.5 . 1.5) (1 . 0) (0 . 0) (0 . -1.5)) ) Slur c4( f g c \break d,4 c' f, c) }
La présence d’une courbe en esse requiert obligatoirement d’ajuster manuellement les points de contrôle – LilyPond n’optera jamais automatiquement pour un tel galbe.
\relative c'' { c8( e b-> f d' a e-> g) \shape #'((0 . -1) (5.5 . -0.5) (-5.5 . -10.5) (0 . -5.5)) PhrasingSlur c8\( e b-> f d' a e-> g\) }
Les coordonnées des points de contrôle sont données en unités d’espace de portée. L’abscisse est relative au point de référence de la note de départ de la liaison ; l’ordonnée est relative à la ligne médiane de la portée. Les différentes coordonnées sont entrées sous la forme d’une liste de quatre paires de nombres décimaux (ou nombres réels). L’une des manières de procéder consiste à tout d’abord estimer les coordonnées des deux extrémités puis, par tâtonnement, déterminer les deux points intermédiaires. Gardez à l’esprit que ces valeurs pourront devoir être revues si la musique ou sa mise en forme sont modifées.
L’une des situation où spécifier explicitement les points de contrôle se révèle être tout à fait appropriée est lorsqu’ils se réfèrent à une seule et unique note. L’exemple suivant illustre l’un des moyens d’indiquer une liaison qui se prolonge sur les alternatives d’une répétition.
\relative { c''1 \repeat volta 3 { c4 d( e f } \alternative { { g2) d } { g2 % create a slur and move it to a new position % the <> is just an empty chord to carry the slur termination -\tweak control-points #'((-2 . 3.8) (-1 . 3.9) (0 . 4) (1 . 3.4)) ( <> ) f, } { e'2 % create a slur and move it to a new position -\tweak control-points #'((-2 . 3) (-1 . 3.1) (0 . 3.2) (1 . 2.4)) ( <> ) f, } } }
Lorsque plusieurs liaisons, quelle qu’en soit la nature, commencent au
même moment, jouer sur la propriété control-points est
impossible, et la commande \tweak inefficace. Vous pouvez
néanmoins influer sur la propriété tie-configuration de l’objet
TieColumn pour déterminer la ligne de départ et l’orientation.
Référence des propriétés internes : (internals)TieColumn section ‘TieColumn’ dans Référence des propriétés internes.
| [ < ] | [ > ] | [ << ] | [Plus haut] | [ >> ] | [Racine] | [Table des matières] | [Index] | [ ? ] |
@translationof Modifying broken spanners
Utilisation de \alterBroken |
| [ < ] | [ > ] | [ << ] | [Plus haut] | [ >> ] | [Racine] | [Table des matières] | [Index] | [ ? ] |
\alterBroken@translationof Using alterBroken
Lorsqu’un bandeau ou l’extension d’un objet rencontre un saut de ligne
ou une rupture, chacun de ses tronçons hérite des attributs de l’objet
originel. Par voie de conséquence, la modification d’une extension avec
rupture produira les mêmes effets sur chacun de ses segments. Dans
l’exemple ci-dessous, la modification apportée à thickness
s’applique aussi bien avant qu’après le saut de ligne.
\relative c'' { r2 \once\override Slur.thickness = 10 c8( d e f \break g8 f e d) r2 }
La commande \alterBroken permet de modifier indépendamment
l’apparence de chacune des parties d’un bandeau. Selon le cas, cette
commande génèrera soit un \override, soit un \tweak qui
s’appliquera à la propriété du bandeau.
La commande \alterBroken répond à la syntaxe :
[-]\alterBroken propriété valeurs élément |
L’argument valeurs est constitué d’une liste de valeurs, une pour
chaque tronçon. Lorsque élément est un nom d’objet graphique,
tels Slur ou Staff.PianoPedalBracket, il en résulte un
\override du type de grob spécifié. Lorsque élément
est une expression musicale comme « ( » ou « [ », en résulte cette même
expression musicale à laquelle s’applique un \tweak.
Le tiret introduisant la commande \alterBroken est impératif dans
le cadre d’un \tweak ; il est superflu pour un \override.
Dans sa variante \override, la commande \alterBroken peut
se préfixer d’un \once ou d’un \temporary qui seront
annulés par un \revert suivi de la propriété – voir
(extending)Fonctions de substitution intermédiaires section ‘Fonctions de substitution intermédiaires’ dans Extension de LilyPond.
Le code ci-dessous applique un \override indépendant à chacun
des segments du phrasé de l’exemple précédent :
\relative c'' { r2 \alterBroken thickness #'(10 1) Slur c8( d e f \break g8 f e d) r2 }
La commande \alterBroken peut s’utiliser avec tout objet étendu,
y compris Tie, PhrasingSlur, Beam et
TextSpanner. Par exemple, un éditeur préparant une édition
critique pourrait faire ressortir l’absence d’une partie de liaison de
phrasé dans l’une des sources, en optant pour un tracé pointillé du
seul segment ajouté. L’exemple ci-dessous illustre la manière de
procéder, ici avec la variante \tweak de la commande :
% The empty list is conveniently used below, because it is the % default setting of dash-definition, resulting in a solid curve. \relative { c''2-\alterBroken dash-definition #'(() ((0 1.0 0.4 0.75))) \(e \break g2 e\) }
Il est important de considérer que \alterBroken affectera à
chaque portion d’un bandeau interrompu la valeur correspondante de
valeurs. Si d’aventure il y a moins de valeurs que de tronçons,
toute portion additionnelle se verra assigner une liste vide. Ceci peut
conduire à des résultats inattendus dans le cas où la propriété de rendu
ne bascule pas sur une liste vide par défaut. En pareil cas, chaque
segment devrait se voir assigner une valeur appropriée.
Les sauts de ligne peuvent intervenir à différents endroits pour
répondre à des modifications de mise en forme. Les réglages adoptés par
\alterBroken peuvent devenir inadaptés si le bandeau n’est plus
rompu ou est découpé en plus de segments que prévu. L’introduction
explicite d’un \break peut alors pallier ces situations.
La commande \alterBroken est inopérante sur les propriétés d’un
bandeau qui sont traitées avant la procédure de saut de ligne, comme
direction.
Manuel d’extension : (extending)Retouches complexes section ‘Retouches complexes’ dans Extension de LilyPond.
| [ < ] | [ > ] | [ << ] | [Plus haut] | [ >> ] | [Racine] | [Table des matières] | [Index] | [ ? ] |
@translationof Unpure-pure containers
Les conteneurs requalifiants permettent de faciliter le calcul des
espacements en cas de modification du Y-axis – plus
particulièrement les composantes Y-offset et Y-extent – à
l’aide d’une fonction scheme en lieu et place de valeurs.
L’envergure verticale (Y-extent) de certains objets dépend de la
propriété stencil ; jouer sur leur stencil requiert alors une
intervention supplémentaire au niveau du Y-extent à l’aide d’un
conteneur transitoire. Lorsqu’une fonction affecte un Y-offset ou
un Y-extent, cela déclenche la détermination des sauts de ligne
de manière anticipée dans la séquence des traitements. Il en résulte
que cette opération n’est en fait pas exécutée ; elle renvoie
habituellement 0 ou '(0 . 0), ce qui peut engendrer des
collisions. Une fonction « pure » évitera d’avorter la construction
des propriétés ou objets, qui de ce fait verront leurs arguments liés à
la verticalité (Y-axis) correctement évalués.
Il existe actuellement une trentaine de fonctions que l’on peut qualifier de « pures ». Le recours à un conteneur transitoire permet de requalifier une fonction de telle sorte qu’elle soit reconnue comme « pure » et soit donc évaluée avant détermination des sauts de ligne – l’espacement horizontal sera de fait ajusté en temps et en heure. La fonction « impure » sera ensuite évaluée après le positionnement des sauts de ligne.
Note : Il n’est pas toujours facile d’avoir l’assurance qu’une
fonction soit qualifiée de « pure » ; aussi nous vous recommandons
d’éviter d’utiliser les objets Beam ou VerticalAlignment
lorsque vous désirez en créer une.
Un conteneur requalifiant se construit selon la syntaxe
(ly:make-unpure-pure-container f0 f1)
où f0 est une fonction prenant n arguments (n_>=_1),
le premier devant être l’objet en question ; il s’agit de la fonction
dont le résultat sera réutilisé. f1 est la fonction qui sera
qualifiée de « pure ». Elle prend n_+_2 arguments, le premier
devant être lui aussi l’objet en question, et les second et troisième
étant respectivement les « point de départ » (start) et « point
d’arrivée » (end).
start et end sont dans tous les cas des valeurs fictives qui
trouveront leur utilité dans le cas d’objets de type Spanner,
tels les soufflets (Hairpin) ou barres de ligature (Beam),
en retournant les différentes estimations de hauteur basées sur leurs
début et fin d’extension.
Viennent ensuite les autres arguments de la fonction initiale f0
– autrement dit aucun si n_=_1.
Les résultats de la deuxième fonction (f1) permettent une
approximation des valeurs qui seront ensuite utilisées par la fonction
initiale aux fins d’ajustement lors des phases ultérieures d’espacement.
#(define (square-line-circle-space grob) (let* ((pitch (ly:event-property (ly:grob-property grob 'cause) 'pitch)) (notename (ly:pitch-notename pitch))) (if (= 0 (modulo notename 2)) (make-circle-stencil 0.5 0.0 #t) (make-filled-box-stencil '(0 . 1.0) '(-0.5 . 0.5))))) squareLineCircleSpace = { \override NoteHead.stencil = #square-line-circle-space } smartSquareLineCircleSpace = { \squareLineCircleSpace \override NoteHead.Y-extent = #(ly:make-unpure-pure-container ly:grob::stencil-height (lambda (grob start end) (ly:grob::stencil-height grob))) } \new Voice \with { \remove "Stem_engraver" } \relative c'' { \squareLineCircleSpace cis4 ces disis d \smartSquareLineCircleSpace cis4 ces disis d }
La première mesure de l’exemple ci-dessus ne fait pas appel à un conteneur requalifiant ; le moteur d’espacement n’a donc aucune connaissance de la largeur des têtes de note et ne peut empêcher qu’elles chevauchent les altérations. Dans la deuxième mesure, par contre, le recours à un conteneur requalifiant informe le moteur d’espacement de la largeur des têtes de note ; les collisions sont alors évitées du fait de l’espace réservé à chacune des têtes.
Lorsqu’il s’agit de calculs simples, les fonctions, tant pour la partie
« pure » que pour la partie « impure », peuvent être identiques au
détail près du nombre d’arguments utilisés ou du domaine d’intervention.
Ce cas de figure étant relativement répandu,
ly:make-unpure-pure-container construira d’elle même cette
deuxième lorsqu’il ne sera fait appel qu’à une seule fonction en
argument.
Note : Le fait de qualifier une fonction de « pure » alors qu’elle ne l’est pas peut générer des résultats imprévisibles.
| [ < ] | [ > ] | [ << ] | [Plus haut] | [ >> ] |
Ce document a été généré le le 13 juillet 2020 par gub en utilisant texi2html 1.82.
Autres langues : English, català, deutsch, español, italiano, 日本語.
À propos de la sélection automatique de la langue.