Subject: Justement un problème schèmique

From: Bernard Meylan <[email-masked]>
Date: Sat, 23 Feb 2019 08:59:36 -0700 (MST)

Bonjour/soir à tous!

J'utilise le ficher «shifted-ornaments» de notre ami Nicolas Sceaux, ainsi
que cette formule:

pinceLinv =
#(make-music 'HeadOrnamentationEvent
   'shift-when-on-line #f
   'left-text #{ \markup \rotate #180 \fontsize #-3 \musicglyph
#"scripts.lcomma" #})

pour placer un pincé à gauche d’une tête de note; j'aimerais pouvoir jouer
sur l'écartement entre le pincé et la tête de la note en introduisant un
\hspace #0.5 dans la dernière ligne du code ci-dessus, qqchose comme:

'left-text #{ \markup \rotate #180 \fontsize #-3 \hspace #0.5 \musicglyph
#"scripts.lcomma" #})

Mais ce ne doit pas être «schèmique», car je reçois un message d'erreur.
Savez-vous où placer cette commande?

-----
Cordialement

Bernard
--
Sent from: http://lilypond-french-users.1298960.n2.nabble.com/

---

From: Valentin Villenave <[email-masked]>
Date: Sat, 23 Feb 2019 19:01:52 +0000

> J'utilise le ficher «shifted-ornaments» de notre ami Nicolas Sceaux, ainsi

Bonsoir Bernard,
je serais ravi de vous donner un coup de main… mais je n’ai pas la
moindre idée de ce dont vous parlez. Quel est le fichier en question
et d’où sort-il? (Un rapport avec les articles de Nicolas sur le
LilyPondBlog en 2013?)

> Savez-vous où placer cette commande?

Alors ça par contre c’est beaucoup moins difficile; il s’agit
simplement de bien construire son \markup (pas de rapport direct avec
Scheme).

La commande \markup attend un objet à imprimer en tant que markup. En
général, on la fait suivre d’accolades :

\markup { plusieurs mots }

mais s’il n’y a qu’un seul objet qui la suit, on peut se passer des accolades :

\markup unseulmot.

Maintenant dans votre bloc, \markup est suivi de \rotate. Cela tombe
plutôt bien car \rotate attend deux arguments: un nombre (l’angle de
la rotation) et un markup (l’objet à faire pivoter). Si vous ne mettez
pas d’accolades derrière, il va à son tour prendre uniquement l’objet
qui suit.

… en l’occurence, il s’agit de \fontsize, qui _lui aussi_ attend deux
arguments dont un markup. Donc, ça nous renvoie à ce qui suit : à
savoir le musicglyph, et tout le monde est content.

Maintenant, si vous introduisez un \hspace, vous créez un _nouvel_
objet markup. Et du coup c’est lui qui va être changé de taille de
police, et pivoté (ce qui nous fait une belle jambe)… et le
\musicglyph du coup se retrouve non seulement en dehors de ce qui est
concerné par \fontsize, mais aussi par \rotate et même par \markup !
Du coup LilyPond rouspète car un \musicglyph qui se balade comme ça au
milieu de nulle part et même pas dans un bloc \markup, ça fait
désordre.

Bref, je serais vous je ferais quelque chose comme

\markup {
  \hspace #0.5
  \fontsize #-3 \rotate #180 \musicglyph "scripts.lcomma"
}

Cordialement,
V. V.

---

From: Bernard Meylan <[email-masked]>
Date: Sat, 23 Feb 2019 14:14:41 -0700 (MST)

Bonsoir Valentin,

alors effectivement il s’agit du fichier que Nicolas avait inséré dans le
blog LilyPond à propos des ornements à ajouter à Lily… ici:
https://lilypondblog.org/2013/09/adding-ornamentations-to-note-heads-part-2/

Je joins le fichier en question; mais ne s'agit-il tout de même pas de
langage Schème? Avec tous ces «#»? Et justement, dans votre solution, ne
figurent pas les 3 derniers caractères: #})

ce qui fait que cela ne marche pas…

shifted-ornaments.ly
<http://lilypond-french-users.1298960.n2.nabble.com/file/t249946/shifted-ornaments.ly>   

-----
Cordialement

Bernard

---

From: Valentin Villenave <[email-masked]>
Date: Sat, 23 Feb 2019 23:49:03 +0000

> figurent pas les 3 derniers caractères: #})

Oui, le markup est évidemment à mettre entre #{ et #} (puis fermer les
parenthèses qui doivent l’être). Mais dans les expressions en Scheme,
les blocs #{ …#} servent précisément à introduire de la syntaxe
LilyPond (en l’occurrence, un markup), donc on n’est plus dans la
syntaxe Scheme.

Pour s’en convaincre, regardez le code ci-dessous et notez que le
commentaire central est introduit par % et non par ";"

%%%%%%%%%%%%%

{
  % ceci est du code LilyPond
  % avec des commentaires introduits par %
  b
  #(make-sequential-music
    ; ceci est du code Scheme,
    ; avec des commentaires en point-virgule
    (list
     #{
       g'
       % Ceci est de nouveau du code Lily.
       f'
     #}
     ; fermons les parenthèses.
     ))
  e'
}

%%%%%%%%%%

Maintenant pour en revenir à votre code, on se rend compte qu’il
manque une accolade fermante dans votre markup, comme ceci :

pinceLinv =
   'left-text #{
   #})

V.