Subject: Parution de LilyPond 2.23.12

From: Jean Abou Samra <[email-masked]>
Date: Wed, 24 Aug 2022 10:04:35 +0200

Bonjour à toutes et à tous,

La version 2.23.12 de LilyPond vient d'être publiée. Comme toutes
les versions de la série 2.23.x, c'est une version instable de
développement, qui contient les changements effectués jusqu'ici en
vue de la prochaine version stable, LilyPond 2.24. Même si je ne
ferai pas une annonce à chaque nouvelle version (il y en a à peu près
toutes les quatre semaines), les changements dans celle-ci valent bien
un post.

La nouveauté la plus notable dans cette version est l'introduction
d'un moteur de rendu fondé sur la bibliothèque Cairo. Je m'explique.
Actuellement, pour produire des fichiers PDF, LilyPond génère sa
sortie au format PostScript et utilise l'outil GhostScript pour convertir
le PostScript en PDF. Il y a également un deuxième mode de sortie
qui génère du SVG. Depuis déjà plus d'un an a été développé un
mode de sortie qui ne passe pas par le PostScript mais génère
directement du PDF ou du SVG, à travers une bibliothèque nommée
Cairo. L'avantage se voit surtout sur la sortie SVG, qui est
incomparablement plus rapide. De plus, elle intègre les polices
au fichier SVG, ce qui assure qu'il peut être lu correctement
dans tous les navigateurs sur tous les systèmes.

Pour compiler un fichier avec Cairo, il faut lancer LilyPond
avec une option :

lilypond -dbackend=cairo fichier.ly

Pour générer du SVG :

lilypond --svg -dbackend=cairo fichier.ly

L'option -dbackend=cairo est toujours en développement, quelques
fonctionnalités n'y sont pas encore présentes (comme l'option
-dembed-source-code).

Comme d'habitude, il y a d'autres nouveautés, toutes listées ici :

https://lilypond.org/doc/v2.23/Documentation/changes/index.html

