définition d'un nouveau contexte

Bonjour,

J'ai deux problèmes en définissant un nouveau contexte \StaffSA, adossé à \Staff.
J'ai pris modèle dans NR 6.2.5 Définition de nouveaux contextes.
http://lilypond.org/doc/v2.11/Documentation/user/lilypond/Defining-new-contexts#Defining-new-contexts

Avec la définition ci-dessous :

  1. j'ai deux portées qui apparaissent pour un contexte \StaffSA
  2. leur instrumentName ne s'affiche pas.

Où est mon erreur ?

Merci,
Germain

pj : "test-newcontext.png"

%% Test de définition d'un nouveau contexte

\version "2.11.47"
\include "english.ly"

Global = { \key f \major }
NotesDiscantus = { a'4 a'1 }
NotesCantus = { f'4 f'1 }
NotesFiller = { c'4 c'1 }
NotesBassus = { f4 f1 }
Words = \lyricmode { Ta __ daa }

%---------------%
StaffVoiceNames = %% for Staff context
#(define-music-function (parser location n-max-width s-one s-two)
(number? string? string?)
"Format and print voice names for one staff"
#{
\set Staff . instrumentName = \markup { \column {
\hcenter-in #$n-max-width $s-one
\hcenter-in #$n-max-width $s-two } }
#})
%---------------%
StaffSAVoiceNames = %% same as above, but for StaffSA context
#(define-music-function (parser location n-max-width s-one s-two)
(number? string? string?)
"Format and print voice names for one staff"
#{
\set StaffSA . instrumentName = \markup { \column {
\hcenter-in #$n-max-width $s-one
\hcenter-in #$n-max-width $s-two } }
#})
%---------------%
\layout % commun
{
\context { \Score
\remove Bar_number_engraver }
\context { \ChoirStaff %% si placé après déf. de StaffSA : idem
\consists Instrument_name_engraver
\override InstrumentName #'self-alignment-X = #LEFT
\accepts StaffSA }
\context { \Staff
\remove Time_signature_engraver
\override InstrumentName #'self-alignment-X = #RIGHT }
\context { \name StaffSA
\type "Engraver_group"
\alias Staff }
}
%---------------%
\score % 1
{
\new ChoirStaff
<<
\set ChoirStaff . instrumentName = "N°1 Commportement étrange :"

\new StaffSA
<<
\StaffSAVoiceNames #3 #"S." #"A." %% ne donne rien
% \StaffVoiceNames #3 #"S." #"A." %% ne marche pas non plus
\clef "G" \Global
\new Voice = "one" { \voiceOne \NotesDiscantus }
\new Voice { \voiceTwo \NotesCantus }

\new Lyrics = thewords { s }

\new Staff
<<
\StaffVoiceNames #3 #"T." #"B."
\clef "F" \Global
\new Voice { \voiceOne \NotesFiller }
\new Voice { \voiceTwo \NotesBassus }

\context Lyrics = thewords \lyricsto "one" { \Words }

\layout { indent = 65\mm }
}

Avec la définition ci-dessous :

  1. j'ai deux portées qui apparaissent pour un contexte \StaffSA
  2. leur instrumentName ne s'affiche pas.

Où est mon erreur ?

En regardant dans le LSR comment d'autres s'y était pris, je suis tombé sur ça :

http://lsr.dsi.unimi.it/LSR/Item?id=143

il semble qu'il faille rajouter \Staff dans ta definition de ton nouveau context, en plus de \alias

\context {
\Staff
\name StaffSA
\alias Staff
}
Si j'ai bien compris, si tu ne mets pas \Staff, il faut que tu te tapes d'enumérer 1 à 1 tous les plugs-ins (avec \consists).

Si tu enlèves \alias Staff , ça fait des trucs bizarre au niveau des paroles.

Je ne suis pas vraiment sûr de bien comprendre la tâche exact de ces 2 commandes.
Si quelqu'un a des explications plus précises...

Gilles

From: Gilles THIBAULT
To: Germain G. Ivanoff-Trinadtzaty ; Lilypond French users
Sent: Friday, June 13, 2008 9:55 AM
Subject: Re: définition d'un nouveau contexte

Avec la définition ci-dessous :

  1. j'ai deux portées qui apparaissent pour un contexte \StaffSA
  2. leur instrumentName ne s'affiche pas.

Où est mon erreur ?

En regardant dans le LSR comment d'autres s'y était pris, je suis tombé sur ça :

http://lsr.dsi.unimi.it/LSR/Item?id=143

Comment l'as-tu trouvé ? (Sur quels mots-clés as-tu cherché ?)

il semble qu'il faille rajouter \Staff dans ta definition de ton nouveau context, en plus de \alias

\context {
\Staff
\name StaffSA
\alias Staff
}
Si j'ai bien compris, si tu ne mets pas \Staff, il faut que tu te tapes d'enumérer 1 à 1 tous les plugs-ins (avec \consists).

Si tu enlèves \alias Staff , ça fait des trucs bizarre au niveau des paroles.

Je ne suis pas vraiment sûr de bien comprendre la tâche exact de ces 2 commandes.
Si quelqu'un a des explications plus précises...

Gilles

C'est exactement ça ! Et il faut "appeler" le modèle en premier.
Je vais partager ici des renseignements glanés sur l'autre liste.
Dans notre définition, le \Staff est en fait remplacé par son contenu, défini dans ly/engravers-init.ly. (L'étude de ce fichier est très pédagogique : voir par exemple comment \PianoStaff est construit, en héritant de \Staff).
Puis on peut changer le \name du contexte en StaffSA (car \Staff contenait bien sûr une ligne "\name Staff").
On peut aussi régler d'autres propriétés, rajouter des graveurs, en enlever.
Mais c'est le \alias (nécessaire) que je ne comprends toujours pas. Gageons que la réécriture de la doc en cours apportera toute la lumière dessus !
Voir aussi les archives :
Tip: defining new contexts ... starting from existing contexts
http://lists.gnu.org/archive/html/lilypond-user/2007-07/msg00527.html
Re: Problems defining a BraceStaff
http://lists.gnu.org/archive/html/lilypond-user/2008-02/msg00837.html

Merci,
Germain

ps: par ailleurs, le même mécanisme est utilisé pour le rendu sonore ; voir ly/performer.ly

···

----- Original Message -----