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

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

Re: Plusieurs \score dans une fonction print-book-with-defaults


From: Jean Abou Samra
Subject: Re: Plusieurs \score dans une fonction print-book-with-defaults
Date: Fri, 2 Dec 2022 11:39:14 +0100
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.5.0

Le 01/12/2022 à 11:38, Simon Martineau a écrit :


Bonjour à tous,

Il y a quelques semaines Jean m’a aidé sur le forum pour une fonction scheme (https://lists.gnu.org/archive/html/lilypond-user-fr/2022-11/msg00093.html).

J’ai passé pas mal de temps à chercher une solution, mais je bloque pour une dernière chose : Je souhaiterai pouvoir inclure plusieurs blocks |\score| dans mon |\book|, mais je ne sais pas comment m’y prendre. Ci dessous un exemple minimal de code.




Bonjour,

Désolé, j'étais en train d'oublier cette question.

Je ne vous cache pas que c'est un point sur lequel LilyPond
est légèrement étrange.

Voici au moins une solution qui marche :



\version "2.22.2"

xBook =
#(define-void-function (key book)
   (string? ly:book?)
   (print-book-with-defaults
     #{
     \book {
       \bookOutputSuffix $key
       \paper {
         oddHeaderMarkup = \markup {
           \on-the-fly \first-page {
             \circle \pad-around #2 $key
           }
           \on-the-fly \not-part-first-page {
             \fromproperty #'header:title
             \concat { "[" $key "]"  }
             "- p." \fromproperty #'page:page-number-string
           }
         }
         evenHeaderMarkup = \markup {
           \fromproperty #'header:title
           \concat { "[" $key "]"  }
           "- p." \fromproperty #'page:page-number-string
         }
       }
       $@(ly:book-scores book)
     }
     #}))

\header {
  title = "TEST"
}

\xBook "Ut" \book {
  \relative c' {
    a b c d
    \pageBreak
    a b c d
  }
}

\xBook "Ut" \book {
  \score {
    \relative c' {
      a b c d
      \pageBreak
      a b c d
    }
  }
  \score {
    \relative c' {
      d c b a
    }
  }
}



Ce code se sert du \book comme d'un « conteneur » qui permet de
regrouper les blocs \score.

Il y a aussi la solution avec une liste Scheme de \score, qui est
sans doute plus propre bien que légèrement plus verbeuse :


\version "2.22.2"

xBook =
#(define-void-function (key scores)
   (string? list?)
   (print-book-with-defaults
     #{
     \book {
       \bookOutputSuffix $key
       \paper {
         oddHeaderMarkup = \markup {
           \on-the-fly \first-page {
             \circle \pad-around #2 $key
           }
           \on-the-fly \not-part-first-page {
             \fromproperty #'header:title
             \concat { "[" $key "]"  }
             "- p." \fromproperty #'page:page-number-string
           }
         }
         evenHeaderMarkup = \markup {
           \fromproperty #'header:title
           \concat { "[" $key "]"  }
           "- p." \fromproperty #'page:page-number-string
         }
       }
       $@scores
     }
     #}))

\header {
  title = "TEST"
}

\xBook "Ut"
#(list
  #{
    \score {
      \relative c' {
        a b c d
        \pageBreak
        a b c d
      }
    }
  #})

\xBook "Ut"
#(list
  #{
     \score {
       \relative c' {
         a b c d
         \pageBreak
         a b c d
       }
     }
  #}
  #{
     \score {
       \relative c' {
         d c b a
       }
     }
  #})




Dans les deux cas, j'ai utilisé le « $@ », une fonctionnalité
qui mériterait d'être plus connue, qui insère tous les
éléments d'une liste dans le contexte environnant. $(list a b c)
est comme $a $b $c, sauf que la liste peut avoir un nombre
quelconque d'éléments.

(Gilles : non, un \score n'est pas une expression musicale,
donc on ne peut pas le mettre dans une expression musicale
{ ... }.)


J’en profite pour vous demander si il existe des formations ou si quelqu’un donne des cours pour apprendre à utiliser le Scheme pour Lilypond : il y a pas mal de points que j’aimerais maitriser mieux sans spammer la liste de diffusion !




Question intéressante. Pour ma part, j'ai mis en ligne des ressources
d'apprentissage, à savoir un tutoriel Scheme :

https://tutoriel-scheme.readthedocs.io

et un guide d'extension de LilyPond (en anglais) :

https://extending-lilypond.readthedocs.io

Est-ce que c'est le genre de réponse que vous attendiez ?

Cordialement,
Jean


Attachment: OpenPGP_signature
Description: OpenPGP digital signature


reply via email to

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