| [ << Changing defaults ] | [Top][Contents][Index][ ? ] | [ Notation manual tables >> ] | ||
| [ < Bottom-level contexts - voices ] | [ Up : Interpretation contexts ] | [ Keeping contexts alive > ] | ||
5.1.2 Creating and referencing contexts
LilyPond will create lower-level contexts automatically if a music
expression is encountered before a suitable context exists, but this
is usually successful only for simple scores or music fragments like
the ones in the documentation. For more complex scores it is
advisable to specify all contexts explicitly with either the
\new or \context command. The syntax of
these two commands is very similar:
[\new | \context] Context [ = name] [music-expression]
where either \new or \context may be specified.
Context is the type of context which is to be created,
name is an optional name to be given to the particular context
being created and music-expression is a single music expression
that is to be interpreted by the engravers and performers in this
context.
The \new prefix without a name is commonly used to create
scores with many staves:
<<
\new Staff {
% leave the Voice context to be created implicitly
c4 c
}
\new Staff {
d4 d
}
>>
and to place several voices into one staff:
<<
\new Staff <<
\new Voice {
\voiceOne
c8 c c4 c c
}
\new Voice {
\voiceTwo
g4 g g g
}
>>
>>
\new should always be used to specify unnamed contexts.
The difference between \new and \context is in the
action taken:
-
\newwith or without a name will always create a fresh, distinct, context, even if one with the same name already exists:<< \new Staff << \new Voice = "A" { \voiceOne c8 c c4 c c } \new Voice = "A" { \voiceTwo g4 g g g } >> >> -
\contextwith a name specified will create a distinct context only if a context of the same type with the same name in the same context hierarchy does not already exist. Otherwise it will be taken as a reference to that previously created context, and its music expression will be passed to that context for interpretation.One application of named contexts is in separating the score layout from the musical content. Either of these two forms is valid:
\score { << % score layout \new Staff << \new Voice = "one" { \voiceOne } \new Voice = "two" { \voiceTwo } >> % musical content \context Voice = "one" { \relative c'' { c4 c c c } } \context Voice = "two" { \relative c'' { g8 g g4 g g } } >> }\score { << % score layout \new Staff << \context Voice = "one" { \voiceOne } \context Voice = "two" { \voiceTwo } >> % musical content \context Voice = "one" { \relative c'' { c4 c c c } } \context Voice = "two" { \relative c'' { g8 g g4 g g } } >> }Alternatively, variables may be employed to similar effect. See Organizing pieces with variables.
-
\contextwith no name will match the first of any previously created contexts of the same type in the same context heirarchy, even one that has been given a name, and its music expression will be passed to that context for interpretation. This form is rarely useful. However,\contextwith no name and no music expression is used to set the context in which a Scheme procedure specified with\applyContextis executed:\new Staff \relative c' { c1 \context Timing \applyContext #(lambda (ctx) (newline) (display (ly:context-current-moment ctx))) c1 }
A context must be named if it is to be referenced later, for example when lyrics are associated with music:
\new Voice = "tenor" music … \new Lyrics \lyricsto "tenor" lyrics
For details of associating lyrics with music see Automatic syllable durations.
The properties of all contexts of a particular type can be modified
in a \layout block (with a different syntax), see
Changing all contexts of the same type. This construct also
provides a means of keeping layout instructions separate from the
musical content. If a single context is to be modified, a \with
block must be used, see Changing just one specific context.
See also
Learning Manual: Organizing pieces with variables.
Notation Reference: Changing just one specific context, Automatic syllable durations.
| [ << Changing defaults ] | [Top][Contents][Index][ ? ] | [ Notation manual tables >> ] | ||
| [ < Bottom-level contexts - voices ] | [ Up : Interpretation contexts ] | [ Keeping contexts alive > ] | ||
Other languages: español, français, italiano, 日本語.
About automatic language selection.