\include "" incompatible avec \variable ?

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 ?

Merci pour votre aide,
Laurent

···

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

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.

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.

legoss wrote:

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.

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.

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.

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

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.

···

Le 3 juin 2011 à 14:36, legoss a écrit :

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

Nicolas Sceaux wrote:

On ne peut pas avoir d'affectation de variable dans un block \book
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.

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.

···

2011/6/3 Nicolas Sceaux <****@****>:

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

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

···

Le 3 juin 2011 à 18:14, Valentin Villenave a écrit :

2011/6/3 Nicolas Sceaux <****@****>:

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

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.

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

Valentin Villenave wrote:

Et en trichant avec du Scheme?

myvar = {}

\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.

Nicolas Sceaux wrote:

setMusic =
#(define-music-function (parser location sym music) (symbol? ly:music?)
    (ly:parser-define! parser sym music)
    (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 :

Nicolas Sceaux wrote:

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

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.

Le 04/06/2011 10:09, legoss disait :

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

Valentin Villenave wrote:

Et en trichant avec du Scheme?

myvar = {}

\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

Nicolas Sceaux wrote:

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

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

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.

Ç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...

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&gt;
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

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.