Subject: Fonte pour basse chiffrée

From: Bernard Meylan <[email-masked]>
Date: Wed, 21 Dec 2022 00:04:09 +0100

Bonsoir/jour à tout le groupe!

Je viens de passer à la version 2.24 de Lilypond et je me trouve sans 
solution en ce qui concerne la fonte que j'utilisais avec ma précédente 
version (2.22.2).

Lorsque j'indiquais, dans la 2.22.2:

\override Staff.BassFigure.font-name = #"Garamond Premier Pro"
\override Staff.BassFigure.font-size = # 4

les chiffres étaient correctement rendu en Garamond et les altérations 
gardaient la fonte Emmentaler.

Maintenant, sous 2.24, avec:

\override BassFigure.font-name = #"Garamond Premier Pro"
\override BassFigure.font-size = #4

les chiffres ET les altérations sont rendus en Garamond… qui n'est 
évidemment pas adapté en ce qui concerne les dièses, bémols et bécarres; 
ils existent, mais sont très moches. Est-il possible d'indiquer qqchose 
comme:

\override BassFigureAlteration.font-name = #"Emmentaler"

afin de retrouver les altérations Emmentaler?

Bernard

---

From: Jean Abou Samra <[email-masked]>
Date: Wed, 21 Dec 2022 00:36:56 +0100

Le 21/12/2022 à 00:04, Bernard Meylan a écrit :
> Est-il possible d'indiquer qqchose comme:
>

Houlàlà, oui, c'est un vrai problème. Je viens de lui créer une page de 
bug :

https://gitlab.com/lilypond/lilypond/-/issues/6487

Pour l'instant, je n'ai rien de mieux à vous proposer que ceci, un gros
bout de code tiré du code source et légèrement modifié.

Cordialement,
Jean

\version "2.24.0"

