Alle Jahre wieder

Zur Navigation springen Zur Suche springen

Liedtext

Alle Jahre wieder
kommt das Christuskind
auf die Erde nieder,
wo wir Menschen sind.

Kehrt mit seinem Segen
ein in jedes Haus,
geht auf allen Wegen
mit uns ein und aus.

Ist auch mir zur Seite
still und unerkannt,
daß es treu mich leite
an der lieben Hand.

Lilypond Score

\version "2.22.0"
\language "deutsch"

make-midi-list =
#(define-void-function (name score tempolist)
   ((string? #f) ly:score? list?)
   (for-each
    (lambda (tempo)
      (ly:book-process
       (apply
        ly:make-book
        $defaultpaper
        $defaultheader
        (list score))
       $defaultpaper
       #{
         \midi {
           \tempo 4 = $tempo
         }
       #}
       (format #f "~a_~a"
         (or name "midi")
         tempo)))
    tempolist))

#(define ((chord-name->german-markup-text-alteration B-instead-of-Bb) pitch lowercase?)

   (define (pitch-alteration-semitones pitch)
     (inexact->exact (round (* (ly:pitch-alteration pitch) 2))))

   (define (conditional-string-downcase str condition)
     (if condition
         (string-downcase str)
         str))

   (let* ((name (ly:pitch-notename pitch))
          (alt-semitones  (pitch-alteration-semitones pitch))
          (n-a (if (member (cons name alt-semitones) `((6 . -1) (6 . -1)))
                   (cons 7 (+ (if B-instead-of-Bb 1 1) alt-semitones))
                   (cons name alt-semitones))))
     (make-line-markup
      (list
       (make-simple-markup
        (conditional-string-downcase
         (vector-ref #("C" "D" "E" "F" "G" "A" "H" "B") (car n-a))
         lowercase?))
       (let ((alteration (/ (cdr n-a) 2)))
         (cond
          ((and (equal? lowercase? #f) (= alteration FLAT) (= (car n-a) 7)) (make-simple-markup ""))
          ((and (= alteration FLAT) (or (= (car n-a) 5) (= (car n-a) 2) )) (make-simple-markup "s"))
          ((= alteration FLAT) (make-simple-markup "es"))
          ((and (= alteration DOUBLE-FLAT) (or (= (car n-a) 5)(= (car n-a) 2) )) (make-simple-markup "ses"))
          ((= alteration DOUBLE-FLAT) (make-simple-markup "eses"))
          ((= alteration SHARP) (make-simple-markup "is"))
          ((= alteration DOUBLE-SHARP) (make-simple-markup "isis"))
          (else empty-markup)))))))

#(define germanChords (chord-name->german-markup-text-alteration #t))
\layout {
  \context {
    \Voice
    beamExceptions = #'()
    \override BreathingSign.text =
    \markup { \musicglyph #"scripts.lvarcomma" }
    \override Stem.neutral-direction = #down
    \override Script.outside-staff-priority = #'()
    \override Script.padding = #1
    \override Tie.thickness = #1
    \override PhrasingSlur.thickness = #3
    \override Rest.voiced-position = #0
    \override MultiMeasureRest.expand-limit = #3
  }
  \context {
    \Staff
    printPartCombineTexts = ##f
    beamExceptions = #'()
    \override BreathingSign.text =
    \markup { \musicglyph #"scripts.lvarcomma" }
    \override InstrumentName.font-features = #'("smcp")
  }
  \context {
    \Score
    \override VerticalAxisGroup.remove-first = ##t
    skipBars = ##f
    \override MetronomeMark.font-size = #1
    \override MetronomeMark.font-shape = #'caps
    \override BarLine.thick-thickness = 5
    barNumberVisibility = #all-bar-numbers-visible
    \override Timing.beamExceptions = #'()
    \override BarNumber.color = #(rgb-color 0.7 0.7 0.7)
    \override BarNumber.layer = #-200
    \override BarNumber.padding = #0.4
    \override BarNumber.outside-staff-priority =#'()
    \override BarNumber.after-line-breaking = ##f
    \override BarNumber.font-size = #-1
    \override BarNumber.font-series = #'bold
    \override BarNumber.self-alignment-X = #0
    \override BarNumber.break-visibility = #end-of-line-invisible
  }
  \context {
    \ChordNames
    chordNameLowercaseMinor = ##f
    \remove Staff_performer
    chordRootNamer = #germanChords
    \override ChordName.font-name = #"Orator10 BT"
    chordNoteNamer = #(chord-name->german-markup #f)
    \override ChordName.X-offset =
    #ly:self-alignment-interface::aligned-on-x-parent
    \override ChordName.self-alignment-X = #CENTER
    \override ChordName.font-name = #"Arial Narrow"
    \override ChordName.layer = #2
    \override ChordName.font-size = #-0.5
    noChordSymbol = ##f
  }
  \context {
    \Lyrics
    \override VerticalAxisGroup.staff-affinity = #CENTER
  }
} 
firstvoice=
\relative c'' {
  \key c \major
  g4. a8 g4 f4 e2 d2
  c4 d8 ( e8 ) f4 e4 d2. r4
  e4 g4 a4 g4 c2 h4 (a4)
  g4 f8 ( e8 ) f4 g4 e2. r4
  \bar "|."
}

%% Voice 2
secondvoice =
\relative c' {
  e4. f8 e4 d c2 h
  c4 h8  c  d4 c h2. r4
  c c c c
  c2. c4
  e4 d8 c c4 d
  c2.
}

%% Chords
songchords =
\chordmode {
  c2. g4 c2 g2 c4 s4 g4:7 c4 g1
  c4 s4 f4 c4
  f1
  c2 g:7 c
}

Bass = \relative c {
  \key c \major
  \clef bass
  \autoBeamOn
  < c e c' >4 q q < h g' >
  \voiceOne
  c4 g'8 ( a ) h4 c
  \oneVoice
  < e, c >4 < g h, >
  < g d > < c, e >
  < g' g, h >2. r4
  < g c, >4 < c e, > < c f, > < c g >
  \voiceOne
  c2. c4
  \oneVoice
  < c, e > < d g > < f d > < g h, >
  < g \tweak color #grey e c >2. r4
}
xBass = \relative c {
  s1
  \voiceTwo
  c2 g'
  s2 s2
  s1 s
  a2 ( g4 ) f
}

nBass = \relative c' {
  \key c \major
  \autoBeamOn
  R1
  c4 g8 ( a ) h4 c
  c h8 ( c ) d4 c h2
  g4 h c ( e f ) g
  a2 g4 ( f )
  e d8 ( c ) d ( c) h4 c2. r4
}

%% Song Lyrics
firstverse =
\lyricmode {
  \set stanza = #"1." Al
  -- le Jah -- re wie -- der kommt das__ Chris -- tus  -- kind
  auf die Er -- de nie -- der, wo wir__ Men -- schen sind.
}

secondverse =
\lyricmode {
  \set stanza = #"2."
  Kehrt mit sei -- nem Se -- gen
  ein in je -- des Haus,
  geht auf al -- len We -- gen
  mit uns ein und aus.
}

thirdverse=
\lyricmode {
  \set stanza = #"3."
  Steht auch mir zur Sei -- te,
  still und un -- er -- kannt,
  dass es treu mich lei -- te
  an der lie -- ben Hand.
}

bfirstverse =
\lyricmode {
  \set stanza = #"1." Al
  -- le Jah -- re kommt das__ Chris -- tus  -- kind
  auf die Er -- de nie -- der, wo wir__ Men -- schen sind.
}

bsecondverse =
\lyricmode {
  \set stanza = #"2."
  Kehrt mit Se -- gen
  ein in je -- des Haus,
  geht auf al -- len We -- gen
  mit uns ein und aus.
}

bthirdverse=
\lyricmode {
  \set stanza = #"3."
  Ist zur Sei -- te,
  still und un -- be -- kannt,
  dass es treu mich lei -- te
  an der lie -- ben Hand.
}

Bass = \relative c {
  \key c \major
  \clef bass
  \autoBeamOn
  < c e c' >4 q q < h g' >
  \voiceOne
  g'2 g
  \oneVoice
  < g e >4 < g h, >
  < g h, > < g c, >
  < g g, h >2. r4
  < g c, >4 < c e, > < c f, > < c e, >
  \voiceOne
  c2. c4
  \oneVoice
  < e, c > < g h, > < f h, > < g h, >
  < g c, >2. r4
}

xBass = \relative c {
  s1
  \voiceTwo
  c4 ( e ) g ( f )
  s2 s2
  s1 s
  a2 ( g4 ) f
}


Struktur =
{
  \override PianoStaff.VerticalAxisGroup.staff-staff-spacing.minimum-distance = #6
  \override PianoStaff.VerticalAxisGroup.staff-staff-spacing.basic-distance = #10
  \override PianoStaff.VerticalAxisGroup.staff-staff-spacing.minimum-distance = #13
  \override Score.NonMusicalPaperColumn.page-break-permission = ##f
  \override Score.SpacingSpanner.common-shortest-duration = #(ly:make-moment 1/16)
  %\tempo 4=88
}
#(define myTitel "Alle Jahre wieder")

kopf=
\header {
  title = \markup \column
  {
    #myTitel
    \null
  }
  subtitle = ##f
  subsubtitle = ##f
  poet =  "Text: Wilhelm Hey (1759–1854)"
  composer = \markup {
    \override #'(baseline-skip . 1)
    \right-column {
      "Melodie: Friedrich Silcher (1759–1860)"
    }
  }
  piece = ##f
  opus = ##f
}

\bookpart {
  \paper {
    top-margin = 30\mm
    ragged-right = ##f
    ragged-last = ##f
    ragged-bottom = ##t
    ragged-last-bottom = ##t
    bottom-margin = 25\mm
    indent = #0
    line-width = 160\mm
    print-all-headers = ##t
    #(include-special-characters)
    print-first-page-number = ##t
    first-page-number = #1
    oddFooterMarkup = ##f
    evenFooterMarkup = ##f
    oddHeaderMarkup = #oddFooterMarkup
    evenHeaderMarkup = #evenFooterMarkup
    markup-system-spacing.padding = #8
    system-system-spacing.padding = #8
    markup-markup-spacing.padding = #14
    top-markup-spacing.padding = #8
  }
  \score
  {
    \new PianoStaff
    <<
      \new ChordNames \songchords
      \new Staff="leadsheet"
      \new Voice="melody"
      {
        \Struktur
        \firstvoice
      }
      \new Lyrics \lyricsto "melody" \firstverse
      \new Lyrics \lyricsto "melody" \secondverse
      \new Lyrics \lyricsto "melody" \thirdverse

      \new Staff
      <<
        \new Voice
        {
          \Bass
        }
        \new Voice \xBass
      >>
    >>
    \kopf
  }
  \markup {
    \center-column {
      \null \null \null
      \fill-line {
        \null \epsfile #Y #14 #"flocke.eps" \null
      }
    }
  }
}

#(set-global-staff-size 22)
#(define ((chord-name->german-markup-text-alteration B-instead-of-Bb) pitch lowercase?)

   (define (pitch-alteration-semitones pitch)
     (inexact->exact (round (* (ly:pitch-alteration pitch) 2))))

   (define (conditional-string-downcase str condition)
     (if condition
         (string-downcase str)
         str))

   (let* ((name (ly:pitch-notename pitch))
          (alt-semitones  (pitch-alteration-semitones pitch))
          (n-a (if (member (cons name alt-semitones) `((6 . -1) (6 . -1)))
                   (cons 7 (+ (if B-instead-of-Bb 1 1) alt-semitones))
                   (cons name alt-semitones))))
     (make-line-markup
      (list
       (make-simple-markup
        (conditional-string-downcase
         (vector-ref #("C" "D" "E" "F" "G" "A" "H" "B") (car n-a))
         lowercase?))
       (let ((alteration (/ (cdr n-a) 2)))
         (cond
          ((and (equal? lowercase? #f) (= alteration FLAT) (= (car n-a) 7)) (make-simple-markup ""))
          ((and (= alteration FLAT) (or (= (car n-a) 5) (= (car n-a) 2) )) (make-simple-markup "s"))
          ((= alteration FLAT) (make-simple-markup "es"))
          ((and (= alteration DOUBLE-FLAT) (or (= (car n-a) 5)(= (car n-a) 2) )) (make-simple-markup "ses"))
          ((= alteration DOUBLE-FLAT) (make-simple-markup "eses"))
          ((= alteration SHARP) (make-simple-markup "is"))
          ((= alteration DOUBLE-SHARP) (make-simple-markup "isis"))
          (else empty-markup)))))))

#(define germanChords (chord-name->german-markup-text-alteration #t))

make-midi-list =
#(define-void-function (name score tempolist)
   ((string? #f) ly:score? list?)
   (for-each
    (lambda (tempo)
      (ly:book-process
       (apply
        ly:make-book
        $defaultpaper
        $defaultheader
        (list score))
       $defaultpaper
       #{
         \midi {
           \tempo 4 = $tempo
         }
       #}
       (format #f "~a_~a"
         (or name "midi")
         tempo)))
    tempolist))

editorsColor = #grey
ed =
#(define-music-function (grob col mus)
   (symbol-list-or-symbol? (color? editorsColor) ly:music?)
   ;; for abbreviations, we need a symbol instead of a one-element list
   (let ((grob (if (= 1 (length grob)) (car grob) grob)))
     (case
      grob
      ;; define abbreviations
      ;; which call the function recursively with a value
      ;; leading into the (else) clause
      ;; (or to _another_ abbreviation)
      ;; be careful to avoid infinite recursion :-)
      ;; – abbreviation names must not be actual grob names
      ;; (at least if they’re used in the corresponding
      ;; clause) or recursion will be infinite also
      ;; It is recommended to use singular forms only
      ;; for abbreviations.
      ((Caut) #{ \ed Staff.AccidentalCautionary #})
      ((LedgerLine) #{ % barline is workaround to issue 3949
        \stopStaff
        \ed Staff.LedgerLineSpanner {
          \startStaff
          $mus
          \stopStaff
        }
        \startStaff #})
      ((Mmr) #{ \ed MultiMeasureRest $mus #})
      ((Note) #{ \ed Staff.Accidental
                 \ed Beam
                 \ed Dots
                 \ed Flag
                 \ed LedgerLine
                 \ed NoteHead
                 \ed Rest
                 \ed Stem $mus #})
      ((Pitch) #{ \ed NoteHead $mus #})
      ((Suggest) #{ \ed Staff.AccidentalSuggestion #})
      ((StemWithFlag) #{ \ed Stem \ed Flag $mus #})
      ((Tuplet) #{ \ed TupletNumber \ed TupletBracket $mus #})
      ;; ‘normal’ case
      (else
       #{
         \override $grob . color = #col
         $mus
         \revert $grob . color
       #}))))

#(define new-stil
   (lambda (grob)
     (let* ((sz (ly:grob-property grob 'font-size 0.0))
            (mult (magstep sz))
            (dir (ly:grob-property grob 'direction))
            (thick 0.15)
            (radius 0.7)
            (scaled-radius (* mult radius))
            (ps-command-string
             (format #f
               "
             0 ~a translate
             ~a setlinewidth
             ~a 0 moveto
             0 0 ~a 180 0 ~a
             stroke
             "
               ;mult
               (* thick dir)
               thick
               (- scaled-radius)
               scaled-radius
               (if (negative? dir) "arcn" "arc"))))

       (ly:make-stencil
        (list 'embedded-ps
          (format #f
            "
              gsave currentpoint translate
              ~a
              grestore
              "
            ps-command-string))
        (cons (- scaled-radius) scaled-radius)
        (cons
         (if (negative? dir) 0 (- scaled-radius))
         (if (negative? dir) scaled-radius 0))))))

soft =
-\tweak stencil #new-stil \fermata

#(define-markup-command (text-fromproperty layout props text-1 symbol text-2)
   (markup? symbol? markup?)
   #:category other
   (let ((m (chain-assoc-get symbol props)))
     (if (markup? m)
         ;; prevent infinite loops by clearing the interpreted property:
         (interpret-markup
          layout
          (cons (list (cons symbol `(,property-recursive-markup ,symbol))) props)
          (make-concat-markup (list text-1 m text-2)))
         empty-stencil)))



klavier =
%% simple orgelsatz nur SATBs
#(define-music-function (sop alt ten bas stru)
   (ly:music? ly:music? ly:music? ly:music? ly:music?)
   #{
     <<
       \new PianoStaff="leadsheet"
       <<
         \new Staff="Discant"
         <<
           \new Voice="Alt" { $sop }
           \new Voice { $alt }
         >>
         \new Staff="Bass"
         <<
           \new Voice { $ten }
           \new Voice { $bas }
           \new NullVoice $stru
         >>
       >>
     >>
   #}
   )

mynote =
#(define-music-function (m)
   (ly:duration?)
   #{
     \override Score.RehearsalMark.break-align-symbols = #'(time-signature)
     \once \override Score.RehearsalMark.self-alignment-X = #-1
     \mark \markup \fontsize #-3.5 \note { $m } #UP
   #}
   )


oob = { \once \override Score.BarNumber.stencil = ##f \bar "" }
bnf = \once \override Score.BarNumber.stencil = ##f
#(use-modules (ice-9 regex))

dynamictext =
#(define-event-function (text) (markup?)
   (if (string? text)
       (let* ((underscores-replaced
               (string-map
                (lambda (x) (if (eq? x #\_) #\space x))
                text))
              (split-text (string-split underscores-replaced #\space))
              (formatted (map
                          (lambda (word)
                            (if (string-match "^[mrzfps]*$" word)
                                (markup #:dynamic word)
                                (markup #:normal-text #:italic word)))
                          split-text)))
         #{
           #(make-dynamic-script (make-line-markup formatted))
         #})
       ;; user provided a full-blown markup, so we don't mess with it:
       #{
         #(make-dynamic-script (markup #:normal-text text))
       #}))

startMyGrace = {
  \temporary \override Slur.minimum-length = #0.1
  \startSlashedGraceMusic
  <>-#(make-music 'LaissezVibrerEvent)
  \revert Slur.minimum-length
}

myAcc =
#(def-grace-function startMyGrace stopSlashedGraceMusic)

dropLyrics =
#(define-scheme-function (amount) (number?)
   #{
     \override LyricText.extra-offset = #`(0 . ,amount)
     \override LyricHyphen.extra-offset = #`(0 . ,amount)
     \override LyricExtender.extra-offset = #`(0 . ,amount)
     \override StanzaNumber.extra-offset = #`(0 . ,amount)
   #}
   )

raiseLyrics = {
  \revert LyricText.extra-offset
  \revert LyricHyphen.extra-offset
  \revert LyricExtender.extra-offset
  \revert StanzaNumber.extra-offset
}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%% Liedverse Formatierung
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

#(define-markup-list-command (paragraph layout props args) (markup-list?)
   #:properties ((x-shift 2))
   (interpret-markup-list layout props
     (make-justified-lines-markup-list (cons (make-hspace-markup x-shift) args))))

#(define (numbering-start lst strt)
   "Returns a list of custom formated markups for numbers, relying on the length
of @var{lst}, starting with number 2"
   (if (eq? strt 0)
       (map
        (lambda (i)
          #{ \markup \concat \paragraph { " " } #})
        (iota (length lst)))
       (map
        (lambda (i)
          #{ \markup \concat \paragraph { \bold #(format #f "~2d. " i) } #})
        (iota (length lst) strt 1))))

#(define (equal-sized-splited-list lst n rl)
   "Split @var{lst} in equal sized parts of length @var{n}.
If @var{lst} is finally not empty add the remaining rest."
   (cond ((null? lst) (reverse rl))
     ((< (length lst) n) (reverse (cons lst rl)))
     (else
      (equal-sized-splited-list (drop lst n) n (cons (take lst n) rl)))))

columns-markup-list =
#(define-scheme-function (lines-per-verse ls)(index? markup-list?)
   "Returns a markup-list.  Each markup is done from a subset of @var{ls} under
control of @var{lines-per-verse}.  The markups are custom-formated using
@code{\\column-lines}, @code{\\column} and a hard-coded @code{baseline-skip} of
value 3"
   (let ((splitted-ls (equal-sized-splited-list ls lines-per-verse '())))
     (map
      (lambda (l)
        #{ \markup \override #'(baseline-skip . 3)
           %\override #`(font-name . ,myMin)
           \override \largerFont
           \column \column-lines $l #})
      splitted-ls) ))

formatAdditionalVerses =
#(define-scheme-function (center-overshoot number-start columns lst)
   ((boolean? #t) index? index? markup-list?)
   (let* ((numberings (numbering-start lst number-start))
          (new-list
           (map
            (lambda (x y)
              #{
                \markup
                \override #'(baseline-skip . 3)
                \line {
                  \paragraph {
                    \overlay {
                      \right-align \transparent "222"
                      \right-align \number $x
                    }
                  }
                  $y
                }
              #})
            numberings
            lst))
          (lst-lngth (length lst))
          (table-lst
           (if (and (odd? lst-lngth)
                    (= (remainder lst-lngth columns) 1)
                    center-overshoot)
               (drop-right new-list 1)
               new-list))
          (odd-tail
           (if (and (odd? lst-lngth)
                    (= (remainder lst-lngth columns) 1)
                    center-overshoot)
               (take-right new-list 1)
               #f))
          (columns-format-list (make-list columns LEFT))
          (args-list
           #{ \markuplist {
             \override #'(font-size . -1)
             \table #columns-format-list #table-lst
           } #})
          (args-list-rev
           (append
            args-list
            (if odd-tail
                #{
                  \markuplist \override #'(font-size . -1)
                  %% hier nix ändern, das sind die Nummerierungen!!
                  \column-lines { \fill-line { \line { #odd-tail } } }
                #}
                '()))))
     args-list-rev))

#(define-markup-list-command (paragraph layout props args) (markup-list?)
   #:properties ((x-shift 2))
   (interpret-markup-list layout props
     (make-justified-lines-markup-list (cons (make-hspace-markup x-shift) args))))

#(define (reorder-lists lists)
   ;; TODO better name and DOC
   "Example:
   (reorder-lists '((a) (b c) (d e f)))
   ->'(a b d "" c e "" "" f)"
   (let* ((max-length (apply max 0 (map length lists)))
          (equal-length-lists
           (map
            (lambda (l)
              (let ((length-diff (- max-length (length l))))
                (if (zero? length-diff)
                    l
                    (append l (make-list length-diff "")))))
            lists)))

     (define (new-lists lists rl)
       ;; TODO better name and DOC
       "Example
       (new-lists '((a b c) (d e f) (g h i)) '())
       ->
       '((a d g) (b e h) (c f i))"
       (if (every null? lists)
           (reverse rl)
           (new-lists
            (map cdr lists)
            (cons (map car lists) rl))))

     (apply append '() (new-lists equal-length-lists '()))))

#(define (numbering-start lst strt)
   "Returns a list of custom formated markups for numbers, relying on the length
of @var{lst}, starting with number 2"
   (if (eq? strt 0)
       (map
        (lambda (i)
          #{ \markup \concat \paragraph { " " } #})
        (iota (length lst)))
       (map
        (lambda (i)
          #{ \markup \concat \paragraph { \bold #(format #f "~2d. " i) } #})
        (iota (length lst) strt 1))))

formatTwoColumns =
#(define-scheme-function (trenner r-col r-start l-col l-start)
   ((string? " ") markup-list? index? markup-list? index?)
   #{
     \markuplist {
       %\override #`(font-name . ,myMin)
       %s\override \largerFont
       %\override #'(baseline-skip . 3)
       %\override #'(padding . 0)
       \table
       #'(1 -1 1 1 -1)
       #(reorder-lists
         (list
          ;; numbering is done for each list, because we can't warrant equal
          ;; length of each list
          (numbering-start r-col r-start)
          r-col
          (make-list (length r-col) trenner)
          (numbering-start l-col l-start)
          l-col))
     }
   #}
   )

%% LSR 233 https://lsr.di.unimi.it/LSR/Item?id=233
hairpinWithCenteredText =
#(define-music-function (parser location text) (markup?)
  #{
    \once \override Voice.Hairpin.after-line-breaking = 
      #(lambda (grob)
        (let* ((stencil (ly:hairpin::print grob))
               (par-y (ly:grob-parent grob Y))
               (dir (ly:grob-property par-y 'direction))
               (staff-line-thickness
                 (ly:output-def-lookup (ly:grob-layout grob) 'line-thickness))
               (new-stencil (ly:stencil-aligned-to
                 (ly:stencil-combine-at-edge
                   (ly:stencil-aligned-to stencil X CENTER)
                   Y dir
                   (ly:stencil-aligned-to
                     (grob-interpret-markup
                       grob
                       (make-fontsize-markup
                         (magnification->font-size
                           (+ (ly:staff-symbol-staff-space grob)
                              (/ staff-line-thickness 2)))
                           text)) X CENTER))
                 X LEFT))
               (staff-space (ly:output-def-lookup
                 (ly:grob-layout grob) 'staff-space))
               (par-x (ly:grob-parent grob X))
               (dyn-text (grob::has-interface par-x 'dynamic-text-interface))
               (dyn-text-stencil-x-length
                 (if dyn-text
                   (interval-length 
                     (ly:stencil-extent (ly:grob-property par-x 'stencil) X))
                   0))
               (x-shift 
                 (if dyn-text 
                   (- 
                     (+ staff-space dyn-text-stencil-x-length)
                     (* 0.5 staff-line-thickness)) 0)))
  
        (ly:grob-set-property! grob 'Y-offset 0)
        (ly:grob-set-property! grob 'stencil 
           (ly:stencil-translate-axis
            new-stencil
            x-shift X))))
  #})
\layout {
  \context {
    \Voice
    beamExceptions = #'()
    \override BreathingSign.text =
    \markup { \musicglyph "scripts.lvarcomma" }
    \override Stem.neutral-direction = #down
    \override Script.outside-staff-priority = #'()
    \override Script.padding = #1
    \override Tie.thickness = #1
    \override PhrasingSlur.thickness = #3
    \override Rest.voiced-position = #0
    \override MultiMeasureRest.expand-limit = #3
  }
  \context {
    \Voice
    \name FirstVoice
    \alias Voice
    \voiceOne
  }
  \context {
    \Voice
    \name SecondVoice
    \alias Voice
    \remove "Tuplet_engraver"
    \remove "Rest_engraver"
    \remove "Multi_measure_rest_engraver"
    %\override NoteHead.font-size = #smallerNoteHead
    \voiceTwo
  }
  \context {
    \Lyrics
    \override VerticalAxisGroup.staff-affinity = #CENTER
    \override LyricText.font-size = #-1.5
    \override StanzaNumber.font-size = #-1.5
  }
  \context {
    \Staff
    printPartCombineTexts = ##f
    beamExceptions = #'()
    \override BreathingSign.text =
    \markup { \musicglyph "scripts.lvarcomma" }
    \override InstrumentName.font-features = #'("smcp")
    \consists #Span_stem_engraver
    \accepts FirstVoice
    \accepts SecondVoice
  }
  \context {
    \Score
    \override VerticalAxisGroup.remove-first = ##t
    skipBars = ##f
    \override MetronomeMark.font-size = #1
    \override MetronomeMark.font-shape = #'caps
    \override BarLine.thick-thickness = 5
    \override Timing.beamExceptions = #'()
    \override BarNumber.color = #(rgb-color 0.7 0.7 0.7)
    \override BarNumber.layer = #-200
    \override BarNumber.padding = #0.4
    \override BarNumber.outside-staff-priority =#'()
    \override BarNumber.after-line-breaking = ##f
    \override BarNumber.font-size = #-1
    \override BarNumber.font-series = #'bold
    \override BarNumber.self-alignment-X = #0
    \override BarNumber.break-visibility = #end-of-line-invisible
    \override SystemStartBar.collapse-height = #4

  }
  \context {
    \ChordNames
    chordNameLowercaseMinor = ##f
    \remove Staff_performer
    chordRootNamer = #germanChords
    \override ChordName.font-name = #"Orator10 BT"
    chordNoteNamer = #(chord-name->german-markup #f)
    \override ChordName.X-offset =
    #ly:self-alignment-interface::aligned-on-x-parent
    \override ChordName.self-alignment-X = #CENTER
    \override ChordName.font-name = #"Arial Narrow"
    \override ChordName.layer = #2
    \override ChordName.font-size = #-0.5
    noChordSymbol = ##f
  }
  \context {
    \PianoStaff
    \override StaffGrouper.staffgroup-staff-spacing.basic-distance = #2
    \override StaffGrouper.staffgroup-staff-spacing.minimum-distance = #0
  }
  \context {
    \StaffGroup
    \override SystemStartBracket.collapse-height = #4
    \override SystemStartBracket.thickness = #.2
  }
}