@c -*- coding: latin-1; mode: texinfo; -*- @node Running LilyPond @chapter Running LilyPond This chapter details the technicalities of running LilyPond. @menu * Invoking lilypond:: * Error messages:: * Updating files with convert-ly:: * Reporting bugs:: * Editor support:: @end menu @node Invoking lilypond @section Invoking lilypond @cindex Invoking LilyPond @cindex command line options @cindex options, command line @cindex switches The @code{lilypond} executable may be called as follows from the command line. @example lilypond [@var{option}]@dots{} @var{file}@dots{} @end example When invoked with a filename that has no extension, the @file{.ly} extension is tried first. To read input from stdin, use a dash (@code{-}) for @var{file}. When @file{filename.ly} is processed it will produce @file{filename.tex} as output (or @file{filename.ps} for PostScript output). If @file{filename.ly} contains more than one @code{\score} block, then the rest of the scores will be output in numbered files, starting with @file{filename-1.tex}. Several files can be specified; they will each be processed independently. @footnote{The status of GUILE is not reset after processing a @code{.ly} file, so be careful not to change any system defaults from within Scheme.} @section Command line options The following options are supported: @table @code @item -e,--evaluate=@var{expr} Evaluate the Scheme @var{expr} before parsing any @file{.ly} files. Multiple @code{-e} options may be given, they will be evaluated sequentially. The function @code{ly:set-option} allows access to some internal variables. Use @code{-e '(ly:option-usage)'} for more information. @item -f,--format=@var{format} which formats should be written. Choices are @code{svg}, @code{ps}, @code{pdf}, @code{png}, @code{tex}, @code{dvi}. @item -b,--backend=@var{format} the output format to use for the back-end. Choices are @table @code @item tex for @TeX{} output, to be processed with La@TeX{}. If present, the file @file{file.textmetrics} is read to determine text extents. @item texstr dump text strings to @file{.texstr} file, which can be run through (La)@TeX{}, resulting in a @code{.textmetrics} file, which contains the extents of strings of text. @item ps for PostScript. @cindex PostScript output Postscript files include TTF, Type1 and OTF fonts. No subsetting of these fonts is done. When using oriental character sets, this can lead to huge files. @item eps for encapsulated PostScript. This dumps every page (system) as a separate @file{EPS} file, without fonts, and as one collated @file{EPS} file with all pages (systems) including fonts. This mode is used by default by lilypond-book. @item svg for SVG (Scalable Vector Graphics) @cindex SVG (Scalable Vector Graphics) @item scm for a dump of the raw, internal Scheme-based drawing commands. @cindex Scheme dump @end table @cindex output format, setting @item -h,--help Show a summary of usage. @item --include, -I=@var{directory} Add @var{directory} to the search path for input files. @cindex file searching @cindex search path @item -i,--init=@var{file} Set init file to @var{file} (default: @file{init.ly}). @item -o,--output=@var{FILE} Set the default output file to @var{FILE}. The appropriate suffix will be added (ie @code{.pdf} for pdf, @code{.tex} for tex, etc). @item --ps Generate PostScript. @item --dvi Generate DVI files. In this case, the @TeX{} backend should be specified, i.e., @code{-f tex}. @item --png Generate pictures of each page, in PNG format. This implies @code{--ps}. @item --pdf Generate PDF. This implies @code{--ps}. @item --preview Generate an output file containing the titles and the first system @item --no-pages Do not generate the full pages. Useful in combination with @code{--preview}. @item -s,--safe Do not trust the @code{.ly} input. When LilyPond formatting is available through a web server, the @code{--safe} @b{MUST} be passed. This will prevent inline Scheme code from wreaking havoc, for example @quotation @verbatim #(system "rm -rf /") { c4^#(ly:export (ly:gulp-file "/etc/passwd")) } @end verbatim @end quotation The @code{--safe} option works by evaluating in-line Scheme expressions in a special safe module. This safe module is derived from GUILE @file{safe-r5rs} module, but adds a number of functions of the LilyPond API. These functions are listed in @file{scm/@/safe@/-lily@/.scm}. In addition, @code{--safe} disallows @code{\include} directives and disables the use of backslashes in @TeX{} strings. In @code{--safe} mode, it is not possible to import LilyPond variables into Scheme. @code{--safe} does @emph{not} detect resource overuse. It is still possible to make the program hang indefinitely, for example by feeding cyclic data structures into the backend. Therefore, if using LilyPond on a publicly accessible webserver, the process should be limited in both CPU and memory usage. @item -v,--version Show version information. @item -V,--verbose Be verbose: show full paths of all files read, and give timing information. @item -w,--warranty Show the warranty with which GNU LilyPond comes. (It comes with @strong{NO WARRANTY}!) @end table @section Environment variables For processing both the @TeX{} and the PostScript output, the appropriate environment variables must be set. The following scripts do this: @itemize @bullet @item @file{buildscripts/@/out/@/lilypond@/-profile} (for SH shells) @item @file{buildscripts/@/out/@/lilypond@/-login} (for C-shells) @end itemize They should normally be sourced as part of the login process. If these scripts are not run from the system wide login process, then you must run them yourself. @cindex installing LilyPond If you use sh, bash, or a similar shell, then add the following to your @file{.profile}: @example . @var{/the/path/to/}lilypond-profile @end example If you use csh, tcsh or a similar shell, then add the following to your @file{~/.login}: @example source @var{/the/path/to/}lilypond-login @end example Of course, in both cases, you should substitute the proper location of either script. These scripts set the following variables: @table @code @item TEXMF To make sure that @TeX{} and lilypond find data files (among others @file{.tex}, @file{.mf}, and @file{.tfm}), you have to set @code{TEXMF} to point to the lilypond data file tree. A typical setting would be @example @{/usr/share/lilypond/2.4.0,@{!!/usr/share/texmf@}@} @end example @end table @cindex PostScript @cindex TEXMF @cindex printing postscript The binary itself recognizes the following environment variables: @table @code @item LILYPONDPREFIX This specifies a directory where locale messages and data files will be looked up by default. The directory should contain subdirectories called @file{ly/}, @file{ps/}, @file{tex/}, etc. @item LANG This selects the language for the warning messages. @end table @cindex LANG @cindex LILYPONDPREFIX @node Error messages @section Error messages @cindex error messages Different error messages can appear while compiling a file: @table @emph @cindex warning @item Warning Something looks suspect. If you are requesting something out of the ordinary then you will understand the message, and can ignore it. However, warnings usually indicate that something is wrong with the input file. @item Error Something is definitely wrong. The current processing step (parsing, interpreting, or formatting) will be finished, but the next step will be skipped. @cindex error @cindex fatal error @item Fatal error Something is definitely wrong, and LilyPond cannot continue. This happens rarely. The most usual cause is misinstalled fonts. @cindex trace, Scheme @cindex call trace @cindex Scheme error @item Scheme error Errors that occur while executing Scheme code are caught by the Scheme interpreter. If running with the verbose option (@code{-V} or @code{--verbose}) then a call trace of the offending function call is printed. @cindex Programming error @item Programming error There was some internal inconsistency. These error messages are intended to help the programmers and debuggers. Usually, they can be ignored. Sometimes, they come in such big quantities that they obscure other output. In this case, file a bug-report. @item Aborted (core dumped) This signals a serious programming error that caused the program to crash. Such errors are considered critical. If you stumble on one, send a bug-report. @end table @cindex errors, message format If warnings and errors can be linked to some part of the input file, then error messages have the following form @example @var{filename}:@var{lineno}:@var{columnno}: @var{message} @var{offending input line} @end example A line-break is inserted in the offending line to indicate the column where the error was found. For example, @example test.ly:2:19: error: not a duration: 5: @{ c'4 e'5 g' @} @end example These locations are LilyPond's best guess about where the warning or error occured, but (by their very nature) warnings and errors occur when something unexpected happens. If you can't see an error in the indicated line of your input file, try checking one or two lines above the indicated position. @node Updating files with convert-ly @section Updating with @command{convert-ly} The LilyPond input syntax is routinely changed to simplify it or improve it in different ways. As a side effect of this, the LilyPond interpreter often is no longer compatible with older input files. To remedy this, the program @command{convert-ly} can be used to deal with most of the syntax changes between LilyPond versions. It uses @code{\version} statements in the input files to detect the old version number. In most cases, to upgrade your input file it is sufficient to run @example covert-ly -e myfile.ly @end example If there are no changes to myfile.ly and file called myfile.ly.NEW is created, then myfile.ly is already updated. To upgrade LilyPond fragments in texinfo files, use @example convert-ly --from=... --to=... --no-version *.itely @end example In general, the program is invoked as follows: @example convert-ly [@var{option}]@dots{} @var{file}@dots{} @end example The following options can be given: @table @code @item -e,--edit Do an inline edit of the input file. Overrides @code{--output}. @item -f,--from=@var{from-patchlevel} Set the version to convert from. If this is not set, @command{convert-ly} will guess this, on the basis of @code{\version} strings in the file. @item -o,--output=@var{file} Set the output file to write. @item -n,--no-version Normally, @command{convert-ly} adds a @code{\version} indicator to the output. Specifying this option suppresses this. @item -s, --show-rules Show all known conversions and exit. @item --to=@var{to-patchlevel} Set the goal version of the conversion. It defaults to the latest available version. @item -h, --help Print usage help. @end table @command{convert-ly} always converts up to the last syntax change handled by it. This means that the @code{\version} number left in the file is usually lower than the version of @command{convert-ly} itself. @refbugs Not all language changes are handled. Only one output option can be specified. @c We might want to make this a completely new section, along with more @c info about how to upgrade old input files. -gp @ignore Copy and paste from CVS, last updated Feb 14, 2005 http://savannah.gnu.org/cgi-bin/viewcvs/*checkout*/lilypond/lily-bugs/bugs/convert-ly.txt?rev=HEAD&content-type=text/plain @end ignore @verbatim There are a few things that the convert-ly cannot handle. Here's a list of limitations that the community has complained about. This bug report structure has been chosen because convert-ly has a structure that doesn't allow to smoothly implement all needed changes. Thus this is just a wishlist, placed here for reference. 1.6->2.0: Doesn't always convert figured bass correctly, specifically things like {< >}. Mats' comment on working around this: To be able to run convert-ly on it, I first replaced all occurencies of '{<' to some dummy like '{#' and similarly I replaced '>}' with '&}'. After the conversion, I could then change back from '{ #' to '{ <' and from '& }' to '> }'. Doesn't convert all text markup correctly. Only very simple cases are fixed. 2.0->2.2: Doesn't handle \partcombine Doesn't do \addlyrics => \lyricsto, this breaks some scores with multiple stanzas. 2.2->2.4: \turnOff (used in \set Staff.VoltaBracket = \turnOff) is not properly converted. 2.4.2->2.5.9 \markup{ \center-align <{ ... }> } should be converted to: \markup{ \center-align {\line { ... }} } but now, \line is missing. @end verbatim @node Reporting bugs @section Reporting bugs @cindex bugs @cindex reporting bugs If you have input that results in a crash or an erroneous output, then that is a bug. We try to respond to bug-reports promptly, and fix them as soon as possible. Help us by sending a defective input file, so we can reproduce the problem. Make it small, so we can easily debug the problem. Don't forget to tell which version of LilyPond you use! Send the report to @email{bug-lilypond@@gnu.org}. When you've found a bug, have a look at our @uref{http://@/lilypond@/.org/@/doc/@/v2.3/@/bugs/,bug database} to see if it has already been reported. You could also try to do a few searches on the mailing list for the bug. Sometimes the bug will have already been reported and a fix or workaround is already known. Here is an example of a good bug report: @example It seems that placement of accidentals is broken. In the following example, the accidental touches the note head. Using Mac OSX 10.3.5, fink package lilypond-unstable \version "2.3.22" \relative c''@{ a4 b cis d @} @end example @lilypond[quote] \version "2.3.22" \relative c''{ \override Accidental #'extra-offset = #'(1.0 . 0) a4 b cis d } @end lilypond @node Editor support @section Editor support @cindex editors @cindex vim @cindex emacs @cindex modes, editor @cindex syntax coloring @cindex coloring, syntax There is support from different editors for LilyPond. @table @asis @item Emacs Emacs has a @file{lilypond-mode}, which provides keyword autocompletion, indentation, LilyPond specific parenthesis matching and syntax coloring, handy compile short-cuts and reading LilyPond manuals using Info. If @file{lilypond-mode} is not installed on your platform, then read the @ifhtml @uref{../../../topdocs/out-www/INSTALL.html,installation instructions}. @end ifhtml @ifnothtml installation instructions. @end ifnothtml @item VIM For @uref{http://@/www@/.vim@/.org,VIM}, a @file{vimrc} is supplied, along with syntax coloring tools. For more information, refer to the @ifhtml @uref{../../../topdocs/out-www/INSTALL.html,installation instructions}. @end ifhtml @ifnothtml installation instructions. @end ifnothtml @item JEdit The @uref{http://@/www@/.jedit@/.org/,jEdit} editor has a LilyPond plugin. This plugin includes a DVI viewer, integrated help and viewing via GhostScript. It can be installed by doing @key{Plugins > Plugin Manager}, and selecting @code{LilyTool} from the @key{Install} tab. @end table All these editors can be made to jump into the input file to the source of a symbol in the graphical output. See @ref{Point and click}.