Subject: InstrumentName centrés pardéfaut?

From: Xavier Scheuer <[email-masked]>
Date: Tue, 05 Feb 2008 00:29:59 +0100

Bonsoir,

Toujours dans le cadre d'une partition (conducteur), j'aimerais que les
noms d'instrument portés en regard de chacune des portées soient CENTRÉS
(horizontalement) et non alignés à droite (comportement par défaut).
J'ai bien lu la page
http://lilypond.org/doc/v2.11/Documentation/user/lilypond/Instrument-names#Instrument-names et seul \set Staff.instrumentName = \markup { \hcenter-in #10 "blabla" } fonctionne (\center-align et \hcenter ne donnent aucun résultat, même en augmentant le retrait).
J'aimerais ne pas devoir utiliser cette commande pour chaque
InstrumentName de chaque portée, aussi je cherche un moyen pour changer
le comportement par défaut de lilypond.
J'ai essayé un

        \layout  {
        		\context {
        			\Staff
        			\override InstrumentName #'self-alignment-X = #0
        		}
        		\context {
        			\PianoStaff
        			\override InstrumentName #'self-alignment-X = #0
        		}
        }

Mais la propriété self-alignment-X ne doit pas être la bonne car cela
n'a pas fonctionné (ou alors c'est moi qui ai fait une erreur quelque
part).
L'un d'entre vous saurait-il comment faire pour changer le comportement
par défaut de lilypond pour obtenir des InstrumentName centrés?

Un grand merci d'avance.

Xavier Scheuer

PS : D'ailleurs je ne comprends pas pourquoi c'est l'alignement à droite
qui a été choisi comme comportement par défaut.
En effet, dans la plupart des partitions (conducteurs) que j'ai pu
observer, les noms d'instruments étaient centrés (et non alignés à
droite).
Et dans les parties séparées il n'y a pas, en général, le nom de
l'instrument en regard de la portée (et quand bien même, je pense que ça
ne dérangerait pas qu'il soit centré).
Quelqu'un aurait-il, par hasard, une idée/explication sur la (les)
raison(s) qui a (ont) poussé(s) les développeurs à choisir ce
comportment?

---

From: "Gilles THIBAULT" <[email-masked]>
Date: Tue, 5 Feb 2008 23:05:25 +0100

J'ai bien lu la page http://lilypond.org/doc/v2.11/Documentation/user/lilypond/Instrument-names#Instrument-names et seul \set Staff.instrumentName = \markup { \hcenter-in #10 "blabla" } fonctionne (\center-align et \hcenter ne donnent aucun résultat, même en augmentant le retrait).

C'est peut-être que ta valeur "indent" est trop faible.
En regroupant les 2 exemples de cette page dans l'exemple ci-dessous et en modifiant les différentes valeurs, on peut voir l'effets de chaque commande.

%%%

\version "2.10"

\paper { indent =3\cm }

{ <<
     \new Staff {
       \set Staff.instrumentName = \markup {
           \hcenter-in #20
                 \center-align { "Clarinetti"
                                       \line { "in B" \smaller \flat } } }
       c''1
     }
     \new Staff {
       \set Staff.instrumentName = \markup{
            \hcenter-in #20 
                \center-align { Vibraphone }}
       c''1
     }
}

%%%
C'est dur d'automatiser ces commandes car ça demanderait de créer des fonctions avec un nombre d'argument variables ("clarinette" "en" "sib" =>3 arguments, "vibraphone"=> 1argument).
Je sais que c'est possible en scheme mais je sais pas (encore) faire...

Gilles

---

From: Nicolas Sceaux <[email-masked]>
Date: Wed, 6 Feb 2008 21:12:57 +0100

Le 5 févr. 08 à 00:29, Xavier Scheuer a écrit :
> PS : D'ailleurs je ne comprends pas pourquoi c'est l'alignement à  
> droite qui a été choisi comme comportement par défaut.
> l'instrument en regard de la portée (et quand bien même, je pense  
> que ça ne dérangerait pas qu'il soit centré).

Tout simplement par ce que c'est le plus simple à coder.

Les choses qui seraient vraiment bien concernant les noms d'intruments:
- que l'indentation du système soit adaptée à l'espace qu'occupent
réellement les noms d'instrument ;
- que les noms d'instruments soient horizontalement centrés dans cet
espace ;
- que les noms d'instruments soient toujours alignés verticalement
avec la  portée, même s'il y a des paroles, des accords ou autres.

