En rouge et noir

Cher Jean (Gloire à son nom pour les siècles à venir), chère liste,

Je me cogne désormais au dernier souci suivant :

notes = \relative c{ \clef bass \time 3/4 \key e \minor
e4 fis g c,2 b4 ais fis' a, g2 fis4
}

\score {
\new Staff {\notes}
\lay %%% = \layout{... tout le code créé par Jean (mille ans de gloire sur sa descendance) ...}
}

me renvoie le code d'erreur suivant : "Dessin des systèmes...: In procedure scm-error in expression (scm-error (quote misc-error) #f ...):: no matching clause for ()"

Tout est Ok si on met \relative c'{...}, ou même si seule la première note est octaviée (e'4 fis, g...). Je comprends pas tout, mais il semble que le fonctionnement de \lay soit lié à la présence de ledger-lines sur la première note... S'il n'y en a pas, couik : pas content.

J'imagine, cafard ignorant que je suis en matière de Scheme, qu'il faudrait insérer avant (if (positive? ledger-Y-off...)) une condition pour traiter le premier signe. Mais là... ça me dépasse totalement...

Une idée ? Merci d'avance !

JMarc

Bonjour Jean-Marc,

Cher Jean (Gloire à son nom pour les siècles à venir), chère liste,

Je me cogne désormais au dernier souci suivant :

notes = \relative c{ \clef bass \time 3/4 \key e \minor
e4 fis g c,2 b4 ais fis' a, g2 fis4
}

\score {
\new Staff {\notes}
\lay %%% = \layout{... tout le code créé par Jean (mille ans de
gloire sur sa descendance) ...}
}

