]> git.donarmstrong.com Git - lilypond.git/commitdiff
''
authorHan-Wen Nienhuys <hanwen@xs4all.nl>
Sat, 29 Jun 2002 14:01:59 +0000 (14:01 +0000)
committerHan-Wen Nienhuys <hanwen@xs4all.nl>
Sat, 29 Jun 2002 14:01:59 +0000 (14:01 +0000)
14 files changed:
ChangeLog
Documentation/user/lilypond.tely
Documentation/user/macros.itexi
Documentation/user/refman.itely
Documentation/user/tutorial.itely
NEWS
input/tutorial/brahms-original.ly
input/tutorial/brahms-tweaked.ly
lily/phrasing-slur-engraver.cc
lily/separating-line-group-engraver.cc
lily/side-position-interface.cc
lily/slur-engraver.cc
scm/translator-property-description.scm
tex/lilyponddefs.tex

index 9268ecfc477514770d1168bdba708f9f69f13deb..ba863f785e2bcaca18ce6d430cfe2255e7ff1a2f 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -4,6 +4,11 @@
 
 2002-06-29  Han-Wen  <hanwen@cs.uu.nl>
 
+       * lily/(phrasing-)slur-engraver.cc: remove slur{Begin|End}Attachment.
+
+       * lily/separating-line-group-engraver.cc (acknowledge_grob):
+       ignore grobs with no-spacing-rods set.
+
        * Documentation/user/tutorial.itely (Fine tuning a piece): more tut.
 
        * scm/grob-description.scm (all-grob-descriptions): sort list
index 8aa44b9dfaf8ae295b20fd16e000fe9d69f66e20..a4641d2b8a029b1ae5d0527aadaf553432a2a0ed 100644 (file)
@@ -49,6 +49,7 @@ Tom Cato Amundsen.
 
 @end ifinfo
 
+
 @ifnottex
 @node Top
 @top
index 7902ad02d67906696727bf3f95138b7a4d8c097d..15e446bbab7b97bfe25fa68e25e5a4ccda235c87 100644 (file)
@@ -141,3 +141,12 @@ $\\flat$
 See @internalsref{\NAME\}
 @end macro
 @end ifhtml
+@ifnothtml
+@macro seeinternals{NAME}
+@end macro
+@macro internalsref{NAME}
+@cindex \NAME\
+\NAME\
+@end macro
+@end ifnothtml
+
index 38c8e1e3e607cfbe9ab597a909bc00f515a03a8a..aef034c34ff109b995fc961703a5c306a99fae79 100644 (file)
 
 
 
-@ifnothtml
-@macro seeinternals{NAME}
-@end macro
-@macro internalsref{NAME}
-@cindex \NAME\
-\NAME\
-@end macro
-@end ifnothtml
-
 @c .{Reference Manual}
 
 @node Reference Manual
@@ -1639,11 +1630,12 @@ For everyday use, we recommend the identifiers @code{\cresc},
 @cindex diminuendo
 
 Dynamics are grobs of @internalsref{DynamicText} and
-@internalsref{Hairpin}. Vertical positioning of these symbols is handled
-by the @internalsref{DynamicLineSpanner} grob.  If you want to adjust
-padding or vertical direction of the dynamics, you must set properties
-for the @internalsref{DynamicLineSpanner} grob. Predefined identifiers
-to set the vertical direction are \dynamicUp and \dynamicDown.
+@internalsref{Hairpin}. Vertical positioning of these symbols is
+handled by the @internalsref{DynamicLineSpanner} grob.  If you want to
+adjust padding or vertical direction of the dynamics, you must set
+properties for the @internalsref{DynamicLineSpanner} grob. Predefined
+identifiers to set the vertical direction are \dynamicUp and
+\dynamicDown.
 
 @cindex direction, of dynamics
 @cindex @code{\dynamicDown}
@@ -2013,7 +2005,9 @@ Pedals can also be indicated by a sequence of brackets, by setting the
 
 @lilypond[fragment,verbatim]
 \property Staff.SustainPedal \override #'pedal-type = #'bracket
-c''4 \sustainDown d''4 e''4 a'4 \sustainUp \sustainDown f'4 g'4 a'4 \sustainUp
+c''4 \sustainDown d''4 e''4 a'4
+\sustainUp \sustainDown
+ f'4 g'4 a'4 \sustainUp
 @end lilypond
 
 A third style of pedal notation is a mixture of text and brackets,
@@ -2021,7 +2015,9 @@ obtained by setting @code{pedal-type} to @code{mixed}:
 
 @lilypond[fragment,verbatim]
 \property Staff.SustainPedal \override #'pedal-type = #'mixed