#(define figbass-accidental-alist
   '((-1 . #x1d12b)
     (-1/2 . #x266d)
     (0 . #x266e)
     (1/2 . #x266f)
     (1 . #x1d12a)))

#(define (modified-format-bass-figure figure event context)
   (let* (;; User properties controlling the figured bass layout.
          (large-number-alignment
           (ly:context-property context 'figuredBassLargeNumberAlignment))
          (figbass-alist
           (ly:context-property context 'figuredBassPlusStrokedAlist))
          (alt-dir
           (ly:context-property context 'figuredBassAlterationDirection))
          (plus-dir
           (ly:context-property context 'figuredBassPlusDirection))

          (augmented (ly:event-property event 'augmented))

          ;; The digit(s), horizontally positioned, or #f.
          (fig-markup
           (if (number? figure)
               ((if (<= 10 figure)
                    (lambda (y)
                      (make-align-on-other-markup
                       X
                       large-number-alignment (make-number-markup "1")
                       large-number-alignment y))
                    identity)
                (cond
                 ((eq? #t (ly:event-property event 'diminished))
                  (make-slashed-digit-markup figure))
                 ((eq? #t (ly:event-property event 'augmented-slash))
                  ;; Use specially stroked digit if available and wanted.
                  (or (and-let* (((<= 6 figure 9))
                                 (glyph (assv-ref figbass-alist figure)))
                        (make-musicglyph-markup glyph))
                      (make-backslashed-digit-markup figure)))
                 ((eq? #t augmented)
                  ;; Use special digit with plus if available and wanted.
                  (or (and-let* (((>= 5 figure 2))
                                 ((eqv? plus-dir RIGHT))
                                 (glyph (assv-ref figbass-alist figure)))
                        (set! augmented #f)
                        (make-musicglyph-markup glyph))
                      (make-number-markup (number->string figure 10))))
                 (else (make-number-markup (number->string figure 10)))))
               #f))

          (alt (ly:event-property event 'alteration))
          (alt-bracket (ly:event-property event 'alteration-bracket #f))
          ;; The alteration, probably bracketed but not positioned yet,
          ;; or #f.
          (alt-markup
           (if (number? alt)
               ((if alt-bracket make-bracket-markup identity)
                ;;;; ====== Modification pour éviter le changement de 
police =====
                (make-override-markup
                 '(font-name . #f)
                 (make-number-markup
                  (ly:wide-char->utf-8
                   (or
                    (assv-ref figbass-accidental-alist alt)
                    (begin
                      (ly:warning
                       (G_ "no accidental glyph found for alteration ~a")
                       alteration)
                      #\?))))))
               #f))

          (plus-markup (if (eq? #t augmented)
                           (make-number-markup "+")
                           #f)))

     (if (and (not alt-markup) alt-bracket)
         (ly:programming-error
          "Cannot put brackets around non-existent bass figure 
alteration."))

     ;; We treat a solitary alteration similarly to digits.
     (if (and (not fig-markup) alt-markup)
         (begin
           (set! fig-markup
                 (make-align-on-other-markup
                  X
                  CENTER (make-number-markup "1")
                  CENTER alt-markup))
           (set! alt-markup #f)))

     ;; We treat a solitary plus similarly to digits (but enlarged).
     (if (and (not fig-markup) plus-markup)
         (begin
           (set! fig-markup
                 (make-align-on-other-markup
                  Y
                  CENTER (make-number-markup "1")
                  CENTER (make-align-on-other-markup
                          X
                          CENTER (make-number-markup "1")
                          CENTER (make-fontsize-markup 3 plus-markup))))
           (set! plus-markup #f)))

     ;; The alteration gets attached either to the left or the right of
     ;; the digit(s).
     (if alt-markup
         (set! fig-markup
               (make-put-adjacent-markup
                X (if (number? alt-dir)
                      alt-dir
                      LEFT)
                fig-markup
                (make-pad-x-markup 0.1 alt-markup))))

     ;; Ditto for the plus mark.
     (if plus-markup
         (set! fig-markup
               (if fig-markup
                   (make-put-adjacent-markup
                    X (if (number? plus-dir)
                          plus-dir
                          LEFT)
                    fig-markup plus-markup)
                   plus-markup)))

     (if (markup? fig-markup)
         (make-fontsize-markup -5 fig-markup)
         (make-null-markup))))

\layout {
   \context {
     \Score
     figuredBassFormatter = #modified-format-bass-figure
   }
}

\figures {
   \override BassFigure.font-name = "DejaVu Sans"
   <7+>
}

---

From: Bernard Meylan <[email-masked]>
Date: Wed, 21 Dec 2022 01:06:24 +0100

Merci Jean pour votre solution. Elle marche bien, à ceci près:

1. les altérations (maintenant rendues parfaitement en Emmentaler) sont 
énormes à côté des chiffres; y a t-il moyen de contrôler leur chasse 
(grosseur) dans le code que vous avez suggéré?

2. elles sont aussi «grasses» (bold en anglais), comme on le ferait avec 
un traitement de texte, mais un gras «flou» typique du fait que le 
traitement de texte, n'ayant pas de version grasse de la police, utilise 
un pis-aller, il la «grassifie» artificiellement. Les dièses et bémols 
de la basse chiffrée sont gras et flous, ce qui n'était pas le cas de 
leurs prédécesseurs, sous 2.22.

Bernard

---

From: Jean Abou Samra <[email-masked]>
Date: Wed, 21 Dec 2022 11:48:45 +0100

Le 21/12/2022 à 01:06, Bernard Meylan a écrit :
> 1. les altérations (maintenant rendues parfaitement en Emmentaler) 
> sont énormes à côté des chiffres; y a t-il moyen de contrôler leur 
> chasse (grosseur) dans le code que vous avez suggéré?

Oui, voir ci-dessous.

> 2. elles sont aussi «grasses» (bold en anglais), comme on le ferait 
> avec un traitement de texte, mais un gras «flou» typique du fait que 
> le traitement de texte, n'ayant pas de version grasse de la police, 
> utilise un pis-aller, il la «grassifie» artificiellement. Les dièses 
> et bémols de la basse chiffrée sont gras et flous, ce qui n'était pas 
> le cas de leurs prédécesseurs, sous 2.22.

Alors ça, je ne sais pas si le développeur qui a révisé la basse
chiffrée va être ravi de l'entendre, car ce n'est pas un gras
artificiel, ce sont de nouveaux glyphes d'altération spécialement
prévus et adaptés pour la basse chiffrée... Ils sont censés
correspondre mieux aux éditions classiques, où la basse chiffrée
était imprimée beaucoup plus petit que ce que faisait LilyPond
2.22 par défaut. Il se peut par contre qu'ils aient l'air moche pour
vous à cause de la taille générale, car ils sont plutôt faits
pour des tailles petites, et effectivement plus gras en conséquence.

\version "2.24.0"

\markuplist \override #'(padding . 2) \table #(list CENTER CENTER) {
   \bold { "Normal" "Basse chiffrée" }
   \general-align #Y #CENTER {
     \musicglyph "accidentals.sharp"
     \number ♯
     \musicglyph "accidentals.flat"
     \number ♭
     \musicglyph "accidentals.natural"
     \number ♮
   }
}

Bien sûr, on peut toujours le changer, voici une version révisée
du code, avec une partie à ajuster où vous pouvez éditer le \markup :

\version "2.24.0"

#(define figbass-accidental-alist
   '((-1 . "accidentals.flatflat")
     (-1/2 . "accidentals.flat")
     (0 . "accidentals.natural")
     (1/2 . "accidentals.sharp")
     (1 . "accidentals.doublesharp")))

          (alt (ly:event-property event 'alteration))
          (alt-bracket (ly:event-property event 'alteration-bracket #f))
          ;; The alteration, probably bracketed but not positioned yet,
          ;; or #f.
          (alt-markup
           (if (number? alt)
               ((if alt-bracket make-bracket-markup identity)
                (let ((glyph
                       (or (assv-ref figbass-accidental-alist alt)
                           (begin
                             (ly:warning
                              (G_ "no accidental glyph found for 
alteration ~a")
                              alteration)
                             #\?))))
                  ;;; ====== À ajuster ==========
                  #{
                    \markup
                    \override #'(font-name . #f)
                    \fontsize #-3
                    \align-on-other #Y #CENTER #fig-markup #CENTER
                    \musicglyph #glyph
                  #}))
               #f))

     (if (markup? fig-markup)

\layout {
   \context {
     \Score

\figures {
   \override BassFigure.font-name = "DejaVu Sans"
   <7+> <7-> <7!> <7--> <7++>
}

Cordialement,
Jean

---

From: Bernard Meylan <[email-masked]>
Date: Wed, 21 Dec 2022 20:05:08 +0100

La solution que vous proposez marche avec un petit bémol (si j'ose dire):

lorsqu'on utilise un chiffrage comme celui-ci <4+> le rendu est parfait 
(4#); mais lorsqu'on utilise l'altération seule <_+> (#) Lilypond donne 
un rendu exact, mais accompagné de ce message d'erreur:

/mnt/Linux-Cagibi/Lily/Strozzi/Sacri_musicali_affetti/probleme.ly:79:47: 
Erreur : n'est pas un « markup »

\align-on-other #Y #CENTER

#fig-markup #CENTER

/home/bameylan/lilypond-2.24.0/share/lilypond/2.24.0/ly/init.ly:65:2: 
Erreur : erreur dans #{ ... #}

#

(let ((book-handler (if (defined? 'default-toplevel-book-handler)

Voici le fichier «probleme.ly»

\version "2.24.0" #(set-global-staff-size 20) \header { % Supprimer le 
pied de page par défaut tagline = ##f } #(define 
figbass-accidental-alist '((-1 . "accidentals.flatflat") (-1/2 . 
"accidentals.flat") (0 . "accidentals.natural") (1/2 . 
"accidentals.sharp") (1 . "accidentals.doublesharp"))) #(define 
(modified-format-bass-figure figure event context) (let* (;; User 
properties controlling the figured bass layout. (large-number-alignment 
(ly:context-property context 'figuredBassLargeNumberAlignment)) 
(figbass-alist (ly:context-property context 
'figuredBassPlusStrokedAlist)) (alt-dir (ly:context-property context 
'figuredBassAlterationDirection)) (plus-dir (ly:context-property context 
'figuredBassPlusDirection)) (augmented (ly:event-property event 
'augmented)) ;; The digit(s), horizontally positioned, or #f. 
(fig-markup (if (number? figure) ((if (<= 10 figure) (lambda (y) 
(make-align-on-other-markup X large-number-alignment (make-number-markup 
"1") large-number-alignment y)) identity) (cond ((eq? #t 
(ly:event-property event 'diminished)) (make-slashed-digit-markup 
figure)) ((eq? #t (ly:event-property event 'augmented-slash)) ;; Use 
specially stroked digit if available and wanted. (or (and-let* (((<= 6 
figure 9)) (glyph (assv-ref figbass-alist figure))) 
(make-musicglyph-markup glyph)) (make-backslashed-digit-markup figure))) 
((eq? #t augmented) ;; Use special digit with plus if available and 
wanted. (or (and-let* (((>= 5 figure 2)) ((eqv? plus-dir RIGHT)) (glyph 
(assv-ref figbass-alist figure))) (set! augmented #f) 
(make-musicglyph-markup glyph)) (make-number-markup (number->string 
figure 10)))) (else (make-number-markup (number->string figure 10))))) 
#f)) (alt (ly:event-property event 'alteration)) (alt-bracket 
(ly:event-property event 'alteration-bracket #f)) ;; The alteration, 
probably bracketed but not positioned yet, ;; or #f. (alt-markup (if 
(number? alt) ((if alt-bracket make-bracket-markup identity) (let 
((glyph (or (assv-ref figbass-accidental-alist alt) (begin (ly:warning 
(G_ "no accidental glyph found for alteration ~a") alteration) #\?)))) 
;;; ====== À ajuster ========== #{ \markup \override #'(font-name . #f) 
\fontsize #-3 \align-on-other #Y #CENTER #fig-markup #CENTER \musicglyph 
#glyph #})) #f)) (plus-markup (if (eq? #t augmented) (make-number-markup 
"+") #f))) (if (and (not alt-markup) alt-bracket) (ly:programming-error 
"Cannot put brackets around non-existent bass figure alteration.")) ;; 
We treat a solitary alteration similarly to digits. (if (and (not 
fig-markup) alt-markup) (begin (set! fig-markup 
(make-align-on-other-markup X CENTER (make-number-markup "1") CENTER 
alt-markup)) (set! alt-markup #f))) ;; We treat a solitary plus 
similarly to digits (but enlarged). (if (and (not fig-markup) 
plus-markup) (begin (set! fig-markup (make-align-on-other-markup Y 
CENTER (make-number-markup "1") CENTER (make-align-on-other-markup X 
CENTER (make-number-markup "1") CENTER (make-fontsize-markup 3 
plus-markup)))) (set! plus-markup #f))) ;; The alteration gets attached 
either to the left or the right of ;; the digit(s). (if alt-markup (set! 
fig-markup (make-put-adjacent-markup X (if (number? alt-dir) alt-dir 
LEFT) fig-markup (make-pad-x-markup 0.1 alt-markup)))) ;; Ditto for the 
plus mark. (if plus-markup (set! fig-markup (if fig-markup 
(make-put-adjacent-markup X (if (number? plus-dir) plus-dir LEFT) 
fig-markup plus-markup) plus-markup))) (if (markup? fig-markup) 
(make-fontsize-markup 0 fig-markup) (make-null-markup)))) global = { 
\key c \major \time 4/4 } bcMusic = \relative c { \global c4 c c d e2 d 
} bcFigures = \figuremode { \global \set figuredBassAlterationDirection 
= #RIGHT \override BassFigure.font-name = #"Garamond Premier Pro" % 
\override BassFigure.font-size = #2 <4>4 <4+> <_-> } \score { << \new 
FiguredBass \bcFigures \new Staff { \clef bass \bcMusic } >> \layout { 
\context { \Score figuredBassFormatter = #modified-format-bass-figure } } }

En résumé: le chiffre seul fonctionne, le chiffre avec une altération 
quelle qu'elle soit aussi, mais l'altération seule provoque le message 
d'erreur; mais je le répète, le rendu est parfait.

Bernard

---

From: Jean Abou Samra <[email-masked]>
Date: Wed, 21 Dec 2022 20:08:20 +0100

> d'erreur; mais je le répète, le rendu est parfait.

Ça, c'est ce qui arrive quand on va trop vite…

\version "2.24.0"

#(set-global-staff-size 20)

\header {
   % Supprimer le pied de page par défaut
   tagline = ##f
}

                    \align-on-other #Y #CENTER #(or fig-markup #{ 
\markup \number "1" #}) #CENTER
                    \musicglyph #glyph
                  #}))
               #f))

     (if (markup? fig-markup)
         (make-fontsize-markup 0 fig-markup)
         (make-null-markup))))

global = {
   \key c \major
   \time 4/4
}

bcMusic = \relative c {
   \global
   c4 c c d e2 d

}

bcFigures = \figuremode {
   \global
   \set figuredBassAlterationDirection = #RIGHT
   \override BassFigure.font-name = #"Garamond Premier Pro"
   % \override BassFigure.font-size = #2

   <4>4 <4+> <_->

}

\score {
   <<
     \new FiguredBass \bcFigures
     \new Staff { \clef bass \bcMusic }
   >>
   \layout {
     \context {
       \Score
       figuredBassFormatter = #modified-format-bass-figure
     }
   }
}