lilypond-learning: Contexts explained

 
 3.3.1 Contexts explained
 ------------------------
 
 When music is printed, many notational elements which do not appear
 explicitly in the input file must be added to the output.  For example,
 compare the input and output of the following example:
 
      cis4 cis2. | a4 a2. |
      [image src="" alt="[image of music]" text="image of music"]
 
    The input is rather sparse, but in the output, bar lines,
 accidentals, clef, and time signature have been added.  When LilyPond
 _interprets_ the input the musical information is parsed from left to
 right, similar to the way a performer reads the score.  While reading
 the input, the program remembers where measure boundaries are, and which
 pitches require explicit accidentals.  This information must be held on
 several levels.  For example, an accidental affects only a single staff,
 while a bar line must be synchronized across the entire score.
 
    Within LilyPond, these rules and bits of information are grouped in
 _Contexts_.  We have already introduced the ‘Voice’ context.  Others are
 the ‘Staff’ and ‘Score’ contexts.  Contexts are hierarchical to reflect
 the hierarchical nature of a musical score.  For example: a ‘Staff’
 context can contain many ‘Voice’ contexts, and a ‘Score’ context can
 contain many ‘Staff’ contexts.
 
 [lilypond/pictures/context-example]
    Each context has the responsibility for enforcing some notation
 rules, creating some notation objects and maintaining the associated
 properties.  For example, the ‘Voice’ context may introduce an
 accidental and then the ‘Staff’ context maintains the rule to show or
 suppress the accidental for the remainder of the measure.
 
    As another example, the synchronization of bar lines is, by default,
 handled in the ‘Score’ context.  However, in some music we may not want
 the bar lines to be synchronized – consider a polymetric score in 4/4
 and 3/4 time.  In such cases, we must modify the default settings of the
 ‘Score’ and ‘Staff’ contexts.
 
    For very simple scores, contexts are created implicitly, and you need
 not be aware of them.  For larger pieces, such as anything with more
 than one staff, they must be created explicitly to make sure that you
 get as many staves as you need, and that they are in the correct order.
 For typesetting pieces with specialized notation, it is usual to modify
 existing, or even to define totally new, contexts.
 
    In addition to the ‘Score,’ ‘Staff’ and ‘Voice’ contexts there are
 contexts which fit between the score and staff levels to control staff
 groups, such as the ‘PianoStaff’ and ‘ChoirStaff’ contexts.  There are
 also alternative staff and voice contexts, and contexts for lyrics,
 percussion, fret boards, figured bass, etc.
 
    The names of all context types are formed from one or more words,
 each word being capitalized and joined immediately to the preceding word
 with no hyphen or underscore, e.g., ‘GregorianTranscriptionStaff’.
 
 
 See also
 ........
 
    Notation Reference: See(lilypond-notation)Contexts explained.