lilypond-user-fr
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: En rouge et noir


From: Jean Abou Samra
Subject: Re: En rouge et noir
Date: Sun, 24 Apr 2022 19:39:28 +0200
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Thunderbird/91.7.0

Bonjour,


Le 24/04/2022 à 19:07, Jean-Marc Legrand - Éditions IN NOMINE a écrit :
Salutations à toute la troupe, de la part d'un lointain revenant !



Sur cette liste, personne n'a peur des revenants :-)


Un petit souci que je ne parviens pas à résoudre.

Voici un exemple de code, avec 2 voix sur une même portée, de 2 couleurs différentes. Vous le verrez de suite, mon souci est que, si les ledgerlines sont bien rouges sur la voix 1 seule, dès que la voix 2 arrive, elles redeviennent noires. LedgerLineSpanner.color est une propriété de Staff, ce qui explique cela... Auriez-vous une idée de sioux pour contourner ceci ?

PS : j'ai écumé les listes, et il y a des réponses approchantes, mais pas situation identiques (mise en parallèle de 2 voix sur une même Staff)... L'idée serait peut-être de dire, via une fonction Scheme : si ce sont des ledger lines supérieures, en rouge, sinon, en noir. Chapeau bas à la personne qui saurait me faire une petite fonction comme celle-ci !


Merci d'avance !

JMarc, toujours éditeur, mais surtout libraire désormais... et breton, qui plus est !



Bon, je propose ma solution :

\version "2.22.2"

\layout {
  #(use-modules (ice-9 match))
  \context {
    \Staff
    \override LedgerLineSpanner.stencil =
      #(grob-transformer 'stencil
        (lambda (grob original)
          (match-let*
              ((expr (ly:stencil-expr original))
               (X-ext (ly:stencil-extent original X))
               (Y-ext (ly:stencil-extent original Y))
               (('translate-stencil global-off ('combine-stencil . ledgers)) expr)
               (new-ledgers
                (map
                 (lambda (ledger)
                   (match-let
                       ((('translate-stencil (0.0 . ledger-Y-off) ledger-expr) ledger))
                     (if (positive? ledger-Y-off)
                         `(color ,(css-color "red")
                                 ,ledger)
                         ledger)))
                 ledgers))
               (new-expr
                `(translate-stencil ,global-off (combine-stencil . ,new-ledgers))))
            (ly:make-stencil new-expr X-ext Y-ext))))

  }
}

\relative \new Staff << { e''8 g c e g e c g e } \\ { b,8 a g f g a b c d  } >>


Je tiens tout de même à insister sur deux points :

1. Ne dites à personne que je vous ai montré ce genre de truc.
Si Jean Abou Samra apprenait que je poste des hacks pareils,
il m'en voudrait.

2. Veuillez garder en tête que ce code est fortement dépendant
de détails internes, et qu'à ce titre il est possible qu'il
ne fonctionne plus dans une version ultérieure (même si, a
priori, il ne devrait pas être trop difficile de l'adapter).

Cordialement,
Jean



reply via email to

[Prev in Thread] Current Thread [Next in Thread]