Subject: Tournez la page SVP

From: discussions-sur-forums <[email-masked]>
Date: Thu, 23 Aug 2007 07:50:02 +0200

Bonjour,

J'ai un .ly avec plusieurs scores successifs pour générer un unique pdf. OK

Il faudrait, pour chaque score qui s'étale sur plusieurs pages, mettre 
en bas de la page pdf un texte du genre "Tournez la page SVP".
Bien sûr, si un score se termine en bas de page, il ne doit pas y avoir 
de "TSVP" en bas de cette page-là.

Quelqu'un a une idée?

---

From: Gilles THIBAULT <[email-masked]>
Date: Fri, 24 Aug 2007 17:53:56 +0200

>Bien sûr, si un score se termine en bas de page, il ne doit pas y avoir de
>"TSVP" en bas de cette page-là.

Je n'ai pas (encore ?) trouvé, mais pour avoir l'aide éventuelle d'autre
collistiers, je propose l'exemple suivant :

%%%%%%%%%%%%%%
\version "2.10.25"

\paper{
  printallheaders=##t
  }

\score                     % score 1

{
 \new Staff
 {
      c'1 \pageBreak  % page 1
      c'1 \pageBreak  % page 2
      c'1                     % page 3
 }
 \header {
      title = "SCORE I"
 }
}

\score                    % score 2
{
 \new Staff
 {
      d'1 \pageBreak % page 4
      d'1 \pageBreak % page 5
      d'1                    % page 6
 }
 \header
 {
      breakbefore = ##t
      title = "SCORE II"
 }
}
%%%%%%%%%%%%%%%

Si j'ai bien compris, on veut avoir en bas de la page 1,2,4,5
le message "Tournez la page SVP ".

Gilles

---

From: Philippe Hézaine <[email-masked]>
Date: Fri, 24 Aug 2007 21:03:04 +0200

> collistiers, je propose l'exemple suivant :
Pour ma part, je ne vois qu'un markup :
   _\markup {"Tournez la page SVP "}
positionné sur une note de la dernière mesure des pages concernées.
On peut ensuite affiner le positionnement avec un :
    \once \override TextScript #'extra-offset = #'(5 . -2.5)
en adaptant les valeurs.
Bien sûr, il ne faut plus changer les \pageBreak sous peine de tout
devoir recommencer.
Ce n'est pas très élégant, mais ça devrait marcher.
     Phil.

---

From: "Valentin Villenave" <[email-masked]>
Date: Fri, 24 Aug 2007 21:36:50 +0200

> positionné sur une note de la dernière mesure des pages concernées.

Pour ma part, je pense très fort aux evenHeaderMarkup et
oddFooterMarkup, qui ont d'eux même le bon emplacement. C'est leur
seul avantage du reste, vu qu'il te faudra de toute façon les
spécifier à chaque fois.

> Ce n'est pas très élégant, mais ça devrait marcher.

Pas mieux :(

Valentin

---

From: Gilles THIBAULT <[email-masked]>
Date: Sun, 26 Aug 2007 01:10:18 +0200

Bon, je suis arrivé au resultat, mais effectivement ce n'est pas très 
élégant.
Je me suis inspiré (très fortement ...) du fichier titling-init.ly (dans 
usr\share\lilypond\current\ly) et j'ai défini une fonction qui vérifie que 
le numero de page courant ne soit pas la dernière page du score
J'avais essayé d'utiliser
        chain-assoc-get 'page:last?
mais ça ne récupérait que la dernière page du \book et non du \score.
Dans cette solution donc, il faut noter la dernière page de chaque score, et 
répéter autant de fois que necessaire,
les lignes suivantes :
(= (chain-assoc-get 'page:page-number props -1) 3)              % page 3
(= (chain-assoc-get 'page:page-number props -1) 6)               % page 6
(= (chain-assoc-get 'page:page-number props -1) x)  ...          % page x.
J'ai pas mieux mieux pour l'instant.

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

\version "2.10.25"

#(define (is-last-page layout props arg)
  (if (not(or (= (chain-assoc-get 'page:page-number props -1) 3)
                 (= (chain-assoc-get 'page:page-number props -1) 6)
      ))
   (interpret-markup layout props arg)
   empty-stencil))

\paper{
  printallheaders = ##t
  oddFooterMarkup =  \markup {\fill-line {"" \on-the-fly #is-last-page 
"Tournez la page SVP"}}
}

\score                     % score 1

{
 \new Staff
 {
      c'1 \pageBreak  % page 1
      c'1 \pageBreak  % page 2
      c'1                     % page 3
 }
 \header {
      title = "SCORE I"
 }
}

\score                    % score 2
{
 \new Staff
 {
      d'1 \pageBreak % page 4
      d'1 \pageBreak % page 5
      d'1                    % page 6
 }
 \header
 {
      breakbefore = ##t
      title = "SCORE II"
 }
}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

---

From: "Valentin Villenave" <[email-masked]>
Date: Sun, 26 Aug 2007 12:19:50 +0200

> mais ça ne récupérait que la dernière page du \book et non du \score.

C'est effectivement le principal obstacle.

> J'ai pas mieux mieux pour l'instant.

C'est déjà, de loin, la meilleure des solutions proposées ici.
Quelqu'un connaît-il une fonction qui permette de se renseigner sur le
nombre de pages de chaque \score dans un \book ? Faute de quoi, ça
pourrait être un "feature request" intéressant...

Valentin

---

From: discussions-sur-forums <[email-masked]>
Date: Sun, 26 Aug 2007 19:38:51 +0200

> C'est déjà, de loin, la meilleure des solutions proposées ici.
Effectivement.
> pourrait être un "feature request" intéressant...
Effectivement!

---

From: Gilles THIBAULT <[email-masked]>
Date: Sun, 26 Aug 2007 22:09:53 +0200

>pourrait être un "feature request" intéressant...

C'est vraiment là que la doc de lilypond fait défaut  ; voici ce qu'il y a
dans  :
http://lilypond.org/doc/v2.10/Documentation/user/lilypond-internals/Scheme-functions

    %%%
    Function: ly:chain-assoc-get key achain dfault
          Return value for key from a list of alists achain. If no if no 
entry is
        found, return DFAULT, or #f if no DFAULT not specified.
    %%%

  Aucune indication sur le paramètre "key" , qui est poutant la "clef"
essentielle pour l'utilisation de cette fonction.

Ce manque d'informations sur les fonctions de base de Lilypond sont pour moi 
un frein très important pour l'apprentissage du language Scheme.

Mais peut-être qu'il y a une autre page Web qui est plus explicite ?