Dear Francois,
there is a way to write the symbols of the Riemann-Maler-Functions with
lilypond.
I've started to write a little library with these symbols, but I'm not
finished yet.
I 've attached the file.
There is still something to do. As You can see, the position of the
"verkuerzte D7" ( I don't know the english word for it) is anything but
perfect.
Here is my code:

\version "2.12.3"
\include"funktionen.ly"

\relative c' {
  \Sdrei c1 \Tdrei g'
  \verkuerzter f \T  e
}

Hello,
>
> I would like to know if there is a way (i search quite a while
> whithout success) to write chords according to Riemann's Function
> Theory. In principle, math would do the trick, but there are some
> arguments for a own syntax (have a look at
> <http://de.wikipedia.org/wiki/Datei:FunktionsAnalyseBach.PNG>)
>
> Thanks in advance
>
> Francois
>
>
\version "2.12.0"
\layout{
  \context { \Staff  \override TextScript #'staff-padding = #4.0 }
 \context {
   \type "Engraver_group"
   \name "Funktion"
      \alias Voice
      \consists "Output_property_engraver" %keine Ahnung, was das bedeuten soll!
   \consists "Text_spanner_engraver"
   \consists "Text_engraver"
   \consists "Axis_group_engraver"
%    \consists "Bar_engraver"
   
   \override VerticalAxisGroup #'minimum-Y-extent = #'(-1 . 1)
 }
 \context { \Score \accepts Funktion }
 \context { \PianoStaff \accepts Funktion }
 } %Ende Layout

% Inspired by slashed-digit from scm/define-markup.scm:
#(define-markup-command (slashed-char layout props ch) (char?)
"A character, with slash."
(let*
((mag (magstep (chain-assoc-get 'font-size props 0)))
(thickness
(* mag
(ly:output-def-lookup layout 'line-thickness)
(chain-assoc-get 'thickness props 1.6)))
(char-stencil (interpret-markup layout props ch))
(num-x (interval-widen (ly:stencil-extent char-stencil X)
(* mag 0.1)))
(num-y (ly:stencil-extent char-stencil Y))
(is-sane (and (interval-sane? num-x) (interval-sane? num-y)))
(slash-stencil
(if is-sane
(ly:make-stencil
`(draw-line
,thickness
,(car num-x) ,(car num-y)
,(cdr num-x) ,(cdr num-y))
num-x num-y)
#f)))
(ly:stencil-add char-stencil slash-stencil)))

%Zuerst die Hauptfunktionen:
%%%%%%%%%%%%% Alle möglichen Tonikas
%zuerst die Durtonikas

Tonika = \markup {T}
T = #(define-music-function (parser location x) (ly:music?)
#{
   \context Voice <<        $x { s1*0_\Tonika} >>
#})

Tonikamitterzimbass = \markup {T { \hspace #-1.5 \raise #0.25 \sub 3      } }
Tdrei = #(define-music-function (parser location x) (ly:music?)
#{
   \context Voice <<        $x {  s1*0_\Tonikamitterzimbass} >>
#})

Tonikamitquintimbass = \markup {T { \hspace #-1.5 \raise #0.25  \sub 5     } }
Tfuenf = #(define-music-function (parser location x) (ly:music?)
#{
   \context Voice <<        $x {  s1*0_\Tonikamitquintimbass } >>
#})
%Tonika als Textspanner
Tspan = {
   \textSpannerDown
   \override TextSpanner #'bound-details #'left #'text =
      \markup {"T" }
       \once \override TextSpanner #'bound-details #'left-broken #'text = ##f %dieser Quatschkram sorgt dafür, dass der Text nicht auf der nächsten Seite von neuem beginnt!!
      \override TextSpanner #'style =
         #'dashed-line
   \override TextSpanner #'dash-period = #0.01
    \override TextSpanner #'bound-details #'right #'attach-dir = #1
      \once \override TextSpanner #'bound-details #'right-broken #'text = ##f %dieser Quatschkram sorgt dafür, dass der Text nicht auf der nächsten Seite von neuem beginnt!!
    \override TextSpanner #'bound-details #'right #'padding = #-0.5
   } %damit das klappt, musst Du danach noch "\start" und "\stopTextSpan" einfuegen, erst dann startet das Symbol!
%dasselbe nun in Moll
tonika = \markup {t}
mt = #(define-music-function (parser location x) (ly:music?)
#{
   \context Voice <<        $x {  s1*0_\tonika} >>
#})

tonikamitterzimbass = \markup {t { \hspace #-1.5 \raise #0.25 \sub 3     } }
tdrei = #(define-music-function (parser location x) (ly:music?)
#{
   \context Voice <<        $x {  s1*0_\tonikamitterzimbass} >>
#})

tonikamitquintimbass = \markup {t { \hspace #-1.5 \raise #0.25 \sub 5     } }
tfuenf = #(define-music-function (parser location x) (ly:music?)
#{
   \context Voice <<        $x {  s1*0_\tonikamitquintimbass } >>
#})
%tonika als Textspanner
tspan = {
   \textSpannerDown
   \override TextSpanner #'bound-details #'left #'text =
      \markup {"t" }
       \once \override TextSpanner #'bound-details #'left-broken #'text = ##f %dieser Quatschkram sorgt dafür, dass der Text nicht auf der nächsten Seite von neuem beginnt!!
      \override TextSpanner #'style =
         #'dashed-line
   \override TextSpanner #'dash-period = #0.01
    \override TextSpanner #'bound-details #'right #'attach-dir = #1
      \once \override TextSpanner #'bound-details #'right-broken #'text = ##f %dieser Quatschkram sorgt dafür, dass der Text nicht auf der nächsten Seite von neuem beginnt!!
    \override TextSpanner #'bound-details #'right #'padding = #-0.5
   }
   %

%Alle Dursubdominanten
Subdominante = \markup {S}
S = #(define-music-function (parser location x) (ly:music?)
#{
   \context Voice <<        $x {  s1*0_\Subdominante} >>
#})

Subdominantemitterzimbass = \markup {S { \hspace #-1.5 \raise #0.25 \sub 3     } }
Sdrei = #(define-music-function (parser location x) (ly:music?)
#{
   \context Voice <<        $x {  s1*0_\Subdominantemitterzimbass} >>
#})
Subdominantemitquintimbass = \markup {S { \hspace #-1.5 \raise #0.25 \sub 5     } }
Sfuenf = #(define-music-function (parser location x) (ly:music?)
#{
   \context Voice <<        $x {  s1*0_\Subdominantemitquintimbass } >>
#})
%%% Moll Subdominante
subdominante = \markup {s}
ms = #(define-music-function (parser location x) (ly:music?)
#{
   \context Voice <<        $x {  s1*0_\subdominante} >>
#})
%sixte ajoutee
%der Sixteajoutee in Grundstellung
SubdominantemitQuinteundSexte = \markup {S { \super \hspace #-1 \raise #2 \teeny 6 }{ \hspace #-2 \raise #-0.8  \super \teeny 5}   }
Sajoutee = #(define-music-function (parser location x) (ly:music?)
#{
   \context Voice <<        $x { \once \override TextScript #'Y-offset =#-2 s1*0_\SubdominantemitQuinteundSexte } >>
#})
SubdominantemitQuinteundSexteTerzimBass = \markup {S { \super \hspace #-1 \raise #2 \teeny 6 }{ \hspace #-2 \raise #-0.8  \super \teeny 5} \hspace #-3 \raise #0.25 \sub 3   }
Sajouteedrei = #(define-music-function (parser location x) (ly:music?)
#{
   \context Voice <<        $x { \once \override TextScript #'Y-offset =#-2 s1*0_\SubdominantemitQuinteundSexteTerzimBass } >>
#})
SubdominantemitQuinteundSexteQuinteimBass = \markup {S { \super \hspace #-1.5 \raise #1.5 \teeny 6 }
 \hspace #-2 \raise #0.25 \sub 5   }
Sajouteefuenf = #(define-music-function (parser location x) (ly:music?)
#{
   \context Voice <<        $x { \once \override TextScript #'Y-offset =#-2 s1*0_\SubdominantemitQuinteundSexteQuinteimBass } >>
#})

SubdominantemitQuinteundSexteSexteimBass = \markup {S { \super \hspace #-1.5 \raise #1.5 \teeny 5 }
 \hspace #-2 \raise #0.25 \sub 6   }
Sajouteesechs = #(define-music-function (parser location x) (ly:music?)
#{
   \context Voice <<        $x { \once \override TextScript #'Y-offset =#-2 s1*0_\SubdominantemitQuinteundSexteSexteimBass } >>
#})
%Die Sixteajoutee und ihre Umkehrungen in Moll!

subdominantemitQuinteundSexte = \markup {s { \super \hspace #-1 \raise #2 \teeny 6 }{ \hspace #-2 \raise #-0.8  \super \teeny 5}   }
sajoutee = #(define-music-function (parser location x) (ly:music?)
#{
   \context Voice <<        $x { \once \override TextScript #'Y-offset =#-2 s1*0_\subdominantemitQuinteundSexte } >>
#})
subdominantemitQuinteundSexteTerzimBass = \markup {s { \super \hspace #-1 \raise #2 \teeny 6 }{ \hspace #-2 \raise #-0.8  \super \teeny 5} \hspace #-3 \raise #0.25 \sub 3   }
sajouteedrei = #(define-music-function (parser location x) (ly:music?)
#{
   \context Voice <<        $x { \once \override TextScript #'Y-offset =#-2 s1*0_\subdominantemitQuinteundSexteTerzimBass } >>
#})
subdominantemitQuinteundSexteQuinteimBass = \markup {s { \super \hspace #-1.5 \raise #1.5 \teeny 6 }
 \hspace #-2 \raise #0.25 \sub 5   }
sajouteefuenf = #(define-music-function (parser location x) (ly:music?)
#{
   \context Voice <<        $x { \once \override TextScript #'Y-offset =#-2 s1*0_\subdominantemitQuinteundSexteQuinteimBass } >>
#})
subdominantemitQuinteundSexteSexteimBass = \markup {s { \super \hspace #-1.5 \raise #1.5 \teeny 5 }
 \hspace #-2 \raise #0.25 \sub 6   }
sajouteesechs = #(define-music-function (parser location x) (ly:music?)
#{
   \context Voice <<        $x { \once \override TextScript #'Y-offset =#-2 s1*0_\subdominantemitQuinteundSexteSexteimBass } >>
#})
%Jetzt der Ssechs
SubdominantemitSexte =
\markup { S \hspace #-1.5 \raise #0 \super \teeny 6 }
Ssechs = #(define-music-function (parser location x) (ly:music?)
#{
   \context Voice <<        $x { \once \override TextScript #'Y-offset =#-2
 s1*0_\SubdominantemitSexte } >>
#})
subdominantemitSexte =
\markup { s \hspace #-1.5 \raise #-0.5 \super \teeny 6 }
ssechs = #(define-music-function (parser location x) (ly:music?)
#{
   \context Voice <<        $x { \once \override TextScript #'Y-offset =#-2
 s1*0_\subdominantemitSexte } >>
#})
%der berühmte Neapolitaner!
Neapolitaner =
\markup { s \hspace #-1.5 \raise #-0.5 \super \teeny n }
sn = #(define-music-function (parser location x) (ly:music?)
#{
   \context Voice <<        $x { \once \override TextScript #'Y-offset =#-2
 s1*0_\Neapolitaner } >>
#})
%Die sogenannten Nebenfunktionen in Dur, erstmal nur deren GrundStellungen:
Tonikaparallele = \markup {Tp}
Tp = #(define-music-function (parser location x) (ly:music?)
#{
   \context Voice <<        $x { s1*0_\Tonikaparallele} >>
#})

Subdominantparallele = \markup {Sp}
Sp = #(define-music-function (parser location x) (ly:music?)
#{
   \context Voice <<        $x { s1*0_\Subdominantparallele} >>
#})
Dominantparallele = \markup {Dp}
Dp = #(define-music-function (parser location x) (ly:music?)
#{
   \context Voice <<        $x { s1*0_\Dominantparallele} >>
#})
Tonikagegenklang = \markup {Tg}
Tg = #(define-music-function (parser location x) (ly:music?)
#{
   \context Voice <<        $x { s1*0_\Tonikagegenklang} >>
#})
%Diese nun auch in Moll
tonikaParallele = \markup {tP}
tP = #(define-music-function (parser location x) (ly:music?)
#{
   \context Voice <<        $x { s1*0_\tonikaParallele} >>
#})
tonikaParalleleterzimbass = \markup {tP { \hspace #-1.5 \raise #0.25
 \sub 3      } }
tPdrei= #(define-music-function (parser location x) (ly:music?)
#{
   \context Voice <<        $x {
s1*0_\tonikaParalleleterzimbass} >>
#})
tonikaParalleleQuintimbass = \markup {tP { \hspace #-1.5 \raise #0.25
 \sub 3      } }
tPfuenf= #(define-music-function (parser location x) (ly:music?)
#{
   \context Voice <<        $x {
s1*0_\tonikaParalleleQuintimbass} >>
#})
subdominantParallele = \markup {sP}
sP = #(define-music-function (parser location x) (ly:music?)
#{
   \context Voice <<        $x { s1*0_\subdominantParallele} >>
#})
subdominantParalleleterzimbass = \markup {sP { \hspace #-1.5 \raise #0.25
 \sub 3      } }
sPdrei= #(define-music-function (parser location x) (ly:music?)
#{
   \context Voice <<        $x {
s1*0_\subdominantParalleleterzimbass} >>
#})
subdominantParalleleQuintimbass = \markup {sP { \hspace #-1.5 \raise #0.25
 \sub 3      } }
sPfuenf= #(define-music-function (parser location x) (ly:music?)
#{
   \context Voice <<        $x {
s1*0_\subdominantParalleleQuintimbass} >>
#})
dominantParallele = \markup {dP}
dP = #(define-music-function (parser location x) (ly:music?)
#{
   \context Voice <<        $x { s1*0_\dominantParallele} >>
#})
dominantParalleleterzimbass = \markup {dP { \hspace #-1.5 \raise #0.25
 \sub 3      } }
dPdrei= #(define-music-function (parser location x) (ly:music?)
#{
   \context Voice <<        $x {
s1*0_\subdominantParalleleterzimbass} >>
#})
subdominantParalleleQuintimbass = \markup {dP { \hspace #-1.5 \raise #0.25
 \sub 3      } }
dPfuenf= #(define-music-function (parser location x) (ly:music?)
#{
   \context Voice <<        $x {
s1*0_\subdominantParalleleQuintimbass} >>
#})
%ein paar Typische Wendungen: Der WechelQuartsextakkord
sechsvier = \markup { \hspace #'1 { \column {  \raise #-4 \teeny 6 \raise #-3 \teeny 4 } } }
fuenfdrei = \markup { \hspace #'1 { \column {  \raise #-4 \teeny 5 \raise #-3 \teeny 3 } } }
Wechselquartsext= #(define-music-function (parser location x y z ) (ly:music? ly:music? ly:music?)
#{
  \Tspan \context Voice << $x {   s1*0 \startTextSpan^\fuenfdrei } >>
  \context Voice << $y { s1*0^\sechsvier }>>
  \context Voice << $z { s1*0 \stopTextSpan^\fuenfdrei }>>
#})
Dspan = {
   \textSpannerDown
   \override TextSpanner #'bound-details #'left #'text =
      \markup {"D" }
       \once \override TextSpanner #'bound-details #'left-broken #'text = ##f %dieser Quatschkram sorgt dafür, dass der Text nicht auf der nächsten Seite von neuem beginnt!!
      \override TextSpanner #'style =
         #'dashed-line
   \override TextSpanner #'dash-period = #0.01
    \override TextSpanner #'bound-details #'right #'attach-dir = #1
      \once \override TextSpanner #'bound-details #'right-broken #'text = ##f %dieser Quatschkram sorgt dafür, dass der Text nicht auf der nächsten Seite von neuem beginnt!!
    \override TextSpanner #'bound-details #'right #'padding = #-0.5
   }

Vorhaltsquartsext= #(define-music-function (parser location x y ) (ly:music? ly:music? )
#{
  \Dspan \context Voice << $x {   s1*0 \startTextSpan^\sechsvier } >>
  \context Voice << $y { s1*0 \stopTextSpan^\fuenfdrei }>>
#})
%%Die Dominante
Dominante = \markup {D}
D = #(define-music-function (parser location x) (ly:music?)
#{
  \context Voice <<        $x {  s1*0_\markup { \Dominante }  } >>
#})

Dominantemitterzimbass = \markup {D { \hspace #-1.5 \raise #0.25 \sub 3      } }
Ddrei = #(define-music-function (parser location x) (ly:music?)
#{
   \context Voice <<        $x {  s1*0_\Dominantemitterzimbass} >>
#})
Dominantemitquintmbass = \markup {D { \hspace #-1.5 \raise #0.25 \sub 5      } }
Dfuenf = #(define-music-function (parser location x) (ly:music?)
#{
   \context Voice <<        $x {  s1*0_\Dominantemitquintmbass} >>
#})

% Dominante in klammern
KlammerDominante = \markup {(D)}
kD = #(define-music-function (parser location x) (ly:music?)
#{
   \context Voice <<        $x { \once \override TextScript #'extra-offset = #'(0 . 2.1)  s1*0_\markup {(D)} } >> }
#})

klammerDominantemitterzimbass = \markup {\KlammerDominante { \hspace #-1.5 \raise #0.25 \sub 3      } }
kDdrei = #(define-music-function (parser location x) (ly:music?)
#{
   \context Voice <<        $x {  s1*0_\klammerDominantemitterzimbass} >>
#})
klammerDominantemitquintmbass = \markup {D { \hspace #-1.5 \raise #0.25 \sub 5      } }
kDfuenf = #(define-music-function (parser location x) (ly:music?)
#{
   \context Voice <<        $x {  s1*0_\klammerDominantemitquintmbass} >>
#})
%alle Dsiebens
Dominantsept = \markup { D  \hspace #-1.75 \super \small 7  }
% verkuerzter D7
Dominantemitquinteimbassohnegrundtonmitsepte = \markup {  \raise #3 \slashed-char #"D"  \raise #3 \super \teeny 7 \hspace #-3 \raise #3.25 \sub 5   }
verkuerzter = #(define-music-function (parser location x) (ly:music?)
#{
  \context Voice  <<        $x   s1*0 _\Dominantemitquinteimbassohnegrundtonmitsepte >> 
#})
Dsieben= #(define-music-function (parser location x) (ly:music?)
#{
   \context Voice <<        $x { \once \override TextScript #'extra-offset = #'(0 . 3.1)  s1*0_\Dominantsept} >>
#})
DsiebenTerzimBass = \markup {D { \hspace #-2 \sub 3   \hspace #-1.75 \super \small 7  } }
Dsiebenrei =  #(define-music-function (parser location x) (ly:music?)
#{
   \context Voice <<        $x { \once \override TextScript #'extra-offset = #'(0 . 3.1)  s1*0_\DsiebenTerzimBass} >> }
#})
Dominantterzquart = \markup {D { \hspace #-2 \sub 5   \hspace #-1.75 \super \small 7  } }
Dsiebenfuenf = #(define-music-function (parser location x) (ly:music?)
#{
   \context Voice <<        $x { \once \override TextScript #'extra-offset = #'(0 . 3.1)  s1*0_\Dominantterzquart} >> }
#})

% die Doppeldominante, mit allen Umkehrungen:
Doppeldominante = \markup{D \hspace#-2.2 \raise #0.9 D }
DD = #(define-music-function (parser location x) (ly:music?)
#{
   \context Voice <<        $x {   s1*0_\Doppeldominante} >>
#})
%DoppeldominanteTerzimBass = \markup { \Doppeldominante
_______________________________________________
lilypond-user mailing list
[email protected]
http://lists.gnu.org/mailman/listinfo/lilypond-user

Reply via email to