Subject: "Souligner" des syllabes avec un point

From: Gildas <[email-masked]>
Date: Wed, 5 Oct 2011 14:56:00 -0700 (PDT)

Bonjour

D'abord un grand merci à tous les contributeurs pour les conseils fournis
sur cette liste et pour tout le travail effectué autour de ce formidable
outil qu'est Lilypond.
Jusqu'à maintenant j'ai toujours trouvé ce que je cherchais à faire mais ce
coup-ci la fonction n'existe pas. Je cherche à souligner du texte avec un
point (texte = caractère, syllabe, mot) à la manière de \underline. Je
souhaite que le point soit centré sous le texte rentré en argument et
pouvoir intervenir sur l'espacement vertical entre le texte et le point.
N'y arrivant pas directement avec les markups j'ai décidé de faire le pas en
essayant de mettre les mains dans le cambouis de Scheme. Je suis arrivé (à
force de lecture et de temps !) à l'exemple ci-dessous qui ne marche pas
vraiment... Le point de référence pour l'alignement est pris à gauche au
lieu qu'il soit pris au centre de l'emplacement normal du texte. Dans l'état
actuel le mot disparaît et il y a deux points, si je supprime l'avant
dernière commande le point n'est pas décalé et il y a un problème de place
pour le texte. Je reconnais être un peu perdu dans la syntaxe et les
différentes fonctions internes.
Voici un exemple :

#(define-markup-command (dot layout props text)
  (string?)
  #:properties ((offset -1))
  (let* ( 
      (font (ly:paper-get-font layout (cons '((font-encoding . fetaMusic))
props)))
      (dot (ly:font-get-glyph font "dots.dot"))
      (syl (interpret-markup layout props text))
      )
    (set! syl (ly:stencil-aligned-to syl X CENTER))
    (set! dot (ly:stencil-aligned-to dot X CENTER))
    (set! syl (ly:stencil-translate-axis dot offset Y))
    (ly:stencil-add syl dot)
   )
  )
      
\markup { Ceci \dot #"est" un essai }

Merci pour tout conseil.
Cordialement

Gildas

/(Config : Lilypond 2.14.2, Ubuntu 11.04)/

--
View this message in context: http://lilypond-french-users.1298960.n2.nabble.com/Souligner-des-syllabes-avec-un-point-tp6864007p6864007.html
Sent from the LilyPond French Users mailing list archive at Nabble.com.

---

From: Bertrand Bordage <[email-masked]>
Date: Thu, 6 Oct 2011 00:13:41 +0200

Bonsoir,

Voilà comment ce peut être fait avec des markups :

\markup \override #'(baseline-skip . 0.75) \center-column { est \musicglyph
#"dots.dot" }

Une version automatisée donne :

#(define-markup-command (dot layout props str)
 (string?)
 #:properties ((offset 0.75))
 (interpret-markup
   layout
   props
   (markup
     #:override `(baseline-skip . ,offset)
       #:center-column (str #:musicglyph "dots.dot"))))

Cordialement,
Bertrand

---

From: Gildas <[email-masked]>
Date: Wed, 5 Oct 2011 15:23:39 -0700 (PDT)

Bonsoir

Merci beaucoup pour la réactivité. C'est presque parfait mais il reste le
problème de la collision des mots : "ceci et "est" sont en collision? Je ne
sais pas comment on peut rétablir cela.

Cordialement
Gildas

--
View this message in context: http://lilypond-french-users.1298960.n2.nabble.com/Souligner-des-syllabes-avec-un-point-tp6864007p6864117.html
Sent from the LilyPond French Users mailing list archive at Nabble.com.

---

From: Gildas Prevost <[email-masked]>
Date: Thu, 6 Oct 2011 15:36:33 +0200

Bonjour

Merci beaucoup, ça marche impeccable. J'ai rajouté la fonction \concat pour
pouvoir l'appliquer à des caractères uniques. J'ai également retouché la
fonction \underline avec le concat ; ces deux fonctions retouchées vont
m'être très utiles pour la saisie de texte psalmodié.
Voici ce que ça donne :
\version "2.14.2"

#(define-markup-command (u layout props syl1 syl2 syl3) (string? string?
string?)
  (interpret-markup layout props
    (markup #:concat (
        syl1
        #:override '(offset . 6) #:override '(thickness . 3)
        #:underline syl2
        syl3))))

#(define-markup-command (dot layout props str1 str2 str3)
 (string? string? string?)
 #:properties ((offset 0.75))
 (let ((x-extent (ly:stencil-extent (interpret-markup layout props str2)
X)))
 (interpret-markup
   layout
   props
   (markup #:concat (
     str1
     #:override `(baseline-skip . ,offset)
        #:concat
          (#:hspace (/ (interval-length x-extent) 2)
            #:center-column (str2 #:musicglyph "dots.dot"))
     str3 )))))

\markup { \u #"C" #"e" #"ci" \u #"" #"e" #"st" un \dot #"ess" #"a" #"i" }

Le 6 octobre 2011 00:56, Bertrand Bordage <[email-masked]> a
écrit :

> Effectivement, sous 2.14 il y a ce problème. Il a été réglé depuis dans les
> versions de développement.
> Pour résoudre le problème sans passer à 2.15, il faut décaler le "est" de
> la moitié de sa largeur.  Cela donne ceci :
>
> \version "2.14"
>
>  (let ((x-extent (ly:stencil-extent (interpret-markup layout props str)
> X)))
>       (interpret-markup
>         layout
>         props
>         (markup
>             #:concat
>               (#:hspace (/ (interval-length x-extent) 2)
>                #:center-column (str #:musicglyph "dots.dot"))))))
>
> À plus et bonne nuit à tous,
> Bertrand
>

-- 
Latour Basse
31570 LANTA

06 31 84 85 03