That's above and beyond what I was asking for, and gives me a way to
enhance my understanding of the issues. If it requires coding beyond what
you just showed me, I think I could carry on from here myself given what
you provided.

Thanks Jean!

On Fri, Apr 9, 2021 at 10:39 AM Jean Abou Samra <j...@abou-samra.fr> wrote:

>
> Le 09/04/2021 à 17:15, Matthew Probst a écrit :
> > I've been using Lilypond to create lead sheets for a band that I'm in,
> > and it works great for that.  Between that and a website I use for
> > generating simple chord charts, we're covered for our notation purposes.
> >
> > I have some less skilled note readers in the band--they can read
> > rhythm notation, and get a general idea of melody shape from the notes
> > on the staff, but things go easier if they can see the note names for
> > each note under the staff.  That's easy with LilyPond:
> >
> > LeadStaffWithNoteNames = \new Staff \with {
> > instrumentName = #"Lead (notes)"
> > }
> > {
> >     <<
> >         \relative c'' {
> >             \HomeKey
> >             \clef treble
> >             \LeadIntroFull
> >             \LeadHeadFull
> >    }
> >    \context NoteNames {
> >             \set printOctaveNames = ##f
> >             \LeadIntroFull
> >             \LeadHeadFull
> >    }
> >     >>
> > }
> >
> > This works great, except for one cosmetic issue:  For tied notes, the
> > note name is repeated for the second, third, etc. tied note.  While my
> > weaker note-readers can comprehend this given that they can grasp the
> > rhythmic notation, it's a bit of a hassle.
> >
> > Is there any good way to automate printing of note names underneath
> > the staff while avoiding repetitions of the note name during ties?  I
> > did a search of the snippets repository and the documentation for
> > Lilypond 2.22.0, which I'm using.  I'm guessing that it might require
> > custom Scheme instead of just configuration parameters, but I might be
> > wrong.  I know Scheme the language and Lilypond the markup language,
> > but not Lilypond the Scheme API.  I'm willing to do lifting on the
> > code myself but would welcome pointers on how might be best to
> > accomplish it. so I can best direct my learning.
>
>
> Hello,
>
> You want a custom Scheme engraver. Just a
> few days ago I announced a document with
> details about those:
>
> https://lists.gnu.org/archive/html/lilypond-user/2021-04/msg00051.html
>
> More precisely, engravers are explained here:
>
>
> https://extending-lilypond.readthedocs.io/en/latest/translation.html#writing-an-engraver
>
> Moreover, you need to draw a relation between
> the Voice and NoteNames contexts. One way
> to do so is to define a custom context type,
> as documented at
>
> https://lilypond.org/doc/v2.22/Documentation/notation/defining-new-contexts
>
> All in all, this gives:
>
> \version "2.22.0"
>
> #(define (No_note_name_on_tied_note_engraver context)
>     (let ((note-name #f)
>           (ending-tie #f))
>       (make-engraver
>         (acknowledgers
>           ((note-name-interface engraver grob source-engraver)
>              (set! note-name grob)))
>         (end-acknowledgers
>           ((tie-interface engraver grob source-engraver)
>              (set! ending-tie grob)))
>         ((stop-translation-timestep engraver)
>            (if ending-tie
>                (ly:grob-suicide! note-name))
>            (set! note-name #f)
>            (set! ending-tie #f)))))
>
> \layout {
>    \context {
>      \Score
>      \accepts NoteNameContainer
>    }
>    \context {
>      \name NoteNameContainer
>      \type Engraver_group
>      \accepts Staff
>      \accepts NoteNames
>      \consists #No_note_name_on_tied_note_engraver
>    }
>    \context {
>      \NoteNames
>      printOctaveNames = ##f
>    }
> }
>
> notes = { c'1~ c' }
>
> moreNotes = {
>    \set tieWaitForNote = ##t
>    d8~ d~ d~ d d4..~ e16 d1
> }
>
> <<
>    \new NoteNameContainer <<
>      \new Voice \notes
>      \new NoteNames \notes
>    >>
>    \new NoteNameContainer <<
>      \new Voice \moreNotes
>      \new NoteNames \moreNotes
>    >>
>  >>
>
> Best regards,
> Jean
>
>

Reply via email to