Home
Random
Log in
Settings
About LilyPond wiki
LilyPond wiki
Search
Editing
Page Range Numbering
Warning:
You are not logged in. Your IP address will be publicly visible if you make any edits. If you
log in
or
create an account
, your edits will be attributed to your username, along with other benefits.
Anti-spam check. Do
not
fill this in!
It may sometimes be necessary to have a single score with numbered pages that are consecutive but you want to skip specified page ranges.<br /> This snippet shows how to specify a list of page number ranges to print, with numbers not in the list omitted. Page numbers greater than the last number in the range list will be printed consecutively as per normal.<br /> For example, specifying a list of page ranges '((1) (3 5) (7 10)) would skip pages 2 and 6, and continue with consecutive numbering from 11 onwards.<br /> (Please note: only first page is displayed in preview) <lilypond version="2.24.0" full> #(define-markup-command (use-page-number-ranges layout props)() "Reads @code{'page-number-ranges} from @var{layout} and transforms it into a flat list of integers. Prints a number-string taken from this list for page-numbering. The values are referenced by the actual page-number. If all elements of this list are consumed, additional pages are numbered consecutively. An empty list will cause default page-numbers, as will non-list settings or unsetting of @code{'page-number-ranges} Limitations: - doesn't work for roman page-numbers. - only integer page-numbers are supported" (define (page-numbers ranges) ;; get a flat, unfolded list from a list containing ranges of integers. ;; p.e. '((1) (3 5) (7 10)) -> '(1 3 4 5 7 8 9 10) (append-map (lambda (e) (if (every integer? e) (iota (- (last e) (1- (car e))) (car e) 1) (ly:error "All elements need to be integers: ~a" e))) ranges)) (let* ((page-number (chain-assoc-get 'page:page-number props -1)) (page-number-ranges (ly:output-def-lookup layout 'page-number-ranges)) (ls (if (and (list? page-number-ranges) (every number-list? page-number-ranges)) (page-numbers page-number-ranges) '())) (len (length ls))) (interpret-markup layout props (if (not (null? ls)) (number->string (if (and (not (zero? page-number)) (< page-number len)) (list-ref ls (1- page-number)) (+ page-number (- (last ls) len)))) (make-fromproperty-markup 'page:page-number-string))))) \paper { print-first-page-number = ##t print-page-number = ##t page-number-ranges = #'((1) (3 5) (7 10)) oddHeaderMarkup = \markup \fill-line { " " \unless \on-first-page \fromproperty #'header:instrument \if \should-print-page-number \use-page-number-ranges } evenHeaderMarkup = \markup \fill-line { \if \should-print-page-number \use-page-number-ranges \unless \on-first-page \fromproperty #'header:instrument " " } } \score { \new Staff { \repeat unfold 15 { c''1 \pageBreak } } } </lilypond> [[Category:Paper and layout]] [[Category:Scheme]]
Summary:
Please note that all contributions to LilyPond wiki may be edited, altered, or removed by other contributors. If you do not want your writing to be edited mercilessly, then do not submit it here.
You are also promising us that you wrote this yourself, or copied it from a public domain or similar free resource (see
Meta:Copyrights
for details).
Do not submit copyrighted work without permission!
Cancel
Editing help
(opens in new window)