Notensatz (MusiXTeX/LilyPond)

Mathematik ist LaTeXs Heimspiel, aber was ist mit Notensatz? Im Wesentlichen gibt es drei Wege: MusiXTeX setzt Partituren direkt in TeX, LilyPond als eigenständiger hochwertiger Notensatz wird über lilypond-book eingebunden, und die kompakte ABC-Notation lässt sich mit dem Paket abc einbetten. Diese Seite erklärt die Arbeitsweise und die passende Wahl.

MusiXTeX - Notensatz in TeX

MusiXTeX ist ein Musiknotensatzsystem, das vollständig aus TeX-Makros aufgebaut ist. Es folgt auf das ältere MusicTeX und zeichnet Notensysteme, Notenköpfe, Balken und Bögen vollständig im TeX-Rahmen. Weil kein externes Zeichenprogramm beteiligt ist, passt es gut, wenn die gesamte Werkzeugkette in TeX bleiben soll.

Charakteristisch ist das Verarbeitungsmodell. Um den Abstand zwischen Noten zu optimieren, läuft MusiXTeX in drei Durchläufen. Zuerst verarbeitet TeX, praktisch e-TeX, die Datei und schreibt eine .mx1-Datei; das mitgelieferte Lua-Skript musixflx liest sie, berechnet die Abstände pro Schlag und erzeugt .mx2; anschließend läuft TeX ein letztes Mal für die Ausgabe. Das Wrapper-Skript musixtex koordiniert diese drei Läufe und ruft bei Bedarf Präprozessoren wie die unten genannten Frontends pmx und M-Tx auf.

terminal
musixtex score.tex   # runs e-TeX → musixflx → e-TeX, then makes the PDF

Rohe MusiXTeX-Makros gelten allgemein als schwer von Hand zu schreiben; daher tut man das fast nie. Stattdessen verwendet man ein höheres Frontend. pmx ist ein Präprozessor, der eine deutlich einfachere Eingabesprache in MusiXTeX-Makros übersetzt. Für Vokalmusik mit Text steht M-Tx noch eine Stufe davor und liefert an pmx, also M-Tx -> pmx -> MusiXTeX. Unten steht ein minimales MusiXTeX-Gerüst; praktisch schreibt man eher pmx-Eingabe.

document.tex
\input musixtex
\begin{music}
  \instrumentnumber{1}
  \setclef{1}{\treble}
  \startextract
    \Notes \qa{cdef} \en
    \Notes \ha{g} \en
  \endextract
\end{music}
\end

LilyPond und lilypond-book - eine eigene Engine einbinden

LilyPond ist ein spezialisierter Notensatz-Gravierer mit eigener Eingabesprache. Es ist ein von TeX getrenntes Programm und für Notensatz höchster Qualität bekannt. Die Eingabe sieht völlig anders aus als bei MusiXTeX, liefert aber mit einfacher Notation mindestens ebenso polierte Ergebnisse. Der übliche Weg zur Kombination mit einem LaTeX-Dokument ist lilypond-book.

Die Idee: In einer Datei mit der Endung .lytex mischt man LaTeX-Text mit LilyPond-Fragmenten. Kurze Fragmente stehen in \lilypond{...}, längere in einer lilypond-Umgebung, externe Dateien in \lilypondfile{...}. lilypond-book rendert jedes Fragment mit LilyPond zu einem Bild oder PDF und schreibt eine normale .tex-Datei, in der die Fragmente durch Grafikbefehle ersetzt sind. Diese Datei kompilierst du anschließend wie gewohnt, und die Partitur fügt sich in das Dokument ein.

document.tex
% --- score.lytex ---
\documentclass{article}
\begin{document}
Here is a short phrase:
\begin{lilypond}[quote,fragment,staffsize=26]
  c'4 d' e' f' g'2 g'
\end{lilypond}
\end{document}

Der Build besteht aus zwei Schritten. Zuerst läuft lilypond-book über die .lytex-Datei, mit --pdf werden Fragmente als PDF eingebettet; danach kompilierst du die erzeugte .tex-Datei mit pdflatex oder Ähnlichem. Die Zeilenbreite der Musik wird automatisch aus der Textbreite der Präambel abgeleitet.

terminal
lilypond-book --pdf score.lytex   # renders snippets, writes score.tex
pdflatex score.tex                # compile the generated document

Eine modernere Option ist das Paket lyluatex. Es ist für LuaLaTeX gedacht, überspringt die Vorverarbeitung durch lilypond-book und ruft LilyPond direkt während der Kompilierung auf, um Partituren zu erzeugen und einzubinden. Du schreibst die Musik in einer lily-Umgebung oder mit \lilypond und startest lualatex einfach mit --shell-escape. Es versteht sich als Drop-in-Obermenge von lilypond-book.

Das Paket abc - einfache ABC-Notation

Das Paket abc bettet ABC-Notation, ein sehr kompaktes textuelles Musikformat, in LaTeX ein. ABC ist vor allem auf menschliche Les- und Schreibbarkeit ausgelegt und wird häufig für Volkslieder und Leadsheets mit einstimmigen Melodien westeuropäischer Traditionen wie Irland, England und Schottland verwendet.

Wie lilypond-book stützt es sich auf einen externen Konverter. Musik in einer abc-Umgebung wird vom Paket über \write18, also Shell-Ausführung, an abcm2ps übergeben; dieses rendert ein Notenbild, das in das Dokument eingebunden wird. Weil Shell-Ausführung nötig ist, muss mit -shell-escape kompiliert werden. Außerdem gibt es das klassische Werkzeug abc2mtex, das ASCII-ABC in MusicTeX/MusiXTeX-Eingabe umwandelt und als Präprozessor dienen kann.

document.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}
terminal
pdflatex -shell-escape tune.tex   # abc calls abcm2ps via \write18

Welche Option passt

Als grobe Orientierung: Wenn die Werkzeugkette in TeX bleiben und anspruchsvoller Notensatz ohne Verlassen von TeX entstehen soll, nimm MusiXTeX, praktisch über pmx / M-Tx. Wenn bei ernsthaften Partituren Qualität an erster Stelle steht, binde LilyPond über lilypond-book ein, oder mit LuaLaTeX über lyluatex. Wenn du Volkslieder oder kurze einstimmige Melodien schnell brauchst, ist das Paket abc passend.

AnsatzFunktionsweiseGeeignet für
MusiXTeXSatz durch TeX-Makros (3 Durchläufe + pmx / M-Tx)Alles in TeX; aufwendiger Notensatz
LilyPond (lilypond-book)Externe Engine rendert -> Bild/PDF wird eingebundenHochwertige, ernsthafte Partituren
lyluatexLuaLaTeX ruft LilyPond während der Kompilierung aufLilyPond bequem mit LuaLaTeX
abcABC-Notation wird mit abcm2ps konvertiert und eingebettetVolkslieder und einstimmige Leadsheets

Alle diese Werkzeuge sind auf CTAN zu finden und werden mit großen Distributionen wie TeX Live ausgeliefert. LilyPond selbst, und damit lilypond-book, muss eventuell separat installiert werden. Beachte, dass die extern arbeitenden Werkzeuge abc und lyluatex -shell-escape benötigen, damit Shell-Ausführung erlaubt ist.