-c''4 \sustainDown d''4 e''4 c'4 \sustainUp \sustainDown f'4 g'4 a'4 \sustainUp
+c''4 \sustainDown d''4 e''4 c'4
+\sustainUp \sustainDown
+ f'4 g'4 a'4 \sustainUp
 @end lilypond
 
 The default '*Ped' style for sustain and damper pedals corresponds to
@@ -2439,14 +2435,7 @@ mode.
 @section Chords
 @cindex Chords
 
-LilyPond has support for both entering and printing chords.  Chords are
-characterized by a set of pitches. They are
-internally stored as simultaneous music expressions. This means you can
-enter chords by name and print them as note head, enter them as notes
-and print them as chord names, or (the most common case) enter them by
-name, and print them as name.
-
-
+LilyPond has support for both entering and printing chords. 
 @lilypond[verbatim,singleline]
 twoWays = \notes \transpose c'' {
   \chords {
@@ -2462,9 +2451,15 @@ twoWays = \notes \transpose c'' {
      \context Voice \twoWays > }
 @end lilypond
 
-Note that this example also shows that the chord printing routines do
-not attempt to be intelligent. If you enter @code{f bes d}, it does not
-interpret this as an inversion.
+This example also shows that the chord printing routines do not try to
+be intelligent. If you enter @code{f bes d}, it does not interpret
+this as an inversion.
+
+As you can see chords really are a set of pitches. They are internally
+stored as simultaneous music expressions. This means you can enter
+chords by name and print them as notes, enter them as notes and print
+them as chord names, or (the most common case) enter them by name, and
+print them as name.
 
 @menu
 * Chords mode::                 
@@ -2479,24 +2474,9 @@ interpret this as an inversion.
 Chord mode is a mode where you can input sets of pitches using common
 names.  It is introduced by the keyword @code{\chords}.  It is similar
 to note mode, but words are also looked up in a chord modifier table
-(containing @code{maj}, @code{dim}, etc).
-
-Dashes and carets are used to indicate chord additions and subtractions,
-so articulation scripts can not be entered in Chord mode.
-
-The syntax for named chords is as follows:
-@example
-  @var{tonic}[@var{duration}][@code{-}@var{modifiers}][@code{^}@var{subtractions}][@code{/}@var{inversion}][@code{/+}@var{bass}].
-@end example
-
-@var{tonic} should be the tonic note of the chord, and @var{duration} is
-the chord duration in the usual notation.  There are two kinds of
-modifiers.  One type is formed by @emph{chord additions}. Additions are
-obtained by listing intervals separated by dots.  An interval is written
-by its number with an optional @code{+} or @code{-} to indicate raising
-or lowering by half a step.  Chord additions have two effects: they adds
-the specified interval and all lower odd numbered intervals to the
-chord, and they may lower or raise the specified interval.
+(containing @code{maj}, @code{dim}, etc). Dashes and carets are used
+to indicate chord additions and subtractions, so articulation scripts
+can not be entered in Chord mode.
 
 Throughout these examples, chords have been shifted around the staff
 using @code{\transpose}.
@@ -2574,10 +2554,25 @@ so it becomes the lowest note in the chord.
 
 @end lilypond 
 
+The formal syntax for named chords is as follows:
+@example
+  @var{tonic}[@var{duration}][@code{-}@var{modifiers}][@code{^}@var{subtractions}][@code{/}@var{inversion}][@code{/+}@var{bass}].
+@end example
+
+@var{tonic} should be the tonic note of the chord, and @var{duration} is
+the chord duration in the usual notation.  There are two kinds of
+modifiers.  One type is formed by @emph{chord additions}. Additions are
+obtained by listing intervals separated by dots.  An interval is written
+by its number with an optional @code{+} or @code{-} to indicate raising
+or lowering by half a step.  Chord additions have two effects: they adds
+the specified interval and all lower odd numbered intervals to the
+chord, and they may lower or raise the specified interval.
+
+
 @refbugs
 
-Implementation details are gory. For example @code{c:4} not only
-adds a fourth, but also removes the third.
+Implementation details are gory. For example @code{c:4} not only adds
+a fourth, but also removes the third.
 
 
 @c .  {Printing named chords}
@@ -2619,7 +2614,9 @@ scheme = \chords {
         \property ChordNames.chordChanges = ##t
         \scheme }
     \context Staff \transpose c'' \scheme
-  > }
+  >
+\paper{linewidth= 9.\cm}
+}
 @end lilypond
 
 LilyPond examines chords specified as lists of notes to determine a name
@@ -2706,31 +2703,25 @@ problems in orchestral music.
 @cindex mark
 @cindex @code{\mark}
 
