[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
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- Re: \include in scheme fiunctions,
Jean Abou Samra <=