Hi all,  I was tempted by this page to try to create my own custom Staff 
context:
http://lilypond.org/doc/v2.16/Documentation/notation/defining-new-contexts

I currently use a number of overrides in the Staff \with block, so was hoping 
this would be a more elegant way of achieving that (because it could go in an 
\include file).

After trying various things I think I have it working, but I thought I'd share 
what I found in case it might help future travelers on this path, and because 
the solution I came up with is different from the one on the documentation page 
above, and I didn't find it in the LSR.

First I followed the page from the documentation listed above.  I included all 
of the engravers that a standard Staff uses, to duplicate a staff, to which I 
could add my overrides:

%%%%  Begin 1st Approach

\version "2.16.0"

\layout {
  \context {
        \name CustomStaff
        \type "Engraver_group"

        \consists "Accidental_engraver"
        \consists "Axis_group_engraver"
        \consists "Bar_engraver"
        \consists "Clef_engraver"
        \consists "Collision_engraver"
        \consists "Cue_clef_engraver"
        \consists "Dot_column_engraver"
        \consists "Figured_bass_engraver"
        \consists "Figured_bass_position_engraver"
        \consists "Font_size_engraver"
        \consists "Footnote_engraver"
        \consists "Grob_pq_engraver"
        \consists "Instrument_name_engraver"
        \consists "Key_engraver"
        \consists "Ledger_line_engraver"
        \consists "Ottava_spanner_engraver"
        \consists "Output_property_engraver"
        \consists "Piano_pedal_align_engraver"
        \consists "Piano_pedal_engraver"
        \consists "Pure_from_neighbor_engraver"
        \consists "Rest_collision_engraver"
        \consists "Script_row_engraver"
        \consists "Separating_line_group_engraver"
        \consists "Staff_collecting_engraver"
        \consists "Staff_symbol_engraver"
        \consists "Time_signature_engraver"

        \override StaffSymbol #'line-positions = #'( 4 0 -4 )

        \alias Staff
  }
  \context {
        \Score                                   
                % Must be capital "S" \Score.  Little "s" \score breaks things. 
 
                % This was not apparent from that documentation page
                % since it uses Voice as its example
        \accepts CustomStaff   
                % Was unclear whether "CustomStaff" needed to be in quotes or 
not.  
                % But maybe it does not matter...
                % The documentation page actually shows it both ways (!)
  }
}

melody = \relative c' {
  c4 d e f g a b
}

\score {
        \new CustomStaff {
                \melody
        }
  \layout { }
  \midi { }  
  % including this midi part leads to a warning that it cannot find 
"CustomStaff" 
  %  
}

%%%% End 1st Approach

After some fiddling (see comments in the snippet above) I got this to run and 
for my override to show up in the new custom staff, but I could not get any 
noteheads to appear, and I don't know why that is. 


Then I tried searching the LSR and user list and found this post:
http://lists.gnu.org/archive/html/lilypond-user/2010-05/msg00002.html

Which suggested the following approach instead:

%%%% Begin 2nd Approach

\version "2.16.0"

\layout {
  \context {
        \Staff
        \name CustomStaff
        \alias Staff
        \override StaffSymbol #'line-positions = #'( 4 0 -4 )
  }
  \context {
        \Score
        \accepts CustomStaff
  }
  \context {
    \ChoirStaff
    \accepts CustomStaff
  }
  \context {
    \GrandStaff
    \accepts CustomStaff
  }
  \context {
    \PianoStaff
    \accepts CustomStaff
  }
  \context {
    \StaffGroup
    \accepts CustomStaff
  }
}

melody = \relative c' {
  \clef treble
  \key c \major
  \time 4/4
  c4 d e f g a b
}

\score {
        \new CustomStaff {
                \melody
        }
  \layout { }
  \midi { }
}

%%%% End 2nd Approach

This appears to work.  (...after I remembered to put "\alias Staff" in.)  

But is there anything I'm missing?  Is this a good way to go, or would I be 
better off sticking to my  \with blocks and \overrides applied to the standard 
Staff context?  Is there a reason it is not covered in the documentation?

If this is a good and legitimate approach, it might be nice to include it on 
that documentation page, along with the custom Voice-type context definition 
that's already there -- even as just a snippet or extra example.  I'm happy to 
add it to the LSR in any case.

Cheers,
-Paul

_______________________________________________
lilypond-user mailing list
lilypond-user@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-user

Reply via email to