-
-@example
-  \mark @var{unsigned}
-  \mark @var{string}
-  \mark \default
-@end example
-
-This command prints a rehearsal mark above the system. You can provide
-a number, a string or a markup text as argument. If you use
-@code{\default}, the value of property @code{rehearsalMark} is used and
-automatically incremented.
-
+To print a  rehearsal mark, use the @code{\mark} command. 
 @lilypond[fragment,verbatim]
 \relative c'' {
-  c1 \mark "A2"
+  c1 \mark "A"
   c1 \mark \default
   c1 \mark \default 
   c1 \mark "12"
+  c1 \mark \default
   c1 \mark #'(music "scripts-segno") 
   c1
 }
 @end lilypond
 
-The grob is @internalsref{RehearsalMark} in @internalsref{Score} context. See
-@code{input/test/boxed-molecule.ly} if you need boxes around the marks.
+As you can see, the mark is incremented automatically if you use
+@code{\mark \default}. The value to use is stored in the property
+@code{rehearsalMark} is used and automatically incremented.  The grob
+is @internalsref{RehearsalMark} in @internalsref{Score} context. See
+@code{input/test/boxed-molecule.ly} if you need boxes around the
+marks.
 
 @node Bar numbers
 @subsection Bar numbers
@@ -2740,7 +2731,7 @@ The grob is @internalsref{RehearsalMark} in @internalsref{Score} context. See
 @cindex measure numbers
 @cindex currentBarNumber
 
-Bar numbers are @internalsref{BarNumber} grobs.  They are printed at the
+  They are printed at the
 start of the line.  The number itself is a property that can be set by
 modifying the @code{currentBarNumber} property, i.e.
 @example
@@ -2750,22 +2741,26 @@ modifying the @code{currentBarNumber} property, i.e.
 If you want boxed bar numbers, see the example file
 @code{input/test/boxed-molecule.ly}.
 
+Bar numbers are @internalsref{BarNumber} grobs.
+
 @refbugs
 
 It is not possible to have bar numbers printed at regular intervals
 only.
 
 Barnumbers can collide with the StaffGroup, if there is one at the
-top. To solve this, You have to twiddle with the padding-property of
-the bar-number if your score starts with a staff-group. 
+top. To solve this, You have to twiddle with the
+@internalsref{padding} property of @internalsref{BarNumber} if your
+score starts with a @internalsref{StaffGroup}.
 
 @node Instrument names
 @subsection Instrument names
 
-You can specify an instrument name for a staff by setting
-@code{Staff.instrument} and @code{Staff.instr}. This will print a string
-before the start of the staff. For the first start, @code{instrument} is
-used, for the next ones @code{instr} is used.
+In scores, the instrument name is printed before the staff. This can
+be done by setting @code{Staff.instrument} and
+@code{Staff.instr}. This will print a string before the start of the
+staff. For the first start, @code{instrument} is used, for the next
+ones @code{instr} is used.
 
 @lilypond[verbatim,singleline]
   \property Staff.instrument = "ploink " { c''4 }  
@@ -2813,36 +2808,20 @@ This means that middle C in @var{musicexpr} is transposed to
 a tone.  The first version will print sharps and the second version
 will print flats.
 
-@lilypond[fragment,verbatim]
-\context Staff {
-  \clef "F"
-  { \key e \major c d e f }
+@lilypond[singleline, verbatim]
+mus =\notes { \key e \major c d e f }
+\score { \notes \context Staff {
+  \clef "F" \mus
   \clef "G"
-  \transpose des'' { \key e \major c d e f }
-  \transpose cis'' { \key e \major c d e f }
-}
+  \transpose des'' \mus
+  \transpose cis'' \mus
+}}
 @end lilypond
 
 If you want to use both @code{\transpose} and @code{\relative}, then
 you must use @code{\transpose} first.  @code{\relative} will have no
 effect music that appears inside a @code{\transpose}.
 
-@node Sound output for transposing instruments
-@subsection Sound output transposing instruments
-
-When you want to make a MIDI file from a score containing transposed and
-untransposed 
-instruments, you have to instruct LilyPond the pitch offset (in
-semitones) for the transposed instruments. This is done using the
-@code{transposing} property. It does not affect printed output.
-
-@cindex @code{transposing}
-
-@example
-        \property Staff.instrument = #"Cl. in B-flat"
-        \property Staff.transposing = #-2
-@end example
-
 @c .  {Multi measure rests}
 @node  Multi measure rests
 @subsection Multi measure rests
@@ -2859,7 +2838,8 @@ Lily will not expand empty measures, and the appropriate number is added
 automatically.
 
 @lilypond[fragment,verbatim]
- \time 3/4 r2. | R2. | R2.*2 \property Score.skipBars = ##t R2.*17  R2.*4
+ \time 3/4 r2. | R2. | R2.*2
+ \property Score.skipBars = ##t R2.*17  R2.*4
 @end lilypond
 
 Notice that the @code{R2.} is printed as a whole rest, centered in the
