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

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

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


From: NOreply
Subject: Re: Nombre de portées par page différent en page 1
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.



reply via email to

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