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

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

Re: En rouge et noir


From: Jean-Jacques Gerbaud
Subject: Re: En rouge et noir
Date: Sat, 30 Apr 2022 10:05:04 +0200
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Thunderbird/91.8.1

Le 29/04/2022 à 20:59, Jean Abou Samra a écrit :
> Bonsoir,
> 
> 
> Le 27/04/2022 à 04:47, Jacques Menu a écrit :
>> Pour les non-initiés : le gag, c’est que ‘le grand’ se dit ‘Ar Bras’ en 
>> breton (comme le chanteur connu Dan Ar Bras), cf le nom de l’auteur du 
>> message qui a initié cette discussion.
> 
> 
> Merci pour l'explication, je serais complètement passé à côté !
> 
> 
>> Gloire à Jean, on peut le dire !
> 
> 
> Pour l'anecdote, je suis tombé une fois (par hasard) sur un livre intitulé
> « À moi la gloire ». Ce titre piquant ma curiosité, je lis l'introduction.
> Il s'avère que l'auteur, un théologien catholique, avait donné une 
> conférence
> intitulée « À Toi la gloire », et que l'affiche de cette conférence était
> faite d'une manière qui juxtaposait le titre et le nom du conférencier 
> en gros,
> si bien qu'on avait l'impression que la gloire allait au conférencier…
> 
> Plus sérieusement, je tiens à préciser que j'ai personnellement appris à
> programmer LilyPond en lisant les snippets postés sur les listes, et que
> si vous le faites trop, il risque de vous arriver la même chose. D'ailleurs,
> c'est encore plus facile avec un tutoriel, par exemple, à tout hasard,
> 
> https://tutoriel-scheme.readthedocs.io
> 
> (que j'ai écrit précisément pour qu'il soit plus facile de se lancer pour
> les utilisateurs francophones).
> 
> Bref, si vous ne vous voyez pas du tout écrire du code Scheme, sachez
> que c'était mon cas à moi aussi il y a quelques années.
> 
> 
> 
>> Mille merci pour ce condenser de trucs que j'ai bien du mal à comprendre.
>>
>> En guise de remerciements, je vais m'attacher à comprendre tout cela.
> 
> 
> Très bonne idée. Pour vous donner un coup de pouce, une explication
> rapide de chaque étape :
> 
> 
> 
>>
>> \version "2.22.2"
>>
>> \layout {
>>   #(use-modules (ice-9 match))
> 
> 
> 
> Le module (ice-9 match) fournit match-let*, qui est utilisé plus bas.
> 
> 
>>   \context {
>>     \Staff
>>     \override LedgerLineSpanner.stencil =
> 
> 
> Je change le stencil du LedgerLineSpanner, c'est à dire la manière
> dont il s'affiche, son dessin.
> 
> 
>>       #(grob-transformer 'stencil
>>         (lambda (grob original)
> 
> 
> Le grob-transformer me permet d'obtenir la valeur qui aurait été
> calculée par défaut, et de calculer une nouvelle valeur à partir
> de l'ancienne.
> 
> 
>>           (match-let*
> 
> 
> Définition de variables locales, comme avec let* sauf que match-let*
> a des pouvoirs magiques en plus (voir plus bas).
> 
> 
>>               ((expr (ly:stencil-expr original))
> 
> 
> Dans un stencil (« dessin »), il y a trois composantes :
> 
> - Une expression qui explique comment exécuter le dessin,
> - Une étendue horizontale,
> - Une étendue verticale.
> 
> Cette ligne et les deux suivantes mettent ces trois composantes
> dans des variables.
> 
> 
>>                (X-ext (ly:stencil-extent original X))
>>                (Y-ext (ly:stencil-extent original Y))
>>                (('translate-stencil global-off ('combine-stencil . 
>> ledgers)) expr)
> 
> 
> Le programme de dessin du stencil ressemble à
> 
> (translate-stencil <un déplacement (càd paire (x . y))> (combine-stencil 
> <ligne 1> <ligne 2> ...))
> 
> match-let* permet de « déstructurer » cette expression de manière
> visuelle (le pattern matching est un peu déconcertant au début,
> mais rudement pratique).
> 
> 
>>                (new-ledgers
>>                 (map
>>                  (lambda (ledger)
> 
> 
> Maintenant, je construis une nouvelle liste de lignes à partir de 
> l'ancienne.
> 
> 
>>                    (match-let
>>                        ((('translate-stencil (0.0 . ledger-Y-off) 
>> ledger-expr) ledger))
> 
> 
> Nouveau pattern matching pour accéder à l'expression qui dessine la ligne
> (ledger-expr) et à son décalage vertical (ledger-Y-off).
> 
> 
>>                      (if (positive? ledger-Y-off)
>>                          `(color ,(css-color "red")
>>                                  ,ledger)
> 
> 
> La partie centrale : si ledger-Y-off est positif, c'est à dire que
> j'ai affaire à une ligne supplémentaire sur le haut de la portée,
> je la mets dans une expression (color ...) pour la colorier.
> Sinon, je la laisse telle quelle.
> 
> 
> 
>>                          ledger)))
>>                  ledgers))
>>                (new-expr
>>                 `(translate-stencil ,global-off (combine-stencil . 
>> ,new-ledgers))))
>>             (ly:make-stencil new-expr X-ext Y-ext))))
> 
> 
> 
> Et il n'y a plus qu'à tout reconstruire dans l'autre sens avec la
> nouvelle liste de lignes.
ya plus qu'à... !
> 
> 
> Voilà, j'espère que cela ne vous effraie pas (trop). En tous cas,
> je vous assure qu'il n'y a rien de sorcier là-dedans.
Non, Jean, pardon, il n'y a rien de sorcier pour celui qui sait, qui
connaît les termes, les expressions, le vocabulaire mais pour nous...

Pour écrire ce que tu viens d'écrire, il me faut la journée et encore,
je ne suis pas sûr d'y arriver !
> 
> Cordialement,

Merci quand même de ce début de tutoriel.

-- 
JJG
Drôme provençale



reply via email to

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