@@ -2871,8 +2851,9 @@ The grob for this object is @internalsref{MultiMeasureRest}.
 
 @refbugs
 
-Currently, there is no way to automatically condense multiple rests into
-a single multimeasure rest.
+Currently, there is no way to automatically condense multiple rests
+into a single multimeasure rest. Multi measure rests do not take part
+in rest collisions.
 
 @cindex condensing rests
 
@@ -2885,9 +2866,10 @@ a single multimeasure rest.
 Automatic part combining is used to merge two parts of music onto a
 staff in an intelligent way.  It is aimed primarily at typesetting
 orchestral scores.  When the two parts are identical for a period of
-time, only one is shown.  In places where the two parts differ, they are
-typeset as separate voices, and stem directions are set automatically.
-Also, solo and @emph{a due} parts can be identified and marked.
+time, only one is shown.  In places where the two parts differ, they
+are typeset as separate voices, and stem directions are set
+automatically.  Also, solo and @emph{a due} parts can be identified
+and marked.
 
 The syntax for part combining is
 
@@ -2996,6 +2978,23 @@ example disappears in the second line.
 @end lilypond
 
 
+@node Sound output for transposing instruments
+@subsection Sound output for transposing instruments
+
+When you want to make a MIDI file from a score containing transposed
+and untransposed instruments, you have to instruct LilyPond the pitch
+offset (in semitones) for the transposed instruments. This is done
+using the @code{transposing} property. It does not affect printed
+output.
+
+@cindex @code{transposing}
+
+@example
+        \property Staff.instrument = #"Cl. in B-flat"
+        \property Staff.transposing = #-2
+@end example
+
+
 
 @c . {Custodes}
 @node Ancient notation 
@@ -3142,7 +3141,62 @@ Editio XXX.''
 
 @cindex Basso continuo
 
-TODO. see figured-bass.ly
+LilyPond has limited support for figured bass:
+
+@lilypond[verbatim,fragment]
+<
+ \context FiguredBass
+   \figures {
+       <_! 3+ 5- _ 7! 9 >4
+       < [4 6] 8 >
+   }
+ \context Voice { c4 g8 }
+>
+@end lilypond
+
+The support for figured bass consists of two parts: there is an input
+mode, introduced by @code{\figures}, where you can enter bass figures
+as numbers, and there is a context called @internalsref{FiguredBass}
+that takes care of making @internalsref{BassFigure} grobs.
+
+In figures input mode, a group of bass figures is delimited by
+@code{<} and @code{>}. The duration is entered after the @code{>}.
+@lilypond[fragment]
+\context FiguredBass
+\figures {     <4 6> }
+@end lilypond
+@example
+       <4 6>
+@end example
+
+Accidentals are added to the numbers if you alterate them by
+appending @code{-}, @code{!}  and @code{+}.
+
+@lilypond[fragment]
+  \context FiguredBass
+\figures { <4- 6+ 7!> }
+@end lilypond
+@example
+  <4- 6+ 7!>
+@end example
+
+Spaces or dashes may be inserted by using @code{_}. Brackets are
+introduced with @code{[} and @code{]}.
+
+@lilypond[fragment]
+ \context FiguredBass
+\figures { < [4 6] 8 [_ 12]> }
+@end lilypond
+@example
+       < [4 6] 8 [_ 12]>
+@end example
+
+Although the support for figured bass may superficially resemble chord
+support, it works much simpler: in figured bass simply stores the
+numbers, and then prints the numbers you entered. There is no
+conversion to pitches, and no realizations of the bass are played in
+the MIDI file.
+
 
 @c . {Tuning output}
 @node Tuning output
@@ -3370,38 +3424,6 @@ the syntax and semantics are up for rewrite.
 
 
 
-@node What to tune?
-@subsection What to tune?
-
-This all tells you how to tune grobs, but you don't know what variables
-to set? The question is not answered in this part of the manual
-(although you may encounter some examples.).
-
-Grob properties are tied directly to the implementation of LilyPond, and
-they are thus a moving target. Documentation of such variables is in the
-automatically generated documentation.  Description of properties are
-generated from the source code for each version. This documentation is
-therefore more up to date.  It should be available from the same place
-where you got this manual.
-
-To decide how to tune a grob, you need to find the following information
-@itemize @bullet
-@item
-which grob to modify
-@item
-which property to modify
-@item
-which context the grob comes from.
-@end itemize
-
-Included with the automatically generated documentation is a master list
-of grobs. Selecting a grob will take you to an overview of the
-properties available for that grob.
-
-There is also a master list of contexts. Selecting one takes you to an
-overview of that context which lists which grob types are created there.
-
-
 @node Font selection
 @subsection Font selection
 
