<?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=SimonAlbrecht</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=SimonAlbrecht"/>
	<link rel="alternate" type="text/html" href="https://wiki.lilypond.community/wiki/Special:Contributions/SimonAlbrecht"/>
	<updated>2026-05-01T06:13:32Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.44.2</generator>
	<entry>
		<id>https://wiki.lilypond.community/index.php?title=Slur_with_two_turning_points&amp;diff=6452</id>
		<title>Slur with two turning points</title>
		<link rel="alternate" type="text/html" href="https://wiki.lilypond.community/index.php?title=Slur_with_two_turning_points&amp;diff=6452"/>
		<updated>2026-03-13T18:14:19Z</updated>

		<summary type="html">&lt;p&gt;SimonAlbrecht: Update OLL link&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A slur normally can only have one turning point. In special situations, one may need two or more turning points, however. This can be achieved by linking two (or more) slur stencils together. The control points need to be specified manually: for two segments this is a set of seven points, of which the fourth is shared by both segments. To ease working with the function, the control points are shown as light blue crosses if the second argument is ##t.&amp;lt;br /&amp;gt;&lt;br /&gt;
For a more refined solution to the problem, see [https://github.com/openlilylib/snippets/tree/master/notation-snippets/compound-slurs Shaping Bezier Curves], needing version 2.19.48 or higher.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;lilypond version=&amp;quot;2.24&amp;quot;&amp;gt;&lt;br /&gt;
% put together by Harm and Simon Albrecht&lt;br /&gt;
% in &amp;lt;http://lists.gnu.org/archive/html/lilypond-user/2016-09/msg00441.html&amp;gt; ff.&lt;br /&gt;
&lt;br /&gt;
#(define (make-cross-stencil coord)&lt;br /&gt;
   &amp;quot;Draw a cross-stencil at coord.&amp;quot;&lt;br /&gt;
   (let ((thick 0.1)&lt;br /&gt;
         (sz 0.2))&lt;br /&gt;
     (stencil-with-color&lt;br /&gt;
      (ly:stencil-add&lt;br /&gt;
       (make-line-stencil&lt;br /&gt;
        thick&lt;br /&gt;
        (- (car coord) sz)&lt;br /&gt;
        (- (cdr coord) sz)&lt;br /&gt;
        (+ (car coord) sz)&lt;br /&gt;
        (+ (cdr coord) sz))&lt;br /&gt;
       (make-line-stencil&lt;br /&gt;
        thick&lt;br /&gt;
        (- (car coord) sz)&lt;br /&gt;
        (+ (cdr coord) sz)&lt;br /&gt;
        (+ (car coord) sz)&lt;br /&gt;
        (- (cdr coord) sz)))&lt;br /&gt;
&lt;br /&gt;
      cyan)&lt;br /&gt;
     ))&lt;br /&gt;
