Den 2015-08-23 00:01, skrev Peter Selinger:
Hello again,
this is a true newbie question. I am trying to engrave two polyphonic
voices on a single staff. Since the two voices have all their rests in
common, I only want to typeset each rest once, so I use spacer rests
in the second voice. Still the vertical spacing is such that all the
rests are put near the top of the staff. I would like them to appear
in their "normal" positions.
>From the manual, I know two ways to do this. Solution 1 is to enclose
each rest between \oneVoice and \voiceOne, forcing standard vertical
spacing:
\version "2.19.25"
\new Staff <<
\new Voice \relative c'' {
\voiceOne {
\oneVoice r \voiceOne c \oneVoice r \voiceOne d
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
}
}
\new Voice \relative c'' {
\voiceTwo {
s4 a8 a8 s4 b8 b8
}
}
>>
Solution 2 is to specify an explicit vertical position for each rest.
\version "2.19.25"
\new Staff <<
\new Voice \relative c'' {
\voiceOne {
b4\rest c b\rest \voiceOne d
%%%%%%%%%%%%%%%%%%%%%%%%%%%%
}
}
\new Voice \relative c'' {
\voiceTwo {
s4 a8 a8 s4 b8 b8
}
}
>>
Neither solution is particularly elegant, as they both require every
rest to be marked up individually. Is there a global way to turn off
vertical spacing for rests in a context, i.e., some command whose
effect would be to make notes behave as with \voiceOne and rests
behave as with \oneVoice?
Thanks, -- Peter
Hello,
There might be another aspect of positioning (common) rests from
different voices. This is beside all the technical solutions presented
earlier in this thread. All these work more or less fine for half rests
as well as full rests. But when it comes to full rests, in almost every
note sheet I have come in contact with, it is printed hanging below
staff line number two, not zero, so the half rest and full rest reside
in the same white space.
You can not have different definitions for these two rests, except for
individual rests (\once \override...). But if you need a full rest, at
least I prefer the multi measure rest (R1 instead of r1) as this is
automatically centred in the measure. This type of rest also has its own
definition of the vertical position. So the definition of centerRests
should be:
centerRests = {
\override Rest.staff-position = ##t
\override MultiMeasureRest.staff-position = #2
}
Regarding the voice VoiceTwo, I use to convert the rests into spaces,
which is quite simple by means of the global replace function (ctrl+H)
in Frescobaldi and the regular expression (Regex) option. Replace /"/([
])r([^a-zA-Z]*)" with "\1s\2)/"/ (remove the quotation marks, they are
here just for pointing out the text to insert). For non English works
the exclude text (a-zA-Z) might have to be expanded, not to affect
comments and similar texts.
Kaj
_______________________________________________
lilypond-user mailing list
[email protected]
https://lists.gnu.org/mailman/listinfo/lilypond-user