index af7652de805ddaf313af7a931226b8d8328d4c4b..09e4f49ff7798fb3b6f795fc34e511a47bd49328 100644 (file)
@@ -2168,15 +2168,31 @@ to the page layout of this document.
 In this section, we show some ways to fine tune the final output of a
 piece. We do so using a single measure of a moderately complex piano
 piece: a Brahms intermezzo (opus 119, no. 1).
+@cindex Brahms, Johannes
 
 The code for the untuned example shows us some new things.
 
 @lilypondfile[verbatim]{brahms-original.ly}
 
+
+@cindex dynamics
+@cindex loudness
+@cindex forte
+@cindex crescendo
+@cindex @code{\<}
+@cindex @code{\!}
+
+The crescendo is ended at the half note by the escaped exclamation
+mark @code{\!}.
+
 Hairpin dynamics can be indicated using @code{\>} to start a
 decrescendo, and @code{\!} to end one. The crescendo is started using
 @code{\<} and also ended using @code{\!}. Absolute dynamics can be
-entered using @code{\p}, @code{\mf}, etc.
+entered using @code{\p}, @code{\mf}, etc. All these commands apply to
+the complete chord where they are entered, but for syntactical
+reasons, they must be attached to one of the notes of  the chord.
+
+@cindex fingering instructions
 
 Fingering indications are entered simply using @code{-@var{N}}, where
 @var{N} is a digit.
@@ -2187,6 +2203,8 @@ edition by Schott/Universal Edition:
 
 @lilypondfile{brahms-tweaked.ly}
 
+@cindex tuning grob behavior
+
 The basic process that we follow is that we override defaults in the
 printing system. We do this by setting variables in so-called grobs.
 Printed symbols are internally represented by Graphical Objects
@@ -2195,6 +2213,8 @@ determine the fonts, offsets, sub-routines to be called on the grob,
 etc.  The initial values of these settings are set in the Scheme file
 @file{scm/grob-description.scm}.
 
+@cindex slur attachments
+
 We start with the slur: the slur in the upper part, running from the F
 sharp to the A, runs from stem to stem in the printed edition, while
 ours starts from the note head at the left. The following property
@@ -2216,6 +2236,10 @@ lilypond backend supports approximately 240 variables like
 different types of Grobs, that may be created in 14 different context
 types besides Voice.
 
+@cindex internal documentation
+@cindex finding grobs
+@cindex grob descriptiosn 
+
 The interesting information is how you can figure out which properties
 to tune for your own scores. To discover this, you must have a copy of
 the internals document. This is a set of HTML pages, which should be
@@ -2226,9 +2250,16 @@ also available on the web: go to the lilypond website, click
 ``Documentation: other'' on the side bar, click
 ``lilypond-internals'', under information for users.
 
+You might want to bookmark either the HTML files on disk, or the one
+on the web. One word of caution is in place here: the internals
+documentation is generated from the definitions that lily uses. For
+that reason, it is strongly tied to the version of LilyPond that you
+use. Before you proceed, please make sure that you are using the
+documentation that corresponds to the LilyPond version that you use.
+
 Suppose that you wanted to tune the behavior of the slur. The first
 step is to get some general info on slurs in lilypond. Turn to the
-index, and look up slur. The text says
+index, and look up slur. The section on slurs says
 @quotation
 The grob for this object is @internalsref{Slur}, generally in
 @internalsref{Voice} context.
@@ -2241,7 +2272,18 @@ must look it up the internal documentation: click ``grob overview'' ,
 and select ``slur'' (the list is alphabetical.)
 
 Now you get a list of all the properties that the slur object
