1.2 Utilización desde la línea de órdenes

Esta sección contiene información adicional sobre el uso de LilyPond en la línea de órdenes. Esta forma puede ser preferible para pasarle al programa algunas opciones adicionales. Además, existen algunos programas complementarios ‘de apoyo’ (como midi2ly) que sólo están disponibles en la línea de órdenes.

Al hablar de la ‘línea de órdenes’, nos referimos a la consola del sistema operativo. Los usuarios de Windows posiblemente estén más familiarizados con los términos ‘ventana de MS-DOS’ o ‘línea de comandos’; Los usuarios de MacOS X puede que estén más familiarizados con los términos ‘terminal’ o ‘consola’. Éstos podrían requerir algunas configuraciones adicionales y deberían consultar también el apartado MacOS X.

La descripción del uso de esta parte de los sistemas operativos se sale del ámbito de este manual; le rogamos que consulte otros documentos sobre este tema si no le resulta familiar la línea de órdenes.


Invocar lilypond

El ejecutable lilypond se puede llamar desde la línea de órdenes de la siguiente manera:

lilypond [opción]… archivo

Cuando se invoca con un nombre de archivo sin extensión, se prueba en primer lugar con la extensión ‘.ly’. Para leer la entrada desde stdin, utilice un guión (-) en sustitución de archivo.

Cuando se procesa ‘archivo.ly’, la salida resultante son los archivos ‘archivo.ps’ y ‘archivo.pdf’. Se pueden especificar varios archivos; cada uno de ellos se procesará de forma independiente1.

Si ‘archivo.ly’ contiene más de un bloque \score, el resto de las partituras se obtendrán como salida en archivos numerados, empezando por ‘archivo-1.pdf’. además, el valor de output-suffix (sufijo de salida) se insertará entre el nombre base y el número. Un archivo de entrada que contenga

#(define output-suffix "violin")
\score { … }
#(define output-suffix "cello")
\score { … }

producirá como salida base-violin.pdf’ y base-cello-1.pdf’.


Instrucciones estándar de la línea de órdenes

Si su terminal (o ventana de órdenes) contempla las redirecciones normales, quizá le sean de utilidad las siguientes instrucciones para redirigir la salida de la consola a un archivo:

Consulte la documentación de su shell para ver si contempla estas opciones, o si la sintaxis es distinta. Observe que son instrucciones del shell y que no tienen nada que ver con lilypond.


Opciones básicas de la línea de órdenes para LilyPond

Están contempladas las siguientes opciones:

-d, --define-default=variable=valor

Véase Opciones avanzadas de línea de órdenes para LilyPond.

-e, --evaluate=expresión

Evaluar la expresión de Scheme antes de analizar los archivos ‘.ly’. Se pueden pasar varias opciones ‘-e’, que se evaluarán en secuencia.

La expresión se evaluará en el módulo guile-user, de manera que si quiere usar definiciones dentro de expresión, debe utilizar

lilypond -e '(define-public a 42)'

en la línea de órdenes, e incluir

#(use-modules (guile-user))

al principio del archivo ‘.ly’.

Nota: Los usuarios de Windows deben utilizar comillas dobles en lugar de apóstrofos simples.

-f, --format=format

which formats should be written. Choices for format are ps, pdf, and png.

Example: lilypond -fpng filename.ly

-h, --help

Mostrar un resumen de las formas de utilización.

-H, --header=CAMPO

Volcar un campo de cabecera al archivo ‘NOMBREBASE.CAMPO

-i, --init=archivo

Establecer el archivo de inicio a archivo (predeterminado: ‘init.ly’).

-I, --include=directorio

Añadir el directorio a la ruta de búsqueda de archivos de entrada.

Se pueden escribir varias opciones -I. La búsqueda se inicia en el primer directorio definido, y si el archivo que se debe incluir no se encuentra, la búsqueda continúa en los directorios siguientes.

-j, --jail=usuario,grupo,jaula,directorio

Ejecutar lilypond en una jaula de chroot.

La opción ‘--jail’ (jaula) proporciona una alternativa más flexible a la opción ‘-dsafe’ cuando el proceso de tipografía de LilyPond está disponible a través de un servidor web o cuando LilyPond ejecuta instrucciones enviadas por fuentes externas (véase Opciones avanzadas de línea de órdenes para LilyPond).

La opción ‘--jail’ funciona cambiando la raíz de lilypond a jaula justo antes de comenzar el proceso de compilación en sí. Entonces se cambian el usuario y el grupo a los que se han dado en la opción, y el directorio actual se cambia a directorio. Esta instalación garantiza que no es posible, al menos en teoría, escapar de la jaula. Observe que para que funcione ‘--jail’, se debe ejecutar lilypond como root, lo que normalmente se puede hacer de una forma segura utilizando sudo.

