Notensatz (MusiXTeX/LilyPond)

Das MusiXTeX-Handbuch beginnt mit einer Feststellung: Musik ist keine Zeile von Zeichen wie Prosa, sondern eine zweidimensionale Matrix. Genau daran liegt es, dass LaTeX, das Mathematik so schön setzt, Notensatz nicht ohne Hilfe bewältigt. Die waagerechte Position einer Note steht erst fest, wenn klar ist, wie viele Takte in die Zeile passen – und das ist erst klar, wenn die Noten Breiten haben. Eine Henne-Ei-Schleife. Diese Seite verfolgt MusiXTeX, das die Schleife mit drei Durchläufen aufbricht, LilyPond, das dieselbe Frage mit dem Verlassen von TeX beantwortet hat, und die kompakte ABC-Notation – samt der nüchternen Frage, was in TeX Live tatsächlich enthalten ist und was nicht.

Warum LaTeX allein keine Noten setzen kann

Die Antwort: Noten laufen nicht nur quer über die Seite, sondern auch nach unten. TeX reiht Kästen waagerecht zu einer Zeile und stapelt Zeilen zu einer Seite; für Prosa und Mathematik genügt das. Eine Partitur hat dagegen mehrere Systeme, die gleichzeitig fortschreiten, und der Notenabstand dehnt oder staucht sich je nachdem, wie viele Takte in eine Akkolade kommen. Das Handbuch nennt das waagerechtes Aneinanderreihen senkrechter Kämme, und genau so sieht die Eingabe aus: alles von \notes bis \en ist ein Kamm, und darin trennt & die Systeme, vom untersten Instrument aufwärts gezählt. LaTeX besitzt diese Mechanik nicht – deshalb braucht Notensatz immer eine Zusatzschicht.

Diese Zusatzschicht gibt es in zwei Ausprägungen. Die eine bleibt innerhalb von TeX: Fonts und Makros hinzufügen und TeX selbst gravieren lassen – das ist MusiXTeX. Die andere geht aus TeX heraus: ein spezialisiertes Programm setzt die Partitur, und das Ergebnis kommt als Bild über \includegraphics zurück – so arbeiten LilyPond und die ABC-Werkzeuge. Das Reizvolle daran: Beide hängen historisch zusammen. LilyPond entstand, als zwei Leute, die eigentlich einen Präprozessor für MusiXTeX bauen wollten, dieses Vorhaben aufgaben.

Die drei Durchläufe von MusiXTeX – warum musixflx dazwischensteht

Der Standardweg besteht aus drei Durchläufen – etexmusixflxetex –, und das musixflx in der Mitte ist gar kein TeX, sondern ein eigenes Programm, das ausschließlich Zeilen umbricht. Der Reihe nach: Im ersten TeX-Lauf öffnet \startmuflex die Datei jobname.mx1 und schreibt taktweise auf, wie viel harter und wie viel dehnbarer Raum in jedem Takt steckt. musixflx liest diese .mx1, entscheidet, wie viele Takte in jede Akkolade kommen, und schreibt die Dehnungsfaktoren je Akkolade in jobname.mx2. Im dritten Durchlauf liest TeX beide Dateien, und erst dann steht der endgültige Abstand fest. Die Henne-Ei-Schleife vom Seitenanfang wird also über einen Umweg durch eine Datei aufgebrochen.

Diese drei Läufe muss niemand von Hand anstoßen. TeX Live liefert das Wrapper-Skript musixtex mit: musixtex score.tex führt die drei Durchläufe der Reihe nach aus und ruft bei Bedarf dvips und ps2pdf auf. Mit -p geht es auf kurzem Weg über pdfetex direkt zu PDF, mit -i bleiben die Zwischendateien .mx1 und .mx2 erhalten – öffnet man die .mx2, stehen dort Zeilen wie \lineset{1}{2}{...}, also wörtlich die Entscheidung „zwei Takte in Akkolade eins“. Übrigens ist musixflx in TeX Live selbst ein texlua-Skript: Dieses „eigene Programm“ läuft also auf dem Lua-Interpreter, der in der TeX-Binärdatei steckt.

terminal
musixtex score.tex      # 3 passes: etex -> musixflx -> etex, then dvips + ps2pdf
musixtex -p score.tex   # same 3 passes, straight to PDF via pdfetex
musixtex -i score.tex   # keep score.mx1 and score.mx2 so you can read them
musixtex -1 score.tex   # single pass: fast draft, spacing NOT final

Eine Falle: Ein mit -1 (einem einzigen Durchlauf) erzeugtes PDF hat noch keine fertige Akkoladeneinteilung. Zum schnellen Zwischenblick ist das praktisch, aber die Fassung, die abgegeben wird, darf nie mit -1 entstehen. Zweiter Punkt: MusiXTeX verlangt nicht das schlichte tex, sondern e-TeX. Diese Umstellung erfolgte in Version 1.15 (April 2011), um dem Mangel an Registern zu entkommen – deshalb ruft das Skript musixtex standardmäßig etex auf.

