Subject: Re: \include "" incompatible avec \variable ?

From: legoss <[email-masked]>
Date: Fri, 3 Jun 2011 02:56:02 -0700 (PDT)

--
View this message in context: http://lilypond-french-users.1298960.n2.nabble.com/include-incompatible-avec-variable-tp6406510p6434647.html
Sent from the LilyPond French Users mailing list archive at Nabble.com.

---

From: Eluze <[email-masked]>
Date: Fri, 3 Jun 2011 03:33:06 -0700 (PDT)

legoss wrote:
> 
> Bonjour à tous,
> 
> Soit  http://lsr.dsi.unimi.it/LSR/Snippet?id=353 ce code  tiré du lsr, et
> sauvé sur un fichier "code.ly"
> Soit un autre fichier "principal.ly"
> Je cherche à insérer le premier dans le second en faisant un \include
> "code.ly"
> 
> Frescobaldi me sort un message d'erreur pour chaque variable, qu'elle soit
> créée ou nommée dans le code.
> Quand je supprime le nom des variables pour insérer leur contenu
> directement dans le bloc \score,
> \include fonctionne sans aucun problème.
> Le système les variables est vraiment très pratique. Est-ce que je dois me
> résigner à faire sans ?
> Ou bien, est-ce que j'ai loupé un épisode ?
> 
avec un peu de code on aurait quelquechose à grignoter…

chez moi ça marche (sans Fresco)!

cordialement
Eluze

--
View this message in context: http://lilypond-french-users.1298960.n2.nabble.com/include-incompatible-avec-variable-tp6406510p6434737.html
Sent from the LilyPond French Users mailing list archive at Nabble.com.

---

From: legoss <[email-masked]>
Date: Fri, 3 Jun 2011 05:07:07 -0700 (PDT)

Oupsssssssss !... j'oubliais une précision : mon \include se situe dans un
\bookpart. Exemple :

%%%%%%%%%%

\book {
   \bookpart {
   \include "monfichier.ly"
   }
}

%%%%%%%%%%

Et là, ça le fait pas.
J'ai l'impression de ne pas maîtriser les \include.
Pourtant, quand je lis 
http://lilypond.org/doc/v2.13/Documentation/notation/including-lilypond-files
la section de la doc , je vois pas où ça plante...

--
View this message in context: http://lilypond-french-users.1298960.n2.nabble.com/include-incompatible-avec-variable-tp6406510p6435003.html
Sent from the LilyPond French Users mailing list archive at Nabble.com.

---

From: Eluze <[email-masked]>
Date: Fri, 3 Jun 2011 05:21:07 -0700 (PDT)

> Oupsssssssss !... j'oubliais une précision : mon \include se situe dans un
chez moi ça marche - dans un book, un bookpart ou ailleurs… 
encore un peu de code?

Eluze

--
View this message in context: http://lilypond-french-users.1298960.n2.nabble.com/include-incompatible-avec-variable-tp6406510p6435048.html
Sent from the LilyPond French Users mailing list archive at Nabble.com.

---

From: legoss <[email-masked]>
Date: Fri, 3 Jun 2011 05:36:48 -0700 (PDT)

En pièce jointe un fichier pour \include dans le code de mon message
précédent
http://lilypond-french-users.1298960.n2.nabble.com/file/n6435086/monfichier.ly
monfichier.ly 

--
View this message in context: http://lilypond-french-users.1298960.n2.nabble.com/include-incompatible-avec-variable-tp6406510p6435086.html
Sent from the LilyPond French Users mailing list archive at Nabble.com.

---

From: Jean-Charles Malahieude <[email-masked]>
Date: Fri, 03 Jun 2011 15:41:50 +0200

Le 26/05/2011 12:56, legoss disait :
> Bonjour à tous,
>
> Soit  http://lsr.dsi.unimi.it/LSR/Snippet?id=353 ce code  tiré du
> lsr, et sauvé sur un fichier "code.ly" Soit un autre fichier
> "principal.ly" Je cherche à insérer le premier dans le second en
> faisant un \include "code.ly"
>
> Frescobaldi me sort un message d'erreur pour chaque variable, qu'elle
> soit créée ou nommée dans le code. Quand je supprime le nom des
> variables pour insérer leur contenu directement dans le bloc \score,
> \include fonctionne sans aucun problème. Le système les variables est
> vraiment très pratique. Est-ce que je dois me résigner à faire sans
> ? Ou bien, est-ce que j'ai loupé un épisode ?
>

