Subject: définition d'un nouveau contexte

From: "Germain G. Ivanoff-Trinadtzaty" <[email-masked]>
Date: Fri, 13 Jun 2008 01:30:27 +0200

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

---

From: "Gilles THIBAULT" <[email-masked]>
Date: Fri, 13 Jun 2008 09:55:36 +0200

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: "Germain G. Ivanoff-Trinadtzaty" <[email-masked]>
Date: Sat, 14 Jun 2008 00:02:58 +0200

----- Original Message ----- 
  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

    Où est mon erreur ?

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

      \context { 
              \Staff 
             \name  StaffSA
             \alias Staff  
       }

  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