La instalación de una jaula puede ser un asunto relativamente complejo, pues debemos asegurarnos de que LilyPond puede encontrar dentro de la propia jaula todo lo que necesita para poder compilar la fuente. Una típica configuración de jaula de chroot consta de los siguientes elementos:

Preparar un sistema de archivos separado

Se debe crear un sistema de archivos separado para LilyPond, de forma que se pueda montar con opciones seguras como noexec, nodev y nosuid. De esta forma, es imposible ejecutar programas o escribir directamente a un dispositivo desde LilyPond. Si no quiere crear una partición separada, tan sólo tiene que crear un archivo de un tamaño razonable y usarlo para montar un dispositivo loop. El sistema de archivos separado garantiza también que LilyPond nunca pueda escribir en un espacio mayor del que se le permita.

Preparar un usuario separado

Se debe usar un usuario y grupo separados (digamos lily/lily) con bajos privilegios para ejecutar LilyPond dentro de la jaula. Debería existir un solo directorio con permisos de escritura para este usuario, y debe pasarse en el valor directorio.

Preparar la jaula

LilyPond necesita leer algunos archivos mientras se ejecuta. Todos estos archivos se deben copiar dentro de la jaula, bajo la misma ruta en que aparecen en el sistema de archivos real de root. Todo el contenido de la instalación de LilyPond (por ejemplo ‘/usr/share/lilypond’) se debe copiar.

Si surgen problemas, la forma más sencilla de rastrearlos es ejecutar LilyPond usando strace, lo que le permitirá determinar qué archivos faltan.

Ejecutar LilyPond

Dentro de una jaula montada con noexec es imposible ejecutar ningún programa externo. Por tanto, LilyPond se debe ejecutar con un backend que no necesite tal programa. Como ya hemos mencionado, se debe ejecutar con privilegios del superusuario (que por supuesto perderá inmediatamente), posiblemente usando sudo. También es una práctica recomendable limitar el número de segundos de tiempo de CPU que LilyPond puede usar (p.ej., usando ulimit -t), y, si su sistema operativo lo contempla, el tamaño de la memoria que se puede reservar. Véase también LilyPond en una jaula de chroot.

-l, --loglevel=LEVEL

Fijar el grado en que la salida de consola es prolija al nivel LEVEL. Los valores posibles son:

NONE

Ninguna salida en absoluto, ni siquiera mensajes de error.

ERROR

Solamente mensajes de error, no advertencias o indicaciones de progreso.

WARN

Advertencias y mensajes de error, no de progreso.

BASIC_PROGRESS

Mensajes de progreso básicos (éxito), advertencias y errores.

PROGRESS

Todos los mensajes de progreso, advertencias y errores.

INFO (predeterminado)

Mensajes de progreso, advertencias, errores e información de ejecución adicional.

DEBUG

Todos los mensajes posibles, incuida la información de depuración prolija.

-o, --output=ARCHIVO o CARPETA

Establecer el nombre del archivo de salida predeterminado a ARCHIVO o, si existe una carpeta con ese nombre, dirigir la salida hacia CARPETA, tomando el nombre de archivo del documento de entrada. Se añade el sufijo correspondiente (por ejemplo, .pdf para PDF) en los dos casos.

--ps

Generar PostScript.

--png

Generar imágenes de las páginas en formato PNG. Esto implica ‘--ps’. La resolución en PPP de la imagen se puede establecer con

-dresolution=110
--pdf

Generar PDF. Implica ‘--ps’.

-v, --version

Mostrar la información de la versión.

-V, --verbose

Ser prolijo: mostrar las rutas completas de todos los archivos que se leen, y dar información cronométrica.

-w, --warranty

Mostrar la garantía con que viene GNU LilyPond (¡no viene con NINGUNA GARANTÍA!).


Opciones avanzadas de línea de órdenes para LilyPond

-d[option-name]=[value], --define-default=[option-name]=[value]

Establece la función de Scheme interna equivalente a valor.

-dbackend=svg

Si no se proporciona ningún valor, se usa el valor predeterminado. Para desactivar una opción se puede anteponer no- a la variable, p.ej.:

-dno-point-and-click

is the same as

-dpoint-and-click=#f

Están contempladas las siguientes opciones junto a sus respectivos valores predeterminados:

SímboloValorExplicación/Opciones
anti-alias-factor (factor de antialias)1Renderizar a mayor resolución (utilizando el factor dado) y reducir la escala del resultado para así evitar ‘escaleras’ en las imágenes PNG.
aux-files (archivos auxiliares)#tCrear archivos .tex, .texi, .count en el ‘back-end’ EPS.
backendpsSeleccionar un ‘back-end’. Los archivos (la opción predeterminada) incluyen las fuentes tipográficas TTF, Type1 y OTF. No se hace ningún subconjunto de estas fuentes. El uso de conjuntos de caracteres ‘orientales’ puede dar lugar a archivos muy grandes.
epsPostScript encapsulado. Vuelca cada página o sistema como un archivo ‘EPS’ distinto, sin fuentes tipográficas, y como un archivo ‘EPS’ encuadernado con todas las páginas o sistemas que incluye las fuentes. Utilizado como opción predeterminada por parte de lilypond-book.
nullNo producir ninguna partitura impresa a la salida; tiene el mismo efecto que -dno-print-pages.
svgGrácifos vectoriales escalables. Crea un solo archivo SVG, sin fuentes tipográficas incrustadas, por cada página de salida. Se recomienda instalar las fuentes Century Schoolbook, incluidas con la instalación de LilyPond, para un renderizado óptimo. Bajo UNIX, bastará con que copie estaos archivos de fuente del directorio de LilyPond (normalmente ‘/usr/share/lilypond/VERSION/fonts/otf/’) al directorio ‘~/.fonts/’. La salida SVG debería ser compatible con cualquier editor o cliente de SVG. También hay una opción svg-woff (véase más abajo) para usar los archivos de fuente woff en el ‘back-end’ SVG.
scmVolcado de las instrucciones de dibujo internas basadas en Scheme, en bruto.
check-internal-types#fComprobar el tipo de cada asignación de propiedades.
clip-systems (recortar los sistemas)#fGenerar fragmentos de imagen recortados de una partitura.
datadir (directorio de datos)Prefijo de los archivos de datos (sólo lectura).
debug-gc#fVolcar estadísticas de depuración de memoria.
debug-gc-assert-parsed-dead#fPara la depuración de memoria: asegurarse de que todas las referencias a objetos analizados están muertas. Es una opción interna, y se activa automáticamente para `-ddebug-gc'.
debug-lexer#fDepuración del analizador léxico flex.
debug-page-breaking-scoring#fVolcar las partituras para muchas configuraciones de saltos de página diferentes.
debug-parser#fDepuración del analizador sintáctico bison.
debug-property-callbacks#fDepuración de las cadenas cíclicas de funciones de callback.
debug-skylines#fDepuración de las líneas de horizonte.
delete-intermediate-files#tEliminar los archivos intermedios .ps inútiles ques e crean durante la compilación.
dump-cpu-profile#fVolcar información de cuenta de tiempo (dependiente del sistema).
dump-profile#fVolcar de la información de memoria y de tiempo para cada archivo.
dump-signatures#fVolcar las firmas de salida de cada sistema. Usado para las pruebas de regresión.
eps-box-padding#fRellenar el borde izquierdo de la caja contenedora del EPS de salida en la cantidad dada (en mm).
gs-load-fonts#fCargar las fuentes tipográficas a través de Ghostscript.
gs-load-lily-fonts#fCargar sólo las fuentes de LilyPond por medio de Ghostscript.
gui#fSe ejecuta silenciosamente y se redirige toda la salida a un archivo de registro.

Nota para los usuarios de Windows: De manera predeterminada, lilypond.exe dirige toda la salida de la información de avance hacia la ventana de consola, lilypond-windows.exe no lo hace y devuelve un indicador del sistema, sin ninguna indicación del avance, inmediatamente en la línea de órdenes. La opción ‘-dgui’ se puede usar en este caso para redirigir la salida a un archivo de registro.

help#fMostrar esta ayuda.
include-book-title-preview#tIncluir los títulos de libro en las imágenes de vista previa.
include-eps-fonts#tIncluir las fuentes tipográficas en los archivos EPS de cada uno de los sistemas.
include-settings#fIncluir el archivo de los ajustes globales, se incluye antes de que la partitura se procese.
job-count#fProcesar en paralelo, usando el número de tareas dado.
log-file#f [file]Si se da una cadena NOMBRE como segundo argumento, redirigir la salida al archivo de registro NOMBRE.log.
max-markup-depth1024Profundidad máxima del árbol de marcado. Si un marcado tiene más niveles, suponer que no terminará por sí mismo, imprimiento una advertencia y devolviendo en su lugar un elemento de marcado nulo.
midi-extension"midi"Fijar la extensión de archivo predeterminada para el archivo de salida MIDI a la cadena dada.
music-strings-to-paths#fConvertir las cadenas de texto a rutas cuando los glifos pertenecen a una fuente de tipografía musical.
paper-size\"a4\"Establecer el tamaño predeterminado del papel. Observe que la cadena debe ir encerrada entre comillas dobles.
pixmap-formatpng16mFijar el formato de salida de Ghostscript para las imágenes de píxeles.
point-and-click#fAñadir enlaces de ‘apuntar y pulsar’ a la salida PDF. Véase Apuntar y pulsar.
preview#fCrear imágenes de vista previa además de la salida normal.

