Le mardi 14 février 2023 à 13:02 +0100, Valentin Petzel a écrit : > As far as I see this is not the problem. Footnotes appear to be simply > stacked > by extent, not by baseline. This already creates issues with footnotes > extending over multiple lines, as the spacing between different footnotes > will > be less than the spacing between different lines of footnotes. > > Meanwhile we could easily get an acceptable behaviour (I suppose) by changing > > from a equal baseline distance model to a model that aligns baselines to some > > grid, such as this: > > fns = \markuplist { > "Meter change." > "Chord stem." > "Bar line." > \justify { Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut eget > > ante venenatis mi consectetur ornare. Cras facilisis dictum venenatis. } > "Key change." > } > > \markup\column\fns > > #(define (cumsum . x) > (define (impl init a . b) > (if (null? b) > (list (+ init a)) > (cons (+ init a) (apply impl (cons (+ a init) b))))) > (apply impl (cons 0 x))) > > > \markup\vspace #3 > > #(define-markup-command (column-to-grid layout props ml) (markup-list?) > #:properties ((baseline-skip 3.5)) > (let* ((iml (interpret-markup-list layout props ml)) > (exts (map (lambda (s) (ly:stencil-extent s Y)) iml)) > (under-bl-exts (map car exts)) > (under-bl-grids (map (lambda (x) (* (1- (ceiling (/ x baseline- > skip))) baseline-skip)) under-bl-exts)) > (grid-points (cons 0 (apply cumsum under-bl-grids))) > (moved-iml (map (lambda (stc amt) (ly:stencil-translate-axis stc > amt > Y)) iml grid-points))) > (display under-bl-exts) > (apply ly:stencil-add moved-iml))) > > \markup\column-to-grid\fns > > \markup\vspace #3 > > \markup\override #'(baseline-skip . 2.5) \column-to-grid\fns
That is merely a heuristic. It will fail in a case like ``` \version "2.24.0" #(define-markup-command (print-ext layout props arg) (markup?) (let ((stil (interpret-markup layout props arg))) (ly:message "~s" (ly:stencil-extent stil Y)) stil)) fns = \markuplist { "Meter change." "Chord stem." "Bar line." \justify { #@(make-list 200 (list "IJKLM" "abcdefghij")) } "Key change." } #(define (cumsum . x) (define (impl init a . b) (if (null? b) (list (+ init a)) (cons (+ init a) (apply impl (+ a init) b)))) (apply impl 0 x)) #(define-markup-command (column-to-grid layout props ml) (markup-list?) #:properties ((baseline-skip 3.5)) (let* ((iml (interpret-markup-list layout props ml)) (exts (map (lambda (s) (ly:stencil-extent s Y)) iml)) (under-bl-exts (map car exts)) (under-bl-grids (map (lambda (x) (* (1- (ceiling (/ x baseline-skip))) baseline-skip)) under-bl-exts)) (grid-points (cons 0 (apply cumsum under-bl-grids))) (moved-iml (map (lambda (stc amt) (ly:stencil-translate-axis stc amt Y)) iml grid-points))) (apply ly:stencil-add moved-iml))) \markup\override #'(baseline-skip . 2.05) \column-to-grid\fns ``` because I sneakily inserted ascenders and descenders so that some of the lines need to be spaced apart by a tiny bit more than `baseline-skip`. As an alternative to my "extra stencil data" idea, which was a bit hasty, one could conceivably let `\footnote` just accept a markup list and deal with it. Then it could use `\column` or whatever to achieve equal spacing of all lines.
signature.asc
Description: This is a digitally signed message part