lilypond-user-fr
[Top][All Lists]
Advanced

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

Re: Fonction conditionnelle pour insérer une page blanche


From: Jean Abou Samra
Subject: Re: Fonction conditionnelle pour insérer une page blanche
Date: Thu, 8 Dec 2022 14:00:28 +0100
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.5.1

Bonjour,


Le 08/12/2022 à 12:18, Eulogia a écrit :
[...]

Mais ce n'est pas franchement très élégant, et j'aimerais savoir s'il serait possible de compléter la doc avec:

1. Le traditionnel "Hello World" qui montre comment fonctionne l'intégration entre lilypond et scheme



C'est vrai que la documentation officielle n'est pas absolument
brillante sur ce sujet, mais il y a quand même des exemples
simples sur

https://lilypond.org/doc/v2.23/Documentation/extending/lilypond-variables

et

https://lilypond.org/doc/v2.23/Documentation/extending/lilypond-code-blocks

Il y a aussi ce tutoriel Scheme (écrit par moi) :

https://tutoriel-scheme.readthedocs.io/

avec une introduction normalement progressive.


2. Où peut-on trouver la définition de fonctions comme ly:parser-include-string?


ly:parser-include-string est une fonction définie en C++ et exportée en
Scheme, comme la plupart des fonctions dont le nom commence par « ly: ».
Vous la trouverez dans le fichier lily/lily-parser-scheme.cc :

https://gitlab.com/lilypond/lilypond/-/blob/master/lily/lily-parser-scheme.cc#L276

Bien sûr, cela ne vous sera utile que si vous comprenez le C++ et la façon
dont Scheme est intégré au C++ de LilyPond.

Maintenant, si tout ce que vous cherchez est sa documentation, elle peut
se trouver dans la référence des propriétés internes, comme pour toutes
les fonctions Scheme :

https://lilypond.org/doc/v2.23/Documentation/internals/scheme-functions


3. Est-ce qu'il existe en scheme le moyen de récupérer directement le numéro de page courant, sans passer par un label et si oui, où peut-on trouver les spécificités de lilypond accessible via le scheme?


En fait, le \page-ref est une fausse piste, car cette commande
n'accède pas directement au numéro de page lorsqu'elle est
exécutée. Elle ne fait que créer une référence au numéro de
page, qui est remplacée par le numéro bien plus tard, à un
moment où il est trop tard pour rajouter une page.

Voilà une fonction qui fonctionne :


\version "2.23.82"

emptyPage =
\bookpart {
  \paper {
    oddHeaderMarkup = ""
    oddFooterMarkup = ""
    #(use-modules (ice-9 match))
    page-breaking =
      #(lambda (paper-book)
         (match-let* (((page) (ly:optimal-breaking paper-book))
                      (num (ly:prob-property page 'page-number)))
           (if (even? num)
               (list page)
               '())))
  }
  \markup ""
}

\book {
  { c' }
  \bookpart { \emptyPage }
  { c' }
  \pageBreak
  { c' }
  \bookpart { \emptyPage }
  { d' }
}



L'idée est de modifier l'algorithme de calcul des sauts
de page pour ce \bookpart afin qu'il supprime l'unique
page générée si elle est paire. Vous pouvez remplacer even?
par odd?.

Pour en apprendre plus sur les interfaces Scheme de LilyPond,
il y a essentiellement deux ressources : le manuel d'extension,
que vous avez déjà trouvé, et puis un document que j'ai écrit,

https://extending-lilypond.readthedocs.io

qui se veut plus complet.

Il est vrai que ni l'un ni l'autre ne mentionnent les modifications
de page-breaking, qui est plutôt documenté ici du point de vue
des valeurs prédéfinies par LilyPond :

https://lilypond.org/doc/v2.23/Documentation/notation/page-breaking

En fait, je n'y ai pas pensé du tout en écrivant « Extending LilyPond ».
C'est un coin de LilyPond dans lequel on a très rarement besoin d'aller
mettre son nez, ça m'était peut-être arrivé deux fois mais pas bien
plus ...

Cordialement,
Jean

Attachment: OpenPGP_signature
Description: OpenPGP digital signature


reply via email to

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