Hi, On Wed, May 24, 2017 at 12:47 PM, Lukas-Fabian Moser <l...@gmx.de> wrote: > Hi Robert, > >> >> I would tather like to parenthesize these added augmenation dots but I've >> not found a way to do that. > > > I don't know how to parenthesize them, but here is a solution yielding > brackets around them:
You can use the function parenthesize-stencil to do this. > > \version "2.19.44" > > #(define (special-bracketify original-stencil len thick protusion padding) > (let* ( > (left-bracket (ly:bracket Y (cons (- len) len) thick (- > protusion))) > (right-bracket (ly:bracket Y (cons (- len) len) thick protusion))) > (set! original-stencil > (ly:stencil-combine-at-edge original-stencil X RIGHT right-bracket (- -0.73 > padding))) > (set! original-stencil > (ly:stencil-combine-at-edge original-stencil X RIGHT left-bracket padding)) > original-stencil)) > > bracketDot = \once \override Dots.stencil = #(lambda (grob) > (special-bracketify (ly:dots::print grob) 0.4 0.1 0.2 0)) > % first number (0.4): bracket length > % second number (0.1): thickness > % third number (0.2): protrusion > % fourth number (0.1): space between dot and brackets > > > { > c''4. > r8 > \bracketDot > a'4. > r8 > } > > > Question to the experts: If I unterstand my own code correctly :-), the > right-hand edge of the dot stencil (used by stencil-combine-at-edge) is the > right-most part of the dot itself, while the left-hand edge seems to be the > right-most part of the note the dot is attached to. > For this reason I took (for the left bracket) the *right* hand edge of the > dot and added offsets with trial-and-error, which should be fine since I > assume the dot will have the same size wherever it occurs. But nevertheless > there must be a more conceptual way? The dots are created by a character in the font which consists of the actual dot and whitespace to the left. (This means that the space between dots can't be adjusted. I wonder if it would be better to trim the character and add a property, like 'dot-separation.) You can go your route, adding the brackets individually with an offset, or you could make your own dots, gleaning information from the dots.dot glyph. That's what I do below. (You can get either parentheses or brackets.) %%%%%%%%%%%%%%%%% \version "2.19.44" #(define (parenthesized-dots grob) (let ((mol empty-stencil) (c (ly:grob-property grob 'dot-count))) (if (number? c) (let* ((d (ly:font-get-glyph (ly:grob-default-font grob) "dots.dot")) (thick (ly:output-def-lookup (ly:grob-layout grob) 'line-thickness)) (Y-ext (ly:stencil-extent d Y)) (replacement-dot (make-circle-stencil (/ (- (interval-length Y-ext) thick) 2) thick #t)) (dw (interval-length (ly:stencil-extent d X))) (mol-lst (make-list c replacement-dot)) (mol (reduce (lambda (elem prev) (ly:stencil-combine-at-edge prev X RIGHT elem dw)) point-stencil mol-lst)) ; to make brackets instead ; stencil, axis, thick, protrusion, padding ;(mol (bracketify-stencil mol Y thick 0.2 0)) ; stencil, half-thickness, width, angularity, padding (mol (parenthesize-stencil mol (/ thick 2) 0.2 0 0)) (mol (ly:stencil-translate-axis mol (+ dw thick) X))) mol)))) parenthesizeDots = \override Dots.stencil = #parenthesized-dots { \parenthesizeDots c''4 r c''4. r8 c''4.. r16 c''4... r32 c''4.... r64 c''4..... r128 } %%%%%%%%%%% Hope this helps, David _______________________________________________ lilypond-user mailing list lilypond-user@gnu.org https://lists.gnu.org/mailman/listinfo/lilypond-user