Esta opción está contemplada por todos los ‘back-ends’: pdf, png, ps, eps y svg, pero no por scm. Genera un archivo de salida, en la forma miArchivo.preview.extensión, que contiene los títulos y el primer sistema de la música. Si se están utilizando bloques \book o \bookpart, aparecen en la salida los títulos de \book, \bookpart o \score, incluido el primer sistema de cada bloque \score si la variable de \paper print-all-headers está fijada al valor #t.

Para suprimir la salida usual, utilice las opciones ‘-dprint-pages’ o ‘-dno-print-pages’ según sus necesidades.

print-pages#tGenerar páginas completas (es la opción predeterminada). Es útil ‘-dno-print-pages’ en combinación con ‘-dpreview’.
profile-property-accesses#fConservar las estadísticas de las llamadas de función get_property().
protected-scheme-parsing#tContinuar cuando se captan en el analizador sintáctico errores del Scheme empotrado. Si se fija a #f, detenerse cuando haya errores e imprimir un registro de traza de pila.
read-file-list#f [archivo]Especificar el nobmre de un archivo que contiene una lista de archivos de entrada para procesar.
relative-includes#fCuando se procesa una instrucción \include command, buscar el archivo incluido de forma relativa al archivo actual (en lugar del archivo principal).
resolution101Fijar la resolución para generar imágenes de píxeles PNG al valor dado (en ppp).
safe#fNo confiar en la entrada .ly.

Cuando el servicio de tipografía está disponible a través de un servidor web, SE DEBEN pasar las opciones ‘--safe’ o ‘--jail’. La opción ‘--safe’ evita que el código de Scheme monte un desastre, p.ej.:

#(system "rm -rf /")
{
  c4^$(ly:gulp-file "/etc/passwd")
}

La opción ‘-dsafe’ funciona evaluando las expresiones de Scheme en línea dentro de un módulo seguro especial. Deriva del módulo ‘safe-r5rs’ de GUILE, pero además añade unas cuantas funciones de la API de LIlyPond que están relacionadas en ‘scm/safe-lily.scm’.

Además, el modo seguro prohíbe las directivas \include y desactiva la utilización de barras invertidas en las cadenas de TeX. Asimismo, no es posible importar variables de LilyPond dentro de Scheme cuando se está en modo seguro.

-dsafeno detecta la sobreutilización de recursos, por lo que aún es posible hacer que el programa se cuelgue indefinidamente, por ejemplo suministrando estructuras de datos cíclicas en el backend. Por ello, si está usando LilyPond en un servidor web accesible públicamente, el proceso se debe limitar tanto en el uso de memoria como de CPU.

El modo seguro evita que se puedan compilar muchos fragmentos de código útiles.

La opción ‘--jail’ es una aliternativa más segura aún, pero requiere más trabajo para su configuración. Véase Opciones básicas de la línea de órdenes para LilyPond.

separate-log-files#fPara los archivos de entrada ARCHIVO1.ly, ARCHIVO2.ly, etc. sacar los datos de registro hacia los archivos ARCHIVO1.log, ARCHIVO2.log
show-available-fonts#fListar todos los nombres de las fuentes tipográficas disponibles.
strict-infinity-checking#fForzar una terminación abrupta si se encuentran las excepciones de punto flotante Inf y NaN.
strip-output-dir#tNo usar los directorios de los archivos de entrada al construir los nombres de los archivos de salida.
strokeadjust#fForzar el ajuste de los trazos de PostScript. Esta opción es relevante principalmente cuando se genera un PDF a partir de la salida de PostScript (el ajuste del trazo está por lo general activado automáticamente para dispositivos de mapa de puntos de baja resolución). Sin esta opción, los visores dePDF tienden a producir anchuras de plica muy poco consistentes a las resoluciones típicas de las pantallas de ordenador. La opción no afecta de forma muy significativa a la calidad de la impresión y causa grandes incrementos en el tamaño del archivo PDF.
svg-woff#fUsar archivos de fuente tipográfica de woff en el backend SVG.
trace-memory-frequency#fRegistrar el uso de células de Scheme esta cantidad de veces por segundo. Volcar los resultados en ARCHIVO.stacks y en ARCHIVO.graph.
trace-scheme-coverage#fRegistrar la cobertura de los archivos de Scheme en ARCHIVO.cov.
verbose#fSalida prolija, es decir el nivel de registro en DEBUG (sólo lectura).
warning-as-error#fCambiar todos los mensajes de advertencia y de ‘error de programación’ a errores.