Une piste : selon le « lieu de stockage » de tes variables, peuvent
interférer des problèmes d’azimuts.
Je viens d'être sérieusement confronté à ce problème : comme vous le
savez, je ressaisis le King Arthur, et souhaite n'utiliser que des
commandes de base de LilyPond, dans un but inavouable de prosélytisme
pur et dur (j'ai déjà presque converti la prof de clavecin quand elle a
vu comme on traite la basse chiffrée).
Mon dilemme se résume à un fichier de 3000 lignes par instrument pas
très pratique quand on replonge dedans), ou une découpe arborescente par
acte puis morceau. Mis à part la lourdeur des gros tonnages, tout va
bien dans le traitement. Dès lors que je découpe, les « références
croisées » deviennent un cauchemar.

Mais Lily m'a fourni la solution (3.3.1 Insertion de fichiers LilyPond)
« Les fichiers à inclure peuvent eux-même contenir des instructions
\include. Ces instructions \include de second niveau ne pourront, par
défaut, être interprétées qu’une fois intégrées dans le fichier
principal ; leur argument doit donc comporter le chemin relativement au
fichier principal et non par rapport au fichier dans lequel cette
inclusion est mentionnée. Vous pouvez toutefois influer sur ce
comportement à l’aide de l’option -drelative-includes en ligne de
commande ou en ajoutant une clause #(ly:set-option 'relative-includes
#t) en tête du fichier principal. Une fois relative-include activé, le
chemin à suivre pour chacune des commandes \include sera pris
relativement au fichier qui la contient. »

J'ai donc un Arthur-Viola.ly :
\version "2.13.61"
#(ly:set-option 'relative-includes #t) %<<<==== C'EST LÀ
\pointAndClickOff

\include "commons/Language-fr.ily"
\include "commons/Specials.ily"
\include "commons/Definitions.ily"
\include "commons/Pages.ily"

