Hallo Kage,
angesichts der Tatsache, daß es hundert und eine Möglichkeit gibt Akkord-Symbole zu schreiben, die auch alle irgenwo tatsächlich verwendet werden, ist es sehr mühsam den LilyPond-default anzupassen.
Dein Begehr liefert ein gutes Beispiel. Eigentlich braucht man nur eine Zeile in /scm/chord-name.scm zu streichen und wäre am Ziel. (Zumindest glaube ich, daß der output unten das, ist was Dir vorschwebt.)
Stattdessen muß man etliche Definitionen aus zwei verschiedenen scm-files in das eigene ly-file kopieren um dann diese eine Zeile löschen zu können. Die Umbenennugen habe ich nur vorgenommen, um meine eigenen Veränderungen besser erkennbar zu machen.
Der Grund für diese Umständlichkeiten ist einerseits die Tatsache, daß es kein user-interface für diese Änderungen gibt.
Schwieriger wäre es jedoch das zweite Problem anzugehen, denn es hat mir den grundlegenden markup-macros zu tun, die es nicht so direkt erlauben fallweise ein markup-command zu benutzen oder auch nicht oder ein anderes.
Wie dem auch sei. Hier mein Vorschlag:
\version "2.16.2"
#(define ((chord-name->my-german-markup B-instead-of-Bb)
pitch lowercase?)
"Return pitch markup for PITCH, using german note names.
If B-instead-of-Bb is set to #t real german names are returned.
Otherwise semi-german names (with Bb and below keeping the british names)
"
(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))
(define (conditional-kern-before markup bool amount)
"Add AMOUNT of space before MARKUP if BOOL is true."
(if bool
(make-line-markup
(list (make-hspace-markup amount)
markup))
markup))
(define (accidental->markup alteration)
"Return accidental markup for ALTERATION."
(if (= alteration 0)
(make-line-markup (list empty-markup))
(conditional-kern-before
(alteration->text-accidental-markup alteration)
(= alteration FLAT) 0.094725)))
(let* ((name (ly:pitch-notename pitch))
(alt-semitones (pitch-alteration-semitones pitch))
(n-a (if (member (cons name alt-semitones) `((6 . -1) (6 . -2)))
(cons 7 (+ (if B-instead-of-Bb 1 0) 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?))
(accidental->markup (/ (cdr n-a) 2))))))
myGermanChords = {
\set chordRootNamer = #(chord-name->my-german-markup #t)
\set chordNoteNamer = #note-name->german-markup
}
%-------------------- Test -----------------------------------------------------
\layout {
ragged-right = ##f
indent = 0
}
myLayoutOne =
\layout {
\context {
\ChordNames
chordNameLowercaseMinor = ##t
\myGermanChords
}
}
myMajorChords = \chordmode{
c cis d dis e eis f fis g gis a ais b bis c/bes
\break
c ces b bes a aes g ges f fes e ees d des c/b
}
myMinorChords = \chordmode{
c:m cis:m d:m dis:m e:m eis:m f:m fis:m g:m gis:m a:m ais:m b:m bis:m c:m/b
\break
c:m ces:m b:m bes:m a:m aes:m g:m ges:m f:m fes:m e:m ees:m d:m des:m c:m
}
\score {
\new ChordNames {
\myMajorChords
}
\layout { \myLayoutOne }
\header { piece = \markup \column \bold { "Major Chords (my-german)" \vspace #2 } }
}
\score{
\new ChordNames {
\myMinorChords
}
\layout { \myLayoutOne }
\header { piece = \markup \column \bold { "Minor Chords (my-german)" \vspace #2 } }
}
HTH,
Harm