@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:: * Reporting bugs:: * Editor support:: * Invoking lilypond-latex:: @end menu @node Invoking lilypond @section Invoking lilypond @cindex Invoking LilyPond @cindex command line options @cindex options, command line @cindex switches The @code{lilypond} 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} files, 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 for access to some internal variables. Use @code{-e '(ly:option-usage)'} for more information. @item -f,--format=@var{format} @c @c A comma separated list of back-end output formats to use. Choices are @code{tex} (for @TeX{} output, to be processed with La@TeX{}, and @code{ps} for PostScript. There are other output options, but they are intended for developers. @cindex output format, setting @cindex PostScript output @cindex Scheme dump @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}. @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 of the score. @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 @verbatim #(system "rm -rf /") { c4^#(ly:export (ly:gulp-file "/etc/passwd")) } @end verbatim 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. @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 it 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/1.6.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 is printed of the offending function call. @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 bugreport. @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 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) warning 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 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 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 doing 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: @verbatim 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 verbatim @lilypond \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 in the input file to the source of a symbol in the graphical output. See @ref{Point and click}. @node Invoking lilypond-latex @section Invoking lilypond-latex Before LilyPond 3.0, the @code{lilypond} program only generated music notation. Titles and page layout was done in a separate wrapper program. For compatibility with older files, this wrapper program has been retained as @code{lilypond-latex}. It uses the LilyPond program and La@TeX{} to create a nicely titled piece of sheet music. Use of this program is only necessary if the input file contains special La@TeX{} options or formatting codes in markup texts. The @code{lilypond-latex} wrapper is invoked from the command-line as follows @example @code{lilypond-latex} [@var{option}]@dots{} @var{file}@dots{} @end example To have @code{lilypond-latex} read from stdin, use a dash @code{-} for @var{file}. The program supports the following options. @cindex stdin, reading @table @code @item -k,--keep Keep the temporary directory with all output files. The temporary directory is created in the current directory as @code{@code{lilypond}.dir}. @item -h,--help Print usage help. @item -I,--include=@var{dir} Add @var{dir} to LilyPond's include path. @item -o,--output=@var{file} Generate output to @var{file}. The extension of @var{file} is ignored. @item --png Also generate pictures of each page, in PNG format. @item --preview Also generate a picture of the first system of the score. @cindex preview @cindex picture @cindex bitmap @cindex pixmap @cindex thumbnail @cindex screen shot @item -s,--set=@var{key}=@var{val} Add @var{key}= @var{val} to the settings, overriding those specified in the files. Possible keys: @code{language}, @code{latexheaders}, @code{latexpackages}, @code{latexoptions}, @code{papersize}, @code{linewidth}, @code{orientation}, @code{textheight}. @item -v,--version Show version information. @item -V,--verbose Be verbose. This prints out commands as they are executed, and more information about the formatting process is printed. @item --debug Print even more information. This is useful when generating bug reports. @item -w,--warranty Show the warranty with which GNU LilyPond comes. (It comes with @strong{NO WARRANTY}!) @end table @subsection Additional parameters The @code{lilypond} program responds to several parameters specified in a @code{\layout} section of the input file. They can be overridden by supplying a @code{--set} command line option. @table @code @item language Specify La@TeX{} language: the @code{babel} package will be included. Default: unset. Read from the @code{\header} block. @item latexheaders Specify additional La@TeX{} headers file. Normally read from the @code{\header} block. Default value: empty. @item latexpackages Specify additional La@TeX{} packages file. This works cumulative, so you can add multiple packages using multiple @code{-s=latexpackages} options. Normally read from the @code{\header} block. Default value: @code{geometry}. @item latexoptions Specify additional options for the La@TeX{} @code{\documentclass}. You can put any valid value here. This was designed to allow @code{lilypond} to produce output for double-sided paper, with balanced margins and page numbers on alternating sides. To achieve this specify @code{twoside}. @item orientation Set orientation. Choices are @code{portrait} or @code{landscape}. Is read from the @code{\layout} block, if set. @item textheight The vertical extension of the music on the page. It is normally calculated automatically, based on the paper size. @item linewidth The music line width. It is normally read from the @code{\layout} block. @item papersize The paper size (as a name, e.g. @code{a4}). It is normally read from the @code{\layout} block. @item fontenc The font encoding, should be set identical to the @code{font-encoding} property in the score. @end table