@cindex Music expression, compound
We saw the general organization of LilyPond input files in the
-previous section, @ref{How LilyPond input files work}. But we seemed to
-skip over the most important part: how do we figure out what to
-write after @code{\score}?
+previous section, @ref{Introduction to the LilyPond file structure}.
+But we seemed to skip over the most important part: how do we figure
+out what to write after @code{\score}?
We didn't skip over it at all. The big mystery is simply that
there @emph{is} no mystery. This line explains it all:
indentation -- make sure that each item on the same level starts
on the same horizontal position in your text editor.
+@seealso
+
+Notation Reference: @ruser{Structure of a score}.
@node Nesting music expressions
@subsection Nesting music expressions
as follows:
@lilypond[verbatim,quote,ragged-right]
-\new Staff ="main" {
+\new Staff = "main" {
\relative g' {
r4 g8 g c4 c8 d |
e4 r8
placed above the staff called @qq{main} instead of the default
position which is below.
+@seealso
+
Ossia are often written without clef and without
time signature and are usually in a smaller font.
These require further commands which
-have not yet been introduced. See @ref{Size of objects}.
+have not yet been introduced. See @ref{Size of objects},
+and @ruser{Ossia staves}.
+
@node On the un-nestedness of brackets and ties
@subsection On the un-nestedness of brackets and ties
later section --- see the @code{force-hshift} property in @ref{Fixing
overlapping notation}.
+@seealso
+
+Notation Reference: @ruser{Multiple voices}.
+
@node Explicitly instantiating voices
@subsection Explicitly instantiating voices
have no shift or the same shift specified, the error message
@qq{Too many clashing note columns} will be produced.
+@seealso
+
+Notation Reference: @ruser{Multiple voices}.
+
+
@node Voices and vocals
@subsection Voices and vocals
@cindex hymn structure
-Here is a example of the first line of a hymn with four
+Here is an example of the first line of a hymn with four
verses, set for SATB. In this case the words for all four
parts are the same. Note how we use variables to separate the
music notation and words from the staff structure. See too
}
@end lilypond
+@seealso
+
+Notation Reference: @ruser{Vocal music}.
+
+
@node Contexts and engravers
@section Contexts and engravers
preceding word with no hyphen or underscore, e.g.,
@code{GregorianTranscriptionStaff}.
+@seealso
+
+Notation Reference: @ruser{Contexts explained}.
+
+
@node Creating contexts
@subsection Creating contexts
Note the distinction between the name of the context type,
@code{Staff}, @code{Voice}, etc, and the identifying name of a
-particular instance of that type, which can be any sequence of letters
-and digits invented by the user. The identifying name is used to
+particular instance of that type, which can be any sequence of letters
+invented by the user. Digits and spaces can also be used in the
+identifying name, but then it has to be placed in quotes,
+i.e. @code{\new Staff = "MyStaff 1" @var{music-expression}}.
+The identifying name is used to
refer back to that particular instance of a context. We saw this in
-use in the section on lyrics in @ref{Voices and vocals}.
+use in the section on lyrics, see @ref{Voices and vocals}.
+
+@seealso
+
+Notation Reference: @ruser{Creating contexts}.
@node Engravers explained
Engravers live and operate in Contexts.
Engravers such as the @code{Metronome_mark_engraver}, whose
-action and output applies to the score as a whole, operate in
+action and output apply to the score as a whole, operate in
the highest level context -- the @code{Score} context.
The @code{Clef_engraver} and @code{Key_engraver} are to be
-found in every Staff Context, as different staves may require
+found in every @code{Staff} Context, as different staves may require
different clefs and keys.
The @code{Note_heads_engraver} and @code{Stem_engraver} live
We shall see later how the output of LilyPond can be changed
by modifying the action of Engravers.
+@seealso
+
+Internals reference: @rinternals{Engravers and Performers}.
+
@node Modifying context properties
@subsection Modifying context properties
but occasionally it can be tricky. If the wrong context
is specified, no error message is produced, but the expected
action will not take place. For example, the
-@code{instrumentName} clearly lives in the Staff context, since
+@code{instrumentName} clearly lives in the @code{Staff} context, since
it is the staff that is to be named.
In this example the first staff is labelled, but not the second,
because we omitted the context name.
>>
@end lilypond
-Remember the default context name is Voice, so the second
+Remember the default context name is @code{Voice}, so the second
@code{\set} command set the property @code{instrumentName} in the
-Voice context to @qq{Alto}, but as LilyPond does not look
+@code{Voice} context to @qq{Alto}, but as LilyPond does not look
for any such property in the @code{Voice} context, no
further action took place. This is not an error, and no error
message is logged in the log file.
Similarly, if the property name is mis-spelt no error message is
-produced, and clearly the expected action cannot be performed. If
+produced, and clearly the expected action cannot be performed. In
fact, you can set any (fictitious) @q{property} using any name you
like in any context that exists by using the @code{\set} command. But
if the name is not known to LilyPond it will not cause any action to
instances of contexts by statements in a @code{\with} block, and by
@code{\set} commands embedded in music statements.
-More information about changing context properties can be found in
-the Notation Reference -- see
+@seealso
+
+Notation Reference:
@ruser{Changing context default settings}.
+@c FIXME
+@c uncomment when backslash-node-name issue is resolved -pm
+@c @ruser{The set command}.
+
+Internals Reference:
+@rinternals{Contexts},
+@rinternals{Tunable context properties}.
@node Adding and removing engravers
}
@end lilypond
+@noindent
+The values of context properties may also be set
+for all contexts of a particular type by including the
+@code{\set} command in a @code{\context} block in the
+same way.
+
+@seealso
+
+Notation Reference: @ruser{Modifying context plug-ins},
+@ruser{Changing context default settings}.
+
@node Extending the templates
@section Extending the templates