Hello Leo,

Thanks for your explanation. Got your point, totally agree it should not
combine when 2 voices are identical, otherwise it's confusing: cannot
distinguish 2 voices.
But when I use different font-sizes to distinguish 2 voices, I can only
combine them when 2 voices are on same side of one another.
If 2nd voice goes both upper and lower than 1st one, I cannot combine them.

I found a trick, not nice, but at least works for this case: skip
exceptional note of 2nd voice, and render it on 1st voice with tweak
(I know this won't work if baritone has a separate lyrics, and here midi is
not correct either. Fortunately these are not my case ^^)

\version "2.22.1"
localFontSize =
#(define-music-function (font-size music) (number? ly:music?)
   (for-some-music
     (lambda (m)
       (if (music-is-of-type? m 'rhythmic-event)
           (begin
             (set! (ly:music-property m 'tweaks)
                   (cons `(font-size . ,font-size)
                         (ly:music-property m 'tweaks)))
             #t)
           #f))
     music)
   music)

soprano = { f'4 g'4 a'4 b'4 c''2 }
basso = { d'4 e' f'' g' a'2 }
alto = { d'4 e' \stemUp f'' g' a'2 }
tenor = { d'4 e' f'' g' a'2 }
\new Score { \new Staff << \partCombine \soprano \basso >> } % correct but
not expected
\new Score { \new Staff << \partCombine \soprano \alto >> } % expected,
without tweak, can combine but cannot confusing
\new Score { \new Staff << \partCombine \soprano \localFontSize -3 \tenor
>> } % distinguish 2 voices, but not combined

mezzo = { f'4 g'4 <a' \tweak font-size #-3 f''>4 b'4 c''2 }
baritone = { d'4 e' \skip 4 g' a'2 }
\new Score { \new Staff << \partCombine \mezzo \localFontSize -3 \baritone
>> } % trick

Thanks to all.
Have a good day.

Tu'

On Thu, 1 Jul 2021 at 16:07, Leo Correia de Verdier <
leo.correia.de.verd...@gmail.com> wrote:

> As a more general tip: if you want all stems to be pointing up you can
> specify that on document or score level in a layout block, like
>
> %%%%
> \layout {
>   \context {
>     \Voice
>     \override Stem.direction = #UP
> }}
> %%%%
>
> Or on a staff level in \with statements, like
>
> %%%%
>   \new Staff
>              \with { \stemUp }
>                 ### music goes here
> %%%%
>
> > 1 juli 2021 kl. 10:54 skrev Leo Correia de Verdier <
> leo.correia.de.verd...@gmail.com>:
> >
> > This is the intended behavior of partCombine. In the usual use case,
> with the same notehead size you still want to be able to follow each voice,
> so partCombine doesn’t merge them into chords when they’re crossed. (This
> is obscured in your first example because you are using \stemUp there,
> otherwise you would see the stems indicating the voicing).
> >
> > Anyway you can easily override this behavior by using partCombineChords,
> like
> > …
> > %%%%
> > basso = { \partCombineChords d'4 e' \stemUp f'' g' a'2 }
> > %%%%
> > …
> > HTH
> > /Leo
> >
> >> 1 juli 2021 kl. 06:52 skrev Dinh Hoang Tu <dhoan...@gmail.com>:
> >>
> >> Sorry for short description in my last email.
> >> I mean when 2nd voice has notes going upper and lower than 1st voice,
> \partCombine won't combine 2 notes.
> >> There is a gap between 2 stems, as in attached image.
> >>
> >> Many thanks,
> >> Tu'
> >>
> >> On Thu, 1 Jul 2021 at 09:35, Dinh Hoang Tu <dhoan...@gmail.com> wrote:
> >> Hello Jean and all,
> >>
> >> I would love to contribute if I can :)
> >>
> >> Using this in one music sheet, if 2nd voice has notes going upper and
> lower than 1st voice, \partCombine will not work.
> >>
> >> \version "2.22.1"
> >> localFontSize =
> >> #(define-music-function (font-size music) (number? ly:music?)
> >>   (for-some-music
> >>     (lambda (m)
> >>       (if (music-is-of-type? m 'rhythmic-event)
> >>           (begin
> >>             (set! (ly:music-property m 'tweaks)
> >>                   (cons `(font-size . ,font-size)
> >>                         (ly:music-property m 'tweaks)))
> >>             #t)
> >>           #f))
> >>     music)
> >>   music)
> >> soprano = { f'4 g'4 a'4 b'4 c''2 }
> >> alto = { d'4 e' \stemUp f'' g' a'2 }
> >> basso = { d'4 e' \stemUp f'' g' a'2 }
> >> tenor = { d'4 e' \stemUp \tweak font-size #-3 f'' g' a'2 }
> >> \new Score { \new Staff << \partCombine \soprano \alto >> }
> >> \new Score { \new Staff << \partCombine \soprano \localFontSize -3
> \basso >> }
> >> \new Score { \new Staff << \partCombine \soprano \tenor >> }
> >>
> >> Many thanks again to any help.
> >>
> >> Best,
> >> Tu'
> >>
> >> On Thu, 1 Jul 2021 at 04:00, Jean Abou Samra <j...@abou-samra.fr>
> wrote:
> >>> Le 30/06/2021 16:47, Dinh Hoang Tu <dhoan...@gmail.com> a écrit :
> >>>
> >>>
> >>> Hello Jean, Xavier,
> >>>
> >>> I think these music functions are useful enough to be integrated into
> Lilypond itself.
> >>> I put them in my local music-functions-init.ly for personal use.
> >>> But it will be helpful for Lilypond users, including myself, to have
> these handy features by default.
> >>>
> >>> Thank you and have a good day.
> >>>
> >>> Tu'
> >>
> >> Hello,
> >>
> >> Actually this particular music function is rather hacky. It only
> applies to notes and rests (not articulations or dynamics) and would fail
> with things like quoted music or events inserted via the edition engraver.
> In summary: it is not mature enough to be integrated in the core right
> away.
> >>
> >> As described in my previous email, one of the projects on my stack
> would make \override just work as expected, so I would prioritize working
> on this.
> >>
> >> Best regards,
> >> Jean
> >
>
>

Reply via email to