&lt;br /&gt;
compoundSlur =&lt;br /&gt;
#(define-event-function (contr-pts ann?) (list? boolean?)&lt;br /&gt;
   (let ((proc (lambda (grob)&lt;br /&gt;
                 (let*  (;; only here for reference:&lt;br /&gt;
                          (cps (ly:slur::calc-control-points grob))&lt;br /&gt;
                          (cps1 (list&lt;br /&gt;
                                 (first contr-pts)&lt;br /&gt;
                                 (second contr-pts)&lt;br /&gt;
                                 (third contr-pts)&lt;br /&gt;
                                 (fourth contr-pts)))&lt;br /&gt;
                          (cps2 (list&lt;br /&gt;
                                 (fourth contr-pts)&lt;br /&gt;
                                 (fifth contr-pts)&lt;br /&gt;
                                 (sixth contr-pts)&lt;br /&gt;
                                 (seventh contr-pts)))&lt;br /&gt;
                          (first-spline-stil&lt;br /&gt;
                           (begin&lt;br /&gt;
                            (ly:grob-set-property! grob &#039;control-points cps1)&lt;br /&gt;
                            (ly:slur::print grob)))&lt;br /&gt;
                          (second-spline-stil&lt;br /&gt;
                           (begin&lt;br /&gt;
                            (ly:grob-set-property! grob &#039;control-points cps2)&lt;br /&gt;
                            (ly:slur::print grob)))&lt;br /&gt;
                          ;; annotates all new control-points&lt;br /&gt;
                          (crosses&lt;br /&gt;
                           (if ann?&lt;br /&gt;
                               (apply&lt;br /&gt;
                                ly:stencil-add&lt;br /&gt;
                                (map&lt;br /&gt;
                                 (lambda (c)&lt;br /&gt;
                                   (make-cross-stencil c))&lt;br /&gt;
                                 (append cps1 cps2)))&lt;br /&gt;
                               empty-stencil))&lt;br /&gt;
                          )&lt;br /&gt;
                   ;(pretty-print cps)&lt;br /&gt;
&lt;br /&gt;
                   (ly:stencil-add&lt;br /&gt;
                    first-spline-stil&lt;br /&gt;
                    second-spline-stil&lt;br /&gt;
                    crosses)))))&lt;br /&gt;
     #{ -\tweak stencil $proc ( #}))&lt;br /&gt;
&lt;br /&gt;
cptsA = #&#039;((0.6 . 5.8)&lt;br /&gt;
           (3.6 . 7.8)&lt;br /&gt;
           (25.0 . 5.0)&lt;br /&gt;
           (32 . 12)&lt;br /&gt;
           (39.0 . 17.5)&lt;br /&gt;
           (53.1 . 16.0)&lt;br /&gt;
           (55.5 . 12.5))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
upper = \relative {&lt;br /&gt;
  \key d \major&lt;br /&gt;
  \clef bass&lt;br /&gt;
  s2 r8 d,16 g b d g b&lt;br /&gt;
  d8 r s2.&lt;br /&gt;
  s4 \voiceTwo b8.(-- c16-- b2--)&lt;br /&gt;
}&lt;br /&gt;
lower = \relative {&lt;br /&gt;
  \key d \major&lt;br /&gt;
  \clef bass&lt;br /&gt;
  r2&lt;br /&gt;
  &amp;lt;d&#039; b g=&amp;gt;~-^-\compoundSlur \cptsA ##t&lt;br /&gt;
  &amp;lt;&amp;lt;&lt;br /&gt;
    {&lt;br /&gt;
      &amp;lt;d b g&amp;gt;4 &amp;lt;c g e&amp;gt; &amp;lt;b g&amp;gt; \voiceOne cis&lt;br /&gt;
      \change Staff = upper&lt;br /&gt;
      \clef treble \voiceOne d e fis2)&lt;br /&gt;
      \fermata&lt;br /&gt;
    }&lt;br /&gt;
    \new Voice {&lt;br /&gt;
      \voiceTwo&lt;br /&gt;
      s2. &amp;lt;g,= e&amp;gt;4 \oneVoice&lt;br /&gt;
      &amp;lt;fis b,&amp;gt; &amp;lt;g e&amp;gt; &amp;lt;fis dis&amp;gt;2\fermata&lt;br /&gt;
    }&lt;br /&gt;
  &amp;gt;&amp;gt;&lt;br /&gt;
}&lt;br /&gt;
\score {&lt;br /&gt;
  &amp;lt;&amp;lt;&lt;br /&gt;
    \new PianoStaff &amp;lt;&amp;lt;&lt;br /&gt;
      \new Staff = upper \upper&lt;br /&gt;
      \new Staff = lower \lower&lt;br /&gt;
    &amp;gt;&amp;gt;&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:Expressive marks]]&lt;br /&gt;
