From f02e7db17cd0babaeb7978251ca5809e353ad29a Mon Sep 17 00:00:00 2001 From: Han-Wen Nienhuys Date: Mon, 26 Mar 2001 00:04:29 +0200 Subject: [PATCH] release: 1.3.143 ============ * Glossary bugfixes for lilypond code. * Bugfix: don't crash if dy or y not set. * Doco updates: moved contents of tricks chapter to input/tricks, inserted lilypond-book tutorial, added polyphony section. * Score.skipTypesetting skips over already or not yet corrected music, thus speeding up running times and score debugging. (Includes bugfix relative to patch submitted to list.) 1.3.142.j --- CHANGES | 18 +- Documentation/topdocs/INSTALL.texi | 10 +- Documentation/user/glossary.tely | 163 +++++++-------- Documentation/user/lilypond-book.itely | 243 +-------------------- Documentation/user/lilypond.tely | 2 - Documentation/user/mutopia.itely | 41 ++-- Documentation/user/refman.itely | 244 +++++++++++++++------- Documentation/user/tricks.itely | 267 ------------------------ Documentation/user/tutorial.itely | 233 +++++++++++++++++++++ INSTALL.txt | 7 +- VERSION | 4 +- input/scarlatti-paper.ly | 8 - input/test/beam-dir-functions.ly | 38 ++++ input/test/default-neutral-dir.ly | 12 ++ input/test/stem-extend.ly | 12 ++ input/tricks/embedded-postscript.ly | 7 + lily/auto-beam-engraver.cc | 10 +- lily/beam.cc | 20 +- lily/grace-engraver-group.cc | 10 +- lily/grace-performer-group.cc | 2 +- lily/include/beam.hh | 2 +- lily/include/translator.hh | 3 +- lily/multi-measure-rest-engraver.cc | 12 +- lily/note-heads-engraver.cc | 6 +- lily/rest-collision.cc | 4 + lily/score-engraver.cc | 13 +- lily/score-performer.cc | 4 +- lily/tie-engraver.cc | 6 + lily/translator-group.cc | 4 +- lily/translator.cc | 13 -- make/out/lilypond.lsm | 8 +- make/out/lilypond.spec | 4 +- scm/grob-property-description.scm | 14 +- scm/translator-property-description.scm | 5 + scripts/lilypond-book.py | 2 +- stepmake/stepmake/toplevel-targets.make | 1 + 36 files changed, 688 insertions(+), 764 deletions(-) delete mode 100644 Documentation/user/tricks.itely create mode 100644 input/test/beam-dir-functions.ly create mode 100644 input/test/default-neutral-dir.ly create mode 100644 input/test/stem-extend.ly diff --git a/CHANGES b/CHANGES index 8af5682b1c..242f08f6d7 100644 --- a/CHANGES +++ b/CHANGES @@ -1,3 +1,17 @@ +1.3.142.hwn2 +============ + +* Glossary bugfixes for lilypond code. + +* Bugfix: don't crash if dy or y not set. + +* Doco updates: moved contents of tricks chapter to input/tricks, +inserted lilypond-book tutorial, added polyphony section. + +* Score.skipTypesetting skips over already or not yet corrected music, thus +speeding up running times and score debugging. (Includes bugfix relative to +patch submitted to list.) + 1.3.142.jcn1 ============ @@ -5,12 +19,10 @@ * Bugfix: patch in $(outdir) + 1.3.142 ======= -1.3.141.jcn3 -============ - * some mup2ly progress. * Bugfix: ly2dvi: don't include empty set fo latexheaders, don't use diff --git a/Documentation/topdocs/INSTALL.texi b/Documentation/topdocs/INSTALL.texi index 66141d6c21..53966d411b 100644 --- a/Documentation/topdocs/INSTALL.texi +++ b/Documentation/topdocs/INSTALL.texi @@ -121,13 +121,15 @@ recommended for comfortable use. @section Website The website is the most convenient form to use for reading the -documentation on-line documentation. It is made by entering @example +documentation on-line documentation. It is made by entering - make htmldoc +@example + + make web-doc @end example -This does require a functioning LilyPond. The binary doesn't have to -be installed. +This does require a functioning LilyPond. The executable doesn't have +to be installed, though. If you want to auto-generate Lily's website, you'll need some additional conversion tools. diff --git a/Documentation/user/glossary.tely b/Documentation/user/glossary.tely index 9365267b74..d10a4d3a53 100644 --- a/Documentation/user/glossary.tely +++ b/Documentation/user/glossary.tely @@ -184,13 +184,13 @@ Akkord, NL: gebroken akoord, DK: arpeggio, akkordbrydning, S: arpeggio, N: @ @lilypond[13pt,eps] -\context GrandStaff < - \notes\relative c'' { + \notes \context PianoStaff < + \context Staff = SA \relative c'' { \time 4/4; \clef treble; r8 g16 c e g, c e r8 g,16 c e g, c e | r8 a,16 d f a, d f r8 a,16 d f a, d f \bar "||"; } - \notes\relative c' { + \context Staff = SB \relative c' { \clef bass; < \context Voice = va { \stemUp @@ -314,23 +314,17 @@ Symbol at the start of a system connecting staffs. Curly braces are used for connecting piano staves, angular brackets for connecting parts in an orchestral or choral score. -@ - -@lilypond[13pt,eps] -\context GrandStaff < - \property GrandStaff.minVerticalAlign = 12 - \notes\relative c'' { \clef treble; g4 e c2 } - \notes\relative c { \clef bass; c1 \bar "|."; } > +@lilypond[13pt,eps] +\notes\context GrandStaff < + \relative c''\context Staff = SA { \clef treble; g4 e c2 } + \relative c \context Staff = SB { \clef bass; c1 \bar "|."; } > @end lilypond -@ - @lilypond[13pt,eps] -%\context StaffGroup < -\context ChoirStaff < - \property StaffGroup.minVerticalAlign = 12 - \notes\relative c'' { \clef treble; g4 e c2 } - \notes\relative c { \clef bass; c1 \bar "|."; } > +\context StaffGroup < +% \property StaffGroup.minVerticalAlign = 12 + \notes\relative c'' \context Staff = SA { \clef treble; g4 e c2 } + \notes\relative c \context Staff = SB { \clef bass; c1 \bar "|."; } > @end lilypond @item brass @@ -375,16 +369,15 @@ lines. @lilypond[13pt,eps] \property Score.barNonAuto = ##t -\property Staff.clefStyle = #"fullSizeChanges" -\property Staff.textStyle = #"large" -\property Lyrics.textStyle = #"large" +\property Score.Clef \override #'full-size-change = ##t +\property Score.LyricText \set #'font-style = #'large \addlyrics -\notes\relative c' { - \clef soprano; c1 s s - \clef mezzosoprano; c s s - \clef alto; c s s - \clef tenor; c s s - \clef baritone; c s +\context Staff \notes\relative c' { + \clef soprano; c1 + \clef mezzosoprano; c + \clef alto; c + \clef tenor; c + \clef baritone; c } \context Lyrics \lyrics { Soprano Mezzosoprano Alto Tenor Baritone @@ -544,8 +537,8 @@ composition methods. @lilypond[13pt,eps] \property Score.TimeSignature \override #'style = #'C2/2 -\context GrandStaff < - \notes\relative c' { +\notes\context PianoStaff < + \context Staff = SA \relative c' { \key bes \major; \time 4/4; \clef treble; @@ -561,7 +554,7 @@ composition methods. } > } - \notes\relative c' { + \context Staff = SB \relative c' { \clef bass; \key bes \major; < \context Voice = lha { @@ -647,8 +640,8 @@ or the abbreviation "decresc.". @ @lilypond[13pt,eps] -\key g \major; \time 4/4; -\notes\relative c'' { d4 \> c b a | \! g1 \bar "|."; } +\context Staff \notes\relative c'' {\key g \major; \time 4/4; + d4 \> c b a | \! g1 \bar "|."; } @end lilypond @item descending interval @@ -679,9 +672,9 @@ also to some extent in newer jazz music. \addlyrics \notes\relative c' { c1 d - \property Voice.textScriptPadding = #-10 + \property Voice.TextScript \set #'padding = #-10 e^"~~ S" f g a - \property Voice.textScriptPadding = #-4 + \property Voice.TextScript \set #'padding = #-4 b^"~~ S" c } \context Lyrics \lyrics { Ionian } @end lilypond @@ -694,10 +687,10 @@ also to some extent in newer jazz music. \addlyrics \notes\relative c' { d1 - \property Voice.textScriptPadding = #-10 + \property Voice.TextScript \set #'padding = #-10 e^"~~ S" f g a - \property Voice.textScriptPadding = #-4 + \property Voice.TextScript \set #'padding = #-4 b^"~~ S" c d } \context Lyrics \lyrics { Dorian } @end lilypond @@ -709,10 +702,10 @@ also to some extent in newer jazz music. \property Voice.TextScript \set #'font-style = #'large \addlyrics \notes\relative c' { - \property Voice.textScriptPadding = #-10 + \property Voice.TextScript \set #'padding = #-10 e1^"~~ S" f g a - \property Voice.textScriptPadding = #-4 + \property Voice.TextScript \set #'padding = #-4 b^"~~ S" c d e } \context Lyrics \lyrics { Phrygian } @end lilypond @@ -725,9 +718,9 @@ also to some extent in newer jazz music. \addlyrics \notes\relative c' { f1 g a - \property Voice.textScriptPadding = #-4 + \property Voice.TextScript \set #'padding = #-4 b^"~~ S" c d - \property Voice.textScriptPadding = #0 + \property Voice.TextScript \set #'padding = #0 e^"~~ S" f } \context Lyrics \lyrics { Lydian } @end lilypond @@ -740,9 +733,9 @@ also to some extent in newer jazz music. \addlyrics \notes\relative c'' { g1 a - \property Voice.textScriptPadding = #-4 + \property Voice.TextScript \set #'padding = #-4 b^"~~ S" c d - \property Voice.textScriptPadding = #0 + \property Voice.TextScript \set #'padding = #0 e^"~~ S" f g } \context Lyrics \lyrics { Mixolydian } @end lilypond @@ -755,9 +748,9 @@ also to some extent in newer jazz music. \addlyrics \notes\relative c'' { a1 - \property Voice.textScriptPadding = #-4 + \property Voice.TextScript \set #'padding = #-4 b^"~~ S" c d - \property Voice.textScriptPadding = #0 + \property Voice.TextScript \set #'padding = #0 e^"~~ S" f g a } \context Lyrics \lyrics { Aeolian } @end lilypond @@ -775,9 +768,9 @@ harmonic minor scale type an augmented second (A) occurs between the 6th and \addlyrics \notes\relative c' { c1 d - \property Voice.textScriptPadding = #-10 + \property Voice.TextScript \set #'padding = #-10 e^"~~ S" f g a - \property Voice.textScriptPadding = #-4 + \property Voice.TextScript \set #'padding = #-4 b^"~~ S" c } \context Lyrics \lyrics { Major } @end lilypond @@ -790,9 +783,9 @@ harmonic minor scale type an augmented second (A) occurs between the 6th and \addlyrics \notes\relative c'' { a1 - \property Voice.textScriptPadding = #-4 + \property Voice.TextScript \set #'padding = #-4 b^"~~ S" c d - \property Voice.textScriptPadding = #0 + \property Voice.TextScript \set #'padding = #0 e^"~~ S" f g a } \context Lyrics \lyrics { "ancient minor" } @end lilypond @@ -805,11 +798,11 @@ harmonic minor scale type an augmented second (A) occurs between the 6th and \addlyrics \notes\relative c'' { a1 - \property Voice.textScriptPadding = #-4 + \property Voice.TextScript \set #'padding = #-4 b^"~~ S" c d - \property Voice.textScriptPadding = #0 + \property Voice.TextScript \set #'padding = #0 e^"~~ S" - \property Voice.textScriptPadding = #1 + \property Voice.TextScript \set #'padding = #1 f!^"~~ A" gis^"~~ S" a } @@ -824,13 +817,13 @@ harmonic minor scale type an augmented second (A) occurs between the 6th and \addlyrics \notes\relative c'' { a1 - \property Voice.textScriptPadding = #-4 + \property Voice.TextScript \set #'padding = #-4 b^"~~ S" c d e fis - \property Voice.textScriptPadding = #0 + \property Voice.TextScript \set #'padding = #0 gis^"~~ S" a g! - \property Voice.textScriptPadding = #-1 + \property Voice.TextScript \set #'padding = #-1 f!^"~~ S" e d - \property Voice.textScriptPadding = #-4 + \property Voice.TextScript \set #'padding = #-4 c^"~~ S" b a } \context Lyrics \lyrics { "Melodic minor" } @@ -1046,23 +1039,21 @@ octave lower (for example on double bass @w{@ar{}@strong{strings}}). @lilypond[13pt,eps] \property Score.barNonAuto = ##t -\property Staff.clefStyle = #"fullSizeChanges" +\property Staff.Clef \override #'full-size-change = ##t \property Lyrics.LyricText \set #'font-style = #'large \addlyrics \notes\relative c { % \clef "F3"; \clef varbaritone; - f1 s -% \clef "F4"; + f1 \clef bass; - f1 s -% \clef "F5"; + f1 \clef subbass; - f1 s + f1 \clef "F^8"; - f'1 s s + f1 \clef "F_8"; - f,,1 s s + f1 } \context Lyrics \lyrics { baritone @@ -1184,18 +1175,18 @@ that). @lilypond[13pt,eps] \property Score.barNonAuto = ##t -\property Staff.clefStyle = #"fullSizeChanges" +\property Staff.Clef \set #'full-size-change = ##t \property Lyrics.LyricText \set #'font-style = #'large \addlyrics \notes\relative c'' { \clef french; - g1 s s s s + g1 \clef treble; - g s s s + g \clef "G^8"; - g' s s s + g \clef "G_8"; - g,, s s + g } \context Lyrics \lyrics { "french violin clef" @@ -1254,14 +1245,14 @@ section. @ar{}@w{}@strong{functional harmony} @ @lilypond[13pt,eps] -\context GrandStaff < - \notes\relative c'' { +\notes\context PianoStaff < + \context Staff = SA \relative c'' { \time 4/4; \clef treble; \partial 4; < c4 g e > | < c a f > < b g d > < c2 g e > } \property Lyrics.LyricText \set #'font-style = #'large \addlyrics - \notes\relative c { + \context Staff = SB \relative c { \clef bass; \partial 4; c4 | f, g c2 \bar "|."; } @@ -1330,10 +1321,10 @@ forms an octave. @lilypond[13pt,eps] \property Score.barNonAuto = ##t -\property Lyrics.LyricText \set #'font-style = #'large -\property Voice.TextScript \set #'font-style = #'large +\property Score.LyricText \set #'font-style = #'large +\property Score.TextScript \set #'font-style = #'large \addlyrics -\notes\relative c'' { +\context Staff \notes\relative c'' { < g1 g > s < g^"minor" as > s < g^"major" a! > s @@ -1351,10 +1342,10 @@ forms an octave. @lilypond[13pt,eps] \property Score.barNonAuto = ##t -\property Lyrics.LyricText \set #'font-style = #'large -\property Voice.TextScript \set #'font-style = #'large +\property Score.LyricText \set #'font-style = #'large +\property Score.TextScript \set #'font-style = #'large \addlyrics -\notes\relative c'' { +\context Staff \notes\relative c'' { < g1^"perfect" c > s < g^"augm" cis > s < g^"perfect" d' > s @@ -1372,10 +1363,10 @@ forms an octave. @lilypond[13pt,eps] \property Score.barNonAuto = ##t -\property Lyrics.LyricText \set #'font-style = #'large -\property Voice.TextScript \set #'font-style = #'large +\property Score.LyricText \set #'font-style = #'large +\property Score.TextScript \set #'font-style = #'large \addlyrics -\notes\relative c'' { +\context Staff \notes\relative c'' { < gis1^"dimin" f'! > s < g!^"minor" f'! > s < g^"major" fis' > s @@ -1399,8 +1390,8 @@ The difference between an interval and an octave. @lilypond[13pt,eps] \property Score.barNonAuto = ##t -\property Voice.TextScript \set #'font-style = #'large -\notes\relative c'' { +\property Score.TextScript \set #'font-style = #'large +\context Staff \notes\relative c'' { < g1_"second" a > s < g'_"seventh" a, > s \bar "||"; < g,_"third" b > s < g'_"sixth" b, > s \bar "||"; < g,_"fourth" c > s < g'_"fifth" c, > s \bar "||"; @@ -1513,7 +1504,7 @@ note value: double length of @w{@ar{}@strong{brevis}}. @w{@ar{}@strong{note valu @lilypond[13pt,eps] \property Score.barNonAuto = ##t \notes\relative c'' { - \property Voice.noteHeadStyle = #'mensural + \property Voice.NoteHead \set #'style = #'mensural g\longa } @end lilypond @@ -1627,7 +1618,7 @@ First C below the 440 Hz A. @lilypond[13pt,eps] \property Score.barNonAuto = ##t -\property Staff.clefStyle = #"fullSizeChanges" +\property Staff.Clef \set #'full-size-change = ##t \notes\relative c' { \clef bass; c1 s \clef alto; c s @@ -1762,9 +1753,9 @@ but sometimes (mostly in pre baroque music) the double length note value \property Voice.TextScript \set #'font-style = #'large \property Score.barNonAuto = ##t \notes\relative c'' { - \property Voice.noteHeadStyle = #'mensural + \property Voice.NoteHead \override #'style = #'mensural g\longa_"longa" g\breve_"breve" - \property Voice.noteHeadStyle = ##f + \property Voice.NoteHead \revert #'style g1_"1/1" g2_"1/2" g4_"1/4" s16 g8_"1/8" s16 g16_"1/16" s16 g32_"1/32" s16 g64_"1/64" s32 } @end lilypond @@ -2076,7 +2067,7 @@ sub@-do@-mi@-nant (S) and V = dominant (D). \emptyText \property Score.barNonAuto = ##t \property Lyrics.LyricText \set #'font-style = #'large -\property Lyrics.minVerticalAlign = 8 +%\property Lyrics.minVerticalAlign = 8 \addlyrics \notes\relative c' { c1 d e f g a b c } diff --git a/Documentation/user/lilypond-book.itely b/Documentation/user/lilypond-book.itely index d94fda2b8d..f324d0e567 100644 --- a/Documentation/user/lilypond-book.itely +++ b/Documentation/user/lilypond-book.itely @@ -6,9 +6,6 @@ @node lilypond-book @chapter lilypond-book -[ The tutorial part is at the moment commented out and moved to -the end of this document ] - [TODO: THIS MANUAL IS NOT FINISHED YET. FIXME.] @command{lilypond-book} is a script that helps integrating lilypond with @@ -226,11 +223,10 @@ careful, don't give the source file that ext, or the file will be overwritten. If you use @code{--outdir}, you should also @code{cd} to that directory -before running LaTeX or makeinfo. - -@strong{[UGH: IS THIS THE BEST WAY TO DO IT? MAYBE ADD A COMMENT LINE TO THE -GENERATED FILE, SO LILYPOND-BOOK CAN TEST IF THE FILE IT IS TO OVERWRITE -IS GENERATED.]} +before running LaTeX or makeinfo. This may seem a little kludgy, but +both Latex and makeinfo expect picture files (the music) to be in the +current working directory. Moreover, if you do this, LaTeX will not +clutter you normal working directory with output files. @strong{About the input} @@ -311,234 +307,3 @@ Ignores almost all La@TeX{} commands that changes margins and linewidths. @email{tca@@gnu.org, Tom Cato Amundsen} - - -@ignore - -So what does this look like? Well, here is an example: -@lilypond[veryverbatim, intertext="produces this music:"] -\score{ - \notes\relative c'{ - \time 5/8; - [e16( g b c a g][e a b d] | )e2 d,8 | - [e16( g b c a g][e a b d] | )b2 [a16( f] | - [e a b d] )e4 c8 | [es16( bes a as g es][d c b! )g] | - [f( a b d b a][f a b d] | )e2 - } -} -@end lilypond -If you are lucky, the above example show a nice feature of LilyPond -and La@TeX{}. Since LilyPond can output the music as @TeX{} graphics, -La@TeX{} can insert pagebreaks between the lines of music. - -Notice that there is no @code{\paper} statement in the example -above. Lilypond-book will insert some code for you that defines the -linewidth and the font to use. If you don't want to change the default, -there is no need to put an empty @code{\paper@{@}} inside the @code{\score}. -In the example above, something like -this might be inserted before your code: -@example -\include "paper16.ly" -\paper@{ \paper_sixteen - linewidth = 390.\pt; - castingalgorithm = \Gourlay; -@} -@end example -The actual values for linewidth will differ depending on papersize and -number of columns. Also, if you use a different fontsize for the -music, another file than @code{paper16.ly} will be included. - -If you want to make the music not so wide, you can insert a -@code{\paper} statement that set the linewidth: - -@lilypond[veryverbatim, intertext="produces this music:"] -\score{ - \notes\relative c'{ - \time 5/8; - [e16( g b c a g][e a b d] | )e2 d,8 | - [e16( g b c a g][e a b d] | )b2 [a16( f] | - [e a b d] )e4 c8 | [es16( bes a as g es][d c b! )g] | - [f( a b d b a][f a b d] | )e2 - } - \paper{linewidth = 10.\cm;} -} -@end lilypond - -Very often, if you mix music and text, the music is often only a -few notes or at most a few bars. This music should be as short as -possible and not stretched to be aligned to the right margin. - -If you only write voice-contents in the lilypond block, @command{lilypond-book} -will set the @code{linewidth} variable to -1, so Lilypond -will make the music as short as possible but without breaking the -line. Here is a well know harmonic progression: -@lilypond[veryverbatim, intertext="produce a well known harmonic progression:"] - \context Voice { } -@end lilypond - -If you want to place music examples in the text, -@lilypond[eps] -\context Voice { } -@end lilypond -, you can use the @code{eps} option. This will create the music as -eps graphics and include it into the document with the -@code{\includegraphics} command. - -The code used look like this: -@example -@@lilypond[eps] - \context Voice { } -@@end lilypond -@end example - -You can also use the @code{eps} option if the block is a complete -lilypond source. This 5 cm long empty line, -@lilypond[eps] -\score{ - \notes{s} - \paper{ linewidth = 5.\cm;} -} -@end lilypond -was created with this code: -@example -@@lilypond[eps] -\score@{ - \notes@{s@} - \paper@{ linewidth = 5.\cm;@} -@} -@@end lilypond -@end example - -To avoid that La@TeX{} places the music on a line of its one, there should -be no empty lines between the normal text and the lilypond -environment. - -You can also use @code{lilypondfile} (on a separate line, FIXME), to -include another file. - -@section Fontsize options You can use all lilypond fontsizes in -@command{lilypond-book}. The default 16pt fontsize is probably to big to be -included in the middle of the text, 11pt or 13pt is probably better. - -The code can look like this: -@example -@@lilypond[13pt, eps] - -@@end lilypond -@end example - -The following options set the fontsize: -@itemize -@item @code{11pt} -@lilypond[11pt, eps] - \relative c'{ - r16 [c d e][f d e c] [g'8 c][b-\prall c] | - [d16 g, a b][c a b g][d'8 g f-\prall g] - } -@end lilypond -@item @code{13pt} -@lilypond[13pt, eps] - \relative c'{ - r16 [c d e][f d e c] [g'8 c][b-\prall c] | - [d16 g, a b][c a b g][d'8 g f-\prall g] - } -@end lilypond -@item @code{16pt} -@lilypond[16pt, eps] - \relative c'{ - r16 [c d e][f d e c] [g'8 c][b-\prall c] | - [d16 g, a b][c a b g][d'8 g f-\prall g] - } -@end lilypond -@item @code{20pt} -@lilypond[20pt, eps] - \relative c'{ - r16 [c d e][f d e c] [g'8 c][b-\prall c] | - [d16 g, a b][c a b g][d'8 g f-\prall g] - } -@end lilypond -@item @code{26pt} -@lilypond[26pt, eps] - \relative c'{ - r16 [c d e][f d e c] [g'8 c][b-\prall c] | - [d16 g, a b][c a b g][d'8 g f-\prall g] - } -@end lilypond -@end itemize - - -@section More options -@itemize -@item The @code{singleline} option set @code{linewidth} to -1.0. -@item The @code{multiline} option set @code{linewidth} to a value letting -the music be aligned to the right margin. The music can span several -lines. -@end itemize - -@section Just in case... -The options @code{fragment} and @code{nonfragment} will override -@command{lilypond-book} when it scans the lilypond code to see if it is voice -contents or complete code. This might be useful if @command{lilypond-book} choose -wrong. - -Since there is no finder's fee which doubles every year, there is no -need to wait for the price money to grow. So send a bug report today -if you need this one of these options. - -@section Examples - -This was all options to @code{\begin}. The rest of the lilypond -document will show some ways you can use lilypond in -La@TeX{} documents. It will also act as a simple test-suite for -lilypond-book. You can place @code{eps} lilypond in and marginspars just -as any other included eps graphics. - -@lilypond -\score{ - \notes\relative c'{ - \time 12/8; - r4-\fermata [b16-.( )b-.] [f'8-- dis16-.( )dis-. gis8--] - [f16-.( )f-. dis8-- gis16-.( )gis-.] cis4.-\fermata | - - r4.-\fermata [cis,16 cis g'8 f16 f b8][g16 g f8 b16 b] dis4.-\fermata - } - \paper{linewidth = 7.\cm;} -} -@end lilypond - - -To the right you can see some bars from the trumpet fanfara from the -beginning of the fantastic street opera ``Houdini the Great'', by the -Danish composer Andy Pape. The music is put inside a -@code{floatingfigure} environment, and the music will be aligned by -the right marging if you set floatingfigure width and lilypond linewidth -to the same value. The code looks like this: - -@lilypond[verbatim] -\score{ - \notes\relative c'{ - \time 12/8; - r4.-\fermata [b16-.( )b-.] [f'8-- dis16-.( )dis-. gis8--] - [f16-.( )f-. dis8-- gis16-.( )gis-.] cis8.-\fermata | - - r4.-\fermata [cis,16 cis g'8 f16 f b8] - [g16 g f8 b16 b] dis4.-\fermata - } - \paper{linewidth = 7.\cm;} -} -@end lilypond - -If you have a lot of small music examples like this in the middle of -your text, you might get a nicer look by using ``double'' line -spacing. Put the @code{\linespread@{1.6@}} command into the preamble of -your document. Then the line spacing will not be increased between the -lines where you have music printed with the smallest font size. - -Lilypond-book does know about @code{\onecolumn} and @code{\twocolumn}. -So the music will be adjusted to the new linewith: - -Verbatim environments will also ignore the page margins. That is -a feature of La@TeX{}. (But you usually put things inside a verbatim -environment when you don't want La@TeX{} to do any linebreaking) - -@end ignore diff --git a/Documentation/user/lilypond.tely b/Documentation/user/lilypond.tely index d0034f88a7..96f3ae35b6 100644 --- a/Documentation/user/lilypond.tely +++ b/Documentation/user/lilypond.tely @@ -72,7 +72,6 @@ this and other documentation. * Tutorial:: A tutorial introduction to LilyPond. * Reference Manual:: Reference Manual. * Mutopia project:: Mutopia project. -* Tricks:: Features, tips and tricks. * Invoking LilyPond:: Operation. * Bug reports:: Where to report bugs. * ly2dvi:: Generating nice output with titles. @@ -97,7 +96,6 @@ this and other documentation. @mbinclude tutorial.itely @mbinclude refman.itely @mbinclude mutopia.itely -@mbinclude tricks.itely @mbinclude internals.itely @mbinclude invoking.itexi @mbinclude bugs.itexi diff --git a/Documentation/user/mutopia.itely b/Documentation/user/mutopia.itely index 810893784e..1ce696d77f 100644 --- a/Documentation/user/mutopia.itely +++ b/Documentation/user/mutopia.itely @@ -1,19 +1,26 @@ - @node Mutopia project @chapter Mutopia project @cindex mutopia project @cindex sheet music archive +[TODO: + +* different name. Ports sucks + +* drop for 1.4 + +* mutopia is rather offtopic in the lilypond manual -The Mutopia project needs your help. Mutopia is a collection of -public domain sheet music. All the music on Mutopia is completely -free to download, print out, perform and distribute. Mutopia is -similar in spirit to Project Gutenburg - but consists of a growing -collection of free music. You can help the project by entering music -(either by hand, or by converting from scans or MIDI) and submitting -it. Point your browser to the @uref{http://www.mutopiaproject.org}. +] +Mutopia is a collection of public domain sheet music. All the music +on Mutopia is completely free to download, print out, perform and +distribute. Mutopia is similar in spirit to Project Gutenburg. You can +help the project by entering music (either by hand, or by converting +from scans or MIDI) and submitting it. Point your browser to the +@uref{http://www.mutopiaproject.org}. + @menu * Mutopia ports collection:: @end menu @@ -23,22 +30,20 @@ it. Point your browser to the @uref{http://www.mutopiaproject.org}. @cindex mutopia ports collection -We're working on a ports collection for LilyPond. The aim is to make -all music in Mutopia very easily accessible for LilyPond users -to study, edit and print. - -A somewhat functional experimental tree will be available in version -1.3.141. It should then be very easy to +The ports collection to makes all music in Mutopia very easily +accessible for LilyPond users to study, edit and print. The +ports-system performs the following functions: @enumerate 1 - download anything from Mutopia - compile for printing or for Mutopia submission - publish and package for Mutopia +@item download anything from Mutopia +@item compile for printing or for Mutopia submission +@item publish and package for Mutopia @end enumerate Type @samp{make help} in @file{ports} directory to see possible targets. +@ignore [TODO] Now that we have the @samp{make sync} target, maybe we should @@ -73,3 +78,5 @@ $ make mutopia @end example Disadvantage: no clue of available titles. +@end ignore + diff --git a/Documentation/user/refman.itely b/Documentation/user/refman.itely index ee400db07a..8ce5bf8e23 100644 --- a/Documentation/user/refman.itely +++ b/Documentation/user/refman.itely @@ -41,6 +41,7 @@ revision of this document was for LilyPond 1.3.141. * Page layout:: * Sound:: * Music entry:: +* Skipping corrected music:: * Interpretation context:: * Syntactic details:: * Lexical details:: @@ -674,80 +675,77 @@ settings. @c . {Polyphony} @node Polyphony @section Polyphony -@cindex Polyphony +@cindex polyphony -[TODO: collisions, rest-collisinos, voiceX identifiers, how to -which contexts to instantiate. some small examples? ] +Polyphonic parts, i.e. parts with more than one voice on a staff can be +typeset with LilyPond. To use this, instantiate a separate Voice +context for each part, and assign a stem direction to each part. +@lilypond[fragment,verbatim] +\context Staff +< \context Voice = VA { \stemUp b'4 a' g' f' e' } + \context Voice = VB { \stemDown g'4 g' g' g' g' } > +@end lilypond + +When there are more than two voices on a staff, you must also indicate +which voice should moved horizontally in case of a collision. This can +be done with the identifiers @code{\shiftOff}, @code{\shiftOn}, +@code{\shiftOnn}, etc. (which sets grob property @code{horizontal-shift} +in @code{NoteColumn}). + +@lilypond[fragment, verbatim] + \context Staff \notes\relative c''< + \context Voice=one { + \shiftOff \stemUp e4 + } + \context Voice=two { + \shiftOn \stemUp cis + } + \context Voice=three { + \shiftOnn \stemUp ais + } + \context Voice=four { + \shiftOnnn \stemUp fis-2 + } + > +@end lilypond +The most convenient way is to use the identifiers @code{\voiceOne} +through @code{\voiceFour}, which also set slur and tie directions in the +correct manner. + +@lilypond[singleline, verbatim] +\relative c'' +\context Staff < \context Voice = VA { \voiceOne cis2 b } + \context Voice = VB { \voiceThree b4 ais ~ ais4 gis4 } + \context Voice = VC { \voiceTwo fis4~ fis4 f ~ f } > +@end lilypond + + +LilyPond also vertically shifts rests that are opposite of a stem. + +@lilypond[singleline,verbatim] +\context Staff < +\context Voice { \stemUp c''4 } +\context Voice =VB { r4 } +> +@end lilypond + +Note head collisions (horizontal shifting of note heads) are handled by +the @code{NoteCollision} grob. @code{RestCollision} handles vertical +shifting of rests. + +@cindex @code{NoteCollision} +@cindex @code{RestCollision} -@table @code -@cindex @code{\shiftOff} - @item @code{\shiftOff} - Disable horizontal shifting of note heads that collide. - -@cindex @code{\shiftOn} - @item @code{\shiftOn} - Enable note heads that collide with other note heads to be - shifted horiztonally. Also @code{\shiftOnn} and @code{\shiftOnnn} -set different shift values. - -@cindex @code{\stemBoth} - @item @code{\stemBoth} - Allow stems and beams to point either upwards or - downwards, decided automatically by LilyPond. - -@cindex @code{\stemDown} - @item @code{\stemDown} - Force stems and beams to point down. - -@cindex @code{\stemUp} - @item @code{\stemUp} - Force stems and beams to point up. -@end table -@cindex @code{\slurBoth} -@cindex @code{\slurDown} -@cindex @code{\slurUp} -Similarly, for slurs use -@code{\slurBoth}, -@code{\slurDown}, -@code{\slurUp}. - -@cindex @code{\tieBoth} -@cindex @code{\tieDown} -@cindex @code{\tieUp} -For ties use -@code{\tieBoth}, -@code{\tieDown}, -@code{\tieUp}. - -@cindex @code{\dynacmicBoth} -@cindex @code{\dynamicDown} -@cindex @code{\dynamicUp} -For dynamics use -@code{\dynamicBoth}, -@code{\dynamicDown}, -@code{\dynamicUp}. - -@c text scripts? articulation scripts? fingering? - -@cindex @code{\voiceOne} -@cindex @code{\voiceTwo} -@cindex @code{\voiceThree} -@cindex @code{\voiceFour} -@cindex @code{\oneVoice} -@cindex @code{\shiftOn} -@cindex @code{\shiftOff} - -If two voices sharing one staff have the same stem directions, their -note heads may collide. You can shift the note heads of one voice by -setting @code{\shiftOn}. This can be undone by setting -@code{\shiftOff}. - -For simple polyphonic music, shorthands are available that combine -directions and shift settings: @code{\voiceOne}, @code{\voiceTwo}, -@code{\voiceThree}, @code{\voiceFour} and @code{\oneVoice}. +@refbugs + +Resolving collisions is a very intricate subject, and LilyPond only +handles a few situations. When it can not cope, you are advised to use +@code{force-hshift} of the NoteColumn grob and @code{staff-position} of +the Rest grob to override typesetting decisions. +[TODO: doc merge-differently-dotted] @node Beaming @section Beaming @@ -2274,7 +2272,21 @@ used, for the next ones @code{instr} is used. @end lilypond This requires that you add the @code{Instrument_name_engraver} to the -staff context. +staff context. You can also use markup texts: + + +@lilypond[verbatim,singleline] +#(define text-flat + '((font-relative-size . -2 ) (music "accidentals--1"))) + +\score { \notes { + \property Staff.instrument = #`((kern . 0.5) (lines + "2 Clarinetti" (rows " (B" ,text-flat ")"))) + c'' 4 } + \paper { + \translator { \StaffContext + \consists "Instrument_name_engraver"; } } } +@end lilypond @node Transpose @@ -2567,12 +2579,17 @@ property. By assigning to that property (using plain @code{\property}), you can change the resulting grobs. @lilypond[verbatim, fragment] -c'4 \property Voice.Stem \override #'meta = #'((interfaces . ())) c'4 +c'4 \property Voice.Stem = #'((meta . ((interfaces . ())))) c'4 @end lilypond -The @code{\property} statement effectively empties the definition of the -Stem object. One of the effects is that property specifying how it +The @code{\property} assignment effectively empties the definition of +the Stem object. One of the effects is that property specifying how it should be printed is erased, with the effect of rendering it invisible. +The above assignment is available as a standard identifier, lest you +find this useful: +@example + \property Voice.Stem = \turnOff +@end example @cindex \override @cindex \revert @@ -2904,6 +2921,35 @@ avoided because this makes it impossible for LilyPond to compute the exact length of the string, which may lead to collisions. Also, @TeX{} commands won't work with direct postscript output. +@cindex metronome mark + +One practical application of complicated markup is to fake a metronome +marking: + +@lilypond[verbatim] +#(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"))) + +\score { + \notes\relative c'' { + a1^#`((rows (font-relative-size . -1)) ,dotted-eight-note " = 64") + } + \paper { + linewidth = -1.; + \translator{ + \ScoreContext + TextScript \override #'font-shape = #'upright + } + } +} +@end lilypond + + + @c . {Page layout} @node Page layout @section Page layout @@ -3297,8 +3343,6 @@ relocated, so this can also be used to shorten measures. A bar check is entered using the bar symbol, @code{|} - - @c . {Point and click} @node Point and click @subsection Point and click @@ -3367,6 +3411,24 @@ will complain about not finding @code{src:X:Y} files. Those complaints are harmless, and can be ignored. +@node Skipping corrected music +@section Skipping corrected music + +The property @code{Score.skipTypesetting} can be used to switch on and +off typesetting completely during the interpretation phase. When +typesetting is switched off, the music is processed much more quickly. +You can use this to skip over the parts of a score that you have already +checked for errors. + +@lilypond[fragment,singleline,verbatim] +\relative c'' { c8 d +\property Score.skipTypesetting = ##t + e f g a g c, f e d +\property Score.skipTypesetting = ##f +c d b bes a g c2 } +@end lilypond + + @node Interpretation context @section Interpretation context @@ -3909,7 +3971,8 @@ This means that @var{func} is applied to @var{music}. The function This example replaces the text string of a script. It also shows a dump of the music it processes, which is useful if you want to know more about how music is stored. -@lilypond[verbatim] + +@lilypond[verbatim,singleline] #(define (testfunc x) (if (equal? (ly-get-mus-property x 'text) "foo") (ly-set-mus-property x 'text "bar")) @@ -3924,15 +3987,36 @@ about how music is stored. } @end lilypond -For more information on what is possible, see the @ref{Tricks} and the -automatically generated documentation. +For more information on what is possible, see the automatically +generated documentation. Directly accessing internal representations is dangerous: the implementation is subject to changes, so you should avoid this feature if possible. - - + +A final example is a function that reverses a piece of music in time: + +@lilypond[verbatim,singleline] +#(define (reverse-music music) + (let* ((elements (ly-get-mus-property music 'elements)) + (reversed (reverse elements)) + (span-dir (ly-get-mus-property music 'span-direction))) + (ly-set-mus-property music 'elements reversed) + (if (dir? span-dir) + (ly-set-mus-property music 'span-direction (- span-dir))) + (map reverse-music reversed) + music)) + +music = \notes { c'4 d'4( e'4 f'4 } + +\score { \context Voice { + \music + \apply #reverse-music \music + } +} +@end lilypond + @c . {Span requests} @menu diff --git a/Documentation/user/tricks.itely b/Documentation/user/tricks.itely deleted file mode 100644 index 6dd0de0430..0000000000 --- a/Documentation/user/tricks.itely +++ /dev/null @@ -1,267 +0,0 @@ -@c -*-texinfo-*- -@c Note: -@c -@c A menu is needed before every deeper *section nesting of @nodes -@c Run M-x texinfo-all-menus-update -@c to automagically fill in these menus -@c before saving changes - -@ignore - -TODO - * cue notes - * different staff sizes - * font selection - - * move some stuff to refman - * merge some stuff with refman entries - - * add @ref{}s to lilypond-internals: - @rgrob{Name} to grob - @reng{Name} to engraver - - there's a very simple, very general noXXX mechanism; try - -noop \property Staff.VoltaBrace = #'() -yes: \property Staff.VoltaBracket = #'((meta . ((interfaces . ())))) - - - visibility? - brew_molecule? -@end ignore - - -@node Tricks -@chapter Tricks - -@menu -* Manual beam settings:: Manual beam settings -* Engraver hacking:: Engraver hacking -* Markup text:: Markup text -* Apply hacking:: Apply hacking -* Embedded TeX:: Embedded TeX -* Embedded PostScript:: Embedded PostScript -@end menu - - -@node Manual beam settings -@section Manual beam settings -@cindex beams -@cindex beam settings -@cindex manual beams - - -@c auto knees - - -@cindex @code{no-stem-extend} - -Conventionally, stems and beams extend to the middle staff line. This -extension can be controlled through @code{Voice.Stem}'s grob-property -@code{no-stem-extend}: - -@quotation -@lilypond[fragment,relative,verbatim] - \grace a'8 a4 - \property Voice.Stem \set #'no-stem-extend = ##t - \grace g8 g4 [g8 g] -@end lilypond -@end quotation - -The direction of a perfectly centred beams can be -controlled through @code{Voice.Beam}'s grob-property -@code{default-neutral-direction} - -@quotation -@lilypond[fragment,relative,verbatim] - [b''8 b] - \property Voice.Beam \set #'default-neutral-direction = #-1 - [b b] -@end lilypond -@end quotation - -There are several ways to calculate the direction of a beam. -@table @code -@item majority -number count of up or down notes -@item mean -mean center distance of all notes -@item median -mean centre distance weighted per note -@end table - -You can spot the differences of these settings from these simple -examples: - -@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 -@end quotation - -@quotation -@lilypond[fragment,relative,verbatim] - \time 3/8; - [d''8 a a] - \property Voice.Beam \set #'dir-function = #beam-dir-mean - [d a a] - \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 Engraver hacking -@section Engraver hacking - -No time signature, no barlines... -@lilypond[verbatim] -\score { - \notes \relative c'' { - a b c d - d c b a - } - \paper { - linewidth = -1.; - \translator { - \StaffContext - whichBar = #"" - \remove "Time_signature_engraver"; - } - } -} -@end lilypond - -No staff, no clef, squash pitches -@lilypond[verbatim] -\score { - \notes { c4 c4 c8 c8 } - \paper { - linewidth = -1.; - \translator { - \StaffContext - \remove Staff_symbol_engraver; - \consists Pitch_squash_engraver; - \remove Clef_engraver; - } - } -} -@end lilypond - - - -@node Markup text -@section Markup text - - -@ignore - - -#(define text-flat '((font-relative-size . -2 ) (music "accidentals--1"))) - - \property VoiceCombineStaff.instrument = #`((kern . 0.5) (lines - "2 Clarinetti" (rows " (B" ,text-flat ")"))) - - % Ugh, markup burps - \property StaffCombineStaff.instrument = #'((kern . 0.5) - (lines "Violoncello" (rows " e") (rows "Contrabasso"))) - - -@end ignore - - - -Metrome hack... - -[todo: hack this into C++, use \tempo] - -@lilypond[verbatim] -#(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"))) - -\score { - \notes\relative c'' { - a1^#`((rows (font-relative-size . -1)) ,dotted-eight-note " = 64") - } - \paper { - linewidth = -1.; - \translator{ - \ScoreContext - TextScript \override #'font-shape = #'upright - } - } -} -@end lilypond - - -@c equalizer - - -@node Apply hacking -@section Apply hacking - -[Add Parenthesed note head example?] - -[Add Smart transpose example?] - - -@lilypond[verbatim] -music = \notes { c'4 d'4( e'4 f'4 } - -#(define (reverse-music music) - (let* ((elements (ly-get-mus-property music 'elements)) - (reversed (reverse elements)) - (span-dir (ly-get-mus-property music 'span-direction))) - - (ly-set-mus-property music 'elements reversed) - - (if (dir? span-dir) - (ly-set-mus-property music 'span-direction (- span-dir))) - - (map reverse-music reversed) - - music)) - -\score { - \context Voice { - \music - \apply #reverse-music \music - } - \paper { linewidth = -1.; } -} -@end lilypond - -@node Embedded TeX -@section Embedded TeX -@lilypond[fragment,relative,verbatim] - a''^"3 $\\times$ \\`a deux" -@end lilypond - -@node Embedded PostScript -@section Embedded PostScript - -Arbitrary lines and curves not supported... - -[TODO:] Make a direct postscript command? - -@lilypond[verbatim] -\score { - \notes \relative c'' { - a-#"\\embeddedps{3 4 moveto 5 3 rlineto stroke}" - -#"\\embeddedps{ [ 0 1 ] 0 setdash 3 5 moveto 5 -3 rlineto stroke}" - b-#"\\embeddedps{3 4 moveto 0 0 1 2 8 4 20 3.5 rcurveto stroke}" - s2 - a'1 - } - \paper { linewidth = 70 * \staffspace; } -} -@end lilypond diff --git a/Documentation/user/tutorial.itely b/Documentation/user/tutorial.itely index f4172bdda1..0a23734104 100644 --- a/Documentation/user/tutorial.itely +++ b/Documentation/user/tutorial.itely @@ -12,6 +12,7 @@ * A piano excerpt:: Piano music * An orchestral score:: * Part extraction:: +* Latex and texinfo integration:: * end of tutorial:: The end * Pre-cooked makefile:: @end menu @@ -1819,6 +1820,238 @@ bars. skipBars = ##t @end example +@node Latex and texinfo integration +@section Latex and texinfo integration + +So what does this look like? Well, here is an example: +@lilypond[veryverbatim, intertext="produces this music:"] +\score{ + \notes\relative c'{ + \time 5/8; + [e16( g b c a g][e a b d] | )e2 d,8 | + [e16( g b c a g][e a b d] | )b2 [a16( f] | + [e a b d] )e4 c8 | [es16( bes a as g es][d c b! )g] | + [f( a b d b a][f a b d] | )e2 + } +} +@end lilypond +If you are lucky, the above example show a nice feature of LilyPond +and La@TeX{}. Since LilyPond can output the music as @TeX{} graphics, +La@TeX{} can insert pagebreaks between the lines of music. + +Notice that there is no @code{\paper} statement in the example +above. Lilypond-book will insert some code for you that defines the +linewidth and the font to use. If you don't want to change the default, +there is no need to put an empty @code{\paper@{@}} inside the @code{\score}. +In the example above, something like +this might be inserted before your code: +@example +\include "paper16.ly" +\paper@{ \paper_sixteen + linewidth = 390.\pt; + castingalgorithm = \Gourlay; +@} +@end example +The actual values for linewidth will differ depending on papersize and +number of columns. Also, if you use a different fontsize for the +music, another file than @code{paper16.ly} will be included. + +If you want to make the music not so wide, you can insert a +@code{\paper} statement that set the linewidth: + +@lilypond[veryverbatim, intertext="produces this music:"] +\score{ + \notes\relative c'{ + \time 5/8; + [e16( g b c a g][e a b d] | )e2 d,8 | + [e16( g b c a g][e a b d] | )b2 [a16( f] | + [e a b d] )e4 c8 | [es16( bes a as g es][d c b! )g] | + [f( a b d b a][f a b d] | )e2 + } + \paper{linewidth = 10.\cm;} +} +@end lilypond + +Very often, if you mix music and text, the music is often only a +few notes or at most a few bars. This music should be as short as +possible and not stretched to be aligned to the right margin. + +If you only write voice-contents in the lilypond block, @command{lilypond-book} +will set the @code{linewidth} variable to -1, so Lilypond +will make the music as short as possible but without breaking the +line. Here is a well know harmonic progression: +@lilypond[veryverbatim, intertext="produce a well known harmonic progression:"] + \context Voice { } +@end lilypond + +If you want to place music examples in the text, +@lilypond[eps] + \context Voice { } +@end lilypond +, you can use the @code{eps} option. This will create the music as +eps graphics and include it into the document with the +@code{\includegraphics} command. + +The code used look like this: +@example +@@lilypond[eps] + \context Voice @{ @} +@@end lilypond +@end example + +You can also use the @code{eps} option if the block is a complete +lilypond source. This 5 cm long empty line, +@lilypond[eps] +\score{ + \notes{s} + \paper{ linewidth = 5.\cm;} +} +@end lilypond +was created with this code: +@example +@@lilypond[eps] +\score@{ + \notes@{s@} + \paper@{ linewidth = 5.\cm;@} +@} +@@end lilypond +@end example + +To avoid that La@TeX{} places the music on a line of its one, there should +be no empty lines between the normal text and the lilypond +environment. + +You can also use @code{lilypondfile} (on a separate line, FIXME), to +include another file. + +@subsection Fontsize options + +You can use all lilypond fontsizes in @command{lilypond-book}. The +default 16pt fontsize is probably to big to be included in the middle of +the text, 11pt or 13pt is probably better. + +The code can look like this: +@example +@@lilypond[13pt, eps] + +@@end lilypond +@end example + +The following options set the fontsize: +@itemize +@item @code{11pt} +@lilypond[11pt, eps] + \relative c'{ + r16 [c d e][f d e c] [g'8 c][b-\prall c] | + [d16 g, a b][c a b g][d'8 g f-\prall g] + } +@end lilypond +@item @code{13pt} +@lilypond[13pt, eps] + \relative c'{ + r16 [c d e][f d e c] [g'8 c][b-\prall c] | + [d16 g, a b][c a b g][d'8 g f-\prall g] + } +@end lilypond +@item @code{16pt} +@lilypond[16pt, eps] + \relative c'{ + r16 [c d e][f d e c] [g'8 c][b-\prall c] | + [d16 g, a b][c a b g][d'8 g f-\prall g] + } +@end lilypond +@item @code{20pt} +@lilypond[20pt, eps] + \relative c'{ + r16 [c d e][f d e c] [g'8 c][b-\prall c] | + [d16 g, a b][c a b g][d'8 g f-\prall g] + } +@end lilypond +@item @code{26pt} +@lilypond[26pt, eps] + \relative c'{ + r16 [c d e][f d e c] [g'8 c][b-\prall c] | + } +@end lilypond +@end itemize + + +@subsection More options + +@itemize +@item The @code{singleline} option set @code{linewidth} to -1.0. +@item The @code{multiline} option set @code{linewidth} to a value letting +the music be aligned to the right margin. The music can span several +lines. +@end itemize + +@subsection Just in case... +The options @code{fragment} and @code{nofragment} will override +@command{lilypond-book} when it scans the lilypond code to see if it is voice +contents or complete code. This might be useful if @command{lilypond-book} choose +wrong. + +Since there is no finder's fee which doubles every year, there is no +need to wait for the price money to grow. So send a bug report today +if you need this one of these options. + +@subsection Examples + +This was all options to @code{\begin}. The rest of the lilypond +document will show some ways you can use lilypond in +La@TeX{} documents. It will also act as a simple test-suite for +lilypond-book. You can place @code{eps} lilypond in and marginspars just +as any other included eps graphics. + +@lilypond +\score{ + \notes\relative c'{ + \time 12/8; + r4-\fermata [b16-.( )b-.] [f'8-- dis16-.( )dis-. gis8--] + [f16-.( )f-. dis8-- gis16-.( )gis-.] cis4.-\fermata | + + r4.-\fermata [cis,16 cis g'8 f16 f b8][g16 g f8 b16 b] dis4.-\fermata + } + \paper{linewidth = 7.\cm;} +} +@end lilypond + + +To the right you can see some bars from the trumpet fanfara from the +beginning of the fantastic street opera ``Houdini the Great'', by the +Danish composer Andy Pape. The music is put inside a +@code{floatingfigure} environment, and the music will be aligned by +the right marging if you set floatingfigure width and lilypond linewidth +to the same value. The code looks like this: + +@lilypond[verbatim] +\score{ + \notes\relative c'{ + \time 12/8; + r4.-\fermata [b16-.( )b-.] [f'8-- dis16-.( )dis-. gis8--] + [f16-.( )f-. dis8-- gis16-.( )gis-.] cis8.-\fermata | + + r4.-\fermata [cis,16 cis g'8 f16 f b8] + [g16 g f8 b16 b] dis4.-\fermata + } + \paper{linewidth = 7.\cm;} +} +@end lilypond + +If you have a lot of small music examples like this in the middle of +your text, you might get a nicer look by using ``double'' line +spacing. Put the @code{\linespread@{1.6@}} command into the preamble of +your document. Then the line spacing will not be increased between the +lines where you have music printed with the smallest font size. + +Lilypond-book does know about @code{\onecolumn} and @code{\twocolumn}. +So the music will be adjusted to the new linewith: + +Verbatim environments will also ignore the page margins. That is +a feature of La@TeX{}. (But you usually put things inside a verbatim +environment when you don't want La@TeX{} to do any linebreaking) + + @node end of tutorial @section The end diff --git a/INSTALL.txt b/INSTALL.txt index 386e18a831..b4eeade294 100644 --- a/INSTALL.txt +++ b/INSTALL.txt @@ -121,9 +121,10 @@ Website The website is the most convenient form to use for reading the documentation on-line documentation. It is made by entering - make htmldoc - This does require a functioning LilyPond. The binary doesn't have to -be installed. + + make web-doc + This does require a functioning LilyPond. The executable doesn't +have to be installed, though. If you want to auto-generate Lily's website, you'll need some additional conversion tools. diff --git a/VERSION b/VERSION index 43882c53d4..2dd6a9f23e 100644 --- a/VERSION +++ b/VERSION @@ -1,8 +1,8 @@ PACKAGE_NAME=LilyPond MAJOR_VERSION=1 MINOR_VERSION=3 -PATCH_LEVEL=142 -MY_PATCH_LEVEL=jcn1 +PATCH_LEVEL=143 +MY_PATCH_LEVEL= # use the above to send patches: MY_PATCH_LEVEL is always empty for a # released version. diff --git a/input/scarlatti-paper.ly b/input/scarlatti-paper.ly index 8751a1ffed..3056923278 100644 --- a/input/scarlatti-paper.ly +++ b/input/scarlatti-paper.ly @@ -1,18 +1,10 @@ \paper{ - %my standard paper block - - -% 0=\font "feta19" -% -1=\font "feta16" -% \stylesheet #(make-style-sheet 'paper19) - indent=0.; linewidth=188.\mm; \translator{ \PianoStaffContext - %VerticalAlignment \set #'forced-distance = #8.4 VerticalAlignment \override #'forced-distance = #8.4 } \translator{\StaffContext diff --git a/input/test/beam-dir-functions.ly b/input/test/beam-dir-functions.ly new file mode 100644 index 0000000000..613eec4d51 --- /dev/null +++ b/input/test/beam-dir-functions.ly @@ -0,0 +1,38 @@ +\header { +texidoc = " + +There are several ways to calculate the direction of a beam. +@table @code +@item majority +number count of up or down notes +@item mean +mean center distance of all notes +@item median +mean centre distance weighted per note +@end table + +You can spot the differences of these settings from these simple +examples: + +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. +"; +} + +\paper { linewidth = -1.;} +\score { \notes \relative c { + [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] +}} +\score { \notes \relative c { + \time 3/8; + [d''8 a a] + \property Voice.Beam \set #'dir-function = #beam-dir-mean + [d a a] + \property Voice.Beam \set #'dir-function = #beam-dir-median + [d a a] +}} + diff --git a/input/test/default-neutral-dir.ly b/input/test/default-neutral-dir.ly new file mode 100644 index 0000000000..5aeb134b12 --- /dev/null +++ b/input/test/default-neutral-dir.ly @@ -0,0 +1,12 @@ +\header { texidoc = " +The direction of a perfectly centred beams can be +controlled through @code{Voice.Beam}'s grob-property +@code{default-neutral-direction} +";} + +\paper { linewidth = -1.;} +\score {\notes \relative c { + [b''8 b] + \property Voice.Beam \set #'default-neutral-direction = #-1 + [b b] +}} diff --git a/input/test/stem-extend.ly b/input/test/stem-extend.ly new file mode 100644 index 0000000000..101e95ecfd --- /dev/null +++ b/input/test/stem-extend.ly @@ -0,0 +1,12 @@ +\header { texidoc = " +Conventionally, stems and beams extend to the middle staff line. This +extension can be controlled through @code{Voice.Stem}'s grob-property +@code{no-stem-extend}: +";} + +\paper { linewidth = -1.;} +\score {\notes \relative c { + \grace a'8 a4 + \property Voice.Stem \set #'no-stem-extend = ##t + \grace g8 g4 [g8 g] +}} diff --git a/input/tricks/embedded-postscript.ly b/input/tricks/embedded-postscript.ly index 491257bbb1..557c9ba403 100644 --- a/input/tricks/embedded-postscript.ly +++ b/input/tricks/embedded-postscript.ly @@ -1,3 +1,10 @@ +\header { + texidoc = "By inserting the @TeX{} command \embeddedps, you can +insert postscript directly into the output. + +TODO: make molecule-callback to do this. + "; +} \score { \notes \relative c'' { diff --git a/lily/auto-beam-engraver.cc b/lily/auto-beam-engraver.cc index 6f0f0e1dab..b3353789cd 100644 --- a/lily/auto-beam-engraver.cc +++ b/lily/auto-beam-engraver.cc @@ -218,6 +218,11 @@ Auto_beam_engraver::consider_end (Moment test_mom) Spanner* Auto_beam_engraver::create_beam_p () { + if (to_boolean (get_property ("skipTypesetting"))) + { + return 0; + } + Spanner* beam_p = new Spanner (get_property ("Beam")); for (int i = 0; i < stem_l_arr_p_->size (); i++) { @@ -258,6 +263,7 @@ Auto_beam_engraver::junk_beam () stem_l_arr_p_ = 0; delete grouping_p_; grouping_p_ = 0; + shortest_mom_ = Moment (1, 8); } @@ -269,6 +275,7 @@ Auto_beam_engraver::end_beam () junk_beam (); } else + { finished_beam_p_ = create_beam_p (); if (finished_beam_p_) @@ -276,8 +283,9 @@ Auto_beam_engraver::end_beam () delete stem_l_arr_p_; stem_l_arr_p_ = 0; grouping_p_ = 0; - shortest_mom_ = Moment (1, 8); } + + shortest_mom_ = Moment (1, 8); } void diff --git a/lily/beam.cc b/lily/beam.cc index 2e0615baf4..901d56ab21 100644 --- a/lily/beam.cc +++ b/lily/beam.cc @@ -751,7 +751,9 @@ Beam::set_beaming (Grob*me,Beaming_info_list *beaming) FIXME: clean me up. */ Molecule -Beam::stem_beams (Grob*me,Item *here, Item *next, Item *prev) +Beam::stem_beams (Grob*me,Item *here, Item *next, Item *prev, + Real dy, Real dydx + ) { // ugh -> use commonx if ((next && ! (next->relative_coordinate (0, X_AXIS) > here->relative_coordinate (0, X_AXIS))) || @@ -774,8 +776,6 @@ Beam::stem_beams (Grob*me,Item *here, Item *next, Item *prev) Real dx = visible_stem_count (me) ? last_visible_stem (me)->relative_coordinate (0, X_AXIS) - first_visible_stem (me)->relative_coordinate (0, X_AXIS) : 0.0; - Real dy = gh_scm2double (me->get_grob_property ("dy")); - Real dydx = dy && dx ? dy/dx : 0; Molecule leftbeams; Molecule rightbeams; @@ -898,10 +898,18 @@ Beam::brew_molecule (SCM smob) dx = stems.top ()->relative_coordinate (0, X_AXIS) - x0; } + + + /* + TODO: the naming of the grob properties sucks. + */ + SCM dy_s = me->get_grob_property ("dy"); + SCM y_s = me->get_grob_property ("y"); + - Real dy = gh_scm2double (me->get_grob_property ("dy")); + Real dy = gh_number_p (dy_s) ? gh_scm2double (dy_s) : 0.0; Real dydx = dy && dx ? dy/dx : 0; - Real y = gh_scm2double (me->get_grob_property ("y")); + Real y = gh_number_p (y_s) ? gh_scm2double (y_s) : 0.0; for (int j=0; j 0)? stems[j-1] : 0; Item * next = (j < stems.size ()-1) ? stems[j+1] :0; - Molecule sb = stem_beams (me, i, next, prev); + Molecule sb = stem_beams (me, i, next, prev, dy, dydx); Real x = i->relative_coordinate (0, X_AXIS)-x0; sb.translate (Offset (x, x * dydx + y)); mol.add_molecule (sb); diff --git a/lily/grace-engraver-group.cc b/lily/grace-engraver-group.cc index fd60e0de66..72c1ebdcc6 100644 --- a/lily/grace-engraver-group.cc +++ b/lily/grace-engraver-group.cc @@ -69,9 +69,13 @@ void Grace_engraver_group::one_time_step () { calling_self_b_ = true; - process_music (); - announces (); - pre_move_processing (); + + if (!to_boolean (get_property (ly_symbol2scm ("skipTypesetting")))) + { + process_music (); + announces (); + } + stop_translation_timestep (); check_removal (); calling_self_b_ = false; } diff --git a/lily/grace-performer-group.cc b/lily/grace-performer-group.cc index 54fbce92d9..58a3f1fdde 100644 --- a/lily/grace-performer-group.cc +++ b/lily/grace-performer-group.cc @@ -73,7 +73,7 @@ Grace_performer_group::one_time_step () calling_self_b_ = true; // process_music (); announces (); - pre_move_processing (); + stop_translation_timestep (); check_removal (); calling_self_b_ = false; } diff --git a/lily/include/beam.hh b/lily/include/beam.hh index 082ceb630e..36ad55aec7 100644 --- a/lily/include/beam.hh +++ b/lily/include/beam.hh @@ -39,7 +39,7 @@ public: DECLARE_SCHEME_CALLBACK (user_override, (SCM)); DECLARE_SCHEME_CALLBACK (do_quantise_y, (SCM)); - static Molecule stem_beams (Grob*,Item *here, Item *next, Item *prev); + static Molecule stem_beams (Grob*,Item *here, Item *next, Item *prev, Real, Real); private: static Direction get_default_dir (Grob*); diff --git a/lily/include/translator.hh b/lily/include/translator.hh index d0c14c1424..112c21496f 100644 --- a/lily/include/translator.hh +++ b/lily/include/translator.hh @@ -38,9 +38,8 @@ public: Translator_group * daddy_trans_l_ ; - void pre_move_processing (); void announces (); - void post_move_processing (); + void removal_processing (); /** ask daddy for a feature diff --git a/lily/multi-measure-rest-engraver.cc b/lily/multi-measure-rest-engraver.cc index 9720596664..0a0ec83780 100644 --- a/lily/multi-measure-rest-engraver.cc +++ b/lily/multi-measure-rest-engraver.cc @@ -35,7 +35,6 @@ protected: virtual void stop_translation_timestep (); virtual void start_translation_timestep (); virtual void finalize (); - virtual void create_grobs (); private: Span_req * new_req_l_; @@ -114,12 +113,6 @@ Multi_measure_rest_engraver::process_music () new_req_l_ =0; } -} - -void -Multi_measure_rest_engraver::create_grobs () -{ - if (busy_span_req_l_ && !mmrest_p_) { mmrest_p_ = new Spanner (get_property ("MultiMeasureRest")); @@ -131,6 +124,8 @@ Multi_measure_rest_engraver::create_grobs () start_measure_i_ = gh_scm2int (get_property ("currentBarNumber")); } + + } void @@ -145,7 +140,8 @@ Multi_measure_rest_engraver::stop_translation_timestep () { typeset_grob (mmrest_p_); /* - we must keep mmrest_p_ around to set measure-count. + we must keep mmrest_p_ around to set measure-count, so + no mmrest_p_ = 0 here. */ } diff --git a/lily/note-heads-engraver.cc b/lily/note-heads-engraver.cc index 2b3b9e0827..2d13e7a7a8 100644 --- a/lily/note-heads-engraver.cc +++ b/lily/note-heads-engraver.cc @@ -26,7 +26,7 @@ class Note_heads_engraver : public Engraver Moment note_end_mom_; public: VIRTUAL_COPY_CONS (Translator); - + protected: virtual void start_translation_timestep (); virtual bool try_music (Music *req_l) ; @@ -35,7 +35,6 @@ protected: virtual void stop_translation_timestep (); }; - bool Note_heads_engraver::try_music (Music *m) { @@ -131,6 +130,7 @@ Note_heads_engraver::stop_translation_timestep () void Note_heads_engraver::start_translation_timestep () { + /* TODO:make this settable? */ if (note_end_mom_ > now_mom ()) @@ -147,6 +147,8 @@ Note_heads_engraver::start_translation_timestep () else e->forbid_breaks (); // guh. Use properties! } + + } diff --git a/lily/rest-collision.cc b/lily/rest-collision.cc index bd4c308d0f..591d90b386 100644 --- a/lily/rest-collision.cc +++ b/lily/rest-collision.cc @@ -76,6 +76,10 @@ head_characteristic (Grob * col) /* TODO: fixme, fucks up if called twice on the same set of rests. + + TODO: look at horizontal-shift to determine ordering between rests + for more than two voices. + */ SCM Rest_collision::do_shift (Grob *me, SCM elts) diff --git a/lily/score-engraver.cc b/lily/score-engraver.cc index a85c72c895..c387a33959 100644 --- a/lily/score-engraver.cc +++ b/lily/score-engraver.cc @@ -59,7 +59,7 @@ Score_engraver::prepare (Moment w) Global_translator::prepare (w); make_columns (w); - post_move_processing (); + start_translation_timestep (); } void @@ -115,9 +115,14 @@ Score_engraver::finalize () void Score_engraver::one_time_step () { - process_music (); - announces (); - pre_move_processing (); + if (!to_boolean (get_property (ly_symbol2scm("skipTypesetting")))) + { + process_music (); + announces (); + } + + + stop_translation_timestep (); check_removal (); } diff --git a/lily/score-performer.cc b/lily/score-performer.cc index e3d966e6e8..63af656abe 100644 --- a/lily/score-performer.cc +++ b/lily/score-performer.cc @@ -60,7 +60,7 @@ Score_performer::prepare (Moment m) Global_translator::prepare (m); audio_column_l_ = new Audio_column (m); play_element (audio_column_l_); - post_move_processing (); + start_translation_timestep (); } @@ -70,7 +70,7 @@ Score_performer::one_time_step () // fixme: put this back. // process_music (); announces (); - pre_move_processing (); + stop_translation_timestep (); check_removal (); } diff --git a/lily/tie-engraver.cc b/lily/tie-engraver.cc index 24a608fa02..ca954b5e08 100644 --- a/lily/tie-engraver.cc +++ b/lily/tie-engraver.cc @@ -208,12 +208,18 @@ Tie_engraver::stop_translation_timestep () } now_heads_.clear (); + /* + we don't warn for no ties, since this happens naturally when you + use skipTypesetting. */ + +#if 0 if (req_l_ && !tie_p_arr_.size ()) { /* How to shut up this warning, when no notes appeared because they were suicided by Thread_devnull_engraver? */ req_l_->origin ()->warning (_ ("No ties were created!")); } +#endif for (int i=0; i< tie_p_arr_.size (); i++) { diff --git a/lily/translator-group.cc b/lily/translator-group.cc index ff63c26e16..6bda7b9030 100644 --- a/lily/translator-group.cc +++ b/lily/translator-group.cc @@ -372,13 +372,13 @@ Translator_group::execute_single_pushpop_property (SCM prop, SCM eltprop, SCM va void Translator_group::stop_translation_timestep () { - each (&Translator::pre_move_processing); + each (&Translator::stop_translation_timestep); } void Translator_group::start_translation_timestep () { - each (&Translator::post_move_processing); + each (&Translator::start_translation_timestep); } void diff --git a/lily/translator.cc b/lily/translator.cc index 6183057b85..03adb249f9 100644 --- a/lily/translator.cc +++ b/lily/translator.cc @@ -82,11 +82,6 @@ Translator::now_mom () const -void -Translator::post_move_processing () -{ - start_translation_timestep (); -} void Translator::removal_processing () @@ -102,14 +97,6 @@ Translator::announces () } -void -Translator::pre_move_processing () -{ - stop_translation_timestep (); -} - - - Music_output_def * Translator::output_def_l () const { diff --git a/make/out/lilypond.lsm b/make/out/lilypond.lsm index 54d0ab1b2f..df77291fd3 100644 --- a/make/out/lilypond.lsm +++ b/make/out/lilypond.lsm @@ -1,15 +1,15 @@ Begin3 Title: LilyPond -Version: 1.3.142 -Entered-date: 25MAR01 +Version: 1.3.143 +Entered-date: 26MAR01 Description: @BLURB@ Keywords: music notation typesetting midi fonts engraving Author: hanwen@cs.uu.nl (Han-Wen Nienhuys) janneke@gnu.org (Jan Nieuwenhuizen) Maintained-by: hanwen@stack.nl (Han-Wen Nienhuys) Primary-site: sunsite.unc.edu /pub/Linux/apps/sound/convert - 1000k lilypond-1.3.142.tar.gz + 1000k lilypond-1.3.143.tar.gz Original-site: ftp.cs.uu.nl /pub/GNU/LilyPond/development/ - 1000k lilypond-1.3.142.tar.gz + 1000k lilypond-1.3.143.tar.gz Copying-policy: GPL End diff --git a/make/out/lilypond.spec b/make/out/lilypond.spec index 6964856c54..572146d4a5 100644 --- a/make/out/lilypond.spec +++ b/make/out/lilypond.spec @@ -1,11 +1,11 @@ %define info yes Name: lilypond -Version: 1.3.142 +Version: 1.3.143 Release: 1 License: GPL Group: Applications/Publishing -Source0: ftp.cs.uu.nl:/pub/GNU/LilyPond/development/lilypond-1.3.142.tar.gz +Source0: ftp.cs.uu.nl:/pub/GNU/LilyPond/development/lilypond-1.3.143.tar.gz Summary: A program for printing sheet music. URL: http://www.cs.uu.nl/~hanwen/lilypond # Icon: lilypond-icon.gif diff --git a/scm/grob-property-description.scm b/scm/grob-property-description.scm index dbad3eee0a..b85ec0a97a 100644 --- a/scm/grob-property-description.scm +++ b/scm/grob-property-description.scm @@ -104,7 +104,19 @@ Align_interface::center_on_element). .") (grob-property-description 'dependencies list? "list of score-grob pointers that indicate who to compute first for certain global passes.") (grob-property-description 'details list? "alist of parameters for detailed grob behavior.") (grob-property-description 'dir-forced boolean? "set if direction has been forced; read by Beam.") -(grob-property-description 'dir-function procedure? "function of type (count total)->direction. Default value: beam-dir-majority, also available: beam-dir-mean, beam-dir-median.") +(grob-property-description 'dir-function procedure? "function of type (count total)->direction. Default value: beam-dir-majority, also available: beam-dir-mean, beam-dir-median. + +The ways to calculate the direction of a beam work as follows: +@table @code +@item majority +number count of up or down notes +@item mean +mean center distance of all notes +@item median +mean centre distance weighted per note +@end table + +") (grob-property-description 'dir-list list? "list of stem directions, needed for optical spacing correction.") (grob-property-description 'direction dir? "up or down, left or right?.") (grob-property-description 'direction-source ly-grob? "in case side-relative-direction is set, which grob to get the direction from .") diff --git a/scm/translator-property-description.scm b/scm/translator-property-description.scm index ba69b79bd0..cf2bd96fa5 100644 --- a/scm/translator-property-description.scm +++ b/scm/translator-property-description.scm @@ -259,6 +259,11 @@ r1 r1*3 R1*3 \\\\property Score.skipBars= ##t r1*3 R1*3 @end example ") +(translator-property-description 'skipTypesetting boolean? + "When true, all no typesetting is done at +this moment, causing the interpretation phase to go a lot faster. This can +help with debugging large scores.") + (translator-property-description 'slurBeginAttachment symbol? "translates to the car of grob-property 'attachment of NoteColumn. See @ref{Slur}.") diff --git a/scripts/lilypond-book.py b/scripts/lilypond-book.py index dfaf288dbb..e15ee356dd 100644 --- a/scripts/lilypond-book.py +++ b/scripts/lilypond-book.py @@ -42,7 +42,7 @@ import operator program_version = '@TOPLEVEL_VERSION@' if program_version == '@' + 'TOPLEVEL_VERSION' + '@': - program_version = '1.3.113' + program_version = '1.4pre' include_path = [os.getcwd()] diff --git a/stepmake/stepmake/toplevel-targets.make b/stepmake/stepmake/toplevel-targets.make index 975b3d2b1e..7d4380e305 100644 --- a/stepmake/stepmake/toplevel-targets.make +++ b/stepmake/stepmake/toplevel-targets.make @@ -75,6 +75,7 @@ local-help: po-replace do po-update and replace catalogs with msgmerged versions\n\ po-update update translation Portable Object database\n\ web update website in out-www\n\ + web-doc generate documentation website\n\ web-clean clean out-www\n\ \n\ Some of these top level targets (diff, dist, release) can be issued\n\ -- 2.39.2