Notación musical (MusiXTeX/LilyPond)

El manual de MusiXTeX empieza insistiendo en una idea: la música no es una línea de símbolos como la prosa, sino una matriz bidimensional. Ese solo hecho explica por qué LaTeX, que compone matemáticas de forma admirable, no puede componer partituras sin ayuda. La posición horizontal de una nota no queda fija hasta saber cuántos compases caben en la línea, y cuántos caben no se sabe hasta que las notas tienen anchura: un bucle de huevo y gallina. Esta página recorre MusiXTeX, que rompe ese bucle con tres pasadas; LilyPond, que respondió a la misma pregunta abandonando TeX; y la compacta notación ABC, sin esquivar la cuestión práctica de qué trae realmente TeX Live y qué no.

Por qué LaTeX por sí solo no puede componer música

La respuesta es que las notas avanzan tanto a lo ancho como hacia abajo. El modelo de TeX consiste en alinear cajas en horizontal para formar una línea y apilar líneas para formar una página; con la prosa y las matemáticas basta. Pero una partitura tiene varios pentagramas avanzando a la vez, y el espaciado entre notas se estira o se encoge según cuántos compases decidas poner en un sistema. El manual de MusiXTeX lo describe como acumular peines verticales en horizontal, y su entrada funciona precisamente así: todo lo que va de \notes a \en es un peine, y dentro & separa los pentagramas, contando desde el instrumento inferior. LaTeX no tiene esa maquinaria, y por eso la música siempre exige una capa adicional.

Esa capa adicional adopta dos formas generales. Una es quedarse dentro de TeX: añadir fuentes y macros y dejar que el propio TeX grabe la música; eso es MusiXTeX. La otra es salir de TeX: dejar que un programa dedicado grabe la partitura y recuperar el resultado como imagen con \includegraphics; así trabajan LilyPond y las herramientas ABC. Lo curioso es que ambas están conectadas históricamente: LilyPond nació cuando dos personas que se habían propuesto construir un preprocesador para MusiXTeX abandonaron ese plan.

Las tres pasadas de MusiXTeX y por qué musixflx va en medio

La ruta estándar son tres pasadas —etexmusixflxetex— y el musixflx del medio no es TeX en absoluto, sino un programa aparte que solo divide líneas. Paso a paso: en la primera pasada de TeX, \startmuflex abre nombre.mx1 y anota, compás a compás, cuánto espacio fijo y cuánto espacio elástico contiene cada uno. Después musixflx lee ese .mx1, decide cuántos compases van en cada sistema y escribe los factores de estiramiento por sistema en nombre.mx2. En la tercera pasada TeX lee ambos archivos y solo entonces queda fijado el espaciado final. El bucle de huevo y gallina del principio se rompe saliendo a un archivo y volviendo.

No hace falta lanzar esas tres ejecuciones a mano. TeX Live incluye un script envoltorio llamado musixtex: basta escribir musixtex score.tex y realiza las tres pasadas en orden, para luego llamar a dvips y ps2pdf si conviene. Con -p toma la ruta corta y produce PDF directamente con pdfetex; con -i conserva los intermedios .mx1 y .mx2 en vez de borrarlos, y si abres el .mx2 encontrarás líneas como \lineset{1}{2}{...}, que es literalmente la decisión «dos compases en el sistema uno» puesta por escrito. Conviene saber que musixflx en TeX Live es a su vez un script texlua, de modo que este «programa aparte» se ejecuta sobre el intérprete Lua incorporado en el binario de TeX.

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

Una trampa: un PDF hecho con -1 (una sola pasada) no tiene los sistemas maquetados. Es rápido y sirve para revisar mientras trabajas, pero nunca generes con -1 la versión que vas a entregar. Un segundo punto: el motor que MusiXTeX necesita no es el tex liso, sino e-TeX. Ese cambio se dio en la versión 1.15 (abril de 2011) para salir de una escasez de registros, y por eso el script musixtex invoca etex por omisión.

¿Por qué tres pasadas? La respuesta está en la propia historia de MusiXTeX. El capítulo «A very brief history» del manual que acompaña al paquete remonta la idea de componer música con TeX a 1987 aproximadamente, a una tesis de máster de la Universidad de Bonn firmada por Andrea Steinbach y Angelika Schofer, Automatisierter Notensatz mit TeX. Su paquete, MuTeX, solo manejaba un pentagrama, pero dejó dos ideas: construir barras y ligaduras a partir de un gran número de caracteres de fuente y usar el glue de TeX para controlar el espaciado horizontal y la justificación. Hacia 1991 Daniel Taupin lo extendió a varios pentagramas con MusicTeX, y el precio fue perder flexibilidad en el espaciado horizontal: evitar huecos excesivos o insuficientes junto a las barras de compás pasó a ser cuestión de prueba y error, porque MusicTeX era de una sola pasada. El único remedio era pasar a varias, y sobre esa conclusión escribieron Taupin, Ross Mitchell y Andreas Egler el primer MusiXTeX hacia 1997. Ese musixflx en mitad de la compilación es aquella decisión, todavía en pie.

