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

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

Re: Affichage conditionnel (if / else)


From: Phil
Subject: Re: Affichage conditionnel (if / else)
Date: Wed, 23 Sep 2009 02:27:20 +0200
User-agent: Thunderbird 2.0.0.23 (Macintosh/20090812)

Bonjour Nicolas,

Merci pour ta réponse.

Désolé de ne pas avoir été très précis, mais ce que je cherche n'est pas précis, je veux dire : ne se limite pas à un cas unique. C'est une information générale sur les ressources et la syntaxe de Scheme adaptée à Lilypond.

Je vais prendre un exemple extrêmement précis (donc limitatif par rapport à l'aide que je cherche) :

Je crée des tablatures pour la guitare pour des chansons de Ane Brun.
Dans son interprétation de plusieurs chansons, elle utilise un open-tuning (accord ouvert) de ré (c'est-à-dire un accordage non conventionnel de la guitare).

Or, il se trouve que certains de ses morceaux ne nécessitent pas vraiment cet accordage, peuvent être joués avec un accordage traditionnel (e b g d a e).

Donc, je voudrais à partir d'un seul fichier lilypond pouvoir sortir les deux versions de la tablature des-dits morceaux.
Version 1 : la tablature du morceau en accordage normal
Version 2 : la tablature du morceau en open-tuning

(Note : merci de ne pas m'interroger sur la pertinence de ces deux versions. À l'usage, elles sont intéressantes : la première pour celui qui n'a pas envie ou ne peut pas ré-accorder sa guitare, la seconde pour celui qui cherche le morceau exact)

Pour ce faire, je voudrais utiliser une seule variable (ci-dessous NONOPENTUNING) qui me permettrait, en étant modifiée avant compilation, de sortir très facilement ces deux versions :
NONOPENTUNING est true => la tablature est compilée en accordage normal
NONOPENTUNING est false => la tablature est compilée en open-tuning

Actuellement, j'utilise par exemple :

*** début de code ***

NOTOPENTUNING = 0

#(if (> NOTOPENTUNING 0)
(define SetOpenTuning '(+4 -1 -5 -10 -15 -20) )
(define SetOpenTuning '(+2 -3 -6 -10 -15 -22) )
)

*** fin de code ***

Puis j'utilise la variable SetOpenTuning dans le contexte de la TabStaff

*** début de code ***

\set TabStaff.stringTunings = \SetOpenTuning

*** fin de code ***

En mettant NOTOPENTUNING à 1, j'obtiens la version en accordage normal.


Si je n'avais qu'à modifier le `TabStaff.stringTunings`, je pourrais me contenter d'un :

*** début de code ***

\set TabStaff.stringTunings = (+4 -1 -5 -10 -15 -20)
% \set TabStaff.stringTunings = (+2 -3 -6 -10 -15 -22)

*** fin de code ***

… en décommentant l'une ou l'autre des deux lignes suivant ce que je veux obtenir.

Seulement, de nombreuses choses doivent être changées d'une version à l'autre : l'explication sur la version de la tablature visée, l'explication de l'accordage à utiliser (quand open-tuning), le pied de page, le contenu de l'entête, etc.

Je n'ai pas envie de décommenter/commenter chaque ligne concernée à la main.

Je voudrais n'utiliser que la définition de la variable NOTOPENTUNING pour modifier tout ça.

Mais vois-tu, je n'arrive même pas à faire le test tout bête pour savoir NOTOPENTUNING est #t ou #f, je n'ai pas trouvé la syntaxe qui fonctionne et je dois me contenter pour le moment de mettre cette valeur à 0 ou 1 et de faire un malheureux test avec ">" comme ci-dessus.

Voilà, désolé d'avoir été un peu long, mais puisqu'il fallait être précis ;-)

Merci pour toute aide qu'on pourra m'apporter (qui, pour faire court, se résume à m'indiquer où je serais susceptible de trouver de la document sur l'utilisation de Scheme avec Lilypond).

Bien à toi,

Bien à vous tous,

Phil


Nicolas Sceaux a écrit :
Il vaudrait mieux commencer par donner exemple concret de ce que tu
veux obtenir. Par exemple :

Dans le cas un, je voudrais que ça fasse [telle chose exprimée en code LilyPond] Dans le cas deux, je voudrais que ça fasse [telle autre chose exprimée en code LilyPond]

et alors il sera plus facile de te conseiller.
Très probablement cela nécessitera de recourir à du code Scheme.

Nicolas







reply via email to

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