1 \input texinfo @c -*-texinfo-*-
2 @setfilename features.info
3 @settitle GNU LilyPond Features
7 * add more un/badly documented features
9 * add to/merge with refman
17 * Glissando:: Glissando
18 * Manual beam settings:: Manual beam settings
19 * Slur attachments:: Slur attachments
20 * Text spanner:: Text spanner
21 * Engraver hacking:: Engraver hacking
22 * Part combiner:: Part combiner
23 * Markup text:: Markup text
24 * Output property:: Output property
25 * Embedded TeX:: Embedded TeX
26 * Embedded PostScript:: Embedded PostScript
30 @lilypond[fragment,relative,verbatim,center]
37 @lilypond[fragment,relative,verbatim,center]
38 \context Voice <c'\arpeggio e g c>
41 @lilypond[fragment,relative,verbatim,center]
43 \property PianoStaff.connectArpeggios = ##t
44 \context Staff \context Voice <c''\arpeggio e g c>
45 \context Staff=other \context Voice <c,\arpeggio e g>
54 @lilypond[fragment,relative,verbatim,center]
58 @subsection Follow Thread
59 @lilypond[fragment,relative,verbatim,center]
61 \property PianoStaff.followThread = ##t
62 \context Staff \context Voice {
67 \context Staff=two {\clef bass; \skip 1*2;}
71 @node Manual beam settings
72 @section Manual beam settings
77 @lilypond[fragment,relative,verbatim,center]
84 Control number of beams...
86 @lilypond[fragment,relative,verbatim,center]
89 [f8 r16 \property Voice.stemLeftBeamCount = #1 f g a]
93 @lilypond[fragment,relative,verbatim,center]
96 \property Voice.autoBeamSettings
97 \set #'(end * * * *) = #(make-moment 1 4)
101 \property Voice.stemRightBeamCount = #1 b
102 \property Voice.stemLeftBeamCount = #1 b
106 Don't extend to middle line esp. for grace
108 @lilypond[fragment,relative,verbatim,center]
110 \property Voice.Stem \set #'no-stem-extend = ##t
118 @lilypond[fragment,relative,verbatim,center]
119 \property Voice.Beam \set #'direction = #1
120 \property Voice.Beam \set #'height-hs = #0
124 beam start-y beam-height
127 @lilypond[fragment,relative,verbatim,center]
128 \property Voice.Beam \set #'y-position-hs = #4
129 \property Voice.Beam \set #'height-hs = #-4
136 @lilypond[fragment,relative,verbatim,center]
138 \property Voice.Beam \set #'default-neutral-direction = #-1
142 There are several ways to calculate the direction of a beam.
144 [Ross] states that the majority of the notes dictates the
145 direction (and not the mean of "center distance")
147 But is that because it really looks better, or because he wants
148 to provide some real simple hands-on rules?
150 We have our doubts, so we simply provide all sensible alternatives:
154 number count of up or down notes
156 mean centre distance of all notes
158 mean centre distance weighted per note
161 You can spot the difference of these settings quite easily from these simple examples:
163 @lilypond[fragment,relative,verbatim,center]
165 \property Voice.Beam \set #'dir-function = #beam-dir-mean
167 \property Voice.Beam \set #'dir-function = #beam-dir-median
171 @lilypond[fragment,relative,verbatim,center]
174 \property Voice.Beam \set #'dir-function = #beam-dir-mean
176 \property Voice.Beam \set #'dir-function = #beam-dir-median
181 @node Slur attachments
182 @section Slur attachments
184 Override attachments...
185 @lilypond[fragment,relative,verbatim,center]
186 \property Voice.Slur \set #'direction = #1
187 \property Voice.Stem \set #'length = #5.5
190 \property Voice.Slur \set #'attachment = #'(stem . stem)
198 @c Ugh, ugh @multitable is broken in texinfo-4.0
200 @c We'll have to postpone this before/after representation until
201 @c jcn3 is rolled into texinfo...
203 @multitable @columnfractions .50 .50
206 @lilypond[fragment,relative,verbatim,center]
208 \set #'direction = #1
213 @lilypond[fragment,relative,verbatim,center]
215 \set #'direction = #1
219 \set #'attachment = #'(stem . stem)
227 @lilypond[fragment,relative,verbatim,center]
228 \property Voice.Slur \set #'direction = #1
229 \property Voice.Slur \set #'attachment = #'(head . head)
230 g''16()g()g()g()d'()d()d()d
234 Steep slur correct...
235 @lilypond[fragment,relative,verbatim,center]
236 \property Voice.Stem \set #'direction = #1
237 \property Voice.Slur \set #'direction = #1
239 \property Voice.Slur \set #'attachment = #'(stem . stem)
243 @c high slurs, eg from gnossienes
247 @section Text spanner
249 Have crescendo set a text spanner iso hairpin
250 @lilypond[fragment,relative,verbatim,center]
252 \property Voice.crescendoText = "cresc."
253 \property Voice.crescendoSpanner = #'dashed-line
260 @lilypond[fragment,relative,verbatim,center]
262 \property Voice.TextSpanner \set #'type = #'dotted-line
263 \property Voice.TextSpanner \set #'edge-height = #'(0 . 1.5)
264 \property Voice.TextSpanner \set #'edge-text = #'("8va " . "")
265 \property Staff.centralCPosition = #-13
266 a\spanrequest \start "text" b c a \spanrequest \stop "text"
271 @node Engraver hacking
272 @section Engraver hacking
274 No time signature, no barlines...
275 @lilypond[verbatim,center]
277 \notes \relative c'' {
286 \remove "Time_signature_engraver";
292 No staff, no clef, squash pitches
293 @lilypond[verbatim,center]
295 \notes { c4 c4 c8 c8 }
300 \remove Staff_symbol_engraver;
301 \consists Pitch_squash_engraver;
302 \remove Clef_engraver;
310 @section Part combiner
312 @lilypond[verbatim,center]
314 \context Staff = flauti <
316 \context Voice=one \partcombine Voice
317 \context Thread=one \notes\relative c'' {
318 c4 d e f | b,4 d c d | r2 e4 f | c4 d e f |
319 c4 r e f | c4 r e f | c4 r a r | a a r a |
320 a2 \property Voice.soloADue = ##f a |
322 \context Thread=two \notes\relative c'' {
323 g4 b d f | r2 c4 d | a c c d | a4. b8 c4 d
324 c r e r | r2 s2 | a,4 r a r | a r r a |
325 a2 \property Voice.soloADue = ##f a |
329 linewidth = 80 * \staffspace;
332 \consists Rest_engraver;
336 \remove Rest_engraver;
348 @c markup text hacking
352 @lilypond[verbatim,center]
353 #(define note '(rows (music "noteheads-2" ((kern . -0.1) "flags-stem"))))
354 #(define eight-note `(rows ,note ((kern . -0.1) (music ((raise . 3.5) "flags-u3")))))
355 #(define dotted-eight-note `(rows ,eight-note (music "dots-dot")))
358 \notes\relative c'' {
359 a1^#`(rows ,dotted-eight-note " = 64")
365 TextScript \override #'font-shape = #'upright
372 @node Output property
373 @section Output property
375 @lilypond[fragment,relative,verbatim,center]
376 \outputproperty #(make-type-checker 'note-head-interface)
377 #'extra-offset = #'(2 . 3)
381 Don't move the finger 2, only text "m.d." ...
382 @lilypond[verbatim,center]
383 #(define (make-text-checker text)
384 (lambda (grob) (equal? text (ly-get-elt-property grob 'text))))
387 \notes\relative c''' {
388 \property Voice.Stem \set #'direction = #1
389 \outputproperty #(make-text-checker "m.d.")
390 #'extra-offset = #'(-3.5 . -4.5)
393 \paper { linewidth = -1.; }
397 @c subsection no clefs
411 @section Embedded TeX
412 @lilypond[fragment,relative,verbatim,center]
413 a''^"3 $\\times$ \\`a deux"
416 @node Embedded PostScript
417 @section Embedded PostScript
419 Arbitrary lines and curves not supported...
420 [TODO:] Make a direct postscript command?
422 @lilypond[verbatim,center]
424 \notes \relative c'' {
425 a-#"\\embeddedps{3 4 moveto 5 3 rlineto stroke}"
426 -#"\\embeddedps{ [ 0 1 ] 0 setdash 3 5 moveto 5 -3 rlineto stroke}"
427 b-#"\\embeddedps{3 4 moveto 0 0 1 2 8 4 20 3.5 rcurveto stroke}"
432 linewidth = 70.0*\staffspace;