Subject: Au sujet de titres

From: Bernard Meylan <[email-masked]>
Date: Sun, 19 Jan 2020 10:47:09 -0700 (MST)

Bonjour à toutes/tous!

Savez-vous où se trouve, dans le manuel, les infos concernant la possibilité
(ou pas…?) de pouvoir faire un titre qui suit une courbe, en ce qui me
concerne un léger arc-de-cercle…

-----
Cordialement

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

---

From: Martial R <[email-masked]>
Date: Mon, 20 Jan 2020 11:23:22 +0100

Bonjour,

Je ne trouve pas dans la doc, et je ne sais pas faire en markup. Perso
c'est trop de temps de recherche, sans répondre à la question je ferai avec
un outil de graphisme le titre sur une courbe.

exemple joint

Le dim. 19 janv. 2020 à 18:47, Bernard Meylan <[email-masked]> a

-- 
Martial Rameaux

---

From: Bernard Meylan <[email-masked]>
Date: Mon, 20 Jan 2020 11:44:05 -0700 (MST)

Oui, c'est la première pensée qui m'est venue… Mais il me semblait avoir vu
un passage du manuel qui traitait de la chose…

-----
Cordialement

Bernard

---

From: Martial R <[email-masked]>
Date: Tue, 21 Jan 2020 09:31:43 +0100

Bonjour,
on peut bricoler un truc comme ça, mais ce n'est pas tip top.

%%%%%%%%
\header {
  title =  \markup {
    \rotate #5 T
    \translate #'(0 . 0.5)\rotate #5
    I
    \translate #'(0 . 1)\rotate #0
    T
    \translate #'(0 . 0.5)\rotate #-5
    R
    \rotate #-5
    E
  }
}

{ s }
%%%%%%%%

---

From: Bernard Meylan <[email-masked]>
Date: Wed, 22 Jan 2020 15:07:47 -0700 (MST)

Ah pas mal… merci pour la piste!

-----
Cordialement

Bernard

---

From: Christophe Pochon <[email-masked]>
Date: Thu, 23 Jan 2020 10:19:33 +0100

J'ai fait pas mal d'essais moi aussi. En utilisant aussi la fonction
put-adjacent, et en utilisant Excel pour me générer automatiquement les
lignes de code, avec des sinus et des cosinus, mais de manière très
empirique :-)
Le résultat était assez prometteur pour la première moitié de l'arc de
cercle, mais pas pour la suite, ou du moins j'ai abandonné après quelques
heures d'essais :