-supports, along with their default values.
+supports, along with their default values. Among the properties we
+find the @code{attachment} property, leading to 
+@example 
+ \property Voice.Slur \set #'attachment = #'(stem . stem)
+@end example
+
+If you ran the previous example, you have unknowingly already used
+this kind of command.  The @file{ly/property-init.ly} contains the
+definition of @code{\stemUp}
+@example
+  stemUp = \property Voice.Stem \set #'direction = #1
+@end example  
 
 
 We also want to move around the fingering `3'.  In the printed edition
@@ -2319,8 +2361,8 @@ encounter the latter type if you run Scheme functions on music using
 The second fingering instruction should be moved up a little, to avoid
 a collision with the slur. This could be achieved with
 @code{extra-offset}, but in this case, a simpler mechanism also
-works. We insert an empty text between the 5 and note. The empty text
-pushes the fingering instruction away:
+works. We insert an empty text between the 5 and the note. The empty
+text pushes the fingering instruction away:
 @example
   a^" "^#'(finger "5")
 @end example
@@ -2330,46 +2372,67 @@ text instructions. To insert an empty text (@code{^" "}) between the
 finger and the note, we have disguised the fingering instruction as a
 text: @code{(finger "5")}.
 
+Normally, one would specify dynamics in a single voice, and start and
+end dynamics (such as @b{f} and @b{p}) will be aligned with
+hairpins. In this case, we want the decrescendo to be in a different
+place from the piano sign. We achieve this by putting the dynamic
+markings in different voices. The crescendo should be above the upper
+staff. This can be forced by the precooked command 
+@example
+  \dynamicsUp
+@end example
+
+However, if you do that, the decrescendo will be too close to the
+upper voice, and collide with the stems. Looking at the manual for
+dynamics, we notice that ``Vertical positioning of these symbols is
+handled by the @internalsref{DynamicLineSpanner} grob.''. If we turn
+to the documentation of @code{DynamicLineSpanner}, we find that the
+@code{DynamicLineSpanner} supports several so-called
+`interfaces'. This grob not only puts dynamic objects next to the
+staff (@code{side-position-interface}), but it also groups dynamic
+objects (@code{axis-group-interface}), is considered a dynamic sign
+itself (@code{dynamic-interface}) and is a grob: it has the
+@code{grob-interface}, with all the variables that come with it.
+
+For the moment, we are interested in the side positioning:
+@quotation
+ side-position-interface
 
-
-@separate
+  Position a victim object (this one) next to other objects (the
+  support).  In this case, the direction signifies where to put the
+  victim object relative to the support (left or right, up or down?)
+@end quotation
+Between the grob and its support (in this case: the notes in the voice
+going down), there should be more space. This space is controlled by
+@code{padding}, so we increase it.
 @example
-  stemDown = \property Voice.Stem \override #'direction = #-1
+           \property Voice.DynamicLineSpanner \override #'padding = #5.0
 @end example
 
-Set a property for all Stem grobs in the current Voice:
-@code{direction} is set to @code{-1}, which encodes down.  The setting
-remains in effect until it is reverted.
+This command is almost like the command for setting slur attachments,
+but subtly different in its details.  Grob properties can be
+manipulated with two commands: @code{\override} extends the grob
+variables with a setting, and @code{\revert} releases this
+setting. This has a certain theoretical appeal: the operations are
+simple and symmetric. For practical use, it can be cumbersome.  Both
+commands act like parentheses: you should carefully balance the use of
+@code{\override} and @code{\revert}. The @code{\set} command is more
+friendly: it first does a @code{\revert} followed by @code{\override}.
+
+Finally, Brahms uses music notation is a slightly unorthodox way. Ties
+usually happen only within one voice. In this piece, the composer
+gladly produces ties that jump voices. We deal with this by faking
+these ties: whenever we need such a tie, we insert a notehead in a
+different voice, and blank the stem. This is done in the following
+snippet of code.
 
-@separate
 @example
- \property Voice.Stem \revert #'direction  
+         \property Voice.Stem \set #'transparent = ##t
+         d'
+         \property Voice.Stem \revert #'transparent
 @end example
 
-Revert the to the previous setting.  The effect of precisely one
-@code{\stemDown} or @code{\stemUp} is neutralized.
-
-
-@cindex dynamics
-@cindex loudness
-@cindex forte
-@code{\f} places a forte symbol under the chord. The forte applies to
-the whole chord, but the syntax requires that commands like forte and
-arpeggio are attached to a note, so here we attach them to the first
-note.
-
-On the first chord, a crescendo is started with
-@code{\<}. To be precise, the crescendo start is syntactically attached
-to the preceding note, the @code{d}.
-
-@cindex dynamics
-@cindex crescendo
-@cindex @code{\<}
-
-@cindex @code{\!}
-
-The crescendo is ended at the half note by the escaped exclamation
-mark @code{\!}.
+Finally, the last tie is forced up using @code{\tieUp}.
 
 
 @node An orchestral score
diff --git a/NEWS b/NEWS
index a1cb4d1d587201fe762c76bbee489df41a45a305..1671fdddab056a3e4bda641dce1375a55b7f2256 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -1,7 +1,7 @@
 
 New features in 1.5
 
-* Simple tablature.
+* Tablature support.
 
 * Many speedups, many slowdowns.
 
@@ -17,7 +17,8 @@ New features in 1.5
 
 * Better spacing.  Includes subtle details like optical stem spacing.
 
-* More ancient notation support: mensural ligatures, porrectuses, more shapes.
+* More ancient notation support: mensural ligatures, porrectuses,
+ambituses, more shapes.
 
 * Bracket piano pedals.
 
@@ -25,4 +26,6 @@ New features in 1.5
 
 * Font completely revised and improved.
 
