Greetings,

Until upgrading to 2.24, I had been using certain Scheme code and
\paper block layouts in order to output books consisting of prefatory
material with Roman numeral page numbers and the music itself with
Arabic page numbers. When I upgraded one such file to 2.24.3 using
convert-ly, the result was puzzling. The actual page numbering is
correct - ten pages of either invisible or Roman numerals followed by
Arabic numerals starting on page 1. However, the Table of Contents
shows Arabic numerals from the beginning, so that the first page of
actual music is 11. I am not sure what to present as an MWE; I am
guessing that the Scheme code and \paper blocks should suffice. The
original was laid out as follows:

%%% roman numeral page numbers
#(define begin-arabic 11)

%% The following is an adaptation of a function found in
`define-markup-commands.scm' which is used to create tables of
contents. An offset to the Arabic numerals has been incorporated so
that the first page of the music is 1.
#(define-markup-command (page-ref layout props label gauge default)
  (symbol? markup? markup?)
  #:category other
  "
@cindex referencing page numbers in text

Reference to a page number.  @var{label} is the label set on the referenced
page (using the @code{\\label} command), @var{gauge} a markup used to estimate
the maximum width of the page number, and @var{default} the value to display
when @var{label} is not found."
  (let* ((gauge-stencil (interpret-markup layout props gauge))
         (x-ext (ly:stencil-extent gauge-stencil X))
         (y-ext (ly:stencil-extent gauge-stencil Y)))
    (ly:make-stencil
     `(delay-stencil-evaluation
       ,(delay (ly:stencil-expr
                (let* ((table (ly:output-def-lookup layout 'label-page-table))
                       (page-number (if (list? table)
                                        (assoc-get label table)
                                        #f))
                       (page-markup
                         (if page-number
                             (if (< page-number begin-arabic)
                                 (format #f "~(~@r~)" page-number) ;
Roman numerals
                                 ; Arabic numerals, but offset to begin on 1
                                 (format #f "~a" (- (1+ page-number)
begin-arabic)))
                             default))
                       (page-stencil (interpret-markup layout props
page-markup))
                       (gap (- (interval-length x-ext)
                               (interval-length (ly:stencil-extent
page-stencil X)))))
                  (interpret-markup layout props
                                    (markup #:concat (#:hspace gap
page-markup)))))))
     x-ext
     y-ext)))

#(define-markup-command (roman-numeral-page-number layout props) ()
  (let ((page-number (chain-assoc-get 'page:page-number props -1)))
    (interpret-markup layout props
      (if (> page-number 0) ; only positive integers can be `romanized'
          (format #f "~(~@r~)" page-number)
          (chain-assoc-get 'page:page-number-string props -1)))))

#(define-markup-command (offset-page-number layout props offset) (integer?)
  (let ((page-number (chain-assoc-get 'page:page-number props -1)))
    (interpret-markup layout props
      (format #f "~a" (- page-number offset)))))

#(define (part-not-first-page layout props arg)
  (if (= (chain-assoc-get 'page:page-number props -1)
         (ly:output-def-lookup layout 'first-page-number))
      empty-stencil
      (interpret-markup layout props arg)))

\book {

\bookpart {

    \paper {
      oddHeaderMarkup = \markup \fill-line {
        " "
      }
      evenHeaderMarkup = \markup \fill-line {
        " "
      }
    }

Title, copyright, and dedication pages.

  }

\bookpart {

    \paper {
      oddHeaderMarkup = \markup \fill-line {
        " "
      }
      evenHeaderMarkup = \markup \fill-line {
        " "
      }
      oddFooterMarkup = \markup \fill-line {
        " "
        \on-the-fly #print-page-number-check-first \roman-numeral-page-number
        " "
      }
      evenFooterMarkup = \oddFooterMarkup
      tocTitleMarkup = \markup \column {
        \vspace #3
        \fill-line \abs-fontsize #16 \bold {
          "TABLE OF CONTENTS"
        }
        \vspace #2
      }
      tocItemMarkup = \markup \column {
        \fill-with-pattern #1 #RIGHT . \fromproperty #'toc:text \fromproperty
#'toc:page
        \vspace #1
      }
    }

    \markuplist \table-of-contents

Preface and Performance Notes.

  }

\bookpart {

    \paper {
      oddHeaderMarkup = \markup {
        \fill-line {
          " "
          \on-the-fly #create-page-number-stencil \offset-page-number #(1-
begin-arabic)
        }
      }
      evenHeaderMarkup = \markup {
        \fill-line {
          \on-the-fly #create-page-number-stencil \offset-page-number #(1-
begin-arabic)
          " "
        }
      }
    }

Music.

  }

}

The first of the \paper blocks remained unchanged in the new version.
The second and thrid were replaced by the following:

    \paper {
      oddHeaderMarkup = \markup \fill-line {
        " "
      }
      evenHeaderMarkup = \markup \fill-line {
        " "
      }
      oddFooterMarkup = \markup \fill-line {
        " "
        \if \should-print-page-number \roman-numeral-page-number
        " "
      }
      evenFooterMarkup = \oddFooterMarkup
      tocTitleMarkup = \markup \column {
        \vspace #3
        \fill-line \abs-fontsize #16 \bold {
          "TABLE OF CONTENTS"
        }
        \vspace #2
      }
      tocItemMarkup = \markup \column {
        \fill-with-pattern #1 #RIGHT . \fromproperty #'toc:text \fromproperty
#'toc:page
        \vspace #1
      }
    }

    \paper {
      oddHeaderMarkup = \markup {
        \fill-line {
          " "
          \if \should-print-page-numbers-global \offset-page-number #(1- 
begin-arabic)
        }
      }
      evenHeaderMarkup = \markup {
        \fill-line {
          \if \should-print-page-numbers-global \offset-page-number #(1- 
begin-arabic)
          " "
        }
      }
    }

At the end of the day, I am not familiar enough with Scheme to know
how to solve this issue. I would be grateful for any assistance.

Hwaen Ch'uqi

Reply via email to