Warum drei Durchläufe? Die Antwort steckt in der Geschichte von MusiXTeX selbst. Das Kapitel „A very brief history“ im mitgelieferten Handbuch führt den Gedanken, Noten mit TeX zu setzen, auf etwa 1987 zurück – auf eine Bonner Masterarbeit von Andrea Steinbach und Angelika Schofer, Automatisierter Notensatz mit TeX. Ihr Paket MuTeX beherrschte nur ein einziges System, hinterließ aber zwei Ideen: Balken und Bögen aus einer großen Zahl von Fontzeichen zusammenzusetzen und den Leim (glue) von TeX für horizontale Abstände und Ausgleich zu nutzen. Um 1991 erweiterte Daniel Taupin das mit MusicTeX auf mehrere Systeme – zu einem Preis: Die Freiheit bei den horizontalen Abständen ging verloren, und zu weite oder zu enge Lücken vor und nach Taktstrichen zu vermeiden, wurde zur Sache von Versuch und Irrtum, denn MusicTeX arbeitete einstufig. Abhilfe schuf nur ein mehrstufiges Verfahren, und genau auf dieser Einsicht schrieben Taupin, Ross Mitchell und Andreas Egler um 1997 das erste MusiXTeX. Das musixflx mitten im Ablauf ist diese Entscheidung, unverändert bis heute.

Taupin war von Beruf Physiker. Er kam 2003 bei einem Kletterunfall ums Leben – so steht es in der README und im Vorspann des Handbuchs, beide in TeX Live 2024 enthalten. Die Pflege liegt seither bei Don Simons, Hiroaki Morimoto und Bob Tennent. Das musixflx in der Mitte war ursprünglich ein Programm, das Ross Mitchell zwischen 1992 und 1997 schrieb; Nikhil Helferty schrieb es 2011 in Lua neu, und diese Fassung ist das heutige musixflx.lua.

Ein minimales MusiXTeX-Dokument – und warum \begin{music} „Undefined control sequence“ meldet

MusiXTeX kennt zwei Eingabeformen, eine für plain TeX und eine für LaTeX; werden sie vermischt, geht es schief. In der plain-TeX-Form, geladen mit \input musixtex, gibt es kein \begin{music}: Wer es schreibt, erhält ! Undefined control sequence. und obendrein das Wort „music“ als Fließtext gesetzt. Die Umgebung music wird auf der anderen Seite definiert, in musixblx.tex, also in der LaTeX-Form, die mit \usepackage{musixtex} geladen wird. Das plain-TeX-Gerüst sieht so aus: Die Musik steht zwischen \startpiece und \endpiece, dieses Paar wird von \startmuflex\endmuflex eingefasst, und die Datei endet mit \bye.

score.tex
% plain TeX form: run it with  musixtex -p score.tex
\input musixtex
\instrumentnumber{1}
\setclef1\treble
\generalmeter\meterC
\startmuflex
\startpiece
  \NOtes\qa{cdef}\en\bar
  \NOTes\ha{g}\en
\endpiece
\endmuflex
\bye
score-latex.tex
% LaTeX form: the music environment exists only here.
% Run it with  musixtex -p -l score-latex.tex
\documentclass{article}
\usepackage{musixtex}
\begin{document}
\begin{music}
  \instrumentnumber{1}
  \setclef1\treble
  \generalmeter\meterC
  \startpiece
    \NOtes\qa{cdef}\en\bar
    \NOTes\ha{g}\en
  \endpiece
\end{music}
\end{document}

Ein wenig Vokabular macht den Rest lesbar. \NOtes\en ist ein „Kamm“, und die zunehmenden Großbuchstaben – \notes, \Notes, \NOtes, \NOTes, \NOTEs – wählen den Grundabstand, der zu einem Notenwert gehört, von der Sechzehntel bis zur Ganzen immer breiter. \qa{cdef} bedeutet „halslose Viertel auf c d e f“, \ha{g} eine halslose Halbe auf g, und \bar ist ein Taktstrich. \instrumentnumber legt die Zahl der Instrumente fest, \setclef1\treble setzt das erste in den Violinschlüssel, \generalmeter\meterC auf Viervierteltakt. Weil die rohen Makros so aussehen, sind die gleich beschriebenen Präprozessoren zur Eingabe geworden, die tatsächlich jemand schreibt.

pmx, M-Tx und autosp: MusiXTeX nicht von Hand schreiben

