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

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

Re: \include in scheme fiunctions


From: Jean Abou Samra
Subject: Re: \include in scheme fiunctions
Date: Wed, 2 Mar 2022 23:54:06 +0100
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Thunderbird/91.5.0

Bonjour,


Le 27/02/2022 à 18:30, Pierre-Yves Saumont a écrit :
Je connaissais l'usage de \book et  \bookOutputSuffix (grâce à votre réponse dans la liste Frescobaldi !),



Pour que tout le monde puisse comprendre : nous parlons de

https://github.com/frescobaldi/frescobaldi/issues/1423



mais mon problème est que je n'arrive pas à les utiliser dans ce cas précis.

J'ai essayé avec la fonction (avec un exemple minimal simplifié) :
#(let ((instruments '("AltoI"
                      "TenorI"
                       ))
       (titres '("AuClairDeLaLune"
                 "JAiDuBonTabac"

                  )))
    (for-each
     (lambda (i)
          (ly:parser-include-string (format #f "\\book{\\bookOutputSuffix ~a" i))


Il manque les \" \" autour du \bookOutputSuffix.



       (for-each
        (lambda (t)
          (ly:parser-include-string
           (format #f
                   "\\include \"./~a/~a_music.ly <http://a_music.ly>\" \\include \"./_part~a.ly <http://a.ly>\""
                   t t i)))
        titres) (ly:parser-include-string(format #f "}")))
     instruments))

C'était un peu téméraire ! Et bien sûr, ça ne fonctionne pas!

J'ai également essayé sans la fonction:

book{
  \bookOutputSuffix AltoI

  \include "./AuClairDeLaLune/AuClairDeLaLune_music.ly"
  \include "./_partAltoI.ly"

  \include "./JAiDuBonTabac/JAiDuBonTabac_music.ly"
  \include "./_partAltoI.ly"
}

\book{
  \bookOutputSuffix TenorI

  \include "./AuClairDeLaLune/AuClairDeLaLune_music.ly"
  \include "./_partTenorI.ly"

  \include "./JAiDuBonTabac/JAiDuBonTabac_music.ly"
  \include "./_partTenorI.ly"
}

Cela ne fonctionne pas non plus, mais la raison semble différente. J'obtiens des message d'erreur du type :

./AuClairDeLaLune/AuClairDeLaLune_music.ly:3:1 <0>: error: syntax error, unexpected SYMBOL

title = "Au clair de la lune"

ou :

./_parts.ly:4:23 <2>: error: unknown escaped string: `\title'

title = \markup {

\title }

Il semble donc qu'en ajoutant \book { ... } la déclaration title = "Au clair de la lune" dans le fichier AuClairDeLaLune_music.ly n'est plus syntactiquement correcte. Je suppose qu'on ne peux pas déclarer des variables à l'intérieur de \book?




Effectivement. Un \include ne fait que recopier littéralement
le contenu d'une autre fichier dans la source (pas d'espaces
de nommage). La syntaxe


\book {
  xyz = "toto"
}

n'est pas valide, donc l'équivalent avec le \include d'un fichier
qui comporte « xyz = "toto" » ne l'est pas non plus.


Mais alors comment faire?



Bon, essayons une autre approche que les \include à paramètre.
Je propose :

\version "2.22.1"

% AuClairDeLaLune_music.ly

AuClairDeLaLune.partTenorI = \new Staff \relative c' {
  c4 c c d e2 d c4 e d d c1
}

AuClairDeLaLune.partTenorII = \new Staff \relative c {
  \clef bass
  e4 e e f g2 f e4 g f f e1
}

% JAiDuBonTabac_music.ly

JAiDuBonTabac.partTenorI = \new Staff \relative c' {
  c8 d e c d4 d8 e f4 f e e
}

JAiDuBonTabac.partTenorII = \new Staff \relative c' {
  s1*2^"erreur : imagination épuisée"
}

% Fichier principal

partition =
#(define-music-function (part-alist which) (list? symbol?)
   (if (eq? which 'conducteur)
       (make-simultaneous-music (reverse! (map cdr part-alist)))
       (let ((m (assq-ref part-alist which)))
         (or m
             (begin
               (ly:warning "instrument ~a non trouvé" which)
               (make-music 'SequentialMusic))))))

toutesLesPartitions =
#(define-void-function (part-alists) (list?)
   (define (add m) (add-score (scorify-music m)))
   (for-each
    (lambda (alist)
      (let ((parts (reverse! (map cdr alist))))
        (add (make-simultaneous-music parts))
        (for-each add parts)))
    part-alists))

% \include "AuClairDeLaLune_music.ly"
% \include "JAiDuBonTabac_music.ly"

\partition \AuClairDeLaLune conducteur
\partition \AuClairDeLaLune partTenorII

\pageBreak

\toutesLesPartitions #`(,AuClairDeLaLune ,JAiDuBonTabac)



Cordialement,
Jean





reply via email to

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