Subject: doigté en couleur

From: Gerard <[email-masked]>
Date: Mon, 25 Jul 2022 09:10:01 +0200

Bonjour,

1. Suite au développement de Valentin et Jean dans le fil "ajout de 
paroles à une partition", je modifie le sujet pour qui voudrait 
retrouver le doigté en couleur !

2. Ayant tâté du tuto de Jean sur le scheme, j'ose faire un petit pas en 
intégrant des variables dans le code proposé par Valentin et Jean (choix 
de la couleur, taille et écart à la portée). Pas de quoi fanfaronner 
mais quand même :)

\version "2.22.2"

#(define ColorFingerT darkblue)
#(define ColorFingerP red)
#(define Taille 5)
#(define Ajustement -6)

\layout {
   \context {
     \Voice
     \override Fingering.before-line-breaking =
     #(lambda (grob)
        (ly:grob-set-property! grob 'Y-offset Ajustement))
     \override Fingering.stencil =
     #(lambda (grob)
        (let* ((ev (event-cause grob))
               (txt (fingering::calc-text grob))
               (dir (ly:event-property ev 'direction)))
          (grob-interpret-markup
           grob
           (case dir
             ((1) (markup #:with-color ColorFingerP #:underline #:fontsize Taille txt))
             ((-1) (markup #:with-color ColorFingerT #:fontsize Taille txt))
             ((()) txt)))))
   }
}

{
   c'^1
   d'_2
   e'_3
   f'^4
   g'_1
}

J'oserai bien une petite question : comment ^ et _ sont détournés de 
leur fonction première et modifient dir ? que font ev, event-cause... ?

Cordialement

Gérard

---

From: Valentin Villenave <[email-masked]>
Date: Mon, 25 Jul 2022 10:09:07 +0200

On 7/25/22, Gerard <[email-masked]> wrote:
> j'ose faire un petit pas en intégrant des variables

Très bonne idée ! Mais depuis quelques années (2.16 ?) on peut même
définir les variables Scheme avec la syntaxe LilyPond toute simple :

ColorFingerT = #darkblue

>      \override Fingering.stencil =

Ici lambda signifie : ce qui va suivre décrit une opération, qui va
s’appliquer à quelque chose que nous baptiserons "grob".

>                (dir (ly:event-property ev 'direction)))

Ici on définit trois petites variables temporaires :
- le "grob" lui-même n’est qu’un objet graphique, si nous voulons
obtenir la direction spécifiée il faut remonter à ce qui le cause
(l’événement) dans le code Lily.
- le texte du grob lui-même, qui est calculée par la fonction
fingering::calc-text.
- la direction, liée à l’événement en question (j’ai utilisé let*
plutôt que let parce que cela me permet d’utiliser une de mes
variables temporaires dans la définition d’une variable temporaire
subséquente.

>            grob

On crée un markup à l’endroit du "grob" en question.

>              ((-1) (markup #:with-color ColorFingerT #:fontsize Taille

En fonction de la valeur de "dir" (la propriété qu’on a récupérée de
l’événement qui cause le "grob", on va traiter le texte différemment.

Je ne sais pas si cela aide !

Cordialement,
-- V.

---

From: Gerard <[email-masked]>
Date: Mon, 25 Jul 2022 10:23:12 +0200

> définir les variables Scheme avec la syntaxe LilyPond toute simple :

C'est dans le tuto de Jean, je crois !

> Je ne sais pas si cela aide !

Sûrement ! je vais regarder mes différents codes pour essayer de comprendre

Merci !

G

---

From: Jean-Jacques Gerbaud <[email-masked]>
Date: Mon, 25 Jul 2022 17:32:56 +0200

> Je ne sais pas si cela aide !
ça aide surtout à délimiter les différentes étapes de Scheme et on voit
que ce n'est pas aussi simple... ce que je savais déjà ! :-)

-- 
JJG
Drôme provençale