Correction for cases when you have more pages than you specified ranges for:

On Thu, May 5, 2016 at 9:18 AM, David Nalesnik <david.nales...@gmail.com> wrote:


> \version "2.19.30"
>
>
> #(define (my-nmbrs rngs)
>    (append-map (lambda (e) (iota (- (last e) (- (car e) 1)) (car e) 1)) rngs))
>
> #(define-markup-command (use-page-number-ranges layout props arg)
>    (number-list?)
>    (let ((page-number (chain-assoc-get 'page:page-number props -1)))
>      (interpret-markup layout props
>        (if (< page-number (length arg))
>            (number->string (list-ref arg (1- page-number)))
>            (chain-assoc-get 'page:page-number-string props -1)))))

#(define-markup-command (use-page-number-ranges layout props ls)
   (number-list?)
   (let ((page-number (chain-assoc-get 'page:page-number props -1))
         (len (length ls)))
     (interpret-markup layout props
       (number->string
        (if (< page-number len)
            (list-ref ls (1- page-number))
            (+ page-number (- (last ls) len)))))))

>
> \paper {
>   print-first-page-number = ##t
>   print-page-number = ##t
>   oddHeaderMarkup = \markup
>   \fill-line {
>     " "
>     \on-the-fly #not-first-page \fromproperty #'header:instrument
>     \on-the-fly #print-page-number-check-first \use-page-number-ranges
>     #(my-nmbrs '((1) (3 5) (7 10)))
>   }
>   evenHeaderMarkup = \markup
>   \fill-line {
>     \on-the-fly #print-page-number-check-first \use-page-number-ranges
>     #(my-nmbrs '((1) (3 5) (7 10)))
>     \on-the-fly #not-first-page \fromproperty #'header:instrument
>     " "
>   }
> }
>
> \score {
>   \new Staff {
>     \repeat unfold 15 {
>       s1
>       \pageBreak
>     }
>   }
> }

_______________________________________________
lilypond-user mailing list
lilypond-user@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-user

Reply via email to