Hi Michael,
Thanks Lukas!
This works but also forces the accidental on tied notes.
Sorry for not getting back to you sooner.
The following version registers ties and removes our auto-generated
accidentals for notes in which a tie ends. (It's a bit overeager and
also removes tied accidentals after line breaks, so we get a behaviour
as if Accidental.hide-tied-accidental-after-break is set to ##t. Please
give word if you want me to change that.)
Lukas
\version "2.24.0"
forced-accidentals-pitches =
#(music-pitches #{ bes b #})
#(define (diatonic-pitch-class= p q)
(and (= (ly:pitch-notename p) (ly:pitch-notename q))
(= (ly:pitch-alteration p) (ly:pitch-alteration q))))
Force_accidentals_engraver =
#(lambda (context)
(let
((ties '())
(affected-note-events '()))
(make-engraver
(end-acknowledgers
((tie-interface engraver grob source-engraver)
(set! ties (cons grob ties))))
((stop-translation-timestep engraver)
(for-each
(lambda (tie)
(let* ((right-notehead (ly:spanner-bound tie RIGHT))
(right-notehead-cause (ly:grob-property right-notehead
'cause)))
(if (member right-notehead-cause affected-note-events)
(ly:grob-suicide!
;;; the accidental grob should be guaranteed to
;;; exist since we forced it into existence...
(ly:grob-object
right-notehead 'accidental-grob)))))
ties)
(set! ties '())
(set! affected-note-events '()))
(listeners
((note-event engraver event)
(when (member (ly:event-property event 'pitch)
forced-accidentals-pitches
diatonic-pitch-class=)
(ly:event-set-property! event 'force-accidental #t)
(set! affected-note-events
(cons event affected-note-events))))))))
\layout {
\context {
\Voice
\consists #Force_accidentals_engraver
}
}
\transpose a c' \relative
{
a8 gis~ gis g fis g gis a
gis1~ gis2 gis
}