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

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

Re: Numérotation des pages


From: Jean Abou Samra
Subject: Re: Numérotation des pages
Date: Sat, 16 Jul 2022 00:18:53 +0200
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Thunderbird/91.11.0



Le 15/07/2022 à 18:48, Vincent Gay a écrit :
Heu... presque parfait, juste un tout petit bug...

si  dans l'exemple donné je mets
\paper {
  number-pages-per-bookpart = ##f
}

je numéro de page est correctement calculé mais pas le total des pages

Voici ce que j'obtiens  :
1er bookpart 1/3 2/3 3/3
2ème bookpart 4/5 5/5



Ça, c'est ce qui arrive quand on code trop tard le soir…
Je me reprends :


\version "2.22.2"

%% Fichier inclus

\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 {
  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
                 (if per-bookpart
                     paper
                     (ly:output-def-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 {
    \on-the-fly \print-page-number-check-first {
      \fill-line { \null \concat { \page-number } }
    }
  }

  evenHeaderMarkup = \markup {
    \on-the-fly \print-page-number-check-first {
      \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" }

\book {
  \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 }
    }
  }
}


Cordialement,
Jean






reply via email to

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