Autor Thema: Seitenzahlen innerhalb eines \book {} zurücksetzen  (Gelesen 1417 mal)

mxordn

  • Member
Seitenzahlen innerhalb eines \book {} zurücksetzen
« am: Mittwoch, 29. Juli 2015, 20:15 »
Ist es möglich Seitenzahlen innerhalb einer \book {}-Umgebung zurückzusetzen?

Ich habe ein book und diverse bookparts. Mein Wunsch wäre dass jeder bookpart wieder neu mit Seite 1 beginnt. Ich bin für jegliche Hilfe dankbar. Die lilypond Hilfe und im Forum bin ich bisher leider nicht fündig geworden.
 

harm6

  • Member
Re: Seitenzahlen innerhalb eines \book {} zurücksetzen
« Antwort #1 am: Donnerstag, 30. Juli 2015, 00:34 »
Hallo mxordn,

herzlich willkommen hier im Forum.

Zum Thema, LilyPond bietet leider keine Möglichkeit Seitenzahlen für bookparts zurückzusetzen, afaik.
Aber man kann ja Berechnungen anstellen ;)
Im Code unten brauche ich dafür allerdings eine externe Variabel, programmiertechnisch ist das nicht so dolle...
Aber zumindest im Minimalbeispiel klappt es, der Praxistest steht natürlich noch aus.

\version "2.19.24"

#(define part-first-pages '(0))

#(define (part-first-page? layout props)
  (= (chain-assoc-get 'page:page-number props -1)
     (ly:output-def-lookup layout 'first-page-number)))

#(define (print-part-first-page-as-one layout props arg)

  (if (part-first-page? layout props)
      (set! part-first-pages
            (cons (1- (chain-assoc-get 'page:page-number props -1))
                  part-first-pages)))

  (set! props
    (cons
      (list
        (cons 'page:page-number-string
              (number->string
                (- (chain-assoc-get 'page:page-number props -1)
                   (car part-first-pages))))
        (cons 'page:page-number
              (- (chain-assoc-get 'page:page-number props -1)
                 (car part-first-pages))))
      props))
     
  (interpret-markup layout props arg))

\paper {
  oddHeaderMarkup = \markup
  \fill-line {
    " "
    \on-the-fly #not-part-first-page \fromproperty #'header:instrument
   
    \on-the-fly #print-page-number-check-first
      \on-the-fly #print-part-first-page-as-one
      \fromproperty #'page:page-number-string
  }
 
  evenHeaderMarkup = \markup
  \fill-line {
    \on-the-fly #print-page-number-check-first
      \on-the-fly #print-part-first-page-as-one
      \fromproperty #'page:page-number-string
    \on-the-fly #not-part-first-page \fromproperty #'header:instrument
    " "
  }
}

%%%%%%%%%%%%%%%%%%
%% EXAMPLE
%%%%%%%%%%%%%%%%%%

#(set-default-paper-size "a6")

\book {
  \bookpart {
    \markup "first bookpart"
    \repeat unfold 3 { c''1 \pageBreak }
  }
  \bookpart {
    \markup "second bookpart"
    \repeat unfold 2 { d''1 \pageBreak }
  }
  \bookpart {
    \markup "third bookpart"
    \repeat unfold 4 { e''1 \pageBreak }
  }
  \bookpart {
    \markup "fourth bookpart"
    \repeat unfold 5 { f''1 \pageBreak }
  }
}


HTH,
  Harm

mxordn

  • Member
Re: Seitenzahlen innerhalb eines \book {} zurücksetzen
« Antwort #2 am: Donnerstag, 30. Juli 2015, 09:41 »
Hallo Harm6,

das hilft absolut! Vielen Dank für die Antwort und den Code, auf den ich selbst nie gekommen wäre :). Ich bin noch in der großen Lernphase, was die Syntax und Prgrammstruktur von lilypond angeht.

Die "Berechnungen" tun jedenfalls genau das, was sie sollen :), übrigens auch unter Version 2.18.2. Wäre das nicht generll ein feature für die \Paper-Umgebung innerhalb eines \bookparts?

Herzliche Grüße!