<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.lilypond.community/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Lemzwerg</id>
	<title>LilyPond wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.lilypond.community/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Lemzwerg"/>
	<link rel="alternate" type="text/html" href="https://wiki.lilypond.community/wiki/Special:Contributions/Lemzwerg"/>
	<updated>2026-05-01T04:43:29Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.44.2</generator>
	<entry>
		<id>https://wiki.lilypond.community/index.php?title=Time_signature_with_alternate_in_parentheses&amp;diff=6541</id>
		<title>Time signature with alternate in parentheses</title>
		<link rel="alternate" type="text/html" href="https://wiki.lilypond.community/index.php?title=Time_signature_with_alternate_in_parentheses&amp;diff=6541"/>
		<updated>2026-04-15T04:35:44Z</updated>

		<summary type="html">&lt;p&gt;Lemzwerg: Aaand another improvement.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;In polymetric music, a composer may indicate beat structure by following one time signature with another in parenthesis, for example, ‘3/4 (6/8)’ indicating a 6/8 beat in a 3/4 measure, or ‘6/4 (6/8)’ indicating a 6/8 beat in a 6/4 measure.&lt;br /&gt;
&lt;br /&gt;
This snippet provides a music function &amp;lt;code&amp;gt;\timeP&amp;lt;/code&amp;gt; that is a small Scheme wrapper around the &amp;lt;code&amp;gt;\compound-meter&amp;lt;/code&amp;gt; markup function.  It overrides the &amp;lt;code&amp;gt;TimeSignature&amp;lt;/code&amp;gt; stencil once to display both a regular and an alternate time signature.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;lilypond version=&amp;quot;2.24&amp;quot;&amp;gt;&lt;br /&gt;
timeP =&lt;br /&gt;
#(define-music-function (t tp) (list? list?)&lt;br /&gt;
   (define ((time-parenthesized-time t tp) grob)&lt;br /&gt;
     (let ((m1 (grob-interpret-markup&lt;br /&gt;
                grob (markup #:compound-meter t)))&lt;br /&gt;
           (m2 (grob-interpret-markup&lt;br /&gt;
                grob (markup #:compound-meter tp))))&lt;br /&gt;
       (ly:stencil-combine-at-edge&lt;br /&gt;
        m1 X RIGHT&lt;br /&gt;
        (parenthesize-stencil m2 0.1 0.4 0.4 0.1)&lt;br /&gt;
        0.3)))&lt;br /&gt;
   #{&lt;br /&gt;
     \once \override Timing.TimeSignature.stencil =&lt;br /&gt;
       #(time-parenthesized-time t tp)&lt;br /&gt;
   #})&lt;br /&gt;
&lt;br /&gt;
\relative c&#039; {&lt;br /&gt;
  \timeP #&#039;(3 4) #&#039;(6 8) \time 3/4&lt;br /&gt;
    b8 b8 gis8 gis4 gis8 |&lt;br /&gt;
  \timeP #&#039;(4 4) #&#039;(3 2 3 8) \time 4/4&lt;br /&gt;
    b4. b4 b4.&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lilypond&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Rhythms]]&lt;br /&gt;
[[Category:Scheme]]&lt;br /&gt;
[[Category:Snippet]]&lt;/div&gt;</summary>
		<author><name>Lemzwerg</name></author>
	</entry>
	<entry>
		<id>https://wiki.lilypond.community/index.php?title=Time_signature_with_alternate_in_parentheses&amp;diff=6540</id>
		<title>Time signature with alternate in parentheses</title>
		<link rel="alternate" type="text/html" href="https://wiki.lilypond.community/index.php?title=Time_signature_with_alternate_in_parentheses&amp;diff=6540"/>
		<updated>2026-04-15T04:10:29Z</updated>

		<summary type="html">&lt;p&gt;Lemzwerg: Improve more.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;In polymetric music, a composer may indicate beat structure by following one time signature with another in parenthesis, for example, ‘3/4 (6/8)’ indicating a 6/8 beat in a 3/4 measure, or ‘6/4 (6/8)’ indicating a 6/8 beat in a 6/4 measure.&lt;br /&gt;
&lt;br /&gt;
This snippet provides a small Scheme wrapper around the &amp;lt;code&amp;gt;\compound-meter&amp;lt;/code&amp;gt; markup function that can be used to override the &amp;lt;code&amp;gt;TimeSignature&amp;lt;/code&amp;gt; stencil, displaying both a regular and an alternate time signature.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;lilypond version=&amp;quot;2.24&amp;quot;&amp;gt;&lt;br /&gt;
#(define ((time-parenthesized-time t tp) grob)&lt;br /&gt;
   (let ((m1 (grob-interpret-markup&lt;br /&gt;
              grob (markup #:compound-meter t)))&lt;br /&gt;
         (m2 (grob-interpret-markup&lt;br /&gt;
              grob (markup #:compound-meter tp))))&lt;br /&gt;
     (ly:stencil-combine-at-edge&lt;br /&gt;
      m1 X RIGHT&lt;br /&gt;
      (parenthesize-stencil m2 0.1 0.4 0.4 0.1)&lt;br /&gt;
      0.3)))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
\relative c&#039; {&lt;br /&gt;
  \once \override Staff.TimeSignature.stencil =&lt;br /&gt;
    #(time-parenthesized-time &#039;(3 4) &#039;(6 8))&lt;br /&gt;
  \time 3/4 b8 b8 gis8 gis4 gis8 |&lt;br /&gt;
  \once \override Staff.TimeSignature.stencil =&lt;br /&gt;
    #(time-parenthesized-time &#039;(4 4) &#039;(3 2 3 8))&lt;br /&gt;
  \time 4/4 b4. b4 b4.&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lilypond&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Rhythms]]&lt;br /&gt;
[[Category:Scheme]]&lt;br /&gt;
[[Category:Snippet]]&lt;/div&gt;</summary>
		<author><name>Lemzwerg</name></author>
	</entry>
	<entry>
		<id>https://wiki.lilypond.community/index.php?title=Time_signature_with_alternate_in_parentheses&amp;diff=6539</id>
		<title>Time signature with alternate in parentheses</title>
		<link rel="alternate" type="text/html" href="https://wiki.lilypond.community/index.php?title=Time_signature_with_alternate_in_parentheses&amp;diff=6539"/>
		<updated>2026-04-14T20:42:54Z</updated>

		<summary type="html">&lt;p&gt;Lemzwerg: Improved&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;In polymetric music, a composer may indicate beat structure by following one time signature with another in parenthesis, for example: 3/4 (6/8) indicating a 6/8 beat in a 3/4 measure, or 6/4 (6/8) indicating a 6/8 beat in a 6/4 measure.&lt;br /&gt;
&lt;br /&gt;
This snippet uses a small Scheme function that overrides the &amp;lt;code&amp;gt;TimeSignature&amp;lt;/code&amp;gt; stencil once to display both the regular and the alternate time signature.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;lilypond version=&amp;quot;2.24&amp;quot;&amp;gt;&lt;br /&gt;
#(define ((time-parenthesized-time up down upp downp) grob)&lt;br /&gt;
   (let ((m1 (grob-interpret-markup&lt;br /&gt;
              grob&lt;br /&gt;
              (markup #:override &#039;(baseline-skip . 0)&lt;br /&gt;
                      #:number (#:center-column&lt;br /&gt;
                                ((number-&amp;gt;string up)&lt;br /&gt;
                                 (number-&amp;gt;string down))))))&lt;br /&gt;
         (m2 (grob-interpret-markup&lt;br /&gt;
              grob&lt;br /&gt;
              (markup #:override &#039;(baseline-skip . 0)&lt;br /&gt;
                      #:number (#:center-column&lt;br /&gt;
                                ((number-&amp;gt;string upp)&lt;br /&gt;
                                 (number-&amp;gt;string downp)))))))&lt;br /&gt;
     (ly:stencil-combine-at-edge&lt;br /&gt;
      m1 X RIGHT&lt;br /&gt;
      (parenthesize-stencil m2 0.1 0.4 0.4 0.1)&lt;br /&gt;
      0.3)))&lt;br /&gt;
&lt;br /&gt;
\relative c&#039; {&lt;br /&gt;
  \once \override Staff.TimeSignature.stencil =&lt;br /&gt;
    #(time-parenthesized-time 3 4 6 8)&lt;br /&gt;
  \time 3/4 b8 b8 gis8 gis4 gis8 |&lt;br /&gt;
  \time 4/4 b4 b b b&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lilypond&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Rhythms]]&lt;br /&gt;
[[Category:Scheme]]&lt;br /&gt;
[[Category:Snippet]]&lt;/div&gt;</summary>
		<author><name>Lemzwerg</name></author>
	</entry>
	<entry>
		<id>https://wiki.lilypond.community/index.php?title=User_talk:Ksnortum&amp;diff=6537</id>
		<title>User talk:Ksnortum</title>
		<link rel="alternate" type="text/html" href="https://wiki.lilypond.community/index.php?title=User_talk:Ksnortum&amp;diff=6537"/>
		<updated>2026-04-10T15:44:01Z</updated>

		<summary type="html">&lt;p&gt;Lemzwerg: /* Please be careful while using &amp;#039;Edit&amp;#039; */ Reply&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Please be careful while using &#039;Edit&#039; ==&lt;br /&gt;
&lt;br /&gt;
Hello Knute!  There is currently a bug in the &#039;Edit&#039; mode: If you only change some details in the description (i.e., not touching the LilyPond code), the &amp;lt;code&amp;gt;&amp;lt;lilypond&amp;gt;&amp;lt;/code&amp;gt; block gets ‘destroyed’ and is no longer rendered as an image.  Please use &#039;Edit source&#039; instead for the time being to avoid that. -- [[User:Lemzwerg|Lemzwerg]] ([[User talk:Lemzwerg|talk]]) 17:26, 8 April 2026 (UTC)&lt;br /&gt;
&lt;br /&gt;
:Got it, thanks. [[User:Ksnortum|Ksnortum]] ([[User talk:Ksnortum|talk]]) 19:34, 8 April 2026 (UTC)&lt;br /&gt;
:...and thanks for cleaning up the mess! [[User:Ksnortum|Ksnortum]] ([[User talk:Ksnortum|talk]]) 14:58, 10 April 2026 (UTC)&lt;br /&gt;
::You&#039;re welcome! -- [[User:Lemzwerg|Lemzwerg]] ([[User talk:Lemzwerg|talk]]) 15:44, 10 April 2026 (UTC)&lt;/div&gt;</summary>
		<author><name>Lemzwerg</name></author>
	</entry>
	<entry>
		<id>https://wiki.lilypond.community/index.php?title=Clef_change_at_the_beginning_of_a_piece_(alternative)&amp;diff=6534</id>
		<title>Clef change at the beginning of a piece (alternative)</title>
		<link rel="alternate" type="text/html" href="https://wiki.lilypond.community/index.php?title=Clef_change_at_the_beginning_of_a_piece_(alternative)&amp;diff=6534"/>
		<updated>2026-04-08T17:29:32Z</updated>

		<summary type="html">&lt;p&gt;Lemzwerg: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;When changing the clef at the beginning of the first measure, Lilypond just changes the clef for the staff. This is how to keep the staff clef and add an extra clef after the time signature and before the first note.  See also [[Initial clef change]] and [[Clef change at the beginning of a piece]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;lilypond version=&amp;quot;2.24&amp;quot;&amp;gt;&lt;br /&gt;
\relative c&#039; {&lt;br /&gt;
  %%  Start with a bass clef :&lt;br /&gt;
  \clef bass&lt;br /&gt;
  %%  Use a hidden grace note:&lt;br /&gt;
  \once\hideNotes\grace c64&lt;br /&gt;
  %%  Adjust the clef spacing:&lt;br /&gt;
  \once\override Staff.Clef.X-extent = #&#039;(1 . 2)&lt;br /&gt;
  %%  Put in the treble clef:&lt;br /&gt;
  \clef treble&lt;br /&gt;
  c4 c c c | c1&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lilypond&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Staff notation]]&lt;br /&gt;
[[Category:Pitches]]&lt;br /&gt;
[[Category:Tweaks and overrides]]&lt;br /&gt;
[[Category:Snippet]]&lt;/div&gt;</summary>
		<author><name>Lemzwerg</name></author>
	</entry>
	<entry>
		<id>https://wiki.lilypond.community/index.php?title=Clef_change_at_the_beginning_of_a_piece_(alternative)&amp;diff=6533</id>
		<title>Clef change at the beginning of a piece (alternative)</title>
		<link rel="alternate" type="text/html" href="https://wiki.lilypond.community/index.php?title=Clef_change_at_the_beginning_of_a_piece_(alternative)&amp;diff=6533"/>
		<updated>2026-04-08T17:29:02Z</updated>

		<summary type="html">&lt;p&gt;Lemzwerg: Reverted edit by Ksnortum (talk) to last revision by Jean Abou Samra&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;When changing the clef at the beginning of the first measure, Lilypond just changes the clef for the staff. This is how to keep the staff clef and add an extra clef after the time signature and before the first note.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;lilypond version=&amp;quot;2.24&amp;quot;&amp;gt;&lt;br /&gt;
\relative c&#039; {&lt;br /&gt;
  %%  Start with a bass clef :&lt;br /&gt;
  \clef bass&lt;br /&gt;
  %%  Use a hidden grace note:&lt;br /&gt;
  \once\hideNotes\grace c64&lt;br /&gt;
  %%  Adjust the clef spacing:&lt;br /&gt;
  \once\override Staff.Clef.X-extent = #&#039;(1 . 2)&lt;br /&gt;
  %%  Put in the treble clef:&lt;br /&gt;
  \clef treble&lt;br /&gt;
  c4 c c c | c1&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lilypond&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Staff notation]]&lt;br /&gt;
[[Category:Pitches]]&lt;br /&gt;
[[Category:Tweaks and overrides]]&lt;br /&gt;
[[Category:Snippet]]&lt;/div&gt;</summary>
		<author><name>Lemzwerg</name></author>
	</entry>
	<entry>
		<id>https://wiki.lilypond.community/index.php?title=Clef_change_at_the_beginning_of_a_piece&amp;diff=6532</id>
		<title>Clef change at the beginning of a piece</title>
		<link rel="alternate" type="text/html" href="https://wiki.lilypond.community/index.php?title=Clef_change_at_the_beginning_of_a_piece&amp;diff=6532"/>
		<updated>2026-04-08T17:28:29Z</updated>

		<summary type="html">&lt;p&gt;Lemzwerg: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;When changing the clef at the beginning of the first measure, Lilypond just changes the clef for the staff. This is how to keep the staff clef and add an extra clef after the time signature and before the first note.  See also [[Clef change at the beginning of a piece (alternative)]] and [[Initial clef change]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;lilypond version=&amp;quot;2.24&amp;quot;&amp;gt;&lt;br /&gt;
%% http://lsr.di.unimi.it/LSR/Item?id=792&lt;br /&gt;
%% see also http://lilypond.org/doc/stable/Documentation/notation/displaying-pitches&lt;br /&gt;
&lt;br /&gt;
% Append markup in the text property to the grob&lt;br /&gt;
#(define (append-markup grob old-stencil)&lt;br /&gt;
  (ly:stencil-combine-at-edge&lt;br /&gt;
    old-stencil X RIGHT (ly:text-interface::print grob)))&lt;br /&gt;
&lt;br /&gt;
trebleToBass = {&lt;br /&gt;
  \clef bass&lt;br /&gt;
  % Fake staff clef appearance&lt;br /&gt;
  \once \override Staff.Clef.glyph-name = #&amp;quot;clefs.G&amp;quot;&lt;br /&gt;
  \once \override Staff.Clef.Y-offset = #-1&lt;br /&gt;
  % Make sure any key signatures will printed with respect to&lt;br /&gt;
  % correct middle c position expected for treble clef&lt;br /&gt;
  \once \set Staff.middleCClefPosition = -6&lt;br /&gt;
  % Append change clef to the time signature&lt;br /&gt;
  \once \override Staff.TimeSignature.text = \markup {&lt;br /&gt;
    \hspace #1.2&lt;br /&gt;
    \raise #1&lt;br /&gt;
    \musicglyph &amp;quot;clefs.F_change&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
  \once \override Staff.TimeSignature.stencil = #(lambda (grob)&lt;br /&gt;
    (append-markup grob (ly:time-signature::print grob)))&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
bassToTreble = {&lt;br /&gt;
  \clef treble&lt;br /&gt;
  % Fake staff clef appearance&lt;br /&gt;
  \once \override Staff.Clef.glyph-name = #&amp;quot;clefs.F&amp;quot;&lt;br /&gt;
  \once \override Staff.Clef.Y-offset = #1&lt;br /&gt;
  % Make sure any key signatures will printed with respect to&lt;br /&gt;
  % correct middle c position expected for bass clef&lt;br /&gt;
  \once \set Staff.middleCClefPosition = 6&lt;br /&gt;
  % Append change clef to the time signature&lt;br /&gt;
  \once \override Staff.TimeSignature.text = \markup {&lt;br /&gt;
    \hspace #1.2&lt;br /&gt;
    \lower #1&lt;br /&gt;
    \musicglyph &amp;quot;clefs.G_change&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
  \once \override Staff.TimeSignature.stencil = #(lambda (grob)&lt;br /&gt;
    (append-markup grob (ly:time-signature::print grob)))&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
\relative c {&lt;br /&gt;
  \trebleToBass&lt;br /&gt;
  \key f \major&lt;br /&gt;
  c4 d e f&lt;br /&gt;
  % This should not be visible&lt;br /&gt;
  \clef bass&lt;br /&gt;
  g a b c&lt;br /&gt;
  % This should be visible&lt;br /&gt;
  \clef treble&lt;br /&gt;
  d e f g&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lilypond&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Staff notation]]&lt;br /&gt;
[[Category:Staff notation]]&lt;br /&gt;
[[Category:Pitches]]&lt;br /&gt;
[[Category:Tweaks and overrides]]&lt;br /&gt;
[[Category:Snippet]]&lt;/div&gt;</summary>
		<author><name>Lemzwerg</name></author>
	</entry>
	<entry>
		<id>https://wiki.lilypond.community/index.php?title=Clef_change_at_the_beginning_of_a_piece&amp;diff=6531</id>
		<title>Clef change at the beginning of a piece</title>
		<link rel="alternate" type="text/html" href="https://wiki.lilypond.community/index.php?title=Clef_change_at_the_beginning_of_a_piece&amp;diff=6531"/>
		<updated>2026-04-08T17:27:58Z</updated>

		<summary type="html">&lt;p&gt;Lemzwerg: Reverted edit by Ksnortum (talk) to last revision by Lemzwerg&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;When changing the clef at the beginning of the first measure, Lilypond just changes the clef for the staff. This is how to keep the staff clef and add an extra clef after the time signature and before the first note.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;lilypond version=&amp;quot;2.24&amp;quot;&amp;gt;&lt;br /&gt;
%% http://lsr.di.unimi.it/LSR/Item?id=792&lt;br /&gt;
%% see also http://lilypond.org/doc/stable/Documentation/notation/displaying-pitches&lt;br /&gt;
&lt;br /&gt;
% Append markup in the text property to the grob&lt;br /&gt;
#(define (append-markup grob old-stencil)&lt;br /&gt;
  (ly:stencil-combine-at-edge&lt;br /&gt;
    old-stencil X RIGHT (ly:text-interface::print grob)))&lt;br /&gt;
&lt;br /&gt;
trebleToBass = {&lt;br /&gt;
  \clef bass&lt;br /&gt;
  % Fake staff clef appearance&lt;br /&gt;
  \once \override Staff.Clef.glyph-name = #&amp;quot;clefs.G&amp;quot;&lt;br /&gt;
  \once \override Staff.Clef.Y-offset = #-1&lt;br /&gt;
  % Make sure any key signatures will printed with respect to&lt;br /&gt;
  % correct middle c position expected for treble clef&lt;br /&gt;
  \once \set Staff.middleCClefPosition = -6&lt;br /&gt;
  % Append change clef to the time signature&lt;br /&gt;
  \once \override Staff.TimeSignature.text = \markup {&lt;br /&gt;
    \hspace #1.2&lt;br /&gt;
    \raise #1&lt;br /&gt;
    \musicglyph &amp;quot;clefs.F_change&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
  \once \override Staff.TimeSignature.stencil = #(lambda (grob)&lt;br /&gt;
    (append-markup grob (ly:time-signature::print grob)))&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
bassToTreble = {&lt;br /&gt;
  \clef treble&lt;br /&gt;
  % Fake staff clef appearance&lt;br /&gt;
  \once \override Staff.Clef.glyph-name = #&amp;quot;clefs.F&amp;quot;&lt;br /&gt;
  \once \override Staff.Clef.Y-offset = #1&lt;br /&gt;
  % Make sure any key signatures will printed with respect to&lt;br /&gt;
  % correct middle c position expected for bass clef&lt;br /&gt;
  \once \set Staff.middleCClefPosition = 6&lt;br /&gt;
  % Append change clef to the time signature&lt;br /&gt;
  \once \override Staff.TimeSignature.text = \markup {&lt;br /&gt;
    \hspace #1.2&lt;br /&gt;
    \lower #1&lt;br /&gt;
    \musicglyph &amp;quot;clefs.G_change&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
  \once \override Staff.TimeSignature.stencil = #(lambda (grob)&lt;br /&gt;
    (append-markup grob (ly:time-signature::print grob)))&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
\relative c {&lt;br /&gt;
  \trebleToBass&lt;br /&gt;
  \key f \major&lt;br /&gt;
  c4 d e f&lt;br /&gt;
  % This should not be visible&lt;br /&gt;
  \clef bass&lt;br /&gt;
  g a b c&lt;br /&gt;
  % This should be visible&lt;br /&gt;
  \clef treble&lt;br /&gt;
  d e f g&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lilypond&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Staff notation]]&lt;br /&gt;
[[Category:Staff notation]]&lt;br /&gt;
[[Category:Pitches]]&lt;br /&gt;
[[Category:Tweaks and overrides]]&lt;br /&gt;
[[Category:Snippet]]&lt;/div&gt;</summary>
		<author><name>Lemzwerg</name></author>
	</entry>
	<entry>
		<id>https://wiki.lilypond.community/index.php?title=User_talk:Ksnortum&amp;diff=6530</id>
		<title>User talk:Ksnortum</title>
		<link rel="alternate" type="text/html" href="https://wiki.lilypond.community/index.php?title=User_talk:Ksnortum&amp;diff=6530"/>
		<updated>2026-04-08T17:26:25Z</updated>

		<summary type="html">&lt;p&gt;Lemzwerg: /* Please be careful while using &amp;#039;Edit&amp;#039; */ new section&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Please be careful while using &#039;Edit&#039; ==&lt;br /&gt;
&lt;br /&gt;
Hello Knute!  There is currently a bug in the &#039;Edit&#039; mode: If you only change some details in the description (i.e., not touching the LilyPond code), the &amp;lt;code&amp;gt;&amp;lt;lilypond&amp;gt;&amp;lt;/code&amp;gt; block gets ‘destroyed’ and is no longer rendered as an image.  Please use &#039;Edit source&#039; instead for the time being to avoid that. -- [[User:Lemzwerg|Lemzwerg]] ([[User talk:Lemzwerg|talk]]) 17:26, 8 April 2026 (UTC)&lt;/div&gt;</summary>
		<author><name>Lemzwerg</name></author>
	</entry>
	<entry>
		<id>https://wiki.lilypond.community/index.php?title=Initial_clef_change&amp;diff=6529</id>
		<title>Initial clef change</title>
		<link rel="alternate" type="text/html" href="https://wiki.lilypond.community/index.php?title=Initial_clef_change&amp;diff=6529"/>
		<updated>2026-04-08T17:22:41Z</updated>

		<summary type="html">&lt;p&gt;Lemzwerg: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This snippet handles initial clef changes with a custom engraver. This engraver checks whether there is a difference between the initial clef (as given by &amp;lt;code&amp;gt;\with { \clef ... }&amp;lt;/code&amp;gt; and the clef at the first timestep. If any difference is encountered a new clef (spaced like a cue clef) is created, while the original clef and any key signatures are modified to look like the initial clef values.  See also the snippets [[Clef change at the beginning of a piece]] and [[Clef change at the beginning of a piece (alternative)]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;lilypond version=&amp;quot;2.24&amp;quot;&amp;gt;&lt;br /&gt;
%%% This engraver records the initial clef properties (e.g. what is set by \with { \clef ... })&lt;br /&gt;
%%% If in the first timestep these changed, engrave the original clef, and change formatting and break&lt;br /&gt;
%%% alignment of the actual clef to mimic a clef change clef. Duplicates some procedure from clef engraver&lt;br /&gt;
%%% and could easily be integrated.&lt;br /&gt;
#(define (initial-clef-change-engraver context)&lt;br /&gt;
   (let ((initial-clef-properties #f) (cclef #f) (keysigs &#039;()))&lt;br /&gt;
     ; macro for checking if any clef property has changed&lt;br /&gt;
     (define (clef-changed)&lt;br /&gt;
       (&amp;gt;&lt;br /&gt;
        (length initial-clef-properties)&lt;br /&gt;
        (length&lt;br /&gt;
         (filter&lt;br /&gt;
          (lambda (x) (equal? (cdr x) (ly:context-property context (car x))))&lt;br /&gt;
          initial-clef-properties))))&lt;br /&gt;
     (make-engraver&lt;br /&gt;
      ; Record initials propertis&lt;br /&gt;
      ((initialize engraver)&lt;br /&gt;
       (set!&lt;br /&gt;
        initial-clef-properties&lt;br /&gt;
        `((clefGlyph . ,(ly:context-property context &#039;clefGlyph))&lt;br /&gt;
          (clefPosition  . ,(ly:context-property context &#039;clefPosition))&lt;br /&gt;
          (middleCClefPosition . ,(ly:context-property context &#039;middleCClefPosition))&lt;br /&gt;
          (clefTransposition  . ,(ly:context-property context &#039;clefTransposition)))))&lt;br /&gt;
      ; Record the actual clef to adjust. Use details.muted to not acknowledge clef created by this engraver.&lt;br /&gt;
      (acknowledgers&lt;br /&gt;
       ((clef-interface engraver grob source-engraver)&lt;br /&gt;
        (if (not (assoc-get &#039;muted (ly:grob-property grob &#039;details) #f))&lt;br /&gt;
            (set! cclef grob)))&lt;br /&gt;
       ((key-signature-interface engraver grob source-engraver)&lt;br /&gt;
        (set! keysigs (cons grob keysigs))))&lt;br /&gt;
      ; Create a clef if necessary&lt;br /&gt;
      ((process-music engraver)&lt;br /&gt;
       (if (and initial-clef-properties (clef-changed))&lt;br /&gt;
           (let ((clef (ly:engraver-make-grob engraver &#039;Clef &#039;())))&lt;br /&gt;
             (ly:grob-set-property! clef &#039;staff-position (assoc-get &#039;clefPosition initial-clef-properties))&lt;br /&gt;
             (ly:grob-set-property! clef &#039;glyph (assoc-get &#039;clefGlyph initial-clef-properties))&lt;br /&gt;
             (ly:grob-set-nested-property! clef &#039;(details muted) #t)&lt;br /&gt;
             (if ((lambda (x) (and (number? x) (not (= 0 x))))&lt;br /&gt;
                  (assoc-get &#039;clefTransposition initial-clef-properties 0))&lt;br /&gt;
                 (let ((mod (ly:engraver-make-grob engraver &#039;ClefModifier &#039;()))&lt;br /&gt;
                       (formatter (ly:context-property context &#039;clefTranspositionFormatter))&lt;br /&gt;
                       (style (ly:context-property context &#039;clefTranspositionStyle))&lt;br /&gt;
                       (dir (sign (assoc-get &#039;clefTransposition initial-clef-properties 0)))&lt;br /&gt;
                       (abs_trans (1+ (abs (assoc-get &#039;clefTransposition initial-clef-properties 0)))))&lt;br /&gt;
                   (if (procedure? formatter)&lt;br /&gt;
                       (ly:grob-set-property! mod &#039;text (formatter (number-&amp;gt;string abs_trans) style)))&lt;br /&gt;
                   (ly:grob-set-object! mod &#039;side-support-elements (ly:grob-list-&amp;gt;grob-array (list clef)))&lt;br /&gt;
                   (ly:grob-set-parent! mod X clef)&lt;br /&gt;
                   (ly:grob-set-parent! mod Y clef)&lt;br /&gt;
                   (ly:grob-set-property! mod &#039;direction dir))))))&lt;br /&gt;
      ; Adjust the actual clef and key signatures&lt;br /&gt;
      ((process-acknowledged engraver)&lt;br /&gt;
       (if (and cclef initial-clef-properties (clef-changed))&lt;br /&gt;
           (begin&lt;br /&gt;
&lt;br /&gt;
            ; Key signatures need to be handled if they appear before the cue-clef&lt;br /&gt;
            ; This requires the break alignment information, so this only sets a&lt;br /&gt;
            ; hook which will be processed during `before-line-breaking` of the&lt;br /&gt;
            ; BreakAlignGroups&lt;br /&gt;
            (for-each&lt;br /&gt;
             (lambda (keysig)&lt;br /&gt;
               (let ((det (ly:grob-property keysig &#039;details))&lt;br /&gt;
                     (initial-clef-properties initial-clef-properties))&lt;br /&gt;
                 (ly:grob-set-property!&lt;br /&gt;
                  keysig&lt;br /&gt;
                  &#039;details&lt;br /&gt;
                  (acons&lt;br /&gt;
                   &#039;break-alignment-handler&lt;br /&gt;
                   (lambda (grob break-alignment)&lt;br /&gt;
                     (let ((start-of-line&lt;br /&gt;
                            (vector-ref&lt;br /&gt;
                             (ly:grob-property break-alignment &#039;break-align-orders)&lt;br /&gt;
                             2)))&lt;br /&gt;
                       (if (member &#039;cue-clef (or (member &#039;key-signature start-of-line) &#039;()))&lt;br /&gt;
                           (ly:grob-set-property!&lt;br /&gt;
                            grob &#039;c0-position&lt;br /&gt;
                            (assoc-get &#039;middleCClefPosition initial-clef-properties)))))&lt;br /&gt;
                   det))))&lt;br /&gt;
             keysigs)&lt;br /&gt;
&lt;br /&gt;
            (ly:grob-set-property! cclef &#039;non-default #t)&lt;br /&gt;
            (ly:grob-set-property! cclef &#039;break-align-symbol &#039;cue-clef)&lt;br /&gt;
            (if (not (eq? #t (ly:grob-property cclef &#039;full-size-change)))&lt;br /&gt;
                (ly:grob-set-property! cclef &#039;glyph-name&lt;br /&gt;
                                      (format #f &amp;quot;~a_change&amp;quot; (ly:grob-property cclef &#039;glyph)))))))&lt;br /&gt;
      ; Unset parameters&lt;br /&gt;
      ((stop-translation-timestep engraver)&lt;br /&gt;
       (set! initial-clef-properties #f)&lt;br /&gt;
       (set! clef #f)&lt;br /&gt;
       (set! keysigs &#039;())))))&lt;br /&gt;
&lt;br /&gt;
\layout {&lt;br /&gt;
  \context {&lt;br /&gt;
    \Staff&lt;br /&gt;
    \consists #initial-clef-change-engraver&lt;br /&gt;
  }&lt;br /&gt;
  \context {&lt;br /&gt;
    \Score&lt;br /&gt;
    \override BreakAlignGroup.before-line-breaking =&lt;br /&gt;
    #(lambda (grob)&lt;br /&gt;
       (let ((grobs (ly:grob-object grob &#039;elements))&lt;br /&gt;
             (break-alignment (ly:grob-parent grob X)))&lt;br /&gt;
         (if (not (null? grobs))&lt;br /&gt;
             (set! grobs (ly:grob-array-&amp;gt;list grobs)))&lt;br /&gt;
         (for-each&lt;br /&gt;
          (lambda (grob)&lt;br /&gt;
            (let* ((det (ly:grob-property grob &#039;details))&lt;br /&gt;
                   (handler (assoc-get &#039;break-alignment-handler det)))&lt;br /&gt;
              (if (procedure? handler)&lt;br /&gt;
                  (handler grob break-alignment))))&lt;br /&gt;
          grobs)))&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
\new Staff \with { \clef &amp;quot;bass^15&amp;quot; } {&lt;br /&gt;
  \key bes\major&lt;br /&gt;
  \clef &amp;quot;treble_8&amp;quot;&lt;br /&gt;
  c&#039;1 c&#039;1&lt;br /&gt;
  \clef bass&lt;br /&gt;
  c&#039;1&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
\score {&lt;br /&gt;
  \layout {&lt;br /&gt;
    \context {&lt;br /&gt;
      \Score&lt;br /&gt;
      \override BreakAlignment.break-align-orders =&lt;br /&gt;
      ##((staff-ellipsis&lt;br /&gt;
          left-edge&lt;br /&gt;
          cue-end-clef&lt;br /&gt;
          ambitus&lt;br /&gt;
          breathing-sign&lt;br /&gt;
          optional-material-end-bracket&lt;br /&gt;
          signum-repetitionis&lt;br /&gt;
          clef&lt;br /&gt;
          cue-clef&lt;br /&gt;
          staff-bar&lt;br /&gt;
          key-cancellation&lt;br /&gt;
          key-signature&lt;br /&gt;
          time-signature&lt;br /&gt;
          optional-material-start-bracket&lt;br /&gt;
          custos)&lt;br /&gt;
         (staff-ellipsis&lt;br /&gt;
          left-edge&lt;br /&gt;
          optional-material-end-bracket&lt;br /&gt;
          cue-end-clef&lt;br /&gt;
          ambitus&lt;br /&gt;
          breathing-sign&lt;br /&gt;
          signum-repetitionis&lt;br /&gt;
          clef&lt;br /&gt;
          cue-clef&lt;br /&gt;
          staff-bar&lt;br /&gt;
          key-cancellation&lt;br /&gt;
          key-signature&lt;br /&gt;
          time-signature&lt;br /&gt;
          optional-material-start-bracket&lt;br /&gt;
          custos)&lt;br /&gt;
         (staff-ellipsis&lt;br /&gt;
          left-edge&lt;br /&gt;
          optional-material-end-bracket&lt;br /&gt;
          ambitus&lt;br /&gt;
          breathing-sign&lt;br /&gt;
          signum-repetitionis&lt;br /&gt;
          clef&lt;br /&gt;
          cue-clef&lt;br /&gt;
          key-cancellation&lt;br /&gt;
          key-signature&lt;br /&gt;
          time-signature&lt;br /&gt;
          staff-bar&lt;br /&gt;
          optional-material-start-bracket&lt;br /&gt;
          custos))&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  \new Staff \with { \clef &amp;quot;bass^15&amp;quot; } {&lt;br /&gt;
    \key bes\major&lt;br /&gt;
    \clef &amp;quot;treble_8&amp;quot;&lt;br /&gt;
    c&#039;1 c&#039;1&lt;br /&gt;
    \clef bass&lt;br /&gt;
    c&#039;1&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
% Basic usage:&lt;br /&gt;
\score {&lt;br /&gt;
  &amp;lt;&amp;lt;&lt;br /&gt;
    % Just the treble clef&lt;br /&gt;
    \new Staff {&lt;br /&gt;
      \key bes \major&lt;br /&gt;
      c&#039;&#039;1&lt;br /&gt;
    }&lt;br /&gt;
      &lt;br /&gt;
    % Just the bass clef&lt;br /&gt;
    \new Staff \with { \clef bass  } {&lt;br /&gt;
      \key bes \major&lt;br /&gt;
      c1&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    % Initial treble clef, then bass clef&lt;br /&gt;
    \new Staff {&lt;br /&gt;
      \key bes \major&lt;br /&gt;
      \clef bass &lt;br /&gt;
      c1&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    % Initial bass clef, then treble clef&lt;br /&gt;
    \new Staff \with { \clef bass  } {&lt;br /&gt;
      \key bes \major&lt;br /&gt;
      \clef treble &lt;br /&gt;
      c&#039;&#039;1&lt;br /&gt;
    }&lt;br /&gt;
  &amp;gt;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  \layout {&lt;br /&gt;
    \context {&lt;br /&gt;
      \Staff&lt;br /&gt;
      \consists #initial-clef-change-engraver&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lilypond&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Contexts and engravers]]&lt;br /&gt;
[[Category:Scheme]]&lt;br /&gt;
[[Category:Staff notation]]&lt;br /&gt;
[[Category:Snippet]]&lt;/div&gt;</summary>
		<author><name>Lemzwerg</name></author>
	</entry>
	<entry>
		<id>https://wiki.lilypond.community/index.php?title=Initial_clef_change&amp;diff=6528</id>
		<title>Initial clef change</title>
		<link rel="alternate" type="text/html" href="https://wiki.lilypond.community/index.php?title=Initial_clef_change&amp;diff=6528"/>
		<updated>2026-04-08T17:21:45Z</updated>

		<summary type="html">&lt;p&gt;Lemzwerg: Reverted edit by Ksnortum (talk) to last revision by Lemzwerg&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This snippet handles initial clef changes with a custom engraver. This engraver checks whether there is a difference between the initial clef (as given by &amp;lt;code&amp;gt;\with { \clef ... }&amp;lt;/code&amp;gt; and the clef at the first timestep. If any difference is encountered a new clef (spaced like a cue clef) is created, while the original clef and any key signatures are modified to look like the initial clef values.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;lilypond version=&amp;quot;2.24&amp;quot;&amp;gt;&lt;br /&gt;
%%% This engraver records the initial clef properties (e.g. what is set by \with { \clef ... })&lt;br /&gt;
%%% If in the first timestep these changed, engrave the original clef, and change formatting and break&lt;br /&gt;
%%% alignment of the actual clef to mimic a clef change clef. Duplicates some procedure from clef engraver&lt;br /&gt;
%%% and could easily be integrated.&lt;br /&gt;
#(define (initial-clef-change-engraver context)&lt;br /&gt;
   (let ((initial-clef-properties #f) (cclef #f) (keysigs &#039;()))&lt;br /&gt;
     ; macro for checking if any clef property has changed&lt;br /&gt;
     (define (clef-changed)&lt;br /&gt;
       (&amp;gt;&lt;br /&gt;
        (length initial-clef-properties)&lt;br /&gt;
        (length&lt;br /&gt;
         (filter&lt;br /&gt;
          (lambda (x) (equal? (cdr x) (ly:context-property context (car x))))&lt;br /&gt;
          initial-clef-properties))))&lt;br /&gt;
     (make-engraver&lt;br /&gt;
      ; Record initials propertis&lt;br /&gt;
      ((initialize engraver)&lt;br /&gt;
       (set!&lt;br /&gt;
        initial-clef-properties&lt;br /&gt;
        `((clefGlyph . ,(ly:context-property context &#039;clefGlyph))&lt;br /&gt;
          (clefPosition  . ,(ly:context-property context &#039;clefPosition))&lt;br /&gt;
          (middleCClefPosition . ,(ly:context-property context &#039;middleCClefPosition))&lt;br /&gt;
          (clefTransposition  . ,(ly:context-property context &#039;clefTransposition)))))&lt;br /&gt;
      ; Record the actual clef to adjust. Use details.muted to not acknowledge clef created by this engraver.&lt;br /&gt;
      (acknowledgers&lt;br /&gt;
       ((clef-interface engraver grob source-engraver)&lt;br /&gt;
        (if (not (assoc-get &#039;muted (ly:grob-property grob &#039;details) #f))&lt;br /&gt;
            (set! cclef grob)))&lt;br /&gt;
       ((key-signature-interface engraver grob source-engraver)&lt;br /&gt;
        (set! keysigs (cons grob keysigs))))&lt;br /&gt;
      ; Create a clef if necessary&lt;br /&gt;
      ((process-music engraver)&lt;br /&gt;
       (if (and initial-clef-properties (clef-changed))&lt;br /&gt;
           (let ((clef (ly:engraver-make-grob engraver &#039;Clef &#039;())))&lt;br /&gt;
             (ly:grob-set-property! clef &#039;staff-position (assoc-get &#039;clefPosition initial-clef-properties))&lt;br /&gt;
             (ly:grob-set-property! clef &#039;glyph (assoc-get &#039;clefGlyph initial-clef-properties))&lt;br /&gt;
             (ly:grob-set-nested-property! clef &#039;(details muted) #t)&lt;br /&gt;
             (if ((lambda (x) (and (number? x) (not (= 0 x))))&lt;br /&gt;
                  (assoc-get &#039;clefTransposition initial-clef-properties 0))&lt;br /&gt;
                 (let ((mod (ly:engraver-make-grob engraver &#039;ClefModifier &#039;()))&lt;br /&gt;
                       (formatter (ly:context-property context &#039;clefTranspositionFormatter))&lt;br /&gt;
                       (style (ly:context-property context &#039;clefTranspositionStyle))&lt;br /&gt;
                       (dir (sign (assoc-get &#039;clefTransposition initial-clef-properties 0)))&lt;br /&gt;
                       (abs_trans (1+ (abs (assoc-get &#039;clefTransposition initial-clef-properties 0)))))&lt;br /&gt;
                   (if (procedure? formatter)&lt;br /&gt;
                       (ly:grob-set-property! mod &#039;text (formatter (number-&amp;gt;string abs_trans) style)))&lt;br /&gt;
                   (ly:grob-set-object! mod &#039;side-support-elements (ly:grob-list-&amp;gt;grob-array (list clef)))&lt;br /&gt;
                   (ly:grob-set-parent! mod X clef)&lt;br /&gt;
                   (ly:grob-set-parent! mod Y clef)&lt;br /&gt;
                   (ly:grob-set-property! mod &#039;direction dir))))))&lt;br /&gt;
      ; Adjust the actual clef and key signatures&lt;br /&gt;
      ((process-acknowledged engraver)&lt;br /&gt;
       (if (and cclef initial-clef-properties (clef-changed))&lt;br /&gt;
           (begin&lt;br /&gt;
&lt;br /&gt;
            ; Key signatures need to be handled if they appear before the cue-clef&lt;br /&gt;
            ; This requires the break alignment information, so this only sets a&lt;br /&gt;
            ; hook which will be processed during `before-line-breaking` of the&lt;br /&gt;
            ; BreakAlignGroups&lt;br /&gt;
            (for-each&lt;br /&gt;
             (lambda (keysig)&lt;br /&gt;
               (let ((det (ly:grob-property keysig &#039;details))&lt;br /&gt;
                     (initial-clef-properties initial-clef-properties))&lt;br /&gt;
                 (ly:grob-set-property!&lt;br /&gt;
                  keysig&lt;br /&gt;
                  &#039;details&lt;br /&gt;
                  (acons&lt;br /&gt;
                   &#039;break-alignment-handler&lt;br /&gt;
                   (lambda (grob break-alignment)&lt;br /&gt;
                     (let ((start-of-line&lt;br /&gt;
                            (vector-ref&lt;br /&gt;
                             (ly:grob-property break-alignment &#039;break-align-orders)&lt;br /&gt;
                             2)))&lt;br /&gt;
                       (if (member &#039;cue-clef (or (member &#039;key-signature start-of-line) &#039;()))&lt;br /&gt;
                           (ly:grob-set-property!&lt;br /&gt;
                            grob &#039;c0-position&lt;br /&gt;
                            (assoc-get &#039;middleCClefPosition initial-clef-properties)))))&lt;br /&gt;
                   det))))&lt;br /&gt;
             keysigs)&lt;br /&gt;
&lt;br /&gt;
            (ly:grob-set-property! cclef &#039;non-default #t)&lt;br /&gt;
            (ly:grob-set-property! cclef &#039;break-align-symbol &#039;cue-clef)&lt;br /&gt;
            (if (not (eq? #t (ly:grob-property cclef &#039;full-size-change)))&lt;br /&gt;
                (ly:grob-set-property! cclef &#039;glyph-name&lt;br /&gt;
                                      (format #f &amp;quot;~a_change&amp;quot; (ly:grob-property cclef &#039;glyph)))))))&lt;br /&gt;
      ; Unset parameters&lt;br /&gt;
      ((stop-translation-timestep engraver)&lt;br /&gt;
       (set! initial-clef-properties #f)&lt;br /&gt;
       (set! clef #f)&lt;br /&gt;
       (set! keysigs &#039;())))))&lt;br /&gt;
&lt;br /&gt;
\layout {&lt;br /&gt;
  \context {&lt;br /&gt;
    \Staff&lt;br /&gt;
    \consists #initial-clef-change-engraver&lt;br /&gt;
  }&lt;br /&gt;
  \context {&lt;br /&gt;
    \Score&lt;br /&gt;
    \override BreakAlignGroup.before-line-breaking =&lt;br /&gt;
    #(lambda (grob)&lt;br /&gt;
       (let ((grobs (ly:grob-object grob &#039;elements))&lt;br /&gt;
             (break-alignment (ly:grob-parent grob X)))&lt;br /&gt;
         (if (not (null? grobs))&lt;br /&gt;
             (set! grobs (ly:grob-array-&amp;gt;list grobs)))&lt;br /&gt;
         (for-each&lt;br /&gt;
          (lambda (grob)&lt;br /&gt;
            (let* ((det (ly:grob-property grob &#039;details))&lt;br /&gt;
                   (handler (assoc-get &#039;break-alignment-handler det)))&lt;br /&gt;
              (if (procedure? handler)&lt;br /&gt;
                  (handler grob break-alignment))))&lt;br /&gt;
          grobs)))&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
\new Staff \with { \clef &amp;quot;bass^15&amp;quot; } {&lt;br /&gt;
  \key bes\major&lt;br /&gt;
  \clef &amp;quot;treble_8&amp;quot;&lt;br /&gt;
  c&#039;1 c&#039;1&lt;br /&gt;
  \clef bass&lt;br /&gt;
  c&#039;1&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
\score {&lt;br /&gt;
  \layout {&lt;br /&gt;
    \context {&lt;br /&gt;
      \Score&lt;br /&gt;
      \override BreakAlignment.break-align-orders =&lt;br /&gt;
      ##((staff-ellipsis&lt;br /&gt;
          left-edge&lt;br /&gt;
          cue-end-clef&lt;br /&gt;
          ambitus&lt;br /&gt;
          breathing-sign&lt;br /&gt;
          optional-material-end-bracket&lt;br /&gt;
          signum-repetitionis&lt;br /&gt;
          clef&lt;br /&gt;
          cue-clef&lt;br /&gt;
          staff-bar&lt;br /&gt;
          key-cancellation&lt;br /&gt;
          key-signature&lt;br /&gt;
          time-signature&lt;br /&gt;
          optional-material-start-bracket&lt;br /&gt;
          custos)&lt;br /&gt;
         (staff-ellipsis&lt;br /&gt;
          left-edge&lt;br /&gt;
          optional-material-end-bracket&lt;br /&gt;
          cue-end-clef&lt;br /&gt;
          ambitus&lt;br /&gt;
          breathing-sign&lt;br /&gt;
          signum-repetitionis&lt;br /&gt;
          clef&lt;br /&gt;
          cue-clef&lt;br /&gt;
          staff-bar&lt;br /&gt;
          key-cancellation&lt;br /&gt;
          key-signature&lt;br /&gt;
          time-signature&lt;br /&gt;
          optional-material-start-bracket&lt;br /&gt;
          custos)&lt;br /&gt;
         (staff-ellipsis&lt;br /&gt;
          left-edge&lt;br /&gt;
          optional-material-end-bracket&lt;br /&gt;
          ambitus&lt;br /&gt;
          breathing-sign&lt;br /&gt;
          signum-repetitionis&lt;br /&gt;
          clef&lt;br /&gt;
          cue-clef&lt;br /&gt;
          key-cancellation&lt;br /&gt;
          key-signature&lt;br /&gt;
          time-signature&lt;br /&gt;
          staff-bar&lt;br /&gt;
          optional-material-start-bracket&lt;br /&gt;
          custos))&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  \new Staff \with { \clef &amp;quot;bass^15&amp;quot; } {&lt;br /&gt;
    \key bes\major&lt;br /&gt;
    \clef &amp;quot;treble_8&amp;quot;&lt;br /&gt;
    c&#039;1 c&#039;1&lt;br /&gt;
    \clef bass&lt;br /&gt;
    c&#039;1&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
% Basic usage:&lt;br /&gt;
\score {&lt;br /&gt;
  &amp;lt;&amp;lt;&lt;br /&gt;
    % Just the treble clef&lt;br /&gt;
    \new Staff {&lt;br /&gt;
      \key bes \major&lt;br /&gt;
      c&#039;&#039;1&lt;br /&gt;
    }&lt;br /&gt;
      &lt;br /&gt;
    % Just the bass clef&lt;br /&gt;
    \new Staff \with { \clef bass  } {&lt;br /&gt;
      \key bes \major&lt;br /&gt;
      c1&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    % Initial treble clef, then bass clef&lt;br /&gt;
    \new Staff {&lt;br /&gt;
      \key bes \major&lt;br /&gt;
      \clef bass &lt;br /&gt;
      c1&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    % Initial bass clef, then treble clef&lt;br /&gt;
    \new Staff \with { \clef bass  } {&lt;br /&gt;
      \key bes \major&lt;br /&gt;
      \clef treble &lt;br /&gt;
      c&#039;&#039;1&lt;br /&gt;
    }&lt;br /&gt;
  &amp;gt;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  \layout {&lt;br /&gt;
    \context {&lt;br /&gt;
      \Staff&lt;br /&gt;
      \consists #initial-clef-change-engraver&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lilypond&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Contexts and engravers]]&lt;br /&gt;
[[Category:Scheme]]&lt;br /&gt;
[[Category:Staff notation]]&lt;br /&gt;
[[Category:Snippet]]&lt;/div&gt;</summary>
		<author><name>Lemzwerg</name></author>
	</entry>
	<entry>
		<id>https://wiki.lilypond.community/index.php?title=Splitting_chords&amp;diff=6518</id>
		<title>Splitting chords</title>
		<link rel="alternate" type="text/html" href="https://wiki.lilypond.community/index.php?title=Splitting_chords&amp;diff=6518"/>
		<updated>2026-04-07T03:53:53Z</updated>

		<summary type="html">&lt;p&gt;Lemzwerg: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This snippet is a 2009 contribution by Gilles Thibault in [https://lists.gnu.org/archive/html/lilypond-user/2009-01/msg00685.html lilypond-user]. It provides two functions to split a chord sequence into two separate voices, also preserving articulations and slurs: &amp;lt;code&amp;gt;\keepOnlyFirstNote&amp;lt;/code&amp;gt; extracts the first note (as given in the input; this is usually the lowest one) of every chord, and &amp;lt;code&amp;gt;\deleteFirstNote&amp;lt;/code&amp;gt; collects the remaining notes.&lt;br /&gt;
&lt;br /&gt;
Note that these functions don&#039;t support &amp;lt;samp&amp;gt;q&amp;lt;/samp&amp;gt; to repeat the last chord.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;lilypond version=&amp;quot;2.24&amp;quot;&amp;gt;&lt;br /&gt;
#(define (has-duration? music)&lt;br /&gt;
   (ly:duration? (ly:music-property music &#039;duration)))&lt;br /&gt;
&lt;br /&gt;
#(define (not-has-duration? music)&lt;br /&gt;
   (not (has-duration? music)))&lt;br /&gt;
&lt;br /&gt;
keepOnlyFirstNote =&lt;br /&gt;
#(define-music-function (parser location music) (ly:music?)&lt;br /&gt;
   (music-map&lt;br /&gt;
    (lambda (evt)&lt;br /&gt;
      (when (eq? &#039;EventChord (ly:music-property evt &#039;name))&lt;br /&gt;
 	(let ((elts (ly:music-property evt &#039;elements)))&lt;br /&gt;
 	  (when (has-duration? (car elts))&lt;br /&gt;
 	    (ly:music-set-property!&lt;br /&gt;
 	     evt &#039;elements&lt;br /&gt;
 	     (cons (car elts)&lt;br /&gt;
 		   (filter not-has-duration? (cdr elts)))))))&lt;br /&gt;
      evt)&lt;br /&gt;
    music))&lt;br /&gt;
&lt;br /&gt;
deleteFirstNote =&lt;br /&gt;
#(define-music-function (parser location music) (ly:music?)&lt;br /&gt;
   (music-map&lt;br /&gt;
    (lambda (evt)&lt;br /&gt;
      (when (eq? &#039;EventChord (ly:music-property evt &#039;name))&lt;br /&gt;
 	(let ((elts (ly:music-property evt &#039;elements)))&lt;br /&gt;
          (when (has-duration? (car elts))&lt;br /&gt;
            (ly:music-set-property! evt &#039;elements  (cdr elts)))))&lt;br /&gt;
      evt)&lt;br /&gt;
    music))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
music = \relative c&#039; {&lt;br /&gt;
  &amp;lt;c e&amp;gt;4-&amp;gt; &amp;lt;d f&amp;gt;( &amp;lt;b g&#039;&amp;gt;) &amp;lt;c e&amp;gt;-. g2 c2&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
\markup { Music with chords }&lt;br /&gt;
\new Staff \music&lt;br /&gt;
&lt;br /&gt;
\markup { Music split into two staves }&lt;br /&gt;
&amp;lt;&amp;lt;&lt;br /&gt;
  \new Staff \deleteFirstNote \music&lt;br /&gt;
  \new Staff \keepOnlyFirstNote \music&lt;br /&gt;
&amp;gt;&amp;gt;&lt;br /&gt;
&amp;lt;/lilypond&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[category:Chords]]&lt;br /&gt;
[[category:Scheme]]&lt;br /&gt;
[[category:Really cool]]&lt;/div&gt;</summary>
		<author><name>Lemzwerg</name></author>
	</entry>
	<entry>
		<id>https://wiki.lilypond.community/index.php?title=Splitting_chords&amp;diff=6517</id>
		<title>Splitting chords</title>
		<link rel="alternate" type="text/html" href="https://wiki.lilypond.community/index.php?title=Splitting_chords&amp;diff=6517"/>
		<updated>2026-04-07T03:51:40Z</updated>

		<summary type="html">&lt;p&gt;Lemzwerg: Not sure how it could happen that changing a single letter in the docstring completely ruined the rendering...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This snippet is a 2009 contribution by Gilles Thibault in [https://lists.gnu.org/archive/html/lilypond-user/2009-01/msg00685.html lilypond-user]. It provides two functions to split a chord sequence into two separate voices, also preserving articulations and slurs: &amp;lt;code&amp;gt;\keepOnlyFirstNote&amp;lt;/code&amp;gt; extracts the first note (as given in the input; this is usually the lowest one) of every chord, and &amp;lt;code&amp;gt;\deleteFirstNote&amp;lt;/code&amp;gt; collects the remaining notes.&lt;br /&gt;
&lt;br /&gt;
Note that these function don&#039;t support &amp;lt;samp&amp;gt;q&amp;lt;/samp&amp;gt; to repeat the last chord.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;lilypond version=&amp;quot;2.24&amp;quot;&amp;gt;&lt;br /&gt;
#(define (has-duration? music)&lt;br /&gt;
   (ly:duration? (ly:music-property music &#039;duration)))&lt;br /&gt;
&lt;br /&gt;
#(define (not-has-duration? music)&lt;br /&gt;
   (not (has-duration? music)))&lt;br /&gt;
&lt;br /&gt;
keepOnlyFirstNote =&lt;br /&gt;
#(define-music-function (parser location music) (ly:music?)&lt;br /&gt;
   (music-map&lt;br /&gt;
    (lambda (evt)&lt;br /&gt;
      (when (eq? &#039;EventChord (ly:music-property evt &#039;name))&lt;br /&gt;
 	(let ((elts (ly:music-property evt &#039;elements)))&lt;br /&gt;
 	  (when (has-duration? (car elts))&lt;br /&gt;
 	    (ly:music-set-property!&lt;br /&gt;
 	     evt &#039;elements&lt;br /&gt;
 	     (cons (car elts)&lt;br /&gt;
 		   (filter not-has-duration? (cdr elts)))))))&lt;br /&gt;
      evt)&lt;br /&gt;
    music))&lt;br /&gt;
&lt;br /&gt;
deleteFirstNote =&lt;br /&gt;
#(define-music-function (parser location music) (ly:music?)&lt;br /&gt;
   (music-map&lt;br /&gt;
    (lambda (evt)&lt;br /&gt;
      (when (eq? &#039;EventChord (ly:music-property evt &#039;name))&lt;br /&gt;
 	(let ((elts (ly:music-property evt &#039;elements)))&lt;br /&gt;
          (when (has-duration? (car elts))&lt;br /&gt;
            (ly:music-set-property! evt &#039;elements  (cdr elts)))))&lt;br /&gt;
      evt)&lt;br /&gt;
    music))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
music = \relative c&#039; {&lt;br /&gt;
  &amp;lt;c e&amp;gt;4-&amp;gt; &amp;lt;d f&amp;gt;( &amp;lt;b g&#039;&amp;gt;) &amp;lt;c e&amp;gt;-. g2 c2&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
\markup { Music with chords }&lt;br /&gt;
\new Staff \music&lt;br /&gt;
&lt;br /&gt;
\markup { Music split into two staves }&lt;br /&gt;
&amp;lt;&amp;lt;&lt;br /&gt;
  \new Staff \deleteFirstNote \music&lt;br /&gt;
  \new Staff \keepOnlyFirstNote \music&lt;br /&gt;
&amp;gt;&amp;gt;&lt;br /&gt;
&amp;lt;/lilypond&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[category:Chords]]&lt;br /&gt;
[[category:Scheme]]&lt;br /&gt;
[[category:Really cool]]&lt;/div&gt;</summary>
		<author><name>Lemzwerg</name></author>
	</entry>
	<entry>
		<id>https://wiki.lilypond.community/index.php?title=Splitting_chords&amp;diff=6513</id>
		<title>Splitting chords</title>
		<link rel="alternate" type="text/html" href="https://wiki.lilypond.community/index.php?title=Splitting_chords&amp;diff=6513"/>
		<updated>2026-04-05T09:09:04Z</updated>

		<summary type="html">&lt;p&gt;Lemzwerg: Formatting, improved docstring&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This snippet is a 2009 contribution by Gilles Thibault in [https://lists.gnu.org/archive/html/lilypond-user/2009-01/msg00685.html lilypond-user]. It provides two functions to split a chord sequence into two separate voices, also preserving articulations and slurs: &amp;lt;code&amp;gt;\keepOnlyFirstNode&amp;lt;/code&amp;gt; extracts the first note (as given in the input; this is usually the lowest one) of every chord, and &amp;lt;code&amp;gt;\deleteFirstNote&amp;lt;/code&amp;gt; collects the remaining notes.&lt;br /&gt;
&lt;br /&gt;
Note that these function don&#039;t support &amp;lt;samp&amp;gt;q&amp;lt;/samp&amp;gt; to repeat the last chord.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;lilypond version=&amp;quot;2.24&amp;quot;&amp;gt;&lt;br /&gt;
#(define (has-duration? music)&lt;br /&gt;
   (ly:duration? (ly:music-property music &#039;duration)))&lt;br /&gt;
&lt;br /&gt;
#(define (not-has-duration? music)&lt;br /&gt;
   (not (has-duration? music)))&lt;br /&gt;
&lt;br /&gt;
keepOnlyFirstNote =&lt;br /&gt;
#(define-music-function (parser location music) (ly:music?)&lt;br /&gt;
   (music-map&lt;br /&gt;
    (lambda (evt)&lt;br /&gt;
      (when (eq? &#039;EventChord (ly:music-property evt &#039;name))&lt;br /&gt;
	(let ((elts (ly:music-property evt &#039;elements)))&lt;br /&gt;
	  (when (has-duration? (car elts))&lt;br /&gt;
	    (ly:music-set-property!&lt;br /&gt;
	     evt &#039;elements&lt;br /&gt;
	     (cons (car elts)&lt;br /&gt;
		   (filter not-has-duration? (cdr elts)))))))&lt;br /&gt;
      evt)&lt;br /&gt;
    music))&lt;br /&gt;
&lt;br /&gt;
deleteFirstNote =&lt;br /&gt;
#(define-music-function (parser location music) (ly:music?)&lt;br /&gt;
   (music-map&lt;br /&gt;
    (lambda (evt)&lt;br /&gt;
      (when (eq? &#039;EventChord (ly:music-property evt &#039;name))&lt;br /&gt;
	(let ((elts (ly:music-property evt &#039;elements)))&lt;br /&gt;
          (when (has-duration? (car elts))&lt;br /&gt;
            (ly:music-set-property! evt &#039;elements  (cdr elts)))))&lt;br /&gt;
      evt)&lt;br /&gt;
    music))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
music = \relative c&#039; {&lt;br /&gt;
  &amp;lt;c e&amp;gt;4-&amp;gt; &amp;lt;d f&amp;gt;( &amp;lt;b g&#039;&amp;gt;) &amp;lt;c e&amp;gt;-. g2 c2&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
\markup { Music with chords }&lt;br /&gt;
\new Staff \music&lt;br /&gt;
&lt;br /&gt;
\markup { Music split into two staffs }&lt;br /&gt;
&amp;lt;&amp;lt;&lt;br /&gt;
  \new Staff \deleteFirstNote \music&lt;br /&gt;
  \new Staff \keepOnlyFirstNote \music&lt;br /&gt;
&amp;gt;&amp;gt;&lt;br /&gt;
&amp;lt;/lilypond&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[category:Chords]]&lt;br /&gt;
[[category:Scheme]]&lt;br /&gt;
[[category:Really cool]]&lt;/div&gt;</summary>
		<author><name>Lemzwerg</name></author>
	</entry>
	<entry>
		<id>https://wiki.lilypond.community/index.php?title=User_talk:MartialR&amp;diff=6506</id>
		<title>User talk:MartialR</title>
		<link rel="alternate" type="text/html" href="https://wiki.lilypond.community/index.php?title=User_talk:MartialR&amp;diff=6506"/>
		<updated>2026-03-31T11:16:49Z</updated>

		<summary type="html">&lt;p&gt;Lemzwerg: /* Recorder diagrams */ new section&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Recorder diagrams ==&lt;br /&gt;
&lt;br /&gt;
Please have a look at [https://wiki.lilypond.community/wiki/Talk:Diagram_for_Recorder_baroque_in_F_and_C#c-Lemzwerg-20260331094100-Better_markup_definitions this comment] -- [[User:Lemzwerg|Lemzwerg]] ([[User talk:Lemzwerg|talk]]) 11:16, 31 March 2026 (UTC)&lt;/div&gt;</summary>
		<author><name>Lemzwerg</name></author>
	</entry>
	<entry>
		<id>https://wiki.lilypond.community/index.php?title=Talk:Diagram_for_Recorder_baroque_in_F_and_C&amp;diff=6505</id>
		<title>Talk:Diagram for Recorder baroque in F and C</title>
		<link rel="alternate" type="text/html" href="https://wiki.lilypond.community/index.php?title=Talk:Diagram_for_Recorder_baroque_in_F_and_C&amp;diff=6505"/>
		<updated>2026-03-31T11:10:26Z</updated>

		<summary type="html">&lt;p&gt;Lemzwerg: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Better markup definitions ==&lt;br /&gt;
&lt;br /&gt;
Please ask for help on the [mailto:lilypond-user@gnu.org &#039;lilypond-user&#039; mailing list] how to write a Scheme function for defining the fingering markups, avoiding tedious repetition!  This will dramatically reduce the size of the definitions, also making them easier to maintain. -- [[User:Lemzwerg|Lemzwerg]] ([[User talk:Lemzwerg|talk]]) 09:41, 31 March 2026 (UTC)&lt;/div&gt;</summary>
		<author><name>Lemzwerg</name></author>
	</entry>
	<entry>
		<id>https://wiki.lilypond.community/index.php?title=Talk:Diagram_for_Recorder_baroque_in_F_and_C&amp;diff=6504</id>
		<title>Talk:Diagram for Recorder baroque in F and C</title>
		<link rel="alternate" type="text/html" href="https://wiki.lilypond.community/index.php?title=Talk:Diagram_for_Recorder_baroque_in_F_and_C&amp;diff=6504"/>
		<updated>2026-03-31T09:41:28Z</updated>

		<summary type="html">&lt;p&gt;Lemzwerg: /* Better markup definitions */ new section&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Better markup definitions ==&lt;br /&gt;
&lt;br /&gt;
Please ask for help on the [[mailto:lilypond-user@gnu.org &#039;lilypond-user&#039; mailing list]] how to write a Scheme function for defining the fingering markups, avoiding tedious repetition!  This will dramatically reduce the size of the definitions, also making them easier to maintain. -- [[User:Lemzwerg|Lemzwerg]] ([[User talk:Lemzwerg|talk]]) 09:41, 31 March 2026 (UTC)&lt;/div&gt;</summary>
		<author><name>Lemzwerg</name></author>
	</entry>
	<entry>
		<id>https://wiki.lilypond.community/index.php?title=Key_signatures_for_small_staves&amp;diff=6465</id>
		<title>Key signatures for small staves</title>
		<link rel="alternate" type="text/html" href="https://wiki.lilypond.community/index.php?title=Key_signatures_for_small_staves&amp;diff=6465"/>
		<updated>2026-03-18T18:11:37Z</updated>

		<summary type="html">&lt;p&gt;Lemzwerg: Revised.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Traditionally, the spacing of key signatures in smaller staves is larger in comparison to full-size staves.&lt;br /&gt;
&lt;br /&gt;
Here is a function that extends &amp;lt;code&amp;gt;\magnifyStaff&amp;lt;/code&amp;gt; to automatically calculate the right key signature spacing according to the staff size.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;lilypond version=&amp;quot;2.24&amp;quot;&amp;gt;&lt;br /&gt;
scaleStaff =&lt;br /&gt;
#(define-music-function (scaleFac) (number?)&lt;br /&gt;
  #{&lt;br /&gt;
    \magnifyStaff #scaleFac&lt;br /&gt;
    \override KeySignature.padding = #(* 2/3 (- 1 scaleFac))&lt;br /&gt;
  #})&lt;br /&gt;
&lt;br /&gt;
keyTest = { \key cis\major s4*4 \bar &amp;quot;&amp;quot; }&lt;br /&gt;
&lt;br /&gt;
\markup\italic &amp;quot;Default output:&amp;quot;&lt;br /&gt;
&amp;lt;&amp;lt;&lt;br /&gt;
  \new Staff \with { \magnifyStaff #5/7 } \keyTest&lt;br /&gt;
  \new Staff \keyTest&lt;br /&gt;
&amp;gt;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
\markup\italic &amp;quot;Traditional output:&amp;quot;&lt;br /&gt;
&amp;lt;&amp;lt;&lt;br /&gt;
  \new Staff \with { \scaleStaff #5/7 } \keyTest&lt;br /&gt;
  \new Staff \keyTest&lt;br /&gt;
&amp;gt;&amp;gt;&lt;br /&gt;
&amp;lt;/lilypond&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Staff notation]]&lt;br /&gt;
[[Category:Vocal music]]&lt;br /&gt;
[[Category:Spacing]]&lt;br /&gt;
[[Category:Tweaks and overrides]]&lt;br /&gt;
[[Category:Specific notation]]&lt;br /&gt;
[[Category:Workaround]]&lt;br /&gt;
[[Category:Snippet]]&lt;/div&gt;</summary>
		<author><name>Lemzwerg</name></author>
	</entry>
	<entry>
		<id>https://wiki.lilypond.community/index.php?title=LSR_1094&amp;diff=6464</id>
		<title>LSR 1094</title>
		<link rel="alternate" type="text/html" href="https://wiki.lilypond.community/index.php?title=LSR_1094&amp;diff=6464"/>
		<updated>2026-03-18T17:55:16Z</updated>

		<summary type="html">&lt;p&gt;Lemzwerg: Changed redirect target from Key signature and small staff to Key signatures for small staves&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Key signatures for small staves]]&lt;/div&gt;</summary>
		<author><name>Lemzwerg</name></author>
	</entry>
	<entry>
		<id>https://wiki.lilypond.community/index.php?title=Key_signatures_for_small_staves&amp;diff=6463</id>
		<title>Key signatures for small staves</title>
		<link rel="alternate" type="text/html" href="https://wiki.lilypond.community/index.php?title=Key_signatures_for_small_staves&amp;diff=6463"/>
		<updated>2026-03-18T17:54:43Z</updated>

		<summary type="html">&lt;p&gt;Lemzwerg: Lemzwerg moved page Key signature and small staff to Key signatures for small staves without leaving a redirect&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Traditionally, smaller staves key signature spacing is slightly different than full size staves ones.&lt;br /&gt;
&lt;br /&gt;
Here&#039;s a function that automatically calculates the right key signature spacing according to the staff size.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;lilypond version=&amp;quot;2.24&amp;quot;&amp;gt;&lt;br /&gt;
%% =&amp;gt; http://lsr.di.unimi.it/LSR/Item?id=1094&lt;br /&gt;
&lt;br /&gt;
%% This extends \staffSize as defined in &lt;br /&gt;
%% &amp;quot;Changing the size of a staff with a music function&amp;quot;&lt;br /&gt;
%% http://lsr.di.unimi.it/LSR/Item?id=862&lt;br /&gt;
staffSize = #(define-music-function (new-size) (number?)&lt;br /&gt;
  #{&lt;br /&gt;
    \set fontSize = #new-size&lt;br /&gt;
    \override StaffSymbol.staff-space = #(magstep new-size)&lt;br /&gt;
    \override StaffSymbol.thickness = #(magstep new-size)&lt;br /&gt;
    \override KeySignature.padding = #(* 2/3 (- 1 (magstep new-size)))&lt;br /&gt;
  #})&lt;br /&gt;
&lt;br /&gt;
keyTest = { \key cis\major s4*4 \bar &amp;quot;&amp;quot; }&lt;br /&gt;
&lt;br /&gt;
\markup\italic &amp;quot;Default output:&amp;quot;&lt;br /&gt;
&amp;lt;&amp;lt;&lt;br /&gt;
  \new Staff \with { &lt;br /&gt;
    fontSize = #-3&lt;br /&gt;
    \override StaffSymbol.staff-space = #(magstep -3)&lt;br /&gt;
    \override StaffSymbol.thickness = #(magstep -3)&lt;br /&gt;
  } \keyTest &lt;br /&gt;
  \new Staff \keyTest &lt;br /&gt;
  &lt;br /&gt;
&amp;gt;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
\markup\italic &amp;quot;Traditional output:&amp;quot;&lt;br /&gt;
&amp;lt;&amp;lt;&lt;br /&gt;
  \new Staff \with { \staffSize #-3 } \keyTest &lt;br /&gt;
  \new Staff \keyTest &lt;br /&gt;
  &lt;br /&gt;
&amp;gt;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
%{&lt;br /&gt;
% For v.2.19 and higher:&lt;br /&gt;
&lt;br /&gt;
scaleStaff = #(define-music-function (scaleFac) (number?)&lt;br /&gt;
                 #{&lt;br /&gt;
                   \magnifyStaff #scaleFac&lt;br /&gt;
                   \override KeySignature.padding = #(* 2/3 (- 1 scaleFac))&lt;br /&gt;
                 #})&lt;br /&gt;
&lt;br /&gt;
sizeTest = #5/7&lt;br /&gt;
keyTest = { \key cis\major s4*4 \bar &amp;quot;&amp;quot; }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;&amp;lt;&lt;br /&gt;
  \new Staff \with { \scaleStaff #sizeTest } \keyTest&lt;br /&gt;
  \new Staff \keyTest&lt;br /&gt;
&amp;gt;&amp;gt;&lt;br /&gt;
 %}&lt;br /&gt;
&amp;lt;/lilypond&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Staff notation]]&lt;br /&gt;
[[Category:Vocal music]]&lt;br /&gt;
[[Category:Spacing]]&lt;br /&gt;
[[Category:Contexts and engravers]]&lt;br /&gt;
[[Category:Tweaks and overrides]]&lt;br /&gt;
[[Category:Specific notation]]&lt;br /&gt;
[[Category:Workaround]]&lt;br /&gt;
[[Category:Snippet]]&lt;/div&gt;</summary>
		<author><name>Lemzwerg</name></author>
	</entry>
	<entry>
		<id>https://wiki.lilypond.community/index.php?title=Talk:Airy_tone&amp;diff=6462</id>
		<title>Talk:Airy tone</title>
		<link rel="alternate" type="text/html" href="https://wiki.lilypond.community/index.php?title=Talk:Airy_tone&amp;diff=6462"/>
		<updated>2026-03-18T16:58:38Z</updated>

		<summary type="html">&lt;p&gt;Lemzwerg: /* Circles not displaying in Wiki */ Reply&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Circles not displaying in Wiki ==&lt;br /&gt;
&lt;br /&gt;
The circles are not displaying in the Wiki.  However, if I copy and paste the code and compile it locally, the circles do display.  Does anyone know how to fix this? [[User:Ksnortum|Ksnortum]] ([[User talk:Ksnortum|talk]]) 16:40, 18 March 2026 (UTC)&lt;br /&gt;
&lt;br /&gt;
:The usual thing: The code for drawing the circles is Postscript, which is not supported by the SVG backend used in the Wiki.  It should be rewritten using LilyPond drawing commands. -- [[User:Lemzwerg|Lemzwerg]] ([[User talk:Lemzwerg|talk]]) 16:58, 18 March 2026 (UTC)&lt;/div&gt;</summary>
		<author><name>Lemzwerg</name></author>
	</entry>
	<entry>
		<id>https://wiki.lilypond.community/index.php?title=Feta_font_chart&amp;diff=6459</id>
		<title>Feta font chart</title>
		<link rel="alternate" type="text/html" href="https://wiki.lilypond.community/index.php?title=Feta_font_chart&amp;diff=6459"/>
		<updated>2026-03-16T23:15:20Z</updated>

		<summary type="html">&lt;p&gt;Lemzwerg: Revised&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This chart shows all articulations or scripts that LilyPond&#039;s “feta” font contains.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;lilypond version=&amp;quot;2.24&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;&amp;lt;&lt;br /&gt;
  \new Staff \relative c&#039;&#039; {&lt;br /&gt;
    c\accent              c\marcato          c\staccatissimo&lt;br /&gt;
    c\staccato            c\tenuto           c\portato&lt;br /&gt;
    c\upbow               c\downbow          c\flageolet&lt;br /&gt;
    c\thumb               c^\lheel           c\rheel&lt;br /&gt;
    c^\ltoe               c\rtoe             c\open&lt;br /&gt;
    c\stopped             c\turn             c\reverseturn&lt;br /&gt;
    c\trill               c\prall            c\mordent&lt;br /&gt;
    c\prallprall          c\prallmordent     c\upprall&lt;br /&gt;
    c\downprall           c\upmordent        c\downmordent&lt;br /&gt;
    c\pralldown           c\prallup          c\lineprall&lt;br /&gt;
    c\signumcongruentiae  c\shortfermata     c\fermata&lt;br /&gt;
    c\longfermata         c\verylongfermata  c\segno&lt;br /&gt;
    c\coda                c\varcoda&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  \new Lyrics \lyricmode {&lt;br /&gt;
    accent              marcato          staccatissimo&lt;br /&gt;
    staccato            tenuto           portato&lt;br /&gt;
    upbow               downbow          flageolet&lt;br /&gt;
    thumb               lheel            rheel&lt;br /&gt;
    ltoe                rtoe             open&lt;br /&gt;
    stopped             turn             reverseturn&lt;br /&gt;
    trill               prall            mordent&lt;br /&gt;
    prallprall          prallmordent     upprall&lt;br /&gt;
    downprall           upmordent        downmordent&lt;br /&gt;
    pralldown           prallup          lineprall&lt;br /&gt;
    signumcongruentiae  shortfermata     fermata&lt;br /&gt;
    longfermata         verylongfermata  segno&lt;br /&gt;
    coda                varcoda&lt;br /&gt;
  }&lt;br /&gt;
&amp;gt;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
\layout {&lt;br /&gt;
  \context {&lt;br /&gt;
    \Staff&lt;br /&gt;
    \remove Clef_engraver&lt;br /&gt;
    \remove Time_signature_engraver&lt;br /&gt;
    \remove Bar_line_engraver&lt;br /&gt;
  }&lt;br /&gt;
  \context {&lt;br /&gt;
    \Lyrics&lt;br /&gt;
    \override LyricText.font-family = #&#039;typewriter&lt;br /&gt;
    \override LyricSpace.minimum-distance = 3&lt;br /&gt;
  }&lt;br /&gt;
  \context {&lt;br /&gt;
    \Score&lt;br /&gt;
    timing = ##f&lt;br /&gt;
    forbidBreakBetweenBarLines = ##f&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lilypond&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Symbols and glyphs]]&lt;br /&gt;
[[Category:Expressive marks]]&lt;br /&gt;
[[Category:Snippet]]&lt;/div&gt;</summary>
		<author><name>Lemzwerg</name></author>
	</entry>
	<entry>
		<id>https://wiki.lilypond.community/index.php?title=Positioning_a_%5Cfermata_over_the_last_bar_line&amp;diff=6454</id>
		<title>Positioning a \fermata over the last bar line</title>
		<link rel="alternate" type="text/html" href="https://wiki.lilypond.community/index.php?title=Positioning_a_%5Cfermata_over_the_last_bar_line&amp;diff=6454"/>
		<updated>2026-03-15T16:41:23Z</updated>

		<summary type="html">&lt;p&gt;Lemzwerg: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;To position a \fermata sign over the last bar line, you must use a specially modified rehearsal mark.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;lilypond version=&amp;quot;2.24&amp;quot;&amp;gt;&lt;br /&gt;
\relative c&#039;&#039; {&lt;br /&gt;
  \override Score.RehearsalMark.break-visibility = #begin-of-line-invisible&lt;br /&gt;
  c1 \mark \markup { \musicglyph &amp;quot;scripts.ufermata&amp;quot; }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lilypond&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Expressive marks]]&lt;br /&gt;
[[Category:Breaks]]&lt;br /&gt;
[[Category:Staff notation]]&lt;br /&gt;
[[Category:Workaround]]&lt;br /&gt;
[[Category:Symbols and glyphs]]&lt;br /&gt;
[[Category:Snippet]]&lt;/div&gt;</summary>
		<author><name>Lemzwerg</name></author>
	</entry>
	<entry>
		<id>https://wiki.lilypond.community/index.php?title=Alternate_%5CtextSpanner_engraver&amp;diff=6448</id>
		<title>Alternate \textSpanner engraver</title>
		<link rel="alternate" type="text/html" href="https://wiki.lilypond.community/index.php?title=Alternate_%5CtextSpanner_engraver&amp;diff=6448"/>
		<updated>2026-03-12T06:46:28Z</updated>

		<summary type="html">&lt;p&gt;Lemzwerg: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;LilyPond&#039;s default text spanner engraver can only handle a single text spanner per voice at a time.  The engraver in this snippet provides an alternate implementation to circumvent this limitation; it uses spanner IDs to specify start and end of overlapping text spanners.&lt;br /&gt;
&lt;br /&gt;
To use it, replace &amp;lt;code&amp;gt;Text_spanner_engraver&amp;lt;/code&amp;gt; with &amp;lt;code&amp;gt;\alternateTextSpannerEngraver&amp;lt;/code&amp;gt;.  The example below demonstrates two possible ways to specify a spanner ID: either define a new command or use the &amp;lt;code&amp;gt;\=&amp;lt;/code&amp;gt; command to directly set the ID.&lt;br /&gt;
&lt;br /&gt;
To control the vertical order of text spanners, use the standard way of tweaking the &amp;lt;code&amp;gt;outside-staff-priority&amp;lt;/code&amp;gt; property.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;lilypond version=&amp;quot;2.24&amp;quot;&amp;gt;&lt;br /&gt;
% LSR written by Dave Nalesnik&lt;br /&gt;
% LSR https://lists.gnu.org/archive/html/lilypond-user/2026-01/msg00006.html&lt;br /&gt;
&lt;br /&gt;
% Incorporating some code from the rewrite in Scheme of&lt;br /&gt;
% Text_spanner_engraver in input/regression/scheme-text-spanner.ly&lt;br /&gt;
&lt;br /&gt;
#(define (add-bound-item spanner item)&lt;br /&gt;
   (if (null? (ly:spanner-bound spanner LEFT))&lt;br /&gt;
       (ly:spanner-set-bound! spanner LEFT item)&lt;br /&gt;
       (ly:spanner-set-bound! spanner RIGHT item)))&lt;br /&gt;
&lt;br /&gt;
#(define (set-axis! grob axis)&lt;br /&gt;
   (when (not (number? (ly:grob-property grob &#039;side-axis)))&lt;br /&gt;
     (set! (ly:grob-property grob &#039;side-axis) axis)&lt;br /&gt;
     (ly:grob-chain-callback&lt;br /&gt;
      grob&lt;br /&gt;
      (if (eq? axis X)&lt;br /&gt;
          ly:side-position-interface::x-aligned-side&lt;br /&gt;
          side-position-interface::y-aligned-side)&lt;br /&gt;
      (if (eq? axis X)&lt;br /&gt;
	  &#039;X-offset&lt;br /&gt;
	  &#039;Y-offset))))&lt;br /&gt;
&lt;br /&gt;
#(define (assign-spanner-index orig-ls)&lt;br /&gt;
   &amp;quot;Determine an available position of a new spanner in an ordered&lt;br /&gt;
sequence of spanners (a list of pairs, where the car of the pair&lt;br /&gt;
gives the position).  The goal is for the sequence to begin with&lt;br /&gt;
zero and contain no gaps.  Return the index representing the&lt;br /&gt;
spanner&#039;s position.&lt;br /&gt;
&lt;br /&gt;
Examples (only showing the cars of the pairs):&lt;br /&gt;
&lt;br /&gt;
  (0 1)   =&amp;gt; 2&lt;br /&gt;
  (2 3)   =&amp;gt; 0&lt;br /&gt;
  (0 3)   =&amp;gt; 1&lt;br /&gt;
  (0 1 3) =&amp;gt; 2&lt;br /&gt;
&amp;quot;&lt;br /&gt;
   (if (null? orig-ls)&lt;br /&gt;
       0&lt;br /&gt;
       (let loop ((ls orig-ls)&lt;br /&gt;
		  (insert? #t)&lt;br /&gt;
		  (result 0))&lt;br /&gt;
         (cond&lt;br /&gt;
          ((null? ls)&lt;br /&gt;
	   result)&lt;br /&gt;
          ;; Position at head of list.&lt;br /&gt;
          ((and insert? (&amp;gt; (caar orig-ls) 0))&lt;br /&gt;
           (loop ls #f 0))&lt;br /&gt;
          ;; No gaps, put at end of list.&lt;br /&gt;
          ((and insert? (null? (cdr ls)))&lt;br /&gt;
           (loop (cdr ls) #f (1+ (caar ls))))&lt;br /&gt;
          ;; Fill lowest position of gap.&lt;br /&gt;
          ((and insert?&lt;br /&gt;
                (&amp;gt; (caadr ls) (1+ (caar ls))))&lt;br /&gt;
           (loop (cdr ls) #f (1+ (caar ls))))&lt;br /&gt;
          (else&lt;br /&gt;
	   (loop (cdr ls) insert? result))))))&lt;br /&gt;
&lt;br /&gt;
alternateTextSpannerEngraver =&lt;br /&gt;
#(lambda (context)&lt;br /&gt;
   (let (;; A list of pairs comprising a spanner index (not&lt;br /&gt;
	 ;; `spanner-id` values) and a spanner which has been begun.&lt;br /&gt;
         (spanners &#039;())&lt;br /&gt;
         (finished &#039;()) ; A list of spanners in completion stage.&lt;br /&gt;
         (start-events &#039;()) ; A list of START events.&lt;br /&gt;
         (stop-events &#039;())) ; A list of STOP events.&lt;br /&gt;
     (make-engraver&lt;br /&gt;
      ;; `\startTextSpan`, `\stopTextSpan`, and the like create&lt;br /&gt;
      ;; events which we collect here.&lt;br /&gt;
      (listeners&lt;br /&gt;
       ((text-span-event engraver event)&lt;br /&gt;
        (if (= START (ly:event-property event &#039;span-direction))&lt;br /&gt;
            (set! start-events (cons event start-events))&lt;br /&gt;
            (set! stop-events (cons event stop-events)))))&lt;br /&gt;
&lt;br /&gt;
      ;; Populate `note-columns` property of spanners.  Bounds are&lt;br /&gt;
      ;; set to note columns, and each spanner keeps a record of&lt;br /&gt;
      ;; the note columns it traverses.&lt;br /&gt;
      (acknowledgers&lt;br /&gt;
       ((note-column-interface engraver grob source-engraver)&lt;br /&gt;
        (for-each (lambda (s)&lt;br /&gt;
                    (ly:pointer-group-interface::add-grob&lt;br /&gt;
                     (cdr s) &#039;note-columns grob)&lt;br /&gt;
                    (when (null? (ly:spanner-bound (cdr s) LEFT))&lt;br /&gt;
                      (add-bound-item (cdr s) grob)))&lt;br /&gt;
		  spanners)&lt;br /&gt;
        ;; `finished` only contains spanners, no indices.&lt;br /&gt;
        (for-each (lambda (f)&lt;br /&gt;
                    (ly:pointer-group-interface::add-grob&lt;br /&gt;
                     f &#039;note-columns grob)&lt;br /&gt;
                    (when (null? (ly:spanner-bound f RIGHT))&lt;br /&gt;
                      (add-bound-item f grob)))&lt;br /&gt;
		  finished)))&lt;br /&gt;
&lt;br /&gt;
      ((process-music trans)&lt;br /&gt;
       ;; Move begun spanners from `span` to `finished`.  We do&lt;br /&gt;
       ;; this on the basis of `spanner-id`.  If we find a match&lt;br /&gt;
       ;; -- either the strings are the same, or both are unset --&lt;br /&gt;
       ;; a transfer can be made.  Return a warning if we find no&lt;br /&gt;
       ;; match: spanner hasn&#039;t been properly begun.&lt;br /&gt;
       (for-each&lt;br /&gt;
        (lambda (es)&lt;br /&gt;
          (let ((es-id (ly:event-property es &#039;spanner-id)))&lt;br /&gt;
            (let loop ((sp spanners))&lt;br /&gt;
              (if (null? sp)&lt;br /&gt;
                  (ly:warning &amp;quot;No spanner to end!&amp;quot;)&lt;br /&gt;
                  (let ((sp-id (ly:event-property&lt;br /&gt;
                                (event-cause (cdar sp))&lt;br /&gt;
				&#039;spanner-id)))&lt;br /&gt;
                    (cond&lt;br /&gt;
                     ((equal? sp-id es-id)&lt;br /&gt;
                      (set! finished (cons (cdar sp) finished))&lt;br /&gt;
                      (set! spanners&lt;br /&gt;
			    (remove (lambda (s)&lt;br /&gt;
				      (eq? s (car sp))) spanners)))&lt;br /&gt;
                     (else&lt;br /&gt;
		      (loop (cdr sp)))))))))&lt;br /&gt;
        stop-events)&lt;br /&gt;
&lt;br /&gt;
       ;; The end of our spanners can be acknowledged by other&lt;br /&gt;
       ;; engravers, thus announce them.&lt;br /&gt;
       (for-each&lt;br /&gt;
        (lambda (f)&lt;br /&gt;
          (ly:engraver-announce-end-grob trans f (event-cause f)))&lt;br /&gt;
        finished)&lt;br /&gt;
&lt;br /&gt;
       ;; Make spanners in response to START events.&lt;br /&gt;
       ;;&lt;br /&gt;
       ;; Each new spanner is assigned an index denoting its&lt;br /&gt;
       ;; position relative to other active spanners.  This is&lt;br /&gt;
       ;; enforced (for the moment) by adding a small amount to&lt;br /&gt;
       ;; the spanner&#039;s `outside-staff-priority` proportional to&lt;br /&gt;
       ;; this index.  This is unlikely to result in conflicts,&lt;br /&gt;
       ;; though a better solution may be to organize the spanners&lt;br /&gt;
       ;; by a new alignment grob.&lt;br /&gt;
       ;;&lt;br /&gt;
       ;; Also, add any existing spanners to the&lt;br /&gt;
       ;; `side-support-elements` array of the new spanner.  This&lt;br /&gt;
       ;; ensures correct ordering over line breaks when&lt;br /&gt;
       ;; `outside-staff-priority` is set to `#f` (which means&lt;br /&gt;
       ;; that it is no longer an outside-staff object -- not the&lt;br /&gt;
       ;; default).&lt;br /&gt;
       (for-each&lt;br /&gt;
        (lambda (es)&lt;br /&gt;
          (let* ((new (ly:engraver-make-grob&lt;br /&gt;
		       trans &#039;TextSpanner es))&lt;br /&gt;
                 (new-idx (assign-spanner-index spanners))&lt;br /&gt;
                 (new-osp (ly:grob-property&lt;br /&gt;
			   new &#039;outside-staff-priority))&lt;br /&gt;
                 (new-osp (if (number? new-osp)&lt;br /&gt;
                              (+ new-osp (/ new-idx 1000.0))&lt;br /&gt;
                              new-osp)))&lt;br /&gt;
            (set! (ly:grob-property&lt;br /&gt;
		   new &#039;outside-staff-priority) new-osp)&lt;br /&gt;
            (set-axis! new Y)&lt;br /&gt;
            ;; Add spanners with a lower index than the new&lt;br /&gt;
            ;; spanner to its `side-support-elements` list.  This&lt;br /&gt;
            ;; allows new spanners to fill gaps under the topmost&lt;br /&gt;
            ;; spanner.&lt;br /&gt;
            (for-each (lambda (sp)&lt;br /&gt;
			(when (&amp;lt; (car sp) new-idx)&lt;br /&gt;
			  (ly:pointer-group-interface::add-grob&lt;br /&gt;
			   new &#039;side-support-elements (cdr sp))))&lt;br /&gt;
		      spanners)&lt;br /&gt;
            (set! spanners (cons (cons new-idx new) spanners))&lt;br /&gt;
            (set! spanners (sort spanners car&amp;lt;))))&lt;br /&gt;
        start-events)&lt;br /&gt;
&lt;br /&gt;
       ;; Events have served their purpose for this timestep.&lt;br /&gt;
       ;; Clear the way for new events in later timesteps.&lt;br /&gt;
       (set! start-events &#039;())&lt;br /&gt;
       (set! stop-events &#039;()))&lt;br /&gt;
&lt;br /&gt;
      ((stop-translation-timestep trans)&lt;br /&gt;
       ;; Set bounds of spanners to `PaperColumns` grobs if they&lt;br /&gt;
       ;; haven&#039;t been set.  This allows spanners to be drawn&lt;br /&gt;
       ;; between spacers.&lt;br /&gt;
       ;;&lt;br /&gt;
       ;; Other uses?  Doesn&#039;t appear to affect whether spanners&lt;br /&gt;
       ;; can de drawn between rests.&lt;br /&gt;
       (for-each (lambda (s)&lt;br /&gt;
		   (when (null? (ly:spanner-bound (cdr s) LEFT))&lt;br /&gt;
		     (ly:spanner-set-bound!&lt;br /&gt;
		      (cdr s) LEFT&lt;br /&gt;
		      (ly:context-property context&lt;br /&gt;
					   &#039;currentMusicalColumn))))&lt;br /&gt;
		 spanners)&lt;br /&gt;
       (for-each (lambda (f)&lt;br /&gt;
		   (when (null? (ly:spanner-bound f RIGHT))&lt;br /&gt;
		     (ly:spanner-set-bound!&lt;br /&gt;
		      f RIGHT&lt;br /&gt;
		      (ly:context-property context&lt;br /&gt;
					   &#039;currentMusicalColumn))))&lt;br /&gt;
		 finished)&lt;br /&gt;
       (set! finished &#039;()))&lt;br /&gt;
&lt;br /&gt;
      ((finalize trans)&lt;br /&gt;
       ;; If spanner ends on spacer at end of context?&lt;br /&gt;
       (for-each (lambda (f)&lt;br /&gt;
                   (when (null? (ly:spanner-bound f RIGHT))&lt;br /&gt;
                     (ly:spanner-set-bound!&lt;br /&gt;
		      f RIGHT&lt;br /&gt;
                      (ly:context-property context&lt;br /&gt;
					   &#039;currentMusicalColumn))))&lt;br /&gt;
		 finished)&lt;br /&gt;
       (set! finished &#039;())&lt;br /&gt;
       ;; User didn&#039;t end spanner.&lt;br /&gt;
       (for-each (lambda (sp)&lt;br /&gt;
		   (ly:warning &amp;quot;incomplete spanner removed!&amp;quot;)&lt;br /&gt;
		   (ly:grob-suicide! (cdr sp)))&lt;br /&gt;
		 spanners)&lt;br /&gt;
       (set! spanners &#039;())))))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%% EXAMPLE %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%&lt;br /&gt;
&lt;br /&gt;
startTextSpanOne =&lt;br /&gt;
#(make-music &#039;TextSpanEvent &#039;span-direction START &#039;spanner-id &amp;quot;1&amp;quot;)&lt;br /&gt;
stopTextSpanOne =&lt;br /&gt;
#(make-music &#039;TextSpanEvent &#039;span-direction STOP &#039;spanner-id &amp;quot;1&amp;quot;)&lt;br /&gt;
startTextSpanTwo =&lt;br /&gt;
#(make-music &#039;TextSpanEvent &#039;span-direction START &#039;spanner-id &amp;quot;2&amp;quot;)&lt;br /&gt;
stopTextSpanTwo =&lt;br /&gt;
#(make-music &#039;TextSpanEvent &#039;span-direction STOP &#039;spanner-id &amp;quot;2&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
\layout {&lt;br /&gt;
  \context {&lt;br /&gt;
    \Voice&lt;br /&gt;
    \remove Text_spanner_engraver&lt;br /&gt;
    \consists \alternateTextSpannerEngraver&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
\relative c&#039; {&lt;br /&gt;
  \override TextSpanner.style = ##f&lt;br /&gt;
  \override TextSpanner.thickness = 10&lt;br /&gt;
  % \override TextSpanner.to-barline = ##t&lt;br /&gt;
&lt;br /&gt;
  a4 \tweak color #red \startTextSpan&lt;br /&gt;
    b \tweak color #green \startTextSpanOne&lt;br /&gt;
    c \tweak color #blue \startTextSpanTwo&lt;br /&gt;
    d \=3\startTextSpan |&lt;br /&gt;
  a4\stopTextSpan&lt;br /&gt;
    b \stopTextSpanOne&lt;br /&gt;
      \tweak color #red \startTextSpan&lt;br /&gt;
    c \stopTextSpanTwo&lt;br /&gt;
      \tweak color #green \startTextSpanOne&lt;br /&gt;
    d \=3\stopTextSpan&lt;br /&gt;
      \tweak color #blue \startTextSpanTwo |&lt;br /&gt;
  a4 \=3\startTextSpan&lt;br /&gt;
    b c d | \break&lt;br /&gt;
&lt;br /&gt;
  a4 b c d |&lt;br /&gt;
  a4\stopTextSpan&lt;br /&gt;
    \stopTextSpanOne&lt;br /&gt;
    \stopTextSpanTwo&lt;br /&gt;
    \=3\stopTextSpan&lt;br /&gt;
    b &lt;br /&gt;
    c \startTextSpan&lt;br /&gt;
    d \tweak outside-staff-priority #0 \=1\startTextSpan |&lt;br /&gt;
  a4 b&lt;br /&gt;
    c \=1\stopTextSpan&lt;br /&gt;
    d \stopTextSpan |&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lilypond&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Contexts and engravers]]&lt;br /&gt;
[[Category:Editorial annotations]]&lt;br /&gt;
[[Category:Expressive marks]]&lt;br /&gt;
[[Category:Scheme]]&lt;br /&gt;
[[Category:Workaround]]&lt;br /&gt;
[[Category:Snippet]]&lt;/div&gt;</summary>
		<author><name>Lemzwerg</name></author>
	</entry>
	<entry>
		<id>https://wiki.lilypond.community/index.php?title=Alternate_%5CtextSpanner_engraver&amp;diff=6447</id>
		<title>Alternate \textSpanner engraver</title>
		<link rel="alternate" type="text/html" href="https://wiki.lilypond.community/index.php?title=Alternate_%5CtextSpanner_engraver&amp;diff=6447"/>
		<updated>2026-03-12T06:41:49Z</updated>

		<summary type="html">&lt;p&gt;Lemzwerg: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;LilyPond&#039;s default text spanner engraver can only handle a single text spanner per voice at a time.  The engraver in this snippet provides an alternate implementation to circumvent this limitation; it uses spanner IDs to specify start and end of overlapping text spanners.&lt;br /&gt;
&lt;br /&gt;
To use it, replace &amp;lt;code&amp;gt;Text_spanner_engraver&amp;lt;/code&amp;gt; with &amp;lt;code&amp;gt;\alternateTextSpannerEngraver&amp;lt;/code&amp;gt;.  The example below demonstrates two possible ways to specify a spanner ID: either define a new command or use the &amp;lt;code&amp;gt;\=&amp;lt;/code&amp;gt; command to directly set the ID.&lt;br /&gt;
&lt;br /&gt;
To control the vertical order of text spanners, use the standard way of tweaking the &amp;lt;code&amp;gt;outside-staff-priority&amp;lt;/code&amp;gt; property.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;lilypond version=&amp;quot;2.24&amp;quot;&amp;gt;&lt;br /&gt;
% LSR written by Dave Nalesnik&lt;br /&gt;
% LSR https://lists.gnu.org/archive/html/lilypond-user/2026-01/msg00006.html&lt;br /&gt;
&lt;br /&gt;
% Incorporating some code from the rewrite in Scheme of&lt;br /&gt;
% Text_spanner_engraver in input/regression/scheme-text-spanner.ly&lt;br /&gt;
&lt;br /&gt;
#(define (add-bound-item spanner item)&lt;br /&gt;
   (if (null? (ly:spanner-bound spanner LEFT))&lt;br /&gt;
       (ly:spanner-set-bound! spanner LEFT item)&lt;br /&gt;
       (ly:spanner-set-bound! spanner RIGHT item)))&lt;br /&gt;
&lt;br /&gt;
#(define (set-axis! grob axis)&lt;br /&gt;
   (when (not (number? (ly:grob-property grob &#039;side-axis)))&lt;br /&gt;
     (set! (ly:grob-property grob &#039;side-axis) axis)&lt;br /&gt;
     (ly:grob-chain-callback&lt;br /&gt;
      grob&lt;br /&gt;
      (if (eq? axis X)&lt;br /&gt;
          ly:side-position-interface::x-aligned-side&lt;br /&gt;
          side-position-interface::y-aligned-side)&lt;br /&gt;
      (if (eq? axis X)&lt;br /&gt;
	  &#039;X-offset&lt;br /&gt;
	  &#039;Y-offset))))&lt;br /&gt;
&lt;br /&gt;
#(define (assign-spanner-index orig-ls)&lt;br /&gt;
   &amp;quot;Determine an available position of a new spanner in an ordered&lt;br /&gt;
sequence of spanners (a list of pairs, where the car of the pair&lt;br /&gt;
gives the position).  The goal is for the sequence to begin with&lt;br /&gt;
zero and contain no gaps.  Return the index representing the&lt;br /&gt;
spanner&#039;s position.&lt;br /&gt;
&lt;br /&gt;
Examples (only showing the cars of the pairs):&lt;br /&gt;
&lt;br /&gt;
  (0 1)   =&amp;gt; 2&lt;br /&gt;
  (2 3)   =&amp;gt; 0&lt;br /&gt;
  (0 3)   =&amp;gt; 1&lt;br /&gt;
  (0 1 3) =&amp;gt; 2&lt;br /&gt;
&amp;quot;&lt;br /&gt;
   (if (null? orig-ls)&lt;br /&gt;
       0&lt;br /&gt;
       (let loop ((ls orig-ls)&lt;br /&gt;
		  (insert? #t)&lt;br /&gt;
		  (result 0))&lt;br /&gt;
         (cond&lt;br /&gt;
          ((null? ls)&lt;br /&gt;
	   result)&lt;br /&gt;
          ;; Position at head of list.&lt;br /&gt;
          ((and insert? (&amp;gt; (caar orig-ls) 0))&lt;br /&gt;
           (loop ls #f 0))&lt;br /&gt;
          ;; No gaps, put at end of list.&lt;br /&gt;
          ((and insert? (null? (cdr ls)))&lt;br /&gt;
           (loop (cdr ls) #f (1+ (caar ls))))&lt;br /&gt;
          ;; Fill lowest position of gap.&lt;br /&gt;
          ((and insert?&lt;br /&gt;
                (&amp;gt; (caadr ls) (1+ (caar ls))))&lt;br /&gt;
           (loop (cdr ls) #f (1+ (caar ls))))&lt;br /&gt;
          (else&lt;br /&gt;
	   (loop (cdr ls) insert? result))))))&lt;br /&gt;
&lt;br /&gt;
alternateTextSpannerEngraver =&lt;br /&gt;
#(lambda (context)&lt;br /&gt;
   (let (;; A list of pairs comprising a spanner index (not&lt;br /&gt;
	 ;; `spanner-id` values) and a spanner which has been begun.&lt;br /&gt;
         (spanners &#039;())&lt;br /&gt;
         (finished &#039;()) ; A list of spanners in completion stage.&lt;br /&gt;
         (start-events &#039;()) ; A list of START events.&lt;br /&gt;
         (stop-events &#039;())) ; A list of STOP events.&lt;br /&gt;
     (make-engraver&lt;br /&gt;
      ;; `\startTextSpan`, `\stopTextSpan`, and the like create&lt;br /&gt;
      ;; events which we collect here.&lt;br /&gt;
      (listeners&lt;br /&gt;
       ((text-span-event engraver event)&lt;br /&gt;
        (if (= START (ly:event-property event &#039;span-direction))&lt;br /&gt;
            (set! start-events (cons event start-events))&lt;br /&gt;
            (set! stop-events (cons event stop-events)))))&lt;br /&gt;
&lt;br /&gt;
      ;; Populate `note-columns` property of spanners.  Bounds are&lt;br /&gt;
      ;; set to note columns, and each spanner keeps a record of&lt;br /&gt;
      ;; the note columns it traverses.&lt;br /&gt;
      (acknowledgers&lt;br /&gt;
       ((note-column-interface engraver grob source-engraver)&lt;br /&gt;
        (for-each (lambda (s)&lt;br /&gt;
                    (ly:pointer-group-interface::add-grob&lt;br /&gt;
                     (cdr s) &#039;note-columns grob)&lt;br /&gt;
                    (when (null? (ly:spanner-bound (cdr s) LEFT))&lt;br /&gt;
                      (add-bound-item (cdr s) grob)))&lt;br /&gt;
		  spanners)&lt;br /&gt;
        ;; `finished` only contains spanners, no indices.&lt;br /&gt;
        (for-each (lambda (f)&lt;br /&gt;
                    (ly:pointer-group-interface::add-grob&lt;br /&gt;
                     f &#039;note-columns grob)&lt;br /&gt;
                    (when (null? (ly:spanner-bound f RIGHT))&lt;br /&gt;
                      (add-bound-item f grob)))&lt;br /&gt;
		  finished)))&lt;br /&gt;
&lt;br /&gt;
      ((process-music trans)&lt;br /&gt;
       ;; Move begun spanners from `span` to `finished`.  We do&lt;br /&gt;
       ;; this on the basis of `spanner-id`.  If we find a match&lt;br /&gt;
       ;; -- either the strings are the same, or both are unset --&lt;br /&gt;
       ;; a transfer can be made.  Return a warning if we find no&lt;br /&gt;
       ;; match: spanner hasn&#039;t been properly begun.&lt;br /&gt;
       (for-each&lt;br /&gt;
        (lambda (es)&lt;br /&gt;
          (let ((es-id (ly:event-property es &#039;spanner-id)))&lt;br /&gt;
            (let loop ((sp spanners))&lt;br /&gt;
              (if (null? sp)&lt;br /&gt;
                  (ly:warning &amp;quot;No spanner to end!&amp;quot;)&lt;br /&gt;
                  (let ((sp-id (ly:event-property&lt;br /&gt;
                                (event-cause (cdar sp))&lt;br /&gt;
				&#039;spanner-id)))&lt;br /&gt;
                    (cond&lt;br /&gt;
                     ((equal? sp-id es-id)&lt;br /&gt;
                      (set! finished (cons (cdar sp) finished))&lt;br /&gt;
                      (set! spanners&lt;br /&gt;
			    (remove (lambda (s)&lt;br /&gt;
				      (eq? s (car sp))) spanners)))&lt;br /&gt;
                     (else&lt;br /&gt;
		      (loop (cdr sp)))))))))&lt;br /&gt;
        stop-events)&lt;br /&gt;
&lt;br /&gt;
       ;; The end of our spanners can be acknowledged by other&lt;br /&gt;
       ;; engravers, thus announce them.&lt;br /&gt;
       (for-each&lt;br /&gt;
        (lambda (f)&lt;br /&gt;
          (ly:engraver-announce-end-grob trans f (event-cause f)))&lt;br /&gt;
        finished)&lt;br /&gt;
&lt;br /&gt;
       ;; Make spanners in response to START events.&lt;br /&gt;
       ;;&lt;br /&gt;
       ;; Each new spanner is assigned an index denoting its&lt;br /&gt;
       ;; position relative to other active spanners.  This is&lt;br /&gt;
       ;; enforced (for the moment) by adding a small amount to&lt;br /&gt;
       ;; the spanner&#039;s `outside-staff-priority` proportional to&lt;br /&gt;
       ;; this index.  This is unlikely to result in conflicts,&lt;br /&gt;
       ;; though a better solution may be to organize the spanners&lt;br /&gt;
       ;; by a new alignment grob.&lt;br /&gt;
       ;;&lt;br /&gt;
       ;; Also, add any existing spanners to the&lt;br /&gt;
       ;; `side-support-elements` array of the new spanner.  This&lt;br /&gt;
       ;; ensures correct ordering over line breaks when&lt;br /&gt;
       ;; `outside-staff-priority` is set to `#f` (which means&lt;br /&gt;
       ;; that it is no longer an outside-staff object -- not the&lt;br /&gt;
       ;; default).&lt;br /&gt;
       (for-each&lt;br /&gt;
        (lambda (es)&lt;br /&gt;
          (let* ((new (ly:engraver-make-grob&lt;br /&gt;
		       trans &#039;TextSpanner es))&lt;br /&gt;
                 (new-idx (assign-spanner-index spanners))&lt;br /&gt;
                 (new-osp (ly:grob-property&lt;br /&gt;
			   new &#039;outside-staff-priority))&lt;br /&gt;
                 (new-osp (if (number? new-osp)&lt;br /&gt;
                              (+ new-osp (/ new-idx 1000.0))&lt;br /&gt;
                              new-osp)))&lt;br /&gt;
            (set! (ly:grob-property&lt;br /&gt;
		   new &#039;outside-staff-priority) new-osp)&lt;br /&gt;
            (set-axis! new Y)&lt;br /&gt;
            ;; Add spanners with a lower index than the new&lt;br /&gt;
            ;; spanner to its `side-support-elements` list.  This&lt;br /&gt;
            ;; allows new spanners to fill gaps under the topmost&lt;br /&gt;
            ;; spanner.&lt;br /&gt;
            (for-each (lambda (sp)&lt;br /&gt;
			(when (&amp;lt; (car sp) new-idx)&lt;br /&gt;
			  (ly:pointer-group-interface::add-grob&lt;br /&gt;
			   new &#039;side-support-elements (cdr sp))))&lt;br /&gt;
		      spanners)&lt;br /&gt;
            (set! spanners (cons (cons new-idx new) spanners))&lt;br /&gt;
            (set! spanners (sort spanners car&amp;lt;))))&lt;br /&gt;
        start-events)&lt;br /&gt;
&lt;br /&gt;
       ;; Events have served their purpose for this timestep.&lt;br /&gt;
       ;; Clear the way for new events in later timesteps.&lt;br /&gt;
       (set! start-events &#039;())&lt;br /&gt;
       (set! stop-events &#039;()))&lt;br /&gt;
&lt;br /&gt;
      ((stop-translation-timestep trans)&lt;br /&gt;
       ;; Set bounds of spanners to `PaperColumns` grobs if they&lt;br /&gt;
       ;; haven&#039;t been set.  This allows spanners to be drawn&lt;br /&gt;
       ;; between spacers.&lt;br /&gt;
       ;;&lt;br /&gt;
       ;; Other uses?  Doesn&#039;t appear to affect whether spanners&lt;br /&gt;
       ;; can de drawn between rests.&lt;br /&gt;
       (for-each (lambda (s)&lt;br /&gt;
		   (when (null? (ly:spanner-bound (cdr s) LEFT))&lt;br /&gt;
		     (ly:spanner-set-bound!&lt;br /&gt;
		      (cdr s) LEFT&lt;br /&gt;
		      (ly:context-property context&lt;br /&gt;
					   &#039;currentMusicalColumn))))&lt;br /&gt;
		 spanners)&lt;br /&gt;
       (for-each (lambda (f)&lt;br /&gt;
		   (when (null? (ly:spanner-bound f RIGHT))&lt;br /&gt;
		     (ly:spanner-set-bound!&lt;br /&gt;
		      f RIGHT&lt;br /&gt;
		      (ly:context-property context&lt;br /&gt;
					   &#039;currentMusicalColumn))))&lt;br /&gt;
		 finished)&lt;br /&gt;
       (set! finished &#039;()))&lt;br /&gt;
&lt;br /&gt;
      ((finalize trans)&lt;br /&gt;
       ;; If spanner ends on spacer at end of context?&lt;br /&gt;
       (for-each (lambda (f)&lt;br /&gt;
                   (when (null? (ly:spanner-bound f RIGHT))&lt;br /&gt;
                     (ly:spanner-set-bound!&lt;br /&gt;
		      f RIGHT&lt;br /&gt;
                      (ly:context-property context&lt;br /&gt;
					   &#039;currentMusicalColumn))))&lt;br /&gt;
		 finished)&lt;br /&gt;
       (set! finished &#039;())&lt;br /&gt;
       ;; User didn&#039;t end spanner.&lt;br /&gt;
       (for-each (lambda (sp)&lt;br /&gt;
		   (ly:warning &amp;quot;incomplete spanner removed!&amp;quot;)&lt;br /&gt;
		   (ly:grob-suicide! (cdr sp)))&lt;br /&gt;
		 spanners)&lt;br /&gt;
       (set! spanners &#039;())))))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%% EXAMPLE %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%&lt;br /&gt;
&lt;br /&gt;
startTextSpanOne =&lt;br /&gt;
#(make-music &#039;TextSpanEvent &#039;span-direction START &#039;spanner-id &amp;quot;1&amp;quot;)&lt;br /&gt;
stopTextSpanOne =&lt;br /&gt;
#(make-music &#039;TextSpanEvent &#039;span-direction STOP &#039;spanner-id &amp;quot;1&amp;quot;)&lt;br /&gt;
startTextSpanTwo =&lt;br /&gt;
#(make-music &#039;TextSpanEvent &#039;span-direction START &#039;spanner-id &amp;quot;2&amp;quot;)&lt;br /&gt;
stopTextSpanTwo =&lt;br /&gt;
#(make-music &#039;TextSpanEvent &#039;span-direction STOP &#039;spanner-id &amp;quot;2&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
\layout {&lt;br /&gt;
  \context {&lt;br /&gt;
    \Voice&lt;br /&gt;
    \remove #&amp;quot;Text_spanner_engraver&amp;quot;&lt;br /&gt;
    \consists \alternateTextSpannerEngraver&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
\relative c&#039; {&lt;br /&gt;
  \override TextSpanner.style = ##f&lt;br /&gt;
  \override TextSpanner.thickness = 10&lt;br /&gt;
  % \override TextSpanner.to-barline = ##t&lt;br /&gt;
&lt;br /&gt;
  a4 \tweak color #red \startTextSpan&lt;br /&gt;
    b \tweak color #green \startTextSpanOne&lt;br /&gt;
    c \tweak color #blue \startTextSpanTwo&lt;br /&gt;
    d \=3\startTextSpan |&lt;br /&gt;
  a4\stopTextSpan&lt;br /&gt;
    b \stopTextSpanOne&lt;br /&gt;
      \tweak color #red \startTextSpan&lt;br /&gt;
    c \stopTextSpanTwo&lt;br /&gt;
      \tweak color #green \startTextSpanOne&lt;br /&gt;
    d \=3\stopTextSpan&lt;br /&gt;
      \tweak color #blue \startTextSpanTwo |&lt;br /&gt;
  a4 \=3\startTextSpan&lt;br /&gt;
    b c d | \break&lt;br /&gt;
&lt;br /&gt;
  a4 b c d |&lt;br /&gt;
  a4\stopTextSpan&lt;br /&gt;
    \stopTextSpanOne&lt;br /&gt;
    \stopTextSpanTwo&lt;br /&gt;
    \=3\stopTextSpan&lt;br /&gt;
    b &lt;br /&gt;
    c \startTextSpan&lt;br /&gt;
    d \tweak outside-staff-priority #0 \=1\startTextSpan |&lt;br /&gt;
  a4 b&lt;br /&gt;
    c \=1\stopTextSpan&lt;br /&gt;
    d \stopTextSpan |&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lilypond&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Contexts and engravers]]&lt;br /&gt;
[[Category:Editorial annotations]]&lt;br /&gt;
[[Category:Expressive marks]]&lt;br /&gt;
[[Category:Scheme]]&lt;br /&gt;
[[Category:Workaround]]&lt;br /&gt;
[[Category:Snippet]]&lt;/div&gt;</summary>
		<author><name>Lemzwerg</name></author>
	</entry>
	<entry>
		<id>https://wiki.lilypond.community/index.php?title=Alternate_%5CtextSpanner_engraver&amp;diff=6446</id>
		<title>Alternate \textSpanner engraver</title>
		<link rel="alternate" type="text/html" href="https://wiki.lilypond.community/index.php?title=Alternate_%5CtextSpanner_engraver&amp;diff=6446"/>
		<updated>2026-03-11T08:15:18Z</updated>

		<summary type="html">&lt;p&gt;Lemzwerg: Created page with &amp;quot;LilyPond&amp;#039;s default text spanner engraver can only handle a single text spanner per voice at a time.  The engraver in this snippet provides an alternate implementation to circumvent this limitation; it uses spanner IDs to specify start and end of overlapping text spanners.  To use it, replace &amp;lt;code&amp;gt;Text_spanner_engraver&amp;lt;/code&amp;gt; with &amp;lt;code&amp;gt;\alternateTextSpannerEngraver&amp;lt;/code&amp;gt;.  The example below demonstrates two possible ways to specify a spanner ID: either define a new com...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;LilyPond&#039;s default text spanner engraver can only handle a single text spanner per voice at a time.  The engraver in this snippet provides an alternate implementation to circumvent this limitation; it uses spanner IDs to specify start and end of overlapping text spanners.&lt;br /&gt;
&lt;br /&gt;
To use it, replace &amp;lt;code&amp;gt;Text_spanner_engraver&amp;lt;/code&amp;gt; with &amp;lt;code&amp;gt;\alternateTextSpannerEngraver&amp;lt;/code&amp;gt;.  The example below demonstrates two possible ways to specify a spanner ID: either define a new command or use the &amp;lt;code&amp;gt;\=&amp;lt;/code&amp;gt; command to directly set the ID.&lt;br /&gt;
&lt;br /&gt;
To control the vertical order of text spanners, use the standard way of tweaking the &amp;lt;code&amp;gt;outside-staff-priority&amp;lt;/code&amp;gt; property.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;lilypond version=&amp;quot;2.24&amp;quot;&amp;gt;&lt;br /&gt;
% LSR written by Dave Nalesnik&lt;br /&gt;
% LSR https://lists.gnu.org/archive/html/lilypond-user/2026-01/msg00006.html&lt;br /&gt;
&lt;br /&gt;
% Incorporating some code from the rewrite in Scheme of&lt;br /&gt;
% Text_spanner_engraver in input/regression/scheme-text-spanner.ly&lt;br /&gt;
&lt;br /&gt;
#(define (add-bound-item spanner item)&lt;br /&gt;
   (if (null? (ly:spanner-bound spanner LEFT))&lt;br /&gt;
       (ly:spanner-set-bound! spanner LEFT item)&lt;br /&gt;
       (ly:spanner-set-bound! spanner RIGHT item)))&lt;br /&gt;
&lt;br /&gt;
#(define (set-axis! grob axis)&lt;br /&gt;
   (when (not (number? (ly:grob-property grob &#039;side-axis)))&lt;br /&gt;
     (set! (ly:grob-property grob &#039;side-axis) axis)&lt;br /&gt;
     (ly:grob-chain-callback&lt;br /&gt;
      grob&lt;br /&gt;
      (if (eq? axis X)&lt;br /&gt;
          ly:side-position-interface::x-aligned-side&lt;br /&gt;
          side-position-interface::y-aligned-side)&lt;br /&gt;
      (if (eq? axis X)&lt;br /&gt;
	  &#039;X-offset&lt;br /&gt;
	  &#039;Y-offset))))&lt;br /&gt;
&lt;br /&gt;
#(define (assign-spanner-index orig-ls)&lt;br /&gt;
   &amp;quot;Determine an available position of a new spanner in an ordered&lt;br /&gt;
sequence of spanners (a list of pairs, where the car of the pair&lt;br /&gt;
gives the position).  The goal is for the sequence to begin with&lt;br /&gt;
zero and contain no gaps.  Return the index representing the&lt;br /&gt;
spanner&#039;s position.&lt;br /&gt;
&lt;br /&gt;
Examples (only showing the cars of the pairs):&lt;br /&gt;
&lt;br /&gt;
  (0 1)   =&amp;gt; 2&lt;br /&gt;
  (2 3)   =&amp;gt; 0&lt;br /&gt;
  (0 3)   =&amp;gt; 1&lt;br /&gt;
  (0 1 3) =&amp;gt; 2&lt;br /&gt;
&amp;quot;&lt;br /&gt;
   (if (null? orig-ls)&lt;br /&gt;
       0&lt;br /&gt;
       (let loop ((ls orig-ls)&lt;br /&gt;
		  (insert? #t)&lt;br /&gt;
		  (result 0))&lt;br /&gt;
         (cond&lt;br /&gt;
          ((null? ls)&lt;br /&gt;
	   result)&lt;br /&gt;
          ;; Position at head of list.&lt;br /&gt;
          ((and insert? (&amp;gt; (caar orig-ls) 0))&lt;br /&gt;
           (loop ls #f 0))&lt;br /&gt;
          ;; No gaps, put at end of list.&lt;br /&gt;
          ((and insert? (null? (cdr ls)))&lt;br /&gt;
           (loop (cdr ls) #f (1+ (caar ls))))&lt;br /&gt;
          ;; Fill lowest position of gap.&lt;br /&gt;
          ((and insert?&lt;br /&gt;
                (&amp;gt; (caadr ls) (1+ (caar ls))))&lt;br /&gt;
           (loop (cdr ls) #f (1+ (caar ls))))&lt;br /&gt;
          (else&lt;br /&gt;
	   (loop (cdr ls) insert? result))))))&lt;br /&gt;
&lt;br /&gt;
alternateTextSpannerEngraver =&lt;br /&gt;
#(lambda (context)&lt;br /&gt;
   (let (;; A list of pairs comprising a spanner index (not&lt;br /&gt;
	 ;; `spanner-id` values) and a spanner which has been begun.&lt;br /&gt;
         (spanners &#039;())&lt;br /&gt;
         (finished &#039;()) ; A list of spanners in completion stage.&lt;br /&gt;
         (start-events &#039;()) ; A list of START events.&lt;br /&gt;
         (stop-events &#039;())) ; A list of STOP events.&lt;br /&gt;
     (make-engraver&lt;br /&gt;
      ;; `\startTextSpan`, `\stopTextSpan`, and the like create&lt;br /&gt;
      ;; events which we collect here.&lt;br /&gt;
      (listeners&lt;br /&gt;
       ((text-span-event engraver event)&lt;br /&gt;
        (if (= START (ly:event-property event &#039;span-direction))&lt;br /&gt;
            (set! start-events (cons event start-events))&lt;br /&gt;
            (set! stop-events (cons event stop-events)))))&lt;br /&gt;
&lt;br /&gt;
      ;; Populate `note-columns` property of spanners.  Bounds are&lt;br /&gt;
      ;; set to note columns, and each spanner keeps a record of&lt;br /&gt;
      ;; the note columns it traverses.&lt;br /&gt;
      (acknowledgers&lt;br /&gt;
       ((note-column-interface engraver grob source-engraver)&lt;br /&gt;
        (for-each (lambda (s)&lt;br /&gt;
                    (ly:pointer-group-interface::add-grob&lt;br /&gt;
                     (cdr s) &#039;note-columns grob)&lt;br /&gt;
                    (when (null? (ly:spanner-bound (cdr s) LEFT))&lt;br /&gt;
                      (add-bound-item (cdr s) grob)))&lt;br /&gt;
		  spanners)&lt;br /&gt;
        ;; `finished` only contains spanners, no indices.&lt;br /&gt;
        (for-each (lambda (f)&lt;br /&gt;
                    (ly:pointer-group-interface::add-grob&lt;br /&gt;
                     f &#039;note-columns grob)&lt;br /&gt;
                    (when (null? (ly:spanner-bound f RIGHT))&lt;br /&gt;
                      (add-bound-item f grob)))&lt;br /&gt;
		  finished)))&lt;br /&gt;
&lt;br /&gt;
      ((process-music trans)&lt;br /&gt;
       ;; Move begun spanners from `span` to `finished`.  We do&lt;br /&gt;
       ;; this on the basis of `spanner-id`.  If we find a match&lt;br /&gt;
       ;; -- either the strings are the same, or both are unset --&lt;br /&gt;
       ;; a transfer can be made.  Return a warning if we find no&lt;br /&gt;
       ;; match: spanner hasn&#039;t been properly begun.&lt;br /&gt;
       (for-each&lt;br /&gt;
        (lambda (es)&lt;br /&gt;
          (let ((es-id (ly:event-property es &#039;spanner-id)))&lt;br /&gt;
            (let loop ((sp spanners))&lt;br /&gt;
              (if (null? sp)&lt;br /&gt;
                  (ly:warning &amp;quot;No spanner to end!&amp;quot;)&lt;br /&gt;
                  (let ((sp-id (ly:event-property&lt;br /&gt;
                                (event-cause (cdar sp))&lt;br /&gt;
				&#039;spanner-id)))&lt;br /&gt;
                    (cond&lt;br /&gt;
                     ((equal? sp-id es-id)&lt;br /&gt;
                      (set! finished (cons (cdar sp) finished))&lt;br /&gt;
                      (set! spanners&lt;br /&gt;
			    (remove (lambda (s)&lt;br /&gt;
				      (eq? s (car sp))) spanners)))&lt;br /&gt;
                     (else&lt;br /&gt;
		      (loop (cdr sp)))))))))&lt;br /&gt;
        stop-events)&lt;br /&gt;
&lt;br /&gt;
       ;; The end of our spanners can be acknowledged by other&lt;br /&gt;
       ;; engravers, thus announce them.&lt;br /&gt;
       (for-each&lt;br /&gt;
        (lambda (f)&lt;br /&gt;
          (ly:engraver-announce-end-grob trans f (event-cause f)))&lt;br /&gt;
        finished)&lt;br /&gt;
&lt;br /&gt;
       ;; Make spanners in response to START events.&lt;br /&gt;
       ;;&lt;br /&gt;
       ;; Each new spanner is assigned an index denoting its&lt;br /&gt;
       ;; position relative to other active spanners.  This is&lt;br /&gt;
       ;; enforced (for the moment) by adding a small amount to&lt;br /&gt;
       ;; the spanner&#039;s `outside-staff-priority` proportional to&lt;br /&gt;
       ;; this index.  This is unlikely to result in conflicts,&lt;br /&gt;
       ;; though a better solution may be to organize the spanners&lt;br /&gt;
       ;; by a new alignment grob.&lt;br /&gt;
       ;;&lt;br /&gt;
       ;; Also, add any existing spanners to the&lt;br /&gt;
       ;; `side-support-elements` array of the new spanner.  This&lt;br /&gt;
       ;; ensures correct ordering over line breaks when&lt;br /&gt;
       ;; `outside-staff-priority` is set to `#f` (which means&lt;br /&gt;
       ;; that it is no longer an outside-staff object -- not the&lt;br /&gt;
       ;; default).&lt;br /&gt;
       (for-each&lt;br /&gt;
        (lambda (es)&lt;br /&gt;
          (let* ((new (ly:engraver-make-grob&lt;br /&gt;
		       trans &#039;TextSpanner es))&lt;br /&gt;
                 (new-idx (assign-spanner-index spanners))&lt;br /&gt;
                 (new-osp (ly:grob-property&lt;br /&gt;
			   new &#039;outside-staff-priority))&lt;br /&gt;
                 (new-osp (if (number? new-osp)&lt;br /&gt;
                              (+ new-osp (/ new-idx 1000.0))&lt;br /&gt;
                              new-osp)))&lt;br /&gt;
            (set! (ly:grob-property&lt;br /&gt;
		   new &#039;outside-staff-priority) new-osp)&lt;br /&gt;
            (set-axis! new Y)&lt;br /&gt;
            ;; Add spanners with a lower index than the new&lt;br /&gt;
            ;; spanner to its `side-support-elements` list.  This&lt;br /&gt;
            ;; allows new spanners to fill gaps under the topmost&lt;br /&gt;
            ;; spanner.&lt;br /&gt;
            (for-each (lambda (sp)&lt;br /&gt;
			(when (&amp;lt; (car sp) new-idx)&lt;br /&gt;
			  (ly:pointer-group-interface::add-grob&lt;br /&gt;
			   new &#039;side-support-elements (cdr sp))))&lt;br /&gt;
		      spanners)&lt;br /&gt;
            (set! spanners (cons (cons new-idx new) spanners))&lt;br /&gt;
            (set! spanners&lt;br /&gt;
                  (sort spanners (lambda (x y)&lt;br /&gt;
				   (&amp;lt; (car x) (car y)))))))&lt;br /&gt;
        start-events)&lt;br /&gt;
&lt;br /&gt;
       ;; Events have served their purpose for this timestep.&lt;br /&gt;
       ;; Clear the way for new events in later timesteps.&lt;br /&gt;
       (set! start-events &#039;())&lt;br /&gt;
       (set! stop-events &#039;()))&lt;br /&gt;
&lt;br /&gt;
      ((stop-translation-timestep trans)&lt;br /&gt;
       ;; Set bounds of spanners to `PaperColumns` grobs if they&lt;br /&gt;
       ;; haven&#039;t been set.  This allows spanners to be drawn&lt;br /&gt;
       ;; between spacers.&lt;br /&gt;
       ;;&lt;br /&gt;
       ;; Other uses?  Doesn&#039;t appear to affect whether spanners&lt;br /&gt;
       ;; can de drawn between rests.&lt;br /&gt;
       (for-each (lambda (s)&lt;br /&gt;
		   (when (null? (ly:spanner-bound (cdr s) LEFT))&lt;br /&gt;
		     (ly:spanner-set-bound!&lt;br /&gt;
		      (cdr s) LEFT&lt;br /&gt;
		      (ly:context-property context&lt;br /&gt;
					   &#039;currentMusicalColumn))))&lt;br /&gt;
		 spanners)&lt;br /&gt;
       (for-each (lambda (f)&lt;br /&gt;
		   (when (null? (ly:spanner-bound f RIGHT))&lt;br /&gt;
		     (ly:spanner-set-bound!&lt;br /&gt;
		      f RIGHT&lt;br /&gt;
		      (ly:context-property context&lt;br /&gt;
					   &#039;currentMusicalColumn))))&lt;br /&gt;
		 finished)&lt;br /&gt;
       (set! finished &#039;()))&lt;br /&gt;
&lt;br /&gt;
      ((finalize trans)&lt;br /&gt;
       ;; If spanner ends on spacer at end of context?&lt;br /&gt;
       (for-each (lambda (f)&lt;br /&gt;
                   (when (null? (ly:spanner-bound f RIGHT))&lt;br /&gt;
                     (ly:spanner-set-bound!&lt;br /&gt;
		      f RIGHT&lt;br /&gt;
                      (ly:context-property context&lt;br /&gt;
					   &#039;currentMusicalColumn))))&lt;br /&gt;
		 finished)&lt;br /&gt;
       (set! finished &#039;())&lt;br /&gt;
       ;; User didn&#039;t end spanner.&lt;br /&gt;
       (for-each (lambda (sp)&lt;br /&gt;
		   (ly:warning &amp;quot;incomplete spanner removed!&amp;quot;)&lt;br /&gt;
		   (ly:grob-suicide! (cdr sp)))&lt;br /&gt;
		 spanners)&lt;br /&gt;
       (set! spanners &#039;())))))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%% EXAMPLE %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%&lt;br /&gt;
&lt;br /&gt;
startTextSpanOne =&lt;br /&gt;
#(make-music &#039;TextSpanEvent &#039;span-direction START &#039;spanner-id &amp;quot;1&amp;quot;)&lt;br /&gt;
stopTextSpanOne =&lt;br /&gt;
#(make-music &#039;TextSpanEvent &#039;span-direction STOP &#039;spanner-id &amp;quot;1&amp;quot;)&lt;br /&gt;
startTextSpanTwo =&lt;br /&gt;
#(make-music &#039;TextSpanEvent &#039;span-direction START &#039;spanner-id &amp;quot;2&amp;quot;)&lt;br /&gt;
stopTextSpanTwo =&lt;br /&gt;
#(make-music &#039;TextSpanEvent &#039;span-direction STOP &#039;spanner-id &amp;quot;2&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
\layout {&lt;br /&gt;
  \context {&lt;br /&gt;
    \Voice&lt;br /&gt;
    \remove #&amp;quot;Text_spanner_engraver&amp;quot;&lt;br /&gt;
    \consists \alternateTextSpannerEngraver&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
\relative c&#039; {&lt;br /&gt;
  \override TextSpanner.style = ##f&lt;br /&gt;
  \override TextSpanner.thickness = 10&lt;br /&gt;
  % \override TextSpanner.to-barline = ##t&lt;br /&gt;
&lt;br /&gt;
  a4 \tweak color #red \startTextSpan&lt;br /&gt;
    b \tweak color #green \startTextSpanOne&lt;br /&gt;
    c \tweak color #blue \startTextSpanTwo&lt;br /&gt;
    d \=3\startTextSpan |&lt;br /&gt;
  a4\stopTextSpan&lt;br /&gt;
    b \stopTextSpanOne&lt;br /&gt;
      \tweak color #red \startTextSpan&lt;br /&gt;
    c \stopTextSpanTwo&lt;br /&gt;
      \tweak color #green \startTextSpanOne&lt;br /&gt;
    d \=3\stopTextSpan&lt;br /&gt;
      \tweak color #blue \startTextSpanTwo |&lt;br /&gt;
  a4 \=3\startTextSpan&lt;br /&gt;
    b c d | \break&lt;br /&gt;
&lt;br /&gt;
  a4 b c d |&lt;br /&gt;
  a4\stopTextSpan&lt;br /&gt;
    \stopTextSpanOne&lt;br /&gt;
    \stopTextSpanTwo&lt;br /&gt;
    \=3\stopTextSpan&lt;br /&gt;
    b &lt;br /&gt;
    c \startTextSpan&lt;br /&gt;
    d \tweak outside-staff-priority #0 \=1\startTextSpan |&lt;br /&gt;
  a4 b&lt;br /&gt;
    c \=1\stopTextSpan&lt;br /&gt;
    d \stopTextSpan |&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lilypond&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Contexts and engravers]]&lt;br /&gt;
[[Category:Editorial annotations]]&lt;br /&gt;
[[Category:Expressive marks]]&lt;br /&gt;
[[Category:Scheme]]&lt;br /&gt;
[[Category:Workaround]]&lt;br /&gt;
[[Category:Snippet]]&lt;/div&gt;</summary>
		<author><name>Lemzwerg</name></author>
	</entry>
	<entry>
		<id>https://wiki.lilypond.community/index.php?title=Making_cross-staff_beams_look_better&amp;diff=6445</id>
		<title>Making cross-staff beams look better</title>
		<link rel="alternate" type="text/html" href="https://wiki.lilypond.community/index.php?title=Making_cross-staff_beams_look_better&amp;diff=6445"/>
		<updated>2026-03-11T08:10:11Z</updated>

		<summary type="html">&lt;p&gt;Lemzwerg: Improve&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Cross-staff beams might be very steep, which can be ugly sometimes.  This snippet demonstrates how to change that.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;lilypond version=&amp;quot;2.24&amp;quot;&amp;gt;&lt;br /&gt;
\score {&lt;br /&gt;
  \new PianoStaff &amp;lt;&amp;lt;&lt;br /&gt;
   \new Staff = &amp;quot;RH&amp;quot; { \clef treble \time 3/4 s2.*2 }&lt;br /&gt;
   \new Staff = &amp;quot;LH&amp;quot; { \clef bass   \time 3/4 s2.*2 }&lt;br /&gt;
   \context Staff = LH&lt;br /&gt;
    \relative c&#039; {&lt;br /&gt;
     \stemDown&lt;br /&gt;
     c,8 [ g&#039;&lt;br /&gt;
       \change Staff = RH&lt;br /&gt;
       d&#039; a&#039; e&#039; b&#039; ] |&lt;br /&gt;
     \override Beam.concaveness = #1&lt;br /&gt;
     b [ e, a, d,&lt;br /&gt;
       \change Staff = LH&lt;br /&gt;
       g, c, ] |&lt;br /&gt;
   }&lt;br /&gt;
  &amp;gt;&amp;gt;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
% Prevent bad cropping.&lt;br /&gt;
\markup \null&lt;br /&gt;
&amp;lt;/lilypond&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Keyboards]]&lt;br /&gt;
[[Category:Workaround]]&lt;br /&gt;
[[Category:Version-specific]]&lt;br /&gt;
[[Category:Snippet]]&lt;/div&gt;</summary>
		<author><name>Lemzwerg</name></author>
	</entry>
	<entry>
		<id>https://wiki.lilypond.community/index.php?title=Making_cross-staff_beams_look_better&amp;diff=6444</id>
		<title>Making cross-staff beams look better</title>
		<link rel="alternate" type="text/html" href="https://wiki.lilypond.community/index.php?title=Making_cross-staff_beams_look_better&amp;diff=6444"/>
		<updated>2026-03-11T08:05:13Z</updated>

		<summary type="html">&lt;p&gt;Lemzwerg: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Cross-staff beams may not look always good; this snippet demonstrates how to get better results.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;lilypond version=&amp;quot;2.24&amp;quot;&amp;gt;&lt;br /&gt;
\score {&lt;br /&gt;
  \new PianoStaff &amp;lt;&amp;lt;&lt;br /&gt;
   \new Staff = &amp;quot;RH&amp;quot; { \clef treble \time 3/4 s2.*2 }&lt;br /&gt;
   \new Staff = &amp;quot;LH&amp;quot; { \clef bass   \time 3/4 s2.*2 }&lt;br /&gt;
   \context Staff = LH&lt;br /&gt;
    \relative c&#039; {&lt;br /&gt;
     \stemDown % Change into \stemUp to fix the bug&lt;br /&gt;
     c,8 [ g&#039;&lt;br /&gt;
     \change Staff = RH&lt;br /&gt;
     d&#039; a&#039; e&#039; b&#039; ]&lt;br /&gt;
     % This makes the second beam look much better.&lt;br /&gt;
     \override Beam.concaveness = #0&lt;br /&gt;
     b [ e, a, d,&lt;br /&gt;
     \change Staff = LH&lt;br /&gt;
     g, c, ]&lt;br /&gt;
   }&lt;br /&gt;
  &amp;gt;&amp;gt;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
% Prevent bad cropping.&lt;br /&gt;
\markup \null&lt;br /&gt;
&amp;lt;/lilypond&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Keyboards]]&lt;br /&gt;
[[Category:Workaround]]&lt;br /&gt;
[[Category:Version-specific]]&lt;br /&gt;
[[Category:Snippet]]&lt;/div&gt;</summary>
		<author><name>Lemzwerg</name></author>
	</entry>
	<entry>
		<id>https://wiki.lilypond.community/index.php?title=Fingering_spanner&amp;diff=6443</id>
		<title>Fingering spanner</title>
		<link rel="alternate" type="text/html" href="https://wiki.lilypond.community/index.php?title=Fingering_spanner&amp;diff=6443"/>
		<updated>2026-03-11T06:41:51Z</updated>

		<summary type="html">&lt;p&gt;Lemzwerg: Revise&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Draw a straight or dashed line between two fingerings.&lt;br /&gt;
&lt;br /&gt;
Syntax is&lt;br /&gt;
&lt;br /&gt;
 -\guide &amp;lt;var&amp;gt;dashed?&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;offset&amp;lt;/var&amp;gt; -&amp;lt;var&amp;gt;f&amp;lt;/var&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If Boolean argument &amp;lt;var&amp;gt;dashed?&amp;lt;/var&amp;gt; is set to &amp;lt;code&amp;gt;#t&amp;lt;/code&amp;gt;, draw a dashed line.  The target fingering number is given by &amp;lt;var&amp;gt;f&amp;lt;/var&amp;gt;, the offset from &amp;lt;var&amp;gt;f&amp;lt;/var&amp;gt; to the start fingering is &amp;lt;var&amp;gt;offset&amp;lt;/var&amp;gt;, which is coordinate pair (the X-value of this pair is thus always negative).&lt;br /&gt;
&lt;br /&gt;
This function should be only used after the complete music has been typeset.  Any change in the formatting will make the X-offsets invalid.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;lilypond version=&amp;quot;2.24&amp;quot;&amp;gt;&lt;br /&gt;
% LSR Credits: PPS in May 2015&lt;br /&gt;
&lt;br /&gt;
guide =&lt;br /&gt;
#(define-music-function (dashed? coord fingering) &lt;br /&gt;
  (boolean? pair? ly:music?)&lt;br /&gt;
  &amp;quot;Make a line or dashed spanner, starting from the end &lt;br /&gt;
   fingering and ending at the start fingering.&lt;br /&gt;
   One should define the ending point with x and y coordinates.&amp;quot;&lt;br /&gt;
  (let ((fingering-ev (make-music &#039;FingeringEvent))&lt;br /&gt;
        (finger (ly:music-property fingering &#039;digit)))&lt;br /&gt;
    #{&lt;br /&gt;
      \tweak stencil&lt;br /&gt;
        #(lambda (grob)&lt;br /&gt;
          (grob-interpret-markup grob&lt;br /&gt;
            #{ &lt;br /&gt;
              \markup &lt;br /&gt;
                \concat {&lt;br /&gt;
            	  \line {&lt;br /&gt;
            	    \translate #&#039;(0 . 0.5)&lt;br /&gt;
            	    \override #&#039;(thickness . 1.3)&lt;br /&gt;
            	    \with-dimensions #&#039;(0 . 0) #&#039;(0 . 0)&lt;br /&gt;
            	    #(if dashed?&lt;br /&gt;
            	         #{&lt;br /&gt;
            	           \markup&lt;br /&gt;
            	             \override #&#039;(on . 0.8)&lt;br /&gt;
            	             \override #&#039;(off . 0.4)&lt;br /&gt;
            	             \draw-dashed-line $coord &lt;br /&gt;
            	         #}&lt;br /&gt;
            	         #{ \markup \draw-line $coord #})&lt;br /&gt;
            	  }&lt;br /&gt;
            	  \hspace #0.4&lt;br /&gt;
            	  #(number-&amp;gt;string finger)&lt;br /&gt;
            	}&lt;br /&gt;
            #}))&lt;br /&gt;
        $fingering-ev&lt;br /&gt;
    #}))&lt;br /&gt;
&lt;br /&gt;
%%%% Test:&lt;br /&gt;
voiceI = {&lt;br /&gt;
  \set fingeringOrientations = #&#039;(up)&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;cis&#039;-3&amp;gt;16 &amp;lt;e&#039;-0&amp;gt; &amp;lt;a-2&amp;gt; b &lt;br /&gt;
    &amp;lt;c&#039;-\guide ##f #&#039;(-4 . 1) -2&lt;br /&gt;
       -1&amp;gt;8 &lt;br /&gt;
    cis&#039; d&#039; dis&#039; e&#039; f&#039; | &lt;br /&gt;
  fis&#039; g&#039;&lt;br /&gt;
    &amp;lt;gis&#039;-\guide ##t #&#039;(-39.5 . -2.5) -2&lt;br /&gt;
         -\guide ##t #&#039;(-39.5 . -2.5) -1&amp;gt; &lt;br /&gt;
    &amp;lt;a&#039;-3&lt;br /&gt;
       -\guide ##f #&#039;(-3.5 . -0.2) -1&amp;gt; bes&#039; b&#039;&lt;br /&gt;
    &amp;lt;c&#039;&#039;-\guide ##t #&#039;(-13 . -0.8) -3&lt;br /&gt;
        -\guide ##t #&#039;(-13 . -0.8) -1&amp;gt; &lt;br /&gt;
    &amp;lt;cis&#039;&#039;-2-4&amp;gt; |&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
voiceII = {&lt;br /&gt;
  r4 a16 a, ais a, b a, bis a, cis&#039; a, d&#039; a, | &lt;br /&gt;
  dis&#039; a, e&#039; a, eis&#039; a, fis&#039; a, g&#039; a, gis&#039; a, a&#039; a, g&#039; a, |&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
{&lt;br /&gt;
  \clef &amp;quot;G_8&amp;quot; &lt;br /&gt;
  \key d \major&lt;br /&gt;
  &amp;lt;&amp;lt; \voiceI \\ \voiceII &amp;gt;&amp;gt; &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lilypond&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Editorial annotations]]&lt;br /&gt;
[[Category:Snippet]]&lt;/div&gt;</summary>
		<author><name>Lemzwerg</name></author>
	</entry>
	<entry>
		<id>https://wiki.lilypond.community/index.php?title=Indicating_cross-staff_chords_with_a_bracket&amp;diff=6435</id>
		<title>Indicating cross-staff chords with a bracket</title>
		<link rel="alternate" type="text/html" href="https://wiki.lilypond.community/index.php?title=Indicating_cross-staff_chords_with_a_bracket&amp;diff=6435"/>
		<updated>2026-03-10T06:19:36Z</updated>

		<summary type="html">&lt;p&gt;Lemzwerg: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A non-arpeggiato bracket can indicate that notes on two different staves are to be played with the same hand. In order to do this, the &amp;lt;code&amp;gt;PianoStaff&amp;lt;/code&amp;gt; must be set to accept cross-staff arpeggios, and the arpeggios must be set to the bracket shape in the &amp;lt;code&amp;gt;PianoStaff&amp;lt;/code&amp;gt; context.&lt;br /&gt;
&lt;br /&gt;
The following example typesets measure&amp;amp;nbsp;65 of Debussy’s prelude &#039;&#039;Les collines d&#039;Anacapri&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;lilypond version=&amp;quot;2.24&amp;quot;&amp;gt;&lt;br /&gt;
\new PianoStaff &amp;lt;&amp;lt;&lt;br /&gt;
  \set PianoStaff.connectArpeggios = ##t&lt;br /&gt;
  \override PianoStaff.Arpeggio.stencil =&lt;br /&gt;
    #ly:arpeggio::brew-chord-bracket&lt;br /&gt;
&lt;br /&gt;
  \new Staff \relative c&#039; {&lt;br /&gt;
    \key b \major&lt;br /&gt;
    \time 6/8&lt;br /&gt;
    b8-.(\arpeggio fis&#039;-.\&amp;gt; cis-.&lt;br /&gt;
      e-. gis-. b-.)\!\fermata^\laissezVibrer \bar &amp;quot;||&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  \new Staff \relative c&#039; {&lt;br /&gt;
    \clef bass&lt;br /&gt;
    \key b \major&lt;br /&gt;
    &amp;lt;&amp;lt; { &amp;lt;a e cis&amp;gt;2.\arpeggio } \\&lt;br /&gt;
       { &amp;lt;a, e a,&amp;gt;2. } &amp;gt;&amp;gt;&lt;br /&gt;
  }&lt;br /&gt;
&amp;gt;&amp;gt;&lt;br /&gt;
&amp;lt;/lilypond&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Keyboards]]&lt;br /&gt;
[[Category:Real music]]&lt;br /&gt;
[[Category:Included in the official documentation]]&lt;br /&gt;
[[Category:Snippet]]&lt;/div&gt;</summary>
		<author><name>Lemzwerg</name></author>
	</entry>
	<entry>
		<id>https://wiki.lilypond.community/index.php?title=LSR_466&amp;diff=6434</id>
		<title>LSR 466</title>
		<link rel="alternate" type="text/html" href="https://wiki.lilypond.community/index.php?title=LSR_466&amp;diff=6434"/>
		<updated>2026-03-10T06:16:54Z</updated>

		<summary type="html">&lt;p&gt;Lemzwerg: Changed redirect target from Indicating cross-staff chords with arpeggio bracket to Indicating cross-staff chords with a bracket&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Indicating cross-staff chords with a bracket]]&lt;/div&gt;</summary>
		<author><name>Lemzwerg</name></author>
	</entry>
	<entry>
		<id>https://wiki.lilypond.community/index.php?title=Indicating_cross-staff_chords_with_a_bracket&amp;diff=6433</id>
		<title>Indicating cross-staff chords with a bracket</title>
		<link rel="alternate" type="text/html" href="https://wiki.lilypond.community/index.php?title=Indicating_cross-staff_chords_with_a_bracket&amp;diff=6433"/>
		<updated>2026-03-10T06:16:24Z</updated>

		<summary type="html">&lt;p&gt;Lemzwerg: Lemzwerg moved page Indicating cross-staff chords with arpeggio bracket to Indicating cross-staff chords with a bracket without leaving a redirect: Synchronize with LilyPond git repository&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;An arpeggio bracket can indicate that notes on two different staves are to be played with the same hand. In order to do this, the &amp;lt;code&amp;gt;PianoStaff&amp;lt;/code&amp;gt; must be set to accept cross-staff arpeggios, and the arpeggios must be set to the bracket shape in the &amp;lt;code&amp;gt;PianoStaff&amp;lt;/code&amp;gt; context.&lt;br /&gt;
&lt;br /&gt;
The following example typesets measure&amp;amp;nbsp;65 of Debussy’s prelude &#039;&#039;Les collines d&#039;Anacapri&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;lilypond version=&amp;quot;2.24&amp;quot;&amp;gt;&lt;br /&gt;
\new PianoStaff &amp;lt;&amp;lt;&lt;br /&gt;
  \set PianoStaff.connectArpeggios = ##t&lt;br /&gt;
  \override PianoStaff.Arpeggio.stencil =&lt;br /&gt;
    #ly:arpeggio::brew-chord-bracket&lt;br /&gt;
&lt;br /&gt;
  \new Staff \relative c&#039; {&lt;br /&gt;
    \key b \major&lt;br /&gt;
    \time 6/8&lt;br /&gt;
    b8-.(\arpeggio fis&#039;-.\&amp;gt; cis-.&lt;br /&gt;
      e-. gis-. b-.)\!\fermata^\laissezVibrer \bar &amp;quot;||&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  \new Staff \relative c&#039; {&lt;br /&gt;
    \clef bass&lt;br /&gt;
    \key b \major&lt;br /&gt;
    &amp;lt;&amp;lt; { &amp;lt;a e cis&amp;gt;2.\arpeggio } \\&lt;br /&gt;
       { &amp;lt;a, e a,&amp;gt;2. } &amp;gt;&amp;gt;&lt;br /&gt;
  }&lt;br /&gt;
&amp;gt;&amp;gt;&lt;br /&gt;
&amp;lt;/lilypond&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Keyboards]]&lt;br /&gt;
[[Category:Real music]]&lt;br /&gt;
[[Category:Included in the official documentation]]&lt;br /&gt;
[[Category:Snippet]]&lt;/div&gt;</summary>
		<author><name>Lemzwerg</name></author>
	</entry>
	<entry>
		<id>https://wiki.lilypond.community/index.php?title=Adjusting_vertical_positioning_of_lyric_hyphens&amp;diff=6432</id>
		<title>Adjusting vertical positioning of lyric hyphens</title>
		<link rel="alternate" type="text/html" href="https://wiki.lilypond.community/index.php?title=Adjusting_vertical_positioning_of_lyric_hyphens&amp;diff=6432"/>
		<updated>2026-03-09T05:15:17Z</updated>

		<summary type="html">&lt;p&gt;Lemzwerg: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;For joining syllables, LilyPond doesn’t use the hyphen of the text font but instead draws a simple line with variable length (this limitation is tracked as {{Issue|1255}}). Its standard vertical position doesn’t always fit the proportions of the text font. When using a font with a large x-height, it may be too low.&lt;br /&gt;
&lt;br /&gt;
You can adjust the vertical positioning of the hyphens manually. To get a good result you may want to insert a “real” hyphen for comparison (like between ‘l-e’ in the snippet).  You may also want to adjust the thickness of LilyPond hyphens using the &amp;lt;code&amp;gt;thickness&amp;lt;/code&amp;gt; property of the &amp;lt;code&amp;gt;LyricHyphen&amp;lt;/code&amp;gt; grob to match the font’s hyphen character.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;lilypond version=&amp;quot;2.24&amp;quot;&amp;gt;&lt;br /&gt;
% LSR contributed by Hannes Kuhnert &amp;lt;hannes.kuhnert@gmx.de&amp;gt; 1.2.2012.&lt;br /&gt;
&lt;br /&gt;
\score {&lt;br /&gt;
  &amp;lt;&amp;lt;&lt;br /&gt;
    \new Voice = &amp;quot;Lied&amp;quot; {&lt;br /&gt;
      \relative {&lt;br /&gt;
        \clef G&lt;br /&gt;
        \key c \major&lt;br /&gt;
        e&#039;2 d c1&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    \new Lyrics = &amp;quot;Lied&amp;quot;&lt;br /&gt;
    \lyricsto Lied {&lt;br /&gt;
      La -- l-e -- lu.&lt;br /&gt;
    }&lt;br /&gt;
  &amp;gt;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  \layout {&lt;br /&gt;
    \context {&lt;br /&gt;
      \Lyrics&lt;br /&gt;
      \override LyricHyphen.Y-offset = #0.16&lt;br /&gt;
      \override LyricHyphen.thickness = #2.1&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
\paper {&lt;br /&gt;
  #(define fonts&lt;br /&gt;
    (make-pango-font-tree&lt;br /&gt;
     &amp;quot;Serif&amp;quot;&lt;br /&gt;
     &amp;quot;Sans&amp;quot;&lt;br /&gt;
     &amp;quot;Monospace&amp;quot;&lt;br /&gt;
     (/ 20 20)))&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lilypond&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Paper and layout]]&lt;br /&gt;
[[Category:Text]]&lt;br /&gt;
[[Category:Vocal music]]&lt;br /&gt;
[[Category:Snippet]]&lt;/div&gt;</summary>
		<author><name>Lemzwerg</name></author>
	</entry>
	<entry>
		<id>https://wiki.lilypond.community/index.php?title=Repeat_with_brackets&amp;diff=6430</id>
		<title>Repeat with brackets</title>
		<link rel="alternate" type="text/html" href="https://wiki.lilypond.community/index.php?title=Repeat_with_brackets&amp;diff=6430"/>
		<updated>2026-03-07T15:44:07Z</updated>

		<summary type="html">&lt;p&gt;Lemzwerg: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This snippet adds brackets with the number of repetitions above a bar or a group of bar. Very useful when dealing with minimal music, for instance. To summon it, simply use &amp;lt;code&amp;gt;\repeatBracket &amp;lt;var&amp;gt;N&amp;lt;/var&amp;gt; music&amp;lt;/code&amp;gt;, where &amp;lt;var&amp;gt;N&amp;lt;/var&amp;gt; is the number of repetitions. Example: &amp;lt;code&amp;gt;\repeatBracket 7 { c&#039;2 e&#039; }&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;lilypond version=&amp;quot;2.24&amp;quot;&amp;gt;&lt;br /&gt;
% LSR based on the wonderful spanner by David Nalesnik; see&lt;br /&gt;
% LSR  http://lists.gnu.org/archive/html/lilypond-user/2014-10/msg00446.html&lt;br /&gt;
&lt;br /&gt;
#(define (test-stencil grob text)&lt;br /&gt;
   (let* ((orig (ly:grob-original grob))&lt;br /&gt;
          (siblings (ly:spanner-broken-into orig)) ; have we been split?&lt;br /&gt;
          (refp (ly:grob-system grob))&lt;br /&gt;
          (left-bound (ly:spanner-bound grob LEFT))&lt;br /&gt;
          (right-bound (ly:spanner-bound grob RIGHT))&lt;br /&gt;
          (elts-L (ly:grob-array-&amp;gt;list (ly:grob-object left-bound &#039;elements)))&lt;br /&gt;
          (elts-R (ly:grob-array-&amp;gt;list (ly:grob-object right-bound &#039;elements)))&lt;br /&gt;
          (break-alignment-L&lt;br /&gt;
           (filter&lt;br /&gt;
            (lambda (elt) (grob::has-interface elt &#039;break-alignment-interface))&lt;br /&gt;
            elts-L))&lt;br /&gt;
          (break-alignment-R&lt;br /&gt;
           (filter&lt;br /&gt;
            (lambda (elt) (grob::has-interface elt &#039;break-alignment-interface))&lt;br /&gt;
            elts-R))&lt;br /&gt;
          (break-alignment-L-ext (ly:grob-extent (car break-alignment-L) refp X))&lt;br /&gt;
          (break-alignment-R-ext (ly:grob-extent (car break-alignment-R) refp X))&lt;br /&gt;
          (num&lt;br /&gt;
           (markup text))&lt;br /&gt;
          (num&lt;br /&gt;
           (if (or (null? siblings)&lt;br /&gt;
                   (eq? grob (car siblings)))&lt;br /&gt;
               num&lt;br /&gt;
               (make-parenthesize-markup num)))&lt;br /&gt;
          (num (grob-interpret-markup grob num))&lt;br /&gt;
          (num-stil-ext-X (ly:stencil-extent num X))&lt;br /&gt;
          (num-stil-ext-Y (ly:stencil-extent num Y))&lt;br /&gt;
          (num (ly:stencil-aligned-to num X CENTER))&lt;br /&gt;
          (num&lt;br /&gt;
           (ly:stencil-translate-axis&lt;br /&gt;
            num&lt;br /&gt;
            (+ (interval-length break-alignment-L-ext)&lt;br /&gt;
              (* 0.5&lt;br /&gt;
                (- (car break-alignment-R-ext)&lt;br /&gt;
                  (cdr break-alignment-L-ext))))&lt;br /&gt;
            X))&lt;br /&gt;
          (bracket-L&lt;br /&gt;
           (markup&lt;br /&gt;
            #:path&lt;br /&gt;
            0.1 ; line-thickness&lt;br /&gt;
            `((moveto 0.5 ,(* 0.5 (interval-length num-stil-ext-Y)))&lt;br /&gt;
              (lineto ,(* 0.5&lt;br /&gt;
                         (- (car break-alignment-R-ext)&lt;br /&gt;
                           (cdr break-alignment-L-ext)&lt;br /&gt;
                           (interval-length num-stil-ext-X)))&lt;br /&gt;
                ,(* 0.5 (interval-length num-stil-ext-Y)))&lt;br /&gt;
              (closepath)&lt;br /&gt;
              (rlineto 0.0&lt;br /&gt;
                ,(if (or (null? siblings) (eq? grob (car siblings)))&lt;br /&gt;
                     -1.0 0.0)))))&lt;br /&gt;
          (bracket-R&lt;br /&gt;
           (markup&lt;br /&gt;
            #:path&lt;br /&gt;
            0.1&lt;br /&gt;
            `((moveto ,(* 0.5&lt;br /&gt;
                         (- (car break-alignment-R-ext)&lt;br /&gt;
                           (cdr break-alignment-L-ext)&lt;br /&gt;
                           (interval-length num-stil-ext-X)))&lt;br /&gt;
                ,(* 0.5 (interval-length num-stil-ext-Y)))&lt;br /&gt;
              (lineto 0.5&lt;br /&gt;
                ,(* 0.5 (interval-length num-stil-ext-Y)))&lt;br /&gt;
              (closepath)&lt;br /&gt;
              (rlineto 0.0&lt;br /&gt;
                ,(if (or (null? siblings) (eq? grob (last siblings)))&lt;br /&gt;
                     -1.0 0.0)))))&lt;br /&gt;
          (bracket-L (grob-interpret-markup grob bracket-L))&lt;br /&gt;
          (bracket-R (grob-interpret-markup grob bracket-R))&lt;br /&gt;
          (num (ly:stencil-combine-at-edge num X LEFT bracket-L 0.4))&lt;br /&gt;
          (num (ly:stencil-combine-at-edge num X RIGHT bracket-R 0.4)))&lt;br /&gt;
     num))&lt;br /&gt;
&lt;br /&gt;
#(define-public (Measure_attached_spanner_engraver context)&lt;br /&gt;
   (let ((span &#039;())&lt;br /&gt;
         (finished &#039;())&lt;br /&gt;
         (event-start &#039;())&lt;br /&gt;
         (event-stop &#039;()))&lt;br /&gt;
     (make-engraver&lt;br /&gt;
      (listeners ((measure-counter-event engraver event)&lt;br /&gt;
                  (if (= START (ly:event-property event &#039;span-direction))&lt;br /&gt;
                      (set! event-start event)&lt;br /&gt;
                      (set! event-stop event))))&lt;br /&gt;
      ((process-music trans)&lt;br /&gt;
       (if (ly:stream-event? event-stop)&lt;br /&gt;
           (if (null? span)&lt;br /&gt;
               (ly:warning &amp;quot;You&#039;re trying to end a measure-attached spanner but you haven&#039;t started one.&amp;quot;)&lt;br /&gt;
               (begin (set! finished span)&lt;br /&gt;
                 (ly:engraver-announce-end-grob trans finished event-start)&lt;br /&gt;
                 (set! span &#039;())&lt;br /&gt;
                 (set! event-stop &#039;()))))&lt;br /&gt;
       (if (ly:stream-event? event-start)&lt;br /&gt;
           (begin (set! span (ly:engraver-make-grob trans &#039;MeasureCounter event-start))&lt;br /&gt;
             (set! event-start &#039;()))))&lt;br /&gt;
      ((stop-translation-timestep trans)&lt;br /&gt;
       (if (and (ly:spanner? span)&lt;br /&gt;
                (null? (ly:spanner-bound span LEFT))&lt;br /&gt;
                (moment&amp;lt;=? (ly:context-property context &#039;measurePosition) ZERO-MOMENT)) &lt;br /&gt;
           (ly:spanner-set-bound! span LEFT &lt;br /&gt;
             (ly:context-property context &#039;currentCommandColumn)))&lt;br /&gt;
       (if (and (ly:spanner? finished)&lt;br /&gt;
                (moment&amp;lt;=? (ly:context-property context &#039;measurePosition) ZERO-MOMENT))&lt;br /&gt;
           (begin&lt;br /&gt;
            (if (null? (ly:spanner-bound finished RIGHT))&lt;br /&gt;
                (ly:spanner-set-bound! finished RIGHT&lt;br /&gt;
                  (ly:context-property context &#039;currentCommandColumn)))&lt;br /&gt;
            (set! finished &#039;())&lt;br /&gt;
            (set! event-start &#039;())&lt;br /&gt;
            (set! event-stop &#039;()))))&lt;br /&gt;
      ((finalize trans)&lt;br /&gt;
       (if (ly:spanner? finished)&lt;br /&gt;
           (begin&lt;br /&gt;
            (if (null? (ly:spanner-bound finished RIGHT))&lt;br /&gt;
                (set! (ly:spanner-bound finished RIGHT)&lt;br /&gt;
                      (ly:context-property context &#039;currentCommandColumn)))&lt;br /&gt;
            (set! finished &#039;())))&lt;br /&gt;
       (if (ly:spanner? span)&lt;br /&gt;
           (begin&lt;br /&gt;
            (ly:warning &amp;quot;I think there&#039;s a dangling measure-attached spanner :-(&amp;quot;)&lt;br /&gt;
            (ly:grob-suicide! span)&lt;br /&gt;
            (set! span &#039;())))))))&lt;br /&gt;
&lt;br /&gt;
% necessary layout options&lt;br /&gt;
% note that you can have more than one single layout block&lt;br /&gt;
% (some of them may even be outside and some inside \score)&lt;br /&gt;
\layout {&lt;br /&gt;
  \context {&lt;br /&gt;
    \Staff&lt;br /&gt;
    \consists #Measure_attached_spanner_engraver&lt;br /&gt;
    \override MeasureCounter.font-encoding = #&#039;latin1&lt;br /&gt;
    \override MeasureCounter.font-size = 0&lt;br /&gt;
    \override MeasureCounter.outside-staff-padding = 2&lt;br /&gt;
    \override MeasureCounter.outside-staff-horizontal-padding = #0&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
% function itself&lt;br /&gt;
repeatBracket = #(define-music-function&lt;br /&gt;
     (N note)&lt;br /&gt;
     (number? ly:music?)     &lt;br /&gt;
      #{        &lt;br /&gt;
        \override Staff.MeasureCounter.stencil = &lt;br /&gt;
        #(lambda (grob) (test-stencil grob #{ #(string-append(number-&amp;gt;string N) &amp;quot;×&amp;quot;) #} ))&lt;br /&gt;
        \startMeasureCount&lt;br /&gt;
        \repeat volta #N { $note }&lt;br /&gt;
        \stopMeasureCount&lt;br /&gt;
      #}&lt;br /&gt;
     )&lt;br /&gt;
&lt;br /&gt;
%%%%%%%%%%%%%%%%%%%%%% EXAMPLE %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%&lt;br /&gt;
&lt;br /&gt;
{   &lt;br /&gt;
  \repeatBracket 7 {c&#039;1}&lt;br /&gt;
  \repeatBracket 32 {d&#039; g}&lt;br /&gt;
  \repeatBracket 14 {e&#039; f g}&lt;br /&gt;
  \repeatBracket 29 {f&#039; a bes \break cis&#039; e&#039;&#039;}  &lt;br /&gt;
  \repeatBracket 1048 {g&#039;1}  &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lilypond&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Repeats]]&lt;br /&gt;
[[Category:Automatic notation]]&lt;br /&gt;
[[Category:Contemporary notation]]&lt;br /&gt;
[[Category:Specific notation]]&lt;br /&gt;
[[Category:Contexts and engravers]]&lt;br /&gt;
[[Category:Snippet]]&lt;/div&gt;</summary>
		<author><name>Lemzwerg</name></author>
	</entry>
	<entry>
		<id>https://wiki.lilypond.community/index.php?title=Curly_bracket_with_variable_length_(path)&amp;diff=6426</id>
		<title>Curly bracket with variable length (path)</title>
		<link rel="alternate" type="text/html" href="https://wiki.lilypond.community/index.php?title=Curly_bracket_with_variable_length_(path)&amp;diff=6426"/>
		<updated>2026-03-05T17:31:57Z</updated>

		<summary type="html">&lt;p&gt;Lemzwerg: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Curly brackets (or flat braces).&lt;br /&gt;
&lt;br /&gt;
See also snippet [[Orchestral grouping with a custom brace]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;lilypond version=&amp;quot;2.24&amp;quot;&amp;gt;&lt;br /&gt;
%% LSR: Credits: PPS on April 2015&lt;br /&gt;
&lt;br /&gt;
%%% Defining a custom straight brace with a variable length:&lt;br /&gt;
#(define-markup-command (long-curly-bracket layout props arg-height)&lt;br /&gt;
   (number?)&lt;br /&gt;
  &amp;quot;Draw a curly bracket with a variable length.&amp;quot;&lt;br /&gt;
     (interpret-markup layout props&lt;br /&gt;
       (markup&lt;br /&gt;
        #:translate (cons 0 (* arg-height -1))&lt;br /&gt;
        (#:with-dimensions (cons -0.001 0) (cons 0.001 0)&lt;br /&gt;
         (#:override (cons (quote filled) #t)&lt;br /&gt;
          (#:path 0.01 `(&lt;br /&gt;
           (moveto   -0.8   0.0)&lt;br /&gt;
           (curveto  -0.2   0.4  -0.3  0.7 -0.3  1.5)&lt;br /&gt;
           (lineto   -0.3   ,arg-height)&lt;br /&gt;
           (curveto  -0.4   ,(+ arg-height 1.3) 0.5&lt;br /&gt;
                            ,(+ arg-height 2.8) 0.7&lt;br /&gt;
                            ,(+ arg-height 2.8))&lt;br /&gt;
           (curveto   0.6   ,(+ arg-height 2.5) 0.1&lt;br /&gt;
                            ,(+ arg-height 2)   0.1&lt;br /&gt;
                            ,arg-height)&lt;br /&gt;
           (lineto    0.1   1.5)&lt;br /&gt;
           (curveto   0.1   0.7   0.1   0.0  -0.8   0.0)&lt;br /&gt;
           (closepath)&lt;br /&gt;
           (curveto  -0.2  -0.4  -0.3  -0.7  -0.3  -1.5)&lt;br /&gt;
           (lineto   -0.3   ,(* arg-height -1))&lt;br /&gt;
           (curveto  -0.4   ,(* (+ arg-height 1.3) -1) 0.5&lt;br /&gt;
                            ,(* (+ arg-height 2.8) -1) 0.7&lt;br /&gt;
                            ,(* (+ arg-height 2.8) -1))&lt;br /&gt;
           (curveto   0.6   ,(* (+ arg-height 2.5) -1) 0.1&lt;br /&gt;
                            ,(* (+ arg-height 2) -1)   0.1&lt;br /&gt;
                            ,(* arg-height -1))&lt;br /&gt;
           (lineto    0.1  -1.5)&lt;br /&gt;
           (curveto   0.1  -0.7   0.1   0.0  -0.8   0.0)&lt;br /&gt;
           (closepath))))))))&lt;br /&gt;
&lt;br /&gt;
%%%% Examples:&lt;br /&gt;
\markup \with-dimensions #&#039;(-1 . 110) #&#039;(-95 . 3) \column {&lt;br /&gt;
  \italic &amp;quot;long-curly-bracket #Y:&amp;quot;&lt;br /&gt;
  \line {&lt;br /&gt;
    \center-column { &amp;quot;#2.5&amp;quot; \vspace #1 \long-curly-bracket #2.5 }&lt;br /&gt;
    \hspace #4&lt;br /&gt;
    \center-column { &amp;quot;#5&amp;quot; \vspace #1 \long-curly-bracket #5 }&lt;br /&gt;
    \hspace #4&lt;br /&gt;
    \center-column { &amp;quot;#10&amp;quot; \vspace #1 \long-curly-bracket #10 }&lt;br /&gt;
    \hspace #4&lt;br /&gt;
    \center-column { &amp;quot;#22&amp;quot; \vspace #1 \long-curly-bracket #22 }&lt;br /&gt;
  % \hspace #4&lt;br /&gt;
  % \center-column { &amp;quot;#40&amp;quot; \vspace #1 \long-curly-bracket #40 }&lt;br /&gt;
    \hspace #30&lt;br /&gt;
    \center-column { &lt;br /&gt;
      &amp;quot;\\rotate #90 &amp;amp; #-90&amp;quot;&lt;br /&gt;
      \vspace #1&lt;br /&gt;
      &amp;quot;#3&amp;quot; &lt;br /&gt;
      \rotate #90 \raise #3 \long-curly-bracket #3&lt;br /&gt;
      \vspace #1&lt;br /&gt;
  %   &amp;quot;#6&amp;quot; &lt;br /&gt;
  %   \rotate #90 \raise #6 \long-curly-bracket #6&lt;br /&gt;
  %   \vspace #1&lt;br /&gt;
      &amp;quot;#12&amp;quot; &lt;br /&gt;
      \rotate #90 \raise #12 \long-curly-bracket #12&lt;br /&gt;
      \vspace #1&lt;br /&gt;
      &amp;quot;#20&amp;quot; &lt;br /&gt;
      \rotate #90 \raise #20 \long-curly-bracket #20&lt;br /&gt;
      \vspace #1&lt;br /&gt;
  %   &amp;quot;#30&amp;quot; &lt;br /&gt;
  %   \rotate #90 \raise #30 \long-curly-bracket #30&lt;br /&gt;
  %   \vspace #1&lt;br /&gt;
  %   &amp;quot;#28&amp;quot; &lt;br /&gt;
  %   \rotate #-90 \raise #28 \long-curly-bracket #28&lt;br /&gt;
  %   \vspace #1&lt;br /&gt;
      &amp;quot;#18&amp;quot; &lt;br /&gt;
      \rotate #-90 \raise #18 \long-curly-bracket #18&lt;br /&gt;
      \vspace #1&lt;br /&gt;
      &amp;quot;#7&amp;quot; &lt;br /&gt;
      \rotate #-90 \raise #7 \long-curly-bracket #7&lt;br /&gt;
      \vspace #1&lt;br /&gt;
  %   &amp;quot;#4&amp;quot; &lt;br /&gt;
  %   \rotate #-90 \raise #4 \long-curly-bracket #4&lt;br /&gt;
  %   \vspace #1&lt;br /&gt;
      &amp;quot;#2&amp;quot; &lt;br /&gt;
      \rotate #-90 \raise #2 \long-curly-bracket #2&lt;br /&gt;
    } &lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lilypond&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Staff notation]]&lt;br /&gt;
[[Category:Editorial annotations]]&lt;br /&gt;
[[Category:Text]]&lt;br /&gt;
[[Category:Symbols and glyphs]]&lt;br /&gt;
[[Category:Snippet]]&lt;/div&gt;</summary>
		<author><name>Lemzwerg</name></author>
	</entry>
	<entry>
		<id>https://wiki.lilypond.community/index.php?title=Print_chord_names_with_same_root_and_different_bass_as_slash_and_bass_note&amp;diff=6425</id>
		<title>Print chord names with same root and different bass as slash and bass note</title>
		<link rel="alternate" type="text/html" href="https://wiki.lilypond.community/index.php?title=Print_chord_names_with_same_root_and_different_bass_as_slash_and_bass_note&amp;diff=6425"/>
		<updated>2026-03-05T16:59:52Z</updated>

		<summary type="html">&lt;p&gt;Lemzwerg: Revise comments.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;To print subsequent chord names only differing in their bass note as slash and bass note without a root symbol, use the Scheme engraver defined in this snippet. The is controlled by the &amp;lt;code&amp;gt;chordChanges&amp;lt;/code&amp;gt; context property.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;lilypond version=&amp;quot;2.24&amp;quot;&amp;gt;&lt;br /&gt;
#(define Bass_changes_equal_root_engraver&lt;br /&gt;
   (lambda (ctx)&lt;br /&gt;
     &amp;quot;Drop root for follow-up chord names that differ only in bass.&lt;br /&gt;
&lt;br /&gt;
In other words, the chord name sequence &#039;D D/C D/B&#039; gets actually&lt;br /&gt;
printed as &#039;D /C /B&#039;.&lt;br /&gt;
&lt;br /&gt;
Set the `chordChanges` context property to `#t` to activate this&lt;br /&gt;
feature.&amp;quot;&lt;br /&gt;
     (let ((chord-pitches &#039;())&lt;br /&gt;
           (last-chord-pitches &#039;())&lt;br /&gt;
           (bass-pitch #f))&lt;br /&gt;
       (make-engraver&lt;br /&gt;
        ((initialize this-engraver)&lt;br /&gt;
         (let ((chord-note-namer (ly:context-property ctx&lt;br /&gt;
                                                      &#039;chordNoteNamer)))&lt;br /&gt;
           ;; Set `chordNoteNamer`, respecting user setting if already&lt;br /&gt;
           ;; done.&lt;br /&gt;
           (ly:context-set-property! ctx &#039;chordNoteNamer&lt;br /&gt;
                                     (if (procedure? chord-note-namer)&lt;br /&gt;
                                         chord-note-namer&lt;br /&gt;
                                         note-name-&amp;gt;markup))))&lt;br /&gt;
&lt;br /&gt;
        (listeners&lt;br /&gt;
         ((note-event this-engraver event)&lt;br /&gt;
          (let* ((pitch (ly:event-property event &#039;pitch))&lt;br /&gt;
                 (pitch-name (ly:pitch-notename pitch))&lt;br /&gt;
                 (pitch-alt (ly:pitch-alteration pitch))&lt;br /&gt;
                 (bass (ly:event-property event &#039;bass #f))&lt;br /&gt;
                 (inversion (ly:event-property event &#039;inversion #f)))&lt;br /&gt;
            ;; We look at the `bass` and `inversion` event properties&lt;br /&gt;
            ;; to decide how to handle the current note event.  If&lt;br /&gt;
            ;; `inversion` is set we add the bass note to the chord as&lt;br /&gt;
            ;; an ordinary member so that we can compare inversed&lt;br /&gt;
            ;; chords; if `bass` is set the bass note is not added to&lt;br /&gt;
            ;; the chord.&lt;br /&gt;
            ;;&lt;br /&gt;
            ;; In the `chord-pitches` list we actually collect only&lt;br /&gt;
            ;; the notes&#039; pitch names (which are integers) and pitch&lt;br /&gt;
            ;; alterations as pairs, ignoring the octave.&lt;br /&gt;
            (cond (bass (set! bass-pitch pitch))&lt;br /&gt;
                  (inversion&lt;br /&gt;
                   (set! bass-pitch pitch)&lt;br /&gt;
                   (set! chord-pitches&lt;br /&gt;
                         (cons (cons pitch-name pitch-alt)&lt;br /&gt;
                               chord-pitches)))&lt;br /&gt;
                  (else&lt;br /&gt;
                   (set! chord-pitches&lt;br /&gt;
                         (cons (cons pitch-name pitch-alt)&lt;br /&gt;
                               chord-pitches)))))))&lt;br /&gt;
&lt;br /&gt;
        (acknowledgers&lt;br /&gt;
         ((chord-name-interface this-engraver grob source-engraver)&lt;br /&gt;
          (let ((chord-changes (ly:context-property ctx&lt;br /&gt;
                                                    &#039;chordChanges #f)))&lt;br /&gt;
            ;; If subsequent chords are equal apart from their bass,&lt;br /&gt;
            ;; we change the `text` property to print only the slash&lt;br /&gt;
            ;; and the bass note (via the formatter stored in the&lt;br /&gt;
            ;; `chordNoteNamer` context property).&lt;br /&gt;
            ;;&lt;br /&gt;
            ;; Equality is tested by comparing the sorted lists of&lt;br /&gt;
            ;; this chord&#039;s elements and the previous chord.  Sorting&lt;br /&gt;
            ;; is needed because inverted chords may have a different&lt;br /&gt;
            ;; order of pitches.  Note that we only do a simplified&lt;br /&gt;
            ;; sorting using the pitch name, ignoring the alteration.&lt;br /&gt;
            (if (and bass-pitch&lt;br /&gt;
                     chord-changes&lt;br /&gt;
                     (equal? (sort chord-pitches car&amp;lt;)&lt;br /&gt;
                             (sort last-chord-pitches car&amp;lt;)))&lt;br /&gt;
                (ly:grob-set-property!&lt;br /&gt;
                 grob &#039;text&lt;br /&gt;
                 (make-line-markup&lt;br /&gt;
                  (list&lt;br /&gt;
                   (ly:context-property ctx &#039;slashChordSeparator)&lt;br /&gt;
                   ((ly:context-property ctx &#039;chordNoteNamer)&lt;br /&gt;
                    bass-pitch&lt;br /&gt;
                    (ly:context-property ctx&lt;br /&gt;
                                         &#039;chordNameLowercaseMinor))))))&lt;br /&gt;
            (set! last-chord-pitches chord-pitches)&lt;br /&gt;
            (set! chord-pitches &#039;())&lt;br /&gt;
            (set! bass-pitch #f))))&lt;br /&gt;
&lt;br /&gt;
        ((finalize this-engraver)&lt;br /&gt;
         (set! last-chord-pitches &#039;()))))))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
myChords = \chordmode {&lt;br /&gt;
  % \germanChords&lt;br /&gt;
&lt;br /&gt;
  \set chordChanges = ##t&lt;br /&gt;
  d2:m d:m/cis&lt;br /&gt;
&lt;br /&gt;
  d:m/c&lt;br /&gt;
  \set chordChanges = ##f&lt;br /&gt;
  d:m/b&lt;br /&gt;
&lt;br /&gt;
  e1:7&lt;br /&gt;
  \set chordChanges = ##t&lt;br /&gt;
  e&lt;br /&gt;
  \break&lt;br /&gt;
&lt;br /&gt;
  \once \set chordChanges = ##f&lt;br /&gt;
  e1/f&lt;br /&gt;
  e2/gis e/+gis e e:m/f d:m d:m/cis d:m/c&lt;br /&gt;
  \set chordChanges = ##f&lt;br /&gt;
  d:m/b&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;&amp;lt;&lt;br /&gt;
  \new ChordNames&lt;br /&gt;
    \with { \consists #Bass_changes_equal_root_engraver }&lt;br /&gt;
    \myChords&lt;br /&gt;
  \new Staff \myChords&lt;br /&gt;
&amp;gt;&amp;gt;&lt;br /&gt;
&amp;lt;/lilypond&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Chords]]&lt;br /&gt;
[[Category:Contexts and engravers]]&lt;br /&gt;
[[Category:Scheme]]&lt;br /&gt;
[[Category:Staff notation]]&lt;br /&gt;
[[Category:Included in the official documentation]]&lt;br /&gt;
[[Category:Snippet]]&lt;/div&gt;</summary>
		<author><name>Lemzwerg</name></author>
	</entry>
	<entry>
		<id>https://wiki.lilypond.community/index.php?title=Lyrics_alignment&amp;diff=6420</id>
		<title>Lyrics alignment</title>
		<link rel="alternate" type="text/html" href="https://wiki.lilypond.community/index.php?title=Lyrics_alignment&amp;diff=6420"/>
		<updated>2026-03-03T10:29:27Z</updated>

		<summary type="html">&lt;p&gt;Lemzwerg: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Horizontal alignment for lyrics can be set by overriding the &amp;lt;code&amp;gt;self-alignment-X&amp;lt;/code&amp;gt; property of the &amp;lt;code&amp;gt;LyricText&amp;lt;/code&amp;gt; object. Value &amp;amp;nbsp;-1 means left-aligned, 0&amp;amp;nbsp;centered, and 1&amp;amp;nbsp;right-aligned. Alternatively, you can use the Scheme values &amp;lt;code&amp;gt;LEFT&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;CENTER&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;RIGHT&amp;lt;/code&amp;gt; instead of numbers.  Other numeric values are possible, too – don&#039;t forget to add the &amp;lt;samp&amp;gt;#&amp;lt;/samp&amp;gt; Scheme prefix for negative numbers!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;lilypond version=&amp;quot;2.24&amp;quot;&amp;gt;&lt;br /&gt;
\layout {&lt;br /&gt;
  ragged-right = ##f&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
\relative c&#039;&#039; {&lt;br /&gt;
  c1 c c c&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
\addlyrics {&lt;br /&gt;
  \once \override LyricText.self-alignment-X = #LEFT&lt;br /&gt;
  &amp;quot;left-aligned&amp;quot;&lt;br /&gt;
  \once \override LyricText.self-alignment-X = #CENTER&lt;br /&gt;
  &amp;quot;centered&amp;quot;&lt;br /&gt;
  \once \override LyricText.self-alignment-X = 1&lt;br /&gt;
  &amp;quot;right-aligned&amp;quot;&lt;br /&gt;
  \once \override LyricText.self-alignment-X = #-1.5&lt;br /&gt;
  &amp;quot;overly left-aligned&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lilypond&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Really simple]]&lt;br /&gt;
[[Category:Text]]&lt;br /&gt;
[[Category:Vocal music]]&lt;br /&gt;
[[Category:Included in the official documentation]]&lt;br /&gt;
[[Category:Snippet]]&lt;/div&gt;</summary>
		<author><name>Lemzwerg</name></author>
	</entry>
	<entry>
		<id>https://wiki.lilypond.community/index.php?title=Adjusting_vertical_positioning_of_lyric_hyphens&amp;diff=6417</id>
		<title>Adjusting vertical positioning of lyric hyphens</title>
		<link rel="alternate" type="text/html" href="https://wiki.lilypond.community/index.php?title=Adjusting_vertical_positioning_of_lyric_hyphens&amp;diff=6417"/>
		<updated>2026-03-02T08:55:14Z</updated>

		<summary type="html">&lt;p&gt;Lemzwerg: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;For joining syllables, LilyPond doesn’t use the hyphen of the text font but instead draws a simple line with variable length (this limitation is tracked as {{Issue|1255}}). Its standard vertical position doesn’t always fit the proportions of the text font. When using a font with a large x-height, it may be too low.&lt;br /&gt;
&lt;br /&gt;
You can adjust the vertical positioning of the hyphens manually. To get a good result you may want to insert a “real” hyphen for comparison (like between ‘l-e’ in the snippet).  You may also want to adjust the thickness of LilyPond hyphens using the &amp;lt;code&amp;gt;thickness&amp;lt;/code&amp;gt; property of the &amp;lt;code&amp;gt;LyricHyphen&amp;lt;/code&amp;gt; grob to match the font&#039;s hyphen character.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;lilypond version=&amp;quot;2.24&amp;quot;&amp;gt;&lt;br /&gt;
% LSR contributed by Hannes Kuhnert &amp;lt;hannes.kuhnert@gmx.de&amp;gt; 1.2.2012.&lt;br /&gt;
&lt;br /&gt;
\score {&lt;br /&gt;
  &amp;lt;&amp;lt;&lt;br /&gt;
    \new Voice = &amp;quot;Lied&amp;quot; {&lt;br /&gt;
      \relative {&lt;br /&gt;
        \clef G&lt;br /&gt;
        \key c \major&lt;br /&gt;
        e&#039;2 d c1&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    \new Lyrics = &amp;quot;Lied&amp;quot;&lt;br /&gt;
    \lyricsto Lied {&lt;br /&gt;
      La -- l-e -- lu.&lt;br /&gt;
    }&lt;br /&gt;
  &amp;gt;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  \layout {&lt;br /&gt;
    \context {&lt;br /&gt;
      \Lyrics&lt;br /&gt;
      \override LyricHyphen.Y-offset = #0.16&lt;br /&gt;
      \override LyricHyphen.thickness = #2.1&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
\paper {&lt;br /&gt;
  #(define fonts&lt;br /&gt;
    (make-pango-font-tree&lt;br /&gt;
     &amp;quot;Serif&amp;quot;&lt;br /&gt;
     &amp;quot;Sans&amp;quot;&lt;br /&gt;
     &amp;quot;Monospace&amp;quot;&lt;br /&gt;
     (/ 20 20)))&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lilypond&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Paper and layout]]&lt;br /&gt;
[[Category:Text]]&lt;br /&gt;
[[Category:Vocal music]]&lt;br /&gt;
[[Category:Snippet]]&lt;/div&gt;</summary>
		<author><name>Lemzwerg</name></author>
	</entry>
	<entry>
		<id>https://wiki.lilypond.community/index.php?title=Creating_guitar_scales_on_fretboards&amp;diff=6416</id>
		<title>Creating guitar scales on fretboards</title>
		<link rel="alternate" type="text/html" href="https://wiki.lilypond.community/index.php?title=Creating_guitar_scales_on_fretboards&amp;diff=6416"/>
		<updated>2026-03-02T08:51:28Z</updated>

		<summary type="html">&lt;p&gt;Lemzwerg: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This snippet creates fretboards with guitar scales.&lt;br /&gt;
&lt;br /&gt;
The syntax is&lt;br /&gt;
&lt;br /&gt;
 \scale-diagram #&#039;( (string1 fret1) (string2 fret2) ... )&lt;br /&gt;
                #notes-in-scale #size&lt;br /&gt;
&lt;br /&gt;
As an example, here is a c pentatonic scale (first six notes).&lt;br /&gt;
&lt;br /&gt;
 \scale-diagram #&#039;((5 3) (5 5) (4 3) (4 5) (3 2) (3 5)) #5 #1.5&lt;br /&gt;
&lt;br /&gt;
You can wrap this up in a markup command for building up a list of scales as follows&lt;br /&gt;
&lt;br /&gt;
 cpenta = \markup&lt;br /&gt;
            \scale-diagram #&#039;((5 3) (5 5) (4 3) (4 5) (3 2) (3 5)) #5 #1.5&lt;br /&gt;
&lt;br /&gt;
and use it like this&lt;br /&gt;
&lt;br /&gt;
 c^\cpenta d f g a c&lt;br /&gt;
&lt;br /&gt;
The snippet doesn&#039;t show it, but the (1) position of the scale is inverted.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;lilypond version=&amp;quot;2.24&amp;quot;&amp;gt;&lt;br /&gt;
% Helper function to invert first elements of scales&lt;br /&gt;
#(define (inverted num mod)&lt;br /&gt;
   (if (zero? (modulo num mod))&lt;br /&gt;
         (list &#039;1 &#039;inverted)&lt;br /&gt;
         (list (1+ (modulo num mod)))))&lt;br /&gt;
&lt;br /&gt;
% Expand the (string fret) pairs to valid lilypond syntax&lt;br /&gt;
#(define (fret-from-list l1 l2 n1)&lt;br /&gt;
   (if  (null? l1) &lt;br /&gt;
        l2 &lt;br /&gt;
        (fret-from-list (cdr l1) (append l2 (list (append &#039;(place-fret) (car l1) (inverted (length l2) n1)))) n1)))&lt;br /&gt;
&lt;br /&gt;
% arg1 is the list of (string fret) pairs making up the scale&lt;br /&gt;
% arg2 is the number of unique tones in the scale (i.e. 7 for major scale, 5 for pentatonic)&lt;br /&gt;
% arg3 is a scale factor used to enlarge the fret diagram&lt;br /&gt;
#(define-markup-command (scale-diagram layout props arg1 arg2 arg3) (list? integer? number?)&lt;br /&gt;
   (interpret-markup layout props&lt;br /&gt;
    (markup&lt;br /&gt;
     (#:override (cons &#039;size arg3 )&lt;br /&gt;
      (#:override &#039;(fret-diagram-details&lt;br /&gt;
                    . (&lt;br /&gt;
                       (finger-code . in-dot)&lt;br /&gt;
                       (number-type . arabic)&lt;br /&gt;
                       (label-dir   . -1)&lt;br /&gt;
                       (orientation . landscape)&lt;br /&gt;
                       (dot-radius  . 0.4)&lt;br /&gt;
                       (fret-count  . 8)&lt;br /&gt;
                       (top-fret-thickness . 7)))&lt;br /&gt;
        #:fret-diagram-verbose&lt;br /&gt;
          (fret-from-list arg1 &#039;() arg2))))))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
cmajor=\markup\scale-diagram #&#039;((5 3) (5 5) (4 2) (4 3) (4 5) (3 2) (3 4) &lt;br /&gt;
                                (3 5) (2 3) (2 5) (2 6) (1 3) (1 5) (1 7) (1 8)) #7 #1.0&lt;br /&gt;
&lt;br /&gt;
dmajor=\markup\scale-diagram #&#039;((5 5) (5 7) (4 4) (4 5) (4 7) (3 4) (3 6) &lt;br /&gt;
                                (3 7) (2 5) (2 7) (2 8) (1 5) (1 7) (1 9) (1 10)) #7 #1.35&lt;br /&gt;
&lt;br /&gt;
cpenta=\markup\scale-diagram #&#039;((5 3) (5 5) (4 3) (4 5) (3 2)  &lt;br /&gt;
                                (3 5) (2 3)  (2 6) (1 3) (1 5)  (1 8)) #5 #1.7&lt;br /&gt;
&lt;br /&gt;
\relative c&#039; {&lt;br /&gt;
  c   d^\cmajor e f g^&amp;quot;c Ionic&amp;quot;      a b c d e f g a b c r | \break&lt;br /&gt;
  d,, e^\dmajor fis g a^&amp;quot;d Ionic&amp;quot;      b cis d e fis g a b cis d r | \break&lt;br /&gt;
  c,, d^\cpenta f g a^&amp;quot;c pentatonic&amp;quot; a c d f g a c         |&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lilypond&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Fretted strings]]&lt;br /&gt;
[[Category:Scheme]]&lt;br /&gt;
[[Category:Pitches]]&lt;br /&gt;
[[Category:Snippet]]&lt;/div&gt;</summary>
		<author><name>Lemzwerg</name></author>
	</entry>
	<entry>
		<id>https://wiki.lilypond.community/index.php?title=Harmonizing_bar_line_thickness_for_staves_with_different_sizes&amp;diff=6414</id>
		<title>Harmonizing bar line thickness for staves with different sizes</title>
		<link rel="alternate" type="text/html" href="https://wiki.lilypond.community/index.php?title=Harmonizing_bar_line_thickness_for_staves_with_different_sizes&amp;diff=6414"/>
		<updated>2026-03-01T11:31:00Z</updated>

		<summary type="html">&lt;p&gt;Lemzwerg: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;When using &amp;lt;code&amp;gt;\magnifyStaff&amp;lt;/code&amp;gt; only for some staves in a &amp;lt;code&amp;gt;StaffGroup&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;BarLine&amp;lt;/code&amp;gt; grobs do not align any more due to its changed properties &amp;lt;code&amp;gt;thick-thickness&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;hair-thickness&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;kern&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
To fix this, multiple workarounds are available, as demonstrated below.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;lilypond version=&amp;quot;2.24&amp;quot;&amp;gt;&lt;br /&gt;
% LSR originally contributed by -vv for \version 2.20.&lt;br /&gt;
&lt;br /&gt;
\markuplist {&lt;br /&gt;
  % First row.&lt;br /&gt;
  \fill-line {&lt;br /&gt;
    \score {&lt;br /&gt;
      \new StaffGroup &amp;lt;&amp;lt;&lt;br /&gt;
        \new Staff \with { \magnifyStaff #1/2 } {&lt;br /&gt;
          \textMark \markup \tiny &amp;quot;default&amp;quot;&lt;br /&gt;
          b1 b \bar &amp;quot;|.&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
        \new Staff { b b }&lt;br /&gt;
      &amp;gt;&amp;gt;&lt;br /&gt;
    }&lt;br /&gt;
    \score {&lt;br /&gt;
      \new StaffGroup &amp;lt;&amp;lt;&lt;br /&gt;
        \new Staff \with { \magnifyStaff #1/2 } {&lt;br /&gt;
          \textMark \markup \tiny \column { &amp;quot;reverting only the&amp;quot;&lt;br /&gt;
                                            &amp;quot;final bar line&amp;quot; }&lt;br /&gt;
          b1 b&lt;br /&gt;
          \revert Staff.BarLine.thick-thickness&lt;br /&gt;
          \revert Staff.BarLine.hair-thickness&lt;br /&gt;
          \revert Staff.BarLine.kern&lt;br /&gt;
          \bar &amp;quot;|.&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
        \new Staff { b b }&lt;br /&gt;
      &amp;gt;&amp;gt;&lt;br /&gt;
    }&lt;br /&gt;
    \score {&lt;br /&gt;
      \new StaffGroup &amp;lt;&amp;lt;&lt;br /&gt;
        \new Staff \with { \magnifyStaff #1/2&lt;br /&gt;
                           #(revert-props &#039;magnifyStaff 0&lt;br /&gt;
                                          &#039;((BarLine thick-thickness)&lt;br /&gt;
                                            (BarLine hair-thickness)&lt;br /&gt;
                                            (BarLine kern))) } {&lt;br /&gt;
          \textMark \markup \tiny \column { &amp;quot;cancelling&amp;quot;&lt;br /&gt;
                                            \typewriter &amp;quot;\\magnifyStaff&amp;quot;&lt;br /&gt;
                                            &amp;quot;only for bar lines&amp;quot; }&lt;br /&gt;
          b1 b \bar &amp;quot;|.&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
        \new Staff { b b }&lt;br /&gt;
      &amp;gt;&amp;gt;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  \vspace #2&lt;br /&gt;
&lt;br /&gt;
  % Second row.&lt;br /&gt;
  \fill-line {&lt;br /&gt;
    \score {&lt;br /&gt;
      \new StaffGroup &amp;lt;&amp;lt;&lt;br /&gt;
        \new Staff \with { \magnifyStaff #1/2 } {&lt;br /&gt;
          \textMark \markup \tiny \column { &amp;quot;mimicking&amp;quot;&lt;br /&gt;
                                            \typewriter &amp;quot;\\magnifyStaff&amp;quot;&lt;br /&gt;
                                            &amp;quot;on the other staves&amp;quot; }&lt;br /&gt;
          b1 b \bar &amp;quot;|.&amp;quot; }&lt;br /&gt;
        \new Staff \with { #(scale-props &#039;magnifyStaff 1/2 #t&lt;br /&gt;
                                         &#039;((BarLine thick-thickness)&lt;br /&gt;
                                           (BarLine hair-thickness)&lt;br /&gt;
                                           (BarLine kern))) } {&lt;br /&gt;
          b b }&lt;br /&gt;
      &amp;gt;&amp;gt;&lt;br /&gt;
    }&lt;br /&gt;
    \score {&lt;br /&gt;
      \new StaffGroup &amp;lt;&amp;lt;&lt;br /&gt;
        \new Staff \with { \magnifyStaff #1/2&lt;br /&gt;
                           #(scale-props &#039;magnifyStaff 3/2 #t&lt;br /&gt;
                                         &#039;((BarLine thick-thickness)&lt;br /&gt;
                                           (BarLine hair-thickness)&lt;br /&gt;
                                           (BarLine kern))) } {&lt;br /&gt;
          \textMark \markup \tiny \column { &amp;quot;applying an&amp;quot;&lt;br /&gt;
                                            &amp;quot;intermediate&amp;quot;&lt;br /&gt;
                                            &amp;quot;value to all staves&amp;quot; }&lt;br /&gt;
          b1 b \bar &amp;quot;|.&amp;quot; }&lt;br /&gt;
        \new Staff \with { #(scale-props &#039;magnifyStaff 3/4 #t&lt;br /&gt;
                                         &#039;((BarLine thick-thickness)&lt;br /&gt;
                                           (BarLine hair-thickness)&lt;br /&gt;
                                           (BarLine kern))) } {&lt;br /&gt;
           b b }&lt;br /&gt;
      &amp;gt;&amp;gt;&lt;br /&gt;
    }&lt;br /&gt;
    &amp;quot;&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lilypond&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Staff notation]]&lt;br /&gt;
[[Category:Spacing]]&lt;br /&gt;
[[Category:Included in the official documentation]]&lt;br /&gt;
[[Category:Snippet]]&lt;/div&gt;</summary>
		<author><name>Lemzwerg</name></author>
	</entry>
	<entry>
		<id>https://wiki.lilypond.community/index.php?title=Flat_ties&amp;diff=6413</id>
		<title>Flat ties</title>
		<link rel="alternate" type="text/html" href="https://wiki.lilypond.community/index.php?title=Flat_ties&amp;diff=6413"/>
		<updated>2026-03-01T11:28:44Z</updated>

		<summary type="html">&lt;p&gt;Lemzwerg: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This snippet provides a function &amp;lt;code&amp;gt;flared-tie&amp;lt;/code&amp;gt; to draw a tie that consist of straight lines. It is intended as a replacement for the default tie-drawing function (i.e., a replacement argument for the &amp;lt;code&amp;gt;stencil&amp;lt;/code&amp;gt; property of the &amp;lt;code&amp;gt;Tie&amp;lt;/code&amp;gt; grob).&lt;br /&gt;
&lt;br /&gt;
The argument of &amp;lt;code&amp;gt;flared-tie&amp;lt;/code&amp;gt; is a list of coordinate pairs that specify additional points between the first and last point to span up the tie’s lines. The first and last point are identical to the original tie’s start and end point, respectively.  The X&amp;amp;nbsp;and Y&amp;amp;nbsp;coordinate values are multiples of the bounding box length and height of the original tie (also taking care of the tie’s direction); consequently, the first point has coordinates (0,0), and the last point (1,0).  &lt;br /&gt;
&lt;br /&gt;
The function &amp;lt;code&amp;gt;flare-tie&amp;lt;/code&amp;gt; defines a shorthand for a flat tie. Further tweaking of the shape is possible by overriding &amp;lt;code&amp;gt;Tie.details.height-limit&amp;lt;/code&amp;gt; or with &amp;lt;code&amp;gt;\shape&amp;lt;/code&amp;gt;. It is also possible to change the custom definition on the fly.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;lilypond version=&amp;quot;2.24&amp;quot;&amp;gt;&lt;br /&gt;
#(define ((flared-tie coords) grob)&lt;br /&gt;
   (define (pair-to-list pair)&lt;br /&gt;
     (list (car pair) (cdr pair)))&lt;br /&gt;
&lt;br /&gt;
   (define (normalize-coords goods x y dir)&lt;br /&gt;
     (map&lt;br /&gt;
      (lambda (coord)&lt;br /&gt;
        (cons (* x (car coord)) (* y dir (cdr coord))))&lt;br /&gt;
      goods))&lt;br /&gt;
&lt;br /&gt;
   (define (my-c-p-s points thick)&lt;br /&gt;
     (make-connected-path-stencil points thick 1.0 1.0 #f #f))&lt;br /&gt;
&lt;br /&gt;
   ;; Calling `ly:tie::print` and assigning its return value to a&lt;br /&gt;
   ;; variable in this outer `let` triggers LilyPond to position the&lt;br /&gt;
   ;; tie, allowing us to extract its extents.  We only proceed,&lt;br /&gt;
   ;; however, if the tie doesn&#039;t get discarded (for whatever reason).&lt;br /&gt;
   (let ((sten (ly:tie::print grob)))&lt;br /&gt;
     (if (grob::is-live? grob)&lt;br /&gt;
         (let* ((layout (ly:grob-layout grob))&lt;br /&gt;
                (line-thickness (ly:output-def-lookup layout&lt;br /&gt;
                                                      &#039;line-thickness))&lt;br /&gt;
                (thickness (ly:grob-property grob &#039;thickness 0.1))&lt;br /&gt;
                (used-thick (* line-thickness thickness))&lt;br /&gt;
                (dir (ly:grob-property grob &#039;direction))&lt;br /&gt;
                (xex (ly:stencil-extent sten X))&lt;br /&gt;
                (yex (ly:stencil-extent sten Y))&lt;br /&gt;
                (lenx (interval-length xex))&lt;br /&gt;
                (leny (interval-length yex))&lt;br /&gt;
                (xtrans (car xex))&lt;br /&gt;
                (ytrans (if (&amp;gt; dir 0)(car yex) (cdr yex)))&lt;br /&gt;
                ;; Add last point.&lt;br /&gt;
                (coord-list (append coords &#039;((1.0 . 0.0))))&lt;br /&gt;
                (uplist&lt;br /&gt;
                 (map pair-to-list&lt;br /&gt;
                      (normalize-coords coord-list lenx (* leny 2) dir))))&lt;br /&gt;
           (ly:stencil-translate&lt;br /&gt;
            (my-c-p-s uplist used-thick)&lt;br /&gt;
            (cons xtrans ytrans)))&lt;br /&gt;
         &#039;())))&lt;br /&gt;
&lt;br /&gt;
% Define a default tie shape consisting of three straight lines.&lt;br /&gt;
#(define flare-tie&lt;br /&gt;
   (flared-tie &#039;((0.1 . 0.3) (0.9 . 0.3))))&lt;br /&gt;
&lt;br /&gt;
\relative c&#039; {&lt;br /&gt;
  a4~ a&lt;br /&gt;
  \once \override Tie.stencil = #flare-tie&lt;br /&gt;
  a4~ a \break&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;a c e a c e a c e&amp;gt;~ q&lt;br /&gt;
  \once \override Tie.stencil = #flare-tie&lt;br /&gt;
  q~ q\break&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;&amp;gt;^\markup \small \typewriter &amp;quot;height-limit = 14&amp;quot;&lt;br /&gt;
  \override Tie.details.height-limit = 14&lt;br /&gt;
  a&#039;4~ a&lt;br /&gt;
  \once \override Tie.stencil = #flare-tie&lt;br /&gt;
  a4~ a \break&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;&amp;gt;^\markup \small \typewriter &amp;quot;height-limit = 0.5&amp;quot;&lt;br /&gt;
  \override Tie.details.height-limit = 0.5&lt;br /&gt;
  a4~ a&lt;br /&gt;
  \once \override Tie.stencil = #flare-tie&lt;br /&gt;
  a4~ a \break&lt;br /&gt;
&lt;br /&gt;
  \revert Tie.details.height-limit&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;&amp;gt;^\markup \small \typewriter&lt;br /&gt;
             &amp;quot;\\shape #&#039;((0 . 0) (0 . -1) (0 . -1) (0 . 0))&amp;quot;&lt;br /&gt;
  \shape #&#039;((0 . 0) (0 . -1) (0 . -1) (0 . 0)) Tie&lt;br /&gt;
  a4~ a&lt;br /&gt;
  \once \override Tie.stencil = #flare-tie&lt;br /&gt;
  \shape #&#039;((0 . 0) (0 . -1) (0 . -1) (0 . 0)) Tie&lt;br /&gt;
  a4~ a \break&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;&amp;gt;^\markup \small \typewriter&lt;br /&gt;
             &amp;quot;#(flared-tie &#039;((0.2 . 2) (0.5 . -3) (0.8 . 1))&amp;quot;&lt;br /&gt;
  \once \override Tie.stencil =&lt;br /&gt;
        #(flared-tie &#039;((0.2 . 2) (0.5 . -3) (0.8 . 1)))&lt;br /&gt;
  a4~ a&lt;br /&gt;
  &amp;lt;&amp;gt;_\markup \small \typewriter&lt;br /&gt;
             &amp;quot;#(flared-tie &#039;((0.5 . 2)))&amp;quot;&lt;br /&gt;
  \once \override Tie.stencil = #(flared-tie &#039;((0.5 . 2)))&lt;br /&gt;
  a&#039;4~ a&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lilypond&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Contemporary notation]]&lt;br /&gt;
[[Category:Scheme]]&lt;br /&gt;
[[Category:Staff notation]]&lt;br /&gt;
[[Category:Tweaks and overrides]]&lt;br /&gt;
[[Category:Included in the official documentation]]&lt;br /&gt;
[[Category:Snippet]]&lt;/div&gt;</summary>
		<author><name>Lemzwerg</name></author>
	</entry>
	<entry>
		<id>https://wiki.lilypond.community/index.php?title=User_talk:SimonAlbrecht&amp;diff=6407</id>
		<title>User talk:SimonAlbrecht</title>
		<link rel="alternate" type="text/html" href="https://wiki.lilypond.community/index.php?title=User_talk:SimonAlbrecht&amp;diff=6407"/>
		<updated>2026-02-28T09:59:55Z</updated>

		<summary type="html">&lt;p&gt;Lemzwerg: /* Bitte LilyPond-Version beachten! */ Reply&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Bitte LilyPond-Version beachten! ==&lt;br /&gt;
&lt;br /&gt;
Danke für das Update von [[Adjusting vertical positioning of lyric hyphens]]!  Allerdings mußte ich deine Änderungen teilweise wieder rückgängig machen, weil Du Syntax verwendet hast, die es in 2.24 noch nicht gibt.  Wenn möglich, verwende bitte nichts neueres als 2.24 in diesem Wiki.  Falls neueres demonstriert werden soll, muß die Versionsnummer in &amp;lt;code&amp;gt;&amp;lt;lilypond&amp;gt;&amp;lt;/code&amp;gt; angepaßt werden. -- [[User:Lemzwerg|Lemzwerg]] ([[User talk:Lemzwerg|talk]]) 06:06, 28 February 2026 (UTC)&lt;br /&gt;
&lt;br /&gt;
:Oh, das war natürlich ein handwerklicher Fehler. Ich bin gerade nicht mehr sicher, ob ich gar nicht an 2.24 gedacht hatte oder ob ich dachte, das wäre da schon drin gewesen. So oder so danke fürs revidieren! [[User:SimonAlbrecht|SimonAlbrecht]] ([[User talk:SimonAlbrecht|talk]]) 09:50, 28 February 2026 (UTC)&lt;br /&gt;
:Wäre es sinnvoll, die &amp;lt;code&amp;gt;property-defaults&amp;lt;/code&amp;gt;-Syntax als Kommentar drin zu lassen für das Update zu 2.26? [[User:SimonAlbrecht|SimonAlbrecht]] ([[User talk:SimonAlbrecht|talk]]) 09:53, 28 February 2026 (UTC)&lt;br /&gt;
::Eher nicht, denk&#039; ich mal, da &amp;lt;code&amp;gt;convert-ly&amp;lt;/code&amp;gt; das automatisch handhabt (also zumindest die Standardfälle). -- [[User:Lemzwerg|Lemzwerg]] ([[User talk:Lemzwerg|talk]]) 09:59, 28 February 2026 (UTC)&lt;/div&gt;</summary>
		<author><name>Lemzwerg</name></author>
	</entry>
	<entry>
		<id>https://wiki.lilypond.community/index.php?title=Watermark&amp;diff=6399</id>
		<title>Watermark</title>
		<link rel="alternate" type="text/html" href="https://wiki.lilypond.community/index.php?title=Watermark&amp;diff=6399"/>
		<updated>2026-02-28T06:19:04Z</updated>

		<summary type="html">&lt;p&gt;Lemzwerg: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Add a watermark directly into a LilyPond file, without using a third-party PDF tool.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;lilypond version=&amp;quot;2.24&amp;quot; full&amp;gt;&lt;br /&gt;
watermark = \markup&lt;br /&gt;
\with-dimensions-from\null {&lt;br /&gt;
  \translate #&#039;(-70 . -120)&lt;br /&gt;
  \rotate #50&lt;br /&gt;
  \fontsize #13&lt;br /&gt;
  \pattern #12 #Y #3 &lt;br /&gt;
  \pattern #3 #X #5&lt;br /&gt;
  \bold\with-color #(rgb-color .9  .9  .9) &amp;quot;copyrighted material&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
\paper { &lt;br /&gt;
  print-first-page-number = ##t&lt;br /&gt;
  %page-count = 2&lt;br /&gt;
  ragged-last-bottom = ##f &lt;br /&gt;
  oddHeaderMarkup = \markup { &lt;br /&gt;
    \combine\watermark&lt;br /&gt;
    \fill-line {&lt;br /&gt;
      \null&lt;br /&gt;
        \if \should-print-page-number &lt;br /&gt;
        \fromproperty #&#039;page:page-number-string&lt;br /&gt;
      }&lt;br /&gt;
  }&lt;br /&gt;
  evenHeaderMarkup = \markup { &lt;br /&gt;
    \combine\watermark&lt;br /&gt;
    \fill-line {&lt;br /&gt;
        \if \should-print-page-number &lt;br /&gt;
        \fromproperty #&#039;page:page-number-string&lt;br /&gt;
        \null&lt;br /&gt;
      }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
\header { &lt;br /&gt;
  dedication = \markup \italic &amp;quot;This music is dedicated to the LSR&amp;quot; &lt;br /&gt;
  title = &amp;quot;This is a Title&amp;quot; &lt;br /&gt;
  subtitle = &amp;quot;This is a Subtitle&amp;quot;&lt;br /&gt;
  subsubtitle = &amp;quot;This is a Subsubtitle&amp;quot;&lt;br /&gt;
  piece = &amp;quot;This is a Piece&amp;quot;&lt;br /&gt;
  opus = &amp;quot;Op. 000&amp;quot;&lt;br /&gt;
  instrument = &amp;quot;This is an Instrument&amp;quot;&lt;br /&gt;
  composer = &amp;quot;This is a Composer&amp;quot;&lt;br /&gt;
  arranger = &amp;quot;This is an Arranger&amp;quot;&lt;br /&gt;
  poet = &amp;quot;This is a Poet&amp;quot;&lt;br /&gt;
  copyright = &amp;quot;Copyrighted material&amp;quot;&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
{ \repeat unfold 60 { c&#039; d&#039; e&#039; f&#039; } \bar &amp;quot;|.&amp;quot; }&lt;br /&gt;
&amp;lt;/lilypond&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Editorial annotations]]&lt;br /&gt;
[[Category:Text]]&lt;br /&gt;
[[Category:Paper and layout]]&lt;br /&gt;
[[Category:Snippet]]&lt;/div&gt;</summary>
		<author><name>Lemzwerg</name></author>
	</entry>
	<entry>
		<id>https://wiki.lilypond.community/index.php?title=Horizontally_centered_systems_on_a_page&amp;diff=6398</id>
		<title>Horizontally centered systems on a page</title>
		<link rel="alternate" type="text/html" href="https://wiki.lilypond.community/index.php?title=Horizontally_centered_systems_on_a_page&amp;diff=6398"/>
		<updated>2026-02-28T06:16:26Z</updated>

		<summary type="html">&lt;p&gt;Lemzwerg: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;If you want your systems horizontally centered, as sometimes needed in contemporary music, you can use &amp;lt;code&amp;gt;\score&amp;lt;/code&amp;gt; inside &amp;lt;code&amp;gt;\markup&amp;lt;/code&amp;gt; for every line.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;lilypond version=&amp;quot;2.24&amp;quot;&amp;gt;&lt;br /&gt;
\markup {&lt;br /&gt;
  \fill-line {&lt;br /&gt;
    \score {&lt;br /&gt;
      \relative c&#039; {&lt;br /&gt;
        c4 d e f \break&lt;br /&gt;
      }&lt;br /&gt;
      \layout {}&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
\markup {&lt;br /&gt;
  \fill-line {&lt;br /&gt;
    \score {&lt;br /&gt;
      \new Staff \with {&lt;br /&gt;
        \remove Time_signature_engraver&lt;br /&gt;
      }&lt;br /&gt;
      \relative c&#039; {&lt;br /&gt;
        g2 f&lt;br /&gt;
      }&lt;br /&gt;
      \layout {}&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
\markup {&lt;br /&gt;
  \fill-line {&lt;br /&gt;
    \score {&lt;br /&gt;
      \new Staff \with {&lt;br /&gt;
        \remove Time_signature_engraver&lt;br /&gt;
      }&lt;br /&gt;
      \relative c&#039; {&lt;br /&gt;
        c4 d e f g a b a&lt;br /&gt;
      }&lt;br /&gt;
      \layout {}&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
\markup {&lt;br /&gt;
  \fill-line {&lt;br /&gt;
    \score {&lt;br /&gt;
      \new Staff \with {&lt;br /&gt;
        \remove Time_signature_engraver&lt;br /&gt;
      }&lt;br /&gt;
      \relative c&#039; {&lt;br /&gt;
        g4 f e g b a g&lt;br /&gt;
      }&lt;br /&gt;
      \layout {}&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lilypond&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Paper and layout]]&lt;br /&gt;
[[Category:Snippet]]&lt;/div&gt;</summary>
		<author><name>Lemzwerg</name></author>
	</entry>
	<entry>
		<id>https://wiki.lilypond.community/index.php?title=LSR_701&amp;diff=6397</id>
		<title>LSR 701</title>
		<link rel="alternate" type="text/html" href="https://wiki.lilypond.community/index.php?title=LSR_701&amp;diff=6397"/>
		<updated>2026-02-28T06:12:58Z</updated>

		<summary type="html">&lt;p&gt;Lemzwerg: Changed redirect target from Horizontal centered systems on a page to Horizontally centered systems on a page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Horizontally centered systems on a page]]&lt;/div&gt;</summary>
		<author><name>Lemzwerg</name></author>
	</entry>
	<entry>
		<id>https://wiki.lilypond.community/index.php?title=Horizontally_centered_systems_on_a_page&amp;diff=6396</id>
		<title>Horizontally centered systems on a page</title>
		<link rel="alternate" type="text/html" href="https://wiki.lilypond.community/index.php?title=Horizontally_centered_systems_on_a_page&amp;diff=6396"/>
		<updated>2026-02-28T06:12:18Z</updated>

		<summary type="html">&lt;p&gt;Lemzwerg: Lemzwerg moved page Horizontal centered systems on a page to Horizontally centered systems on a page without leaving a redirect: Misspelled title&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;If you want your systems horizontally centered, as sometimes needed in contemporary music, you have to use a &amp;lt;code&amp;gt;\score&amp;lt;/code&amp;gt; inside a &amp;lt;code&amp;gt;\markup&amp;lt;/code&amp;gt; construction for every line.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;lilypond version=&amp;quot;2.24&amp;quot; full&amp;gt;&lt;br /&gt;
%% http://lsr.di.unimi.it/LSR/Item?id=701&lt;br /&gt;
&lt;br /&gt;
\paper { tagline = ##f }&lt;br /&gt;
&lt;br /&gt;
%here starts the snippet:&lt;br /&gt;
&lt;br /&gt;
\markup {&lt;br /&gt;
  \fill-line {&lt;br /&gt;
    \score {&lt;br /&gt;
      \relative c&#039; {&lt;br /&gt;
	c4 d e f \break&lt;br /&gt;
      }&lt;br /&gt;
      \layout {}&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
\markup {&lt;br /&gt;
  \fill-line {&lt;br /&gt;
    \score {&lt;br /&gt;
      \new Staff \with {&lt;br /&gt;
	\remove Time_signature_engraver&lt;br /&gt;
      }&lt;br /&gt;
      \relative c&#039; {&lt;br /&gt;
	g2 f&lt;br /&gt;
      }&lt;br /&gt;
      \layout {}&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
\markup {&lt;br /&gt;
  \fill-line {&lt;br /&gt;
    \score {&lt;br /&gt;
      \new Staff \with {&lt;br /&gt;
	\remove Time_signature_engraver&lt;br /&gt;
      }&lt;br /&gt;
      \relative c&#039; {&lt;br /&gt;
	c4 d e f g a b a&lt;br /&gt;
      }&lt;br /&gt;
      \layout {}&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
\markup {&lt;br /&gt;
  \fill-line {&lt;br /&gt;
    \score {&lt;br /&gt;
      \new Staff \with {&lt;br /&gt;
	\remove Time_signature_engraver&lt;br /&gt;
      }&lt;br /&gt;
      \relative c&#039; {&lt;br /&gt;
	g4 f e g b a g&lt;br /&gt;
      }&lt;br /&gt;
      \layout {}&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lilypond&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Paper and layout]]&lt;br /&gt;
[[Category:Snippet]]&lt;/div&gt;</summary>
		<author><name>Lemzwerg</name></author>
	</entry>
	<entry>
		<id>https://wiki.lilypond.community/index.php?title=User_talk:Jean_Abou_Samra&amp;diff=6395</id>
		<title>User talk:Jean Abou Samra</title>
		<link rel="alternate" type="text/html" href="https://wiki.lilypond.community/index.php?title=User_talk:Jean_Abou_Samra&amp;diff=6395"/>
		<updated>2026-02-28T06:07:19Z</updated>

		<summary type="html">&lt;p&gt;Lemzwerg: /* Spam users */ Reply&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Test of email notifications ==&lt;br /&gt;
&lt;br /&gt;
This is a test. [[User:Jean Abou Samra Test Account|Jean Abou Samra Test Account]] ([[User talk:Jean Abou Samra Test Account|talk]]) 02:46, 2 November 2025 (UTC)&lt;br /&gt;
&lt;br /&gt;
:Another test. [[User:Jean Abou Samra Test Account|Jean Abou Samra Test Account]] ([[User talk:Jean Abou Samra Test Account|talk]]) 03:04, 2 November 2025 (UTC)&lt;br /&gt;
::Third test. [[User:Jean Abou Samra Test Account|Jean Abou Samra Test Account]] ([[User talk:Jean Abou Samra Test Account|talk]]) 03:05, 2 November 2025 (UTC)&lt;br /&gt;
:::Reply test. [[User:Jean Abou Samra|Jean Abou Samra]] ([[User talk:Jean Abou Samra|talk]]) 03:05, 2 November 2025 (UTC)&lt;br /&gt;
::::Yet another test. [[User:Jean Abou Samra Test Account|Jean Abou Samra Test Account]] ([[User talk:Jean Abou Samra Test Account|talk]]) 03:14, 2 November 2025 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Default stylesheet for the Wiki ==&lt;br /&gt;
&lt;br /&gt;
Jean,&lt;br /&gt;
&lt;br /&gt;
you&#039;ve recently removed paper indentation settings from [[Rest styles]], arguing that no indentation is the default for this Wiki.  However, this snippet is part of the “official” documentation that doesn&#039;t set the indentation to zero by default...&lt;br /&gt;
&lt;br /&gt;
I thus wonder whether it makes sense to synchronize the Wiki with the LilyPond documentation by not providing a default value for the indentation.  Another reason to stay with LilyPond&#039;s default is that a novice user who tries to compile a snippet might be surprised that it looks differently. -- [[User:Lemzwerg|Lemzwerg]] ([[User talk:Lemzwerg|talk]]) 16:51, 23 November 2025 (UTC)&lt;br /&gt;
&lt;br /&gt;
:I&#039;m surprised. [https://lilypond.org/doc/v2.25/Documentation/contributor/lilypond-formatting This page of the contributor&#039;s guide] implies &amp;lt;code&amp;gt;indent = 0&amp;lt;/code&amp;gt; is the default in doc snippets. Is it out of date? What are the exact settings used to compile snippets in the docs? It&#039;s been too long since I had any idea how the doc build works, I can&#039;t find this in the repo right now… [[User:Jean Abou Samra|Jean Abou Samra]] ([[User talk:Jean Abou Samra|talk]]) 17:13, 23 November 2025 (UTC)&lt;br /&gt;
::I took the style settings used on the wiki [https://lilypond.org/doc/v2.25/Documentation/usage/other-programs right from the usage manual] in the section that says &amp;quot;you have to effectively mimick how lilypond-book runs lilypond&amp;quot;… [[User:Jean Abou Samra|Jean Abou Samra]] ([[User talk:Jean Abou Samra|talk]]) 17:15, 23 November 2025 (UTC)&lt;br /&gt;
:::D&#039;oh.  You are correct.  My mistake, my memory failed me, and of course I didn&#039;t check before writing :-)&lt;br /&gt;
:::Sorry for the noise -- [[User:Lemzwerg|Lemzwerg]] ([[User talk:Lemzwerg|talk]]) 17:22, 23 November 2025 (UTC)&lt;br /&gt;
&lt;br /&gt;
== cropped SVG images ==&lt;br /&gt;
&lt;br /&gt;
Jean, please have a look at the image in [[Custodes]] – the mensural custodes in the fourth staff are cropped.  If you download the SVG image and use a program like `inkview` you can see that the image actually contains the complete glyphs, however, the bounding box is too tight (an old LilyPond issue, as you certainly know).&lt;br /&gt;
&lt;br /&gt;
Is there a possibility to increase the bounding boxes of all images (both horizontally and vertically) using a post-processing step so that cropping can be avoided? -- [[User:Lemzwerg|Lemzwerg]] ([[User talk:Lemzwerg|talk]]) 10:40, 25 November 2025 (UTC)&lt;br /&gt;
&lt;br /&gt;
:Seems a bit overkill to me. I&#039;ve added a simple workaround to that snippet. [[User:Jean Abou Samra|Jean Abou Samra]] ([[User talk:Jean Abou Samra|talk]]) 12:41, 25 November 2025 (UTC)&lt;br /&gt;
::Nice, thanks!  I didn&#039;t think of this simple fix. -- [[User:Lemzwerg|Lemzwerg]] ([[User talk:Lemzwerg|talk]]) 13:27, 25 November 2025 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Some CSS code for &amp;lt;nowiki&amp;gt;&amp;lt;samp&amp;gt;&amp;lt;/nowiki&amp;gt; ==&lt;br /&gt;
&lt;br /&gt;
Jean, what do you think of adding something like the following&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
body { quotes: &#039;‘&#039; &#039;’&#039;; }&lt;br /&gt;
samp:before { content: open-quote; } &lt;br /&gt;
samp:after  { content: close-quote; }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
to the Wiki CSS for the sake of better conversion to Texinfo?  My reasoning is as follows.&lt;br /&gt;
&lt;br /&gt;
There is a strong visual difference between &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&amp;lt;code&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; in the Wiki and &amp;lt;code&amp;gt;@code&amp;lt;/code&amp;gt; in Texinfo output: the former produces typewriter text in a box, the latter uses just typewriter.  This is fine with the fonts used for Texinfo output except for marking single letters: in Texinfo it is better to use &amp;lt;code&amp;gt;@samp&amp;lt;/code&amp;gt; for this situation, producing typewriter text in quotes.&lt;br /&gt;
&lt;br /&gt;
On the Wiki side I would thus like to use &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&amp;lt;samp&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;, which &amp;lt;code&amp;gt;makelsr.pl&amp;lt;/code&amp;gt; converts to &amp;lt;code&amp;gt;@samp&amp;lt;/code&amp;gt;. However, it currently produces plain typewriter in the Wiki, which isn&#039;t ideal since the contrast to plain text isn&#039;t large enough IMHO.&lt;br /&gt;
&lt;br /&gt;
Example: The letter &amp;lt;samp&amp;gt;s&amp;lt;/samp&amp;gt; is marked with &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&amp;lt;samp&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;.  My suggestion: The letter ‘&amp;lt;samp&amp;gt;s&amp;lt;/samp&amp;gt;’ is marked with &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&amp;lt;samp&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
An alternative would be to give &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&amp;lt;samp&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; the same appearance as &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&amp;lt;code&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;. -- [[User:Lemzwerg|Lemzwerg]] ([[User talk:Lemzwerg|talk]]) 17:15, 30 November 2025 (UTC)&lt;br /&gt;
&lt;br /&gt;
:Done. Thanks for providing the CSS code. [[User:Jean Abou Samra|Jean Abou Samra]] ([[User talk:Jean Abou Samra|talk]]) 15:28, 6 December 2025 (UTC)&lt;br /&gt;
&lt;br /&gt;
:: Ah, I missed that with this CSS code the quote characters are also in typewriter, which is not correct.  So please add &amp;lt;code&amp;gt;font-family: sans-serif;&amp;lt;/code&amp;gt; to both the &amp;lt;code&amp;gt;samp:before&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;samp:after&amp;lt;/code&amp;gt; block.&lt;br /&gt;
:: [I haven&#039;t found out how to display the quotes with the same font selected by the user to display the main font in Wiki – or is this fixed to always be sans-serif?]&lt;br /&gt;
&lt;br /&gt;
::: Done. I don&#039;t know a better solution either. [[User:Jean Abou Samra|Jean Abou Samra]] ([[User talk:Jean Abou Samra|talk]]) 14:30, 8 December 2025 (UTC)&lt;br /&gt;
:::Thanks! -- [[User:Lemzwerg|Lemzwerg]] ([[User talk:Lemzwerg|talk]]) 13:48, 9 December 2025 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Search issues ==&lt;br /&gt;
&lt;br /&gt;
Jean,&lt;br /&gt;
&lt;br /&gt;
To get nice snippet headings in the documentation, we often use non-letter stuff like opening and closing quotes in Wiki page titles.  However, as I&#039;ve found out recently, this severely hampers searching.  For example, the snippet [[Using \arpeggioBracket to make divisi more visible]] cannot be immediately found by entering “Using arpeggioBracket” (i.e., without the backslash) into the search field.&lt;br /&gt;
&lt;br /&gt;
I now wonder whether the Wiki can be configured to ignore quote characters and the like in the search.  If this is not possible, I have to add redirections for all articles with such characters in its name.  It&#039;s not a big deal since it can be done programmatically, however, not needing this would be a better solution. -- [[User:Lemzwerg|Lemzwerg]] ([[User talk:Lemzwerg|talk]]) 13:55, 9 December 2025 (UTC)&lt;br /&gt;
&lt;br /&gt;
:AFAIU the autocompletion just matches by title prefix (to be clear, this is not about the search results page you get if you press Enter, which is much more complete). I think it&#039;s not too bad, not sure if there&#039;s any way to change it. [[User:Jean Abou Samra|Jean Abou Samra]] ([[User talk:Jean Abou Samra|talk]]) 14:13, 9 December 2025 (UTC)&lt;br /&gt;
::OK, thanks.  What do you think of installing the [https://www.mediawiki.org/wiki/Extension:CirrusSearch Cirrus search extension]?  It seems that Wikimedia is using this by default, and it comes with fuzzy search support, AFAICS. -- [[User:Lemzwerg|Lemzwerg]] ([[User talk:Lemzwerg|talk]]) 14:47, 9 December 2025 (UTC)&lt;br /&gt;
:::It looks like there is no opensearch package in Fedora, and honestly I&#039;m not too keen on setting up a tool as large and complex as MediaWiki itself requiring its own systemd services and networks ports and so on if it&#039;s only for the sake of this autocompletion… [[User:Jean Abou Samra|Jean Abou Samra]] ([[User talk:Jean Abou Samra|talk]]) 18:20, 12 December 2025 (UTC)&lt;br /&gt;
&lt;br /&gt;
== More fonts for the Wiki ==&lt;br /&gt;
&lt;br /&gt;
Jean,&lt;br /&gt;
&lt;br /&gt;
please have a look at the snippet [[Changing the default text font family]]: as can be seen, some font shapes for DejaVu Mono are missing.  Is it possible to get them added to the server that runs the Wiki?&lt;br /&gt;
&lt;br /&gt;
BTW, the same holds for the [[UTF-8]] snippet, where Japanese is missing.&lt;br /&gt;
-- [[User:Lemzwerg|Lemzwerg]] ([[User talk:Lemzwerg|talk]]) 15:39, 12 December 2025 (UTC)&lt;br /&gt;
&lt;br /&gt;
:Fixed. [[User:Jean Abou Samra|Jean Abou Samra]] ([[User talk:Jean Abou Samra|talk]]) 18:34, 12 December 2025 (UTC)&lt;br /&gt;
::Thanks, but are you sure that the CJK font is working correctly?  I tried to modify the [[UTF-8]] snippet to trigger a re-rendering, but I still can&#039;t see any Japanese... -- [[User:Lemzwerg|Lemzwerg]] ([[User talk:Lemzwerg|talk]]) 20:44, 12 December 2025 (UTC)&lt;br /&gt;
:::Oops, indeed. But I don&#039;t understand why. On the server, &amp;lt;code&amp;gt;-dshow-available-fonts&amp;lt;/code&amp;gt; does list &amp;quot;Noto Serif CJK JP&amp;quot;. And curiously, if I remove all font settings and compile the code with different versions, it starts working between 2.25.12 and 2.25.13. [[User:Jean Abou Samra|Jean Abou Samra]] ([[User talk:Jean Abou Samra|talk]]) 23:49, 12 December 2025 (UTC)&lt;br /&gt;
::::Ah, I forgot that Google added Font Variation (VF) versions of the CJK fonts, and the various GNU/Linux distros eagerly took them to make the font bundles much smaller.  Older LilyPond versions cannot reject these fonts correctly.&lt;br /&gt;
::::For me it works with 2.24.4 if you use the font &amp;lt;code&amp;gt;[https://github.com/notofonts/noto-cjk/blob/main/Serif/OTF/Japanese/NotoSerifCJKjp-Regular.otf NotoSerifCJKjp-Regular.otf]&amp;lt;/code&amp;gt; (probably also installing the [https://github.com/notofonts/noto-cjk/blob/main/Serif/OTF/Japanese/NotoSerifCJKjp-Bold.otf bold version] for completeness), and this font is found first. -- [[User:Lemzwerg|Lemzwerg]] ([[User talk:Lemzwerg|talk]]) 04:24, 13 December 2025 (UTC)&lt;br /&gt;
:::::Thanks, I&#039;ve added these fonts on the server as a workaround. The snippet now displays correctly. [[User:Jean Abou Samra|Jean Abou Samra]] ([[User talk:Jean Abou Samra|talk]]) 09:13, 13 December 2025 (UTC)&lt;br /&gt;
::::::Great, thanks! -- [[User:Lemzwerg|Lemzwerg]] ([[User talk:Lemzwerg|talk]]) 10:50, 13 December 2025 (UTC)&lt;br /&gt;
&lt;br /&gt;
== This wiki has no templates ==&lt;br /&gt;
&lt;br /&gt;
Would it be ok if I created some templates? And I am missing several AddOns, CharInsert would be nice for editing, SyntaxHighlight, Scribunto. I am running a rather private Lilypond Wiki in German for several years and have some experience with Wikis, [[User:Manuela|Manuela]] ([[User talk:Manuela|talk]]) 15:13, 18 December 2025 (UTC)&lt;br /&gt;
&lt;br /&gt;
:Feel free to create all kinds of pages, including templates. However, I&#039;d prefer if they were created as needed for specific pages (i.e., don&#039;t create templates &amp;quot;for the future&amp;quot; that aren&#039;t used on any pages). Also, I don&#039;t see much that could be factored between pages so what&#039;s your use case? In particular, please don&#039;t create templates similar [[wikipedia:Template:Em|&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{em|...}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; on Wikipedia]] that add friction to the editing process for a negligible payoff.&lt;br /&gt;
:I haven&#039;t installed the extensions you requested because:&lt;br /&gt;
:# I don&#039;t see any special characters that would be needed particularly often on this wiki specifically, and I&#039;d rather not maintain a general list of special characters, this is the job of system-level input methods like Compose keys and character map apps IMHO.&lt;br /&gt;
:# It wouldn&#039;t make much sense to have syntax highlighting only for the few code snippets that use &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&amp;lt;pre&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;, as opposed to &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&amp;lt;lilypond&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;. However, if someone submits a change for adding syntax highlighting to the output of &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&amp;lt;lilypond&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; in the [https://gitlab.com/jeanas/LilyWiki extension] that defines this tag for the wiki, I&#039;ll be happy to review it.&lt;br /&gt;
:# Scribunto has security implications (e.g., the need to keep Lua updated), so I&#039;d rather only install it if there is a compelling use case for that.&lt;br /&gt;
:[[User:Jean Abou Samra|Jean Abou Samra]] ([[User talk:Jean Abou Samra|talk]]) 21:10, 18 December 2025 (UTC)&lt;br /&gt;
::Thank you for your answer. You have a point with security issues, SyntaxHighlight needs Scribunto. There is no special language support for Lilypond anyway, I use Latex, better than nothing. Your installation has to offer proc open, otherwise Scribunto is not working. I have not found a single provider which allows this.&lt;br /&gt;
::Maybe I am missing something in my preferences, when editing I do not see anything that supports editing, not even the option to insert links, maybe it&#039;s because I don&#039;t use the visual editor, I like &amp;quot;pure&amp;quot; editing as it is in Lilypond. CharInsert offers support for Wiki syntax, including tags like &amp;amp;lt;pre&amp;gt;, all combinations of {} and so on.&lt;br /&gt;
::Greetings from Austria, [[User:Manuela|Manuela]] ([[User talk:Manuela|talk]]) 03:17, 19 December 2025 (UTC)&lt;br /&gt;
:::[off-topic] Where in Austria?  Greetings from Kufstein :-) -- [[User:Lemzwerg|Lemzwerg]] ([[User talk:Lemzwerg|talk]]) 05:15, 19 December 2025 (UTC)&lt;br /&gt;
::::Niederösterreich, nordöstlich von Wien (Bezirk Gänserndorf) [[User:Manuela|Manuela]] ([[User talk:Manuela|talk]]) 15:21, 19 December 2025 (UTC)&lt;br /&gt;
:::I don&#039;t think SyntaxHighlight needs Scribunto. It uses Pygments, which is a Python (not Lua) library (of which I actually am technically a maintainer, although I&#039;ve been inactive lately by lack of time). It certainly needs something like &amp;lt;code&amp;gt;exec&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;proc_open&amp;lt;/code&amp;gt;, but this wiki doesn&#039;t use a &amp;quot;managed&amp;quot; MediaWiki install (where the provider installs things for you, à la &amp;quot;Wordpress in one click&amp;quot;), it&#039;s on a VPS on which I have root access and administrate things myself, so I can install and configure anything (and &amp;lt;code&amp;gt;exec&amp;lt;/code&amp;gt; is already being used to run LilyPond). The real problem is that the LilyPond code snippets are mostly added through a the special, non-standard parser tag &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&amp;lt;lilypond&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; and so the extension I wrote that defines this tag would need to support syntax highlighting.&lt;br /&gt;
:::Regarding the editor toolbar, it sounds like what you want is not CharInsert but [https://www.mediawiki.org/wiki/Extension:WikiEditor WikiEditor], which I&#039;ve just added. [[User:Jean Abou Samra|Jean Abou Samra]] ([[User talk:Jean Abou Samra|talk]]) 16:15, 19 December 2025 (UTC)&lt;br /&gt;
::::PS: I also meant to write that Pygments supports LilyPond. (I implemented this a few years ago.) [[User:Jean Abou Samra|Jean Abou Samra]] ([[User talk:Jean Abou Samra|talk]]) 16:26, 19 December 2025 (UTC)&lt;br /&gt;
:::::Apropos Pygments: I&#039;ve submitted a [https://github.com/pygments/pygments/pull/2974 PR] to update LilyPond support some time ago. [[User:Lemzwerg|Lemzwerg]] ([[User talk:Lemzwerg|talk]]) 17:38, 19 December 2025 (UTC)&lt;br /&gt;
::::Thank you for installing this extension, this is definitely an improvement. CharInsert is a different animal. Root access is of course best, but you have to do much administration. Usually root access is very expensive when you need a provider. A long time ago I have written a Lilypond extension myself on a home server in my local network.&lt;br /&gt;
::::Just in case you are asking who I am, I wrote LSR 1040, 1042, 1043, 1044 (when I remember right) and was involved in 1066 and 1067. [[User:Manuela|Manuela]] ([[User talk:Manuela|talk]]) 19:34, 19 December 2025 (UTC)&lt;br /&gt;
:::::I&#039;ve discovered a potential reason for activating Scribunto: Right now, I&#039;m using the &amp;lt;code&amp;gt;query&amp;lt;/code&amp;gt; MediaWiki API to download snippets for &amp;lt;code&amp;gt;makelsr.pl&amp;lt;/code&amp;gt;.  However, &amp;lt;code&amp;gt;query&amp;lt;/code&amp;gt; doesn&#039;t expand templates.  This means that I have to call the &amp;lt;code&amp;gt;expandtemplates&amp;lt;/code&amp;gt; API, sending the unexpanded page to the Wiki server to get an expanded version back.&lt;br /&gt;
:::::The Skribunto interface provides [https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual#frame:preprocess &amp;lt;code&amp;gt;frame:preprocess&amp;lt;/code&amp;gt;], which seems to unify the abovementioned two calls into a single one (I haven&#039;t tested it). Maybe this can be configured to not use Lua, in case this simplifies things. What do you think? -- [[User:Lemzwerg|Lemzwerg]] ([[User talk:Lemzwerg|talk]]) 14:56, 1 January 2026 (UTC)&lt;br /&gt;
::::::I don&#039;t see a problem with one extra API call per page to expand templates. Also, the function you link is a Lua API, for use in Lua modules running on the wiki, so I don&#039;t get how you want to use it outside. [[User:Jean Abou Samra|Jean Abou Samra]] ([[User talk:Jean Abou Samra|talk]]) 22:02, 1 January 2026 (UTC)&lt;br /&gt;
:::::::OK, &amp;lt;code&amp;gt;expandtemplates&amp;lt;/code&amp;gt; it is then :-) -- [[User:Lemzwerg|Lemzwerg]] ([[User talk:Lemzwerg|talk]]) 23:30, 1 January 2026 (UTC)&lt;br /&gt;
&lt;br /&gt;
== MediaWiki variables for current stable and unstable LilyPond versions ==&lt;br /&gt;
&lt;br /&gt;
Jean,&lt;br /&gt;
&lt;br /&gt;
what do you think about adding [https://www.mediawiki.org/wiki/Manual:Variable MediaWiki variables] that indicate the current stable and unstable LilyPond versions (without the ‘micro’ value)?  I suggest&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;{{LILYSTABLE}}&amp;lt;/nowiki&amp;gt; → 2.24&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;{{LILYDEVEL}}&amp;lt;/nowiki&amp;gt; → 2.25&lt;br /&gt;
&lt;br /&gt;
and maybe&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;{{LILYSTABLEDOC}} → https://lilypond.org/docs/{{LILYSTABLE}}/Documentation&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;{{LILYDEVELDOC}} → https://lilypond.org/docs/{{LILYDEVEL}}/Documentation&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Such variables would reduce maintainance of yet-to-be-written templates.  In particular, I would like to add &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;Template:convert-ly&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;: it would tell users that the snippet in question needs conversion with &amp;lt;code&amp;gt;convert-ly&amp;lt;/code&amp;gt; (showing a link to the documentation) for newer versions. -- [[User:Lemzwerg|Lemzwerg]] ([[User talk:Lemzwerg|talk]]) 05:46, 28 December 2025 (UTC)&lt;br /&gt;
&lt;br /&gt;
:Sounds OK to me. [[User:Jean Abou Samra|Jean Abou Samra]] ([[User talk:Jean Abou Samra|talk]]) 08:34, 28 December 2025 (UTC)&lt;br /&gt;
::Great!  However, it seems to me that you have to add some piece of PHP code to do that...  This means I cannot do it by myself. -- [[User:Lemzwerg|Lemzwerg]] ([[User talk:Lemzwerg|talk]]) 07:00, 30 December 2025 (UTC)&lt;br /&gt;
:::Ah, do you need them to be variables as opposed to templates? [[User:Jean Abou Samra|Jean Abou Samra]] ([[User talk:Jean Abou Samra|talk]]) 08:30, 30 December 2025 (UTC)&lt;br /&gt;
::::Do I?  I honestly don&#039;t know.  Please advise. -- [[User:Lemzwerg|Lemzwerg]] ([[User talk:Lemzwerg|talk]]) 12:36, 30 December 2025 (UTC)&lt;br /&gt;
:::::Please try templates first. Seems to me that the use case for variables is when you want programmatically generated stuff like the current date. [[User:Jean Abou Samra|Jean Abou Samra]] ([[User talk:Jean Abou Samra|talk]]) 19:40, 30 December 2025 (UTC)&lt;br /&gt;
::::::It seems to work fine, thanks!  However, for more serious template handling I think that the [https://www.mediawiki.org/wiki/Help:Extension:ParserFunctions ParserFunctions] extension would be necessary. -- [[User:Lemzwerg|Lemzwerg]] ([[User talk:Lemzwerg|talk]]) 06:43, 31 December 2025 (UTC)&lt;br /&gt;
:::::::Added. [[User:Jean Abou Samra|Jean Abou Samra]] ([[User talk:Jean Abou Samra|talk]]) 08:01, 31 December 2025 (UTC)&lt;br /&gt;
::::::::Thanks! -- [[User:Lemzwerg|Lemzwerg]] ([[User talk:Lemzwerg|talk]]) 14:41, 1 January 2026 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Spam users ==&lt;br /&gt;
&lt;br /&gt;
Jean, what shall we do with spam users like User:JoleenStallings?  Shall we remove them immediately?  While they don&#039;t do harm to the Wiki, they are still polluting the namespace... -- [[User:Lemzwerg|Lemzwerg]] ([[User talk:Lemzwerg|talk]]) 05:21, 11 January 2026 (UTC)&lt;br /&gt;
&lt;br /&gt;
:Yes. I&#039;ve just removed all their user pages and blocked them and their IP addresses. [[User:Jean Abou Samra|Jean Abou Samra]] ([[User talk:Jean Abou Samra|talk]]) 13:57, 11 January 2026 (UTC)&lt;br /&gt;
::OK, thanks. -- [[User:Lemzwerg|Lemzwerg]] ([[User talk:Lemzwerg|talk]]) 16:03, 11 January 2026 (UTC)&lt;br /&gt;
:::Obviously the spammers have discovered this wiki. IMHO there is only one solution. Creation of new users only with verification of an admin and editing only for registered users [[User:Manuela|Manuela]] ([[User talk:Manuela|talk]]) 19:53, 11 January 2026 (UTC)&lt;br /&gt;
::::Well, it&#039;s not that bad: currently, the situation can be handled manually quite easily (by watching the atom feed of this Wiki and quickly removing spam users).  However, if this becomes too much of a burden, some additional measures must be taken. -- [[User:Lemzwerg|Lemzwerg]] ([[User talk:Lemzwerg|talk]]) 05:17, 12 January 2026 (UTC)&lt;br /&gt;
:::::OK, this has become too much of a burden at this point, there are several users to block per day. I&#039;ve added a simple anti-spam question which editors creating an account must solve (&amp;quot;What is the LilyPond command to set a time signature of 3/4?&amp;quot;), let&#039;s see how effective this is. [[User:Jean Abou Samra|Jean Abou Samra]] ([[User talk:Jean Abou Samra|talk]]) 13:14, 23 February 2026 (UTC)&lt;br /&gt;
::::::It seems to work, thanks! -- [[User:Lemzwerg|Lemzwerg]] ([[User talk:Lemzwerg|talk]]) 06:07, 28 February 2026 (UTC)&lt;/div&gt;</summary>
		<author><name>Lemzwerg</name></author>
	</entry>
	<entry>
		<id>https://wiki.lilypond.community/index.php?title=User_talk:SimonAlbrecht&amp;diff=6394</id>
		<title>User talk:SimonAlbrecht</title>
		<link rel="alternate" type="text/html" href="https://wiki.lilypond.community/index.php?title=User_talk:SimonAlbrecht&amp;diff=6394"/>
		<updated>2026-02-28T06:06:37Z</updated>

		<summary type="html">&lt;p&gt;Lemzwerg: /* Bitte LilyPond-Version beachten! */ new section&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Bitte LilyPond-Version beachten! ==&lt;br /&gt;
&lt;br /&gt;
Danke für das Update von [[Adjusting vertical positioning of lyric hyphens]]!  Allerdings mußte ich deine Änderungen teilweise wieder rückgängig machen, weil Du Syntax verwendet hast, die es in 2.24 noch nicht gibt.  Wenn möglich, verwende bitte nichts neueres als 2.24 in diesem Wiki.  Falls neueres demonstriert werden soll, muß die Versionsnummer in &amp;lt;code&amp;gt;&amp;lt;lilypond&amp;gt;&amp;lt;/code&amp;gt; angepaßt werden. -- [[User:Lemzwerg|Lemzwerg]] ([[User talk:Lemzwerg|talk]]) 06:06, 28 February 2026 (UTC)&lt;/div&gt;</summary>
		<author><name>Lemzwerg</name></author>
	</entry>
	<entry>
		<id>https://wiki.lilypond.community/index.php?title=Adjusting_vertical_positioning_of_lyric_hyphens&amp;diff=6393</id>
		<title>Adjusting vertical positioning of lyric hyphens</title>
		<link rel="alternate" type="text/html" href="https://wiki.lilypond.community/index.php?title=Adjusting_vertical_positioning_of_lyric_hyphens&amp;diff=6393"/>
		<updated>2026-02-28T06:00:16Z</updated>

		<summary type="html">&lt;p&gt;Lemzwerg: Revert usage of `property-defaults`; this is only available starting with version 2.25.5.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;For joining syllables, LilyPond doesn’t use the hyphen of the text font but instead draws a simple line with variable length (this limitation is tracked as {{Issue|1255}}). Its standard vertical position doesn’t always fit the proportions of the text font. When using a font with a large x-height, it may be too low.&lt;br /&gt;
&lt;br /&gt;
You can adjust the vertical positioning of the hyphens manually. To get a good result you may want to insert a “real” hyphen for comparison (like between l-e in the snippet).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;lilypond version=&amp;quot;2.24&amp;quot;&amp;gt;&lt;br /&gt;
% LSR contributed by Hannes Kuhnert &amp;lt;hannes.kuhnert@gmx.de&amp;gt; 1.2.2012.&lt;br /&gt;
&lt;br /&gt;
\score {&lt;br /&gt;
  &amp;lt;&amp;lt;&lt;br /&gt;
    \new Voice = &amp;quot;Lied&amp;quot; {&lt;br /&gt;
      \relative {&lt;br /&gt;
        \clef G&lt;br /&gt;
        \key c \major&lt;br /&gt;
        e&#039;2 d c1&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    \new Lyrics = &amp;quot;Lied&amp;quot;&lt;br /&gt;
    \lyricsto Lied {&lt;br /&gt;
      La -- l-e -- lu.&lt;br /&gt;
    }&lt;br /&gt;
  &amp;gt;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  \layout {&lt;br /&gt;
    \context {&lt;br /&gt;
      \Lyrics&lt;br /&gt;
      \override LyricHyphen.Y-offset = #0.16&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
\paper {&lt;br /&gt;
  #(define fonts&lt;br /&gt;
    (make-pango-font-tree&lt;br /&gt;
     &amp;quot;Serif&amp;quot;&lt;br /&gt;
     &amp;quot;Sans&amp;quot;&lt;br /&gt;
     &amp;quot;Monospace&amp;quot;&lt;br /&gt;
     (/ 20 20)))&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lilypond&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Paper and layout]]&lt;br /&gt;
[[Category:Text]]&lt;br /&gt;
[[Category:Vocal music]]&lt;br /&gt;
[[Category:Snippet]]&lt;/div&gt;</summary>
		<author><name>Lemzwerg</name></author>
	</entry>
	<entry>
		<id>https://wiki.lilypond.community/index.php?title=User_talk:Rudi_Guggt&amp;diff=6369</id>
		<title>User talk:Rudi Guggt</title>
		<link rel="alternate" type="text/html" href="https://wiki.lilypond.community/index.php?title=User_talk:Rudi_Guggt&amp;diff=6369"/>
		<updated>2026-02-21T04:09:57Z</updated>

		<summary type="html">&lt;p&gt;Lemzwerg: /* Deutschsprachiges Lilypondforum */ Reply&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Bitte Vorsicht mit Änderungen an »offiziellen« Snippets! ==&lt;br /&gt;
&lt;br /&gt;
Hallo Rudi!&lt;br /&gt;
&lt;br /&gt;
Bitte sei vorsichtig mit Änderungen an »offiziellen« Snippets – die kommen alle in das [https://lilypond.org/doc/v2.25/Documentation/snippets.pdf »Snippets« PDF] (und eine nicht geringe Zahl sogar in die [https://lilypond.org/doc/v2.25/Documentation/notation.pdf Notationsreferenz]).  Derzeit ignoriert das &amp;lt;code&amp;gt;makelsr.pl&amp;lt;/code&amp;gt;-Import-Skript alle Wiki-Links, aber ich finde, solch allgemeine Verweise wie &amp;lt;nowiki&amp;gt;[[Rests]]&amp;lt;/nowiki&amp;gt; oder &amp;lt;nowiki&amp;gt;[[Skips]]&amp;lt;/nowiki&amp;gt; passen generell nicht in die LilyPond-Dokumentation.&lt;br /&gt;
&lt;br /&gt;
Daher ersuche ich Dich, diese Änderungen bei allem aus der Kategorie »Included in the official documentation« zu revertieren -- [[User:Lemzwerg|Lemzwerg]] ([[User talk:Lemzwerg|talk]]) 12:34, 8 December 2025 (UTC).&lt;br /&gt;
&lt;br /&gt;
:ok, sollte ich dann wohl tun... [[User:Rudi Guggt|Rudi Guggt]] ([[User talk:Rudi Guggt|talk]]) 12:39, 8 December 2025 (UTC)&lt;br /&gt;
&lt;br /&gt;
:: Danke im Voraus!  Ich jetzt auch den Text in [[:Category:Included in the official documentation]] entsprechend aktualisiert. -- [[User:Lemzwerg|Lemzwerg]] ([[User talk:Lemzwerg|talk]]) 12:46, 8 December 2025 (UTC)&lt;br /&gt;
:::Vielleicht sollte dann auch eine Bearbeitungssperre für Newbies und Ähnliche auf solche Seiten... [[User:Rudi Guggt|Rudi Guggt]] ([[User talk:Rudi Guggt|talk]]) 12:48, 8 December 2025 (UTC)&lt;br /&gt;
&lt;br /&gt;
:::: Das wurde von mir angedacht in Diskussionen mit Jean, aber als derzeit nicht notwendig erachtet -- [[User:Lemzwerg|Lemzwerg]] ([[User talk:Lemzwerg|talk]]) 13:03, 8 December 2025 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Deutschsprachiges Lilypondforum ==&lt;br /&gt;
&lt;br /&gt;
Hi Rudi, du bist doch auch dort unterwegs. Ich komme nicht mehr rein mit der Meldung, dass meine IP dauerhaft blockiert ist.&lt;br /&gt;
&lt;br /&gt;
Gast, du bist aus diesem Forum verbannt!&amp;lt;br&amp;gt;&lt;br /&gt;
blockierter IP-Bereich ist 138.99.37.216/27 (216-254)&amp;lt;br&amp;gt;&lt;br /&gt;
Dein Bann wird nie ablaufen.&lt;br /&gt;
&lt;br /&gt;
Dabei befindet sich meine IP Adresse gar nicht in diesem Bereich. Kommst du ins Forum rein? Wenn ja, könntest du bitte den Admin kontaktieren und ihm das Problem schildern.&lt;br /&gt;
&lt;br /&gt;
Vielen herzlichen Dank [[User:Manuela|Manuela]] ([[User talk:Manuela|talk]]) 22:09, 18 February 2026 (UTC)&lt;br /&gt;
&lt;br /&gt;
:Ja, ich kann mich dort weiterhin anmelden. Ich habe den Admin angeschrieben... [[User:Rudi Guggt|Rudi Guggt]] ([[User talk:Rudi Guggt|talk]]) 12:44, 19 February 2026 (UTC)&lt;br /&gt;
::Danke sehr. [[User:Manuela|Manuela]] ([[User talk:Manuela|talk]]) 15:54, 19 February 2026 (UTC)&lt;br /&gt;
:::Genau das gleiche bei mir; ich habe [https://lists.gnu.org/archive/html/lilypond-user/2026-02/msg00094.html auch an die lilypond-user-Liste geschrieben]. -- [[User:Lemzwerg|Lemzwerg]] ([[User talk:Lemzwerg|talk]]) 08:29, 20 February 2026 (UTC)&lt;br /&gt;
::::Inzwischen komme ich wieder rein [[User:Manuela|Manuela]] ([[User talk:Manuela|talk]]) 22:23, 20 February 2026 (UTC)&lt;br /&gt;
:::::Ebenso, danke. -- [[User:Lemzwerg|Lemzwerg]] ([[User talk:Lemzwerg|talk]]) 04:09, 21 February 2026 (UTC)&lt;/div&gt;</summary>
		<author><name>Lemzwerg</name></author>
	</entry>
</feed>