1.3.121.jcn2
============
* Renamed last instances of musical_*pitch to pitch.
* Bugfix: actually read pitch value in \pitch #(make-pitch ...)
* Bugfix(?): always allow explicit duration entry.
* Fixed .po charsets for upcoming msgfmt release (Bruno Haible).
* Some doco updates and fixes.
24 files changed:
+1.3.121.jcn2
+============
+
+* Renamed last instances of musical_*pitch to pitch.
+
+* Bugfix: actually read pitch value in \pitch #(make-pitch ...)
+
+* Bugfix(?): always allow explicit duration entry.
+
+* Fixed .po charsets for upcoming msgfmt release (Bruno Haible).
+
+* Some doco updates and fixes.
+
1.3.121.jcn1
============
1.3.121.jcn1
============
-@node Reporting Bugs, , , Top
-@section Bug reports
+@node Reporting Bugs
+@chapter Bug reports
LilyPond development moves quickly, so if you have a problem, it is
wise to check if it has been fixed in a newer release. If you think
LilyPond development moves quickly, so if you have a problem, it is
wise to check if it has been fixed in a newer release. If you think
-@node convert-ly, , ,Top
@chapter convert-ly
@code{convert-ly} sequentially applies different
lilypond-conversions to upgrade a Lilypond input file. It uses
@chapter convert-ly
@code{convert-ly} sequentially applies different
lilypond-conversions to upgrade a Lilypond input file. It uses
-@node Internals, , , top
+@node Internals
+@chapter Internals
@menu
* Conversion stages:: Lilypond is a multi-pass program.
@menu
* Conversion stages:: Lilypond is a multi-pass program.
* Molecules:: Molecules are stand-alone descriptions of output
@end menu
* Molecules:: Molecules are stand-alone descriptions of output
@end menu
-
-@node Conversion stages, , , Internals
+@node Conversion stages
+@section Conversion stages
When translating the input to notation, there are number of distinct
phases. We list them here:
When translating the input to notation, there are number of distinct
phases. We list them here:
-@node Grobs, , , Internals
@section Grobs
This section is about Grobs (short for Graphical Objects), which are
@section Grobs
This section is about Grobs (short for Graphical Objects), which are
* Pointer substitution::
@end menu
* Pointer substitution::
@end menu
-@node What is a grob?, , , Grobs
+@node What is a grob?
+@subsection What is a grob?
In music notation, lots of symbols are related in some way. You can
think of music notation as a graph where nodes are formed by the
In music notation, lots of symbols are related in some way. You can
think of music notation as a graph where nodes are formed by the
description in the form of Molecules (@ref{Molecules}) is extracted from
the network. These are then dumped into the output file
description in the form of Molecules (@ref{Molecules}) is extracted from
the network. These are then dumped into the output file
-@node Callbacks, , , Grobs
+@node Callbacks
+@subsection Callbacks
Offsets of grobs are relative to a parent reference point. Most
positions are not known when an object is created, so these are
Offsets of grobs are relative to a parent reference point. Most
positions are not known when an object is created, so these are
hard-codes the extent in that coordinate.
hard-codes the extent in that coordinate.
-@node Setting grob properties, , , Grobs
+@node Setting grob properties
+@subsection Setting grob properties
Grob properties are stored as GUILE association lists, with symbols as
keys. From C++, element properties can be accessed using the functions
Grob properties are stored as GUILE association lists, with symbols as
keys. From C++, element properties can be accessed using the functions
space to the left. This mechanism is rather clumsy to use, but it allows
you tweak any setting of any grob.
space to the left. This mechanism is rather clumsy to use, but it allows
you tweak any setting of any grob.
-@node Items and Spanners, , , Grobs
+@node Items and Spanners
@unnumberedsubsec Items and Spanners
Grobs can also be distinguished in their role in the horizontal spacing.
@unnumberedsubsec Items and Spanners
Grobs can also be distinguished in their role in the horizontal spacing.
direction (-1, 0 or 1) and returns a cons of booleans, signifying wether
this grob should be transparent and invisible.
direction (-1, 0 or 1) and returns a cons of booleans, signifying wether
this grob should be transparent and invisible.
-@node Pointer substitution, , , Grobs
+@node Pointer substitution
@unnumberedsubsec Pointer substitution
@unnumberedsubsec Pointer substitution
the grob is made. A substitution process redirects all grob-reference
so that spanner grob will only reference other grobs in the same line.
the grob is made. A substitution process redirects all grob-reference
so that spanner grob will only reference other grobs in the same line.
-@node Engraver, , , Internals
+@node Engraver
+@section Engraver
-@node Music_iterator, , , Internals
+@node Music_iterator
+@section Music_iterator
-@node Music, , , Internals
+@node Music
+@section Music
-@node Molecules, , , Internals
+@node Molecules
+@section Molecules
The objective of any typesetting system is to put ink on paper in the
right places. For LilyPond, this final stage is left to the TeX and the
The objective of any typesetting system is to put ink on paper in the
right places. For LilyPond, this final stage is left to the TeX and the
-@node Development, , , top
@chapter Development
@menu
@chapter Development
@menu
* Localisation::
@end menu
* Localisation::
@end menu
-@node CodingStyle, , , Development
@section CodingStyle - standards while programming for GNU LilyPond
As a general rule, you should always try to continue computations, even
@section CodingStyle - standards while programming for GNU LilyPond
As a general rule, you should always try to continue computations, even
-@node Making patches, , , Development
-
+@node Making patches
+@section Making patches
@unnumberedsec Track and distribute your code changes
@unnumberedsec Track and distribute your code changes
-@node Localisation, , , Development
-
-@chapter Localisation - User messages in LilyPond
-
-@section Introduction
+@node Localisation
+@section Localisation - User messages in LilyPond
This document provides some guidelines for uniformising user messages.
In the absence of other standards, we'll be using these rules when coding
This document provides some guidelines for uniformising user messages.
In the absence of other standards, we'll be using these rules when coding
Not-preferred messages are marked with @code{+}. By convention,
agrammatical examples are marked with @code{*}.
Not-preferred messages are marked with @code{+}. By convention,
agrammatical examples are marked with @code{*}.
+@macro keyindex {word}
+@cindex \word\
+
+@end macro
+
+@macro indexcode {word}
+@cindex \word\
+
+@end macro
+
* Output property:: Output property
* Embedded TeX:: Embedded TeX
* Embedded PostScript:: Embedded PostScript
* Output property:: Output property
* Embedded TeX:: Embedded TeX
* Embedded PostScript:: Embedded PostScript
+* Index:: Checking Feature index
-@ignore
-Testin'' a b c...
-@lilypond[fragment,relative,verbatim,center]
- a'' b c
-@end lilypond
-@end ignore
-
@node Arpeggio
@section Arpeggio
@node Arpeggio
@section Arpeggio
+@cindex argepeggio
+
+@cindex broken arpeggio
+@c @cindex ``doorlopend'' argpeggio
+
+You can specify an arpeggio sign on a chord by issuing an
+@c duh
+@c @code{\arpeggio}@indexcode{\arpeggio} request:
+@code{\arpeggio} request:
+@cindex @code{\arpeggio}
-@lilypond[fragment,relative,verbatim,center]
+@quotation
+@lilypond[fragment,relative,verbatim]
\context Voice <c'\arpeggio e g c>
@end lilypond
\context Voice <c'\arpeggio e g c>
@end lilypond
+@end quotation
+
+Typesetting of simultanious chords with arpeggios can be controlled with
+the property @code{PianoStaff.connectArpeggios} @footnote{ FIXME:
+connectArpeggios. Can't find the English terms for two kinds of
+arpeggio (Dutch: gebroken arpeggio vs doorlopend arpeggio).} By
+default, LilyPond prints broken arpeggios; when set to true, one
+extended arpeggio sign is printed.
-@lilypond[fragment,relative,verbatim,center]
+@quotation
+@lilypond[fragment,relative,verbatim]
\context PianoStaff <
\property PianoStaff.connectArpeggios = ##t
\context Staff \context Voice <c''\arpeggio e g c>
\context Staff=other \context Voice <c,\arpeggio e g>
>
@end lilypond
\context PianoStaff <
\property PianoStaff.connectArpeggios = ##t
\context Staff \context Voice <c''\arpeggio e g c>
\context Staff=other \context Voice <c,\arpeggio e g>
>
@end lilypond
@node Glissando
@section Glissando
@node Glissando
@section Glissando
+@cindex glissando
+
+A glissando line can be requested by issuing a
+@c duh
+@c @code{\glissando}@indexcode{\glissando} request:
+@code{\glissando} request:
+@cindex @code{\glissando}
-@lilypond[fragment,relative,verbatim,center]
+@quotation
+@lilypond[fragment,relative,verbatim]
c'' \glissando c'
@end lilypond
c'' \glissando c'
@end lilypond
+@end quotation
+
+Printing of the additional text @code{"gliss."} is currently not
+supported.
+
@subsection Follow Thread
@subsection Follow Thread
-@lilypond[fragment,relative,verbatim,center]
+@cindex follow thread
+@cindex staff switching
+@cindex cross staff
+
+@c Documented here because it looks like a glissando.
+A glissando-like line can be printed to connect notes whenever a thread
+switches to another staff. This is enabled if the property
+@code{PianoStaff.followThread}@indexcode{followThread} is set to true:
+
+@quotation
+@lilypond[fragment,relative,verbatim]
\context PianoStaff <
\property PianoStaff.followThread = ##t
\context Staff \context Voice {
\context PianoStaff <
\property PianoStaff.followThread = ##t
\context Staff \context Voice {
\context Staff=two {\clef bass; \skip 1*2;}
>
@end lilypond
\context Staff=two {\clef bass; \skip 1*2;}
>
@end lilypond
@node Manual beam settings
@section Manual beam settings
@node Manual beam settings
@section Manual beam settings
+@cindex beams
+@cindex beam settings
+@cindex manual beams
+In some cases it may be necessary to override LilyPond's automatic
+beaming algorithm. For example, the auto beamer will not beam over
+rests, so if you want that, specify the begin and end point manually
+using @code{[}@indexcode{[} and @code{]}@indexcode{]}:
-Beams over rests...
-
-@lilypond[fragment,relative,verbatim,center]
+@quotation
+@lilypond[fragment,relative,verbatim]
\context Staff {
r4 [r8 g'' a]
}
@end lilypond
\context Staff {
r4 [r8 g'' a]
}
@end lilypond
+Similarly, for beams over bar lines:
-Control number of beams...
+@quotation
+@lilypond[fragment,relative,verbatim]
+ \context Staff {
+ a''8 r a2 r8 [a a]
+ }
+@end lilypond
+@end quotation
+
+If you have specific wishes for the number of beams, you can fully
+control the number of beams through the properties
+@code{Voice.stemLeftBeamCount}@indexcode{stemLeftBeamCount};
-@lilypond[fragment,relative,verbatim,center]
+@quotation
+@lilypond[fragment,relative,verbatim]
\context Staff {
[f'8 r16 f g a]
[f8 r16 \property Voice.stemLeftBeamCount = #1 f g a]
}
@end lilypond
\context Staff {
[f'8 r16 f g a]
[f8 r16 \property Voice.stemLeftBeamCount = #1 f g a]
}
@end lilypond
-@lilypond[fragment,relative,verbatim,center]
+and @code{Voice.stemRightBeamCount}@indexcode{stemRightBeamCount}:
+
+@quotation
+@lilypond[fragment,relative,verbatim]
f'32 g a b b a g f
\property Voice.autoBeamSettings
f'32 g a b b a g f
\property Voice.autoBeamSettings
\property Voice.stemLeftBeamCount = #1 b
a g f
@end lilypond
\property Voice.stemLeftBeamCount = #1 b
a g f
@end lilypond
-Don't extend to middle line esp. for grace
+Conventionally, stems extend to the middle staff line, and thus so do
+beams. The extending of the stems can be controlled through
+@code{Voice.Stem}'s grob-property
+@code{no-stem-extend}@indexcode{no-stem-extend}:
-@lilypond[fragment,relative,verbatim,center]
+@quotation
+@lilypond[fragment,relative,verbatim]
\grace a'8 a4
\property Voice.Stem \set #'no-stem-extend = ##t
\grace a'8 a4
\property Voice.Stem \set #'no-stem-extend = ##t
+The beam symbol can be tweaked through @code{Voice.Beam}'s
+grob-properties @code{height-hs} and @code{y-position-hs}.
-@lilypond[fragment,relative,verbatim,center]
+Set @code{height-hs} to zero, to get horizontal beams:
+
+@quotation
+@lilypond[fragment,relative,verbatim]
\property Voice.Beam \set #'direction = #1
\property Voice.Beam \set #'height-hs = #0
[a''8 e' d c]
@end lilypond
\property Voice.Beam \set #'direction = #1
\property Voice.Beam \set #'height-hs = #0
[a''8 e' d c]
@end lilypond
-beam start-y beam-height
+Both are in half spaces. Here's how you'd specify a weird looking beam
+that instead of beaing horizontal, falls two staff spaces (ie, four half
+spaces):
-Weird beam
-@lilypond[fragment,relative,verbatim,center]
+@quotation
+@lilypond[fragment,relative,verbatim]
\property Voice.Beam \set #'y-position-hs = #4
\property Voice.Beam \set #'height-hs = #-4
[c'8 c]
@end lilypond
\property Voice.Beam \set #'y-position-hs = #4
\property Voice.Beam \set #'height-hs = #-4
[c'8 c]
@end lilypond
+The direction of a perfectly centred beams can be
+controlled through @code{Voice.Beam}'s grob-property
+@code{default-neutral-direction}@indexcode{default-neutral-direction}
-Like stem...
-
-@lilypond[fragment,relative,verbatim,center]
+@quotation
+@lilypond[fragment,relative,verbatim]
[b''8 b]
\property Voice.Beam \set #'default-neutral-direction = #-1
[b b]
@end lilypond
[b''8 b]
\property Voice.Beam \set #'default-neutral-direction = #-1
[b b]
@end lilypond
There are several ways to calculate the direction of a beam.
There are several ways to calculate the direction of a beam.
mean centre distance weighted per note
@end table
mean centre distance weighted per note
@end table
-You can spot the difference of these settings quite easily from these simple examples:
+You can spot the differences of these settings from these simple
+examples:
-@lilypond[fragment,relative,verbatim,center]
+@quotation
+@lilypond[fragment,relative,verbatim]
[d''8 a]
\property Voice.Beam \set #'dir-function = #beam-dir-mean
[d a]
\property Voice.Beam \set #'dir-function = #beam-dir-median
[d a]
@end lilypond
[d''8 a]
\property Voice.Beam \set #'dir-function = #beam-dir-mean
[d a]
\property Voice.Beam \set #'dir-function = #beam-dir-median
[d a]
@end lilypond
-
-@lilypond[fragment,relative,verbatim,center]
+@end quotation
+
+@quotation
+@lilypond[fragment,relative,verbatim]
\time 3/8;
[d''8 a a]
\property Voice.Beam \set #'dir-function = #beam-dir-mean
\time 3/8;
[d''8 a a]
\property Voice.Beam \set #'dir-function = #beam-dir-mean
\property Voice.Beam \set #'dir-function = #beam-dir-median
[d a a]
@end lilypond
\property Voice.Beam \set #'dir-function = #beam-dir-median
[d a a]
@end lilypond
+@end quotation
+
+These beam direction functions are defined in @file{scm/beam.scm}. If
+your favourite algorithm isn't one of these, you can hook up your own.
+
@node Slur attachments
@section Slur attachments
@node Slur attachments
@section Slur attachments
-Override attachments...
-@lilypond[fragment,relative,verbatim,center]
+The ending of a slur should whenever possible be attached to a note
+head. Only in some instances where beams are involved, LilyPond may
+attach a slur to a stem end. In some cases, you may want to override
+LilyPond's decision, eg to attach the slur to the stem end. This can be
+done through @code{Voice.Slur}'s grob-property @code{attachment}:
+@c FIXME: make @ref{} to backend doco
+
+@quotation
+@lilypond[fragment,relative,verbatim]
\property Voice.Slur \set #'direction = #1
\property Voice.Stem \set #'length = #5.5
g''8(g)g4
\property Voice.Slur \set #'direction = #1
\property Voice.Stem \set #'length = #5.5
g''8(g)g4
g8(g)g4
g4(g8)g
@end lilypond
g8(g)g4
g4(g8)g
@end lilypond
-
-Test Before, after
-
-@c Ugh, ugh @multitable is broken in texinfo-4.0
-@c Fixed in 4.0.jcn3
-@c We'll have to postpone this before/after representation until
-@c jcn3 is rolled into texinfo...
+Trying Before | After example...
+@c Fix rolled into 4.0a prerelease
@multitable @columnfractions .40 .40
@item
@noindent
@multitable @columnfractions .40 .40
@item
@noindent
-@lilypond[fragment,relative,verbatim,center]
+@lilypond[fragment,relative,verbatim]
\property Voice.Slur
\set #'direction = #1
g''8(g)g4
g4(g8)g
@end lilypond
@tab
\property Voice.Slur
\set #'direction = #1
g''8(g)g4
g4(g8)g
@end lilypond
@tab
-@lilypond[fragment,relative,verbatim,center]
+@lilypond[fragment,relative,verbatim]
\property Voice.Slur
\set #'direction = #1
\property Voice.Stem
\property Voice.Slur
\set #'direction = #1
\property Voice.Stem
@end lilypond
@end multitable
@end lilypond
@end multitable
-
-Ophee slurs...
-@lilypond[fragment,relative,verbatim,center]
+
+Similarly, slurs can be attached to note heads even when beams are
+involved (aka Ophee slurs):
+
+@quotation
+@lilypond[fragment,relative,verbatim]
\property Voice.Slur \set #'direction = #1
\property Voice.Slur \set #'attachment = #'(head . head)
g''16()g()g()g()d'()d()d()d
@end lilypond
\property Voice.Slur \set #'direction = #1
\property Voice.Slur \set #'attachment = #'(head . head)
g''16()g()g()g()d'()d()d()d
@end lilypond
+If a slur would strike through a stem or beam, LilyPond will move the
+slur away vertically (upward or downward). In some cases, this may
+cause ugly slurs that you may want to correct:
-Steep slur correct...
-@lilypond[fragment,relative,verbatim,center]
+@quotation
+@lilypond[fragment,relative,verbatim]
\property Voice.Stem \set #'direction = #1
\property Voice.Slur \set #'direction = #1
d'32( d'4 )d8..
\property Voice.Slur \set #'attachment = #'(stem . stem)
d,32( d'4 )d8..
@end lilypond
\property Voice.Stem \set #'direction = #1
\property Voice.Slur \set #'direction = #1
d'32( d'4 )d8..
\property Voice.Slur \set #'attachment = #'(stem . stem)
d,32( d'4 )d8..
@end lilypond
-Ugly slurs...
-@lilypond[verbatim,center]
+LilyPond will increase the curvature of a slur trying to stay free of
+note heads and stems. However, if the curvature would increase too much,
+the slur will be reverted to its default shape. This decision is based
+on @code{Voice.Slur}'s grob-property @code{beautiful} value. In some
+cases, you may find ugly slurs beautiful, and tell LilyPond so by
+increasing the @code{beautiful} value:
+
+@quotation
+@lilypond[verbatim]
\score {
\notes \context PianoStaff <
\time 6/4;
\score {
\notes \context PianoStaff <
\time 6/4;
@node Text spanner
@section Text spanner
Have crescendo set a text spanner iso hairpin
@node Text spanner
@section Text spanner
Have crescendo set a text spanner iso hairpin
-@lilypond[fragment,relative,verbatim,center]
+@lilypond[fragment,relative,verbatim]
\context Voice {
\property Voice.crescendoText = "cresc."
\property Voice.crescendoSpanner = #'dashed-line
\context Voice {
\property Voice.crescendoText = "cresc."
\property Voice.crescendoSpanner = #'dashed-line
-@lilypond[fragment,relative,verbatim,center]
+@lilypond[fragment,relative,verbatim]
a'''' b c a
\property Voice.TextSpanner \set #'type = #'dotted-line
\property Voice.TextSpanner \set #'edge-height = #'(0 . 1.5)
a'''' b c a
\property Voice.TextSpanner \set #'type = #'dotted-line
\property Voice.TextSpanner \set #'edge-height = #'(0 . 1.5)
@section Engraver hacking
No time signature, no barlines...
@section Engraver hacking
No time signature, no barlines...
-@lilypond[verbatim,center]
\score {
\notes \relative c'' {
a b c d
\score {
\notes \relative c'' {
a b c d
@end lilypond
No staff, no clef, squash pitches
@end lilypond
No staff, no clef, squash pitches
-@lilypond[verbatim,center]
\score {
\notes { c4 c4 c8 c8 }
\paper {
\score {
\notes { c4 c4 c8 c8 }
\paper {
@node Part combiner
@section Part combiner
@node Part combiner
@section Part combiner
-@lilypond[verbatim,center]
\score{
\context Staff = flauti <
\time 4/4;
\score{
\context Staff = flauti <
\time 4/4;
-@lilypond[verbatim,center]
#(define note '(rows (music "noteheads-2" ((kern . -0.1) "flags-stem"))))
#(define eight-note `(rows ,note ((kern . -0.1) (music ((raise . 3.5) "flags-u3")))))
#(define dotted-eight-note `(rows ,eight-note (music "dots-dot")))
#(define note '(rows (music "noteheads-2" ((kern . -0.1) "flags-stem"))))
#(define eight-note `(rows ,note ((kern . -0.1) (music ((raise . 3.5) "flags-u3")))))
#(define dotted-eight-note `(rows ,eight-note (music "dots-dot")))
@node Output property
@section Output property
@node Output property
@section Output property
-@lilypond[fragment,relative,verbatim,center]
+@lilypond[fragment,relative,verbatim]
\outputproperty #(make-type-checker 'note-head-interface)
#'extra-offset = #'(2 . 3)
c''2 c
@end lilypond
Don't move the finger 2, only text "m.d." ...
\outputproperty #(make-type-checker 'note-head-interface)
#'extra-offset = #'(2 . 3)
c''2 c
@end lilypond
Don't move the finger 2, only text "m.d." ...
-@lilypond[verbatim,center]
#(define (make-text-checker text)
(lambda (grob) (equal? text (ly-get-elt-property grob 'text))))
#(define (make-text-checker text)
(lambda (grob) (equal? text (ly-get-elt-property grob 'text))))
@node Apply hacking
@section Apply hacking
@node Apply hacking
@section Apply hacking
-@lilypond[verbatim,center]
music = \notes { c'4 d'4( e'4 f'4 }
#(define (reverse-music music)
music = \notes { c'4 d'4( e'4 f'4 }
#(define (reverse-music music)
-@lilypond[verbatim,center]
#(define (unhair-pitch p)
(let* ((o (pitch-octave p))
(a (pitch-alteration p))
#(define (unhair-pitch p)
(let* ((o (pitch-octave p))
(a (pitch-alteration p))
@node Embedded TeX
@section Embedded TeX
@node Embedded TeX
@section Embedded TeX
-@lilypond[fragment,relative,verbatim,center]
+@lilypond[fragment,relative,verbatim]
a''^"3 $\\times$ \\`a deux"
@end lilypond
a''^"3 $\\times$ \\`a deux"
@end lilypond
[TODO:] Make a direct postscript command?
[TODO:] Make a direct postscript command?
-@lilypond[verbatim,center]
\score {
\notes \relative c'' {
a-#"\\embeddedps{3 4 moveto 5 3 rlineto stroke}"
\score {
\notes \relative c'' {
a-#"\\embeddedps{3 4 moveto 5 3 rlineto stroke}"
+
+@node Index
+@section Checking Feature index
+
+@printindex cp
+
+
-
-@node Invoking LilyPond, , , Top
@chapter Invoking LilyPond
@cindex Invoking LilyPond
@chapter Invoking LilyPond
@cindex Invoking LilyPond
-@node Top, , , (dir)
-@chapter GNU LilyPond --- The music typesetter
+@ifnottex
+@node Top
+@top
+@end ifnottex
+@chapter GNU LilyPond --- The music typesetter
LilyPond produces sheet music from input files. This document describes
how to use LilyPond.
LilyPond produces sheet music from input files. This document describes
how to use LilyPond.
* Invoking LilyPond:: Operation.
* Reporting Bugs:: Where to report bugs.
* Reference Manual:: Reference Manual.
* Invoking LilyPond:: Operation.
* Reporting Bugs:: Where to report bugs.
* Reference Manual:: Reference Manual.
-@c Move to Reference Manual?
* Internals:(lilypond-internals). Auto generated detailed documentation.
* Internals:(lilypond-internals). Auto generated detailed documentation.
-* convert-ly:: Upgrading input files.
-* Internals::
* Development:: Some hints on developing for LilyPond.
* Development:: Some hints on developing for LilyPond.
+* convert-ly:: Upgrading input files.
* Index:: Unified index.
@end menu
* Index:: Unified index.
@end menu
@include development.itexi
@include development.itexi
@unnumbered Index
@printindex cp
@unnumbered Index
@printindex cp
-@node More information, , , Top
-@node Properties, , , Reference Manual
+@node Properties
+@section Properties
Properties are Scheme values. Most of them are in the generated documentation, but some MIDI properties are not. Here is their documentation
Properties are Scheme values. Most of them are in the generated documentation, but some MIDI properties are not. Here is their documentation
@c - Add some words about Guile. /MB
@c - Fix indexing (keyindex) so it doesn't add line breaks /MB
@c - Add some words about Guile. /MB
@c - Fix indexing (keyindex) so it doesn't add line breaks /MB
-@node Reference Manual, , , Top
+@c ugh: because of @include, we need to fill in these nodes
+@node Reference Manual
@chapter Reference Manual
@menu
@chapter Reference Manual
@menu
-@node Overview, , , Reference Manual
@section Overview
This document@footnote{This document has been revised for LilyPond 1.2.}
@section Overview
This document@footnote{This document has been revised for LilyPond 1.2.}
-@node Top level, , , Reference Manual
@section Top level
@cindex top level
@section Top level
@cindex top level
It is customary to put the @code{\header} at the top of the file.
It is customary to put the @code{\header} at the top of the file.
-
-@node Pitch names, , , Reference Manual
+@node Pitch names
+@section Pitch names
Note names and chord modifiers can be customised for nationalities.
languages and conventions. The syntax is as follows.
Note names and chord modifiers can be customised for nationalities.
languages and conventions. The syntax is as follows.
-@node Lexical conventions, , , Reference Manual
+@node Lexical conventions
@section Lexical conventions
@cindex lexical conventions
@section Lexical conventions
@cindex lexical conventions
@code{convert-ly}, a tool that automatically upgrades input files.
@code{convert-ly}, a tool that automatically upgrades input files.
-
-@cindex other languages
-
-@node Other languages, , , Reference Manual
+@node Other languages
+@section Other languages
+@cindex Other languages
Note name definitions have been provided in various languages.
Simply include the language specific init file. For example:
Note name definitions have been provided in various languages.
Simply include the language specific init file. For example:
Pitch names can be redefined using the @code{\pitchnames} command, see
@ref{Pitch names}.
Pitch names can be redefined using the @code{\pitchnames} command, see
@ref{Pitch names}.
+@node Lexical modes
+@section Lexical modes
+@cindex Lexical modes
-@node Lexical modes, , , Reference Manual
To simplify entering notes, lyrics, and chords, @emph{Lilypond} has three
special input modes on top of the default mode. In each mode, words
To simplify entering notes, lyrics, and chords, @emph{Lilypond} has three
special input modes on top of the default mode. In each mode, words
[todo: include short table showign differences]
[todo: include short table showign differences]
-@node Types, , , Reference Manual
@section Types
@cindex Identifiers
@section Types
@cindex Identifiers
-@node Music expressions, , , Reference Manual
@section Music expressions
@cindex music expressions
@section Music expressions
@cindex music expressions
-@node Atomic music expressions, , , Reference Manual
+@node Atomic music expressions
@section Atomic music expressions
@section Atomic music expressions
-@node Note specification, , , Reference Manual
-
-@cindex note specification
+@node Note specification
+@section Note specification
+@cindex Note specification
@code{Mark_engraver}@indexcode{Mark_engraver} to the Score context for
this to work.
@code{Mark_engraver}@indexcode{Mark_engraver} to the Score context for
this to work.
-@node barlines, , , Reference Manual
+@node barlines
+@section barlines
@example
\bar@keyindex{bar} @var{bartype};
@example
\bar@keyindex{bar} @var{bartype};
this has the same effect as the space rest `@code{s}'.
this has the same effect as the space rest `@code{s}'.
+@node Manual beams
+@section Manual beams
-@node Manual beams, , , Reference Manual
-
A beam is specified by surrounding the beamed notes with brackets
`@code{[}@indexcode{[}' and `@code{]}@indexcode{]}'.
A beam is specified by surrounding the beamed notes with brackets
`@code{[}@indexcode{[}' and `@code{]}@indexcode{]}'.
The slur syntax with parentheses is a shorthand for this.
The slur syntax with parentheses is a shorthand for this.
+@node stem tremolo
+@section stem tremolo
-@node stem tremolo, , , Reference Manual
-
Tremolo marks can be printed on a single note by adding
`@code{:}[@var{length}]' after the note. The length must be at
least 8. A @var{length} value of 8 gives one line across
Tremolo marks can be printed on a single note by adding
`@code{:}[@var{length}]' after the note. The length must be at
least 8. A @var{length} value of 8 gives one line across
-@node Compound music expressions, , , Reference Manual
+@node Compound music expressions
@section Compound music expressions
@cindex compound music expressions
@section Compound music expressions
@cindex compound music expressions
-@cindex relative pitch specification
-@node relative, , , Reference Manual
+@node relative
+@section relative
+@cindex relative pitch specification
It is easy to get confused by octave changing marks and accidentally
putting a pitch in the wrong octave. A much better way of entering a
It is easy to get confused by octave changing marks and accidentally
putting a pitch in the wrong octave. A much better way of entering a
+@node Repeats
+@section Repeats
-@node Repeats, , , Reference Manual
In order to specify repeats, use the @code{\repeat}@keyindex{repeat}
keyword. Since repeats look and sound differently when played or
In order to specify repeats, use the @code{\repeat}@keyindex{repeat}
keyword. Since repeats look and sound differently when played or
-@cindex transposition of pitches
-@node transpose, , , Reference Manual
+@node transpose
+@section transpose
+@cindex transposition of pitches
A music expression can be transposed with
@code{\transpose}@keyindex{transpose}. The syntax is
A music expression can be transposed with
@code{\transpose}@keyindex{transpose}. The syntax is
-@node Ambiguities, , , Reference Manual
@section Ambiguities
@cindex ambiguities
@section Ambiguities
@cindex ambiguities
-@node Notation conversion specifics, , , Reference Manual
+@node Notation conversion specifics
@section Notation conversion specifics
@section Notation conversion specifics
-@node Automatic Beaming, , , Reference Manual
+@node Automatic Beaming
+@section Automatic Beaming
@cindex automatic beam generation
@cindex autobeam
@cindex automatic beam generation
@cindex autobeam
By default, LilyPond will generate beams automatically. This feature
can be disabled by setting the
By default, LilyPond will generate beams automatically. This feature
can be disabled by setting the
-@code{Voice.beamAuto}@indexcode{Voice.beamAuto} property to @code{#f}.
+@code{Voice.beamAuto}@indexcode{Voice.beamAuto} property to false.
It can be overridden for specific cases by specifying explicit beams.
It can be overridden for specific cases by specifying explicit beams.
you would use @code{(end * * 1 32)}.
you would use @code{(end * * 1 32)}.
-@node Chord Names, , , Reference Manual
+@node Chord Names
+@section Chord Names
@cindex chord names
@cindex chords
@cindex chord names
@cindex chords
You can make the chord changes stand out more by setting property
You can make the chord changes stand out more by setting property
-@code{ChordNames.chordChanges} to @code{#t}. This will only display
+@code{ChordNames.chordChanges} to true. This will only display
chord names when there's a change in the chords scheme, but always
display the chord name after a line break:
chord names when there's a change in the chords scheme, but always
display the chord name after a line break:
+@node lyricprint
+@section lyricprint
@cindex lyrics
@cindex printing!lyrics
@cindex lyrics
@cindex printing!lyrics
-@node lyricprint, , , Reference Manual
Lyric syllables must be interpreted within a @code{Lyrics} context
Lyric syllables must be interpreted within a @code{Lyrics} context
-@node Notation Contexts, , , Reference Manual
@section Notation Contexts
@cindex notation contexts
@section Notation Contexts
@cindex notation contexts
@mbinclude properties.itely
@mbinclude properties.itely
-@node Page layout, , , Reference Manual
+@node Page layout
+@section Page layout
@item @code{linewidth}@indexcode{linewidth}
Sets the width of the lines. If set to -1.0, a single
@item @code{linewidth}@indexcode{linewidth}
Sets the width of the lines. If set to -1.0, a single
- unjustified line is produced.
+ unjustified line is produced. If you use this variable, you
+ probably want to define it in staff spaces, ie
+ @example
+ linewidth = 30 * \staffspace;
+ @end example
@item @code{textheight}@indexcode{textheight}
Sets the total height of the music on each page. Only used by
@item @code{textheight}@indexcode{textheight}
Sets the total height of the music on each page. Only used by
will set the paper variables @code{hsize} and @code{vsize} (used by
@code{ly2dvi})
will set the paper variables @code{hsize} and @code{vsize} (used by
@code{ly2dvi})
-@node contextdefs, , , Reference Manual
+@node contextdefs
+@section contextdefs
@cindex context definition
@cindex translator definition
@cindex context definition
@cindex translator definition
-@node Sound output, , , Reference Manual
@section Sound output
The MIDI block is analogous to the paper block, but it is somewhat
@section Sound output
The MIDI block is analogous to the paper block, but it is somewhat
@cindex MIDI instrument names
@cindex MIDI instrument names
-@node midilist, , , Reference Manual
+@node midilist
+@section midilist
The MIDI instrument name is set by the
@code{Staff.midiInstrument}@indexcode{Staff.midiInstrument} property or,
The MIDI instrument name is set by the
@code{Staff.midiInstrument}@indexcode{Staff.midiInstrument} property or,
-@node Pre-defined Identifiers, , , Reference Manual
+@node Pre-defined Identifiers
@section Pre-defined Identifiers
@section Pre-defined Identifiers
Allow stems, beams, and slurs to point either upwards or
downwards, decided automatically by LilyPond.
Allow stems, beams, and slurs to point either upwards or
downwards, decided automatically by LilyPond.
- @item @code{\stemdown}@keyindex{stemdown}
+ @item @code{\stemDown}@keyindex{stemDown}
Force stems, beams, and slurs to point down.
@item @code{\stemUp}@keyindex{stemUp}
Force stems, beams, and slurs to point down.
@item @code{\stemUp}@keyindex{stemUp}
+@c ugh: because of @include, we need to fill in these nodes?
+@node Tutorial
* end of tutorial:: The end
@end menu
* end of tutorial:: The end
@end menu
-@node Introduction, , , Tutorial
experiment with writing Lilypond input yourself, to get a feel for
how LilyPond behaves.
experiment with writing Lilypond input yourself, to get a feel for
how LilyPond behaves.
-@node The first tune, , , Tutorial
description. In other words, LilyPond would be best
described by `music compiler' or `music to notation compiler'.
description. In other words, LilyPond would be best
described by `music compiler' or `music to notation compiler'.
-@node Lyrics and chords, , , Tutorial
@section Lyrics and chords
In this section we show how to typeset a song of unknown
@section Lyrics and chords
In this section we show how to typeset a song of unknown
@end example
End the score block.
@end example
End the score block.
-@node Piano music, , , Tutorial
@section Piano music
Our third subject is a piece of piano music. The fragment in the input
@section Piano music
Our third subject is a piece of piano music. The fragment in the input
[TODO: demonstrate Hara-Kiri with scores and part extraction.]
[TODO: demonstrate Hara-Kiri with scores and part extraction.]
-@node end of tutorial, , , Tutorial
@section The end
That's all folks. From here, you can either try fiddling with input
@section The end
That's all folks. From here, you can either try fiddling with input
MAJOR_VERSION=1
MINOR_VERSION=3
PATCH_LEVEL=121
MAJOR_VERSION=1
MINOR_VERSION=3
PATCH_LEVEL=121
# use the above to send patches: MY_PATCH_LEVEL is always empty for a
# released version.
# use the above to send patches: MY_PATCH_LEVEL is always empty for a
# released version.
--- /dev/null
+\header{
+texidoc="Explicit pitches and durations.";
+}
+\score {
+ \notes {
+ \pitch #(make-pitch 0 0 0) \duration #(make-duration 1 0)
+ \pitch #(make-pitch 1 1 1) \duration #(make-duration 2 0)
+
+ }
+}
\ No newline at end of file
static SCM
make_duration (SCM l, SCM d)
{
static SCM
make_duration (SCM l, SCM d)
{
{"lyrics", LYRICS},
{"key", KEY},
{"mark", MARK},
{"lyrics", LYRICS},
{"key", KEY},
{"mark", MARK},
- {"musicalpitch", MUSICAL_PITCH},
{"time", TIME_T},
{"times", TIMES},
{"midi", MIDI},
{"time", TIME_T},
{"times", TIMES},
{"midi", MIDI},
%token MEASURES
%token MIDI
%token MM_T
%token MEASURES
%token MIDI
%token MM_T
%token NAME
%token PITCHNAMES
%token NOTES
%token NAME
%token PITCHNAMES
%token NOTES
%type <reqvec> pre_requests post_requests
%type <request> gen_text_def
%type <reqvec> pre_requests post_requests
%type <request> gen_text_def
-%type <scm> steno_musical_pitch musical_pitch absolute_musical_pitch
-%type <scm> steno_tonic_pitch
+%type <scm> steno_pitch pitch absolute_pitch
+%type <scm> explicit_pitch steno_tonic_pitch
%type <scm> chord_additions chord_subtractions chord_notes chord_step
%type <music> chord
%type <scm> chord_additions chord_subtractions chord_notes chord_step
%type <music> chord
| Repeated_music { $$ = $1; }
| Simultaneous_music { $$ = $1; }
| Sequential_music { $$ = $1; }
| Repeated_music { $$ = $1; }
| Simultaneous_music { $$ = $1; }
| Sequential_music { $$ = $1; }
- | TRANSPOSE musical_pitch Music {
+ | TRANSPOSE pitch Music {
$$ = new Transposed_music (SCM_EOL);
Music *p = $3;
Pitch pit = *unsmob_pitch ($2);
$$ = new Transposed_music (SCM_EOL);
Music *p = $3;
Pitch pit = *unsmob_pitch ($2);
- RELATIVE absolute_musical_pitch Music {
+ RELATIVE absolute_pitch Music {
Music * p = $3;
Pitch pit = *unsmob_pitch ($2);
$$ = new Relative_octave_music (SCM_EOL);
Music * p = $3;
Pitch pit = *unsmob_pitch ($2);
$$ = new Relative_octave_music (SCM_EOL);
NOTENAME_PITCH {
$$ = $1;
}
NOTENAME_PITCH {
$$ = $1;
}
-musical_pitch:
- steno_musical_pitch {
- | MUSICAL_PITCH embedded_scm {
- if (!unsmob_pitch ($2))
+ | explicit_pitch {
+ $$ = $1;
+ }
+ ;
+
+explicit_pitch:
+ PITCH embedded_scm {
+ $$ = $2;
+ if (!unsmob_pitch ($2)) {
THIS->parser_error (_f ("Expecting musical-pitch value", 3));
THIS->parser_error (_f ("Expecting musical-pitch value", 3));
- Pitch m;
- $$ = m.smobbed_copy ();
+ $$ = Pitch ().smobbed_copy ();
+ }
-absolute_musical_pitch:
- steno_musical_pitch {
+absolute_pitch:
+ steno_pitch {
steno_duration {
$$ = $1;
}
steno_duration {
$$ = $1;
}
+ | explicit_duration {
+ $$ = $1;
+ }
| duration_length '*' bare_unsigned {
$$ = unsmob_duration ($$)->compressed ( $3) .smobbed_copy ();
}
| duration_length '*' bare_unsigned {
$$ = unsmob_duration ($$)->compressed ( $3) .smobbed_copy ();
}
| entered_notemode_duration {
$$ = $1;
}
| entered_notemode_duration {
$$ = $1;
}
+ | explicit_duration {
+ $$ = $1;
+ }
- musical_pitch exclamations questions optional_notemode_duration {
+ pitch exclamations questions optional_notemode_duration {
if (!THIS->lexer_p_->note_state_b ())
THIS->parser_error (_ ("Have to be in Note mode for notes"));
if (!THIS->lexer_p_->note_state_b ())
THIS->parser_error (_ ("Have to be in Note mode for notes"));
"Last-Translator: Erwin Dieterich <bamse@gmx.de>\n"
"Language-Team: LANGUAGE <de@li.org>\n"
"MIME-Version: 1.0\n"
"Last-Translator: Erwin Dieterich <bamse@gmx.de>\n"
"Language-Team: LANGUAGE <de@li.org>\n"
"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=CHARSET\n"
+"Content-Type: text/plain; charset=ISO-8859-1\n"
"Content-Transfer-Encoding: ENCODING\n"
#: data-file.cc:54
"Content-Transfer-Encoding: ENCODING\n"
#: data-file.cc:54
msgid ""
msgstr ""
"POT-Creation-Date: 2000-12-17 15:35+0100\n"
msgid ""
msgstr ""
"POT-Creation-Date: 2000-12-17 15:35+0100\n"
-"Content-Type: text/plain; charset=\n"
+"Content-Type: text/plain; charset=ISO-8859-1\n"
"Date: 1998-05-30 00:17:12+0200\n"
"From: <jantien@xs4all.nl>\n"
"Xgettext-Options: --c++ --default-domain=lilypond --join "
"Date: 1998-05-30 00:17:12+0200\n"
"From: <jantien@xs4all.nl>\n"
"Xgettext-Options: --c++ --default-domain=lilypond --join "
# the TP robot wants them like this (I hope).
# Of course, Han-Wen <hanwen@cs.uu.nl> also was FIRST AUTHOR.
#
# the TP robot wants them like this (I hope).
# Of course, Han-Wen <hanwen@cs.uu.nl> also was FIRST AUTHOR.
#
msgid ""
msgstr ""
"Project-Id-Version: lilypond 1.3.59\n"
msgid ""
msgstr ""
"Project-Id-Version: lilypond 1.3.59\n"
"Last-Translator: Jan Nieuwenhuizen <janneke@gnu.org>\n"
"Language-Team: Dutch <nl@li.org>\n"
"MIME-Version: 1.0\n"
"Last-Translator: Jan Nieuwenhuizen <janneke@gnu.org>\n"
"Language-Team: Dutch <nl@li.org>\n"
"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=8859-1\n"
+"Content-Type: text/plain; charset=ISO-8859-1\n"
"Content-Transfer-Encoding: 8bit\n"
"Date: 1998-05-26 11:26:28+0200\n"
"From: <janneke@gnu.org>\n"
"Content-Transfer-Encoding: 8bit\n"
"Date: 1998-05-26 11:26:28+0200\n"
"From: <janneke@gnu.org>\n"
;; guile> (load "backend-documentation-lib.scm")
;; For some reason, this can't be generated when lilypond is loaded;
;; the regexp stuff behaves weird.
;; guile> (load "backend-documentation-lib.scm")
;; For some reason, this can't be generated when lilypond is loaded;
;; the regexp stuff behaves weird.
-(define (list-interface-names) '("general-grob-interface" "general-grob-interface" "beam-interface" "clef-interface" "axis-group-interface" "note-column-interface" "stem-interface" "slur-interface" "side-position-interface" "accidentals-interface" "line-of-score-interface" "note-head-interface" "note-name-interface" "rhythmic-head-interface" "rest-interface" "tuplet-bracket-interface" "align-interface" "aligned-interface" "align-interface" "break-aligned-interface" "chord-name-interface" "time-signature-interface" "bar-line-interface" "hairpin-interface" "arpeggio-interface" "note-collision-interface" "custos-interface" "dot-interface" "font-interface" "text-interface" "dot-column-interface" "dynamic-interface" "finger-interface" "separation-spanner-interface" "text-script-interface" "grace-alignment-interface" "hara-kiri-group-interface" "line-spanner-interface" "lyric-hyphen-interface" "key-signature-interface" "lyric-extender-interface" "lyric-syllable-interface" "mark-interface" "multi-measure-rest-interface" "font-interface" "paper-column-interface" "spaceable-element-interface" "rest-collision-interface" "script-interface" "script-column-interface" "spacing-spanner-interface" "staff-symbol-interface" "stem-tremolo-interface" "separation-item-interface" "sustain-pedal-interface" "system-start-delimiter-interface" "text-spanner-interface" "tie-interface" "tie-column-interface" "volta-bracket-interface"))
+(define (list-interface-names) '("general-grob-interface" "beam-interface" "clef-interface" "axis-group-interface" "note-column-interface" "stem-interface" "slur-interface" "side-position-interface" "accidentals-interface" "line-of-score-interface" "note-head-interface" "note-name-interface" "rhythmic-head-interface" "rest-interface" "tuplet-bracket-interface" "align-interface" "aligned-interface" "break-aligned-interface" "chord-name-interface" "time-signature-interface" "bar-line-interface" "hairpin-interface" "arpeggio-interface" "note-collision-interface" "custos-interface" "dot-interface" "font-interface" "text-interface" "dot-column-interface" "dynamic-interface" "finger-interface" "separation-spanner-interface" "text-script-interface" "grace-alignment-interface" "hara-kiri-group-interface" "line-spanner-interface" "lyric-hyphen-interface" "key-signature-interface" "lyric-extender-interface" "lyric-syllable-interface" "mark-interface" "multi-measure-rest-interface" "paper-column-interface" "spaceable-element-interface" "rest-collision-interface" "script-interface" "script-column-interface" "spacing-spanner-interface" "span-bar-interface" "staff-symbol-interface" "stem-tremolo-interface" "separation-item-interface" "sustain-pedal-interface" "system-start-delimiter-interface" "text-spanner-interface" "tie-interface" "tie-column-interface" "volta-bracket-interface"))
(eval-string (ly-gulp-file "interface-description.scm"))
(eval-string (ly-gulp-file "interface-description.scm"))
"\n@html"
"\n<hr>"
"\n@end html"
"\n@html"
"\n<hr>"
"\n@end html"
- "\n@node " name ",,,"))
(define texi-section-alist
'(
(define texi-section-alist
'(
;; prepend GNU for dir, must be unique
"\n* GNU " name " (" file-name "). " name "."
"\n@end direntry"
;; prepend GNU for dir, must be unique
"\n* GNU " name " (" file-name "). " name "."
"\n@end direntry"
+ (node "Top") ",(lilypond)Development,," top
"\n@top"
(texi-section 1 name #f)
(texi-menu items-alist)
"\n@top"
(texi-section 1 name #f)
(texi-menu items-alist)
(translator-property-description 'melismaBusy boolean? "Signifies
whether a melisma is active. This can be used to signal melismas on
top of those automatically detected. ")
(translator-property-description 'melismaBusy boolean? "Signifies
whether a melisma is active. This can be used to signal melismas on
top of those automatically detected. ")
-(translator-property-description 'melismaEngraverBusy boolean? "See @ref{melismaBusy}. This is set automatically.")
+(translator-property-description 'melismaEngraverBusy boolean? "See @ref{(lilypond)melismaBusy}. This is set automatically.")
(translator-property-description 'midiInstrument string? "Name of the
MIDI instrument to use ")
(translator-property-description 'noAutoBeaming boolean? "If set to true then beams are not generated automatically.
(translator-property-description 'midiInstrument string? "Name of the
MIDI instrument to use ")
(translator-property-description 'noAutoBeaming boolean? "If set to true then beams are not generated automatically.
if 1:
def conv (str):
str = re.sub ('drarnChords', 'chordChanges', str)
if 1:
def conv (str):
str = re.sub ('drarnChords', 'chordChanges', str)
+ str = re.sub ('\\musicalpitch', '\\pitch', str)
- conversions.append (((1,3,122), conv, 'drarnChords -> chordChanges'))
+ conversions.append (((1,3,122), conv, 'drarnChords -> chordChanges, \\musicalpitch -> \\pitch'))
############################
############################