Pour contourner ces problèmes, on peut utiliser des bidouilles.
Pour centrer le nom d'un instrument, j'utilise la commande de markup
\instrument-name suivante :

#(define-markup-command (hcenter-pad layout props width arg)
   (number? markup?)
   (let* ((arg-stencil (interpret-markup layout props arg))
          (w (interval-length (ly:stencil-extent arg-stencil X)))
          (pad-stencil (ly:make-stencil ""
                        (cons 0 (if (> w width)
                                 0
                                 (/ (- width w) 2.0)))
                        '(-0.1 . 0.1))))
    (stack-stencil-line 0
     (list pad-stencil arg-stencil pad-stencil))))

#(define-markup-command (right-pad layout props pad arg)
   (number? markup?)
   (interpret-markup layout props (markup arg #:hspace pad)))

#(define-markup-command (instruments layout props texts) (markup-list?)
   (interpret-markup layout props
    (make-column-markup
     (map (lambda (m) (markup #:hcenter-pad 18 #:huge m))
      texts))))

#(define-markup-command (instrument-name layout props text) (markup?)
   (interpret-markup layout props
    (markup #:right-pad 1 #:instruments (text))))

==>

\set Staff . instrumentName = \markup \instrument-name Violon.

en supposant que l'indentation est 25mm (adapter le "18" dans la  
commande
\instruments).

Nicolas

---

From: "Valentin Villenave" <[email-masked]>
Date: Fri, 8 Feb 2008 16:27:23 +0100

> avec la  portée, même s'il y a des paroles, des accords ou autres.

Si je peux ajouter un élément, les noms d'instruments devraient être
placés en fonction de du point de départ des systèmes, et non du
crochet ou de l'accolade ; en effet, l'espace horizontal pris par une
accolade a tendance à varier énormément suivant qu'elle relie quatre,
trois, ou deux systèmes (par exemple si l'on divise temporairement les
pupitres de violons, etc) ; et il n'est pas normal que les noms
d'instruments se déplacent dans ces cas-là.

> \instrument-name suivante :

C'est très utile ; pourrais-tu le poster sur le LSR ? (ou bien me
préparer un snippet pour que je le poste moi-même)

Merci,

Valentin

---

From: Nicolas Sceaux <[email-masked]>
Date: Sun, 10 Feb 2008 12:12:54 +0100

> préparer un snippet pour que je le poste moi-même)

LSR database ne fonctionne pas chez moi. Voici un snippet
retravaillé, qui va chercher la valeur de l'indentation
automatiquement. Donc normallement c'est plug-n-play :

%{
Horizontaly centered instrument names: use \instrument for a single
line instrument name, and \instruments for a multi line instrument
name.
%}

#(define-markup-command (instruments layout props texts) (markup-list?)
    (let ((indent (ly:output-def-lookup layout 'indent)))
      (interpret-markup layout props
       (make-column-markup
         (map (lambda (m) (markup #:hcenter-pad indent #:huge m))
         texts)))))

#(define-markup-command (instrument layout props text) (markup?)
  (interpret-markup layout props
   (markup #:instruments (text))))

\score {
   \new StaffGroup <<
     \new Staff <<
       \set Staff . instrumentName = \markup \instrument Violons
       { c'4 d' e' f' g'1 }
     \new Staff <<
       \set Staff . instrumentName = \markup \instruments { Haute- 
contres Tailles }
       { \clef alto c'4 d' e' f' g'1 }
     \new Staff <<
       \set Staff . instrumentName = \markup \instrument Basses
       { \clef bass c4 c c g, c1 }
   \layout { indent = 4\cm }
}

Je suis en train de refléchir à la possibilité d'avoir ça de base
dans LilyPond, sans avoir à utiliser explicitement des commandes
de markup.

Nicolas

---

From: Xavier Scheuer <[email-masked]>
Date: Sun, 10 Feb 2008 13:16:09 +0100

Merci à vous tous pour vos réponses!
Je ne pensais vraiment pas que cette fonctionnalité n'était pas
implémentée par défaut dans lilypond.
Surtout que \set Staff.instrument = \markup { \center-align
"InstrumentName" } donnait des InstrumentNames centrés dans des versions
précédentes de lilypond (2.7.29, voir
http://www.mutopiaproject.org/cgibin/piece-info.cgi?id=686 ).

J'avais vu ta commande \instrument-name dans les Fêtes de Ramire
(Mutopia), mais je dois avouer que je ne m'y retrouve pas trop dans tout
ce Scheme...
J'ai finalement utilisé la commande \instrument que tu as donnée
ci-dessous et elle fonctionne parfaitement, merci.
Ce serait vraiment super si tu arrivais à implémenter ça de base dans
lilypond (désolé d'être à l'origine de ce travail en plus).

Bravo, bonne continuation (ce serait sympa de nous tenir au courant de
l'évolution) et encore merci!

Xavier

---

From: "Valentin Villenave" <[email-masked]>
Date: Sun, 10 Feb 2008 13:54:23 +0100

> automatiquement. Donc normallement c'est plug-n-play :

Super ! ça a même l'air de marcher avec 2.10 :
http://lsr.dsi.unimi.it/LSR/Item?id=383

---

From: Nicolas Sceaux <[email-masked]>
Date: Sun, 10 Feb 2008 16:50:49 +0100

Le 10 févr. 08 à 13:16, Xavier Scheuer a écrit :

> "InstrumentName" } donnait des InstrumentNames centrés dans des  
> versions précédentes de lilypond (2.7.29, voir http://www.mutopiaproject.org/cgibin/piece-info.cgi?id=686 
>  ).
>
> (Mutopia), mais je dois avouer que je ne m'y retrouve pas trop dans  
> tout ce Scheme...
> J'ai finalement utilisé la commande \instrument que tu as donnée ci- 
> dessous et elle fonctionne parfaitement, merci.
> Ce serait vraiment super si tu arrivais à implémenter ça de base  
> dans lilypond (désolé d'être à l'origine de ce travail en plus).
>
> Bravo, bonne continuation (ce serait sympa de nous tenir au courant  
> de l'évolution) et encore merci!

En fait je viens d'envoyer un patch, s'il est accepté ce sera
dans une prochaine version devel: instruments centrés par défaut,
et avec \override Staff.InstrumentName #'self-alignment-X = #...
on pourra changer l'alignement horizontal.

---

From: Nicolas Sceaux <[email-masked]>
Date: Fri, 15 Feb 2008 22:47:58 +0100

> de l'évolution) et encore merci!

C'est dans la boîte : à partir de 2.11.40, les noms d'intruments seront
centrés par défaut. On utilisera :
   \set Staff.instrumentName = \markup \center-align { ... }
pour des noms d'intruments multi-lignes.

Les noms courts, utilisés à partir du 2ème système, sont aussi alignés
dans un plus petit espace déterminé par la variable short-indent du
bloc \layout.

Nicolas

---

From: Xavier Scheuer <[email-masked]>
Date: Fri, 15 Feb 2008 22:56:01 +0100

Félicitations!
Et un grand merci de la part de toute la communauté.
Juste par curiosité, quel sera le comportement par défaut des noms
d'instruments multilignes sans le \center-align?

Vivement la sortie de cette 2.11.40!

Xavier

---

From: Nicolas Sceaux <[email-masked]>
Date: Fri, 15 Feb 2008 23:21:20 +0100

> d'instruments multilignes sans le \center-align?

Quelques variations illustrant les nouvelles possibilités :

\score {
   \new StaffGroup <<
     \new Staff {
       \once \override Staff.InstrumentName #'self-alignment-X = #LEFT
       \set Staff.instrumentName = \markup \box \column {
         "Nom d'instrument" "aligné à gauche" "\\column"
       }
       c'1
     }
     \new Staff {
       \set Staff.instrumentName = \markup \box \column {
         "Nom d'instrument" "aligné gauche avec \\column"  
"globallement centré"
       }
       c'1
     }
     \new Staff {
       \set Staff.instrumentName = \markup \box \center-align {
         "Nom d'instrument" "centré avec" "\\center-align"
       }
       c'1
     }
     \new Staff {
       \once \override Staff.InstrumentName #'self-alignment-X = #RIGHT
       \set Staff.instrumentName = \markup \box \column \right-align {
         "Nom d'instrument" "aligné à droite" "\\column \\right-align"
       }
       c'1
     }
   \layout {
     indent = 6 \cm
     ragged-right = ##t
     \context {
       \Staff
       \override VerticalAxisGroup #'minimum-Y-extent = #'(-5 . 5)
       \override InstrumentName #'padding = #1
     }
   }
}