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

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

Numérotation des pages


From: Vincent Gay
Subject: Numérotation des pages
Date: Sun, 10 Jul 2022 10:27:53 +0200
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Thunderbird/91.10.0

Bonjour à toutes et à tous

Pierre Perol-Schneider m'avait donné une astuce pour redémarrer la numérotation des pages à chaque \bookpart. Cela fonctionnait à merveille. Mais ça ne fonctionne plus !

J'ai ré-essayé avec des fichiers datant de quelques mois (28/12/2021) compilés en 2.22.1 et recompilés aujourd'hui en 2.22.2 sans modifier la moindre ligne de code : pas de message d'erreur mais aucun résultat !

Si quelque bonne âme peut m'expliquer

voici un exemple "minimaliste" :

\version "2.22.2"
#(define part-first-pages '(0))

#(define (part-first-page? layout props)
  (= (chain-assoc-get 'page:page-number props -1)
     (ly:output-def-lookup layout 'first-page-number)))

#(define (reset-part-first-page layout props arg)
"Returns page-number-string, starting every bookpart with page-number 0.
Relying on the extern defined `part-first-pages'.
"
  (set! props (prepend-alist-chain 'part-first-page '(0) props))

  (let* ((real-page-number (chain-assoc-get 'page:page-number props -1))
         (parts-page-number (- real-page-number (car part-first-pages))))

    (if (part-first-page? layout props)
        (set! part-first-pages (cons (1- real-page-number) part-first-pages)))

    (set! props
      (cons
        (list
          (cons 'page:page-number-string (number->string parts-page-number))
          (cons 'page:page-number parts-page-number))
        props))
    (interpret-markup layout props arg)))

#(define ((print-part-first-page-as-one number-type) layout props arg)

  (set! props
    (cons
      (list
        (cons 'page:page-number-string
              (let ((page-number
                     (chain-assoc-get 'page:page-number props -1)))
                ;(if (<= page-number 0) ""
                (cond ((and (eq? number-type 'roman-lower) (> page-number 0))
                       (fancy-format #f "~(~@r~)" page-number))
                      ((and (eq? number-type 'roman-upper) (> page-number 0))
                       (fancy-format #f "~@r" page-number))
                          ((eq? number-type 'arabic)
                           (number->string page-number))
                          (else (number->string page-number)))));)
        (cons 'page:page-number
              (chain-assoc-get 'page:page-number props -1)))
      props))
  (interpret-markup layout props arg))

\paper {
  print-first-page-number = ##t
  oddMarkup =
  #(define-scheme-function (number-type)(symbol?)
    #{
      \markup
        \column {
          \fill-line {
            " "
            \on-the-fly #not-part-first-page \fromproperty #'header:instrument
              %% use in this order:
              \on-the-fly #reset-part-first-page
              \on-the-fly #(print-part-first-page-as-one number-type)
              \on-the-fly #print-page-number-check-first
              \fromproperty #'page:page-number-string
          }
        }
    #})

  evenMarkup =
  #(define-scheme-function (number-type)(symbol?)
    #{
      \markup
        \column {
          \fill-line {
              %% use in this order:
              \on-the-fly #reset-part-first-page
              \on-the-fly #(print-part-first-page-as-one number-type)
              \on-the-fly #print-page-number-check-first
              \fromproperty #'page:page-number-string
            \on-the-fly #not-part-first-page \fromproperty #'header:instrument
            " "
          }
        }
    #})
 }

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

\book {
  \bookpart {
    \score {
      \new Staff \with { instrumentName = "Part 1" }
      { c''1 }
    }
  }
  \bookpart {
    \score {
      \new Staff \with { instrumentName = "Part 2" }
      { c''1 }
    }
  }
}

--
Vincent Gay
Envoyé depuis mon saxo-phone :)
https://myrealbook.vintherine.org/ - http://photos.vintherine.org/




reply via email to

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