lilypond-user-fr
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Ordre d'exécution


From: Nicolas Sceaux
Subject: Re: Ordre d'exécution
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 
> ?
> Ci-joint un exemple minimal.

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




reply via email to

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