Lilypond is NOT the solution
2005-11-30Finally, I really made up my mind. In the end I can only use mup despite its limitations. Typesetting music in lilypond is like writing program — although lilypond is more flexible, it takes a tremendous effort even to typeset a single passage, not to mention multi-stave music. I’ll try to summarize the pros and cons for using lilypond and mup on orchestral work:
- In lilypond, the accidental of each note is automatically handled; what you type is what it would sound like in c major, and lilypond would automatically add/subtract sharp or flat sign for each note according to current major/minor. In contrast, mup purely takes care of the visual appearance; you would typeset according to how it appears in score. If there is a sharp on the sheet, you add a sharp. Lilypond has an advantage here, as it allows changing accidental style readily (20th century music, cautionary accidental etc).
- Mup input is entered in a per-bar basis; this is the same for multi-stave work. Enter all the staves and voices for one bar, group them together, then enter the 2nd bar. In contrast, lilypond handles it in a per-voice way — yes, even polyphonic passage in single staff is entered voice by voice. No, I didn’t mean you are forced to do so; what I mean is you would find it even more clumsy and time wasting to enter it bar by bar in lilypond.
I find mup’s treatment much more convenient, as it is way more easy to debug non-fatal errors when something goes wrong. With lilypond, especially when using relative octave mode, changing one note may affect the whole score’s layout and note positioning (all notes may increase or decrease 1 whole octave, sometimes even 2). That’s very hard to trace. But lilypond’s treatmeat isn’t always that bad — treating the whole passage of a voice as a unit allows cross-bar beaming easily, and that’s why I want to try out lilypond in the first place; just that I realized lilypond style isn’t my cup of tea. - As a result of per-voice handling, lilypond allows a per-stave setting for virtually every attribute, like time signature, key signature and so on. This is a big plus. As of Mup 5.1 there is still no such thing as per-stave time signature yet, one has to do some hack to get it done, and it’s really painful to get it work in multi-stave scores (think about changing time signature for every stave but one).
- Vertical collision detection between staves — basically lilypond has no such thing, while mup handles it almost perfectly. Bad for me.
- Another sore point — dynamics (e.g. sfz) between staves. Again, mup handles it readily. Well, there is a ‘hack’ documented in lilypond user guide that does this. But guess what? Dynamics is treated as an empty stave containing only spaces and dynamics themselves, in between 2 staves. Weird huh? This shows the flexibility of lilypond, as well as the sutpidity. Besides it is really hard to merge the hack into the score, it’s complex. For orchestral work this is Pain In The Ass ™.
So based on the last 2 points I decided I can’t use lilypond at all, since it may take me many years (literally) to typeset a whole concerto. It takes me 3 days to figure out how to adjust the vertical position of a dynamics mark. I’m not really willing to work like a programmer in order to typeset something.
This is not to say lilypond is bad though. Its flexibility and the scheme support allows it to do quite a lot of unusual layout, which is not possible with mup (unless you know PostScript internals). However, it really was using too much time for me to learn, and time is what I am lacking of.