\book {
   \paper {
     print-page-number = ##f
     first-page-number = -3
     indent = 0
   }
   \header {
     title = \Arthur
     instrument = \Viola
   }
   \markup \null
   \pageBreak
   \markup \null

\bookpart {
   \paper {
     print-page-number = ##t
   }
   \header {
     title = \Overture
   }
   \include "Act0/A_Viola.ily"
} % ends bookpart Overture

\bookpart {
   \paper {
     print-page-number = ##t
   }
   \tocAct \ActOne
   \header {
     title = \ActOne
   }
   \include "Act1/Viola.ily"
} %%% ends bookpart ACT I

[...]

et dans Act1/Viola.ly :
\version "2.13.61"
\score  { % "We have sacrificed" & "To Woden thanks we render"
   \new Staff = "Viola" {
     << \clef alto
        \new Voice << \include "A/indication.ily"
	 \include "A/global.ily" \include "A/viola.ily" \MAC
	 \include "A/instrumental.ily" >>
   \header {
   }
   \layout {
   }
} % ends A "We have sacrificed" & "To Woden thanks we render"

@+
Jean-Charles

---

From: Nicolas Sceaux <[email-masked]>
Date: Fri, 3 Jun 2011 15:44:04 +0200

> http://lilypond-french-users.1298960.n2.nabble.com/file/n6435086/monfichier.ly

Ce n'est pas un problème d'include.
Essaie de copier-coller le contenu de ton fichier inclus à l'endroit
où tu veux l'inclure, et constate que le problème est toujours là.

On ne peut pas avoir d'affectation de variable dans un block \book
ou \bookpart.

---

From: legoss <[email-masked]>
Date: Fri, 3 Jun 2011 07:20:47 -0700 (PDT)

Nicolas Sceaux wrote:
> ou \bookpart
Mouais...
Si je comprends bien, ce sont les variables qui mettent le bazar, et il n'y
aucun remède.
Je devrai donc m'en passer...

--
View this message in context: http://lilypond-french-users.1298960.n2.nabble.com/include-incompatible-avec-variable-tp6406510p6435491.html
Sent from the LilyPond French Users mailing list archive at Nabble.com.

---

From: Valentin Villenave <[email-masked]>
Date: Fri, 3 Jun 2011 18:14:52 +0200

> On ne peut pas avoir d'affectation de variable dans un block \book

Et en trichant avec du Scheme?

myvar = {}

\score {
  #(define myvar #{ c''2 b'' #})
  \new Staff \myvar
}

C'est crade et ça produit un warning, mais ça marche.

Cordialement,
Valentin.

---

From: Nicolas Sceaux <[email-masked]>
Date: Fri, 3 Jun 2011 18:21:28 +0200

> C'est crade et ça produit un warning, mais ça marche.

Pour ma part, quand j'ai besoin en cours d'une pièce de positionner une
variable temporaire par exemple pour répéter un motif (dans un rondeau
par exemple), j'utilise la fontion suivante :

setMusic =
#(define-music-function (parser location sym music) (symbol? ly:music?)
    (ly:parser-define! parser sym music)
    (make-music 'Music 'void #t))

Nicolas

---

From: legoss <[email-masked]>
Date: Sat, 4 Jun 2011 01:09:55 -0700 (PDT)

Merci pour vos propositions. Mais elle ne me correspondent pas :

>  #(define myvar #{ c''2 b'' #})
ça fonctionne effectivement dans un \include simple.
Mais si cet \include est placé dans un \bookpart, ça me supprime tous les
\bookpart suivants à l'édition
du recueil final.

>     (make-music 'Music 'void #t))
Pour l'instant, vu mon niveau de pratique de Lilypond, ce type de langage
m'est inaccessible.
Pour l'instant...
En attendant que je me fasse les dents, je travaillerai plutôt avec la
méthode utilisée par Jean-Charles 
(voir plus haut), même si, pour moi, elle n'est pas très pratique. Mais à
défaut de mieux...

Il y a quand même une question qui m’angoisse et trouble mon métabolisme : 

> On ne peut pas avoir d'affectation de variable dans un block \book
Si la réponse n'est pas trop technique et/ou ésotérique, quelqu'un peut-il
m'expliquer pourquoi ? 
Est-ce qu'à l'avenir, une solution pourrait être trouvée ? est-ce qu'il y a
dans la 2.14 des avancées dans
ce domaine de "l'aspect pratique" en plus de l'aspect esthétique, qui est
déjà très très satisfaisant !
Ça serait d'autant plus pratique et bienvenu que j'ai quelques dizaines de
fichiers *.ly dans lesquels je 
dois virer des dizaines de variables, pour intégrer leur code ailleurs...

--
View this message in context: http://lilypond-french-users.1298960.n2.nabble.com/include-incompatible-avec-variable-tp6406510p6438753.html
Sent from the LilyPond French Users mailing list archive at Nabble.com.

---

From: Jean-Charles Malahieude <[email-masked]>
Date: Sat, 04 Jun 2011 10:53:49 +0200

Le 04/06/2011 10:09, legoss disait :
>> \score { #(define myvar #{ c''2 b'' #}) \new Staff \myvar }
>>
> ça fonctionne effectivement dans un \include simple. Mais si cet
> \include est placé dans un \bookpart, ça me supprime tous les
> \bookpart suivants à l'édition du recueil final.
>

Il faut garder à l'esprit qu'un \book, c'est comme un roman, composé de
chapitres (des \bookpart). On pourrait aussi le comparer à un classeur
qui contiendrait des feuilles (les cours pris sous la dictée du prof) et
des pochettes plastiques (les exercices polycopiés qu'il a distribués)
pour chaque leçon.

> En attendant que je me fasse les dents, je travaillerai plutôt avec
> la méthode utilisée par Jean-Charles (voir plus haut), même si, pour
> moi, elle n'est pas très pratique. Mais à défaut de mieux...
>

C'est assurément frustrant de devoir se refaire une partie du boulot 
déjà accompli avec succès... ce qui m'arrive puisque je saucissonne mes 
fichiers par pupitre et les redistribue selon l'arborescence adoptée en 
second lieu.

Quelques précisions :

-) chaque expression musicale faisant l'objet d'une variable doit 
constituer un fichier indépendant (et surchauffe du neurone pour le 
nommage...)

-) les fichiers à inclure ne doivent pas comporter de définition de 
variable pour les notes

-) si tu travailles en mode absolu, la séquence de notes, pour être 
considérée en tant qu'expression, doit être bornée par une paire 
d'accolades. Ceci est automagique dès lors que tu utilises un mode 
spécifique en préambule de l'expression, que ce soit \lyricmode, 
\figuremode ou autre

Si cela t'intéresse, je peux t'envoyer l'ouverture et le premier acte 
expurgés.

Bonne journée,
Jean-Charles

---

From: Nicolas Sceaux <[email-masked]>
Date: Sat, 4 Jun 2011 11:18:31 +0200

> Si la réponse n'est pas trop technique et/ou ésotérique, quelqu'un peut-il

Le parser est ainsi fait, il ne prévoit pas le cas :

   \bookpart {
      var = value
   }

Je ne sais pas si à l'origine c'est une limitation voulue, ou subie
(écrire une grammaire est compliqué, on ne fait pas exactement ce
que l'on veut).

Dans les faits, ça impose une contrainte sur la façon d'organiser les
fichiers, rien de plus.  Il suffit de s'organiser ainsi :
  - des fichiers qui contiennent les notes (éventuellement affectées à
  des variables), qu'on inclut au toplevel, avant les bookparts ;
  - des fichiers qui définissent les blocks scores, qu'on inclut dans
  les books ou bookparts.

Dans les faits, cela est agaçant la première fois où on rencontre ce
problème.  Ensuite, dès lors qu'on s'organise comme il faut, on n'y
pense plus.  Et quand on y réfléchit, cette pratique imposée (séparation
notes et structure) se trouvent être par ailleurs excellente.

> dois virer des dizaines de variables, pour intégrer leur code ailleurs...

Quelques dizaines... ça va encore, c'est surmontable.  On se casse un peu
les dents sur le premier projet et après c'est parti.

Je n'arrive plus à mettre la main sur les conseils que j'avais formulés
sur l'organisation des fichiers pour réduire au maximum l'effort de
maintenabilité sur de gros projets.  De mon expérience, il faut séparer
complètement (au niveau fichiers), les notes, et la structure des partitions.
Ca devient une évidence dès lors qu'on réalise des parties séparées, sur des
ouvrages importants (en taille).  Devoir charger intégralement les notes de
toutes les parties de l'œuvre complète alors qu'on veut réaliser seulement
la partie de troisième triangle, hm.  Intuitivement, ne charger que les notes
du 3e triangle dans ce cas semble largement suffisant.  Quand on en est à
tuner l'apparence d'une partie séparée complète (sauts de pages et compagnie,
le temps de compilation est un facteur à prendre en compte.

Pour ma part, j'utilise un fichier par partie, quand il y a des recouvrements
entre deux parties (par exemple violon1 et violon2 unis), alors je mets les
deux dans le même fichier (avec des tags pour distinguer 1re partie, 2e partie
et éventuellement les deux assemblées).
  Exemple :
<https://github.com/nsceaux/nenuvar/blob/master/Rameau/Opera/HippolyteEtAricie/AAAouverture/dessus.ily>
Dans l'absolu, il n'est même pas besoin d'affecter les notes à des variables
dans ces fichiers.  Il n'est même pas besoin d'accolade autour.  À ce niveau
c'est comme on veut.  On peut directement, au niveau block \score, inclure
le fichier au bon endroit, et ainsi on s'économise le choix d'un nom de
variable.

   \keepWitgTag #'violon1 \include "dessus.ily"

(avec l'astuce sur les includes relatifs donnée par JC c'est très pratique.)

Nicolas

---

From: legoss <[email-masked]>
Date: Sat, 4 Jun 2011 04:40:42 -0700 (PDT)

Allez ! je m'y mets...
Merci pour ces abondants conseils !
Laurent

--
View this message in context: http://lilypond-french-users.1298960.n2.nabble.com/include-incompatible-avec-variable-tp6406510p6438992.html
Sent from the LilyPond French Users mailing list archive at Nabble.com.