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

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

Re: Signets de pages pdf


From: Jean Abou Samra
Subject: Re: Signets de pages pdf
Date: Thu, 25 Aug 2022 10:51:43 +0200
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Thunderbird/91.12.0



Le 25/08/2022 à 10:01, Vincent Gay a écrit :
Le 24/08/2022 à 23:10, Jean Abou Samra a écrit :
Voici une solution de contournement possible, à insérer
au début du fichier :

Merci Jean, c'est presque parfait. J'imagine avec ça pouvoir faire un "vrai" RealBook d'environ 300 partitions. Je suis juste un peu inquiet sur le temps de compilation...

Le seul petit problème restant est l'ordre des items

La table des matières en page 1 est parfaitement ordonnée



Mais pas le contenu :



Le code

\version "2.23.11"




Aïe, j'espérais que tu ne tomberais pas dans ce problème-là...

C'est un deuxième bug. Le pire, c'est que c'est moi-même qui l'ai introduit en 2.23.11, en corrigeant un troisième bug. Allons bon. Je m'en suis rendu compte hier grâce à ce fil, et j'ai déjà posté un patch qui résout ce deuxième bug :

https://gitlab.com/lilypond/lilypond/-/merge_requests/1575

Une solution de contournement en attendant la 2.23.13 :


\paper {
  #(use-modules (ice-9 match)
                (srfi srfi-1))
  page-breaking =
    #(lambda (paper-book)
       (let* ((paper (ly:paper-book-paper paper-book))
              (parent (ly:output-def-parent paper))
              (top-paper (if (null? parent)
                             paper
                             parent))
              (alist-before (ly:output-def-lookup top-paper 'label-page-table))
              (result (ly:optimal-breaking paper-book))
              (alist-after (ly:output-def-lookup top-paper 'label-page-table))
              (alist-part (let loop ((after alist-after)
                                     (acc '()))
                            (if (eq? after alist-before)
                                (reverse! acc)
                                (loop (cdr after)
                                      (cons (car after)
                                            acc)))))
              (new-alist (let loop ((alist alist-part)
                                    (acc '())
                                    (same-pgnum '())
                                    (last-pgnum #f))
                           (match alist
                             (()
                              (append-reverse same-pgnum acc))
                             (((label . page) . rest)
                              (if (or (not last-pgnum)
                                      (eqv? last-pgnum page))
                                  (loop rest
                                        acc
                                        (acons label page same-pgnum)
                                        page)
                                  (loop rest
                                        (append-reverse same-pgnum acc)
                                        (list (cons label page))
                                        page)))))))
         (ly:output-def-set-variable! top-paper 'label-page-table (append-reverse new-alist alist-before))
         result))
}





reply via email to

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