Subject: Positionnement vertical (écart numéro de page / titre)

From: Vincent Gay <[email-masked]>
Date: Thu, 30 Sep 2021 11:36:50 +0200

Bonjour,

j'utilise une fonction qui m'a été communiqué par Pierre Perol-Schneider 
pour redémarrer la numérotation des pages à 1 à
chaque début de \bookpart. Cela fonctionne parfaitement si ce n'est que 
ça introduit un espace supplémentaire au dessus du titre. Outre le coté 
inesthétique cela me provoque des sauts de pages à des endroits ou je ne 
le voudrais pas.

Dans l'exemple minimal ci-dessous il suffit de commenter / dé-commenter 
les 2 dernières lignes du bloc \paper { } pour voir la différence

Y-aurait-il un moyen de corriger ce petit problème ? merci d'avance

%---------- Code minimal -------------

\version "2.22.1"

#(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 (reset-part-first-page layout props arg)
"Returns page-number-string, starting every bookpart with page-number 0.
Relying on the extern defined `part-first-pages'.
"
   (set! props (prepend-alist-chain 'part-first-page '(0) props))

   (let* ((real-page-number (chain-assoc-get 'page:page-number props -1))
          (parts-page-number (- real-page-number (car part-first-pages))))

     (if (part-first-page? layout props)
         (set! part-first-pages (cons (1- real-page-number) 
part-first-pages)))

     (set! props
       (cons
         (list
           (cons 'page:page-number-string (number->string 
parts-page-number))
           (cons 'page:page-number parts-page-number))
         props))
     (interpret-markup layout props arg)))

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

   (set! props
     (cons
       (list
         (cons 'page:page-number-string
               (let ((page-number
                      (chain-assoc-get 'page:page-number props -1)))
                 (cond ((eq? number-type 'roman-lower)
                        (fancy-format #f "~(~@r~)" page-number))
                       ((eq? number-type 'roman-upper)
                        (fancy-format #f "~@r" page-number))
                       ((eq? number-type 'arabic)
                        (number->string page-number))
                       (else (number->string page-number)))))
         (cons 'page:page-number
               (chain-assoc-get 'page:page-number props -1)))
       props))
   (interpret-markup layout props arg))

\paper {
   indent = 0\mm
   ragged-last-bottom = ##f
   ragged-bottom = ##t
   ragged-last = ##f
   markup-system-spacing = #'((basic-distance . 15)
                              (minimum-distance . 6)
                              (padding . 0))
   score-system-spacing = #'((basic-distance . 23)
                             (minimum-distance . 20)
                             (padding . 5))
   print-first-page-number = ##t
   oddMarkup =
   #(define-scheme-function (number-type)(symbol?)
     #{
       \markup
         \column {
           \fill-line {
             " "
             \on-the-fly #not-part-first-page \fromproperty 
#'header:instrument
             \on-the-fly #print-page-number-check-first
               %% use in this order:
               \on-the-fly #reset-part-first-page
               \on-the-fly #(print-part-first-page-as-one number-type)
               \fromproperty #'page:page-number-string
           }
           \vspace #5
         }
     #})

   evenMarkup =
   #(define-scheme-function (number-type)(symbol?)
     #{
       \markup
         \column {
           \fill-line {
             \on-the-fly #print-page-number-check-first
               %% use in this order:
               \on-the-fly #reset-part-first-page
               \on-the-fly #(print-part-first-page-as-one number-type)
               \fromproperty #'page:page-number-string
             \on-the-fly #not-part-first-page \fromproperty 
#'header:instrument
             " "
           }
           \vspace #5
         }
     #})

% commenter dé-commenter les 2 lignes suivantes pour voir l'espace 
supplémentaire introduit par la fonction
       oddHeaderMarkup = \oddMarkup #'arabic
       evenHeaderMarkup = \evenMarkup #'arabic

}
\header {
   title = "title"
   composer = "composer"
}

\book {
   \bookpart {
     \score {
       \relative c' {
         \repeat unfold 16 { c4 }
       }
     }
   }
     \bookpart {
     \score {
       \relative c' {
         \repeat unfold 16 { c4 }
       }
     }
   }
     \bookpart {
     \score {
       \relative c' {
         \repeat unfold 16 { c4 }
       }
     }
   }
}

Vincent Gay
Envoyé depuis mon saxo-phone :)
https://myrealbook.vintherine.org/ - http://photos.vintherine.org/

---

From: Jean Abou Samra <[email-masked]>
Date: Thu, 30 Sep 2021 12:58:41 +0200

Le 30/09/2021 à 11:36, Vincent Gay a écrit :
> Bonjour,
>
> j'utilise une fonction qui m'a été communiqué par Pierre 
> Perol-Schneider pour redémarrer la numérotation des pages à 1 à
> chaque début de \bookpart. Cela fonctionne parfaitement si ce n'est 
> que ça introduit un espace supplémentaire au dessus du titre. Outre le 
> coté inesthétique cela me provoque des sauts de pages à des endroits 
> ou je ne le voudrais pas.
>
> Dans l'exemple minimal ci-dessous il suffit de commenter / 
> dé-commenter les 2 dernières lignes du bloc \paper { } pour voir la 
> différence
>

C'est \vspace qui insère cet espacement vertical.
Il suffit d'enlever les deux \vspace #5
des fonctions oddMarkup et evenMarkup.

Cordialement,
Jean

---

From: Vincent Gay <[email-masked]>
Date: Thu, 30 Sep 2021 13:03:12 +0200

> des fonctions oddMarkup et evenMarkup.

Un grand merci Jean. Quand je pense que j'ai lu et relu ce code sans 
voir ça !

-- 
Vincent Gay