I'm writing a piano reduction of Gustav Mahler's 4th Symphony (to help study the score and practice music notation, but mainly just for kicks 'n' grins) using GNU LilyPond. (Yes, I know, I'm totally a Mahler Fanboy. So sue me.) ;-)

I'm trying to articulate a minim/half note with tremolo repeat (of quavers/eighths) with staccato dots. I'd like to have a staccato dot for each (assumed) quaver, i.e. four dots under the minim.

What I get in LilyPond (screenshot of PDF output):

Lilypond rendering of my piano reduction of Gustav Mahler's Symphony No. 4


\repeat tremolo 4 { <g d'>8-. }

What I want (snippet of screenshot of orchestral score downloaded from IMSLP):

Screen snippet of same work as written by the composer


Is this possible with LilyPond?

I'm using version 2.18.2, but I'm amenable to upgrading to the newer stable version if needed.

  • 1
    Just when I thought I'd at least seen most musical notation frivolities, there's .... this monstrosity!
    – Creynders
    Commented Nov 30, 2021 at 14:48
  • 1
    Jokes aside, I'm struggling with the correct interpretation: tremolo with a single dot would mean staccato over the full note duration, while with the repeated dots it means staccato for each tremolo movement?
    – Creynders
    Commented Nov 30, 2021 at 14:51
  • 1
    @Creynders Yup, that's the idea. It's not all that unusual, at least speaking from orchestral bowed strings (even if a sim. would be simpler...) Commented Nov 30, 2021 at 19:41
  • @AndyBonner is it properly called "tremolo" though? It's not actually instructing the player to employ the tremolo technique, after all, it's just shorthand for four eighth notes repeating the given pitches. (And now I notice that I'd incorrectly assumed that these were string parts -- "tremolo" for clarinets and bassoons makes even less sense!)
    – phoog
    Commented Jul 9, 2022 at 12:54

3 Answers 3


One possible solution could be based on this snippet for multiple tonguing.

\version "2.20.0"

tongue =
#(define-music-function (parser location dots) (integer?)
    \tweak stencil
      #(lambda (grob)
        (let ((stil (ly:script-interface::print grob)))
          (let loop ((count (1- dots)) (new-stil stil))
            (if (> count 0)
                (loop (1- count)
                      (ly:stencil-combine-at-edge new-stil X RIGHT stil 0.2))
                (ly:stencil-aligned-to new-stil X CENTER)))))

\repeat tremolo 4 { <g d'>8-\tongue #4 }

Basically, instead of . for staccato, insert \tongue #x, where x is the number of desired articulations. It produces:

enter image description here

  • Worked like a charm. Even in version 2.18.2. Thank you.
    – pr1268
    Commented Nov 28, 2021 at 18:43
  • 1
    @Richard After some hint by Jean the method got even simpler!
    – Lazy
    Commented Nov 30, 2021 at 22:15

A very simple solution would be to just places some bold full-stops in a markup, and align if necessary:
(to maintain the staccato effect in the midi file, sill use the normal staccato dot but \omit it)

\repeat tremolo 4 { <g d'>8\omit-.-\markup{\hspace #-0.5 \bold"...."} }

tremolo chord with chord four staccato dots


This is Richard’s answer slightly simplified. I’m putting this here because how am I going to get this into a comment?

Note that the (ly:stencil-aligned-to ... X CENTER) part is not really nescessary.

\version "2.22.0"

#(define (repeat-stencil n pad)
   (grob-transformer 'stencil
     (lambda (grob orig)
       (stack-stencils X RIGHT pad (make-list n orig)))))

tongue =
#(define-music-function (parser location dots) (integer?)
  #{ \tweak stencil #(repeat-stencil dots 0.2) \staccato #})

\repeat tremolo 4 { <g d'>8-\tongue #4 }

Also these are maybe slightly more stable ways to do like Elements in Space did:

\repeat tremolo 4 { <g d'>8\omit-.-\tweak self-alignment-X #CENTER -\tweak parent-alignment-X #CENTER -\markup\bold "...." }

\repeat tremolo 4 { <g d'>8-\tweak font-encoding #'latin1 -\tweak stencil #(lambda (grob) (grob-interpret-markup grob (markup #:bold "....")))-. }

In the first one we replace the hard coded \hspace offset by simply telling Lilypond to center the markup upon itself and to position it a the center of the note. The second one replaces the stencil (that is the actual graphic output) of the staccato dot to the stecil we get from that markup. As Script is musically encoded (so Lilypond expects the font to refer to musical symbols) we also need to change the font-encoding to latin1.

  • And expanding: Centering the stencil is not nescessary as Script uses self-alignment-X = #CENTER, which means that centering is done automatically anyway.
    – Lazy
    Commented Nov 30, 2021 at 19:18
  • Would it be possible to get the number of dots to match the number of repeats automatically? So you'd just have to write something like: \repeat tongue 4 { <g d'>8 } Commented Nov 30, 2021 at 19:50
  • One would need to extend the repeat function for this. But doing a custom function for this would be quite easy. I’d say even better would be a function \tongue duration music, which then adds tonguing for each note or chord in music with a duration that is longer than duration (or maybe better a multiple) and adds dots with a number as quotient of these durations.
    – Lazy
    Commented Nov 30, 2021 at 20:18
  • 1
    @ElementsinSpace Something like this petzel.at/tongue-and-repeat.ly
    – Lazy
    Commented Nov 30, 2021 at 21:16
  • 1
    @ElementsinSpace Or here with the dots arranged more nicely: petzel.at/tongue-and-repeat-square.ly
    – Lazy
    Commented Nov 30, 2021 at 22:01

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.