Hi Joram, On Thu, Mar 19, 2015 at 8:12 AM, Noeck <noeck.marb...@gmx.de> wrote:
> Hi, > > I would like to shorten a hairpin like in this example: > > \relative c'' { > <b c>8\< q q q\! > } > > The left end should start with the beam, the right end should stay the > same. How can I do this? > > I suppose a decent solution to this would involve writing the stencil callback for Hairpin to allow displacement of the endpoints. (Some addition to the C++ code?) Then it would straightforward to read the coordinates of this or that related object, and adjust the hairpin's length accordingly. The following works, at least for your example. It resets the parent of the left bound of the Hairpin spanner to a Stem object. You asked for the beam, specifically, but I don't know that there would be any appreciable difference. I haven't tested this beyond your example, so I can't say what will happen in a real-world example. Anyway... %%% \version "2.19.17" #(define (shorten-hairpin grob) (let ((rb (ly:spanner-bound grob LEFT))) (if (grob::has-interface rb 'note-column-interface) (let ((stem (ly:grob-object rb 'stem))) (if (ly:grob? stem) (ly:spanner-set-bound! grob LEFT stem)))) ; return default for after-line-breaking ly:spanner::kill-zero-spanned-time)) \relative c'' { \override Hairpin.after-line-breaking = #shorten-hairpin <b c>8\< q q q\! } %%% --David
_______________________________________________ lilypond-user mailing list lilypond-user@gnu.org https://lists.gnu.org/mailman/listinfo/lilypond-user