Je signale que deux d'entre elles ont pour origine des discussions
sur cette liste : l'option \paper { bookpart-level-page-numbering = ##t }
pour redémarrer la numérotation des pages à chaque nouveau \bookpart
(voir 
https://lists.gnu.org/archive/html/lilypond-user-fr/2022-07/msg00031.html)
et la commande \staffHighlight, qui colorie une ou plusieurs portées
(voir 
https://lists.gnu.org/archive/html/lilypond-user-fr/2021-12/msg00037.html
et https://myrealbook.vintherine.org/un-peu-de-couleur.html).

Les téléchargements sont par ici :

https://lilypond.org/development

et la procédure d'installation est décrite ici :

https://lilypond.org/doc/v2.23/Documentation/learning/installing.html

À bientôt sur la liste,
Jean

---

From: Ya Gloops <[email-masked]>
Date: Wed, 24 Aug 2022 14:02:53 +0000 (UTC)

Super Jean Merci pour la nouvelle...
Juste une petite déception car ta fonction "Numérotation des pages" fonctionnait super même avec la version "2.23.11" mais plus avec la "2.23.12" 
Gilles

\version "2.23.11"
%\version "2.23.12"

\paper {
  make-header =
    #(lambda (layout scopes page-number is-last-bookpart is-bookpart-last-page)
       ((marked-up-headfoot 'oddHeaderMarkup 'evenHeaderMarkup)
        layout scopes
        (if (ly:output-def-lookup layout 'number-pages-per-bookpart #f)
            (1+ (- page-number (ly:output-def-lookup layout 'first-page-number)))
            page-number)
        is-last-bookpart is-bookpart-last-page))
}

#(define-markup-command (page-number layout props) ()
   (if (ly:output-def-lookup layout 'print-page-total #f)
       (let* ((make-stil
               (lambda (total-string)
                 (stack-stencils
                  X
                  RIGHT
                  0.0
                  (map (lambda (m)
                         (interpret-markup layout props m))
                         (list (chain-assoc-get 'page:page-number-string props)
                               "/"
                               total-string)))))
              (gauge-stil (make-stil "0")))
         (ly:make-stencil
          `(delay-stencil-evaluation
            ,(delay
              (ly:stencil-expr (make-stil (ly:output-def-lookup layout 'page:page-total)))))
          (ly:stencil-extent gauge-stil X)
          (ly:stencil-extent gauge-stil Y)))
       (interpret-markup layout props (make-fromproperty-markup 'page:page-number-string))))

\paper {
  #(use-modules (srfi srfi-2))
  page-post-process =
  #(lambda (paper pages)
     (let ((per-bookpart (ly:output-def-lookup paper 'number-pages-per-bookpart #f)))
       (for-each
        (lambda (page)
          (let ((local-paper
                 (or (and-let* (((not per-bookpart))
                                (parent (ly:output-def-parent paper))
                                ((not (null? parent))))
                        parent)
                     paper))
                (page-number (ly:prob-property page 'page-number)))
            (ly:output-def-set-variable!
             local-paper
             'page:page-total
             (number->string
              (max (if per-bookpart
                       (1+ (- page-number (ly:output-def-lookup local-paper 'first-page-number)))
                       page-number)
                   (string->number (ly:output-def-lookup local-paper 'page:page-total "0")))))))
       pages)))

  oddHeaderMarkup = \markup {
    \if \should-print-page-number {
      \fill-line { \null \concat { \page-number } }
    }
  }

  evenHeaderMarkup = \markup {
    \if \should-print-page-number {
      \fill-line { \concat { \page-number } \null }
    }
  }
}

%% Fichier principal

\paper {
  number-pages-per-bookpart = ##t %% à décommenter si souhaité
  print-page-total = ##t %% à enlever si non souhaité
  print-first-page-number = ##t
}

\header { title = "Essai numérotation bookparts" }

%\bookpart {
    \score {
      \new Staff \with { instrumentName = "Part 1" }
      { c''1 \pageBreak 1 \pageBreak 1 \label bookpartI }
    }
%}

%\bookpart {
    \score {
      \new Staff \with { instrumentName = "Part 2" }
      { c''1 \pageBreak c''1 \label bookpartII }
    }
%}

Le mercredi 24 août 2022 à 10:05:13 UTC+2, Jean Abou Samra <[email-masked]> a écrit : 

Pour générer du SVG :

À bientôt sur la liste,
Jean

---

From: Jean Abou Samra <[email-masked]>
Date: Wed, 24 Aug 2022 19:05:39 +0200

> Juste une petite déception car ta fonction "Numérotation des pages" fonctionnait super même avec la version "2.23.11" mais plus avec la "2.23.12"

En effet, car en ajoutant bookpart-level-page-numbering, j'ai fait
quelques simplifications, qui nécessitent des ajustements dans ce
code.

En plus, comme bookpart-level-page-numbering est justement maintenant
présente dans LilyPond, il n'y a plus besoin de la partie du code
qui l'implémente, ce qui laisse juste l'implémentation de print-page-total.

Note que dans le code initial que j'avais donné, la variable pour la
numérotation au niveau des \bookpart s'appelait number-pages-per-bookpart,
mais en l'intégrant à LilyPond, j'ai fait en sorte qu'il soit en plus
possible de la régler au niveau de chaque bookpart, donc le « per-bookpart »
me paraissait ne plus coller. Je l'ai renommée en bookpart-level-page-numbering.
Par conséquent, en 2.23.12, il faut utiliser le code modifié ci-dessous,
et rechercher/remplacer pour changer number-pages-per-bookpart en
bookpart-level-page-numbering.

\version "2.23.12"

\paper {
   #(use-modules (srfi srfi-2) ; and-let*
                 (lily page))
   page-post-process =
   #(lambda (paper pages)
      (let ((per-bookpart (ly:output-def-lookup paper 'bookpart-level-page-numbering #f)))
        (for-each
         (lambda (page)
           (let ((numbering-paper
                  (or (and-let* (((not per-bookpart))
                                 (parent (ly:output-def-parent paper))
                                 ((not (null? parent))))
                         parent)
                      paper))
                 (page-number (page-property page 'page-number)))
             (ly:output-def-set-variable!
              numbering-paper
              'page:page-total
              (number->string
               (max (if per-bookpart
                        (1+ (- page-number (ly:output-def-lookup numbering-paper 'first-page-number)))
                        page-number)
                    (string->number (ly:output-def-lookup numbering-paper 'page:page-total "0")))))))
        pages)))
   oddHeaderMarkup = \markup {
     \if \should-print-page-number {
       \fill-line { \null \concat { \page-number } }
     }
   }
   evenHeaderMarkup = \markup {
     \if \should-print-page-number {
       \fill-line { \concat { \page-number } \null }
     }
   }
}