\version "2.18.2" % Probably better as a vector lookup #(define letter-names '("C" "D" "E" "F" "G" "A" "B")) #(define alteration-symbols `( (-1/2 . ,(make-flat-markup)) (0 . ,(make-null-markup)) (1/2 . ,(make-sharp-markup)) )) #(define (format-key p) (let* (;(p (ly:music-property ne 'pitch)) (nn (ly:pitch-notename p)) (alt (ly:pitch-alteration p)) (letter (list-ref letter-names nn)) (alteration (ly:assoc-get alt alteration-symbols))) #{ \markup \concat { #letter #alteration } #})) #(define-markup-command (firstNoteAndKey layout props mus) (ly:music?) (let* ((keey (extract-named-music mus 'KeyChangeEvent)) (tonic (ly:music-property (car keey) 'tonic)) (notes (extract-named-music mus 'NoteEvent)) (first-ne (car notes)) (first-pitch (ly:music-property first-ne 'pitch))) (interpret-markup layout props (make-concat-markup (list (format-key first-pitch) "/" (format-key tonic)))))) amazingGrace = \relative c' { \key g \major \time 3/4 \partial 4 d4 g2 b8 g b2 a4 g2 e4 d2 } \markup \bold \firstNoteAndKey #amazingGrace { \amazingGrace } { \override Score.RehearsalMark.break-align-symbols = #'(clef staff-bar key-signature) % CENTER doesn't center over clef?! \once \override Score.RehearsalMark.self-alignment-X = #0.5 \mark \markup \firstNoteAndKey #amazingGrace \amazingGrace } \paper { indent = 0 }