Ordre d'exécution

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

test.ly (1.22 KB)

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

···

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 ?
Ci-joint un exemple minimal.

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 :slight_smile:
Bertrand

Merci infiniment Maître ! Reconnaissance éternelle (au moins ça)
J'ai même réussi à comprendre le code :slight_smile:
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 :

%%% Numérotation des exos
#(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

···

Le 06/12/2010 23:47, Nicolas Sceaux a écrit :

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

Merci infiniment Maître ! Reconnaissance éternelle (au moins ça)
J'ai même réussi à comprendre le code :slight_smile:

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

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 !

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 :

%%% Numérotation des exos
#(let ((j 1))
(set! exo-number
(lambda ()
(set! j (1- j))
(format #f "~a" j)))

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

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

(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)))))

Bon, là je comprends mieux.

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 !

De même.

Pour Bertrand et tous ceux qui auraient du mal à trouver le sommeil,
mon livre de chevet :

Cordialement,
V. Villenave.

···

2010/12/7 Cécile Huneau <****@****>: