[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Passage en 2.23 encore un problème scheme
From: |
Gilles Thibault |
Subject: |
Re: Passage en 2.23 encore un problème scheme |
Date: |
Fri, 22 Jul 2022 18:06:04 +0200 |
User-agent: |
Webmail Free/1.3.3 |
j'utilise fréquemment des parenthèses ouvrantes et fermantes pour
encadre non pas une seule note ou accord mais plusieurs. Par exemple :
Bonjour Vincent.
Pour les séquences d'au moins 2 notes, j'utilise la fonction scheme
ci-dessous. Bon elle est un peu lourde, mais je pense qu'elle devrait
marcher aussi pour la 2.23 (non testé).
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\version "2.22.0"
textSize = #-2
#(define (seq-paren m)
"Parenthesize a sequence of music"
(define sym1 'start-parenthesize) ; use gensym instead
(define sym2 'end-parenthesize)
(define ((stencil-func sym) grob)
(let ((par-list (parentheses-item::calc-parenthesis-stencils
grob)))
(if (eq? sym sym1)
(list (first par-list) point-stencil)
(list point-stencil (second par-list)))))
(let ((notes (extract-named-music m '(EventChord NoteEvent
RestEvent))))
(for-each
(lambda(note sym)
(let ((tags (ly:music-property note 'tags)))
(ly:music-set-property! note 'tags (cons sym tags))))
(list (first notes) (last notes))
(list sym1 sym2))
(music-map
(lambda(evt)
(let* ((tags (ly:music-property evt 'tags))
(syms (or (memq sym1 tags)(memq sym2 tags))))
(if syms
(let ((sym (car syms)))
(ly:music-set-property! evt 'tags (delq sym tags))
#{ \once \override ParenthesesItem.stencils =
#(stencil-func sym)
\once \override ParenthesesItem.font-size = #(+
textSize 5)
\parenthesize #evt #})
evt)))
m)))
seqParen = #(define-music-function (seqMusic)(ly:music?)
(seq-paren seqMusic))
music = \relative c' { c4 d \seqParen { e f g a } b2 | c1 }
\new Staff \music
--
Gilles