Taupin era físico de profesión. Murió en un accidente de escalada en 2003: así lo dicen el README y las páginas preliminares del manual que se distribuyen con TeX Live 2024. Desde entonces el mantenimiento ha pasado a Don Simons, Hiroaki Morimoto y Bob Tennent. En cuanto al musixflx intermedio, empezó siendo un programa que Ross Mitchell escribió entre 1992 y 1997; Nikhil Helferty lo reescribió en Lua en 2011, y esa reescritura es el musixflx.lua actual.

Un documento MusiXTeX mínimo y por qué \begin{music} da «Undefined control sequence»

MusiXTeX tiene dos estilos de entrada, uno de plain TeX y otro de LaTeX, y mezclarlos rompe todo. La forma de plain TeX, cargada con \input musixtex, no tiene \begin{music}: si lo escribes obtienes ! Undefined control sequence. y, por si fuera poco, la palabra «music» compuesta como texto corriente. El entorno music se define del otro lado, en musixblx.tex, es decir, en la forma LaTeX que se carga con \usepackage{musixtex}. El esqueleto de plain TeX es este: la música va entre \startpiece y \endpiece, ese par se envuelve en \startmuflex\endmuflex, y el archivo termina con \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}

Con un poco de vocabulario el resto se lee solo. \NOtes\en es un «peine», y las mayúsculas crecientes —\notes, \Notes, \NOtes, \NOTes, \NOTEs— eligen el espaciado básico asociado a un valor de nota, cada vez más ancho de la semicorchea a la redonda. \qa{cdef} significa «negras sin plica sobre c d e f», \ha{g} una blanca sin plica sobre g, y \bar es una barra de compás. \instrumentnumber fija cuántos instrumentos hay, \setclef1\treble pone el primero en clave de sol y \generalmeter\meterC establece compás de cuatro por cuatro. Como las macros crudas son así, los preprocesadores que vienen a continuación se han convertido en la entrada que la gente escribe de verdad.

pmx, M-Tx y autosp: no escribir MusiXTeX a mano

El propio manual de MusiXTeX afirma que casi todo el trabajo puede hacerse solo con un preprocesador, sin aprender los comandos ni la sintaxis de MusiXTeX. PMX para música instrumental y M-Tx para música vocal con letra son los dos estándares, y como el segundo alimenta al primero la cadena queda M-Tx → PMX → MusiXTeX. TeX Live 2024 incluye los ejecutables, aunque los nombres son algo retorcidos: el programa de PMX es pmxab y el de M-Tx es prepmx (con m-tx como alias).

Por suerte, el script musixtex elige su punto de entrada según la extensión. Dale un .mtx y empieza por prepmx; un .pmx y empieza por pmxab; un .aspc y empieza por autosp, y a continuación recorre las tres pasadas sin más. autosp es el preprocesador que automatiza la elección de \notes / \Notes / \NOtes según los valores de nota, de modo que esas mayúsculas nunca se escriben a mano. Y con xml2pmx se puede entrar desde MusicXML, que es la vía para material procedente de otros programas de notación.

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

Un detalle más: las fuentes van en un paquete aparte. Las fuentes de notas de MusiXTeX están separadas como musixtex-fonts, así que instalar solo las macros no compila. Una instalación normal de TeX Live trae ambas cosas, pero una mínima tropieza aquí. También vienen extensiones: musixlyr.tex (Rainer Dunker) para la letra y musixcrd (Robert Hennig) para los cifrados de acordes.

LilyPond con lilypond-book o lyluatex: llamar a un grabador fuera de TeX

LilyPond es un programa por completo ajeno a TeX, con su propio lenguaje de entrada y la mejor reputación en calidad de grabado. Su punto de partida fue MusiXTeX, algo que hoy resulta un poco irónico: Han-Wen Nienhuys y Jan Nieuwenhuizen empezaron a colaborar en 1995 en MPP (MusiXTeX PreProcessor), lo abandonaron y en 1996 arrancaron LilyPond. La versión 1.0, de 1998, completó la separación de MusiXTeX, y LilyPond escribe hoy por su cuenta PDF (vía PostScript), SVG y PNG. Ambos presentaron «LilyPond, a system for automated music engraving» en el Colloquium on Musical Informatics (CIM) de 2003.