Variables de entorno

lilypond reconoce las siguientes variables de entorno:

LILYPOND_DATADIR

Especifica un directorio en el que los mensajes de localización y de datos se buscarán de forma predeterminada. El directorio debe contener subdirectorios llamados ‘ly/’, ‘ps/’, ‘tex/’, etc.

LANG

Selecciona el idioma de los mensajes de advertencia.

LILYPOND_LOGLEVEL

Nivel de registro predeterminado. Si LilyPond se llama sin ningún nivel de registro explícito (es decir, sin opción de línea de órdenes ‘--loglevel’), se usa este valor.

LILYPOND_GC_YIELD

Una variable, como porcentaje, que ajusta el comportamiento de la administración de memoria. Con valores más altos, el programa usa más memoria; con valores más bajos, usa más tiempo de CPU. El valor predeterminado es 70.


LilyPond en una jaula de chroot

La preparación del servidor para que ejecute LilyPond en una jaula de chroot es una tarea muy complicada. Los pasos están relacionados más abajo. Los ejemplos que aparecen en cada uno de los pasos son válidos para Ubuntu GNU/Linux, y pueden requerir el uso de sudo según corresponda.

Guión de ejemplo para Ubuntu 8.04 de 32 bits

#!/bin/sh
## aquí se fijan los valores predeterminados

username=lily
home=/home
loopdevice=/dev/loop0
jaildir=/mnt/lilyloop
# prefijo (¡sin la barra inicial!)
lilyprefix=usr/local
# el directorio en que lilypond se encuentra instalado en el sistema
lilydir=/$lilyprefix/lilypond/

userhome=$home/$username
loopfile=$userhome/loopfile
adduser $username
dd if=/dev/zero of=$loopfile bs=1k count=200000
mkdir $jaildir
losetup $loopdevice $loopfile
mkfs -t ext3 $loopdevice 200000
mount -t ext3 $loopdevice $jaildir
mkdir $jaildir/lilyhome
chown $username $jaildir/lilyhome
cd $jaildir

mkdir -p bin usr/bin usr/share usr/lib usr/share/fonts $lilyprefix tmp
chmod a+w tmp

cp -r -L $lilydir $lilyprefix
cp -L /bin/sh /bin/rm bin
cp -L /usr/bin/convert /usr/bin/gs usr/bin
cp -L /usr/share/fonts/truetype usr/share/fonts

# Ahora la magia de copiar las bibliotecas
for i in "$lilydir/usr/bin/lilypond" "$lilydir/usr/bin/guile" "/bin/sh"  \
  "/bin/rm" "/usr/bin/gs" "/usr/bin/convert"; do ldd $i | sed 's/.*=>  \
    \/\(.*\/\)\([^(]*\).*/mkdir -p \1 \&\& cp -L \/\1\2 \1\2/' | sed  \
      's/\t\/\(.*\/\)\(.*\) (.*)$/mkdir -p \1 \&\& cp -L \/\1\2 \1\2/'  \
        | sed '/.*=>.*/d'; done | sh -s

# Los archivos compartidos para ghostscript...
      cp -L -r /usr/share/ghostscript usr/share
# Los archivos compartidos para ImageMagick
      cp -L -r /usr/lib/ImageMagick* usr/lib

### Ahora, suponiendo que tenemos test.ly en /mnt/lilyloop/lilyhome,
### deberíamos poder ejecutar:
### Observe que /$lilyprefix/bin/lilypond es un guión, que establece
### un valor para LD_LIBRARY_PATH : esto es crucial
      /$lilyprefix/bin/lilypond -jlily,lily,/mnt/lilyloop,/lilyhome test.ly

Notas el pie

[1] El estado de GUILE no se restablece después de procesar un archivo .ly, por lo que debe tener cuidado de no modificar ningún valor predeterminado desde dentro de Scheme.


Otros idiomas: English, deutsch, français, magyar, italiano, 日本語.
Acerca de la selección automática del idioma.

LilyPond — Utilización v2.19.13 (rama de desarrollo).