From: Patrick McCarty Date: Wed, 6 Aug 2008 23:45:04 +0000 (-0700) Subject: Update for Staff X-Git-Tag: release/2.11.57-1~34^2~3 X-Git-Url: https://git.donarmstrong.com/?a=commitdiff_plain;h=7f2505f79deccf5ae5863e820cb7783c6ef52746;p=lilypond.git Update for Staff * 3rd pass Signed-off-by: Patrick McCarty --- diff --git a/Documentation/user/staff.itely b/Documentation/user/staff.itely index 3c4be6a41d..3f61028eda 100644 --- a/Documentation/user/staff.itely +++ b/Documentation/user/staff.itely @@ -316,13 +316,13 @@ Bar lines are @emph{not} connected between staves of an @seealso -Snippets: -@rlsr{Staff notation}. - Notation Reference: @ref{Grouping staves}, @ref{Instrument names}. +Snippets: +@rlsr{Staff notation}. + Internals Reference: @rinternals{InnerStaffGroup}, @rinternals{StaffGroup}, @@ -485,6 +485,9 @@ Music Glossary: Notation Reference: @ref{Displaying pitches}. +Snippets: +@rlsr{Staff notation}. + Internals Reference: @rinternals{StaffSymbol}, @rinternals{staff-symbol-interface}. @@ -506,30 +509,99 @@ lines in either direction must be equal. @cindex staff, resizing of @cindex resizing of staves -Tweaking the staff object allows to resize the staff: +@notation{Ossia} staves can be set by creating a new simultaneous +staff in the appropriate location: @lilypond[verbatim,quote] -\new Staff \with { - fontSize = #-3 - \override StaffSymbol #'staff-space = #(magstep -3) - \override StaffSymbol #'thickness = #(magstep -3) -} -\relative c { - \clef bass - c8 c c c c c c c +\new Staff \relative c'' { + c4 b d c + << + { c4 b d c } + \new Staff { e4 d f e } + >> + c4 b c2 } @end lilypond -This involves shrinking the staff spaces, the staff lines and the -font size by the factor 3. You find a more precise explanation in -@ref{Setting the staff size}. +However, the above example is usually not the desired result. To +create ossia staves that are above the original staff, have no +time signature or clef, and have a smaller font size, tweaks must +be used. The Learning Manual describes a specific technique to +achieve this goal, beginning with +@rlearning{Nesting music expressions}. -The @emph{ossia} section in the next example are just put parallel -to the main staff with @code{<<} and @code{>>} brackets. The -@emph{ossia} staff is stopped and started explicitely and white -space is inserted with the @code{\skip} command. +The following example uses the @code{alignAboveContext} property +to align the ossia staff. This method is most appropriate when +only a few ossia staves are needed. @lilypond[verbatim,quote] +\new Staff = main \relative c'' { + c4 b d c + << + { c4 b d c } + + \new Staff \with { + \remove "Time_signature_engraver" + alignAboveContext = #"main" + fontSize = #-3 + \override StaffSymbol #'staff-space = #(magstep -3) + \override StaffSymbol #'thickness = #(magstep -3) + firstClef = ##f + } + { e4 d f e } + >> + c4 b c2 +} +@end lilypond + +If many isolated ossia staves are needed, creating an empty +@code{Staff} context with a specific @emph{context id} may be more +appropriate; the ossia staves may then be created by +@emph{calling} this context and using @code{\startStaff} and +@code{\stopStaff} at the desired locations. The benefits of this +method are more apparent if the piece is longer than the following +example. + +@lilypond[verbatim,quote,ragged-right] +<< + \new Staff = ossia \with { + \remove "Time_signature_engraver" + \remove "Clef_engraver" + fontSize = #-3 + \override StaffSymbol #'staff-space = #(magstep -3) + \override StaffSymbol #'thickness = #(magstep -3) + } + { \stopStaff s1*6 } + + \new Staff \relative c' { + c4 b c2 + << + { e4 f e2 } + \context Staff = ossia { + \startStaff e4 g8 f e2 \stopStaff + } + >> + g4 a g2 \break + c4 b c2 + << + { g4 a g2 } + \context Staff = ossia { + \startStaff g4 e8 f g2 \stopStaff + } + >> + e4 d c2 + } +>> +@end lilypond + +@c The following is the legacy "ossia.ly" example +@c +@c I don't think this method is very efficient. +@c I'm commenting it out for now. -pm + +@ignore + +@ lilypond[verbatim,quote] << \new Staff \with { @@ -559,6 +631,48 @@ space is inserted with the @code{\skip} command. c4 c g' g a a g2 } >> +@ end lilypond + +@end ignore + +Using the @code{\RemoveEmptyStaffContext} command to create ossia +staves may be used as an alternative. This method is most +convenient when ossia staves occur immediately following a line +break. In this case, spacer rests do not need to be used at all; +only @code{\startStaff} and @code{\stopStaff} are necessary. For +more information about @code{\RemoveEmptyStaffContext}, see +@ref{Hiding staves}. + +@lilypond[verbatim,quote,ragged-right] +<< + \new Staff = ossia \with { + \remove "Time_signature_engraver" + \remove "Clef_engraver" + fontSize = #-3 + \override StaffSymbol #'staff-space = #(magstep -3) + \override StaffSymbol #'thickness = #(magstep -3) + } + \new Staff \relative c' { + c4 b c2 + e4 f e2 + g4 a g2 \break + << + { c4 b c2 } + \context Staff = ossia { + c4 e8 d c2 \stopStaff + } + >> + g4 a g2 + e4 d c2 + } +>> + +\layout { + \context { + \RemoveEmptyStaffContext + \override VerticalAxisGroup #'remove-first = ##t + } +} @end lilypond @@ -601,18 +715,16 @@ Internals Reference: @cindex Frenched staves In orchestral scores, staff lines that only have rests are usually -removed; this saves some space. This style is called @q{French -Score}. For the @code{Lyrics}, @code{ChordNames}, and -@code{FiguredBass} contexts, this is switched on by default. When -the lines of these contexts turn out empty after the line-breaking -process, they are removed. +removed in order to save some space. This style is called +@q{French Score}. For the @code{Lyrics}, @code{ChordNames}, and +@code{FiguredBass} contexts, this is switched on by default. -For normal staves this behaviour is called with the +For other staff contexts, this behavior is set with the @code{\RemoveEmptyStaffContext} command. It is set in the -@code{\layout} block. As a result staves containing nothing or -whole mesure rests are removed after a line break. +@code{\layout} block. As a result, empty staves or staves +containing multi-measure rests are removed after a line break. -@lilypond[verbatim,quote] +@lilypond[verbatim,quote,ragged-right] \layout { \context { \RemoveEmptyStaffContext @@ -632,69 +744,24 @@ To remove other types of contexts, use @cindex ossia -@c FIXME Really? I need to see about this. -pm - -Another application of the @code{\RemoveEmptyStaffContext} is to -make ossia sections, i.e., alternative melodies on a separate -piece of staff, with help of a Frenched staff. See +Another application of @code{\RemoveEmptyStaffContext} is to make +ossia sections, i.e., alternative melodies on a separate piece of +staff, with help of a Frenched staff. For details, see @ref{Ossia staves}. -@c FIXME Is this in the right section? -@c maybe move to Staff symbol -pm - -You can make the staff lines invisible by removing the -@code{Staff_symbol_engraver} from the @code{Staff} context. +Staff lines can be made invisible by removing the +@code{Staff_symbol_engraver} from the @code{Staff} context: @lilypond[verbatim,quote] -\score { - \new Staff \relative c'' { c8 c c16 c c c } - \layout{ - \context { - \Staff - \remove Staff_symbol_engraver - } - } +\new Staff \with { + \remove "Staff_symbol_engraver" } +\relative c'' { c8 c c16 c c c c2 } @end lilypond @snippets -The first empty staff can also be removed from the score with a -setting in the @code{VerticalAxisGroup} property. This can be -done globally inside the @code{\layout} block, or locally inside -the specific staff that should be removed. In the latter case, you -have to specify the context (@code{Staff} applies only to the -current staff) in front of the property. - -The lower staff of the second staff group is not removed, because -the setting applies only to the specific staff inside of which it -is written. - -@lilypond[verbatim,quote] -\layout { - \context { - \RemoveEmptyStaffContext - %To use the setting globally, uncomment the following line: - %\override VerticalAxisGroup #'remove-first = ##t - } -} -\new StaffGroup - \relative c'' << - \new Staff { - e4 f g a \break c1 } - \new Staff { - %To use the setting globally, comment this line, uncomment the line above - \override Staff.VerticalAxisGroup #'remove-first = ##t - R1 \break R1 } - >> -\new StaffGroup - << - \new Staff { e4 f g a \break c1 } - \new Staff { R \break R1 } - >> -@end lilypond - @lilypondfile[verbatim,lilyquote,texidoc,doctitle] {removing-the-first-empty-line.ly} @@ -729,6 +796,10 @@ Internals Reference: @node Writing parts @subsection Writing parts +This section explains how to insert tempo indications and +instrument names into a score. Methods to quote other voices and +format cue notes are also described. + @menu * Metronome marks:: * Instrument names:: @@ -743,31 +814,58 @@ Internals Reference: @cindex tempo @cindex beats per minute @cindex metronome marking +@cindex metronome marking with text +@funindex \tempo -Metronome settings can be entered as follows +Basic metronome markings can be entered as follows: -@example -\tempo @var{duration} = @var{per-minute} -@end example +@lilypond[verbatim,quote,relative=2] +\tempo 2 = 120 +c1 +@end lilypond -In the MIDI output, they are interpreted as a tempo change. In -the layout output, a metronome marking is printed +Textual tempo indications can be used instead: -@funindex \tempo +@lilypond[verbatim,quote,relative=2] +\tempo "Allegretto" +d2 c +@end lilypond + +The combination of a metronome marking and textual description +will automatically place the metronome marking within parentheses: @lilypond[verbatim,quote,relative=2] -\tempo 8. = 120 -c1 +\tempo "Allegro" 4 = 160 +g4 c d e +@end lilypond + +To write a metronome marking in parentheses without the text, +include an empty string in the input: + +@lilypond[verbatim,quote,relative=2] +\tempo "" 8 = 96 +d4 g e c @end lilypond @snippets +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{printing-metronome-and-rehearsal-marks-below-the-staff.ly} + +@c perhaps also an example of how to move it horizontally? + +@c TODO add snippet to LSR -pm To change the tempo in the MIDI output without printing anything, -make the metronome marking invisible @example \once \override -Score.MetronomeMark #'transparent = ##t @end example +make the metronome marking invisible + +@example +\once \override Score.MetronomeMark #'transparent = ##t +@end example +@c TODO add snippet to LSR -pm To print other metronome markings, use these markup commands + @lilypond[verbatim,quote,relative=1] c4^\markup { ( @@ -799,41 +897,20 @@ Internals Reference: @rinternals{MetronomeMark}. -@knownissues - -Collisions are not checked. If you have notes above the top line -of the staff (or notes with articulations, slurs, text, etc), then -the metronome marking may be printed on top of musical symbols. -If this occurs, increase the padding of the metronome mark to -place it further away from the staff. - -@example -\override Score.MetronomeMark #'padding = #2.5 -@end example - -@c perhaps also an example of how to move it horizontally? - - @node Instrument names @unnumberedsubsubsec Instrument names @cindex instrument names @cindex instrument names, short -In an orchestral score, instrument names are printed at the left -side of the staves. - -This can be achieved by setting @code{Staff}.@code{instrumentName} -and @code{Staff}.@code{shortInstrumentName}, or -@code{PianoStaff}.@code{instrumentName} and -@code{PianoStaff}.@code{shortInstrumentName}. This will print -text before the start of the staff. For the first staff, -@code{instrumentName} is used. If set, @code{shortInstrumentName} -is used for the following staves. +Instrument names can be printed on the left side of staves for the +@code{Staff} and @code{PianoStaff} contexts. The value of +@code{instrumentName} is used for the first staff, and the value +of @code{shortInstrumentName} is used for all succeeding staves. -@lilypond[verbatim,quote,relative=1] -\set Staff.instrumentName = "Ploink " -\set Staff.shortInstrumentName = "Plk " +@lilypond[verbatim,quote,ragged-right,relative=1] +\set Staff.instrumentName = "Violin " +\set Staff.shortInstrumentName = "Vln " c1 \break c''1 @@ -851,8 +928,10 @@ c1 @cindex instrument names, centering -As instrument names are centered by default, multi line names are -better entered using @code{\center-align}: +When two or more staff contexts are grouped together, the +instrument names and short instrument names are centered by +default. To center multi-line instrument names, +@code{\center-align} must be used: @lilypond[verbatim,quote,relative=2] << @@ -870,33 +949,43 @@ better entered using @code{\center-align}: >> @end lilypond -For longer instrument names, it may be useful to increase the -@code{indent} setting in the @code{\layout} block. +@cindex indent +@cindex short-indent -Short instrument names, printed before the systems following the -first one, are also centered by default, in a space which width is -given by the @code{short-indent} variable of the @code{\layout} -block. +The @code{indent} and @code{short-indent} settings specify the +level of indentation for the first system and all succeeding +systems, respectively. They can be modified in the @code{\layout} +block. For longer instrument names or short instrument names, it +may be useful to increase the @code{indent} and +@code{short-indent} settings: -To add instrument names to other contexts (such as -@code{GrandStaff}, @code{ChoirStaff}, or @code{StaffGroup}), the -engraver must be added to that context. +@lilypond[verbatim,quote] +\relative c' << + \new Staff \with { + instrumentName = "Oboe" + } + { c2 d } + \new Staff \with { + instrumentName = "Glockenspiel" + } + { c'2 d } +>> -@example -\layout@{ - \context @{\GrandStaff \consists "Instrument_name_engraver"@} -@} -@end example +\layout { + indent = 2.5\cm +} +@end lilypond -@noindent -More information about adding and removing engravers can be found -in @ref{Modifying context plug-ins}. +To add instrument names to other contexts (such as +@code{GrandStaff}, @code{ChoirStaff}, or @code{StaffGroup}), +@code{Instrument_name_engraver} must be added to that context. +For details, see @ref{Modifying context plug-ins}. @cindex instrument names, changing Instrument names may be changed in the middle of a piece: -@lilypond[verbatim,quote,relative=1] +@lilypond[verbatim,quote,ragged-right,relative=1] \set Staff.instrumentName = "First" \set Staff.shortInstrumentName = "one" c1 c c c \break @@ -908,6 +997,12 @@ c1 c c c \break @end lilypond +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{aligning-and-centering-instrument-names.ly} + + @seealso Notation Reference: @@ -930,93 +1025,92 @@ Internals Reference: @cindex fragments @cindex cue notes -With quotations, fragments of other parts can be inserted into a -part directly. Before a part can be quoted, it must be marked -especially as quotable. This is done with the @code{\addQuote} -command. - -@example -\addQuote @var{name} @var{music} -@end example - -@noindent -Here, @var{name} is an identifying string. The @var{music} is any -kind of music. Here is an example of @code{\addQuote} +Quotations allow fragments of other parts to be inserted directly +into a music expression. Before a part can be quoted, the +@code{\addQuote} command must be used to initialize the quoted +fragment. This command must be used in the toplevel scope. The +first argument is an identifying string, and the second is a music +expression: @example -\addQuote clarinet \relative c' @{ +flute = \relative c' @{ f4 fis g gis @} +\addQuote "flute" @{ \flute @} @end example -This command must be entered at toplevel, i.e., outside any music -blocks. Typically, one would use an already defined music event -as the @var{music}: +The @code{\quoteDuring} command may then be used to indicate when +the quotation should take place. The corresponding measures from +the quotation are inserted into the music expression. The syntax +is similar to @code{\addQuote}: -@example -clarinet = \relative c' @{ +@lilypond[verbatim,quote] +flute = \relative c' { f4 fis g gis -@} -\addQuote clarinet @{ \clarinet @} -@end example - -After calling @code{\addQuote}, the quotation may then be done -with @code{\quoteDuring} or @code{\cueDuring}, - -@example -\quoteDuring #@var{name} @var{music} -@end example - -During a part, a piece of music can be quoted with the -@code{\quoteDuring} command. +} +\addQuote "flute" { \flute } -@example -\quoteDuring #"clarinet" @{ s2. @} -@end example +\relative c' { + c4 cis \quoteDuring #"flute" { s2 } +} +@end lilypond -This would cite three quarter notes (the duration of @code{s2.}) -of the previously added @code{clarinet} voice. +If the music expression used for @code{\quoteDuring} contains +anything but a spacer rest or multi-measure rest, a polyphonic +situation is created, which is often not desirable: -More precisely, it takes the current time-step of the part being -printed, and extracts the notes at the corresponding point of the -@code{\addQuote}d voice. Therefore, the argument to -@code{\addQuote} should be the entire part of the voice to be -quoted, including any rests at the beginning. +@lilypond[verbatim,quote] +flute = \relative c' { + f4 fis g gis +} +\addQuote "flute" { \flute } -It is possible to use another music expression instead of -@code{s}, thus creating a polyphonic section, but this may not -always give the desired result. +\relative c' { + c4 cis \quoteDuring #"flute" { c4 b } +} +@end lilypond -Quotations take into account the transposition of both source and -target instruments, if they are specified using the -@code{\transposition} command. +Quotations recognize instrument transposition settings for both +the source and target instruments if they are specified using the +@code{\transposition} command: -@lilypond[verbatim,quote,relative=1] -\addQuote clarinet -{ +@lilypond[verbatim,quote] +clarinet = \relative c' { \transposition bes f4 fis g gis } +\addQuote "clarinet" { \clarinet } -{ - e8 f8 \quoteDuring #"clarinet" { s2 } +\relative c' { + c4 cis \quoteDuring #"clarinet" { s2 } } @end lilypond -The type of events that are present in the quoted music can be -trimmed with the @code{quotedEventTypes} property. The default -value is @code{(note-event rest-event)}, which means that only -notes and rests of the quoted voice end up in the -@code{\quoteDuring}. Setting +@c add to snippets, possibly. It might already be there. -pm +@c +@c The type of events that are present in the quoted music can be +@c trimmed with the @code{quotedEventTypes} property. The default +@c value is @code{(note-event rest-event)}, which means that only +@c notes and rests of the quoted voice end up in the +@c @code{\quoteDuring}. Setting +@c +@c @example +@c \set Staff.quotedEventTypes = +@c #'(note-event articulation-event dynamic-event) +@c @end example +@c +@c @noindent +@c will quote notes (but no rests), together with scripts and +@c dynamics. -@example -\set Staff.quotedEventTypes = - #'(note-event articulation-event dynamic-event) -@end example -@noindent -will quote notes (but no rests), together with scripts and -dynamics. +@snippets + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{quoting-another-voice-with-transposition.ly} + +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{quoting-another-voice.ly} @seealso @@ -1036,7 +1130,7 @@ Internals Reference: Only the contents of the first @code{Voice} occurring in an @code{\addQuote} command will be considered for quotation, so -@var{music} can not contain @code{\new} and @code{\context Voice} +@var{music} cannot contain @code{\new} and @code{\context Voice} statements that would switch to a different Voice. Quoting grace notes is broken and can even cause LilyPond to @@ -1058,66 +1152,53 @@ written entirely in lower-case letters: @code{\addquote}. @cindex quoting other voices @cindex cues, formatting -The previous section deals with inserting notes from another -voice. There is a more advanced music function called -@code{\cueDuring}, which makes formatting cue notes easier. - -The syntax is +The previous section explains how to quote other voices. The +@code{\cueDuring} command is a more specialized form of +@code{\quoteDuring}, being particularly useful for inserting cue +notes into a part. The syntax is as follows: @example - \cueDuring #@var{name} #@var{updown} @var{music} + \cueDuring #@var{partname} #@var{voice} @var{music} @end example -This will insert notes from the part @var{name} into a -@code{Voice} called @code{cue}. This happens simultaneously with -@var{music}, which usually is a rest. When the cue notes start, -the staff in effect becomes polyphonic for a moment. The argument -@var{updown} determines whether the cue notes should be notated as -a first or second voice. - -@lilypond[verbatim] -smaller = { - \set fontSize = #-2 - \override Stem #'length-fraction = #0.8 - \override Beam #'thickness = #0.384 - \override Beam #'length-fraction = #0.8 -} +This command copies the corresponding measures from @var{partname} +into a @code{CueVoice} context. The @code{CueVoice} is created +implicitly, and occurs simultaneously with @var{music}, which +creates a polyphonic situation. The @var{voice} argument +determines whether the cue notes should be notated as a first or +second voice; @code{DOWN} corresponds to the first voice, and +@code{UP} corresponds to the second. -\addQuote clarinet -\relative c' { - R1*20 - r2 r8 c' f f +@lilypond[verbatim,quote] +oboe = \relative c'' { + r2 r8 d16 f e g f a + g8 g16 g g2. } +\addQuote "oboe" { \oboe } -\new Staff \relative c' << - - % setup a context for cue notes. - \new Voice = "cue" { \smaller \skip 1*21 } +\new Voice \relative c'' { + \cueDuring #"oboe" #UP { R1 } + g2 c, +} +@end lilypond - \set Score.skipBars = ##t +In the above example, the @code{Voice} context had to be +explicitly declared, or else the entire music expression would +belong to the @code{CueVoice} context. - \new Voice { - R1*20 - \cueDuring #"clarinet" #UP { - R1 - } - g4 g2. - } ->> -@end lilypond +@c TODO document \killCues +@c TODO document instrumentCueName context property -Here are a couple of hints for successful cue notes: +When typesetting cue notes, some guidelines should be followed: @itemize @item -Cue notes have smaller font sizes. - -@item -The cued part is marked with the instrument playing the cue. +The instrument playing the cue should be clearly marked on the +score. @item -When the original part takes over again, this should be marked -with the name of the original instrument. +When the cue notes end, the name of the original instrument should +be indicated. @item Any other changes introduced by the cued part should also be @@ -1126,30 +1207,29 @@ clef, the original clef should be stated once again. @end itemize -The macro @code{\transposedCueDuring} is useful to add cues to -instruments which use a completely different octave range (for -example, having a cue of a piccolo flute within a contra bassoon -part). +The @code{\transposedCueDuring} command is useful to add cues for +instruments in a completely different register. Having piccolo +cues within a contrabassoon part is a good example. @lilypond[verbatim,quote] -picc = \relative c''' { +piccolo = \relative c''' { \clef "treble^8" - R1 | - c8 c c e g2 | - a4 g g2 | + R1 + c8 c c e g2 + a4 g g2 } -\addQuote "picc" { \picc } +\addQuote "piccolo" { \piccolo } -cbsn = \relative c, { +cbassoon = \relative c, { \clef "bass_8" c4 r g r - \transposedCueDuring #"picc" #UP c,, { R1 } | - c4 r g r | + \transposedCueDuring #"piccolo" #UP c,, { R1 } + c4 r g r } << - \new Staff = "picc" \picc - \new Staff = "cbsn" \cbsn + \new Staff = "piccolo" \piccolo + \new Staff = "cbassoon" \cbassoon >> @end lilypond @@ -1162,3 +1242,8 @@ Snippets: Internals Reference: @rinternals{Voice}. + +@knownissues + +Collisions are not checked between @code{Voice} and +@code{CueVoice} contexts.