lilypond-user
[Top][All Lists]
Advanced

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

Re: table-of-contents page links


From: Thomas Morley
Subject: Re: table-of-contents page links
Date: Sat, 28 Apr 2012 01:53:16 +0200

Am 28. April 2012 01:07 schrieb David Kastrup <address@hidden>:

> Shouldn't (ly:output-def-lookup layout 'first-page-number) do the trick?

Surprisingly not!

If first-page-number is not set it returns 3
setting 2 gives 4
setting 3 gives 5
...
Well, the relationship is linear. One could deal with it.
But for now I altered `book-first-page?' from toc-init.ly:

%%%%%%%%%%%

\version "2.15.36"

#(define (book-first-page layout props)
   (define (ancestor layout)
     "Return the topmost layout ancestor"
     (let ((parent (ly:output-def-parent layout)))
       (if (not (ly:output-def? parent))
           layout
           (ancestor parent))))
      (ly:output-def-lookup (ancestor layout) 'first-page-number))

#(define-markup-command (with-link layout props label arg)
  (symbol? markup?)
  (let* ((arg-stencil (interpret-markup layout props arg))
         (x-ext (ly:stencil-extent arg-stencil X))
         (y-ext (ly:stencil-extent arg-stencil Y)))
    (ly:make-stencil
     `(delay-stencil-evaluation
       ,(delay (ly:stencil-expr
                (let* ((table (ly:output-def-lookup layout 'label-page-table))
                       (first-page-number (book-first-page layout props))
                       (orig-page-number (if (list? table)
                                        (assoc-get label table)
                                        #f))
                       (p-nr (ly:output-def-lookup layout 'first-page-number))
                       (page-number (+ orig-page-number (+ 1 (* -1
first-page-number) )))
                       (link-expr (list 'page-link page-number
                                        `(quote ,x-ext) `(quote ,y-ext))))

(newline)(display "first-page-number__")(display first-page-number)
(newline)(display "p-nr_______________")(display p-nr)

                  (ly:stencil-add (ly:make-stencil link-expr x-ext y-ext)
      arg-stencil)))))
           x-ext
           y-ext)))

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%---- Test
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\paper {
          first-page-number = #-2
}

mus = \relative c'' {
        \repeat unfold 10 { c1 \break }
}

\book {
        \bookpart {
                \markup \bold \fontsize #10 \fill-line { "TITLE" }
        }

        \bookpart {
                \markup \fontsize #2 \fill-line { "Some Text" }
                
                \paper {
                        oddHeaderMarkup = \markup { \null }
                        evenHeaderMarkup = \markup { \null }
                }
        }
        \bookpart {
                \markuplist \table-of-contents
                
                \paper {
                        oddHeaderMarkup = \markup { \null }
                        evenHeaderMarkup = \markup { \null }
                }
        }
        \bookpart {
                \tocItem \markup { "Piece 1" }
                \score {
                        \mus
                        \header { piece = "Piece 1" }
                }
        }
        \bookpart {
                \tocItem \markup { "Piece 2" }
                \score {
                        \transpose c cis \mus
                        \header { piece = "Piece 2" }
                }
        }
        \bookpart {
                \tocItem \markup { "Piece 3" }
                \score {
                        \transpose c d \mus
                        \header { piece = "Piece 3" }
                }
        }
}

%%%%%%%%%%%%

The lines with p-nr and (display ...) should be deleted. I let them in
for testing-purpose.


Regards,
  Harm



reply via email to

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