@end html
This document describes GNU LilyPond and its input format. The last
-revision of this document was made for LilyPond 1.6.2. It assumes
+revision of this document was made for LilyPond 1.7.10. It assumes
that you already know a little bit about LilyPond input (how to
make an input file, how to create sheet music from that input file,
etc). New users are encouraged to study the tutorial before reading
Durations can also be produced through GUILE extension mechanism.
@lilypond[verbatim,fragment]
- c'\duration #(make-duration 2 1)
+ c'\duration #(ly:make-duration 2 1)
@end lilypond
Dot placement for chords is not perfect. In some cases, dots overlap:
@lilypond[]
- \context Voice { <f,4. c'' d e f> }
+ <<f, c'' d e f>>4.
@end lilypond
musical phrasing. A tie is entered using the tilde symbol `@code{~}'.
@lilypond[fragment,verbatim,center]
- e' ~ e' <c' e' g'> ~ <c' e' g'>
+ e' ~ e' <<c' e' g'>> ~ <<c' e' g'>>
@end lilypond
When a tie is applied to a chord, all note heads (whose pitches match) are
for every tied chord.
@lilypond[fragment,verbatim,center]
\property Voice.sparseTies = ##t
- <c' e' g'> ~ <c' e' g'>
+ <<c' e' g'>> ~ <<c' e' g'>>
@end lilypond
In its meaning a tie is just a way of extending a note duration, similar
@code{\times} only once, saving you lots of typing.
@lilypond[fragment, relative, singleline, verbatim]
-\property Voice.tupletSpannerDuration = #(make-moment 1 4)
+\property Voice.tupletSpannerDuration = #(ly:make-moment 1 4)
\times 2/3 { c'8 c c c c c }
@end lilypond
@lilypond[fragment,verbatim,center]
\relative c' {
- c <c e g>
- <c' e g>
- <c, e' g>
+ c <<c e g>>
+ <<c' e g>>
+ <<c, e' g>>
}
@end lilypond
@cindex @code{\notes}
@c move this elsewhere?
LilyPond also comes with support files for emacs: lilypond-mode for
-emacs provides indentation, syntax coloring and handy compile
-short-cuts. If lilypond-mode is not installed on your platform, then
-refer to the installation instructions for more information
+emacs provides indentation, autocompletion, syntax coloring, handy
+compile short-cuts and reading Info documents of lilypond inside emacs.
+If lilypond-mode is not installed on your platform,
+then refer to the installation instructions for more information.
@cindex emacs
@cindex emacs mode
To use point-and-click, add one of these lines to the top of your .ly
file.
@example
-#(set-point-and-click! 'line)
+#(ly:set-point-and-click 'line)
@end example
@cindex line-location
If you use xemacs instead of emacs, you use @code{(gnuserve-start)} in
your @file{.emacs}, and set @code{XEDITOR} to @code{gnuclient -q +%l %f}
-For using Vim, set @code{XEDITOR} to @code{gvim --remote +%l %f}, or use this
-argument with xdvi's @code{-editor} option.
+For using Vim, set @code{XEDITOR} to @code{gvim --remote +%l %f}, or
+use this argument with xdvi's @code{-editor} option.
+
@cindex NEdit
For using NEdit, set @code{XEDITOR} to @code{nc -noask +%l %f}, or
use this argument with xdvi's @code{-editor} option.
If can also make your editor jump to the exact location of the note
-you clicked. This is only supported on Emacs. Users of version 20 must
-apply the patch @file{emacsclient.patch}. Users of version 21 must
-apply @file{server.el.patch} (version 21.2 and earlier). At the top
-of the @code{ly} file, replace the @code{set!} line with the following
-line,
+you clicked. This is only supported on Emacs and VIM. Users of Emacs version
+20 must apply the patch @file{emacsclient.patch}. Users of version 21
+must apply @file{server.el.patch} (version 21.2 and earlier). At the
+top of the @code{ly} file, replace the @code{set-point-and-click} line
+with the following line,
@example
-#(set-point-and-click! 'line-column)
+#(ly:set-point-and-click 'line-column)
@end example
@cindex line-colomn-location
-and set @code{XEDITOR} to @code{emacsclient --no-wait +%l:%c %f}.
+and set @code{XEDITOR} to @code{emacsclient --no-wait +%l:%c %f}. Vim
+users can set @var{XEDITOR} to @code{gvim --remote +:%l:norm%c| %f}.
+
+
@refbugs
@cindex Staff notation
@menu
-* Staff symbol::
+* Staff symbol::
* Key signature::
* Clef::
* Time signature::
value of @code{timeSignatureFraction} also causes a time signature
symbol to be printed.
+More options are available through the Scheme function
+@code{set-time-signature}. In combination with the
+@internalsref{Measure_grouping_engraver}, it will create
+@internalsref{MeasureGrouping} signs. Such signs ease reading
+rhythmically complex modern music. In the following example, the 9/8
+measure is subdivided in 2, 2, 2 and 3. This is passed to
+@code{set-time-signature} as the third argument @code{(2 2 2 3)}.
+
+@lilypond[verbatim]
+\score { \notes \relative c'' {
+ #(set-time-signature 9 8 '(2 2 2 3))
+ g8 g d d g g a8-[-( bes g-]-) |
+ #(set-time-signature 5 8 '(3 2))
+ a4. g4
+ }
+ \paper {
+ linewidth = -1.0
+ \translator { \StaffContext
+ \consists "Measure_grouping_engraver"
+ }}}
+@end lilypond
+
@c . {Partial}
@subsection Partial
@cindex Partial
\property Voice.subdivideBeams = ##t
[c16 c c c c c c c]
[c32 c c c c c c c c c c c c c c c]
-\property Score.beatLength = #(make-moment 1 8)
+\property Score.beatLength = #(ly:make-moment 1 8)
[c32 c c c c c c c c c c c c c c c]
@end example
@lilypond[noindent,noquote]
\property Voice.subdivideBeams = ##t
[c16 c c c c c c c]
[c32 c c c c c c c c c c c c c c c]
- \property Score.beatLength = #(make-moment 1 8)
+ \property Score.beatLength = #(ly:make-moment 1 8)
[c32 c c c c c c c c c c c c c c c]
}
}
you can use the following:
@example
\property Voice.autoBeamSettings \override
- #'(end * * * *) = #(make-moment 1 4)
+ #'(end * * * *) = #(ly:make-moment 1 4)
@end example
Since the duration of a quarter note is 1/4 of a whole note, it is
-entered as @code{(make-moment 1 4)}.
+entered as @code{(ly:make-moment 1 4)}.
The same syntax can be used to specify beam starting points. In this
example, automatic beams can only end on a dotted quarter note.
@example
\property Voice.autoBeamSettings \override
- #'(end * * * *) = #(make-moment 3 8)
+ #'(end * * * *) = #(ly:make-moment 3 8)
@end example
In 4/4 time signature, this means that automatic beams could end only on
3/8 and on the fourth beat of the measure (after 3/4, that is 2 times
@lilypond[singleline,fragment,relative,noverbatim]
\property Voice.autoBeamSettings
- \override #'(end * * * *) = #(make-moment 3 8)
+ \override #'(end * * * *) = #(ly:make-moment 3 8)
\time 12/8 c'8 c c c16 c c c c c [c c c c] c8 c c4
@end lilypond
It is not possible to specify beaming parameters that act differently in
@lilypond[singleline,fragment,verbatim]
\property Staff.autoAccidentals = #'( Staff (any-octave . 0) )
-cis'4 <c'' c'> r2 | cis'4 <c' c''> r2 | <cis' c''> r | <c'' cis'> r |
+cis'4 <<c'' c'>> r2 | cis'4 <<c' c''>> r2 | <<cis' c''>> r | <<c'' cis'>> r |
@end lilypond
The only solution is to manually insert the problematic
* Breath marks::
* Tempo::
* Text spanners::
+* Analysis brackets::
@end menu
@node Slurs
dotted line. You can create such texts using text spanners. The syntax
is as follows:
@example
-\spanrequest \start "text"
-\spanrequest \stop "text"
+ \startTextSpan
+ \stopTextSpan
@end example
LilyPond will respond by creating a @internalsref{TextSpanner} object (typically
in @internalsref{Voice} context). The string to be printed, as well as the
\property Voice.TextSpanner \set #'edge-height = #'(0 . 1.5)
\property Voice.TextSpanner \set #'edge-text = #'("8va " . "")
\property Staff.centralCPosition = #-13
- a\spanrequest \start "text" b c a \spanrequest \stop "text" }
+ a\startTextSpan b c a \stopTextSpan }
@end lilypond
+@node Analysis brackets
+@subsection Analysis brackets
+@cindex brackets
+@cindex phrasing brackets
+@cindex musicological analysis
+@cindex note grouping bracket
+
+Brackets are used in musical analysis to indicate structure in musical
+pieces. LilyPond supports a simple form of nested horizontal brackets.
+To use this, add the @internalsref{Horizontal_bracket_engraver} to
+@internalsref{Staff} context. A bracket is started with
+@code{\groupOpen} and closed with @code{\groupClose}. This produces
+@internalsref{HorizontalBracket} objects.
+
+@lilypond[singleline,verbatim]
+\score { \notes \relative c'' {
+ c4-\groupOpen-\groupOpen
+ c4-\groupClose
+ c4-\groupOpen
+ c4-\groupClose-\groupClose
+ }
+ \paper { \translator {
+ \StaffContext \consists "Horizontal_bracket_engraver"
+ }}}
+@end lilypond
+
@c . {Ornaments}
@node Ornaments
@section Ornaments
@end lilypond
-@cindex @code{\script}
@cindex scripts
@cindex superscript
@cindex subscript
@item 'end-repeat
Print a :| bar line
@item (volta . @var{text})
- Print a volta bracket saying @var{text}.
+ Print a volta bracket saying @var{text} (the text can be specified
+ as a text string or as a markup text, see @ref{Text markup}).
@item (volta . #f)
Stop a running volta bracket
@end table
@lilypond[singleline, verbatim]
#(define mydrums `(
- (bassdrum default #f ,(make-pitch -1 2 0))
- (snare default #f ,(make-pitch 0 1 0))
- (hihat cross #f ,(make-pitch 0 5 0))
- (pedalhihat xcircle "stopped" ,(make-pitch 0 5 0))
- (lowtom diamond #f ,(make-pitch -1 6 0))
+ (bassdrum default #f ,(ly:make-pitch -1 2 0))
+ (snare default #f ,(ly:make-pitch 0 1 0))
+ (hihat cross #f ,(ly:make-pitch 0 5 0))
+ (pedalhihat xcircle "stopped" ,(ly:make-pitch 0 5 0))
+ (lowtom diamond #f ,(ly:make-pitch -1 6 0))
))
\include "drumpitch-init.ly"
up = \notes { hh8 hh hh hh hhp4 hhp }
@example
#(define mydrums (append `(
- (bassdrum default #f ,(make-pitch -1 2 0))
- (lowtom diamond #f ,(make-pitch -1 6 0))
+ (bassdrum default #f ,(ly:make-pitch -1 2 0))
+ (lowtom diamond #f ,(ly:make-pitch -1 6 0))
) drums ))
@end example
up = \notes { crashcymbal4 hihat8 halfopenhihat hh hh hh openhihat }
down = \notes { bassdrum4 snare8 bd r bd sn4 }
\include "nederlands.ly"
-bass = \notes \transpose c, { a4. e8 r e g e }
+bass = \notes \transpose c c,, { a4. e8 r e g e }
\score {
<
\apply #(drums->paper 'drums) \context Staff = drums <
@code{\sustainDown}, @code{\sustainUp}, @code{\unaCorda},
@code{\treCorde}, @code{\sostenutoDown} and @code{\sostenutoUp}.
-These identifiers are shorthands for spanner commands of the types
-@internalsref{Sustain}, @internalsref{UnaCorda} and @internalsref{Sostenuto}:
-
-@lilypond[fragment,verbatim]
-c''4 \spanrequest \start "Sustain" c''4
-c''4 \spanrequest \stop "Sustain"
-@end lilypond
-
The symbols that are printed can be modified by setting
@code{pedal@var{X}Strings}, where @var{X} is one of the pedal types:
Sustain, Sostenuto or UnaCorda. Refer to the generated documentation of
-@rgrob{SustainPedal}, for example, for more information.
+@internalsref{SustainPedal}, for example, for more information.
Pedals can also be indicated by a sequence of brackets, by setting the
@code{pedal-type} property of SustainPedal objects:
@cindex @code{\arpeggio}
You can specify an arpeggio sign on a chord by attaching an
-@code{\arpeggio} to a note of the chord.
+@code{\arpeggio} to a chord.
@lilypond[fragment,relative,verbatim]
- \context Voice <c\arpeggio e g c>
+ <<c e g c>>-\arpeggio
@end lilypond
When an arpeggio crosses staves in piano music, you attach an arpeggio
@lilypond[fragment,relative,verbatim]
\context PianoStaff <
\property PianoStaff.connectArpeggios = ##t
- \context Voice = one { <c'\arpeggio e g c> }
- \context Voice = other { \clef bass <c,,\arpeggio e g>}
+ \context Voice = one { <<c' e g c>>-\arpeggio }
+ \context Voice = other { \clef bass <<c,, e g>>-\arpeggio}
>
@end lilypond
@lilypond[fragment,relative,verbatim]
\context Voice {
\property Voice.Arpeggio \set #'arpeggio-direction = #1
- <c\arpeggio e g c>
+ <<c e g c>>-\arpeggio
\property Voice.Arpeggio \set #'arpeggio-direction = #-1
- <c\arpeggio e g c>
+ <<c e g c>>-\arpeggio
}
@end lilypond
\property PianoStaff.connectArpeggios = ##t
\property PianoStaff.Arpeggio \override
#'molecule-callback = \arpeggioBracket
- \context Voice = one { <c'\arpeggio e g c> }
- \context Voice = other { \clef bass <c,,\arpeggio e g>}
+ \context Voice = one { <<c' e g c>>-\arpeggio }
+ \context Voice = other { \clef bass <<c,, e g>>-\arpeggio }
>
@end lilypond
\notes {
a,4 c' a e' e c' a e'
}
-
>
@end lilypond
LilyPond has support for both entering and printing chords.
@lilypond[verbatim,singleline]
-twoWays = \notes \transpose c'' {
+twoWays = \notes \transpose c c' {
\chords {
c1 f:sus4 bes/f
}
- <c e g>
- <f bes c'>
- <f bes d'>
+ <<c e g>>
+ <<f bes c'>>
+ <<f bes d'>>
}
\score {
using @code{\transpose}.
@lilypond[fragment,verbatim]
-\transpose c'' {
+\transpose c c' {
\chords {
c1 c:3- c:7 c:8
c:9 c:9-.5+.7+ c:3-.5-
which replaces the 5th with a 4th.
@lilypond[fragment,verbatim]
-\transpose c'' {
+\transpose c c' {
\chords {
c1:m c:min7 c:maj c:aug c:dim c:sus
}
separated by dots.
@lilypond[fragment,verbatim,center]
- \transpose c'' {
+ \transpose c c' {
\chords {
c1^3 c:7^5.3 c:8^7
}
is not in the chord, a warning will be printed.
@lilypond[fragment,verbatim,center]
- \transpose c''' {
+ \transpose c c'' {
\chords {
c1 c/e c/g c:7/e
}
so it becomes the lowest note in the chord.
@lilypond[fragment,verbatim,center]
- \transpose c''' {
+ \transpose c c'' {
\chords {
c1 c/+c c/+g c:7/+b
}
@lilypond[verbatim,singleline]
scheme = \notes {
- \chords {a1 b c} <d f g> <e g b>
+ \chords {a1 b c} <<d f g>> <<e g b>>
}
\score {
\notes<
\context ChordNames \scheme
- \context Staff \transpose c'' \scheme
+ \context Staff \transpose c c' \scheme
>
}
@end lilypond
\context ChordNames {
\property ChordNames.chordChanges = ##t
\scheme }
- \context Staff \transpose c'' \scheme
+ \context Staff \transpose c c' \scheme
>
\paper{linewidth= 9.\cm}
}
@lilypond[verbatim,center,singleline]
scheme = \notes {
- <c'1 e' g'>
- <e' g' c''>
- <e e' g' c''>
+ <<c' e' g'>>1
+ <<e' g' c''>>
+ <<e e' g' c''>>
}
\score {
\context ChordNames = jazz {
\property ChordNames.ChordName \override
#'style = #'jazz \scheme }
- \context Staff \transpose c'' \scheme
+ \context Staff \transpose c c' \scheme
>
}
@end lilypond
@end example
@lilypond[noindent,noquote]
\score {
- \context Staff \notes \transpose c''' {
+ \context Staff \notes \transpose c c'' {
\property Score.BarNumber \override #'break-visibility = #end-of-line-invisible
\property Score.barNumberVisibility = #(every-nth-bar-number-visible 5)
\property Score.BarNumber \override #'molecule-callback =
}
@end lilypond
+If you would like the bar numbers to appear at regular intervals, but
+not starting from measure zero, you can use the context function,
+@code{set-bar-number-visibility}, to automatically set
+@code{barNumberVisibility} so that the bar numbers appear at regular
+intervals, starting from the @code{\applycontext}:
+
+@example
+resetBarnum = \context Score \applycontext
+ #(set-bar-number-visibility 4)
+...
+\property Score.BarNumber \override #'break-visibility =
+ #end-of-line-invisible
+\mark "A" \resetBarnum
+\repeat unfold 10 c1
+\mark \default \resetBarnum
+\repeat unfold 8 c
+@end example
+@lilypond[noindent,noquote]
+resetBarnum = \context Score \applycontext
+ #(set-bar-number-visibility 4)
+\score {
+ <
+ \notes \transpose c c'' {
+ \property Score.BarNumber \override #'break-visibility =#end-of-line-invisible
+ \property Score.RehearsalMark \override #'padding = #2.5
+ \mark "A" \resetBarnum
+ \repeat unfold 10 c1
+ \mark \default \resetBarnum
+ \repeat unfold 8 c
+ \bar "|."
+ }
+ >
+}
+@end lilypond
+
See also @seeinternals{BarNumber}.
@refbugs
@lilypond[verbatim,singleline]
-#(define text-flat
- '((font-relative-size . -2 ) (music "accidentals--1")))
-
-\score { \notes {
- \property Staff.instrument = #`((kern . 0.5) (lines
- "2 Clarinetti" (columns " (B" ,text-flat ")")))
- c'' 4 }
+\score {
+ \notes \context Staff = treble {
+ \property Staff.instrument
+ = \markup { \column << "Clarinetti" { "in B" \smaller \musicglyph #"accidentals--1" } >> }
+ { c''1 }
+ }
+ \paper { linewidth= 8.0\cm }
}
@end lilypond
A music expression can be transposed with @code{\transpose}. The syntax
is
@example
- \transpose @var{pitch} @var{musicexpr}
+ \transpose @var{from} @var{to} @var{musicexpr}
@end example
-This means that middle C in @var{musicexpr} is transposed to
-@var{pitch}.
+This means that @var{musicexpr} is transposed to by the interval
+between @var{from} is @var{to}.
@code{\transpose} distinguishes between enharmonic pitches: both
-@code{\transpose cis'} or @code{\transpose des'} will transpose up half
-a tone. The first version will print sharps and the second version
-will print flats.
+@code{\transpose c cis} or @code{\transpose c des} will transpose up
+half a tone. The first version will print sharps and the second
+version will print flats.
@lilypond[singleline, verbatim]
mus =\notes { \key d \major cis d fis g }
\score { \notes \context Staff {
\clef "F" \mus
\clef "G"
- \transpose g'' \mus
- \transpose f'' \mus
+ \transpose c g' \mus
+ \transpose c f' \mus
}}
@end lilypond
Multi measure rests are entered using `@code{R}'. It is specifically
meant for full bar rests and for entering parts: the rest can expand to
-fill a score with
-rests, or it can be printed as a single multimeasure rest This expansion
-is controlled by the property @code{Score.skipBars}. If this is set to true,
-Lily will not expand empty measures, and the appropriate number is added
-automatically.
+fill a score with rests, or it can be printed as a single multimeasure
+rest This expansion is controlled by the property
+@code{Score.skipBars}. If this is set to true, Lily will not expand
+empty measures, and the appropriate number is added automatically.
@lilypond[fragment,verbatim]
\time 4/4 r1 | R1 | R1*2
@cindex whole rests for a full measure
-The object for this object is @internalsref{MultiMeasureRest}.
+The object for this object is @internalsref{MultiMeasureRest}, and
+@internalsref{MultiMeasureRestNumber}.
@refbugs
Currently, there is no way to automatically condense multiple rests
into a single multimeasure rest. Multi measure rests do not take part
-in rest collisions. There is no way to put texts centered on
-multi-measure rests.
+in rest collisions.
+
+Multi-measure rests do not accept @var{note}-@code{text} syntax for
+putting texts and scripts on the rest. This has to be done by setting
+@code{#'text} in @internalsref{MultiMeasureRestNumber}. An identifier is
+provided for a fermata:
+
+@cindex text on multi-measure rest
+@cindex script on multi-measure rest
+@cindex fermata on multi-measure rest
+
+@lilypond[verbatim,fragment]
+ \time 3/4
+ \setMmRestFermata R2.
+@end lilypond
+
@cindex condensing rests
@menu
* Ancient note heads::
-* Ancient clefs::
+* Ancient clefs ::
* Custodes::
* Ligatures::
* Figured bass::
@lilypond[singleline,verbatim]
\score {
- \notes \transpose c'' {
+ \notes \transpose c c' {
\[ g c a f d' \]
a g f
\[ e f a g \]
@lilypond[singleline,verbatim]
\score {
- \notes \transpose c'' {
+ \notes \transpose c c' {
\property Score.timing = ##f
\property Score.defaultBarType = "empty"
\property Voice.NoteHead \set #'style = #'neo_mensural
@lilypond[singleline,verbatim]
\score {
- \notes \transpose c'' {
+ \notes \transpose c c' {
\property Score.timing = ##f
\property Score.defaultBarType = "empty"
\property Voice.NoteHead \set #'style = #'neo_mensural
object, and set a object property in that object.
@menu
-* Tuning groups of objects ::
-* Tuning per object ::
+* Tuning groups of objects ::
+* Tuning per object ::
* Font selection::
* Text markup::
@end menu
\context Staff \outputproperty
#(make-type-checker 'note-head-interface)
#'extra-offset = #'(0.5 . 0.75)
- <c8 e g> }
+ <<c e g>>8 }
@end lilypond
@cindex @code{extra-offset}
shift only the `m.d.' text, but not the fingering instruction "2".
@lilypond[verbatim,singleline]
#(define (make-text-checker text)
- (lambda (grob) (equal? text (ly-get-grob-property grob 'text))))
+ (lambda (grob) (equal? text (ly:get-grob-property grob 'text))))
\score {
\notes\relative c''' {
@cindex cue notes
@cindex font size
@cindex size
+@cindex symbol size
+@cindex glyph size
The font used for printing a object can be selected by setting
@code{font-name}, e.g.
@cindex text markup
@cindex markup text
-LilyPond has an internal mechanism to typeset texts. You can
-form text markup expressions by composing scheme expressions
-in the following way.
-
-@lilypond[verbatim, singleline]
- \relative c' {
- \fatText
- a^#"upright"
- b_#'(bold "bold")
- c^#'(italic "italic")
- d_#'((bold italic) "ff")
- e^#'(dynamic "ff")
- f_#'(lines "one" (bold "two"))
- g^#'(music "noteheads-2" ((raise . 2.4) "flags-u3"))
- }
+
+@cindex typeset text
+
+LilyPond has an internal mechanism to typeset texts. You can access it
+with the keyword @code{\markup}. Within markup mode, you can enter texts
+similar to lyrics: simply enter them, surrounded by spaces.
+@cindex markup
+
+@lilypond[verbatim,fragment,relative=1]
+ c1^\markup { hello }
+ c1_\markup { hi there }
+ c1^\markup { hi \bold there, is \italic anyone home? }
@end lilypond
-Normally, the Scheme markup text is stored in the @code{text} property
-of a object. Formally, it is defined as follows:
+@cindex font switching
+The line of the example demonstrates font switching commands. Notice
+that the command only apply to the first following word; enclose a set
+of texts with braces to apply a command to more words.
@example
-text: string | (head? text+)
-head: markup | (markup+)
-markup-item: property | abbrev
-property: (@var{key} . @var{value})
-abbrev: @code{columns lines roman music bold italic named super sub}
- @code{overstrike text finger volta timesig mmrest mark script}
- @code{large Large dynamic}
+ \markup @{ \bold @{ hi there @} @}
@end example
+For clarity, you can also do this for single arguments, e.g.
+@example
+ \markup @{ is \italic @{ anyone @} home @}
+@end example
+
+@cindex font size, texts
+
-The markup is broken down and converted into a list of object properties,
-which are prepended to the property list. The @var{key}-@var{value}
-pair is a object property. A list of properties available is included in
-the generated documentation for @internalsref{text-interface}.
+The following size commands set abolute sizes
+
+@cindex \teeny
+@cindex \tiny
+@cindex \small
+@cindex \large
+@cindex \huge
-The following abbreviations are defined:
@table @code
-@item columns
- horizontal mode: set all text on one line (default)
-@item lines
- vertical mode: set every text on a new line
-@item roman
- select roman font
-@item music
- selects the Feta font (the standard font for music notation glyphs),
-and uses named lookup
-
-@item bold
- select bold series
-@item italic
- select italic shape
-@item named
- lookup by character name
-@item text
- plain text lookup (by character value)
-@item super
- superscript
-@item sub
- subscript
-@item overstrike
- the next text or character overstrikes this one
-@item finger
- select fingering number fontstyle
-@item volta
- select volta number fontstyle
-@item timesig
- select time signature number fontstyle
-@item mmrest
- select multi measure rest number fontstyle
-@item mark
- select mark number fontstyle
-@item script
- select scriptsize roman fontstyle
-@item large
- select large roman fontstyle
-@item Large
- select Large roman fontstyle
-@item dynamic
- select dynamics fontstyle
+@item \teeny
+@item \tiny
+@item \small
+@item \large
+@item \huge
+@end table
+
+You can also make letter larger or smaller relative to their neighbors,
+with the commands @code{\larger} and @code{\smaller}.
+@cindex smaller
+@cindex larger
+
+@cindex font style, for texts
+@cindex \bold
+@cindex \dynamic
+@cindex \number
+@cindex \italic
+
+The following font change commands are defined:
+@table @code
+@item \dynamic
+This changes to the font used for dynamic signs. Note that this font
+doesn't contain all characters of the alphabet.
+@item \number
+This changes to the font used for time signatures. It only contains
+numbers and a few punctuation marks.
+@item \italic
+@item \bold
+@end table
+
+@cindex raising text
+@cindex lowering text
+@cindex moving text
+@cindex translating text
+
+@cindex \sub
+@cindex \super
+
+Raising and lowering texts can be done with @code{\super} and
+@code{\sub}.
+
+@lilypond[verbatim,fragment,relative=1]
+ c1^\markup { E "=" mc \super "2" }
+@end lilypond
+
+@cindex \raise
+
+If you want to give an explicit amount for lowering or raising, use
+@code{\raise}. This command takes a Scheme valued argument,
+@lilypond[verbatim,fragment,relative=1]
+ c1^\markup { C \small \raise #1.0 { "9/7+" }}
+@end lilypond
+The argument to @code{\raise} is the vertical displacement amount,
+measured in (global) staff spaces.
+
+Other commands taking single arguments include
+@table @code
+
+@item \musicglyph
+@cindex \musicglyph
+ This is converted to a musical symbol, e.g. @code{\musicglyph
+#"accidentals-0"} will select the natural sign from the music font.
+See @ref{The Feta font} for a complete listing of the possible glyphs.
+@item \char
+This produces a single character, e.g. @code{\char #65} produces the
+letter 'A'.
+
+@item \hspace #@var{amount}
+@cindex \hspace
+This produces a invisible object taking horizontal space.
+@example
+\markup @{ A \hspace #2.0 B @}
+@end example
+will put extra space between A and B. Note that lilypond
+inserts space before and after @code{\hspace}.
+
+@item \fontsize #@var{size}
+@cindex \fontsize
+This sets the relative font size, eg.
+@example
+A \fontsize #2 @{ B C @} D
+@end example
+
+This will enlarge the B and the C by two steps.
+@item \translate #(cons @var{x} @var{y})
+@cindex \translate
+This translates an object. It's first argument is a cons of numbers
+@example
+A \translate #(cons 2 -3) @{ B C @} D
+@end example
+This moves `B C' 2 spaces to the right, and 3 down.
+
+@item \magnify #@var{mag}
+@cindex \magnify
+This sets the font magnification for the its argument. In the following
+example, the middle A will be 10% larger.
+@example
+A \magnify #1.1 @{ A @} A
+@end example
+
+
+@item \override #(@var{key} . @var{value})
+@cindex \override
+This overrides a formatting property for its argument. The argument
+should be a key/value pair, e.g.
+@example
+m \override #'(font-family . math) m m
+@end example
@end table
+In markup mode you can compose expressions, similar to mathematical
+expressions, XML documents and music expressions. The braces group
+notes into horizontal lines. Other types of lists also exist: you can
+stack expressions grouped with @code{<<}, and @code{>>} vertically with
+the command @code{\column}.
+
+@lilypond[verbatim,fragment,relative=1]
+ c1^\markup { \column << a b c >> }
+ c1^\markup { \line << a b c >> }
+@end lilypond
+
+The markup mechanism is very flexible and extensible. Refer to
+@file{scm/new-markup.scm} for more information on extending the markup
+mode.
+
@cindex metronome mark
marking:
@lilypond[verbatim]
-#(define note '(columns
- (music "noteheads-2" ((kern . -0.1) "flags-stem"))))
-#(define eight-note `(columns ,note ((kern . -0.1)
- (music ((raise . 3.5) "flags-u3")))))
-#(define dotted-eight-note
- `(columns ,eight-note (music "dots-dot")))
+eigthStem = \markup \combine
+ \musicglyph #"flags-stem"
+ \translate #'(0.0 . 3.5) \musicglyph #"flags-u3"
+eighthNote = \markup
+ \override #'(word-space . 0.0)
+ { \musicglyph #"noteheads-2"
+ \translate #'(-0.05 . 0.1) \eigthStem }
\score {
\notes\relative c'' {
- a1^#`((columns (font-relative-size . -1))
- ,dotted-eight-note " = 64")
- }
- \paper {
- linewidth = -1.
- \translator{
- \ScoreContext
- TextScript \override #'font-shape = #'upright
- }
+ a1^\markup { \magnify #0.9 \eighthNote " = 64" }
}
}
@end lilypond
@refbugs
-The syntax and semantics of markup texts are not clean, and both
-syntax and semantics are slated for a rewrite.
+@cindex kerning
-LilyPond does not do kerning, and there generally spaces texts
-slightly too wide.
+LilyPond does not account for kerning in its text formatting, so it
+spaces texts slightly too wide.
+Syntax errors for markup mode are confusing.
@node Global layout
@cindex distance between staves
@cindex staff distance
@cindex between staves, distance
+@cindex staffs per page
+
The height of each system is determined automatically by lilypond, to
keep systems from bumping into each other, some minimum distances are
@lilypond
\score {
- \context PianoStaff \notes \transpose c''' <
+ \context PianoStaff \notes \transpose c c'' <
\context Staff = up { s1 }
- \context Staff = down { [c8 c \translator Staff=up <c d> c
+ \context Staff = down { [c8 c \translator Staff=up <<c d>> c
\translator Staff=down c c c] }
>
\paper { linewidth = -1 }
@cindex @code{indent}
@cindex @code{linewidth}
-The most basic settings influencing the spacing are @code{linewidth}
-and @code{indent}, both set in the @code{\paper} block. They control
-the indentation of the first line of music, and the lengths of the
-lines. If @code{linewidth} set to a negative value, a single
+The most basic settings influencing the spacing are @code{indent} and
+@code{linewidth}. They are set in the @code{\paper} block. They
+control the indentation of the first line of music, and the lengths of
+the lines. If @code{linewidth} set to a negative value, a single
unjustified line is produced. A similar effect for scores that are
longer than one line, can be produced by setting @code{raggedright} to
true in the @code{\paper} block.