%%%%%%
 \header {
  title =  \markup { \concat {
    \translate #'(0 . 0) \rotate #85.5 \put-adjacent #0 #1 "T"
    \translate #'(0 . -0.972369920397677) \rotate #-9 \put-adjacent #0 #1
"i"
    \translate #'(0 . -0.923879532511287) \rotate #-9 \put-adjacent #0 #1
"t"
    \translate #'(0 . -0.852640164354092) \rotate #-9 \put-adjacent #0 #1
"r"
    \translate #'(0 . -0.760405965600031) \rotate #-9 \put-adjacent #0 #1
"e"
    \translate #'(0 . -0.649448048330184) \rotate #-9 \put-adjacent #0 #1 "
"
    \translate #'(0 . -0.522498564715949) \rotate #-9 \put-adjacent #0 #1
"s"
    \translate #'(0 . -0.38268343236509) \rotate #-9 \put-adjacent #0 #1 "u"
    \translate #'(0 . -0.233445363855905) \rotate #-9 \put-adjacent #0 #1
"r"
    \translate #'(0 . -0.078459095727845) \rotate #-9  " "}
                     {
                       \translate #'(-1 . 0) \rotate #-9 \put-adjacent #1
#-1 "u"
                       \translate #'(-1 . 0) \rotate #-9 \put-adjacent #1
#-1 "n"
                       \translate #'(3.8268343236509 . 0) \rotate #-9
\put-adjacent #1 #-1 "e"
                       \translate #'(5.22498564715949 . 0) \rotate #-9
\put-adjacent #1 #-1 ""
                       \translate #'(6.49448048330184 . 0) \rotate #-9
\put-adjacent #1 #-1 "c"
                       \translate #'(7.60405965600031 . 0) \rotate #-9
\put-adjacent #1 #-1 "o"
                       \translate #'(8.52640164354092 . 0) \rotate #-9
\put-adjacent #1 #-1 "u"
                       \translate #'(9.23879532511287 . 0) \rotate #-9
\put-adjacent #1 #-1 "r"
                       \translate #'(9.72369920397677 . 0) \rotate #-9
\put-adjacent #1 #-1 "b"
                       \translate #'(9.96917333733128 . 0) \rotate #-9  "e"
                     }
  }
}
%%%%%%

A+

Christophe

Christophe Pochon

---

From: Bernard Meylan <[email-masked]>
Date: Thu, 23 Jan 2020 08:54:29 -0700 (MST)

…impressionnant… 

Bon, au vu de cela, je vais me tourner vers un titre sur LibreOffice en .eps
que je collerai.

Merci pour vos essais!

-----
Cordialement

Bernard

---

From: Gerard <[email-masked]>
Date: Thu, 23 Jan 2020 17:51:42 +0100

Bonsoir,

Rien trouvé dans "Titrages personnalisés"...

Une possibilité avec Lualatex-Lilypond et Tikz

Exemple joint (2 images png) + source .tex

Cordialement

G.

---

From: Christophe Pochon <[email-masked]>
Date: Fri, 24 Jan 2020 09:31:27 +0100

Oh, mais j'ai trouvé !
%%%%%%%

\version "2.19.20"
montitreps  = #"
40 4 translate    /r  25  def    /r2  30  def     /a  3.5  def
/c a r2  atan def     /ch  1 string  def
  /Arial findfont
   5 scalefont
setfont
/text (Texte sur un arc-de-cercle) def
/depar text  stringwidth  pop    90  mul  3.14  div
r  div   def    0  0  moveto depar  rotate
text {   ch  0  3  2  roll  put
/l  ch  stringwidth  pop  def
/dec l r  atan  2  div  neg  def
0  0  moveto dec rotate  l neg  2 div r rmoveto
ch  show dec  rotate
} forall

      "

montitre = \markup {
  \with-dimensions #'(0 . 73) #'(0 . 35)
  \postscript #montitreps
}
\header {
  title = \montitre
}
\relative c'' {
  c1
}
%%%%%%%

Christophe Pochon

---

From: Christophe Pochon <[email-masked]>
Date: Fri, 24 Jan 2020 09:40:03 +0100

Version avec quelques lignes superflues supprimées :

%%%%%%
\version "2.19.20"
montitreps  = #"
   /r  25  def
    /ch  1 string  def
  /Times findfont
   4 scalefont
setfont
r  div   def
0  0  moveto
depar  rotate

montitre = \markup {
  \with-dimensions #'(0 . 0) #'(0 . 30)
  \postscript #montitreps
}
\header {
  title = \montitre
}
\relative c'' {
  c1
}
%%%%%%%%%5
Christophe Pochon

---

From: Christophe Pochon <[email-masked]>
Date: Fri, 24 Jan 2020 09:46:14 +0100

Et là j'ai réussi à supprimer la distance entre le titre et la musique :

%%%%%%
\version "2.19.20"
montitreps  = #"
0 -15 translate
   /r  25  def
    /ch  1 string  def
  /Times findfont
   4 scalefont
setfont

montitre = \markup {
  \with-dimensions #'(0 . 0) #'(0 . 13)
  \postscript #montitreps
}
\header {
  title = \montitre
}
\relative c'' {
  c1
}
%%%%%%%
Christophe Pochon

---

From: Valentin Villenave <[email-masked]>
Date: Fri, 24 Jan 2020 10:27:29 +0000

> Et là j'ai réussi à supprimer la distance entre le titre et la musique :

Pas mal ; de mon côté j’ai essayé de rendre tout ça plus flexible,
mais je rame pour arriver à calculer une hauteur satisfaisante. Si
quelqu’un qui s’y connait mieux en trigonométrie peut se pencher sur
la question…

%%%%%

\version "2.19.20"

#(define-markup-command (arcText layout props radius txt)
   (number? string?)
   (let* ((font-size 4)
          (pi (atan 0 -1))
          (txt-len
           (cdr (ly:stencil-extent
                 (interpret-markup layout props txt) X)))
          (circle-len (* pi radius 2))
          (angle-rad (/ circle-len (/ txt-len 2)))
          (height (+ font-size (* radius (- 1 (cos angle-rad)))))
          (width (+ (* 2 font-size)
                   (abs (* 2 radius (sin angle-rad))))))
     (interpret-markup layout props
       (markup ; #:box
        #:with-dimensions
        (cons (* width -.5) (* width .5))
        (cons (* height -.5) (* height .5))
        #:raise (- radius) ; non!
        #:raise (* height .5) ; nooon!!
        #:raise (- font-size) ; naoooon!!!!
        #:postscript
        (format #f "
/r ~a def
/ch 1 string def
/Times findfont
~a scalefont
setfont
/text (~a) def
/depar text stringwidth pop 90 mul ~a div
r div def
depar rotate
text {
  ch 0 3 2 roll put
  /l ch stringwidth pop def
  /dec l r atan 2 div neg def
  0 0 moveto dec rotate l neg 2 div r rmoveto
  ch show dec rotate
} forall
" radius  font-size txt pi)))))

\header {
  title = \markup \arcText #20 "petit texte"
 % title = \markup \arcText #40 "long long long long long texte"
 % title = \markup \arcText #10 "long long long long long texte"
}
\relative c'' {
  c1
}

%%%

V.

---

From: Denis Bitouzé <[email-masked]>
Date: Fri, 24 Jan 2020 12:03:07 +0100

Le 24/01/20 à 10h27, Valentin Villenave a écrit :

> Si quelqu’un qui s’y connait mieux en trigonométrie peut se pencher
> sur la question…

Pas lu le fil. Si tu peux décrire juste le problème trigonométrique en
question, je pourrai essayer d'aider.
-- 
Denis

---

From: Olivier Miakinen <[email-masked]>
Date: Fri, 24 Jan 2020 12:19:23 +0100

Le 24/01/2020 12:03, Denis Bitouzé répondait à Valentin Villenave :
> Pas lu le fil.

Moi j'ai lu le fil, mais je ne comprends pas encore assez le
fonctionnement interne de LilyPond pour avoir compris ce que
tu proposais.

> Si tu peux décrire juste le problème trigonométrique en

Pareil.

---

From: Christophe Pochon <[email-masked]>
Date: Fri, 24 Jan 2020 13:40:14 +0100

En gros, il s'agit de calculer la hauteur et la largeur du titre, en
fonction du texte du titre, du rayon du cercle et de la taille de la police.

Christophe Pochon

---

From: Denis Bitouzé <[email-masked]>
Date: Fri, 24 Jan 2020 14:33:48 +0100

Le 24/01/20 à 13h40, Christophe Pochon a écrit :

> fonction du texte du titre, du rayon du cercle

Quel cercle ?

> et de la taille de la police.

Un dessin pourrait aider.
-- 
Denis

---

From: Christophe Pochon <[email-masked]>
Date: Fri, 24 Jan 2020 15:11:38 +0100

Là, on n'est pas loin de la solution :

%%%%%
#(define-markup-command (arcText layout props radius txt)
   (number? string?)
   (let* ((font-size 8)
          (pi (atan 0 -1))
          (txt-len (* (/ font-size 4)
           (cdr (ly:stencil-extent
                 (interpret-markup layout props txt) X))))
          (circle-len (* pi radius 2))
          (angle-rad (/ txt-len radius))
          (height (* radius (- 1 (cos (/ angle-rad 2)))))
          (width
                   (abs (* 2 radius (sin (/ angle-rad 2))))))
     (interpret-markup layout props
       (markup ;#:box
        #:with-dimensions
        (cons (* width -.5) (* width .5))
        (cons (* height -.5) (* height .5))
        #:raise (- radius) ; non!

        #:postscript
        (format #f "
/r ~a def
/ch 1 string def
/Times findfont
~a scalefont
setfont
/text (~a) def

\header {
  title = \markup \arcText #20 "petit texte"
 %title = \markup \arcText #40 "long long long long long texte"
% title = \markup \arcText #10 "long long long long long texte"
}
\relative c'' {
  c1
}
%%%%%%%5
Christophe Pochon

---

From: Valentin Villenave <[email-masked]>
Date: Fri, 24 Jan 2020 14:56:54 +0000

> Là, on n'est pas loin de la solution :

Malheureusement pas encore ; si tu décommentes l’instruction #:box
dans ma fonction et que tu bidouilles les valeurs de radius, la taille
de fonte ou la longueur de la chaîne de caractères, comme je l’ai
proposé par exemple avec les deux autres définitions de title en
commentaire dans le \header, tu verras que les dimensions du markup
(de la bounding-box, comme on dit) sont encore largement anarchiques.

De surcroît, la façon dont j’ai essayé de tenir compte de la font-size
est complètement anarchique et demanderait elle aussi à être affinée.
Mais entre la trigo, les radiants, l’inclinaison des caractères, la
curvature etc… c’est pas simple. (En tout cas pour moi.)

V.

---

From: Olivier Miakinen <[email-masked]>
Date: Fri, 24 Jan 2020 17:52:02 +0100

> fonction du texte du titre, du rayon du cercle et de la taille de la police.

Ok.

Voici une image d'illustration : https://i.goopics.net/naa5p.png

En haut, le texte s'il devait s'afficher normalement, tout droit et
horizontalement. J'ai représenté en bleu le rectangle englobant le
texte. La ligne horizontale rouge est celle dont la longueur sera
préservée sur le cercle (bien évidemment, les longueurs au dessus
deviendront plus grandes, et celles en dessous plus petites).

En bas, le texte en arc de cercle. La ligne en rouge est à une
distance r du centre du cercle, les autres arcs de cercle étant
respectivement à r+u et r-d de ce centre.

D'après ce schéma, de quelles dimensions a-t-on besoin ? Est-ce que
je dois nommer d'autres points pour que ce soit plus facile à décrire ?

Cordialement,
-- 
Olivier Miakinen

---

From: Olivier Miakinen <[email-masked]>
Date: Fri, 24 Jan 2020 18:46:42 +0100

> respectivement à r+u et r-d de ce centre.

Et voici déjà quelques valeurs, en espérant que je ne me sois pas
trompé.

Soit t la moitié de l'angle de l'arc de cercle.
On a t = (l/r)/2 = l/2r (en radians).

On a alors les résultats suivants concernant le rectangle en orange qui
englobe le texte en arc de cercle :
1) la longueur de ce rectangle est 2⋅(r+u)⋅sin(t)
2) la distance du bas du rectangle au centre du cercle est (r-d)⋅cos(t)
3) la distance du haut du rectangle au centre du cercle est (r+u)
4) la hauteur du rectangle est donc (r+u) - (r-d)⋅cos(t)

Bien sûr, ceci n'est vrai que tant que l est inférieur à pi⋅r, c'est-
à-dire que l'arc ne fait pas plus d'un demi-tour.

-- 
Olivier Miakinen

---

From: Christophe Pochon <[email-masked]>
Date: Fri, 24 Jan 2020 22:57:35 +0100

Je ne sais pas si je trouverais la solution. Je vais encore m'y atteler ces
prochains jours. Mais en tout cas, une chose est sûre : ce projet m'a
permis de comprendre beaucoup mieux scheme et j'en suis ravi !

Christophe Pochon

---

From: Christophe Pochon <[email-masked]>
Date: Fri, 24 Jan 2020 22:59:17 +0100

trouverai
Christophe Pochon

Le ven. 24 janv. 2020 à 22:57, Christophe Pochon <
[email-masked]> a écrit :

> Je ne sais pas si je trouverais la solution. Je vais encore m'y atteler
> ces prochains jours. Mais en tout cas, une chose est sûre : ce projet m'a

---

From: Christophe Pochon <[email-masked]>
Date: Sat, 25 Jan 2020 17:10:23 +0100

Etat des lieux :

%%%%%%%%%%%
\version "2.19.20"
\version "2.21.0"
#(define-markup-command (arcText layout props radius size txt)
   (number? number? string?)
   (let* ((font-size size)
          (pi (atan 0 -1))
          (txt-len (* font-size 0.44 (string-length txt)))
          (circle-len (* pi radius 2))
          (angle-rad (/ txt-len radius))
          (t (/ angle-rad 2))
          (h 0.6)
          (d (/ (* (- font-size 1) h) 3))
          (u (- (* (- font-size 1) h) d))
          (dist-haut (+ radius u))
          (dist-bas (* (- radius d) (cos t)))
          (height (- dist-haut dist-bas))
          (raise (- dist-haut (+ u 1.5)))
          (width (* 2 (+ radius u) (sin t))))
    (if (> angle-rad pi)  (set! width (* radius 2)))
     (interpret-markup layout props
       (markup #:box
        #:with-dimensions
        (cons (* width -.5) (* width .5))
        (cons (* height -.5) (* height .5))
      #:raise (- raise) ; non!

        #:postscript
        (format #f "
/r ~a def
/ch 1 string def
/Times findfont
~a scalefont
setfont
0 0 translate
/text (~a) def

\header {
  title = \markup \arcText #40 #8  "petit texte"
 title = \markup \arcText #30  #3 "long long long long long texte"
 %title = \markup \arcText #10 5 "long long long long long texte"
}
\relative c'' {
  c1
}
%%%%%%%%%%
Christophe Pochon

---

From: Martial R <[email-masked]>
Date: Sat, 25 Jan 2020 18:17:52 +0100

Bravo !

Le sam. 25 janv. 2020 à 17:10, Christophe Pochon <
[email-masked]> a écrit :

>>> Le ven. 24 janv. 2020 à 18:46, Olivier Miakinen <
>>> [email-masked]> a écrit :
>>>

-- 
Martial Rameaux

---

From: Olivier Miakinen <[email-masked]>
Date: Sun, 26 Jan 2020 08:21:15 +0100

Le 25/01/2020 17:10, Christophe Pochon m'a répondu :
> [...]

Ce qui veut dire que tout était clair ?

---

From: Valentin Villenave <[email-masked]>
Date: Sun, 26 Jan 2020 14:05:30 +0000

> Etat des lieux :

Ça commence à être pas mal à ce stade ! (Je suis impressionné par la
complexité du calcul nécessaire et par le nombre de petites
corrections.)

Par contre il reste une déviation, en particulier lorsque le texte
dépasse les 180 degrés mais pas seulement :
 title = \markup \arcText #20  #10 "long long long long long texte"

À ce stade ça vaut peut-être le coup de le poster sur le LSR et sur
les listes anglophones au cas où quelqu’un aurait une meilleure idée…
?

V.

---

From: Bernard Meylan <[email-masked]>
Date: Sun, 26 Jan 2020 10:05:35 -0700 (MST)

…
Là, franchement, ça me dépasse… vous êtes trop fortiches…

-----
Cordialement

Bernard