2009/4/11 Mark Polesky <markpole...@yahoo.com>: > > Neil Puttock wrote: >> > Why does Slur have an 'avoid-slur property? >> So they avoid phrasing slurs. >> >> \relative c' { >> \override Slur #'avoid-slur = #'outside >> c\( d( e) f\) >> } > > Okay, but the semantics are contradictory. One could think > of the command in your example in two different ways: > Adjust the slur to keep the slur outside the phrasing-slur. > -or- > Adjust the slur to keep the phrasing-slur inside the slur.
You can see why avoid-slur is accompanied by `ugh'. ;) It's the former meaning; you have to imagine avoid-slur actually means avoid-(phrasing-)slur. > Neither is reflected with the current syntax. Either of > these (non-functioning) commands would be clearer: > \override Slur #'avoid-phrasing-slur = #'outside Adding avoid-phrasing-slur would mean duplicating all the slur avoidance code just for the sake of a different name. > \override PhrasingSlur #'avoid-slur = #'inside No. The acknowledged object (Slur) does the avoidance. Since it's fair to assume that phrasing slurs always encompass slurs, there's no reason for the Slur_engraver to acknowledge phrasing slurs. > As a kludge, we could add an exception clause to the > docstring, but ideally that's the wrong solution IMO. > > Lastly, this construct is also semantically lacking: > \override Staff.Clef #'avoid-slurs = ##f > It's really the slur that's avoiding the clef. This > would be more intuitive: > \override Slur #'ignore-clefs = ##t(default would be #f) > ...but that would be a terrible idea, because you'd want > 'ignore-time-signatures, 'ignore-key-signatures, etc... I agree it's not ideal, but it probably arises from the fact that the avoid-slur infrastructure was already in place when the non-musical avoidance code was added; I imagine it was much easier to rely on the existing code to do the avoidance work, rather than implementing an additional framework just for clefs, time signatures and key signatures. > Maybe something like this would be ideal: > \override Slur #'avoid-list = > #'(clef key-signature time-signature ...) > Maybe not exactly that, but something like it? And then > you could do the same thing for Tie andPhrasingSlur. That list would get very long if it included the grobs which are currently acknowledged. :) It would probably only work as a context property, otherwise you couldn't be sure that avoidance code has access to the grobs which need avoiding. >> > 2. add a choice: 'ignore >> Sounds like a good idea, and only requires one extra >> line of code... > > Don't let me stop you! (: Why the sad face? I'm waiting for your patch to the IR for 'avoid-slur. :) >> > 4. implement 'avoid-ties and 'avoid-phrasing-slurs? >> Judging by the number of `ugh' comments related to >> avoid-slur in the source, extending the same behaviour > < to ties is probably undesirable (though it would be >> good if they avoided clefs and time signatures). > > Only if the user could choose. Oh, definitely; you could imagine the typesetting horrors if the avoidance were as broken as the current behaviour over line breaks. Regards, Neil _______________________________________________ lilypond-devel mailing list lilypond-devel@gnu.org http://lists.gnu.org/mailman/listinfo/lilypond-devel