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

From: Seventies <[email-masked]>
Date: Wed, 21 Jun 2017 03:15:54 -0700 (MST)

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
--
View this message in context: http://lilypond-french-users.1298960.n2.nabble.com/Nombre-de-portees-par-page-different-en-page-1-tp7585009.html
Sent from the LilyPond French Users mailing list archive at Nabble.com.

---

From: NOreply <[email-masked]>
Date: Wed, 21 Jun 2017 04:05:28 -0700 (MST)

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

--
View this message in context: http://lilypond-french-users.1298960.n2.nabble.com/Nombre-de-portees-par-page-different-en-page-1-tp7585009p7585010.html
Sent from the LilyPond French Users mailing list archive at Nabble.com.

---

From: Seventies <[email-masked]>
Date: Wed, 21 Jun 2017 10:44:36 -0700 (MST)

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
--
View this message in context: http://lilypond-french-users.1298960.n2.nabble.com/Nombre-de-portees-par-page-different-en-page-1-tp7585009p7585011.html
Sent from the LilyPond French Users mailing list archive at Nabble.com.