On 2020-10-08 3:03 am, K.L. wrote:
Yes, if a global \markup, it can be reserved, but not for the \markup
in *\header
title*.

My testing shows no change in behavior regardless of where the \markup occurs: at the top-level, in \header, or attached to a note.

Here is a more complete test:

%%%%
\version "2.18.2"
#(format #t "\nversion=~s" (ly:version))
#(define (stencil-empty? sten)
  (let ((xex (ly:stencil-extent sten X))
        (yex (ly:stencil-extent sten Y)))
    (and (> (car xex) (cdr xex))
         (> (car yex) (cdr yex)))))
#(define-markup-command
  (assert layout props id pred? arg)
  (string? procedure? markup?)
  (let ((sten (interpret-markup layout props arg)))
    (or (pred? sten)
        (ly:warning "assertion failed: expected ~a ~a"
          id (procedure-name pred?)))
    sten))
buildTestMarkup =
#(define-scheme-function (parser location scope) (string?)
  #{
    \markup {
      \assert #(string-append scope " \\column {...}")
              #stencil-empty?
      \column {
        \assert #(string-append scope " \\line { \"\" }")
                #stencil-empty?
        \line { "" }
        \line { "" }
      }
    }
  #})
\header { title = \buildTestMarkup "\\header" }
\buildTestMarkup "top-level"
{ b'4 -\buildTestMarkup "TextScript" }
%%%%


I checked this in a svg backend result.

That is the critical piece of information. The behavior only reproduces using the SVG backend.

This is a bug in 2.20.0 and earlier, where \line { "" } does not resolve to an empty-stencil but rather a point-stencil, so it ends up taking up space when it should not.

This appears to have been resolved in 2.21.x.


-- Aaron Hill

Reply via email to