Are you thinking of this as a polychord (one chord above another, rather than a 
chord over a bass note as is usually with a “slash” chord)?

Here is a snippet intended to be used as an \include, if I recall correctly, to 
denote poly chords in \chordmode  I haven’t had occasion to use it in years, I 
didn’t write it, and have not tested it against more recent versions of 
Lilypond since I seem to never need to use polychords.  No doubt something more 
elegant could be constructed now, but hopefully there is seething helpful in 
here.


***********************************************
\version "2.18.0"

#(define-markup-command (transposed-chord-root-name layout props a b) (number? 
number?)
  #:properties ((cause #f))
  "Print the root of the chord transposed."
  (interpret-markup layout props
    (markup (note-name->markup
             (ly:pitch-transpose (ly:event-property cause 'pitch) 
(ly:make-pitch 0 a b))
                                #f))))

#(define-markup-command (chord-root-name layout props) ()
  #:properties ((cause #f))
  "Print the root of the chord."
  (interpret-markup layout props
    (markup (note-name->markup (ly:event-property cause 'pitch) #f)
    )))

#(define-public (silent-chord-root-namer pitch lowercase?)
   (markup "")
)

%{
#(define-markup-command (polychord-column layout props args)
 (markup-list?)
  ;#:properties ((direction)
  ;(baseline-skip))
        
 (let* ((args-length-ls (sort (map (lambda (x)
                (interval-length
                   (ly:stencil-extent
                      (interpret-markup layout props x)
                    X)))
                args)
                  >))
       ; baseline-skip is hard-coded!
       ; if you change this don't forget to change 0.65
       ; in: #:translate (cons 0 (* 0.65 baseline-skip))
       (baseline-skip 1.4)
       (ln-mrkp (markup #:translate (cons 0 (* 0.65 baseline-skip))
                 #:draw-line (cons (car args-length-ls) 0)))
       (new-args (list (car args) ln-mrkp (cadr args))))
       ; direction is hard-coded!
 (stack-lines 1 ;(if (number? direction) direction -1)
              0.0
              baseline-skip
              (interpret-markup-list layout props new-args))))
%}
              
#(define (insert-elt l1 l2 elt)
 "Inserts a new element between every element of list l1
  and outputs this as new list l2.
  While starting, l2 is supposed to be '() "
  (set! l2 (reverse (append (list elt (car l1)) l2)))
  (if (= 1 (length (cdr l1)))
    (append l2 (last-pair l1))
    (insert-elt (cdr l1) (reverse l2) elt)))

#(define-markup-command (dir-column-line layout props direction args)
  (number? markup-list?)
  (let* ((args-length-ls (sort (map (lambda (x) 
                        (interval-length 
                           (ly:stencil-extent 
                              (interpret-markup layout props x) 
                            X))) 
                        args) 
                          >))
         ; baseline-skip is hard-coded!
         (baseline-skip 0.4)
         (ln-mrkp (markup #:draw-line (cons (car args-length-ls) 0)
                          #:vcenter
                          #:vspace 0.2))
         (new-args (insert-elt args '() ln-mrkp)))
  (stack-lines (if (number? direction) direction -1)
               0.0
               baseline-skip
               (interpret-markup-list layout props new-args))))

polychordExceptionMusic = {
  <c e g des' f' aes'>1-\markup { \dir-column-line #1
                       { \chord-root-name \transposed-chord-root-name #1 #-1/2 
} }
  <c e g d' fis' a'>1-\markup { \dir-column-line #1
                       { \chord-root-name \transposed-chord-root-name #1 #0 } }
}

%#(top-repl)

polychordExceptions = #( append
  ( sequential-music-to-chord-exceptions polychordExceptionMusic #t)
 ignatzekExceptions)

cmJazz = {
  \set chordNameExceptions = #ignatzekExceptions
  \set chordRootNamer = #note-name->markup
}

cmPoly = {
  \set chordNameExceptions = #polychordExceptions
  \set chordRootNamer = #silent-chord-root-namer
}

theMusic = \chords { 
    \cmPoly
       c1:5.9-.11.13-
       c1:5.9.11+.13
       des1:5.9.11+.13
       fis1:5.9.11+.13
    \cmJazz
       c1:5.9-.11.13-
}

\layout {
  ragged-right = ##t
}


\score {
        \new StaffGroup <<
        <<
        \context ChordNames \theMusic 
        \new Staff = "staff" \relative c' { c1 d e f g }
        >>
        <<
        \context ChordNames \theMusic
        \new Staff = "staff" \relative c' { c1 d e f g }
        >>
        >>
}

**********************************************************

> On Mar 24, 2021, at 6:50 PM, Calvin Ransom <calvinjran...@gmail.com> wrote:
> 
> Thank you Aaron,
> I had to sleep on it and when I woke up it clicked instantly.
> I was able to get the chords to work but I ran across a chord that I am not 
> able to write the following chord, If anyone has any ideas on how I can write 
> this I would greatly appreciate it.
> This is what my attempt got me so far:
> %%%snippet begins%%%
> \version "2.22.0"
> \score{
>   \relative{
>     b4^\markup{
>       \center-column{
>         \line{
>           \larger{
>             \larger  \override #'(offset . 5)\override #'(thickness . 1) 
> \underline {
>               "G"
>           }
>           } 
>           \line
>           "C"
> }
> }
> }
> }
> }
> }
> %%%snippet ends%%% 
> <image.png>
> Cheers,
> Calvin Ransom
> 
> On Tue, Mar 23, 2021 at 9:59 PM Aaron Hill <lilyp...@hillvisions.com 
> <mailto:lilyp...@hillvisions.com>> wrote:
> On 2021-03-23 9:26 pm, Calvin Ransom wrote:
> > I am trying to write something like the image below. I was able to
> > typeset the more normal chords ok but I don’t know how to place parts
> > of them in parentheses or how to type the maj9
> 
> Review chordNameExceptions and the associated snippet [1] in the 
> Notation reference.
> 
> [1]: 
> http://lilypond.org/doc/v2.22/Documentation/notation/displaying-chords#index-chordNameExceptions-2
>  
> <http://lilypond.org/doc/v2.22/Documentation/notation/displaying-chords#index-chordNameExceptions-2>
> 
> 
> -- Aaron Hill

Reply via email to