+@need 50
+@multitable @columnfractions .25 .15 .45 .15
+@headitem propertyName
+ @tab Type
+ @tab Function
+ @tab Example Value
+@item extraNatural
+ @tab Boolean
+ @tab If true, set extra natural signs before accidentals
+ @tab @code{#t}, @code{#f}
+@item currentBarNumber
+ @tab Integer
+ @tab Set the current bar number
+ @tab @code{50}
+@item doubleSlurs
+ @tab Boolean
+ @tab If true, print slurs both above and below notes
+ @tab @code{#t}, @code{#f}
+@item instrumentName
+ @tab Text
+ @tab Set the name to be placed at the start of the staff
+ @tab @code{"Cello I"}
+@item fontSize
+ @tab Real
+ @tab Increase or decrease the font size
+ @tab @code{2.4}
+@item stanza
+ @tab Text
+ @tab Set the text to print before the start of a verse
+ @tab @code{"2"}
+@end multitable
+
+@noindent
+where a Boolean is either True (@code{#t}) or False (@code{#f}),
+an Integer is a positive whole number, a Real is a positive
+or negative decimal number, and text is enclosed in double
+apostrophes. Note the occurrence of hash signs,
+(@code{#}), in two different places -- as part of the Boolean
+value before the @code{t} or @code{f}, and before @emph{value}
+in the @code{\set} statement. So when a Boolean is being
+entered you need to code two hash signs, e.g., @code{##t}.
+
+@cindex properties operating in contexts
+@cindex setting properties within contexts
+
+Before we can set any of these properties we need to know
+in which context they operate. Sometimes this is obvious,
+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 @code{Staff} context, since
+it is the staff that is to be named.
+In this example the first staff is labeled, but not the second,
+because we omitted the context name.
+
+@lilypond[quote,verbatim,ragged-right]
+<<
+ \new Staff \relative {
+ \set Staff.instrumentName = #"Soprano"
+ c''4 c
+ }
+ \new Staff \relative {
+ \set instrumentName = #"Alto" % Wrong!
+ d'4 d
+ }
+>>
+@end lilypond
+
+Remember the default context name is @code{Voice}, so the second
+@code{\set} command set the property @code{instrumentName} in the
+@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. 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
+be taken. Some text editors with special support for LilyPond input
+files document property names with bullets when you hover them with
+the mouse, like JEdit with LilyPondTool, or highlight unknown property
+names differently, like ConTEXT. If you do not use an editor with
+such features, it is recommended to check the property name in the
+Internals Reference: see @rinternals{Tunable context properties}, or
+@rinternals{Contexts}.
+
+The @code{instrumentName} property will take effect only
+if it is set in the @code{Staff} context, but
+some properties can be set in more than one context.
+For example, the property @code{extraNatural} is by
+default set to ##t (true) for all staves.
+If it is set to ##f (false) in one particular @code{Staff}
+context it applies just to the accidentals on that staff.
+If it is set to false in the @code{Score} context
+it applies to all staves.
+
+So this turns off extra naturals in one staff:
+
+@lilypond[quote,verbatim,ragged-right]
+<<
+ \new Staff \relative {
+ ais'4 aes
+ }
+ \new Staff \relative {
+ \set Staff.extraNatural = ##f
+ ais'4 aes
+ }
+>>
+@end lilypond
+
+@noindent
+and this turns them off in all staves:
+
+@lilypond[quote,verbatim,ragged-right]
+<<
+ \new Staff \relative {
+ ais'4 aes
+ }
+ \new Staff \relative {
+ \set Score.extraNatural = ##f
+ ais'4 aes
+ }
+>>
+@end lilypond
+
+As another example, if @code{clefTransposition} is set in
+the @code{Score} context this immediately changes the value
+of the octavation in all current staves and sets a new default
+value which will be applied to all staves.
+
+The opposite command, @code{\unset}, effectively removes the
+property from the context, which causes most properties to
+revert to their default value. Usually @code{\unset} is not
+required as a new @code{\set} command will achieve what is
+wanted.
+
+The @code{\set} and @code{\unset} commands can appear anywhere
+in the input file and will take effect from the time they are
+encountered until the end of the score or until the property is
+@code{\set} or @code{\unset} again. Let's try changing the
+font size, which affects the size of the note heads (among
+other things) several times. The change is from the default
+value, not the most recently set value.
+
+@lilypond[quote,verbatim,ragged-right,relative=1,fragment]
+c4
+% make note heads smaller
+\set fontSize = #-4
+d e
+% make note heads larger
+\set fontSize = #2.5
+f g
+% return to default size
+\unset fontSize
+a b
+@end lilypond
+
+We have now seen how to set the values of several different types of
+property. Note that integers and numbers are always preceded by a
+hash sign, @code{#}, while a true or false value is specified by
+@code{##t} and @code{##f}, with two hash signs. A text property
+should be enclosed in double quotation signs, as above, although we
+shall see later that text can actually be specified in a much more
+general way by using the very powerful @code{\markup} command.
+
+@subsubheading Setting context properties with @code{\with}
+
+@funindex \with
+@funindex with
+@cindex context properties, setting with \with
+
+The default value of context properties may be set at the time the
+context is created. Sometimes this is a clearer way of setting a
+property value if it is to remain fixed for the duration of
+the context. When a context is created with a @code{\new}
+command it may be followed immediately by a @code{\with @{ .. @}}
+block in which the default property values are set. For example,
+if we wish to suppress the printing of extra naturals for the
+duration of a staff we would write:
+
+@example
+\new Staff \with @{ extraNatural = ##f @}
+@end example
+
+@noindent
+like this:
+
+@lilypond[quote,verbatim,ragged-right]
+<<
+ \new Staff
+ \relative {
+ gis' ges aes ais
+ }
+ \new Staff \with { extraNatural = ##f }
+ \relative {
+ gis' ges aes ais
+ }
+>>
+@end lilypond
+
+Or, if the property override is to be applied to all staves
+within the score, it may be appended to an explicit
+@code{\new Score} command, like this:
+
+@lilypond[quote,verbatim,ragged-right]
+\score {
+ \new Score \with { extraNatural = ##f } <<
+ \new Staff {
+ \relative {
+ gis' ges aes ais
+ }
+ }
+ \new Staff {
+ \relative {
+ gis' ges aes ais
+ }
+ }
+ >>
+}
+@end lilypond
+
+Properties set in this way may still be changed dynamically using
+@code{\set} and returned to the default value set in the
+@code{\with} block with @code{\unset}.
+
+@cindex fontSize, default and setting
+
+So if the @code{fontSize} property is set in a @code{\with} clause
+it sets the default value of the font size. If it is later changed
+with @code{\set}, this new default value may be restored with the
+@code{\unset fontSize} command.
+
+@subsubheading Setting context properties with @code{\context}
+
+@cindex context properties, setting with \context
+@funindex \context
+@funindex context
+
+The values of context properties may be set in @emph{all} contexts
+of a particular type, such as all @code{Staff} contexts, with a single
+command. The context type is identified by using its
+type name, like @code{Staff}, prefixed by a back-slash: @code{\Staff}.
+The statement which sets the property value is the same as that in a
+@code{\with} block, introduced above. It is placed in a
+@code{\context} block within a @code{\layout} block. Each
+@code{\context} block will affect all contexts of the type specified
+throughout the @code{\score} or @code{\book} block in which the
+@code{\layout} block appears. Here is a example to show the format:
+
+@lilypond[verbatim,quote]
+\score {
+ \new Staff {
+ \relative {
+ cis''4 e d ces
+ }
+ }
+ \layout {
+ \context {
+ \Staff
+ extraNatural = ##t
+ }
+ }
+}
+@end lilypond
+
+@noindent
+Context properties set in this way may be overridden for particular
+instances of contexts by statements in a @code{\with} block, and by
+@code{\set} commands embedded in music statements.
+
+
+@seealso
+Notation Reference:
+@ruser{Changing context default settings}.
+@ruser{The set command}.
+
+Internals Reference:
+@rinternals{Contexts},
+@rinternals{Tunable context properties}.
+
+