gnu-music-discuss
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Q: Typesetting 4 parts with a 2 staff reduction


From: David Petrou
Subject: Re: Q: Typesetting 4 parts with a 2 staff reduction
Date: Mon, 2 Apr 2001 19:23:38 -0400
User-agent: Mutt/1.2.5i

(whoops, forgot to cc: the group on this...)

> >   (1) make horizontal and vertical shifts to prevent collisions;
> 
> As long as you have only two voices per staff, the automatic
> collision handling should work well enough. Take a look at
> input/regression/collisions.ly. Don't forget to name each 
> Voice context separately.

I am naming the contexts differently.  There are spacing problems in
the score.  In the past I've had to insert some horizontal space for
notes and some vertical space for rests.

Here are some examples:
  - Whole rests overlapping each other.  I've been using:
\property Voice.MultiMeasureRest \override #'staff-position = #<some value>

   I can usually get away with setting this to 4 and -2 for the first
   and second voices, but there are situations that i need to push
   them out even farther during a piece.

  - Besides whole rests overlapping each other, requiring vertical
    adjustment, whole rests sometimes touch notes.  In these cases, I
    need to shift the note slightly.

    I tried to be sneaky and use your idea for slurs below, as follows:

sopranoPiano = \notes \context Voice = soprano {
  s1 |
  s4 s8 \noteShiftLeftLarge s8 \noteShiftRevert s2 |
}

    where
noteShiftRevert = \property Voice.NoteColumn \revert #'force-hshift
noteShiftLeftLarge =
  \property Voice.NoteColumn \override #'force-hshift = #-0.6

    but this didn't succeed in shifting the notes.

  - When there are two notes on the same beat that are on an adjacent
    line and space (like e and f), lilypond puts a little too much
    space for me.  I like the notes to be just slightly overlapping,
    so that it's clear they should be hit together.

    But, in the same situation, if both notes are dotted, lily puts
    too little space between them.  The dot of the first note collides
    with the second.  I use my macros like \noteShiftFoo above when
    writing just on the piano staff.  But I'd love a way to do this
    for the 4-staff and 2-staff versions that I'm writing.

  - I also need to make shifts when two voices cross (like if the
    soprano dips under the alto for a moment).

Lily might eventually "do the right thing" for the above cases, but
I'd always like a manual override when it doesn't match my
preferences.

> >   (2) set the stems of the soprano and tenor parts pointed up, and the
> >   alto and bass parts pointed down; > (3) set the slur directions for
> >   the voices similarly; 
> 
> <
>   \context Voice=soprano{\stemUp \slurUp \soprano}
>   \context Voice=alto{\stemDown \slurDown \alto}
> >
> There are also macros \voiceOne \voiceTwo that set the direction
> of both stems, slurs and ties to point up and down, respectively. 
> See ly/property.ly

That works great.  thanks...

> (4) change voices from one staff to another
> >   when they go out of the treble or bass clef ranges.
> 
> Take a look at input/regression/auto-change.ly

Except that I don't want the changes to occur automatically.
"auto-change" unconditionally switches using middle c as the crossover
point.  I only want to change staves on more extreme ranges.  Also, I
want to change based on how long a phrase is out of its normal
region.  For instance, if only one note is out of range, I don't want
to shift.  I was able to get this effect using your slur trick:

sopranoPiano = \notes \context Voice = soprano {
  \translator Staff = down
  s1 |
  \translator Staff = up
  s1 |
}

> >   For the four
> >   staff version, since this is a choral fugue, I need to use slurs to
> >   indicate melismas, but I want no slurs on the piano version, unless
> >   of course I'm extending a note past a bar.
> 
> Try:
> 
> melody=\notes\relative c'{c4 d e f g a b c}
> slurs=\notes{ s4 ( s ) s2 ( s2. ) s4}
> 
> \score{
>   \context Voice <\melody \slurs>
> }

Darn.  This trick, (using "s"paces with other commands as a template
over the notes) fails for me here.  I get:

Interpreting music...warning: unbound spanner `Slur'
warning: unbound spanner `Slur'

(and there is no slur in the output.)

> > - The bar number collides with the staff group symbol.
> 
> \score{
>   ...
>   \paper{
>   ...
>     \translator{\ScoreContext
>       BarNumber \override #'padding = #2.0
>     }
>   }
> }

works great!

> >   Also, is there
> >   a way to move the bar numbers down to the piano reduction staves
> >   instead of at the top of all the staves?  (I'm trying to copy the
> >   Dover Art of Fugue style.)
> 
> Try (untested)
> 
> \score{
>   ...
>   \paper{
>   ...
>     \translator{\ScoreContext
>       \remove "Bar_number_engraver";
>     }
>     \translator{\PianoStaffContext
>       \consists "Bar_number_engraver";
>     }      
>   }
> }

That works in moving the number down to the right pair of staves.
But now the bar number collides with the vertical line connecting all
6 staves.

I added this to the piano staff context translator and it seems to
work:

      BarNumber \override #'extra-offset = #'(0.6 . 1)

By the way, is there a way to get the numbers in italic?  I've tried a
bunch of things, like
  BarNumber.TextScript \override #'font-style = #'italic
in the translator and
  \property BarNumber.TextScript \set #'font-style = #'italic
within a some notes, but these don't work.

>      /Mats

david



reply via email to

[Prev in Thread] Current Thread [Next in Thread]