-* Completely rewritten midi input support.
\ No newline at end of file
+* Completely rewritten midi input support.
+
+* Many bugfixes
index d03346271dd36860cca472c10a6213db4e614d45..eb16f6c8e82601618776341a803888bec502495c 100644 (file)
@@ -2,19 +2,19 @@
     \notes\context PianoStaff <
     \context Staff = up
     \relative c'' <
-       {   \key d\major 
-           fis4-3_\p ( ~
-           fis16 )a-5 } \\
-       {
-           fis16( \> d \! b \translator Staff = down
-           \clef treble g ~ < g8 )e> } \\
-       { s16
-         d'
-         ~ < d4 b4  > }
+        {   \key d\major 
+            fis4-3_\p ( ~
+            fis16 )a-5 } \\
+        {
+            fis16( \> d \! b \translator Staff = down
+            \clef treble g ~ < g8 )e> } \\
+        { s16
+          d'
+          ~ < d4 b4  > }
     >
     \context Staff = down {
-       \key d \major
-       \time 3/8 \clef bass s4. }
+        \key d \major
+        \time 3/8 \clef bass s4. }
     >
     \paper { linewidth = -1. }
 }
index 6eaeb6c535545c20219240dcdea63e4d659268d1..c7d6ee75b095d8dd12207ec772235ccbfa8de4a7 100644 (file)
@@ -2,28 +2,28 @@
     \notes\context PianoStaff <
     \context Staff = up
     \relative c'' <
-       {   \key d\major 
-           \property Voice.Slur \set #'attachment = #'(stem . stem)
+        {   \key d\major 
+            \property Voice.Slur \set #'attachment = #'(stem . stem)
 
-           \property Voice.Fingering \set #'extra-offset = #'(-0.3 . -1.8) 
-           fis4-3_\p ( ~
+            \property Voice.Fingering \set #'extra-offset = #'(-0.3 . -1.8) 
+            fis4-3_\p ( ~
 
-           \property Voice.Fingering \revert #'extra-offset
-           fis16 )a^" "^#'(finger "5") } \\
-       {
-           \dynamicUp
-           \property Voice.DynamicLineSpanner \override #'padding = #5.0
-           \tieUp
-           fis16( \> d \! b \translator Staff = down \clef treble g ~ < g8 )e> } \\
-       { s16
-         \property Voice.Stem \set #'transparent = ##t
-         d'
-         \property Voice.Stem \revert #'transparent
-         ~ < d4 b4  > }
+            \property Voice.Fingering \revert #'extra-offset
+            fis16 )a^" "^#'(finger "5") } \\
+        {
+            \dynamicUp
+            \property Voice.DynamicLineSpanner \override #'padding = #5.0
+            \tieUp
+            fis16( \> d \! b \translator Staff = down \clef treble g ~ < g8 )e> } \\
+        { s16
+          \property Voice.Stem \set #'transparent = ##t
+          d'
+          \property Voice.Stem \revert #'transparent
+          ~ < d4 b4  > }
     >
     \context Staff = down {
-       \key d \major
-       \time 3/8 \clef bass s4. }
+        \key d \major
+        \time 3/8 \clef bass s4. }
     >
     \paper { linewidth = -1. }
 }
index e93107c962c6c65c1311dc5971d65953e7c81154..329228cddc8d9ef472c108e16b8f10925626fd49 100644 (file)
@@ -133,11 +133,6 @@ Phrasing_slur_engraver::process_acknowledged_grobs ()
          else
            {
              Grob* phrasing_slur = phrasing_slur_l_stack_.pop ();
-             SCM s = get_property ("phrasingSlurEndAttachment");
-             if (gh_symbol_p (s))
-               {
-                 index_set_cell (phrasing_slur->get_grob_property ("attachment"), STOP, s);
-               }
              end_phrasing_slur_l_arr_.push (phrasing_slur);
              requests_arr_.pop ();
            }
@@ -148,11 +143,6 @@ Phrasing_slur_engraver::process_acknowledged_grobs ()
          // (use temp. array to wait for all phrasing_slur STOPs)
          Grob* phrasing_slur = new Spanner (get_property ("PhrasingSlur"));
          Slur::set_interface (phrasing_slur); // can't remove.
-         SCM s = get_property ("phrasingSlurBeginAttachment");
-         if (gh_symbol_p (s))
-           {
-             index_set_cell (phrasing_slur->get_grob_property ("attachment"), START, s);
-           }
          start_phrasing_slur_l_arr.push (phrasing_slur);
          requests_arr_.push (phrasing_slur_req_l);
          announce_grob(phrasing_slur, phrasing_slur_req_l->self_scm());
