InstrumentName centrés par défaut?

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?

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

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

···

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.
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?

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.

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à.

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 :

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

···

Le 06/02/08, Nicolas Sceaux<****@****> a écrit :

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)

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 (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 (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

···

Le 8 févr. 08 à 16:27, Valentin Villenave a écrit :

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


···

Le dimanche 10 février 2008 à 12:12 +0100, Nicolas Sceaux a écrit :

Le 8 févr. 08 à 16:27, Valentin Villenave a écrit :
>
> 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)

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 (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 (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

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

···

Le 10/02/08, Nicolas Sceaux<****@****> a écrit :

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 :

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.

···

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

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 Concerto for Bassoon and Orchestra in B flat major, by W. A. Mozart (1756–1791) ).

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!

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

···

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

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!

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

···

Le vendredi 15 février 2008 à 22:47 +0100, Nicolas Sceaux a écrit :

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

> 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!

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

Quelques variations illustrant les nouvelles possibilités :

alignement-instruments.tiff (53.9 KB)

···

Le 15 févr. 08 à 22:56, Xavier Scheuer a écrit :

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?