I guess you can write that only in Lilypond. Markups' column and verbatim
could work, but I'd rather go with writing everything on a lualatex
document and using the lyluatex package. Specially because you are not
writing a score, per se, but a document.

Em ter., 28 de out. de 2025, 23:29, Marc Mouries <[email protected]>
escreveu:

> Hi all,
> I’m building a visual guide (“How to write music for violin with
> LilyPond”) for my violin friends and I’d like each example line to look
> like this:
>
>    -
>
>    *Left:* rendered staff (the result)
>    -
>
>    *Middle:* small arrow
>    -
>
>    *Right:* the *LilyPond source text* that produced the staff (wrapped,
>    typewriter font)
>
> I’d like to define helper markup commands so I can write compact examples
> and (ideally) avoid repeating the same fragment twice.
>
> If anyone has ideas, best practices, or knows of an existing helper or
> snippet that does this, I’d be super grateful!
>
> Thanks so much,
> Marc
>
>
> Here’s what I’ve tried so far:
>
>
> \version "2.24.4"
>
> % --- Helper: render music inside markup (no % inside the Scheme form) ---
> #(define-markup-command (writeMusic layout props music) (ly:music?)
>   (let* ((score (ly:make-score music))
>          (lydef (ly:output-def-clone $defaultlayout)))
>     (ly:score-add-output-def! score lydef)
>     (interpret-markup layout props (markup #:score score))))
>
> % --- Example row: left = music object, right = code string  ---
> #(define-markup-command (example_A layout props mus codestr)
>   (ly:music? string?)
>   (interpret-markup layout props
>     #{
>       \markup \fill-line {
>         \column { \writeMusic #mus }
>         \column { \typewriter "⇨" }
>         \column { \typewriter \wordwrap-string #codestr }
>       }
>     #}))
>
>
> #(define-markup-command (example_B layout props mus) (ly:music?)
>   (let ((musicAsString (format #f "~S" mus)))
>     (interpret-markup layout props
>       #{
>         \markup \fill-line {
>           \column { \writeMusic #mus }
>           \column {  "=>" }
>           \column { \typewriter  #musicAsString  }
>         }
>       #})))
>
> % ====== Function example_A forces to type music TWICE ======
> example_bowing = \relative c'' { c4(\downbow d) e(\upbow f) }
> \markup \example_A #example_bowing "c''4(\\downbow d) e(\\upbow f)"
>
> % ====== Function example_B shows scheme code and not lilypond music notes
> ======
> \markup \example_B #example_bowing
>
>

Reply via email to