[[Category:Tweaks and overrides]]&lt;br /&gt;
[[Category:Snippet]]&lt;/div&gt;</summary>
		<author><name>SimonAlbrecht</name></author>
	</entry>
	<entry>
		<id>https://wiki.lilypond.community/index.php?title=User_talk:SimonAlbrecht&amp;diff=6406</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=6406"/>
		<updated>2026-02-28T09:53:56Z</updated>

		<summary type="html">&lt;p&gt;SimonAlbrecht: /* 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;/div&gt;</summary>
		<author><name>SimonAlbrecht</name></author>
	</entry>
	<entry>
		<id>https://wiki.lilypond.community/index.php?title=User_talk:SimonAlbrecht&amp;diff=6405</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=6405"/>
		<updated>2026-02-28T09:50:47Z</updated>

		<summary type="html">&lt;p&gt;SimonAlbrecht: /* 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;/div&gt;</summary>
		<author><name>SimonAlbrecht</name></author>
	</entry>
	<entry>
		<id>https://wiki.lilypond.community/index.php?title=Adjusting_vertical_positioning_of_lyric_hyphens&amp;diff=6391</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=6391"/>
		<updated>2026-02-26T13:20:27Z</updated>

		<summary type="html">&lt;p&gt;SimonAlbrecht: Major syntax update, code formatting&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;
  property-defaults.fonts.serif = &amp;quot;Serif&amp;quot;&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>SimonAlbrecht</name></author>
	</entry>
	<entry>
		<id>https://wiki.lilypond.community/index.php?title=Separating_footers_with_a_horizontal_line&amp;diff=6390</id>
		<title>Separating footers with a horizontal line</title>
		<link rel="alternate" type="text/html" href="https://wiki.lilypond.community/index.php?title=Separating_footers_with_a_horizontal_line&amp;diff=6390"/>
		<updated>2026-02-26T12:21:45Z</updated>

		<summary type="html">&lt;p&gt;SimonAlbrecht: remove spurious comment, add new comment for documentation&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Separating footers from the main content of the page using a horizontal line can be done by altering the &amp;lt;code&amp;gt;oddFooterMarkup&amp;lt;/code&amp;gt; paper variable (and &amp;lt;code&amp;gt;evenFooterMarkup&amp;lt;/code&amp;gt;, if they should be different). However, this requires printing the horizontal line only if any footer is shown on that page; this snippet demonstrates how to program such a condition.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;lilypond version=&amp;quot;2.24&amp;quot; full&amp;gt;&lt;br /&gt;
#(define (separator-condition layout props arg)&lt;br /&gt;
   ;; only print `arg&#039; if copyright and/or tagline is printed on that page&lt;br /&gt;
   (if (or (and (chain-assoc-get &#039;header:copyright props)&lt;br /&gt;
                ;; on-first-page-of-part copied from ly/titling-init.ly&lt;br /&gt;
                (= (chain-assoc-get &#039;page:page-number props -1)&lt;br /&gt;
                   (ly:output-def-lookup layout &#039;first-page-number)))&lt;br /&gt;
           (and (chain-assoc-get &#039;header:tagline props)&lt;br /&gt;
                ;; on-last-page (two following conditions)&lt;br /&gt;
                (chain-assoc-get &#039;page:is-bookpart-last-page props #f)&lt;br /&gt;
                (chain-assoc-get &#039;page:is-last-bookpart props #f)))&lt;br /&gt;
       (interpret-markup layout props arg)&lt;br /&gt;
       empty-stencil))&lt;br /&gt;
&lt;br /&gt;
\header {&lt;br /&gt;
  tagline = &amp;quot;Special tagline&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
\paper {&lt;br /&gt;
  #(set-paper-size &amp;quot;a9landscape&amp;quot;)&lt;br /&gt;
  oddFooterMarkup = \markup \center-column {&lt;br /&gt;
    \on-the-fly \separator-condition \with-color #grey \override #&#039;(span-factor . 1/3) \draw-hline&lt;br /&gt;
    %% Copyright header field only on first page in each bookpart.&lt;br /&gt;
    \if \on-first-page-of-part \fill-line {&lt;br /&gt;
      \fromproperty #&#039;header:copyright&lt;br /&gt;
    }&lt;br /&gt;
    %% Tagline only on last page in each book.&lt;br /&gt;
    \if \on-last-page \fill-line {&lt;br /&gt;
      \fromproperty #&#039;header:tagline&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
\bookpart {&lt;br /&gt;
  \markup &amp;quot;(Public Domain content)&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
\bookpart {&lt;br /&gt;
  \header { copyright = &amp;quot;©&amp;quot; }&lt;br /&gt;
  \markup &amp;quot;(Copyright content)&amp;quot;&lt;br /&gt;
  \pageBreak&lt;br /&gt;
  \markup \column { &amp;quot;(no Copyright statement&amp;quot;&amp;quot;on subsequent page)&amp;quot; }&lt;br /&gt;
}&lt;br /&gt;
\bookpart {&lt;br /&gt;
  \markup &amp;quot;(final page with tagline)&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lilypond&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Non-music]]&lt;br /&gt;
[[Category:Paper and layout]]&lt;br /&gt;
[[Category:Stylesheet]]&lt;br /&gt;
[[Category:Titles]]&lt;/div&gt;</summary>
		<author><name>SimonAlbrecht</name></author>
	</entry>
	<entry>
		<id>https://wiki.lilypond.community/index.php?title=Separating_footers_with_a_horizontal_line&amp;diff=6389</id>
		<title>Separating footers with a horizontal line</title>
		<link rel="alternate" type="text/html" href="https://wiki.lilypond.community/index.php?title=Separating_footers_with_a_horizontal_line&amp;diff=6389"/>
		<updated>2026-02-26T11:43:35Z</updated>

		<summary type="html">&lt;p&gt;SimonAlbrecht: New snippet: Separating footers with a horizontal line&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Separating footers from the main content of the page using a horizontal line can be done by altering the &amp;lt;code&amp;gt;oddFooterMarkup&amp;lt;/code&amp;gt; paper variable (and &amp;lt;code&amp;gt;evenFooterMarkup&amp;lt;/code&amp;gt;, if they should be different). However, this requires printing the horizontal line only if any footer is shown on that page; this snippet demonstrates how to program such a condition.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;lilypond version=&amp;quot;2.24&amp;quot; full&amp;gt;&lt;br /&gt;
#(define (separator-condition layout props arg)&lt;br /&gt;
   (if (or (and (chain-assoc-get &#039;header:copyright props)&lt;br /&gt;
                ;on-first-page-of-part copied from ly/titling-init.ly&lt;br /&gt;
                (= (chain-assoc-get &#039;page:page-number props -1)&lt;br /&gt;
                   (ly:output-def-lookup layout &#039;first-page-number)))&lt;br /&gt;
           (and (chain-assoc-get &#039;header:tagline props)&lt;br /&gt;
                ;on-last-page&lt;br /&gt;
                (chain-assoc-get &#039;page:is-bookpart-last-page props #f)&lt;br /&gt;
                (chain-assoc-get &#039;page:is-last-bookpart props #f)))&lt;br /&gt;
       (interpret-markup layout props arg)&lt;br /&gt;
       empty-stencil))&lt;br /&gt;
&lt;br /&gt;
\header {&lt;br /&gt;
  tagline = &amp;quot;Special tagline&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
\paper {&lt;br /&gt;
  #(set-paper-size &amp;quot;a9landscape&amp;quot;)&lt;br /&gt;
  oddFooterMarkup = \markup \center-column {&lt;br /&gt;
    %% how to make the following horizontal line conditional on whether the&lt;br /&gt;
    %% following header fields aren’t empty?&lt;br /&gt;
    \on-the-fly \separator-condition \with-color #grey \override #&#039;(span-factor . 1/3) \draw-hline&lt;br /&gt;
    %% Copyright header field only on first page in each bookpart.&lt;br /&gt;
    \if \on-first-page-of-part \fill-line {&lt;br /&gt;
      \fromproperty #&#039;header:copyright&lt;br /&gt;
    }&lt;br /&gt;
    %% Tagline only on last page in each book.&lt;br /&gt;
    \if \on-last-page \fill-line {&lt;br /&gt;
      \fromproperty #&#039;header:tagline&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
\bookpart {&lt;br /&gt;
  \markup &amp;quot;(Public Domain content)&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
\bookpart {&lt;br /&gt;
  \header { copyright = &amp;quot;©&amp;quot; }&lt;br /&gt;
  \markup &amp;quot;(Copyright content)&amp;quot;&lt;br /&gt;
  \pageBreak&lt;br /&gt;
  \markup \column { &amp;quot;(no Copyright statement&amp;quot;&amp;quot;on subsequent page)&amp;quot; }&lt;br /&gt;
}&lt;br /&gt;
\bookpart {&lt;br /&gt;
  \markup &amp;quot;(final page with tagline)&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lilypond&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Non-music]]&lt;br /&gt;
[[Category:Paper and layout]]&lt;br /&gt;
[[Category:Stylesheet]]&lt;br /&gt;
[[Category:Titles]]&lt;/div&gt;</summary>
		<author><name>SimonAlbrecht</name></author>
	</entry>
</feed>