Subject: [LilyPond] Combiner bracket et nuance en Scheme

From: Sébastien MANEN via LilyPond <[email-masked]>
Date: Tue, 05 Aug 2025 13:46:21 +0000

Bonjour à  tous

Je ne sais pas si le titre est explicite. Je cherche à mettre des nuances entre crochets. Pour l'instant j'utilise `\bracket \with-true-dimensions \dynamic f` dans un markup. Ca donne un résultat mais qui ne me convient pas vraiment du fait que les nuances ont une apparence italique qui se marie mal avec les crochets bien verticaux. 
Du coup je cherche à mettre les crochets en italique, et en code scheme (que je découvre plus ou moins). J'essaye d'abord de reproduire la fonction \bracket mais j'ai du mal à appréhender la taille du crochet (dans le sens y). 
Voici là où j'en suis :
```
#(define-public (bracketify-stencil-italic stil axis thick protrusion padding)
  "Add brackets around @var{stil}, producing a new stencil."
  
  (let* ((dimy (cdr (ly:stencil-extent stil axis)))
  		 (dimx (cdr (ly:stencil-extent stil (other-axis axis))))
  		 (alx (- padding))
  		 (aly (/ (- dimy) 2.0))
  		 (blx (- (- padding) protrusion))
  		 (bly (/ (- dimy) 2.0))
  		 (clx (- (- padding) protrusion))
  		 (cly (/ dimy 2.0))
  		 (dlx (- padding))
  		 (dly (/ dimy 2.0))
  		 (arx (+ dimx padding))
  		 (ary (/ (- dimy) 2.0))
  		 (brx (+ dimx (+ padding protrusion)))
  		 (bry (/ (- dimy) 2.0))
  		 (crx (+ dimx (+ padding protrusion)))
  		 (cry (/ dimy 2.0))
  		 (drx (+ dimx padding))
  		 (dry (/ dimy 2.0)))
  	(ly:stencil-add (make-line-stencil thick alx aly blx bly)
  					(make-line-stencil thick blx bly clx cly)
  					(make-line-stencil thick clx cly dlx dly)
  					stil
  					(make-line-stencil thick arx ary brx bry)
  					(make-line-stencil thick brx bry crx cry)
  					(make-line-stencil thick crx cry drx dry))))

#(define-markup-command (bracketItalic layout props arg)
  (markup?)
  (let ((th 0.1) 
        (m (interpret-markup layout props arg)))
    (bracketify-stencil-italic m Y th (* 2.5 th) th)))

brackfIt = \markup {
	\bracketItalic \with-true-dimensions \dynamic f
}
brackf = \markup {
	\bracket \with-true-dimensions \dynamic f
}
brackpIt = \markup {
	\bracketItalic \with-true-dimensions \dynamic p
}
brackp = \markup {
	\bracket \with-true-dimensions \dynamic p
}

musicA = \relative c'' {
	c1_\brackfIt_\brackpIt
	c1_\brackf_\brackp
}

\score {
	\musicA
}
```
et voici le résultat : 
![image|287x150](upload://tFNKxf12fT9BkjPZnondjU3QWng.png)
a gauche ma fonction donne des crochets plus petits alors que j'utilise la même fonction pour la calculer. 

Merci pour votre aide.

Sébastien

---
Pour poster dans ce sujet, visitez la [page du sujet](https://lilypond.community/t/combiner-bracket-et-nuance-en-scheme/5949/1).

Pour créer un nouveau sujet, écrivez à [[email-masked]](mailto:[email-masked]) ou visitez la [page d'accueil de lilypond.community](https://lilypond.community).

---

From: Jean Abou Samra via LilyPond <[email-masked]>
Date: Thu, 07 Aug 2025 15:37:31 +0000

Je ne peux pas tester de code avant longtemps (vacances), mais si j'étais toi, je ferais un `\rotate` pour pivoter un peu la nuance, puis `\bracket` sur ceci, et enfin `\rotate` dans l'autre sens sur le résultat pour remettre droite la nuance, avec des crochets obliques.

---
Pour poster dans ce sujet, visitez la [page du sujet](https://lilypond.community/t/combiner-bracket-et-nuance-en-scheme/5949/2).

---

From: Sébastien MANEN via LilyPond <[email-masked]>
Date: Fri, 15 Aug 2025 10:23:27 +0000

Bonjour Jean. Merci pour ta suggestion je vais regarder si c'est pas plus simple que ce à quoi j'ai abouti. Pour info j'ai rajouté des potards un peu partout et j'obtiens quelque chose qui me convient bien :
```
#(define-public (bracketify-stencil-italic stil axis thick protrusion padding)
  "Add brackets around @var{stil}, producing a new stencil."
  
  (let* ((dimy (* 1.7 (cdr (ly:stencil-extent stil axis))))
  		 (dimx (cdr (ly:stencil-extent stil (other-axis axis))))
  		 (italic (* 0.25 dimy))
  		 (alx (- padding))
  		 (aly (+ (* dimy 0.12) (/ (- dimy) 2.0)))
  		 (blx (- (- padding) protrusion))
  		 (bly (+ (* dimy 0.12) (/ (- dimy) 2.0)))
  		 (clx (+ italic (- (- padding) protrusion)))
  		 (cly (+ (* dimy 0.12) (/ dimy 2.0)))
  		 (dlx (+ italic (- padding)))
  		 (dly (+ (* dimy 0.12) (/ dimy 2.0)))
  		 (arx (- (+ dimx (* 0.3 padding)) italic))
  		 (ary (+ (* dimy 0.12) (/ (- dimy) 2.0)))
  		 (brx (- (+ dimx (+ (* 0.3 padding) protrusion)) italic))
  		 (bry (+ (* dimy 0.12) (/ (- dimy) 2.0)))
  		 (crx (+ dimx (+ (* 0.3 padding) protrusion)))
  		 (cry (+ (* dimy 0.12) (/ dimy 2.0)))
  		 (drx (+ dimx (* 0.3 padding)))
  		 (dry (+ (* dimy 0.12) (/ dimy 2.0))))
  	(ly:stencil-add (make-line-stencil thick alx aly blx bly)
  					(make-line-stencil thick blx bly clx cly)
  					(make-line-stencil thick clx cly dlx dly)
  					stil
  					(make-line-stencil thick arx ary brx bry)
  					(make-line-stencil thick brx bry crx cry)
  					(make-line-stencil thick crx cry drx dry))))

#(define-markup-command (bracketItalic layout props arg)
  (markup?)
  (let ((th 0.13) 
        (m (interpret-markup layout props arg)))
    (bracketify-stencil-italic m Y th (* 2.5 th) 0.5)))
```
![image|360x154](upload://5pI6H3SiOcH3qizcnEqxPBvVkL0.png)

---
Pour poster dans ce sujet, visitez la [page du sujet](https://lilypond.community/t/combiner-bracket-et-nuance-en-scheme/5949/3).

---

From: Sébastien MANEN via LilyPond <[email-masked]>
Date: Fri, 15 Aug 2025 11:52:19 +0000

J'ai testé ce que tu proposes Jean et ça ne me convient pas vraiment.

```
bracketJf = \markup {
	\rotate #-7 \bracket \with-true-dimensions { \rotate #7 \dynamic f }
}
```
![image|149x150](upload://4Ts9BDSsCKknHGGGC1sZFq1X4a4.png)

On voit trop la rotation : le crochet droit est trop bas et il faut que je combine des nuances entre crochet avec des nuances "naturelles". Du coup je préfère mon code.

---
Pour poster dans ce sujet, visitez la [page du sujet](https://lilypond.community/t/combiner-bracket-et-nuance-en-scheme/5949/4).