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: Pierre-Yves Saumont
Subject: Re: \include in scheme fiunctions
Date: Sun, 27 Feb 2022 14:53:39 +0100

Merci ! Ca commence à fonctionner un peu mieux. J'ai toutefois encore plusieurs problèmes.

1) Les fichiers ne sont pas trouvés même s'il sont dans le même répertoire. La seule façon pour que ça fonctionne est d'indiquer le chemin d'accès complet depuis la racine. J'ai essayé avec ../ pour remonter d'un niveau, avec rien ou avec ./ en mettant les fichiers au même niveau que le programme exécuté, les fichiers ne sont pas trouvés. Seul le chemin complet fonctionne.

2) Existe-t-il un moyen de placer les parties de chaque instrument (avec tous les titres) dans un fichier PDF séparé? 

3) Que signifie rendre "les fichiers Truc_music.ly compilables,"? Lors de la saisie, j'ajoute à chaque fichier _music le code suivant:

\score {
  <<
  \new Staff <<\altoIMusic>>
  \new Staff <<\tenorIMusic>>
. . .
  >>
}

Ce qui me permet de voir ce que je saisi dans Frescobaldi. J'enlève ces lignes quand la saisie est terminée. Est-ce cela un fichier "compilable" ?

Merci pour votre aide.

N.B. J'envoie ce message en faisant "Répondre à tous", est-ce la façon correcte de procéder? En faisant "Répondre", ça n'envoie pas à la liste.

On Sun, Feb 27, 2022 at 1:46 PM Jean Abou Samra <jean@abou-samra.fr> wrote:


Le 27/02/2022 à 11:25, Pierre-Yves Saumont a écrit :
> Bonjour,
>
> La documentation Lilypond indique que n'importe quel code Lilypond
> peut être utilisé dans une fonction Scheme en le plaçant dans un bloc
> #{ ... #}, mais il semble que ce ne soit pas le cas pour \include.
>
> J'essaie de construire un programme pour manipuler des partitions de
> Big Band. Le but est d'extraire d'un certain nombre de partitions les
> parties d'un certain nombre d'instruments et de faire un PDF par
> instrument comportant les pages adéquates.
>
> Au départ, il y a une liste de titres (10 à 15) et une liste
> d'instruments (16 à 22).
>
> Pour l'instant, je doit créer manuellement un fichier comportant les
> lignes suivantes:
>
> \include "../Doxy/Doxy_music.ly"
> \include "partAltoI.ly"
> \include "../Alfie/Alfie_music.ly"
> \include "partAltoI.ly"
> \include "../CestSiBon/CestSiBon_music.ly"
> \include "partAltoI.ly"
> \include "../BeyondTheSea/BeyondTheSea_music.ly"
> \include "partAltoI.ly"
> \include "../CloseToYou/CloseToYou_music.ly"
> \include "partAltoI.ly"
> .
> .
> .
> include "../Doxy/Doxy_music.ly"
> \include "partAltoII.ly"
> \include "../Alfie/Alfie_music.ly"
> \include "partAltoII.ly"
> \include "../CestSiBon/CestSiBon_music.ly"
> \include "partAltoII.ly"
> \include "../BeyondTheSea/BeyondTheSea_music.ly"
> \include "partAltoII.ly"
> \include "../CloseToYou/CloseToYou_music.ly"
> \include "partAltoII.ly"
> .
> .
> .
> include "../Doxy/Doxy_music.ly"
> \include "partTenorI.ly"
> \include "../Alfie/Alfie_music.ly"
> \include "partTenorI.ly"
> \include "../CestSiBon/CestSiBon_music.ly"
> \include "partTenorI.ly"
> \include "../BeyondTheSea/BeyondTheSea_music.ly"
> \include "partTenorI.ly"
> \include "../CloseToYou/CloseToYou_music.ly"
> \include "partTenorI.ly"
> .
> .
> .
>
> Cela fait beaucoup de frappe inutile si on considère que les données
> réelles sont simplement deux listes. La liste des titres :
>
> Doxy
> Alfie
> CestSiBon
> BeyondTheSea
> CloseToYou
> .
> .
> .
>
> et la liste des instruments
>
> AltoI
> AltoII
> TenorI
> TenorII
> Baritone
> .
> .
> .
>
> J'ai essayé de créer une fonction telle que :
>
> part = #(define-void-function (score instrument) (string? string?)
>    #{
>      \include "../Doxy/Doxy_music.ly"
>      \include "partAltoI.ly"
>    #})
>
> (Ici, je ne construis pas encore les noms des fichiers à partir des
> arguments de la fonction, j'essaye simplement de voir si ça peut
> fonctionner.)
>
> L'appel de la fonction tel que \part "Doxy" "AltoI" produit l'erreur
> suivante :
>
> .../include/LilyJAZZwithBarNums.ily:62:1 <http://0.0.0.0/>: error:
> syntax error, unexpected SCM_TOKEN, expecting end of input
>
> #(define jazz-map '(
>
> /tmp/frescobaldi-1mgd5_wr/tmpys2kq_gz/March2022_parts_alto1.ly:13:1
> <http://0.0.0.1/>: error: error in #{ ... #}
>
> \part "Doxy" "AltoI"
>
> Le message dit que l'erreur est dans LilyJAZZwithBarNums.ily, mais
> comme ça marche en dehors d'une fonction, je ne pense pas que le
> fichier soit en cause.
>
> Y a-t-il un moyen d'obtenir le résultat souhaité ? Et accessoirement,
> y a-t-il un moyen de lire une variable lilypond dans un autre fichier
> sans faire un \include du fichier complet ? (L'include du fichier
> complet produit parfois des effets indésirables si une variable est
> manquante dans un fichier, car la valeur utilisée par le \include
> précédent est alors toujours en cours. Il y a également des problèmes
> avec l'incrémentation de taille de polices qui deviennent cumulative.
> Il y a visiblement un problème de "scope", les variables importées par
> \include semblant globales, mais pouvant être redéfinies par le
> \include suivant.)
>
> Merci pour toute suggestion qui me permettrait d'avancer dans ce projet.
>


L'ennui avec votre \include au milieu de #{ #}, c'est que
la construction #{ #} est faite pour écrire des valeurs.
Ainsi, vous pouvez faire

{
   ##{
     c'1
   #}
}

mais pas


{
   ##{
     mus = { c'1 }
     \mus
   #}
}

Votre \include contient manifestement des affectations et ce
genre de choses, qui ne peuvent pas aller dans un #{ #}.
Mieux vaut faire quelque chose comme

\version "2.22.1"

#(let ((titres '("Doxie"
                  "Alfie"
                  ;; ...
                  ))
        (instruments '("AltoI"
                       ;; ...
                       )))
    (for-each
     (lambda (t)
       (for-each
        (lambda (i)
          (ly:parser-include-string
           (format #f
                   "\\include \"../~a/~a_music.ly\" \\include \"part~a.ly\""
                   t t i)))
        instruments))
     titres))

Cela dit, en règle générale je recommanderais plutôt de
rendre les fichiers Truc_music.ly compilables, en définissant
des fonctions AltoI, etc. que vous appelez ensuite dans
Truc_music.ly.

Cordialement,
Jean

reply via email to

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