Für Elise
Zur Navigation springen
Zur Suche springen
\version "2.22.0"
\language "deutsch"
myTitel = "Für Elise"
notensatz = \markup "Notensatz: https://lilypond.miraheze.org"
FSus = #(make-span-event 'SustainEvent STOP)
NSus = #(make-span-event 'SustainEvent START)
#(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))
#}))
myOttava =
#(define-music-function (o) (integer?)
(let ((text (case o
((0) #f)
((1 -1) "8")
((2 -2) "15"))))
#{
\ottava #o
\set Staff.ottavation = #text
#}))
\layout {
\context {
\Voice
beamExceptions = #'()
\consists "Dot_column_engraver"
\override BreathingSign.text =
\markup { \musicglyph "scripts.lvarcomma" }
\consists "Staff_performer"
\override Stem.neutral-direction = #down
\override Script.outside-staff-priority = #'()
\override Script.padding = #1
}
\context {
\Staff
instrumentName = ##f
shortInstrumentName = ##f
\remove "Dot_column_engraver"
beamExceptions = #'()
\override BreathingSign.text =
\markup { \musicglyph "scripts.lvarcomma" }
}
\context {
\Staff
\name BarNumberStaff
\alias Staff
\consists "Bar_number_engraver"
\override BarNumber.color = #(rgb-color 0.7 0.7 0.7)
\override BarNumber.layer = #-200
\override BarNumber.outside-staff-priority =#'()
\override BarNumber.padding = #1
\override BarNumber.font-size = #-1.9
\override BarNumber.font-series = #'bold
\override BarNumber.self-alignment-X = #0
\override BarNumber.break-visibility = #end-of-line-invisible
}
\context {
\Score
\accepts BarNumberStaff
\remove "Bar_number_engraver"
\override MetronomeMark.font-size = #1
\override MetronomeMark.font-shape = #'caps
\override BarLine.thick-thickness = 5
barNumberVisibility = #all-bar-numbers-visible
\override Timing.beamExceptions = #'()
\override Timing.baseMoment = #(ly:make-moment 1/4)
}
\context {
\Dynamics
\override Hairpin.to-barline = ##f
\override TextSpanner.outside-staff-priority = ##f
\override TextSpanner.padding = #'()
\override DynamicText.outside-staff-priority = ##f
\override DynamicText.padding = #4
}
\context {
\PianoStaff
\accepts BarNumberStaff
instrumentName = ##f
\consists #Span_stem_engraver
}
}
RH= \relative c'' {
\clef treble
\key a \minor
\time 3/8
\partial 8
\set Timing.beamExceptions = #'()
\set Timing.baseMoment = #(ly:make-moment 1/8)
\set Timing.beatStructure = #'(3) %% abhängig vom Takt
\tempo "Poco moto."
\repeat volta 2 {
e16 ( dis e dis e h d c a8 )
r16 c, ( e a h8 ) r16 e, ( gis h
c8 ) r16 e, ( e' dis e dis e h d c a8 )
r16 c, ( e a h8 ) r16 e, ( c' h
}
\alternative {
{ a4 ) }
{ a8\repeatTie r16 h ( c16 d }
}
\repeat volta 2 {
e8. ) g,16[ ( f' e]
d8.^\markup { \finger \overtie "34" } ) f,16[ ( e' d]
c8.^\markup { \finger \overtie "34" } ) e,16[ ( d' c]
h8 ) r16 e, ( e' ) r r e ( e' ) r r dis, [ (
e16 ) ] r r16 dis ( e dis e16 dis e h d c
a8 ) r16 c, ( e a
h8 ) r16 e, ( gis h c8 ) r16 e, ( e' dis
e dis e h d c
a8 ) r16 c, ( e a h8 ) r16 e, ( c' h
}
\alternative {
{ a8 ) r16 h ( c d ) }
{ a8\repeatTie r16 <e c'>-. ( <f c'>-. <e g c>-. ) }
}
\grace { f16 ( a } c4 f16. e32
\set Staff.beatStructure = #'(2 1)
e8 d) b'16. a32 a16( [ g f e d c ]
b8 a ) \acciaccatura { b32 ( } a32 g a b c4 ) (
d16 dis )
\set Staff.beatStructure = #'(3)
e8. e16 ( f a, c4 d16. h32
\set Staff.beatStructure = #'(1 1 1)
c32 ) g' g, g' a, g' h, g' c, g' d g e g c h a g f e d g f d
c32 g' g, g' a, g' h, g' c, g' d g e g c h a g f e d g f d
e32 f e dis e h e dis e h e dis
e8.
\set Staff.beatStructure = #'(3)
h16[ ( e dis]
e8. ) h16[( e]) r
r dis( e) r r
\set Staff.beatStructure = #'(3)
dis ( e dis e h d c
a8 ) r16 c, ( e a h8 )
r16 e, ( gis h c8 )
r16 e, ( e' dis e dis e h d c a8 )
r16 c, ( e a h8 ) r16 e, ( c' h
a8 ) r16 h16 ( c d
e8. ) g,16[ ( f' e]
d8.^\markup { \finger \overtie "34" } ) f,16[ ( e' d]
c8.^\markup { \finger \overtie "34" } ) e,16[ ( d' c]
h8 ) r16 e,( e' ) r
r16 e ( e' ) r r dis,([ e]) r r
dis ( e dis
e dis e h d c
a8 ) r16 c, ( e a
h8 ) r16 e, ( gis h
c8 ) r16
e, ( e' dis
e dis e h d c
a8 )
r16 c, ( e a
h8 ) r16 e, ( c' h
a8 )
r r
<e g b cis>4.->
<f a d>4-> <cis' e>16 <d f>
<gis, d' f>4 <gis d' f>8
<a c! e>4.
<f d'>4( <e c'>16 <d h'>
<c fis a>4) <c a'>8
<c a'>8( <e c'> <d h'>
<c a'>4.)
<e g b cis>4.->
<f a d>4-> <cis' e>16 <d f>
<d f>4 q8 q4.
<g, es'>4( <f d'>16 <es c'>
<d f b>4) <d f a>8 <d f gis>4 <d f gis>8
<c e! a>4 r8 <e h'>8 r r
\tupletSpan 8
\set Staff.beatStructure = #'(1 1 1)
\tuplet 3/2 {
a,16-1 ( c-2 e-3 a-1 c-3 e-5 d c h
\omit TupletNumber
a c e a c e d c h
\myOttava #1
a c e a c e d c-3 h-1
b-3 a-1 gis g fis f e dis d
\ottava #0
cis c h b a gis g fis f
}
\set Staff.beatStructure = #'(3)
e16 )( dis e h d c a8 )
r16 c, ( e a h8 ) r16 e, ( gis h
c8 ) r16 e, ( e' dis e dis e h d c a8 )
r16 c, ( e a h8 ) r16 e, ( c' h
a8 ) r16 h16 ( c d
e8. ) g,16[ ( f' e]
d8. ) f,16[ ( e' d]
c8. ) e,16[ ( d' c]
h8 ) r16 e, ( e' ) r
r16 e[ ( e' )] r r dis,[( e]) r r
dis ( e dis e dis e h d c
a8 ) r16 c, ( e a h8 ) r16
e, ( gis h c8) r16 e, ( e' dis e dis e h d c a8 )
r16 c, ( e a h8 ) r16 e, ( c' h
< a a, >4 ) \bar "|."
}
LH = \relative c {
\clef bass
\key c \major
\partial 8
\set fingeringOrientations = #'(left) %% für Akkorde!
\mergeDifferentlyHeadedOn
\mergeDifferentlyDottedOn
\override Fingering.direction = #UP %% für Einzelnoten!
\override Fingering.padding = #0.2
\override Fingering.staff-padding = #'()
\override Fingering.avoid-slur = #'inside
\set Staff.baseMoment = #(ly:make-moment 1/16)
\set Staff.beatStructure = #'(3 3)
\repeat volta 2 {
r8
R4. a16 e' a r16 r8 e,16 e' gis r r8
a,16 e' a r r8 R4. a,16 e' a r r8
e,16 e' gis r r8
}
\alternative {
{ a,16 e' a r }
{
a,16 [ e' a16 ] r
\set Timing.measurePosition = #(ly:make-moment -1 8) r8
}
}
\repeat volta 2 {
c,16 g' c r
r8 g,16 g' h r
r8
a,16 e' a r r8 e,16 -. e' ( e' ) r r
\clef treble e16_[ ( e') ]
r r dis e r r16 dis e r r8 R4.
\clef bass a,,,16 e' a r16
r8 e,16 e' gis r r8
a,16 e' a r r8 R4. a,16 e' a r r8
e,16 e' gis r r8
}
%\set Staff.beatStructure = #'(1 1 1)
\alternative {
{ a,16 e' a r r8 }
{ a,16 e' a <b c> <a c> <g b c> }
}
\set Staff.beatStructure = #'(6)
\grace { s16 s }
f16 a c a c a
f b d b d b
f e' <f, g b> e' <f, g b> e'
f, a c a c a f a c a c a e a c a <d, d'> f
g16 e' g, e' g, f'
\clef treble
<c e>8 r16 <f g> <e g> <d f g>
<c e g>8
\clef bass
<f, a>8[ <g h>]
\clef treble
c8 r16 <f g> <e g> <d f g>
<c e g>8
\clef bass
<f, a>8[ <g h>]
<gis h>8 r r R4.
r4 r16
\clef treble
dis''16 ([
e ] ) r r dis ( e ) r
R4. \clef bass
a,,,16 e' a r16 r8
e,16 e' gis r r8
a,16 e' a r r8
R4.
a,16 e' a r r8
e,16 e' gis r r8
a,16 e' a r r8
c,16 g' c r r8
g,16 g' h r r8
a,16 e' a r r8
e,16 e' e' r r
\clef treble e16_[(
e')] r r dis( e) r
r dis( e) r r8 R4.
\clef bass a,,,16 e' a r16 r8
e,16 e' gis r r8 a,16 e' a r r8 R4. a,16 e' a r r8
e,16 e' gis r r8
\repeat unfold 5 { a,16(-. a-. a-. a-. a-. a)-. }
<a d,>-.( <a d,>-. <a d,>-. <a d,>-. <a d,>-. <a d,>-.)
<a dis,>-.( q-. q-. q-. q-. q-.)
<e a>(-. <e a>-. <e a>-. <e a>-. <e gis>-. <e gis>)-.
<a a,> a(-. a-. a-. a-. a-.) \repeat unfold 3 { a(-. a-. a-. a-. a-. a)-. }
\repeat unfold 18 b
h! h h h h h c4 r8 <e gis>8 r r
a,,8 r <a'' c e> <a c e> r <a c e> <a c e> r <a c e> <a c e> r r
R4. R4.
a,16 e' a r r8
e,16 e' gis r r8
a,16 e' a r r8 R4.
a,16 e' a r r8
e,16 e' gis r r8
a,16 e' a r r8
c,16 g' c r r8
g,16 g' h r r8
a,16 e' a r r8
e,16 e'( e') r r
\clef treble e16[ (
e']) r r dis( e) r
r dis( e) r r8 R4.
\clef bass a,,,16 e' a r16 r8
e,16 e' gis r r8
a,16 e' a r r8 R4.
a,16 e' a r r8
e,16 e' gis r r8
<a, a,>4
}
pedree = {
\repeat unfold 3 { s4\NSus s8\FSus }
}
pedtwo = {
\pedree
s4.
\repeat unfold 2 { s4\NSus s8\FSus }
}
ped = {
s8 s4.
\override SustainPedal.self-alignment-X = #-1
\pedtwo
s4 s4.
\pedree
s4.\NSus s8. s\FSus
s4. s
\pedtwo
s4. * 18
\pedtwo
s4.
\pedree
s4.\NSus s8. s\FSus
s4. s
\pedree
s4. \repeat unfold 2 { s4\NSus s8\FSus }
\repeat unfold 16 { s4\NSus s16 s\FSus }
s4. s
\set Dynamics.pedalSustainStyle = #'mixed
s\NSus s s s\FSus
s4. s
\set Dynamics.pedalSustainStyle = #'text
\pedtwo
s4.
\pedree
s4.\NSus s8. s\FSus
s4. s
\pedtwo
}
dymo = {
s8\< s4\> s4.\!
}
din = \dynamictext "dimin."
Dyn = {
\override Hairpin.to-barline = ##t
\override Hairpin.shorten-pair = #'(0.8 . 0.8)
s8\pp
\dymo
s4. s
\dymo
s4. s4
s8 s16 s8.\<
s4.\mf
\override DynamicText.self-alignment-X = #-0.8
s s\din
s\p
s8. s\din
s s\pp
\dymo
s4. s
\dymo
s4.
s8. s\<
s\!
s8.\<
\grace { s16\! s } s4.\dynamictext "dolce"
s s
s8\> s4\!
s4.\dynamictext "cresc."
s s\din
s\p
\dymo
s8\< s8\> s8
s4.\p
s
s8. s\dynamictext "dim."
\once \override DynamicText.self-alignment-X = #0
s8.\dynamictext "poco rit."
s8 s16\pp
\dymo
s4. s
\dymo
s4.
s8. s\<
s4.\mf
s
s\din
s\p s8. s\dynamictext "dimin."
s s\pp
\dymo
s4. s
\dymo
s4. s\p
s s
s\f s
s\din
s s
s\p s\dynamictext "cresc."
s s\f
s s\din
s s s\p
s s\pp s8 s4\dynamictext "cresc."
s4.
s8 s4\din
s4.
\grace s8\pp \dymo
s4. s
\dymo s4.
s8. s\<
s4.\mf
s s\din
s4.\p
s4 s8\din
s8. s\pp
\dymo s4. s \dymo
s4.\dynamictext "mancando"
}
Struktur = {
\override Score.NonMusicalPaperColumn.page-break-permission = ##f
%\override Score.SpacingSpanner.common-shortest-duration = #(ly:make-moment 1/1)
\override PianoStaff.VerticalAxisGroup.staff-staff-spacing.minimum-distance = #12
s8
s4. * 7
s4 s4. * 22
\newSpacingSection
\override Score.SpacingSpanner.common-shortest-duration = #(ly:make-moment 1/40)
s4. * 5
\newSpacingSection
\override Score.SpacingSpanner.common-shortest-duration = #(ly:make-moment 1/16)
s4. * 42
\newSpacingSection
\override Score.SpacingSpanner.common-shortest-duration = #(ly:make-moment 1/32)
s4. * 5
\newSpacingSection
\override Score.SpacingSpanner.common-shortest-duration = #(ly:make-moment 1/12)
}
StrukturI= {
\override Score.NonMusicalPaperColumn.page-break-permission = ##f
s8
s4. * 7 s4 s4. * 20 \pageBreak
s4. * 26 \pageBreak
s4. * 25 \pageBreak
}
\header {
title = \myTitel
subtitle = "A-Moll WoO 59"
subsubtitle = ##f
poet = \markup \notensatz
composer = "Ludwig van Beethoven (1770-1827)"
piece = ##f
opus = ##f
}
\paper {
top-margin = 20\mm
ragged-right = ##f
ragged-last = ##f
ragged-bottom = ##f
ragged-last-bottom = ##f
bottom-margin = 15\mm
indent = #0
line-width = 170\mm
print-all-headers = ##f
#(include-special-characters)
print-first-page-number = ##f
first-page-number = #1
% markup-system-spacing.padding = #4
% system-system-spacing.padding = #6
% markup-markup-spacing.padding = #2
tagline = ##f
evenFooterMarkup = \markup
\center-column { " "
\fill-line { \null \concat { \char #169 " Public Domain" } \null } }
oddFooterMarkup = #evenFooterMarkup
oddFooterMarkup =\markup
\center-column { " "
\fill-line { \null \concat { "Quelle: Edition W. Bessel & Co., Petersburg, Platte #6051" } \null }
}
print-first-page-number = ##f
top-markup-spacing.basic-distance = #1
top-markup-spacing =
#'((basic-distance . 1)
(minimum-distance . 0)
(padding . 0)
(stretchability . 0))
system-system-spacing =
#'((basic-distance . 15)
(minimum-distance . 10)
(padding . 5)
(stretchability . 60))
markup-system-spacing.padding = 4
annotate-spacing = ##f
}
\score
{
\new PianoStaff="leadsheet"
<<
\new BarNumberStaff="Discant" \new Voice \RH
\new Dynamics \Dyn
\new Staff="Bass"
<<
\new Voice \LH
\new NullVoice \Struktur
\new NullVoice \StrukturI
>>
\new Dynamics \ped
>>
}
#(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
}
}
Unterseiten