Hallo Burkhard,
Habe ich da etwas übersehen?
wie soll ich's sagen?
Falls Du sonst auf den internationalen Listen wirklich
jede mail liest, und Dich auch noch nach Monaten an jede erinnerst, ja, dann hast Du etwas übersehen.

Es gibt nämlich, das sonst nicht weiter beachtete und bislang nicht weiter bearbeitete, geschweige denn implementierte
issue 3088Der Code ist von Jan Nieuwenhuizen.
Ich habe noch zwei weitere properties eingefügt:
- adjust-length um die Länge besser manipulieren zu können und
- adjust-x-pos um eine Verschiebung in X-Achse möglich zu machen
Jan's Beispiel-Code ist auskommentiert, Dein Beispiel eingefügt.
Die ganzen FIXME-Kommentare habe ich drin gelassen, sie richten sich an denjenigen der daraus einen patch machen möchte. Für jetzt kannst Du sie also getrost ignorieren.
Die Version aus issue 3088 war 2.14.0. Ich habe sie zwar auf 2.16.2 geändert, der Code funktioniert jedoch nachwievor mit 2.14, 2.16 und auch mit 2.17.17
%%FIXME: add `\undertie "undertied"' to regression/markup-commands.ly
\version "2.16.2"
%% FIXME: c&p from stencil.scm -- define-public and remove copy
#(define (make-bezier-sandwich-stencil coords thick xext yext)
(let* ((command-list `(moveto
,(car (list-ref coords 3))
,(cdr (list-ref coords 3))
curveto
,(car (list-ref coords 0))
,(cdr (list-ref coords 0))
,(car (list-ref coords 1))
,(cdr (list-ref coords 1))
,(car (list-ref coords 2))
,(cdr (list-ref coords 2))
curveto
,(car (list-ref coords 4))
,(cdr (list-ref coords 4))
,(car (list-ref coords 5))
,(cdr (list-ref coords 5))
,(car (list-ref coords 6))
,(cdr (list-ref coords 6))
closepath)))
(ly:make-stencil
`(path ,thick `(,@' ,command-list) 'round 'round #t)
xext
yext)))
%% FIXME: rewrite generic wrt axes and replace make-parenthesis-stencil
#(define (make-bow-stencil width height thickness angularity)
"Create a bow stencil.
@var{width} is the width of the bow markup.
@var{thickness} is the thickness of the bow.
@var{height} is the heigth of the bow.
The higher the value of number @var{angularity},
the more angular the shape of the bow."
(let* ((line-width 0.1)
(base-x (if (< width 0) (- width) 0))
(base-y (if (< height 0) (- height) 0))
(x-extent (ordered-cons 0 width))
(y-extent (ordered-cons 0 height))
(left-x (interval-start x-extent))
(right-x (interval-end x-extent))
(inner-y 0)
(outer-y height)
(left-end-point (cons left-x inner-y))
(right-end-point (cons right-x inner-y))
(outer-control-y (+ inner-y (* 4/3 outer-y)))
(inner-control-y (+ outer-control-y
(if (< height 0) thickness (- thickness))))
;; keeping angularity allows for refactoring and
;; merging with make-parenthesis-stencil
(offset-index (- (* 0.6 angularity) 0.8))
(left-control-x (interval-index x-extent offset-index))
(right-control-x (interval-index x-extent (- offset-index)))
(left-outer-control-point
(cons left-control-x outer-control-y))
(right-outer-control-point
(cons right-control-x outer-control-y))
(right-inner-control-point
(cons right-control-x inner-control-y))
(left-inner-control-point
(cons left-control-x inner-control-y)))
(make-bezier-sandwich-stencil
(list right-inner-control-point
left-inner-control-point
left-end-point
right-end-point
left-outer-control-point
right-outer-control-point
right-end-point
left-end-point)
line-width
x-extent
y-extent)))
%% FIXME: replace make-parenthesis-stencil by this:
#(define (make-parenthesis-stencil height width thick angularity)
(ly:stencil-rotate-absolute
(make-bow-stencil height width thick angularity)
-90 0 0))
%% FIXME: c&p from bezier-bow.cc
#(define (F0_1 x) (* (/ 2 PI) (atan (* PI x 0.5))))
#(define (slur-height w h_inf r_0)
(F0_1 (* (/ (* w r_0) h_inf) h_inf)))
#(define (make-tie-stencil width thickness)
(let* ((height-limit 1)
(ratio 0.33)
(angularity 0.5)
(height (slur-height width height-limit ratio)))
(make-bow-stencil width (* -1 height) thickness angularity)))
#(define-markup-command (undertie layout props arg)
(markup?)
#:category font
#:properties ((thickness 1)
(offset 2)
(adjust-length 0)
(adjust-x-pos 0))
"
@cindex undertie-ing text
Undertie @var{arg}. Looks at @code{thickness} to determine line
thickness, and @code{offset} to determine line y-offset.
@lilypond[verbatim,quote]
\\markup \\line {
\\undertie \"undertied\"
\\override #'(offset . 5)
\\override #'(thickness . 1)
\\undertie \"undertied\"
\\override #'(offset . 1)
\\override #'(thickness . 5)
\\undertie \"undertied\"
}
@end lilypond"
(let* ((line-thickness (ly:output-def-lookup layout 'line-thickness))
(thick (* thickness line-thickness))
(markup (interpret-markup layout props arg))
(x1 (car (ly:stencil-extent markup X)))
(x2 (cdr (ly:stencil-extent markup X)))
(w (- x2 x1 adjust-length (* 2 line-thickness)))
(y (* line-thickness (- offset)))
(tie (ly:stencil-translate
(make-tie-stencil w thick)
(cons (+ line-thickness adjust-x-pos) y))))
(ly:stencil-add markup tie)))
%{
\markup \line {
\underline "underlined"
\undertie "undertied"
\override #'(offset . 5)
\override #'(thickness . 1)
\undertie "undertied"
\override #'(offset . 1)
\override #'(thickness . 5)
\undertie "undertied"
"Eng" \undertie "ele" "en"
}
%}
% Noten und Strophe 1
\relative c'' { c4 d e2 }
\addlyrics { \set stanza = "1." Eins zwei drei }
% Strophen 2-3
\markup {
\column {
\line {
"2."
\override #'(adjust-x-pos . 0.5)
\override #'(adjust-length . 1)
\undertie Vier
fünf sechs.
}
"3. Vier fünf."
}
}
HTH,
Harm