Subject: Ordre d'exécution

From: Cécile Huneau <[email-masked]>
Date: Mon, 06 Dec 2010 23:15:52 +0100

Bonsoir la liste,

Bon, je vous raconte mon problème... mais ne rigolez pas ce n'est pas 
drôle !
J'avais commencé à faire mes fiches de cours avec OpenOffice et 
ooOLilypond, ce qui me permet de faire rapidement des fiches... pas 
terribles. Je trouve tout de suite les limites, et bien que l'on me dise 
que mes fiches sont très jolies forcément je ne vois que les défauts, et 
puis c'est un peu "bricolage" comme solution. Donc je me suis dit 
Lilypond est mon ami (c'est beaucoup moins vrai depuis 24h), allons-y 
créons une belle feuille de style pour gérer tout ce que je veux au 
quart de poil.

J'ai donc paramétré mes titres, les espacements et tout le blabla, et 
puis je me suis mise en tête de faire une bête fonction pour numéroter 
automatiquement les exercices et les leçons, et c'est là que les ennuis 
commencent.
Après pas mal de tentatives... Ouéééééééé ça marche ! J'ai des numéros 
qui s'incrémentent tous seuls !!! Youpiiiii ! Je remplis plein de pages 
avec des numéros qui se suivent tellement je suis contente... puis je me 
décide à placer le numéro d'exo là où je veux qu'il apparaisse, c'est à 
dire à l'emplacement du nom d'instrument en début de 1ère portée de 
chaque morceau. Et là c'est le drame. Ah les numéros s'incrémentent 
toujours, ça oui : le dernier exercice porte le n°1, l'avant dernier le 
n°2, etc. (arrêtez de rire je vous ai dit que ce n'était drôle !) Il 
doit y avoir quelque chose avec l'ordre de compilation non ?

Auriez-vous des pistes pour que je puisse obtenir le résultat que je 
souhaite ?
Ci-joint un exemple minimal.

Bonne nuit à tous !
Cécile

---

From: Nicolas Sceaux <[email-masked]>
Date: Mon, 6 Dec 2010 23:47:30 +0100

Le 6 déc. 2010 à 23:15, Cécile Huneau a écrit :

> J'ai donc paramétré mes titres, les espacements et tout le blabla, et puis je me suis mise en tête de faire une bête fonction pour numéroter automatiquement les exercices et les leçons, et c'est là que les ennuis commencent.
> Après pas mal de tentatives... Ouéééééééé ça marche ! J'ai des numéros qui s'incrémentent tous seuls !!! Youpiiiii ! Je remplis plein de pages avec des numéros qui se suivent tellement je suis contente... puis je me décide à placer le numéro d'exo là où je veux qu'il apparaisse, c'est à dire à l'emplacement du nom d'instrument en début de 1ère portée de chaque morceau. Et là c'est le drame. Ah les numéros s'incrémentent toujours, ça oui : le dernier exercice porte le n°1, l'avant dernier le n°2, etc. (arrêtez de rire je vous ai dit que ce n'était drôle !) Il doit y avoir quelque chose avec l'ordre de compilation non ?
> 
> Auriez-vous des pistes pour que je puisse obtenir le résultat que je souhaite ?

J'ai du mal à comprendre ce qui se passe dans ton exemple, quoiqu'il en soit
voici une version qui fonctionne : en passant par des fonctions musicales on
garde un meilleur contrôle sur l'ordre d'exécution des opérations, et en
l'occurence sur l'ordre d'évaluation de la fonction d'incrément.

%%%	Numérotation des exos
#(let ((i 0))
   (set! lesson-number
         (lambda ()
	   (set! i (1+ i))
	   (format #f "~a" i))))

#(define-markup-command (exo layout props num) (number?)
   (interpret-markup layout props
                     (markup #:center-column (#:abs-fontsize 18 #:bold num))))

exoNumber =
#(define-music-function (parser location) ()
   (let ((mynum (exo-number)))
   #{ \set Staff.instrumentName = \markup \exo #$mynum #}))

Nicolas

---

From: Bertrand Bordage <[email-masked]>
Date: Tue, 7 Dec 2010 00:16:25 +0100

Impressionnant...
Juste une question : Conseillez-vous un livre ou un tutorial sur le Scheme ?
Pour faire des fonctions simples, c'est facile, mais de là à tout
comprendre...

Merci :)
Bertrand

---

From: Cécile Huneau <[email-masked]>
Date: Tue, 07 Dec 2010 01:32:41 +0100

>     #{ \set Staff.instrumentName = \markup \exo #$mynum #}))
Merci infiniment Maître ! Reconnaissance éternelle (au moins ça)
J'ai même réussi à comprendre le code :-)
Je note précieusement l'info pour les fonctions musicales.

Mais pourquoi étais-je persuadée qu'on ne pouvait pas mettre de \markup 
dans un bidule define-music-function ?
J'avais également trouvé un cache misère écrit dans le plus pur esprit 
Shadokien.
Rien que pour le sport, parce que je sais que certains ici décortiquent 
les fonctions scheme... voici comment se gratter l'oreille gauche avec 
la main droite :

#(let ((j 1))
     (set! exo-number
         (lambda ()
             (set! j (1- j))
             (format #f "~a" j)))
     (set! exo-count
         (lambda ()
             (set! j (1+ j)))))

#(define-markup-command (exo-number-settings layout props) ()
     (interpret-markup layout props
         (let ((mynum (exo-number)))
             (markup #:center-column (#:abs-fontsize 18 #:bold mynum)))))

exoNumber = { \set Staff.instrumentName = \markup \exo-number-settings }
newExo = #(define-music-function (layout props) ()
     (let ((mynum (exo-count)))
         #{ #}))

\newExo \relative do'' {\exoNumber do4 do do re mi2 re do4 mi re re do1}
\newExo \relative do'' {\exoNumber re4 re re re la2 la re4 do si la sol1}

Je vous l'avais dit que c'était tordu !
Cette fois-ci bonne nuit !
Cécile

---

From: Valentin Villenave <[email-masked]>
Date: Tue, 7 Dec 2010 02:24:19 +0100

> J'ai même réussi à comprendre le code :-)

Et voilà pourquoi il faut l'appeler Maître :)

> Je note précieusement l'info pour les fonctions musicales.

Non seulement on peut la noter <subtile allusion>mais on peut même
aller mettre ça sur le LSR</subtile allusion>...

> Mais pourquoi étais-je persuadée qu'on ne pouvait pas mettre de \markup dans
> un bidule define-music-function ?

Ça ne marche pas à tous les coups (parfois il faut contourner avec du
Scheme)... Mais là ça marche !

> Rien que pour le sport, parce que je sais que certains ici décortiquent les
> fonctions scheme... voici comment se gratter l'oreille gauche avec la main
> droite :
>

Ah ouais quand même... Je trouve mon code tordu, mais là, j'avoue, je
dois m'incliner :)

Pourquoi ne pas utiliser number->string, au passage?

>            (markup #:center-column (#:abs-fontsize 18 #:bold mynum)))))

Bon, là je comprends mieux.

> Cette fois-ci bonne nuit !

De même.

Pour Bertrand et tous ceux qui auraient du mal à trouver le sommeil,
mon livre de chevet :
http://www.gnu.org/software/guile/manual/html_node

Cordialement,
V. Villenave.