On Thu, Feb 6, 2020 at 2:41 AM Aaron Hill <[email protected]> wrote:
> %%%%
> \version "2.19.83"
>
> #(define-markup-command
> (staff-fontsize layout props size arg)
> (number? markup?)
> (let* ((staff-space (ly:output-def-lookup layout 'staff-space 1))
> (sten (interpret-markup layout props (markup "x")))
> (yex (ly:stencil-extent sten Y))
> (height (interval-length yex))
> (magnification (* size (/ staff-space height)))
> (font-size (magnification->font-size magnification)))
> (interpret-markup layout props
> (markup (#:fontsize font-size arg)))))
>
> test =
> \new Staff
> \with {
> \omit Clef
> \omit TimeSignature
> \override NoteHead.stencil =
> #(lambda (grob)
> (grob-interpret-markup grob #{
> \markup {
> \staff-fontsize #1 "bxq"
> \staff-fontsize #2 "bxq"
> \staff-fontsize #3 "bxq"
> \staff-fontsize #4 "bxq"
> } #}))
> }
> { e'1 }
>
> \score { \test \layout { #(layout-set-staff-size 12) } }
> \score { \test \layout { #(layout-set-staff-size 20) } }
> \score { \test \layout { #(layout-set-staff-size 28) } }
> %%%%
>
> 'x' usually has a flat top and bottom, making it a stable reference. If
> the x-height is not your interest, you can substitute 'x' for something
> else. Just be aware that some glyphs often have larger physical
> dimensions than their ideal bounds as a way to compensate for optic
> effects. This is most noticeable with rounded or pointed features. If
> you wanted to measure 'o', for instance, you would need to adjust the
> height computation:
>
> %%%%
> (height (+ (interval-length yex) (* 2 (car yex))))
> %%%%
>
> The principle here is to assume that the extent with which the character
> descends is the optic adjustment, so we subtract it from the top and
> bottom to get the effective height. This only works with glyphs that
> are vertically symmetric in this regard. An 'A', for instance, usually
> has a flat bottom but the point at the top often extends slightly beyond
> its nominal height.
>
>
> -- Aaron Hill
>
>
Thank you very much, Aaron