@end ignore
+ @item
+ Predefined, user-configurable, transposable fret diagrams
+ are now available in the FretBoards context:
+ @lilypond[]
+ \include "predefined-guitar-fretboards.ly"
+ <<
+ \new ChordNames {
+ \chordmode {
+ c1 \transpose c e { c }
+ }
+ }
+ \new FretBoards {
+ \chordmode {
+ c1 \transpose c e { c }
+ }
+ }
+ >>
+ @end lilypond
+
@item
-A few syntax changes were made:
+The following syntax changes were made, in chronological order. In
+addition, fret diagram properties have been moved to
+@code{fret-diagram-details}, and @code{#'style} property is used to
+select solid/dashed lines instead of @code{#'dash-fraction}.
+
@example
-2.11.23: #'break-align-symbol -> #'break-align-symbols
-2.11.35: scripts.caesura -> scripts.caesura.curved.
-Use #'style not #'dash-fraction to select solid/dashed lines.
-2.11.38: \setEasyHeads -> \easyHeadsOn, \fatText -> \textLengthOn,
+#'break-align-symbol -> #'break-align-symbols
+scripts.caesura -> scripts.caesura.curved
+\setEasyHeads -> \easyHeadsOn
+\easyHeadsOff (new command)
+\fatText -> \textLengthOn
\emptyText -> \textLengthOff
-2.11.46: \set hairpinToBarline -> \override Hairpin #'to-barline
-2.11.48: \compressMusic -> \scaleDurations
-2.11.50: metronomeMarkFormatter uses text markup as second argument,
-fret diagram properties moved to fret-diagram-details.
-2.11.51: \octave -> \octaveCheck, \arpeggioUp -> \arpeggioArrowUp,
-\arpeggioDown -> \arpeggioArrowDown, \arpeggioNeutral -> \arpeggioNormal,
-\setTextCresc -> \crescTextCresc, \setTextDecresc -> \dimTextDecresc,
-\setTextDecr -> \dimTextDecr, \setTextDim -> \dimTextDim,
-\setHairpinCresc -> \crescHairpin, \setHairpinDecresc -> \dimHairpin,
-\sustainUp -> \sustainOff, \sustainDown -> \sustainOn
-\sostenutoDown -> \sostenutoOn, \sostenutoUp -> \sostenutoOff
-2.11.53: infinite-spacing-height -> extra-spacing-height
-2.11.55: #(set-octavation oct) -> \ottava #oct,
+\set hairpinToBarline -> \override Hairpin #'to-barline
+\compressMusic -> \scaleDurations
+\octave -> \octaveCheck
+\arpeggioUp -> \arpeggioArrowUp
+\arpeggioDown -> \arpeggioArrowDown
+\arpeggioNeutral -> \arpeggioNormal
+\setTextCresc -> \crescTextCresc
+\setTextDecresc -> \dimTextDecresc
+\setTextDecr -> \dimTextDecr
+\setTextDim -> \dimTextDim
+\setHairpinCresc -> \crescHairpin
+\setHairpinDecresc -> \dimHairpin
+\sustainUp -> \sustainOff
+\sustainDown -> \sustainOn
+\sostenutoDown -> \sostenutoOn
+\sostenutoUp -> \sostenutoOff
+infinite-spacing-height -> extra-spacing-height
+#(set-octavation oct) -> \ottava #oct
\put-adjacent markup axis dir markup -> \put-adjacent axis dir markup markup
@end example
to guess the line width, thanks to @code{--latex-program} command line
option.
-@item
-@code{\setEasyHeads} has been renamed to @code{\easyHeadsOn}, and a new
-command @code{\easyHeadsOff} reverts note heads to normal heads.
-
-@item
-@code{\fatText}, @code{\emptyText} and @code{\compressMusic} have been
-renamed to @code{\textLengthOn}, @code{\textLengthOff} and
-@code{\scaleDurations}, respectively.
-
@item
Underlining is now possible with the @code{\underline} markup command.
crescendos and other text spanners. The old syntax for setting
text on line spanners is no longer valid.
- @c with ragged-right we can't see the gliss.
@lilypond[]
\relative c'' {
\override Glissando #'bound-details #'right #'text = \markup { \hcenter \bold down }
\override Glissando #'bound-details #'left #'arrow = ##t
\override Glissando #'bound-details #'left #'padding = #3.0
\override Glissando #'style = #'trill
+ \override Glissando #'springs-and-rods = #ly:spanner::set-spacing-rods
+ \override Glissando #'minimum-length = #12
c1 \glissando c'
}
\tempo "Fast"
c'4 c' c' c'
c'4 c' c' c'
- \tempo "Andante" 4=120
+ \tempo "Andante" 4 = 120
c'4 c' c' c'
c'4 c' c' c'
- \tempo 4=100
+ \tempo 4 = 100
c'4 c' c' c'
c'4 c' c' c'
- \tempo "" 4=30
+ \tempo "" 4 = 30
c'4 c' c' c'
c'4 c' c' c'
}
@menu
-* Interpretation contexts::
-* Explaining the Internals Reference::
-* Modifying properties::
-* Useful concepts and properties::
-* Common properties::
-* Advanced tweaks::
-* Discussion of specific tweaks::
+* Interpretation contexts::
+* Explaining the Internals Reference::
+* Modifying properties::
+* Useful concepts and properties::
+* Common properties::
+* Advanced tweaks::
+* Discussion of specific tweaks::
@end menu
This section describes what contexts are, and how to modify them.
@menu
-* Contexts explained::
-* Creating contexts::
-* Modifying context plug-ins::
-* Changing context default settings::
-* Defining new contexts::
-* Aligning contexts::
+* Contexts explained::
+* Creating contexts::
+* Modifying context plug-ins::
+* Changing context default settings::
+* Defining new contexts::
+* Aligning contexts::
@end menu
Contexts are arranged heirarchically:
@menu
-* Score - the master of all contexts::
-* Top-level contexts - staff containers::
-* Intermediate-level contexts - staves::
-* Bottom-level contexts - voices::
+* Score - the master of all contexts::
+* Top-level contexts - staff containers::
+* Intermediate-level contexts - staves::
+* Bottom-level contexts - voices::
@end menu
@node Score - the master of all contexts
@subsection Changing context default settings
The adjustments of the previous subsections (
-@ref{The \set command}, @ref{Modifying context plug-ins}, and
+@ref{The set command}, @ref{Modifying context plug-ins}, and
@ref{Overview of modifying properties}) can also be entered
separately from the music in the @code{\layout} block,
All these plug-ins have to cooperate, and this is achieved with a
special plug-in, which must be marked with the keyword @code{\type}.
- This should always be @rinternals{Engraver_group},
+ This should always be @code{Engraver_group}.
@example
\type "Engraver_group"
@menu
-* Navigating the program reference::
-* Layout interfaces::
-* Determining the grob property::
-* Naming conventions::
+* Navigating the program reference::
+* Layout interfaces::
+* Determining the grob property::
+* Naming conventions::
@end menu
@node Navigating the program reference
@c outdated info; probably will delete.
@ignore
This fragment points to two parts of the program reference: a page
- on @code{FingerEvent} and one on @code{Fingering}.
+ on @code{FingeringEvent} and one on @code{Fingering}.
- The page on @code{FingerEvent} describes the properties of the music
+ The page on @code{FingeringEvent} describes the properties of the music
expression for the input @code{-2}. The page contains many links
forward. For example, it says
This engraver creates the following layout objects: @rinternals{Fingering}.
@end quotation
- In other words, once the @code{FingerEvent}s are interpreted, the
+ In other words, once the @code{FingeringEvent}s are interpreted, the
@code{Fingering_engraver} plug-in will process them.
@end ignore
@item @rinternals{fingering-event}:
Music event type @code{fingering-event} is in Music expressions named
- @rinternals{FingerEvent}
+ @rinternals{FingeringEvent}
@end itemize
This path goes against the flow of information in the program: it
@section Modifying properties
@menu
-* Overview of modifying properties::
-* The \set command::
-* The \override command::
-* \set versus \override::
-* Objects connected to the input::
+* Overview of modifying properties::
+* The set command::
+* The override command::
+* set versus override::
+* The tweak command::
@end menu
-@node The \set command
+@node The set command
@subsection The @code{\set} command
@cindex properties
-@node The \override command
+@node The override command
@subsection The @code{\override} command
Commands which change output generally look like
and the program reference.
-@node \set versus \override
+@node set versus override
@subsection @code{\set} vs. @code{\override}
We have seen two methods of changing properties: @code{\set} and
property (modified with @code{\set}) was created.
-@node Objects connected to the input
-@subsection Objects connected to the input
+@node The tweak command
+@subsection The @code{\tweak} command
TODO: can't use \tweak in a variable
@menu
-* Input modes::
-* Direction and placement::
-* Distances and measurements::
-* Spanners::
+* Input modes::
+* Direction and placement::
+* Distances and measurements::
+* Spanners::
@end menu
@node Input modes
@section Common properties
@menu
-* Controlling visibility of objects::
-* Line styles::
-* Rotating objects::
-* Aligning objects::
+* Controlling visibility of objects::
+* Line styles::
+* Rotating objects::
+* Aligning objects::
@end menu
- @c TODO Add new subsection Shapes of objects
- @c which would include Slur shapes
- @c with a Known issue: can't modify shapes with 'control-points if there are
- @c more than one at the same musical moment
-
@node Controlling visibility of objects
@subsection Controlling visibility of objects
considerations.
@menu
-* Removing the stencil::
-* Making objects transparent::
-* Painting objects white::
-* Using break-visibility::
-* Special considerations::
+* Removing the stencil::
+* Making objects transparent::
+* Painting objects white::
+* Using break-visibility::
+* Special considerations::
@end menu
any angle about any point, but the method of doing so differs.
@menu
-* Rotating layout objects::
-* Rotating markup::
+* Rotating layout objects::
+* Rotating markup::
@end menu
@node Rotating layout objects
@section Advanced tweaks
@menu
-* Vertical grouping of grobs::
-* Modifying ends of spanners::
-* Modifying stencils::
-* Modifying shapes::
+* Vertical grouping of grobs::
+* Modifying ends of spanners::
+* Modifying stencils::
+* Modifying shapes::
@end menu
@subsection Modifying ends of spanners
@c FIXME Write this section
+ @c See earlier material in Line styles
@node Modifying stencils
@subsection Modifying stencils
- @c FIXME Write this section
+ All layout objects have a @code{stencil} property which is part of
+ the @code{grob-interface}. By default, this property is usually
+ set to a function specific to the object that is tailor-made to
+ render the symbol which represents it in the output. For example,
+ the standard setting for the @code{stencil} property of the
+ @code{MultiMeasureRest} object is @code{ly:multi-measure-rest::print}.
+
+ The standard symbol for any object can be replaced by modifying the
+ @code{stencil} property to reference a different, specially-written,
+ procedure. This requires a high level of knowledge of the internal
+ workings of LilyPond, but there is an easier way which can often
+ produce adequate results.
+
+ This is to set the @code{stencil} property to the procedure which
+ prints text -- @code{ly:text-interface::print} -- and to add a
+ @code{text} property to the object which is set to contain the
+ markup text which produces the required symbol. Due to the
+ flexibility of markup, much can be achieved -- see in particular
+ @ref{Graphic notation inside markup}.
+
+ The following example demonstrates this by changing the note head
+ symbol to a cross within a circle.
+
+ @lilypond[verbatim,quote]
+ XinO = {
+ \once \override NoteHead #'stencil = #ly:text-interface::print
+ \once \override NoteHead #'text = \markup {
+ \combine
+ \halign #-0.7 \draw-circle #0.85 #0.2 ##f
+ \musicglyph #"noteheads.s2cross"
+ }
+ }
+ \relative c'' {
+ a a \XinO a a
+ }
+ @end lilypond
+
+ Any of the glyphs in the feta Font can be supplied to the
+ @code{\musicglyph} markup command -- see @ref{The Feta font}.
+
+ @c TODO Add inserting eps files or ref to later
+
+ @c TODO Add inserting Postscript or ref to later
+
+ @seealso
+
+ Notation Reference:
+ @ref{Graphic notation inside markup},
+ @ref{Formatting text},
+ @ref{Text markup commands},
+ @ref{The Feta font}.
+
@node Modifying shapes
@subsection Modifying shapes
- @c FIXME Write this section
- @c Discussion of Bezier curves and the control-points property
+ @menu
+ * Modifying ties and slurs::
+ @end menu
+
+ @node Modifying ties and slurs
+ @unnumberedsubsubsec Modifying ties and slurs
+
+ Ties, slurs and phrasing slurs are drawn as third-order Bézier
+ curves. If the shape of the tie or slur which is calculated
+ automatically is not optimum, the shape may be modified manually by
+ explicitly specifying the four control points required to define
+ a third-order Bézier curve.
+
+ Third-order or cubic Bézier curves are defined by four control
+ points. The first and fourth control points are precisely the
+ starting and ending points of the curve. The intermediate two
+ control points define the shape. Animations showing how the curve
+ is drawn can be found on the web, but the following description
+ may be helpful. The curve starts from the first control point
+ heading directly towards the second, gradually bending over to
+ head towards the third and continuing to bend over to head towards
+ the fourth, arriving there travelling directly from the third
+ control point. The curve is entirely contained in the
+ quadrilateral defined by the four control points.
+
+ Here is an example of a case where the tie is not optimum, and
+ where @code{\tieDown} would not help.
+
+ @lilypond[verbatim,quote,relative=1]
+ <<
+ { e1 ~ e }
+ \\
+ { r4 <g c,> <g c,> <g c,> }
+ >>
+ @end lilypond
+
+ One way of improving this tie is to manually modify its control
+ points, as follows.
+
+ The coordinates of the Bézier control points are specified in units
+ of staff-spaces. The X@tie{}coordinate is relative to the reference
+ point of the note to which the tie or slur is attached, and the
+ Y@tie{}coordinate is relative to the staff center line. The
+ coordinates are entered as a list of four pairs of decimal numbers
+ (reals). One approach is to estimate the coordinates of the two
+ end points, and then guess the two intermediate points. The optimum
+ values are then found by trial and error.
+
+ It is useful to remember that a symmetric curve requires symmetric
+ control points, and that Bézier curves have the useful property that
+ transformations of the curve such as translation, rotation and
+ scaling can be achieved by applying the same transformation to the
+ curve's control points.
+
+ For the example above the following override gives a satisfactory
+ tie:
+
+ @lilypond[verbatim,quote,relative=1]
+ <<
+ \once \override Tie
+ #'control-points = #'((1 . -1) (3 . 0.6) (12.5 . 0.6) (14.5 . -1))
+ { e1 ~ e1 }
+ \\
+ { r4 <g c,> <g c,> <g c,>4 }
+ >>
+ @end lilypond
+
+ @knownissues
+
+ It is not possible to modify shapes of ties or slurs by changing
+ the @code{control-points} property if there are more than one at
+ the same musical moment, not even by using the @code{\tweak}
+ command.
+
+
@node Discussion of specific tweaks
@section Discussion of specific tweaks
@menu
-* old Contexts explained::
+* old Contexts explained::
@end menu
Notation Reference:
@ref{Time administration},
@ref{Scaling durations},
-@ref{Objects connected to the input},
+@ref{The tweak command},
@ref{Polymetric notation}.
Snippets:
Internals Reference:
@rinternals{TimeSignature},
- @rinternals{Timing-translator},
+ @rinternals{Timing_translator},
@rinternals{Staff}.
@knownissues
Examples: @c @lsr{parts,rehearsal-mark-numbers.ly}
-
@node Special rhythmic concerns
@subsection Special rhythmic concerns
This will put the grace notes after a @q{space} lasting 3/4 of the
length of the main note. The fraction 3/4 can be changed by
- setting @code{afterGraceFraction}, i.e.,
-
- @example
- #(define afterGraceFraction (cons 7 8))
- @end example
+ setting @code{afterGraceFraction}. The following example will put
+ the grace note at 7/8 of the main note.
- @noindent
- will put the grace note at 7/8 of the main note.
+ @lilypond[quote,ragged-right,verbatim,relative=2,fragment]
+ #(define afterGraceFraction (cons 15 16))
+ c1 \afterGrace d1 { c16[ d] } c4
+ @end lilypond
- The same effect can be achieved manually by doing
+ The space between the main note and the grace note may also be
+ specified using spacers. The following example places the grace
+ note at 7/8 of the main note.
@lilypond[quote,ragged-right,fragment,verbatim,relative=2]
\new Voice {
<< { d1^\trill_( }
- { s2 \grace { c16[ d] } } >>
+ { s2 s4. \grace { c16[ d] } } >>
c4)
}
@end lilypond
- @noindent
- By adjusting the duration of the skip note (here it is a
- half-note), the space between the main note and the grace
- may be adjusted.
-
A @code{\grace} music expression will introduce special
typesetting settings, for example, to produce smaller type, and
- set directions. Hence, when introducing layout tweaks, they
- should be inside the grace expression, for example,
+ set directions. Hence, when introducing layout tweaks to
+ override the special settings, they should be placed inside
+ the grace expression. The overrides should also be reverted
+ inside the grace expression. Here, the grace note's default stem
+ direction is overriden and then reverted.
@lilypond[quote,ragged-right,fragment,verbatim,relative=2]
\new Voice {
}
@end lilypond
- @noindent
- The overrides should also be reverted inside the grace expression.
+
+ @cindex stem, with slash
+
+
+ @snippets
+
+ The slash through the stem in @emph{acciaccatura}s can be obtained in
+ other situations:
+
+ @lilypond[quote,ragged-right,fragment,verbatim,relative=2]
+ \relative c'' {
+ \override Stem #'stroke-style = #"grace"
+ c8( d2) e8( f4)
+ }
+ @end lilypond
The layout of grace expressions can be changed throughout the
music using the function @code{add-grace-property}. The following
example undefines the @code{Stem} direction for this grace, so
that stems do not always point up.
- @example
- \new Staff @{
- #(add-grace-property 'Voice 'Stem 'direction '())
- @dots{}
- @}
- @end example
+ @lilypond[quote,ragged-right,fragment,verbatim,relative=2]
+ \relative c'' {
+ \new Staff {
+ #(add-grace-property 'Voice 'Stem 'direction ly:stem::calc-direction)
+ #(remove-grace-property 'Voice 'Stem 'direction)
+ \new Voice {
+ \acciaccatura {
+ f16
+ }
+ g4
+ }
+ }
+ }
+ @end lilypond
- @noindent
Another option is to change the variables @code{startGraceMusic},
@code{stopGraceMusic}, @code{startAcciaccaturaMusic},
@code{stopAcciaccaturaMusic}, @code{startAppoggiaturaMusic},
seen in the file @file{ly/@/grace@/-init@/.ly}. By redefining
them other effects may be obtained.
- @cindex stem, with slash
-
- @noindent
- The slash through the stem in @emph{acciaccatura}s can be obtained in
- other situations by @code{\override Stem #'stroke-style =
- #"grace"}.
+ Grace notes may be forced to align with regular notes
+ in other staves:
-
- @snippets
-
- Grace notes may be forced to use align with regular notes
- in other staves by setting @code{strict-grace-spacing} to
- ##t:
-
- @lilypond[verbatim,quote,relative=2]
- <<
- \override Score.SpacingSpanner #'strict-grace-spacing = ##t
- \new Staff {
- c4
- \afterGrace c4 { c16[ c8 c16] }
- c4 r
- }
- \new Staff {
- c16 c c c c c c c c4 r
- }
- >>
+ @lilypond[verbatim,quote,ragged-right]
+ \relative c'' {
+ <<
+ \override Score.SpacingSpanner #'strict-grace-spacing = ##t
+ \new Staff {
+ c4
+ \afterGrace c4 { c16[ c8 c16] }
+ c4 r
+ }
+ \new Staff {
+ c16 c c c c c c c c4 r
+ }
+ >>
+ }
@end lilypond
Internals Reference: @rinternals{Timing_translator},
@rinternals{Score}
+