Das MusiXTeX-Handbuch sagt selbst, die meisten Aufgaben ließen sich vollständig über einen Präprozessor erledigen, ohne die Befehle oder die Syntax von MusiXTeX zu lernen. PMX für Instrumentalmusik und M-Tx für Vokalmusik mit Text sind die beiden Standards, und da das zweite in das erste mündet, ergibt sich die Kette M-Tx → PMX → MusiXTeX. TeX Live 2024 liefert die Programme mit, wenn auch mit etwas eigenwilligen Namen: Das PMX-Programm heißt pmxab, das M-Tx-Programm prepmx (mit m-tx als Alias).

Praktischerweise wählt das Skript musixtex seinen Einstiegspunkt anhand der Dateiendung. Eine .mtx beginnt bei prepmx, eine .pmx bei pmxab, eine .aspc bei autosp – und läuft anschließend ohne weiteres Zutun durch alle drei Durchläufe. autosp ist der Präprozessor, der die Wahl zwischen \notes / \Notes / \NOtes anhand der Notenwerte automatisiert, sodass man diese Großbuchstaben nie von Hand schreibt. Mit xml2pmx steigt man außerdem bei MusicXML ein – der Weg für Material aus anderer Notationssoftware.

terminal
musixtex piece.pmx   # pmxab -> etex -> musixflx -> etex
musixtex song.mtx    # prepmx -> pmxab -> etex -> musixflx -> etex
musixtex draft.aspc  # autosp -> etex -> musixflx -> etex
musixtex score.xml   # xml2pmx -> pmxab -> etex -> musixflx -> etex
musixtex -m song.mtx # stop after producing the .pmx, to inspect or hand-edit

Noch ein Punkt: Die Fonts liegen in einem eigenen Paket. Die Notenfonts von MusiXTeX sind als musixtex-fonts ausgegliedert; wer nur die Makros installiert, kann nicht kompilieren. Eine normale TeX-Live-Installation enthält beides, eine minimale stolpert hier. Mitgeliefert sind außerdem Erweiterungen: musixlyr.tex (Rainer Dunker) für Liedtext, musixcrd (Robert Hennig) für Akkordsymbole.

LilyPond mit lilypond-book oder lyluatex: eine Engine außerhalb von TeX aufrufen

LilyPond ist ein von TeX völlig getrenntes Programm mit eigener Eingabesprache und dem besten Ruf für Notensatzqualität. Sein Ausgangspunkt war MusiXTeX, was heute leicht ironisch klingt: Han-Wen Nienhuys und Jan Nieuwenhuizen begannen 1995 gemeinsam an MPP (MusiXTeX PreProcessor) zu arbeiten, gaben es auf und starteten 1996 LilyPond. Version 1.0 von 1998 vollzog die Trennung von MusiXTeX, und LilyPond schreibt inzwischen PDF (über PostScript), SVG und PNG selbst. Beide stellten 2003 auf dem Colloquium on Musical Informatics (CIM) „LilyPond, a system for automated music engraving“ vor.

Der Standardweg in ein LaTeX-Dokument heißt lilypond-book. In einer Datei mit der Endung .lytex mischt man LaTeX-Text und LilyPond-Fragmente – kurze in \lilypond{…}, längere in einer lilypond-Umgebung, externe Dateien über \lilypondfile{…}. lilypond-book rendert jedes Fragment mit LilyPond und schreibt eine gewöhnliche .tex-Datei, in der die Fragmente zu \includegraphics-Aufrufen geworden sind. Diese kompiliert man dann wie üblich. Die Zeilenbreite der Musik wird automatisch aus der Textbreite der Präambel übernommen.

score.lytex
\documentclass{article}
\begin{document}
A short phrase:
\begin{lilypond}[quote,fragment,staffsize=26]
  c'4 d' e' f' g'2 g'
\end{lilypond}
\end{document}
terminal
lilypond-book --pdf score.lytex   # renders the fragments, writes score.tex
pdflatex score.tex                # compile the generated document

Die neuere Option ist lyluatex. Für LuaLaTeX gebaut, lässt es die Vorverarbeitungsstufe weg und ruft LilyPond direkt während der Kompilierung auf. Die eigene Schreibweise ist die Umgebung ly (für kurze Fragmente \lily), und man startet lualatex schlicht mit --shell-escape. Für den Umstieg von lilypond-book stehen zusätzlich \lilypond und \lilypondfile bereit, sodass eine vorhandene .lytex-Quelle nahezu unverändert übernommen wird. Da nur eine Datei zu verwalten ist, werden Fassungen mit vielen Überarbeitungen leichter. TeX Live 2024 enthält v1.1.5 (2023/04/18) unter MIT-Lizenz.

document.tex
% compile with:  lualatex --shell-escape document.tex
\documentclass{article}
\usepackage{lyluatex}
\begin{document}
\begin{ly}
  \relative c' { c4 d e f g2 g }
