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: Wed, 13 Jul 2022 02:15:42 +0200
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Thunderbird/91.11.0



Le 10/07/2022 à 10:27, Vincent Gay a écrit :
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" :
[...]




Bonjour Vincent,

Je n'ai pas cherché à comprendre ce code, car il me paraît beaucoup
trop compliqué. En effet, il existe une solution nettement plus simple
pour afficher des numéros de page relatifs au bookpart :


\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))
}


%% Fichier principal

\paper {
  number-pages-per-bookpart = ##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 }
    }
  }
  \bookpart {
    \score {
      \new Staff \with { instrumentName = "Part 2" }
      { c''1 \pageBreak c''1 }
    }
  }
}



Et voici un code qui va un peu plus loin et automatise aussi la
numérotation avec "/total", d'une manière qui fonctionne également
avec le code précédent :


\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
                     (ly:paper-book-paper (ly:prob-property page 'paper-book))
                     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 %% à enlever si non 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]