Subject: Position verticale du nom d'instrument

From: [email-masked]
Date: Tue, 25 Jan 2022 23:37:55 +0100 (CET)

Bonjour à tous,

Comment remonter l'indication d'instrument le modèle ci-dessous :

\version "2.22.1"

\new Staff 
        \with {  instrumentName = \markup { \raise #1 TENOR }}
         { \override Staff.StaffSymbol.line-positions = #'(4 2 0 -2)
           c''4 }
           
J'ai modifié le nombre de lignes de la portée et leurs dispositions, je vois bien que cela génère un décalage de "TENOR".
Est-il cependant possible de ne pas changer la position des lignes mais de centrer verticalement "TENOR" ?

---

From: Jean Abou Samra <[email-masked]>
Date: Wed, 26 Jan 2022 00:06:07 +0100

> Est-il cependant possible de ne pas changer la position des lignes mais de centrer verticalement "TENOR" ?

Bonjour,

Comme vous en informe la page de InstrumentName dans la
référence des propriétés internes
(http://lilypond.org/doc/v2.23/Documentation/internals/instrumentname),
cet objet prend en charge l'interface self-alignment-interface,
qui permet de modifier son alignment vertical avec la
propriété self-alignment-Y.

\version "2.22.1"

\new Staff \with {
   instrumentName = \markup { \raise #2 TENOR }
   \override InstrumentName.self-alignment-Y = -0.55
   \override StaffSymbol.line-positions = #'(4 2 0 -2)
}
{
   c''1
}

Cela dit, je trouve aussi le placement par défaut pas
très correct et ai ouvert le bug
https://gitlab.com/lilypond/lilypond/-/issues/6269
pour en discuter. On peut modifier légèrement le
code interne pour toujours centrer les noms d'instrument
sur la portée…

\version "2.22.1"

#(define (system-start-text::calc-y-offset-staff-centered grob)
   (define (live-elements-list me)
     (let ((elements (ly:grob-object me 'elements)))
       (filter! grob::is-live?
                (ly:grob-array->list elements))))
   (let* ((left-bound (ly:spanner-bound grob LEFT))
          (live-elts (live-elements-list grob))
          (system (ly:grob-system grob))
          (extent empty-interval))
     (if (and (pair? live-elts)
              (interval-sane? (ly:grob-extent grob system Y)))
         (let get-extent ((lst live-elts))
           (if (pair? lst)
               (let ((axis-group (car lst)))
                 (if (and (ly:spanner? axis-group)
                          (equal? (ly:spanner-bound axis-group LEFT)
                                  left-bound))
                     (set! extent (add-point extent
                                             ;; Modifié :
;;;(ly:grob-relative-coordinate
                                             ;;; axis-group system Y)
                                             (interval-center
                                              (ly:grob-extent
                                               (ly:grob-object 
axis-group 'staff-symbol)
                                               system Y)))))
                 (get-extent (cdr lst)))))
         ;; no live axis group(s) for this instrument name -> remove 
from system
         (ly:grob-suicide! grob))

     (+
      (ly:self-alignment-interface::y-aligned-on-self grob)
      (interval-center extent))))

\new Staff \with {
   instrumentName = \markup { \raise #2 TENOR }
   \override InstrumentName.Y-offset = 
#system-start-text::calc-y-offset-staff-centered
   \override StaffSymbol.line-positions = #'(4 2 0 -2)
}
{
   c''1
}

… et je compte proposer le changement dans quelque jours
s'il n'y a pas d'objections sur le tracker.

Cordialement,
Jean