\end{ly}
\end{document}

Hier lauert die Falle, die man kennen muss. Die .sty-Datei von lyluatex liegt in TeX Live, aber LilyPond selbst (der Befehl lilypond) und lilypond-book nicht. Im Binärverzeichnis einer TeX-Live-2024-Installation findet sich weder lilypond noch lilypond-book. Das Laden von lyluatex allein funktioniert also nicht: LilyPond muss separat installiert und in den PATH aufgenommen werden. Ein vorhandenes Paket und ein vorhandenes externes Programm sind zweierlei.

Das Paket abc: Volkslieder und einstimmige Melodien, schnell

Die ABC-Notation ist ein Textformat für Musik, das vor allem auf menschliche Les- und Schreibbarkeit ausgelegt ist, und wird viel für Volkslieder und Leadsheets mit einer Melodielinie aus Irland, England, Schottland und anderswo verwendet. Einbuchstabige Kopfzeilen – X:, T:, M:, L:, K: – tragen Titel, Taktart und Tonart, danach schreibt man die Töne einfach hin: CDEF|GABc|. Als Notation ist das schlicht, aber leicht genug, um es in eine E-Mail zu kopieren. Die LaTeX-Seite dazu ist das Paket abc (Enrico Gregorio; v2.0b in TeX Live 2024).

tune.tex
% compile with:  pdflatex -shell-escape tune.tex
\documentclass{article}
\usepackage{abc}
\begin{document}
\begin{abc}
X:1
T:Simple Tune
M:4/4
L:1/8
K:C
CDEF|GABc|
\end{abc}
\end{document}

Mechanisch arbeitet es wie lilypond-book: über eine externe Umwandlung. Das Paket schreibt den Inhalt der abc-Umgebung in eine temporäre Datei, übergibt sie per \write18 (Shell-Ausführung) an abcm2ps, das PostScript erzeugt, und formt das mit ps2eps zu EPS, bevor es eingebunden wird. -shell-escape ist also Pflicht – und dasselbe Problem wie bei LilyPond taucht auch hier auf: abcm2ps liegt TeX Live nicht bei. Leicht hat man abc.sty, aber keinen Konverter; abcm2ps gehört also installiert, bevor man sich darauf verlässt (die Option mup ruft stattdessen Mup auf). Das klassische abc2mtex, das ASCII-ABC in MusicTeX/MusiXTeX-Eingabe verwandelt, muss ebenfalls separat besorgt werden.

Was TeX Live mitliefert, was nicht, und welche Wahl passt

Es gilt eine Faustregel: Die Werkzeuge, die innerhalb von TeX gravieren, sind alle in TeX Live; die Werkzeuge, die außerhalb gravieren, nicht. Das MusiXTeX-Set (musixtex, musixflx, pmxab, prepmx, autosp, xml2pmx) und die LaTeX-seitigen Einstiegspunkte (lyluatex.sty, abc.sty) sind enthalten. Die externen Engines, die die Musik tatsächlich zeichnen – lilypond, lilypond-book, abcm2ps –, sind es nicht. Die Tabelle unten hält fest, was eine TeX-Live-2024-Installation wirklich mitbringt.

Programm / DateiIn TeX Live 2024Aufgabe
musixtexenthaltenWrapper, der die drei Durchläufe und die Präprozessoren steuert
musixflxenthaltender zweite Durchlauf; texlua-Skript für die Akkoladeneinteilung
pmxab / prepmx / autosp / xml2pmxenthaltenPräprozessoren für PMX, M-Tx, Auto-Abstände und MusicXML
lyluatex.sty / abc.styenthaltendie LaTeX-seitigen Einstiege; die gerufenen Programme fehlen
lilypond / lilypond-booknicht enthaltenseparat installieren; LilyPond selbst und sein Einbindungsskript
abcm2ps / abc2mtexnicht enthaltenseparat installieren; die ABC-Konverter

Daraus ergibt sich die praktische Entscheidung. Wer gar nichts zusätzlich installieren will oder weiß, dass auf den Rechnern nur TeX Live liegt, nimmt MusiXTeX – steigt aber über pmxab / prepmx ein, statt rohe Makros zu schreiben. Steht die Satzqualität an erster Stelle, nimmt man LilyPond: lyluatex, wenn ohnehin LuaLaTeX im Spiel ist, sonst lilypond-book. Für ein paar einstimmige Stücke in Eile genügt abc. Eine Lehre gilt für alle drei: Jede Variante, die ein externes Programm ruft (lyluatex, abc), braucht -shell-escape; vorab ist daher zu prüfen, ob das auf einem gemeinsam genutzten Build-Rechner oder in der CI erlaubt ist. Soll die Partitur als eigenständiges Bild an eine andere Anwendung gehen, behandelt die Seite zu TeX2img genau das.