Am So., 31. Aug. 2025 um 08:03 Uhr schrieb Jeff Olson <jjoca...@gmail.com>: > > On 8/30/2025 12:18 PM, Magnus Svenson wrote: > > Tightening up the quotation marks seems to fix it: > > > > "A > > B > > C" > > Thank you, Magnus. Your discovery shows that the page breaking > algorithm can't deal with an empty line or an embedded newline in the > string that string-lines works on. That should be documented as a known > problem. > > But it gets worse. The page breaking problem even infects any proper > subsequent string-lines markuplists, as shown by this example. > > \version "2.24.3" > > \markuplist { \column-lines \string-lines > "A > B > > C" > } > > \markuplist { \column-lines \string-lines > "D > E > F" > } > > In this case, without the blank line between B and C, both the A B C and > D E F markuplists display the expected columns at the top of a single page. > > But including that blank line (or equivalently, a \n after the B) breaks > up not only the A B C markuplist but also the innocent D E F > markuplist. The output starts with A B at the top of the page, but > then page breaking begins putting each stanza line on a new page, so > even D E and F are now on separate pages for a total of 6 pages. > > It appears that page breaking goes berserk globally when a single > string-lines delivers a bad list of markups from a string. > > Are there page-breaking experts here who could explain what's going on? > > Jeff > > >
Actually, this is not a problem of string-lines or column-lines. `markuplist` itself fails: \markuplist { "A" "" "C" } with: programming error: insane spring min_distance requested, ignoring it and with bad output. This is a bug, imho. For now one could replace the empty-stencil for the empty string with point-stencil. Alternatively delete the empty-stencil. Below a fix for string-lines implementing both. #(define-markup-list-command (string-lines-rev layout props str)(string?) #:properties ((split-char #\newline) (keep-empty #t)) ;; If `keep-empty` is #t every empty stencil is replaced by `point-stencil`. ;; If `keep-empty` is #f every empty stencil is removed. (let* ((split-strgs (string-split str split-char)) (trimmed-strg-ls (map string-trim-both split-strgs)) (stils (interpret-markup-list layout props trimmed-strg-ls)) (stils-rev (if keep-empty (map (lambda (stil) (if (ly:stencil-empty? stil) point-stencil stil)) stils) (remove ly:stencil-empty? stils)))) stils-rev)) \markuplist \box \column-lines \string-lines-rev " A B " \markuplist \box \column-lines \override-lines #'(keep-empty . #f) \string-lines-rev " A B " The \box-command is there to make all better visible. Although it affects spacing, delete it. HTH, Harm