Hello Aaron, Thank you for your help. That does make sense to me and works out quite well -- I don't yet have a grasp how various commands and settings are actually working in LilyPond. I found another example in the LilyPond documentation that shows the internal representation. Where do I find this for input I want to inspect further? http://lilypond.org/doc/v2.20/Documentation/extending/doubling-a-note-with-slurs-_0028example_0029
I tested your syllable function with tweaks (like changing a notehead to a quilisma), and expressive marks like a tenuto. It appears the current code doesn't handle them (this is getting into advanced territory much more quickly than I expected). Sample input I attempted: \syllable { a' \noteQuilisma c'' b'_\tenuto } where noteQuilisma = #(define-music-function (note) (ly:music?) #{ \tweak NoteHead.stencil #ly:text-interface::print \tweak NoteHead.text \markup { \scale #'(0.24 . 0.24) \override #'(filled . #t) \path #0.0 #quilismaPathGreciliae } \tweak NoteHead.X-offset #0 \tweak Stem.stencil ##f #note #} ) Many thanks, mattfong On Mon, Oct 5, 2020 at 9:50 AM Aaron Hill <lilyp...@hillvisions.com> wrote: > (Adding mailing list back to thread...) > > On 2020-10-05 9:07 am, Matthew Fong wrote: > > I'm dissecting your syllable code and have a question for you: How do I > > create a similar list using a slur instead of a melisma? I found this > > documentation, but not sure how to use it > > http://lilypond.org/doc/v2.19/Documentation/internals/slurevent > > SlurEvents end up as articulations of a NoteEvent, whereas the \melisma > command is essentially shorthand for \set melismaBusy = ##t. See below > for how both can be handled. > > > > I understand that using a melisma is quite handy, but for clarity for > > the > > singer, adding slurs is another strong visual indicator of the > > grouping. > > With that in mind, the function I provided can be enhanced to support > both unslurred and slurred melismata: > > %%%% > \version "2.20.0" > > syllable = > #(define-music-function > (style pitches) > ((symbol? #f) ly:music?) > (let* ((pitches (music-pitches pitches)) > (count (length pitches))) > (make-sequential-music > (append-map > (lambda (index pitch) > (let* ((denom 5) ;; NOTE: Adjust this as needed. <<== > (initial? (= index 1)) > (final? (= index count)) > (numer (if final? (- denom (1- count)) 1)) > (music '())) > (set! music > (list (make-music 'NoteEvent > 'pitch pitch > 'duration (ly:make-duration 2 0 numer denom)))) > (if (or initial? final?) > (if (eq? style 'slurred) > (ly:music-set-property! (car music) 'articulations > (list (make-span-event 'SlurEvent > (if initial? START STOP)))) > (set! music (append music (list > (if initial? melisma melismaEnd)))))) > music)) > (iota count 1) > pitches)))) > > { \time 1/4 \hide Staff.BarLine \omit Stem > \syllable { a' c'' b' } > \syllable { a' b' } > \syllable slurred { a' c'' a' b' } > \syllable { b' } } > \addlyrics { lor -- em i -- psum } > %%%% > > Note that if you wanted the default behavior to be slurred, change the > type predicate from (symbol? #f) to (symbol? 'slurred). Then you can > simply specify any other symbol (such as "unslurred") to opt for the > original \melisma/\melismaEnd approach. > > I could see LigatureBrackets as another option, although their handling > is even more peculiar. > > > -- Aaron Hill >