me renvoie le code d'erreur suivant : "Dessin des systèmes...<unnamed
>: In procedure scm-error in expression (scm-error (quote
misc-error) #f ...):<unnamed port>: no matching clause for ()"

Tout est Ok si on met \relative c'{...}, ou même si seule la première
note est octaviée (e'4 fis, g...). Je comprends pas tout, mais il
semble que le fonctionnement de \lay soit lié à la présence de
ledger-lines sur la première note... S'il n'y en a pas, couik : pas
content.

Bizarre, pour moi tout fonctionne… Le code complet que j'ai testé :

\version "2.23.9"

lay = \layout {
#(use-modules (ice-9 match))
\context {
\Staff
\override LedgerLineSpanner.stencil =
#(grob-transformer 'stencil
(lambda (grob original)
(if (ly:stencil? original)
(let ((expr (ly:stencil-expr original))
(X-ext (ly:stencil-extent original X))
(Y-ext (ly:stencil-extent original Y)))
(match expr
(('translate-stencil global-off ('combine-stencil .
ledgers))
(let* ((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)))
(() original)))
original)))
}
}

\score {
\relative c{ \clef bass \time 3/4 \key e \minor
e4 fis g c,2 b4 ais fis' a, g2 fis4
}
\lay
}

Et tout va bien aussi en 2.22. Quelle version utilises-tu ? Tu es
sûr que tu as bien pris le snippet avec la correction que j'ai
faite ?

Cordialement,
Jean

···

Le 14/06/2022 à 17:37, Librairie Les hirondelles a écrit :

Jean-Marc m'a donné un exemple en privé. C'est bête, il y a un
cas particulier s'il n'y a qu'une seule ligne supplémentaire…
La correction :

\version "2.22.2"

lay = \layout {
#(use-modules (ice-9 match))
\context {
\Staff
\override LedgerLineSpanner.stencil =
#(grob-transformer 'stencil
(lambda (grob original)
(if (ly:stencil? original)
(let ((expr (ly:stencil-expr original))
(X-ext (ly:stencil-extent original X))
(Y-ext (ly:stencil-extent original Y)))
(define (doit x)
(match x
(('translate-stencil global-off ('combine-stencil .
ledgers))
(let* ((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)))
((translate-stencil global-off lonely-stil)
(doit `(translate-stencil ,global-off
(combine-stencil ,lonely-stil))))
(() original)))
(doit expr))
original)))
}
}

\score {
{ c' }
\lay
}

\score {
{ c''' }
\lay
}

\score {
{ <c c'''> }
\lay
}

Cordialement,
Jean

···

Le 14/06/2022 à 18:22, Jean Abou Samra a écrit :

Bonjour Jean-Marc,

Le 14/06/2022 à 17:37, Librairie Les hirondelles a écrit :

Cher Jean (Gloire à son nom pour les siècles à venir), chère liste,

Je me cogne désormais au dernier souci suivant :

notes = \relative c{ \clef bass \time 3/4 \key e \minor
e4 fis g c,2 b4 ais fis' a, g2 fis4
}

\score {
\new Staff {\notes}
\lay %%% = \layout{... tout le code créé par Jean (mille ans de
gloire sur sa descendance) ...}
}

me renvoie le code d'erreur suivant : "Dessin des systèmes...<unnamed
>: In procedure scm-error in expression (scm-error (quote
misc-error) #f ...):<unnamed port>: no matching clause for ()"

Tout est Ok si on met \relative c'{...}, ou même si seule la première
note est octaviée (e'4 fis, g...). Je comprends pas tout, mais il
semble que le fonctionnement de \lay soit lié à la présence de
ledger-lines sur la première note... S'il n'y en a pas, couik : pas
content.

Bizarre, pour moi tout fonctionne… Le code complet que j'ai testé :

\version "2.23.9"

lay = \layout {
#(use-modules (ice-9 match))
\context {
\Staff
\override LedgerLineSpanner.stencil =
#(grob-transformer 'stencil
(lambda (grob original)
(if (ly:stencil? original)
(let ((expr (ly:stencil-expr original))
(X-ext (ly:stencil-extent original X))
(Y-ext (ly:stencil-extent original Y)))
(match expr
(('translate-stencil global-off ('combine-stencil .
ledgers))
(let* ((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)))
(() original)))
original)))
}
}

\score {
\relative c{ \clef bass \time 3/4 \key e \minor
e4 fis g c,2 b4 ais fis' a, g2 fis4
}
\lay
}

Et tout va bien aussi en 2.22. Quelle version utilises-tu ? Tu es
sûr que tu as bien pris le snippet avec la correction que j'ai
faite ?

Mon bon Jean, chère liste,

J'en suis sans voix. C'est au-delà de la louange !

Mille merci pour ton aide, Jean : ça fonctionne du tonnerre !

JMarc

···

Le 17/06/2022 à 00:00, Jean Abou Samra a écrit :

Le 14/06/2022 à 18:22, Jean Abou Samra a écrit :

Bonjour Jean-Marc,

Le 14/06/2022 à 17:37, Librairie Les hirondelles a écrit :

Cher Jean (Gloire à son nom pour les siècles à venir), chère liste,

Je me cogne désormais au dernier souci suivant :

notes = \relative c{ \clef bass \time 3/4 \key e \minor
e4 fis g c,2 b4 ais fis' a, g2 fis4
}

\score {
\new Staff {\notes}
\lay %%% = \layout{... tout le code créé par Jean (mille ans
de gloire sur sa descendance) ...}
}

me renvoie le code d'erreur suivant : "Dessin des
systèmes...<unnamed port>: In procedure scm-error in expression
(scm-error (quote misc-error) #f ...):<unnamed port>: no matching
clause for ()"

Tout est Ok si on met \relative c'{...}, ou même si seule la
première note est octaviée (e'4 fis, g...). Je comprends pas tout,
mais il semble que le fonctionnement de \lay soit lié à la présence
de ledger-lines sur la première note... S'il n'y en a pas, couik :
pas content.

Bizarre, pour moi tout fonctionne… Le code complet que j'ai testé :

\version "2.23.9"

lay = \layout {
#(use-modules (ice-9 match))
\context {
\Staff
\override LedgerLineSpanner.stencil =
#(grob-transformer 'stencil
(lambda (grob original)
(if (ly:stencil? original)
(let ((expr (ly:stencil-expr original))
(X-ext (ly:stencil-extent original X))
(Y-ext (ly:stencil-extent original Y)))
(match expr
(('translate-stencil global-off ('combine-stencil .
ledgers))
(let* ((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)))
(() original)))
original)))
}
}

\score {
\relative c{ \clef bass \time 3/4 \key e \minor
e4 fis g c,2 b4 ais fis' a, g2 fis4
}
\lay
}

Et tout va bien aussi en 2.22. Quelle version utilises-tu ? Tu es
sûr que tu as bien pris le snippet avec la correction que j'ai
faite ?

Jean-Marc m'a donné un exemple en privé. C'est bête, il y a un
cas particulier s'il n'y a qu'une seule ligne supplémentaire…
La correction :

\version "2.22.2"

lay = \layout {
#(use-modules (ice-9 match))
\context {
\Staff
\override LedgerLineSpanner.stencil =
#(grob-transformer 'stencil
(lambda (grob original)
(if (ly:stencil? original)
(let ((expr (ly:stencil-expr original))
(X-ext (ly:stencil-extent original X))
(Y-ext (ly:stencil-extent original Y)))
(define (doit x)
(match x
(('translate-stencil global-off ('combine-stencil
. ledgers))
(let* ((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)))
((translate-stencil global-off lonely-stil)
(doit `(translate-stencil ,global-off
(combine-stencil ,lonely-stil))))
(() original)))
(doit expr))
original)))
}
}

\score {
{ c' }
\lay
}

\score {
{ c''' }
\lay
}

\score {
{ <c c'''> }
\lay
}

Cordialement,
Jean