Nombre de portées par page différent en page 1

classic Classique list Liste threaded Arborescence
3 messages Options
Répondre | Arborescence
Ouvrir ce message en vue arborescente
|  
Signaler un Contenu Inapproprié

Nombre de portées par page différent en page 1

Seventies
Bonjour à l'équipe,

Pour donner une bonne lisibilité aux parties, j'insère dans le bloc \paper les lignes suivantes :
  max-systems-per-page = #12
  min-systems-per-page = #9

Le résultat est parfait pour la dimension choisie, mais parfois, ça se bouscule sur la première page, suite au titre qui prend l’équivalent de 3 portées.

Est-il possible de faire varier ce nombre uniquement sur la première page ?

Merci d'avance de vos suggestions,
Jean-François
Liste des partitions en http://www.espace-midi.com/lilypond
Répondre | Arborescence
Ouvrir ce message en vue arborescente
|  
Signaler un Contenu Inapproprié

Re: Nombre de portées par page différent en page 1

NOreply
Avec le code ci-dessous, il est possible de définir à la fois le nombre de mesures par système + le nombre de systèmes par page.

#(define (expand-repetitions lst seed)
  (if (symbol? (car lst))
      (let* ((str (symbol->string (car lst)))
             (split (string-split str #\*))
             (split (map (lambda (elem) (string->number elem)) split)))
        (set! seed (append seed (make-list (cadr split) (car split)))))
      (set! seed (append seed (list (car lst)))))
  (if (null? (cdr lst))
      seed
      (expand-repetitions (cdr lst) seed)))

#(define ((bars-per-line-systems-per-page-engraver lst) context)
  (let* ((working-copy
           (map (lambda (sys) (expand-repetitions sys '()))
                lst))
         (systems-per-page (car working-copy))
         (total (1+ (car systems-per-page)))
         (last-measure-seen 0))
  `((stop-translation-timestep
      . ,(lambda (trans)
          (let ((internal-bar (ly:context-property context 'internalBarNumber))
                (current-col (ly:context-property context 'currentCommandColumn)))
            ;; we are only interested in the first NonMusicalPaperColumn of
            ;; each measure
            (if (and (> internal-bar last-measure-seen)
                     (= (remainder internal-bar total) 0)
                     (pair? working-copy))
                (begin
                  (set! (ly:grob-property current-col 'line-break-permission) 'force)
                  (set! last-measure-seen internal-bar)
                  (if (null? (cdr systems-per-page))
                      (begin
                        (set! (ly:grob-property current-col 'page-break-permission) 'force)
                        (if (pair? (cdr working-copy))
                            (begin
                              (set! working-copy (cdr working-copy))
                              (set! systems-per-page (car working-copy)))
                            (set! working-copy '())))
                      (set! systems-per-page (cdr systems-per-page)))
                  (set! total (+ total (car systems-per-page)))))))))))
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\layout {
  \context {
    \Score
    \consists #(bars-per-line-systems-per-page-engraver '((1 6) (4 4 4) (1)))
% 3 pages: 1° page = 2 systèmes, 1°système avec 1 mesure, 2° système avec 4 mesures
% 2° page avec 3 systèmes de 4 mesures....
  }
}

\score {
  \repeat unfold 500 { c'1 }
}
Répondre | Arborescence
Ouvrir ce message en vue arborescente
|  
Signaler un Contenu Inapproprié

Re: Nombre de portées par page différent en page 1

Seventies
Ok, merci pour ce code. Mais ici, je cherche une sorte de "liberté" pour la mise en page.

Il s'agit de parties symphoniques, donc en plusieurs mouvements, et d'une longueur d'une douzaine de pages (3 à 8 pour les cuivres). De plus, j'utilise le "Page_turn_engraver", ce qui complique encore la mise en page.

J'essaye donc de fournir le moins de contraintes possibles à LilyPond. Je désactive également le "ragged-last-bottom".

Généralement, Lily s'en tire bien, mais parfois, la première page ne comprend que quelques systèmes, et parfois bien de trop, essentiellement à cause du "Page_turn_engraver" qui déraille de temps à autre.

Il y a deux solutions : poser les sauts de page manuellement. Ça fonctionne correctement, mais ça manque d'élégance.
L'autre solution, citée plus haut : imposer le minimum et maximum de systèmes. LilyPond s'en sort assez bien, sauf pour les pages qui contiennent des titres ou des sauts de mouvement.

Je vais relire à tête reposée le code que tu proposes, mais il me semble qu'il travaille de la même manière (au niveau des résultats) que les sauts de page forcés.

Sinon, je pense aux variables d'espacement vertical. Mais là aussi, on définit des minimums, pas de maximums.

Cordialement,
Jean-François
Liste des partitions en http://www.espace-midi.com/lilypond
Chargement...