@c -*- coding: utf-8; mode: texinfo; documentlanguage: de -*- @c This file is part of lilypond-program.tely @ignore Translation of GIT committish: 317e451cbe00c0fa25e177976327e260f3dc6539 When revising a translation, copy the HEAD committish of the version that you are working on. See TRANSLATION for details. @end ignore @c Translators: Reinhold Kainhofer @node Running LilyPond @chapter Running LilyPond Dieses Kapitel behandelt die technischen Details, wie Lilypond ausgeführt werden kann. @menu * Normal usage:: * Command-line usage:: * Error messages:: * Updating files with convert-ly:: * Reporting bugs:: @end menu @node Normal usage @section Normal usage Die meisten Benutzer führen LilyPond von einer graphischen Benutzeroberfläche aus. Siehe @rlearning{First steps}, falls Sie dies nicht bereits getan haben. @node Command-line usage @section Command-line usage Dieser Abschnitt enthält zusätzliche Informationen, wie Sie LilyPond von der Kommandozeile ausführen können. Dies kann erforderlich sein, um etwa zusätzliche Optionen an das Programm zu übergeben. Außerdem sind einige Zusatzprogramme (wie etwa @code{midi2ly}) nur von der Kommandozeile verfügbar. Unter @q{Kommandozeile} verstehen wir die Kommandozeile des jeweiligen Betriebssystems. Windows Benutzern ist sie vielleicht eher unter den englischen Begriffen @q{DOS shell} oder @q{command shell} bekannt. MacOS@tie{}X Benutzer kennen sie eher unter @q{Terminal} oder @q{Konsole}. Sie sollten auch den Abschnitt @ref{MacOS X on the command-line} konsultieren. Wie die Kommandozeile im jeweiligen Betriebssystem benutzt werden kann, soll in diesem Handbuch nicht näher beschrieben werden. Sehen Sie bitte im Handbuch Ihres Betriebssystems nach oder informieren Sie sich im Internet, wenn Sie mit der Kommandozeile nicht vertraut sind. @menu * Invoking lilypond:: * Command line options:: * Environment variables:: @end menu @node Invoking lilypond @subsection Invoking lilypond @cindex LilyPond aufrufen @cindex Kommandozeilen-Optionen @cindex Optionen an der Kommandozeile Das @command{lilypond} Programm kann folgendermaßen von der Kommandozeile aufgerufen werden. @example lilypond [@var{Option}]@dots{} @var{Dateiname}@dots{} @end example Wird ein @file{Dateiname} ohne Erweiterung angegeben, so wird @file{.ly} als Standarderweiterung für LilyPond-Dateien benutzt. Um Daten von @code{stdin} einzulesen, benutzen Sie einfach einen Bindestrich (@code{-}) als @var{Dateiname}. Wenn Lilypond die Datei @file{Dateiname.ly} verarbeitet, werden daraus die Dateien @file{Dateiname.ps} und @file{Dateiname.pdf} erzeugt. Es können an @code{lilypond} auch mehrere @file{.ly} Dateien übergeben werden, die dann einzeln und voneinander unabhängig abgearbeitet werden.@footnote{Der Zustand von GUILE wird allerdings nicht nach jeder Datei zurückgesetzt, sodass Achtung geboten ist, wenn in einer Datei globale Änderungen von Scheme aus durchgeführt werden.} Falls @file{Dateiname.ly} mehr als einen @code{\score}-Block enthält, werden die weiteren Stücke in durchnummerierte Dateien der Form @file{Dateiname-1.pdf} ausgegeben. Zusätzlich wird der Wert der Variable @code{output-suffix} zwischen den ursprünglichen Dateienamen und der Zahl eingefügt. Eine Lilypond-Datei @var{Dateiname.ly} mit dem Inhalt @example #(define output-suffix "Geige") \book @{ @dots{} @} #(define output-suffix "Cello") \book @{ @dots{} @} @end example @noindent erzeugt daher die Dateien @var{Dateiname}@file{-Geige.pdf} und @var{Dateiname}@file{-Cello-1.pdf}. @node Command line options @subsection Command line options Die folgenden Kommandozeilenoptionen werden von @command{lilypond} unterstützt: @table @code @item -e,--evaluate=@var{expr} Wertet den Scheme-Ausdruck @var{expr} aus, bevor die @file{.ly} Dateien gelesen und interpretiert werden. Die @code{-e} Option kann auch mehrfach angegeben werden, die Ausdrücke werden nacheinander ausgewertet. Da der Ausdruck im @code{guile-user} Modul ausgewertet wird, ist bei der Definitionen innerhalb von @var{expr} folgendes Vorgehen nötig. An der Kommandozeile wird z.B. @code{a} im @code{guile-user} Modul definiert: @example lilypond -e '(define-public a 42)' @end example @noindent Am Beginn der @file{.ly}-Datei muss dann das @code{guile-user} Modul noch geladen werden, bevor die Definition von @var{a} verfügbar ist: @example #(use-modules (guile-user)) @end example @item -f,--format=@var{Format} Bestimmt das Ausgabeformat. Mögliche Werte von @var{Format} sind @code{svg}, @code{ps}, @code{pdf}, @code{png}, @code{tex} und @code{dvi}. Beispiel: @code{lilypond -fpng @var{Dateiname}.ly} @item -d,--define-default=@var{Variable}=@var{Wert} Damit wird die interne Programmoption @var{Variable} auf den Scheme-Wert @var{Wert} gesetzt. Wird kein @var{Wert} angegeben, so wird @var{#t} benutzt. Um eine Option auszuschalten, kann der Präfix @code{no-} dem Namen @var{Variable} der Variable vorangestellt werden. So ist etwa @cindex Point and Click, Kommandozeile @example -dno-point-and-click @end example @noindent dasselbe wie @example -dpoint-and-click='#f' @end example Hier sind ein paar interessante Optionen: @table @samp @item help Die Ausführung von @code{lilypond -dhelp} zeigt alle verfügbaren @code{-d} Optionen. @item paper-size Setzt das Standard-Papierformat, @example -dpaper-size=\"letter\" @end example @noindent Die Zeichenkette, die das Format angibt, muss in Anführungszeichen mit Backslash ( @code{\"} ) stehen. @item safe Vertraut der @code{.ly} Datei nicht. Wenn LilyPond über einen Webserver verfügbar gemacht wird, @b{MUSS} unbedingt eine die Optionen @code{--safe} oder @code{--jail} angegeben werden. Die @code{--safe} Option verhindert, dass in der .ly-Datei angegebener Scheme-Code das System gefährden kann, wie etwa in folgendem Beispiel: @quotation @verbatim #(system "rm -rf /") { c4^#(ly:export (ly:gulp-file "/etc/passwd")) } @end verbatim @end quotation Mit der @code{-dsafe} Option werden alle Scheme-Ausdrücke einem speziellen sicheren Modus ausgewertet. Dieser Modus ist vom GUILE @file{safe-r5rs} Modul abgeleitet und fügt noch zahlreiche weitere erlaubte Funktionen der LilyPond Programm-Schnittstelle hinzu. Diese Funktionen sind in @file{scm/@/safe@/-lily@/.scm} angegeben. Zusätzliche verbietet der sichere Modus auch @code{\include} Befehle sowie die Benutzung eines Backslashs in @TeX{} Zeichenketten. Im sicheren Modus ist es nicht möglich, LilyPond-Variablen nach Scheme zu exportieren. @code{-dsafe} erkennt jedoch @emph{KEINE} Überbeanspruchung der verfügbaren Ressourcen. In diesem Modus ist es also trotzdem möglich, dass LilyPond in einer Endlosschleife hängt, z.B. wenn zyklische Datenstrukturen an das Backend übergeben werden. Wenn LilyPond also auf einem öffentlich zugänglichen Webserver verfügbar gemacht wird, sollte der Prozess sowohl in der CPU- als auch in der Speichernutzung limitiert werden. Der sichere Modus verhindert auch, dass zahlreiche nützliche Musikfragmente von LilyPond verarbeitet werden. Die @code{--jail} Option ist eine sicherere Alternative, benötigt allerdings auch mehr Aufwand zur Einrichtung. @item backend Gibt an, welches Ausgabeformat das LilyPond Backend benutzt. Mögliche Werte für diese Option sind: @table @code @item tex @TeX{}-Ausgabeformat, das mit La@TeX{} weiterverarbeitet werden kann. Falls sie existiert, wird die Datei @file{file.textmetrics} gelesen, um die Textweiten zu bestimmen. @item texstr Schreibt alle Zeichenketten in eine @file{.texstr}-Datei, die mit (La)@TeX{} verarbeitet werden kann, um eine @code{.textmetrics}-Datei mit den Textweiten zu erstellen. @strong{Achtung:} Diese Funktionalität ist momentan nicht verfügbar, da der Quellcode stark umstrukturiert wurde. @item ps PostScript-Ausgabeformat. @cindex PostScript Ausgabeformat Postscript-Dateien enthalten auch TTF-, Type1- und OTF-Schriften. Allerdings wird die gesamte Schriftart eingefügt und nicht nur die benötigten Zeichen. Vor allem wenn nicht-westliche Zeichensätze benutzt werden, kann dies zu sehr großen Dateien führen. @item eps Erzeugt @q{encapsulated PostScript} (EPS). Jede Seite (oder jedes System) wird als eigene @file{EPS}-Datei ausgegeben, inklusive Schriftarten. Außerdem wird eine Datei mit allen Seiten (bzw. Systemen) und Schriftarten erzeugt. Dies ist die Standardeinstellung von @command{lilypond-book}. @item svg SVG-Ausgabe (Scalable Vector Graphics). Jede Seite wird als eigene @file{SVG}-Datei ausgegeben, inklusive eingebetteten Schriftarten. @cindex SVG (Scalable Vector Graphics) Sie benötigen einen SVG-Betrachter, der eingebettete Schriftarten unterstützt, oder einen SVG-Betrachter, der eingebettete Schriftarten durch OTF-Schriften ersetzen kann. In UNIX und Linux kann z.B. @uref{http://www.inkscape.org,Inkscape} (ab Version 0.42) benutzt werden, nachdem die OTF-Schriften aus dem LilyPond-Verzeichnis (typischerweise @file{/usr/share/lilypond/VERSION/fonts/otf/}) in das Verzeichnis @file{~/.fonts/} kopiert wurden. @item scm Gibt die rohen Scheme-basierenden Zeichenbefehle aus, wie sie intern von LilyPond benutzt werden. @cindex Scheme dump @end table Beispiel: @code{lilypond -dbackend=svg @var{Dateiname}.ly} @cindex Ausgabeformat @item preview Erzeugt eine Ausgabedatei, die nur die Titelzeilen und das erste System enthält. @item print-pages Erzeugt vollständige Seiten (Standardeinstellung). @code{-dno-print-pages} ist in Verbindung mit @code{-dpreview} nützlich. @end table @item -h,--help Zeigt eine Zusammenfassung der Programmbenutzung und der Optionen. @item -H,--header=@var{FELD} Gibt den Inhalt eines Feldes aus dem @code{\header}-Block in die Datei @file{Dateiname.@var{FELD}} aus. @item --include, -I=@var{Verzeichnis} Fügt @var{Verzeichnis} zur Liste der Suchpfade hinzu. @cindex Dateisuche @cindex Suchpfad @item -i,--init=@var{Initialisierungsdatei} Benutzt @var{Initialisierungsdatei} zur gesamten Programminitialisierung. Der Standardwert ist @file{init.ly}. @item -o,--output=@var{DATEI} Schreibt das Ergebnis der Verarbeitung mit LilyPond in die Ausgabedatei @var{DATEI}. Die entsprechende Dateinamenserweiterung wird angehängt (z.B. @code{.pdf} für pdf, @code{.tex} für tex, etc.). @item --ps Erzeugt PostScript. @item --dvi Erzeugt DVI-Dateien. In diesem Fall sollte das @TeX{}-Backend angegeben werden, d.h. auch @code{-dbackend=tex}. @item --png Erzeugt eine Grafik-Datei im PNG-Format von jeder Seite. Diese Option impliziert auch @code{--ps}. Die Auflösung in DPI der Grafik kann festgelegt werden durch @example -dresolution=110 @end example @item --pdf Erzeugt PDF-Dateien. Dies impliziert @code{--ps}. @item -j,--jail=@var{Benutzer},@var{Gruppe},@var{Jail-Verzeichnis},@var{Arbeitsverzeichnis} Führt @command{lilypond} in einem chroot-Jail aus. Die @code{--jail} Option ist eine flexiblere Alternative zu @code{--safe}, wenn LilyPond über das Internet verfügbar gemacht wird oder LilyPond-Quelldateien von Dritten automatisch vararbeitet werden. Sie funktioniert dergestalt, dass das Wurzelverzeichnis von @command{lilypond} auf @var{Jail-Verzeichnis} gesetzt wird, bevor die tatsächliche Kompilierung der .ly-Datei beginnt. Der Benutzer und die Gruppe werden auf die angegebenen Werte gesetzt und das aktuelle Arbeitsverzeichnis wird ebenfalls auf den angegebenen Wert @var{Arbeitsverzeichnis} gesetzt. Diese Einstellungen garantieren (zumindest in der Theorie), dass es nicht möglich ist, aus dem Jail auszubrechen. Damit @code{--jail} funktioniert, muss @command{lilypond} allerdings als root ausgeführt werden, was normalerweise auf sichere Art mit dem Kommando @command{sudo} erreicht werden kann. Das Jail-Verzeichnis zu erstellen ist etwas heikel, da LilyPond alle zur Ausführung nötigen Bibliotheken und Dateien @emph{innerhalb des Jail-Verzeichnisses} finden muss. Ein typisches Setup besteht aus folgenden Punkten: @table @asis @item Erstellung eines getrennten Dateisystems Ein eigenes Dateisystem muss für LilyPond erstellt werden, sodass es mit sicheren Einstellungen wie @code{noexec}, @code{nodev} und @code{nosuid} eingebunden werden kann. Damit ist es unmöglich, Programme von diesem Dateisystem auszuführen oder direkt auf eine Hardware-Schnittstelle zuzugreifen. Wenn Sie keine eigene Partition erstellen möchten, können Sie auch eine Datei der entsprechenden Größe erstellen und sie als @q{loop}-Gerät einbinden. Ein getrenntes Dateisystem garantiert auch, dass LilyPond nicht mehr Festplattenspeicher benutzt als erlaubt. @item Erstellung eines eigenen Benutzerkontos Es sollte ein eigener Benutzer und eine eigene Gruppe (z. B. @code{lily}/@code{lily}) mit geringen Rechten für die Ausführung von LilyPond innerhalb des Jails benutzt werden. Nur ein einziges Verzeichnis des Jails sollte für den Benutzer schreibbar sein und als @var{Arbeitsverzeichnis} an @code{lilypond} übergeben werden. @item Einrichtung des Jails LilyPond muss zahlreiche Dateien für die Ausführung einlesen. All diese Dateien müssen in das Jail-Verzeichnis kopiert werden (mit denselben Pfaden wie im tatsächlichen Wurzel-Dateisystem). Die gesamte LilyPond-Installation (typischerweise @file{/usr/share/lilypond}) sollte kopiert werden. Falls Probleme auftreten, ist es am einfachsten, Lilypond mittels @command{strace} zu starten, wodurch Sie relativ leicht feststellen können, welche Dateien im Jail noch fehlen. @item Ausführung von LilyPond In einem mit @code{noexec} eingebundenen Jail ist es nicht möglich, externe Programme auszuführen. Daher muss LilyPond auf eine Art gestartet werden, die keine weitere Ausführung von Programmen benötigt. Wie bereits erwähnt muss LilyPond mit Administrator-Rechten gestartet werden (die es allerdings sofort wieder abgibt), beispielsweise mittels @command{sudo}. Außerdem ist es eine gute Idee, die LilyPond zur Verfügung stehende CPU-Zeit zu limitieren (z. B. mit @command{ulimit -t}) und -- falls das Betriebssystem dies unterstützt -- auch den zur Verfügung stehenden Hauptspeicher. @end table @item -v,--version Gibt die Versionsnummer aus. @item -V,--verbose Gibt ausführliche informative Meldungen aus: Zeigt die vollen Dateipfade aller gelesenen Dateien sowie Informationen über die Laufzeit. @item -w,--warranty Zeigt die Garantiebedingungen an, unter denen GNU LilyPond steht. (Es besteht @strong{KEINERLEI GARANTIE}!) @end table @node Environment variables @subsection Environment variables @cindex LANG @cindex LILYPOND_DATADIR @command{lilypond} erkennt und benützt die folgenden Umgebungsvariablen: @table @code @item LILYPOND_DATADIR Diese Variable gibt das Verzeichnis an, wo Lilypond seine eigenen Dateien, Meldungen und Übersetzungen finden kann. Dieses Verzeichnis sollte Unterverzeichnisse @file{ly/}, @file{ps/}, @file{tex/}, etc. beinhalten. @item LANG Gibt die Sprache an, in der Warnungen und Fehlermeldungen ausgegeben werden. @item LILYPOND_GC_YIELD Mit dieser Variable (mit Werten zwischen 0 und 100) kann die Feinabstimmung zwischen dem Bedarf an Hauptspeicher und Rechenleistung bei der Ausführung von LilyPond durchgeführt werden. Bei höheren Werten benutzt LilyPond mehr Hauptspeicher, benötigt aber weniger Prozessor-Leistung. Bei niedrigeren Werten wird mehr Prozessor-Zeit, dafür weniger Hauptspeicher benötigt. Voreinstellung ist ein Wert von @code{70}. @end table @node Error messages @section Error messages @cindex error messages Während der Verarbeitung einer Dateien können diverse Meldungen an der Kommandozeile auftreten: @table @emph @item Warnung @cindex Warnung Irgendetwas ist verdächtig. Wenn Sie etwas Ungewöhnliches in Ihrer Datei durchführen, dann werden Sie die Meldung verstehen und können sie gegebenenfalls ignorieren. Im Normalfall jedoch bedeutet eine Warnung, dass mit Ihrer Datei etwas nicht stimmt, LilyPond jedoch trotzdem versucht, die Datei soweit wie möglich korrekt zu übersetzen. @item Fehler @cindex Fehler Irgendetwas stimmt definitiv nicht. Der aktuelle Bearbeitungsschritt (Einlesen, Interpretieren oder Formatieren der Datei) wird noch fertig ausgeführt, danach bricht die Bearbeitung aber ab. @item Fataler Fehler @cindex Fataler Fehler Irgendetwas stimmt definitiv nicht und LilyPond kann nicht weiter ausgeführt werden. Dies ist nur sehr selten der Fall, meist sind die Schriftarten nicht korrekt installiert. @item Scheme Fehler @cindex Fehlerprotokoll, Scheme @cindex Scheme Fehler Fehler, die während der Ausführung von Scheme-Code auftreten, werden vom Scheme-Interpreter aufgefangen und an der Kommandozeile ausgegeben. Wenn Sie LilyPond mit der @code{--verbose} Option (auch @code{-V}) ausführen, wird der sogennante @q{Call trace} ausgegeben, der die aufgerufenen Funktionen zur Zeit des Fehlers angibt. @item Programmierfehler @cindex Programmierfehler Eine interne Inkonsistenz ist aufgetreten. Diese Fehlermeldungen sollen den Programmierern die Fehlersuche erleichtern und können meistens einfach ignoriert werden. In manchen Fällen werden so viele Meldungen ausgegeben, dass die Lesbarkeit der restliche Ausgabe davon beeinträchtigt wird. @item Abgebrochen (core dumped) Dies bezeichnet einen ernsten Programmierfehler, der das Programm zum Absturz gebracht hat. Solche Fehler werden als kritisch angesehen. Falls daher einer auftritt, senden Sie bitte einen Bug-Report! @end table @cindex Fehlermeldung, Format @cindex Form der Fehlermeldungen Wenn Warnungen oder Fehlermeldungen mit einer konkreten Stelle in der Eingabedatei verknüpft werden können, dann hat die Meldung die folgende Form: @example @var{Dateiname}:@var{Zeile}:@var{Spalte}: @var{Meldung} @var{Fehlerhafte Eingabezeile} @end example Ein Zeilenumbruch wird in der fehlerhaften Zeile an jener Stelle eingefügt, wo der Fehler aufgetreten ist. Zum Beispiel @example test.ly:2:19: Fehler: keine gültige Dauer: 5 @{ c'4 e' 5 g' @} @end example Diese Stellen sind LilyPonds Vermutung, wo die Warnung oder der Fehler aufgetreten ist, allerdings treten Warnungen und Fehler ja gerade in unerwarteten Fällen auf. Manchmal kann Lilypond auch eine fehlerhafte Stelle zwar noch problemlos verarbeiten, ein paar Zeilen später wirkt sich der Fehler aber dann doch noch aus. In solchen Fällen, wo Sie in der angegebenen Zeile keinen Fehler erkennen, sollten Sie auch die Zeilen oberhalb der angegebenen Stelle genauer unter die Lupe nehmen. @node Updating files with convert-ly @section Updating with @command{convert-ly} @untranslated @subsection Command line options @menu * Problems with convert-ly:: @end menu @node Problems with convert-ly @subsection Problems with @code{convert-ly} @untranslated @node Reporting bugs @section Reporting bugs @cindex Fehler @cindex Fehler melden Wenn Sie eine Datei haben, die zu einem Absturz von LilyPond oder zu einer fehlerhaften Ausgabe führt, so ist dies ein @q{Bug}. Die List der aktuell bekannten derartigen Fehler findet sich in unserem @q{Google Bug Tracker}: @uref{http://code.google.com/p/lilypond/issues/list} Wenn Sie einen Fehler gefunden haben, der noch nicht aufgelistet ist, melden Sie dies bitte anhand der Anweisungen auf der Seite @uref{http://lilypond.org/web/devel/participating/bugs} Wenn Sie Beispieldateien für den Fehler erstellen, versuchen Sie bitte, die Datei möglichst minimal zu halten und nur jenen LilyPond Code aufzunehmen, der auch wirklich für den Fehler verantwortlich ist. Meldungen mit Beispieldateien, die nicht minimal sind, können wir meist aus Zeitgründen nicht effektiv bearbeiten.