@@ -185,5 +175,5 @@ ENTER_DESCRIPTION(Phrasing_slur_engraver,
 /* descr */       "Print phrasing slurs. Similar to Slur_engraver",
 /* creats*/       "PhrasingSlur",
 /* acks  */       "note-column-interface",
-/* reads */       "slurBeginAttachment slurEndAttachment slurMelismaBusy",
+/* reads */       "slurMelismaBusy",
 /* write */       "");
index 796821254b95bf8734c4dc94d9fcd6d56f399968..c1f84e774fdda9df67738ecce86e0d8a9b1b0fca 100644 (file)
@@ -104,6 +104,11 @@ Separating_line_group_engraver::acknowledge_grob (Grob_info i)
       ->has_extent_callback_b(Axis_group_interface::group_extent_callback_proc, X_AXIS))
     return;
 
+
+  
+  if (to_boolean (it->get_grob_property ("no-spacing-rods")))
+    return ;
+
   if (Note_spacing::has_interface (it)) 
     {
       current_spacings_.note_spacings_.push (it);
@@ -198,9 +203,6 @@ Separating_line_group_engraver::stop_translation_timestep ()
 }
 
 
-
-
-
 ENTER_DESCRIPTION(Separating_line_group_engraver,
 /* descr */       "Generates objects for computing spacing parameters.",
 /* creats*/       "SeparationItem SeparatingGroupSpanner",
index e68aaf660a4456b815870e6a2dfc76acdbd01cfc..b1d5c190e1c0524dd58f35af4f21e143ae464041 100644 (file)
@@ -275,7 +275,8 @@ Side_position_interface::supported_b (Grob*me)
 
 
 ADD_INTERFACE (Side_position_interface,"side-position-interface",
-  "Position a victim object (this one) next to other objects (the support).
-#'direction = where to put the victim object (left or right?)
+  "Position a victim object (this one) next to other objects (the
+support).  In this case, the direction signifies where to put the
+victim object relative to the support (left or right, up or down?)
 ",
   "side-support-elements direction-source direction side-relative-direction minimum-space padding");
index 3cc4bd261a8fddaa952a2866c060f5b7ac627b3c..259905900881327acdc05c4c86b4877ae307e66f 100644 (file)
@@ -142,11 +142,7 @@ Slur_engraver::process_acknowledged_grobs ()
          else
            {
              Grob* slur = slur_l_stack_.pop ();
-             SCM s = get_property ("slurEndAttachment");
-             if (gh_symbol_p (s))
-               {
-                 index_set_cell (slur->get_grob_property ("attachment"), STOP, s);
-               }
+           
              end_slur_l_arr_.push (slur);
              requests_arr_.pop ();
            }
@@ -157,11 +153,6 @@ Slur_engraver::process_acknowledged_grobs ()
          // (use temp. array to wait for all slur STOPs)
          Grob* slur = new Spanner (get_property ("Slur"));
          Slur::set_interface (slur); // cannot remove yet!
-         SCM s = get_property ("slurBeginAttachment");
-         if (gh_symbol_p (s))
-           {
-             index_set_cell (slur->get_grob_property ("attachment"), START, s);
-           }
          start_slur_l_arr.push (slur);
          requests_arr_.push (slur_req_l);
          announce_grob (slur, slur_req_l->self_scm ());
@@ -199,5 +190,5 @@ ENTER_DESCRIPTION (Slur_engraver,
 /* descr */       "Build slurs from Slur_reqs",
 /* creats*/       "Slur",
 /* acks  */       "note-column-interface",
-/* reads */       "slurBeginAttachment slurEndAttachment slurMelismaBusy",
+/* reads */       "slurMelismaBusy",
 /* write */       "");
index 27012b0df76c9e8a0e8a7e51802ba84a7877c2cd..f445241a5f8f33ca25d31cc2b8439c68397b088a 100644 (file)
@@ -306,12 +306,6 @@ r1 r1*3 R1*3  \\\\property Score.skipBars= ##t r1*3 R1*3
                                 "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}.")
-
-(translator-property-description 'slurEndAttachment symbol? "translates to the cdr of grob-property 'attachment of NoteColumn. See @ref{Slur}.")
 (translator-property-description 'slurMelismaBusy boolean? "Signal a slur if automaticMelismata is set.")
 (translator-property-description 'solo boolean? "set if solo is detected by the part combiner.")
 (translator-property-description 'soloADue boolean? "set Solo/A due texts in the part combiner?.")
index d9e298bc1ed3d39f57e79ce4db4f1d11a73f9f6c..c49b00d45d8de72d0b123014188031ea860657d5 100644 (file)
@@ -89,5 +89,6 @@
         \csname%
         nolilyfooter\texsuffix\endcsname
 \fi
+
 \newdimen\outputscale
 \endinput