PMW versus Lilypond

A comparison

PMW and lilypond are two music typesetters that both use plain ASCII text files as input, and render PostScript, MIDI, and in the case of lilypond, optionally some other formats, as output. In that, they are very similar.

However, their input syntaxis is significantly different. This web page tries to make a fair comparison. Corrections are welcome by mail (see below).

FeatureLilypondPMWPMW graphicnotes
Notes and lengths
c1 c2 c4 c8 c16 c32
C+ C c c- c= c=-
lilypond takes defaults for note lengths from the previous note if not otherwise set. This is not optional in PMW.
Accidentals
c4 cis cis cis! ces c
c #c c #c $c %c
Lilypond requires you to enter the pitch of the music; it will use that in combination with the key that the piece was declared in to decide where accidentals need to be placed. Note the use of the "!" to force an accidental. PMW just requires you to place the accidentals where they need to appear.
Repeats
\repeat volta 2 { c1 }
\alternative {
  { c }
  { d }
}
C+ | [1st] C+ :)| [2nd] D+
The PMW source is much closer visually to the music. Also, lilypond has severe issues with rendering repeats for MIDI.
Slurs, ties and dynamics
a4\< b\( c ~ c d\)\!
< a [slur] b c_ c d [endslur] <
Note that slurs in PMW can be nested; they can't in lilypond (that is, lilypond has two types of slurs which you can use at the same time, but there's nothing beyond that). [endslur] can be abbreviated to [es]. The opening bracket of the slur in lilypond is written after the note on which it hangs; for PMW you need to group the notes that need to be in the slur between [slur] and [endslur] (or [es]), which is much clearer. Finally, PMW will convert ties to slurs if they are between notes of different pitch; lilypond won't.