La vía estándar hacia un documento LaTeX es lilypond-book. En un archivo con extensión .lytex mezclas prosa LaTeX y fragmentos de LilyPond —los cortos en \lilypond{…}, los largos en un entorno lilypond, los archivos externos con \lilypondfile{…}— y al pasarlo por lilypond-book cada fragmento se renderiza con LilyPond y se escribe un archivo .tex corriente en el que los fragmentos son ya llamadas a \includegraphics. Después lo compilas como siempre. El ancho de línea de la música se ajusta solo, leído de tu preámbulo.

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

La opción más reciente es lyluatex. Pensada para LuaLaTeX, elimina la etapa de preprocesado y llama a LilyPond directamente durante la compilación. Su forma propia es el entorno ly (o \lily para un fragmento corto), y basta con arrancar lualatex con --shell-escape. Además ofrece \lilypond y \lilypondfile para migrar desde lilypond-book, de modo que una fuente .lytex existente se traslada casi sin cambios. Con un solo archivo que gestionar, los borradores con muchas revisiones resultan más llevaderos. TeX Live 2024 trae la v1.1.5 (2023/04/18), con licencia MIT.

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}

Aquí está el escollo que hay que conocer. El .sty de lyluatex sí está en TeX Live, pero LilyPond en sí (el comando lilypond) y lilypond-book no lo están. Si miras el directorio de binarios de una instalación de TeX Live 2024, no encontrarás ni lilypond ni lilypond-book. De modo que cargar lyluatex por sí solo no funciona: hay que instalar LilyPond aparte y ponerlo en el PATH. Tener el paquete y tener el programa externo son cosas distintas.

El paquete abc: melodías populares y de una sola línea, rápido

La notación ABC es un formato musical de texto diseñado ante todo para que una persona pueda leerlo y escribirlo, y se usa mucho para melodías populares y lead sheets (una sola línea melódica) de Irlanda, Inglaterra, Escocia y más allá. Cabeceras de una letra —X:, T:, M:, L:, K:— llevan el título, el compás y la tonalidad, y después basta escribir las notas: CDEF|GABc|. Como notación es sencilla, pero lo bastante ligera como para pegarla en un correo. La puerta de entrada desde LaTeX es el paquete abc (Enrico Gregorio; v2.0b en 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}

Mecánicamente funciona como lilypond-book: mediante una conversión externa. El paquete escribe el cuerpo del entorno abc en un archivo temporal, lo entrega vía \write18 (ejecución de shell) a abcm2ps, que produce PostScript, y luego lo convierte en EPS con ps2eps antes de incluirlo. Por eso -shell-escape es obligatorio, y aquí reaparece el mismo problema que con LilyPond: abcm2ps no viene en TeX Live. Es fácil acabar con abc.sty presente y sin conversor, así que instala abcm2ps antes de contar con él (la opción mup llama a Mup en su lugar). El clásico abc2mtex, que convierte ABC en ASCII a entrada de MusicTeX/MusiXTeX, también hay que conseguirlo aparte.

Qué trae TeX Live, qué no, y cuál elegir

Hay una regla práctica: las herramientas que graban dentro de TeX están todas en TeX Live; las que graban fuera, no. El conjunto MusiXTeX (musixtex, musixflx, pmxab, prepmx, autosp, xml2pmx) y las puertas de entrada del lado LaTeX (lyluatex.sty, abc.sty) vienen incluidos. Los motores externos que dibujan la música de verdad —lilypond, lilypond-book, abcm2ps— no. La tabla siguiente recoge lo que una instalación de TeX Live 2024 contiene realmente.

Programa / archivoEn TeX Live 2024Función
musixtexincluidoenvoltorio que dirige las tres pasadas y los preprocesadores
musixflxincluidola segunda pasada; script texlua que reparte los sistemas
pmxab / prepmx / autosp / xml2pmxincluidopreprocesadores de PMX, M-Tx, espaciado automático y MusicXML
lyluatex.sty / abc.styincluidolas puertas de entrada LaTeX; los programas que llaman, no
lilypond / lilypond-bookno incluidoinstalar aparte; LilyPond y su script de inclusión
abcm2ps / abc2mtexno incluidoinstalar aparte; los conversores de ABC

De todo lo anterior sale la decisión práctica. Si no quieres instalar nada más, o sabes que las máquinas que compilarán tu documento solo tienen TeX Live, usa MusiXTeX, pero entra por pmxab / prepmx en lugar de escribir macros crudas. Si la calidad del grabado manda, usa LilyPond: lyluatex si ya trabajas con LuaLaTeX, y lilypond-book en caso contrario. Para unas pocas melodías de una sola línea con prisa, usa abc. Una lección vale para los tres: cualquier montaje que llame a un programa externo (lyluatex, abc) necesita -shell-escape, así que comprueba que esté permitido antes de apostar por él en una máquina de compilación compartida o en CI. Si lo que quieres es la partitura como imagen suelta para entregarla a otra aplicación, la página de TeX2img trata justo eso.