| [ << Staff notation ] | [Top][Contents][Index][ ? ] | [ Text >> ] | ||
| [ < ] | [ Up : Top ] | [ Adding fingerings to a score > ] | ||
Editorial annotations
These snippets illustrate the Notation Reference, section Editorial annotations.
| [ << Editorial annotations ] | [Top][Contents][Index][ ? ] | [ Text >> ] | ||
| [ < Editorial annotations ] | [ Up : Editorial annotations ] | [ Allowing fingerings to be printed inside the staff > ] | ||
Adding fingerings to a score
Fingering instructions can be entered using a simple syntax.
\relative c'' {
c4-1 d-2 f-4 e-3
}
| [ << Editorial annotations ] | [Top][Contents][Index][ ? ] | [ Text >> ] | ||
| [ < Adding fingerings to a score ] | [ Up : Editorial annotations ] | [ Analysis brackets above the staff > ] | ||
Allowing fingerings to be printed inside the staff
By default, vertically oriented fingerings are positioned outside the staff. However, this behavior can be canceled.
\relative c' {
<c-1 e-2 g-3 b-5>2
\once \override Fingering #'staff-padding = #'()
<c-1 e-2 g-3 b-5>2
}
| [ << Editorial annotations ] | [Top][Contents][Index][ ? ] | [ Text >> ] | ||
| [ < Allowing fingerings to be printed inside the staff ] | [ Up : Editorial annotations ] | [ > ] | ||
Analysis brackets above the staff
Simple horizontal analysis brackets are added below the staff by default. The following example shows a way to place them above the staff instead.
\layout {
\context {
\Voice
\consists "Horizontal_bracket_engraver"
}
}
\relative c'' {
\once \override HorizontalBracket #'direction = #UP
c2\startGroup
d2\stopGroup
}
| [ << Editorial annotations ] | [Top][Contents][Index][ ? ] | [ Text >> ] | ||
| [ < Analysis brackets above the staff ] | [ Up : Editorial annotations ] | [ > ] | ||
Applying note head styles depending on the step of the scale
The shapeNoteStyles property can be used to define various note
head styles for each step of the scale (as set by the key signature or
the "tonic" property). This property requires a set of symbols, which
can be purely arbitrary (geometrical expressions such as
triangle, cross, and xcircle are allowed) or based
on old American engraving tradition (some latin note names are also
allowed).
That said, to imitate old American song books, there are several
predefined note head styles available through shortcut commands such as
\aikenHeads or \sacredHarpHeads.
This example shows different ways to obtain shape note heads, and demonstrates the ability to transpose a melody without losing the correspondence between harmonic functions and note head styles.
fragment = {
\key c \major
c2 d
e2 f
g2 a
b2 c
}
\score {
\new Staff {
\transpose c d
\relative c' {
\set shapeNoteStyles = #'#(do re mi fa
#f la ti)
\fragment
}
\break
\relative c' {
\set shapeNoteStyles = #'#(cross triangle fa #f
mensural xcircle diamond)
\fragment
}
}
\layout { ragged-right = ##t }
}
| [ << Editorial annotations ] | [Top][Contents][Index][ ? ] | [ Text >> ] | ||
| [ < ] | [ Up : Editorial annotations ] | [ Blanking staff lines using the \whiteout command > ] | ||
Avoiding collisions with chord fingerings
Fingerings and string numbers applied to individual notes will automatically avoid beams and stems, but this is not true by default for fingerings and string numbers applied to the individual notes of chords. The following example shows how this default behavior can be overridden.
\relative c' {
\set fingeringOrientations = #'(up)
\set stringNumberOrientations = #'(up)
\set strokeFingerOrientations = #'(up)
% Default behavior
r8
<f c'-5>8
<f c'\5>8
<f c'-\rightHandFinger #2 >8
% Corrected to avoid collisions
r8
\override Fingering #'add-stem-support = ##t
<f c'-5>8
\override StringNumber #'add-stem-support = ##t
<f c'\5>8
\override StrokeFinger #'add-stem-support = ##t
<f c'-\rightHandFinger #2 >8
}
| [ << Editorial annotations ] | [Top][Contents][Index][ ? ] | [ Text >> ] | ||
| [ < ] | [ Up : Editorial annotations ] | [ > ] | ||
Blanking staff lines using the \whiteout command
The \whiteout command underlays a markup with a white box.
Since staff lines are in a lower layer than most other grobs, this
white box will not overlap any other grob.
\layout { ragged-right = ##f }
\relative c' {
\override TextScript #'extra-offset = #'(2 . 4)
c2-\markup { \whiteout \pad-markup #0.5 "middle C" } c
}
| [ << Editorial annotations ] | [Top][Contents][Index][ ? ] | [ Text >> ] | ||
| [ < Blanking staff lines using the \whiteout command ] | [ Up : Editorial annotations ] | [ > ] | ||
Changing a single note’s size in a chord
Individual note heads in a chord can be modified with the
\tweak command inside a chord, by altering the font-size
property.
Inside the chord (within the brackets < >), before the note to
be altered, place the \tweak command, followed by
#'font-size and define the proper size like #-2 (a tiny
notehead).
\relative {
<\tweak #'font-size #+2 c e g c \tweak #'font-size #-2 e>1^\markup { A tiny e }_\markup { A big c }
}
| [ << Editorial annotations ] | [Top][Contents][Index][ ? ] | [ Text >> ] | ||
| [ < ] | [ Up : Editorial annotations ] | [ > ] | ||
Changing the appearance of a slur from solid to dotted or dashed
The appearance of slurs may be changed from solid to dotted or dashed.
\relative c' {
c4( d e c)
\slurDotted
c4( d e c)
\slurSolid
c4( d e c)
\slurDashed
c4( d e c)
\slurSolid
c4( d e c)
}
| [ << Editorial annotations ] | [Top][Contents][Index][ ? ] | [ Text >> ] | ||
| [ < ] | [ Up : Editorial annotations ] | [ Controlling the placement of chord fingerings > ] | ||
Coloring notes depending on their pitch
It is possible to color note heads depending on their pitch and/or their names: the function used in this example even makes it possible to distinguish enharmonics.
%Association list of pitches to colors.
#(define color-mapping
(list
(cons (ly:make-pitch 0 0 0) (x11-color 'red))
(cons (ly:make-pitch 0 0 1/2) (x11-color 'green))
(cons (ly:make-pitch 0 1 -1/2) (x11-color 'green))
(cons (ly:make-pitch 0 2 0) (x11-color 'red))
(cons (ly:make-pitch 0 2 1/2) (x11-color 'green))
(cons (ly:make-pitch 0 3 -1/2) (x11-color 'red))
(cons (ly:make-pitch 0 3 0) (x11-color 'green))
(cons (ly:make-pitch 0 4 1/2) (x11-color 'red))
(cons (ly:make-pitch 0 5 0) (x11-color 'green))
(cons (ly:make-pitch 0 5 -1/2) (x11-color 'red))
(cons (ly:make-pitch 0 6 1/2) (x11-color 'red))
(cons (ly:make-pitch 0 1 0) (x11-color 'blue))
(cons (ly:make-pitch 0 3 1/2) (x11-color 'blue))
(cons (ly:make-pitch 0 4 -1/2) (x11-color 'blue))
(cons (ly:make-pitch 0 5 1/2) (x11-color 'blue))
(cons (ly:make-pitch 0 6 -1/2) (x11-color 'blue))))
%Compare pitch and alteration (not octave).
#(define (pitch-equals? p1 p2)
(and
(= (ly:pitch-alteration p1) (ly:pitch-alteration p2))
(= (ly:pitch-notename p1) (ly:pitch-notename p2))))
#(define (pitch-to-color pitch)
(let ((color (assoc pitch color-mapping pitch-equals?)))
(if color
(cdr color))))
#(define (color-notehead grob)
(pitch-to-color
(ly:event-property (event-cause grob) 'pitch)))
\score {
\new Staff \relative c' {
\override NoteHead #'color = #color-notehead
c8 b d dis ees f g aes
}
}
| [ << Editorial annotations ] | [Top][Contents][Index][ ? ] | [ Text >> ] | ||
| [ < ] | [ Up : Editorial annotations ] | [ > ] | ||
Controlling the placement of chord fingerings
The placement of fingering numbers can be controlled precisely.
\relative c' {
\set fingeringOrientations = #'(left)
<c-1 e-3 a-5>4
\set fingeringOrientations = #'(down)
<c-1 e-3 a-5>4
\set fingeringOrientations = #'(down right up)
<c-1 e-3 a-5>4
\set fingeringOrientations = #'(up)
<c-1 e-3 a-5>4
\set fingeringOrientations = #'(left)
<c-1>2
\set fingeringOrientations = #'(down)
<e-3>2
}
| [ << Editorial annotations ] | [Top][Contents][Index][ ? ] | [ Text >> ] | ||
| [ < Controlling the placement of chord fingerings ] | [ Up : Editorial annotations ] | [ > ] | ||
Creating a delayed turn
Creating a delayed turn, where the lower note of the turn uses the
accidental, requires several overrides. The
outside-staff-priority property must be set to #f, as
otherwise this would take precedence over the avoid-slur
property. The value of halign is used to position the turn
horizontally.
\relative c'' {
\once \override TextScript #'avoid-slur = #'inside
\once \override TextScript #'outside-staff-priority = ##f
c2(^\markup \tiny \override #'(baseline-skip . 1) {
\halign #-4
\center-column {
\sharp
\musicglyph #"scripts.turn"
}
}
d4.) c8
}
| [ << Editorial annotations ] | [Top][Contents][Index][ ? ] | [ Text >> ] | ||
| [ < ] | [ Up : Editorial annotations ] | [ Default direction of stems on the center line of the staff > ] | ||
Creating blank staves
To create blank staves, generate empty measures then remove the
Bar_number_engraver from the Score context, and the
Time_signature_engraver, Clef_engraver and
Bar_engraver from the Staff context.
#(set-global-staff-size 20)
\score {
{
\repeat unfold 12 { s1 \break }
}
\layout {
indent = 0\in
\context {
\Staff
\remove "Time_signature_engraver"
\remove "Clef_engraver"
\remove "Bar_engraver"
}
\context {
\Score
\remove "Bar_number_engraver"
}
}
}
\paper {
#(set-paper-size "letter")
ragged-last-bottom = ##f
line-width = 7.5\in
left-margin = 0.5\in
bottom-margin = 0.25\in
top-margin = 0.25\in
}
| [ << Editorial annotations ] | [Top][Contents][Index][ ? ] | [ Text >> ] | ||
| [ < ] | [ Up : Editorial annotations ] | [ Drawing boxes around grobs > ] | ||
Default direction of stems on the center line of the staff
The default direction of stems on the center line of the staff is set
by the Stem property neutral-direction.
\relative c'' {
a4 b c b
\override Stem #'neutral-direction = #up
a4 b c b
\override Stem #'neutral-direction = #down
a4 b c b
}
Drawing boxes around grobs
The print-function can be overridden to draw a box around an
arbitrary grob.
\relative c'' {
\override TextScript #'stencil =
#(make-stencil-boxer 0.1 0.3 ly:text-interface::print)
c'4^"foo"
\override Stem #'stencil =
#(make-stencil-boxer 0.05 0.25 ly:stem::print)
\override Score.RehearsalMark #'stencil =
#(make-stencil-boxer 0.15 0.3 ly:text-interface::print)
b8
\revert Stem #'stencil
c4. c4
\mark "F"
c1
}
| [ << Editorial annotations ] | [Top][Contents][Index][ ? ] | [ Text >> ] | ||
| [ < Drawing boxes around grobs ] | [ Up : Editorial annotations ] | [ Embedding native PostScript in a \markup block > ] | ||
Drawing circles around various objects
The \circle markup command draws circles around various
objects, for example fingering indications. For other objects,
specific tweaks may be required: this example demonstrates two
strategies for rehearsal marks and measure numbers.
\relative c' {
c1
\set Score.markFormatter =
#(lambda (mark context)
(make-circle-markup (format-mark-numbers mark context)))
\mark \default
c2 d^\markup {
\override #'(thickness . 3) {
\circle \finger 2
}
}
\override Score.BarNumber #'break-visibility = #all-visible
\override Score.BarNumber #'stencil =
#(make-stencil-circler 0.1 0.25 ly:text-interface::print)
}
| [ << Editorial annotations ] | [Top][Contents][Index][ ? ] | [ Text >> ] | ||
| [ < Drawing circles around various objects ] | [ Up : Editorial annotations ] | [ Grid lines: changing their appearance > ] | ||
Embedding native PostScript in a \markup block
PostScript code can be directly inserted inside a \markup
block.
% PostScript is a registered trademark of Adobe Systems Inc.
\relative c'' {
a4-\markup { \postscript #"3 4 moveto 5 3 rlineto stroke" }
-\markup { \postscript #"[ 0 1 ] 0 setdash 3 5 moveto 5 -3 rlineto stroke " }
b4-\markup { \postscript #"3 4 moveto 0 0 1 2 8 4 20 3.5 rcurveto stroke" }
s2
a'1
}
Grid lines: changing their appearance
The appearance of grid lines can be changed by overriding some of their properties.
\score {
\new ChoirStaff <<
\new Staff {
\relative c'' {
\stemUp
c'4. d8 e8 f g4
}
}
\new Staff {
\relative c {
% this moves them up one staff space from the default position
\override Score.GridLine #'extra-offset = #'(0.0 . 1.0)
\stemDown
\clef bass
\once \override Score.GridLine #'thickness = #5.0
c4
\once \override Score.GridLine #'thickness = #1.0
g'4
\once \override Score.GridLine #'thickness = #3.0
f4
\once \override Score.GridLine #'thickness = #5.0
e4
}
}
>>
\layout {
\context {
\Staff
% set up grids
\consists "Grid_point_engraver"
% set the grid interval to one quarter note
gridInterval = #(ly:make-moment 1 4)
}
\context {
\Score
\consists "Grid_line_span_engraver"
% this moves them to the right half a staff space
\override NoteColumn #'X-offset = #-0.5
}
}
}
| [ << Editorial annotations ] | [Top][Contents][Index][ ? ] | [ Text >> ] | ||
| [ < Grid lines: changing their appearance ] | [ Up : Editorial annotations ] | [ > ] | ||
Grid lines: emphasizing rhythms and notes synchronization
Regular vertical lines can be drawn between staves to show note synchronization; however, in case of monophonic music, you may want to make the second stave invisible, and make the lines shorter like in this snippet.
\score {
\new ChoirStaff {
\relative c'' <<
\new Staff {
\time 12/8
\stemUp
c4. d8 e8 f g4 f8 e8. d16 c8
}
\new Staff {
% hides staff and notes so that only the grid lines are visible
\hideNotes
\override Staff.BarLine #'transparent = ##t
\override Staff.StaffSymbol #'line-count = #0
\override Staff.TimeSignature #'transparent = ##t
\override Staff.Clef #'transparent = ##t
% dummy notes to force regular note spacing
\once \override Score.GridLine #'thickness = #4.0
c8 c c
\once \override Score.GridLine #'thickness = #3.0
c8 c c
\once \override Score.GridLine #'thickness = #4.0
c8 c c
\once \override Score.GridLine #'thickness = #3.0
c8 c c
}
>>
}
\layout {
\context {
\Score
\consists "Grid_line_span_engraver"
% center grid lines horizontally below note heads
\override NoteColumn #'X-offset = #-0.5
}
\context {
\Staff
\consists "Grid_point_engraver"
gridInterval = #(ly:make-moment 1 8)
% set line length and positioning:
% two staff spaces above center line on hidden staff
% to four spaces below center line on visible staff
\override GridPoint #'Y-extent = #'(2 . -4)
}
ragged-right = ##t
}
}
Making some staff lines thicker than the others
For pedagogical purposes, a staff line can be thickened (e.g., the
middle line, or to emphasize the line of the G clef). This can be
achieved by adding extra lines very close to the line that should be
emphasized, using the line-positions property of the
StaffSymbol object.
{
\override Staff.StaffSymbol #'line-positions = #'(-4 -2 -0.2 0 0.2 2 4)
d'4 e' f' g'
}
| [ << Editorial annotations ] | [Top][Contents][Index][ ? ] | [ Text >> ] | ||
| [ < ] | [ Up : Editorial annotations ] | [ > ] | ||
Marking notes of spoken parts with a cross on the stem
This example shows how to put crosses on stems. Mark the beginning of
a spoken section with the \speakOn keyword, and end it with the
\speakOff keyword.
speakOn = {
\override Stem #'stencil = #(lambda (grob)
(let* ((x-parent (ly:grob-parent grob X))
(is-rest? (ly:grob? (ly:grob-object x-parent 'rest))))
(if is-rest?
empty-stencil
(ly:stencil-combine-at-edge
(ly:stem::print grob)
Y
(- (ly:grob-property grob 'direction))
(grob-interpret-markup grob
(markup #:hspace -1.025 #:fontsize -4
#:musicglyph "noteheads.s2cross"))
-2.3 0))))
}
speakOff = {
\revert Stem #'stencil
}
\score {
\new Staff {
\relative c'' {
a4 b a c
\speakOn
g4 f r g
b4 r d e
\speakOff
c4 a g f
}
}
}
Measure counter
This snippet provides a workaround for emitting measure counters using transparent percent repeats.
<<
\context Voice = "foo" {
\clef bass
c4 r g r
c4 r g r
c4 r g r
c4 r g r
}
\context Voice = "foo" {
\set countPercentRepeats = ##t
\override PercentRepeat #'transparent = ##t
\override PercentRepeatCounter #'staff-padding = #1
\repeat percent 4 { s1 }
}
>>
| [ << Editorial annotations ] | [Top][Contents][Index][ ? ] | [ Text >> ] | ||
| [ < ] | [ Up : Editorial annotations ] | [ > ] | ||
Positioning fingering indications precisely
Generally the options available for positioning the fingering of chords work well by default, but if one of the indications needs to positioned more precisely the following tweak may be used. This is particularly useful for correcting the positioning when intervals of a second are involved.
\relative c' {
\set fingeringOrientations = #'(left)
<c-1 d-2 a'-5>4
<c-1 d-\tweak #'extra-offset #'(0 . 0.7)-2 a'-5>4
\set fingeringOrientations = #'(down)
<c-1 d-2 a'-5>4
<c-1 d-\tweak #'extra-offset #'(-1.2 . 0)-2 a'-5>4
\set fingeringOrientations = #'(down right up)
<c-1 d-2 a'-5>4
<c-1 d-\tweak #'extra-offset #'(-1 . 1.2)-2 a'-5>4
\set fingeringOrientations = #'(up)
<c-1 d-2 a'-5>4
<c-1 d-\tweak #'extra-offset #'(-1.2 . 0)-2 a'-5>4
}
| [ << Editorial annotations ] | [Top][Contents][Index][ ? ] | [ Text >> ] | ||
| [ < Positioning fingering indications precisely ] | [ Up : Editorial annotations ] | [ Printing text from right to left > ] | ||
Positioning text markups inside slurs
Text markups need to have the outside-staff-priority property
set to false in order to be printed inside slurs.
\relative c'' {
\override TextScript #'avoid-slur = #'inside
\override TextScript #'outside-staff-priority = ##f
c2(^\markup { \halign #-10 \natural } d4.) c8
}
| [ << Editorial annotations ] | [Top][Contents][Index][ ? ] | [ Text >> ] | ||
| [ < ] | [ Up : Editorial annotations ] | [ Using PostScript to generate special note head shapes > ] | ||
Printing text from right to left
It is possible to print text from right to left in a markup object, as demonstrated here.
{
b1^\markup {
\line { i n g i r u m i m u s n o c t e }
}
f'_\markup {
\override #'(text-direction . -1)
\line { i n g i r u m i m u s n o c t e }
}
}
| [ << Editorial annotations ] | [Top][Contents][Index][ ? ] | [ Text >> ] | ||
| [ < Printing text from right to left ] | [ Up : Editorial annotations ] | [ Text > ] | ||
Using PostScript to generate special note head shapes
When a note head with a special shape cannot easily be generated with graphic markup, PostScript code can be used to generate the shape. This example shows how a parallelogram-shaped note head is generated.
parallelogram =
#(ly:make-stencil (list 'embedded-ps
"gsave
currentpoint translate
newpath
0 0.25 moveto
1.3125 0.75 lineto
1.3125 -0.25 lineto
0 -0.75 lineto
closepath
fill
grestore" )
(cons 0 1.3125)
(cons 0 0))
myNoteHeads = \override NoteHead #'stencil = \parallelogram
normalNoteHeads = \revert NoteHead #'stencil
\relative c'' {
\myNoteHeads
g4 d'
\normalNoteHeads
<f, \tweak #'stencil \parallelogram b e>4 d
}
| [ << Editorial annotations ] | [Top][Contents][Index][ ? ] | [ Text >> ] | ||
| [ < Printing text from right to left ] | [ Up : Editorial annotations ] | [ Text > ] | ||