Hi, 2012/2/3 Thomas Morley <[email protected]>: > Hi, > > 2012/2/2 Xavier Scheuer <[email protected]>: >> On 2 February 2012 22:23, Jean-Alexis Montignies <[email protected]> >> wrote: >>> Hi, >>> >>> I'm trying to write a polychord markup that looks like a mathematical >>> fraction. >>> >>> May be I've overlooked something, but I didn't found a way to draw a >>> horizontal line between to text lines of a column. >>> I'm using: >>> >>> \markup {\override #`(direction . ,UP) \dir-column >>> { "C" >>> \draw-line #'(3 . 0) >>> "Db" } >>> } >>> >>> But then I have too many vertical space between Db and the separator >>> and I have to hardcode the length of the line. >>> >>> Any suggestion? >> >> Why not simply >> >> \chords { >> c1:/des >> } >> >> ? >> >> Cheers, >> Xavier >> >> -- >> Xavier Scheuer <[email protected]> >> >> _______________________________________________ >> lilypond-user mailing list >> [email protected] >> https://lists.gnu.org/mailman/listinfo/lilypond-user > > an idea: > > \version "2.14.2" > > #(define-markup-command (custom-column layout props args) > (markup-list?) > ;#:properties ((direction) > ;(baseline-skip)) > > (let* ((args-length-ls (sort (map (lambda (x) > (interval-length > (ly:stencil-extent > (interpret-markup layout props x) > X))) > args) > >)) > ; baseline-skip is hard-coded! > ; if you change this don't forget to change 0.65 > ; in: #:translate (cons 0 (* 0.65 baseline-skip)) > (baseline-skip 1.2) > (ln-mrkp (markup #:translate (cons 0 (* 0.65 baseline-skip)) > #:draw-line (cons (car args-length-ls) 0))) > (new-args (list (car args) ln-mrkp (cadr args)))) > ; direction is hard-coded! > (stack-lines -1 ;(if (number? direction) direction -1) > 0.0 > baseline-skip > (interpret-markup-list layout props new-args)))) > > \markup { > \custom-column { "C" "Db" } > \custom-column { "Ees" "Disis" } > \custom-column { "a" "Whatsever" } > } > > HTH, > Harm
further testing showed some problems, while changing fontsize and it
was limited to two elements of a markup-list.
I now come up with:
\version "2.14.2"
#(define (insert-elt l1 l2 elt)
"Inserts a new element between every element of list l1
and outputs this as new list l2.
While starting, l2 is supposed to be '() "
(set! l2 (reverse (append (list elt (car l1)) l2)))
(if (= 1 (length (cdr l1)))
(append l2 (last-pair l1))
(insert-elt (cdr l1) (reverse l2) elt)))
#(define-markup-command (dir-column-line layout props direction args)
(number? markup-list?)
(let* ((args-length-ls (sort (map (lambda (x)
(interval-length
(ly:stencil-extent
(interpret-markup layout props x)
X)))
args)
>))
; baseline-skip is hard-coded!
(baseline-skip 0.4)
(ln-mrkp (markup #:draw-line (cons (car args-length-ls) 0)
#:vcenter
#:vspace 0.2))
(new-args (insert-elt args '() ln-mrkp)))
(stack-lines (if (number? direction) direction -1)
0.0
baseline-skip
(interpret-markup-list layout props new-args))))
%------- test
text¹ = \markup {
\dir-column-line #-1 {
\bold "/dir-column-line #-1:"
"stacking down"
elements
with
\fontsize #2 "arbitrary"
number
of
entities.
}
}
text² = \markup \fontsize #-4 {
\dir-column-line #1 {
\line { 1 reverse order! }
\line { 2 in }
\line { 3 stacked up }
\line { 4 are }
\line { 5 elements }
\line { 6 \italic various }
\line { \bold "/dir-column-line #1" }
}
}
text³ = \markup \fontsize #4 {
\dir-column-line #-1 {
\fontsize #3 \bold "Example:"
This
"is a"
clef
\concat { \musicglyph #"clefs.G" "," }
a
\with-color #red "treble-clef."
}
}
%{
\markup {
\fill-line {
\null
\text¹
\text²
\text³
\null
}
}
\markup \vspace #4
%}
\relative c' {
\textLengthOn
c1^\text¹
d^\text²
e^\text³
% c1_\text¹
% d_\text²
% e_\text³
}
It's now possible to use an arbitrary number of elements.
The direction isn't hard-coded, so you have to specify it.
It should work with any additional fontsize-change.
Regards,
Harm
P.S Some parts of the test are commented to receive a smaller image.
<<attachment: dir-column-line.png>>
_______________________________________________ lilypond-user mailing list [email protected] https://lists.gnu.org/mailman/listinfo/lilypond-user
