#LyX 2.4 created this file. For more info see https://www.lyx.org/ \lyxformat 620 \begin_document \begin_header \save_transient_properties true \origin /systemlyxdir/examples/Modules/ \textclass article \use_default_options true \begin_modules lilypond \end_modules \maintain_unincluded_children no \language english \language_package default \inputencoding utf8 \fontencoding auto \font_roman "lmodern" "default" \font_sans "lmss" "default" \font_typewriter "lmtt" "default" \font_math "auto" "auto" \font_default_family default \use_non_tex_fonts false \font_sc false \font_roman_osf false \font_sans_osf false \font_typewriter_osf false \font_sf_scale 100 100 \font_tt_scale 100 100 \use_microtype false \use_dash_ligatures false \graphics default \default_output_format default \output_sync 0 \bibtex_command default \index_command default \paperfontsize default \spacing single \use_hyperref true \pdf_title "LilyPond-book and LyX" \pdf_author "The LyX Team" \pdf_bookmarks true \pdf_bookmarksnumbered true \pdf_bookmarksopen true \pdf_bookmarksopenlevel 1 \pdf_breaklinks false \pdf_pdfborder false \pdf_colorlinks true \pdf_backref false \pdf_pdfusetitle false \pdf_quoted_options "linkcolor=blue,urlcolor=blue,pdfstartview=XYZ" \papersize default \use_geometry true \use_package amsmath 1 \use_package amssymb 1 \use_package cancel 1 \use_package esint 1 \use_package mathdots 1 \use_package mathtools 1 \use_package mhchem 1 \use_package stackrel 1 \use_package stmaryrd 1 \use_package undertilde 1 \cite_engine basic \cite_engine_type default \biblio_style plain \use_bibtopic false \use_indices false \paperorientation portrait \suppress_date true \justification true \use_refstyle 0 \use_minted 0 \use_lineno 0 \index Index \shortcut idx \color #008000 \end_index \leftmargin 2cm \topmargin 2cm \rightmargin 2cm \bottommargin 2cm \secnumdepth 3 \tocdepth 3 \paragraph_separation indent \paragraph_indentation default \is_math_indent 0 \math_numbering_side default \quotes_style english \dynamic_quotes 0 \papercolumns 1 \papersides 1 \paperpagestyle default \tablestyle default \tracking_changes false \output_changes false \change_bars false \postpone_fragile_content false \html_math_output 0 \html_css_as_file 0 \html_be_strict true \docbook_table_output 0 \docbook_mathml_prefix 1 \end_header \begin_body \begin_layout Title LilyPond-book and \SpecialChar LyX \end_layout \begin_layout Author The \SpecialChar LyX Team \end_layout \begin_layout Abstract This document explains and demonstrates the inclusion of musical snippets in a \SpecialChar LyX document, using the LilyPond syntax for music notation and the LilyPond-book utility for processing. \end_layout \begin_layout Section Introduction \end_layout \begin_layout Standard LilyPond is an open-source project that renders possible the creation of beautiful computer-generated musical scores. The project consists of a text-based music notation language, and a program to process this notation into musical scores. \end_layout \begin_layout Standard While LilyPond itself supports the display of title, author information, footnotes, endnotes, etc., its primary focus is on music typesetting. For text typesetting, other programs are generally better suited. LilyPond-book is a utility provided by the LilyPond project that helps incorporate musical scores using the LilyPond notation into \SpecialChar LaTeX documents, among other formats. \end_layout \begin_layout Standard This document describes the use of the LilyPond music notation within \SpecialChar LyX documents that use a \SpecialChar LaTeX -based layout, thus combining the beauty and quality of the typesetting achieved by both \SpecialChar LaTeX and LilyPond. While a basic understanding of the LilyPond syntax for music notation is in order, knowledge of \SpecialChar LaTeX is not necessary when using \SpecialChar LyX . \end_layout \begin_layout Standard Section \begin_inset CommandInset ref LatexCommand ref reference "sec:Using-LilyPond-code" nolink "false" \end_inset explains the requirements, usage instructions, and shortcomings of LilyPond music notation within \SpecialChar LyX . Section \begin_inset CommandInset ref LatexCommand ref reference "sec:LilyPond-examples" nolink "false" \end_inset demonstrates the beauty and quality of the typesetting with a few examples. \end_layout \begin_layout Section Using LilyPond code within \SpecialChar LyX \begin_inset CommandInset label LatexCommand label name "sec:Using-LilyPond-code" \end_inset \end_layout \begin_layout Standard Support for LilyPond music notation (LilyPond code) within \SpecialChar LyX is enabled by adding the LilyPond module to your document. This is done from the menu \family sans Document\SpecialChar menuseparator Settings \family default , then selecting LilyPond in the list of modules. You can use any \SpecialChar LaTeX -based \SpecialChar LyX layout and use the regular preview and export mechanism; \SpecialChar LyX will take care of processing the mixed \SpecialChar LaTeX /LilyPond code through LilyPond-book for you. LilyPond-book can also handle DocBook and HTML documents, but the integration of these document types with LilyPond-book and \SpecialChar LyX is missing at the moment. \end_layout \begin_layout Subsection Requirements \end_layout \begin_layout Standard LilyPond-book version 2.13 or newer. \begin_inset Foot status collapsed \begin_layout Plain Layout LilyPond-book supports \SpecialChar LaTeX output since version 2.1. However, some features used by \SpecialChar LyX are available only in recent versions: PDF\SpecialChar LaTeX support (version 2.9), the \family typewriter --lily-output-dir \family default flag (version 2.11) and especially the \family typewriter --safe \family default flag (version 2.13). \end_layout \end_inset \end_layout \begin_layout Subsection Integration \end_layout \begin_layout Standard The module provides a LilyPond inset which you insert from the menu \family sans Insert\SpecialChar menuseparator Custom \begin_inset space ~ \end_inset Insets \family default . This inset is for typing the LilyPond code which will be typeset into your musical notes. First, let us try a simple scale: \end_layout \begin_layout Standard \begin_inset Flex LilyPond status open \begin_layout Plain Layout \begin_inset Argument 1 status open \begin_layout Plain Layout staffsize=28 \end_layout \end_inset \end_layout \begin_layout Plain Layout \backslash relative c'' { \end_layout \begin_layout Plain Layout g a b c \end_layout \begin_layout Plain Layout } \end_layout \end_inset \end_layout \begin_layout Standard \noindent The previous \SpecialChar LyX inset produces the following \SpecialChar LaTeX -lookalike code: \end_layout \begin_layout LyX-Code \backslash begin{lilypond}[staffsize=28] \end_layout \begin_layout LyX-Code \end_layout \begin_layout LyX-Code \backslash relative c'' { \end_layout \begin_layout LyX-Code g a b c \end_layout \begin_layout LyX-Code } \end_layout \begin_layout LyX-Code \backslash end{lilypond} \end_layout \begin_layout Standard What appear first inside square brackets are options to pass to LilyPond-book. This is inserted in \SpecialChar LyX from the \family sans Insert \family default menu, in the same way that the LilyPond inset itself is inserted. Here, we set the dimension of the staff to 28 \begin_inset space \thinspace{} \end_inset pt. Other options can be added by separating them by a comma, for example: \family typewriter [staffsize=28,verbatim] \family default . A list of music fragment options is available in the LilyPond documentation. This whole block can be omitted when the default settings are desired. \end_layout \begin_layout Standard What follows after the options block is the textual representation in LilyPond syntax of a musical fragment. This code is not, in fact, processed by \SpecialChar LaTeX , but is preprocessed by LilyPond-book, which creates the graphics files and includes them in the \SpecialChar LaTeX document by replacing the above with a \family typewriter \backslash includegraphics{\SpecialChar ldots } \family default command. \end_layout \begin_layout Standard Thus, the conversion process is as follow: \family sans \SpecialChar LyX \SpecialChar menuseparator LilyPond-book\SpecialChar menuseparator \SpecialChar LaTeX \family default . \SpecialChar LyX creates a .lytex file, LilyPond-book creates a .tex files and the accompanying image files, and \SpecialChar LaTeX creates the final document. Every step of the tool chain obeys your spacing, so whether you put the musical extract inline, or in its own paragraph, centered, left-aligned, etc., what you see in the \SpecialChar LyX window should be respected in the final format. An example of inline use may be to display a chord name, such as \begin_inset Flex LilyPond status open \begin_layout Plain Layout \begin_inset Argument 1 status open \begin_layout Plain Layout staffsize=12 \end_layout \end_inset \backslash markup { \backslash concat {B \backslash super \backslash flat } } \end_layout \end_inset , or perhaps a very short snippet. \end_layout \begin_layout Subsection Previews \end_layout \begin_layout Standard It is possible to have a direct feedback of what the music notation looks like from within \SpecialChar LyX . To do this, wrap a LilyPond inset inside a Preview inset, which you find from the menu \family sans Insert\SpecialChar menuseparator Preview \family default . This only affects the display within \SpecialChar LyX , not the output: \end_layout \begin_layout Standard \begin_inset Preview \begin_layout Standard \begin_inset Flex LilyPond status collapsed \begin_layout Plain Layout \backslash relative c'' { \end_layout \begin_layout Plain Layout ais a g ges \end_layout \begin_layout Plain Layout } \end_layout \end_inset \end_layout \end_inset \end_layout \begin_layout Standard Unfortunately, you might find that the preview isn't exactly instantaneous. You need to move the cursor out of the Preview inset to start compilation, and processing time can take a few seconds. Nevertheless, the direct feedback is often worthwhile during editing, and renders the navigation through the document much easier. \end_layout \begin_layout Subsection Gotchas \end_layout \begin_layout Standard A few gotchas that have been experienced with the integration of LilyPond-book and \SpecialChar LyX are reported here. \end_layout \begin_layout Subsubsection Child documents \end_layout \begin_layout Standard A \SpecialChar LyX document using the LilyPond module cannot have child documents using the \begin_inset Quotes eld \end_inset Input \begin_inset Quotes erd \end_inset method. If you select \begin_inset Quotes eld \end_inset Input \begin_inset Quotes erd \end_inset as the \begin_inset Quotes eld \end_inset Include Type \begin_inset Quotes erd \end_inset under \family sans Insert\SpecialChar menuseparator File\SpecialChar menuseparator Child \begin_inset space ~ \end_inset Document \family default , you will get an error when producing output. This is due to the way LilyPond-book automatically processes these input files recursively. Since there is currently no command-line option to turn off this behavior of LilyPond-book, it is suggested to use the \begin_inset Quotes eld \end_inset Include \begin_inset Quotes erd \end_inset method instead. \end_layout \begin_layout Standard Note that it is possible to insert child documents which make use of the LilyPond module, using either the \begin_inset Quotes eld \end_inset Input \begin_inset Quotes erd \end_inset or \begin_inset Quotes eld \end_inset Include \begin_inset Quotes erd \end_inset method, in a master document which does not make use of the LilyPond module. For this to work you might have to add the line \end_layout \begin_layout LyX-Code \backslash usepackage{graphicx} \end_layout \begin_layout Standard to your master document's preamble under \family sans Document\SpecialChar menuseparator Settings \family default . \end_layout \begin_layout Subsubsection Surrounding braces \end_layout \begin_layout Standard LilyPond-book searches for a \family typewriter \backslash score \family default or \family typewriter \backslash relative \family default command when it decides if the code is only a fragment. It is possible to include no LilyPond command at all, but in that case {surrounding braces} are required. Thus, in the following code, \end_layout \begin_layout LyX-Code \backslash begin{lilypond} \end_layout \begin_layout LyX-Code ais' f'' g' e'' % no \backslash score given \end_layout \begin_layout LyX-Code \backslash end{lilypond} \end_layout \begin_layout Standard LilyPond-book gets confused: \end_layout \begin_layout LyX-Code error: syntax error, unexpected NOTENAME_PITCH \end_layout \begin_layout LyX-Code ais' f'' g' e'' % no \backslash score given \end_layout \begin_layout Standard With surrounding braces, all is well: \end_layout \begin_layout Standard \begin_inset Preview \begin_layout Standard \begin_inset Flex LilyPond status collapsed \begin_layout Plain Layout {ais' f'' g' e''} % no \backslash score given \end_layout \end_inset \end_layout \end_inset \end_layout \begin_layout Standard Writing the notes directly within braces without using any LilyPond command is convenient when writing short snippets. Advanced users will probably want to enter their musical content using LilyPond variables and commands, which is of course supported. \end_layout \begin_layout Subsubsection Fret diagrams \end_layout \begin_layout Standard Another gotcha is with subsequent LilyPond snippets with \family typewriter \backslash fret-diagram \family default markup commands: \end_layout \begin_layout LyX-Code \backslash begin{lilypond} \end_layout \begin_layout LyX-Code \backslash markup{ \backslash fret-diagram-terse #"x;3;2;o;1;o;" } \end_layout \begin_layout LyX-Code \backslash end{lilypond} \end_layout \begin_layout LyX-Code \end_layout \begin_layout LyX-Code \backslash begin{lilypond} \end_layout \begin_layout LyX-Code \backslash markup{ \backslash fret-diagram-terse #"x;x;o;2;3;2;" } \end_layout \begin_layout LyX-Code \backslash end{lilypond} \end_layout \begin_layout Standard For some reason LilyPond-book version 2.13 barks on this when run in safe mode (which you always should use, unless you know what you are doing). This has been corrected as of version 2.15 (was LilyPond issue #1900). \end_layout \begin_layout Subsubsection The \family typewriter \backslash lilypondfile \family default command \end_layout \begin_layout Standard LilyPond-book supports including LilyPond code that resides in external files with the \family typewriter \backslash lilypondfile \family default command. With this command, the LilyPond code is processed as if it was typed inside the document and the output score follows the typesetting determined by \SpecialChar LaTeX with respect to line width, page breaks, and so on. This is in contrast to the long-standing \SpecialChar LyX feature to include LilyPond scores as external material, which calls LilyPond on the external file to produce a rigid figure, and includes this figure in the document, leaving the typesetting decisions to LilyPond. Unfortunately, support for the \family typewriter \backslash lilypondfile \family default command in \SpecialChar LyX is not implemented yet, but it is possible to use it inside a \SpecialChar TeX -Code block, provided that one writes the complete, absolute path to the desired file. \end_layout \begin_layout Section LilyPond examples \begin_inset CommandInset label LatexCommand label name "sec:LilyPond-examples" \end_inset \end_layout \begin_layout Standard Example \begin_inset CommandInset ref LatexCommand ref reference "subsec:Editorial-headword" nolink "false" \end_inset shows a complex score using many LilyPond constructs; some scheme code has been removed from the original source of this snippet, to be able to run in safe mode. Example \begin_inset CommandInset ref LatexCommand ref reference "subsec:Tablatures-template" nolink "false" \end_inset shows another LilyPond output which should be interesting to guitarists. \end_layout \begin_layout Subsection Editorial headword \begin_inset CommandInset label LatexCommand label name "subsec:Editorial-headword" \end_inset \end_layout \begin_layout Standard NR 1.7 Editorial annotations Beethoven, Op. 31, No. 3 Piano sonata 18, Movt II, Scherzo Measures 9–14. \end_layout \begin_layout Standard \noindent \align center \begin_inset Preview \begin_layout Standard \begin_inset Flex LilyPond status collapsed \begin_layout Plain Layout \backslash new PianoStaff << \end_layout \begin_layout Plain Layout \end_layout \begin_layout Plain Layout % RH Staff \end_layout \begin_layout Plain Layout \backslash new Staff { \end_layout \begin_layout Plain Layout \backslash clef treble \end_layout \begin_layout Plain Layout \backslash key aes \backslash major \end_layout \begin_layout Plain Layout \backslash time 2/4 \end_layout \begin_layout Plain Layout % \backslash set Staff.fingeringOrientations = #'(up) \end_layout \begin_layout Plain Layout % \backslash set Score.currentBarNumber = #9 \end_layout \begin_layout Plain Layout \backslash partial 8 \end_layout \begin_layout Plain Layout 8 \backslash staccato \end_layout \begin_layout Plain Layout | \end_layout \begin_layout Plain Layout % \backslash set doubleSlurs = ##t \end_layout \begin_layout Plain Layout 4( \end_layout \begin_layout Plain Layout 8 \backslash staccato) \end_layout \begin_layout Plain Layout \backslash noBeam \end_layout \begin_layout Plain Layout c''8-5 \backslash staccato \backslash pp \end_layout \begin_layout Plain Layout | \end_layout \begin_layout Plain Layout \backslash unset doubleSlurs \end_layout \begin_layout Plain Layout bes'8..( \end_layout \begin_layout Plain Layout aes'32 \end_layout \begin_layout Plain Layout g'8) \backslash staccato \end_layout \begin_layout Plain Layout f'8 \backslash staccato \end_layout \begin_layout Plain Layout | \end_layout \begin_layout Plain Layout e'4-2 \end_layout \begin_layout Plain Layout r8 \end_layout \begin_layout Plain Layout % \backslash once \backslash override Script #'script-priority = #-100 \end_layout \begin_layout Plain Layout \backslash afterGrace \end_layout \begin_layout Plain Layout f'8( \backslash trill^ \backslash markup { \backslash finger "3-2" } \end_layout \begin_layout Plain Layout { e'16[ f'16] } \end_layout \begin_layout Plain Layout | \end_layout \begin_layout Plain Layout g'8..-3 \end_layout \begin_layout Plain Layout f'32 \end_layout \begin_layout Plain Layout e'8-1) \backslash staccato \end_layout \begin_layout Plain Layout d'8-2 \backslash staccato \end_layout \begin_layout Plain Layout | \end_layout \begin_layout Plain Layout c'4 \end_layout \begin_layout Plain Layout r4 \end_layout \begin_layout Plain Layout } \end_layout \begin_layout Plain Layout \end_layout \begin_layout Plain Layout % LH Staff \end_layout \begin_layout Plain Layout \backslash new Staff { \end_layout \begin_layout Plain Layout \backslash key aes \backslash major \end_layout \begin_layout Plain Layout \backslash clef treble \end_layout \begin_layout Plain Layout % \backslash override Fingering #'direction = #down \end_layout \begin_layout Plain Layout % \backslash set Staff.fingeringOrientations = #'(down) \end_layout \begin_layout Plain Layout \backslash partial 8 \end_layout \begin_layout Plain Layout 8 \backslash staccato \end_layout \begin_layout Plain Layout % \backslash set doubleSlurs = ##t \end_layout \begin_layout Plain Layout 4( \end_layout \begin_layout Plain Layout 8) \backslash staccato \end_layout \begin_layout Plain Layout \backslash noBeam \end_layout \begin_layout Plain Layout \backslash clef bass \end_layout \begin_layout Plain Layout c'8-1 \backslash staccato \end_layout \begin_layout Plain Layout | \end_layout \begin_layout Plain Layout % \backslash set doubleSlurs = ##f \end_layout \begin_layout Plain Layout bes8..( \end_layout \begin_layout Plain Layout aes32 \end_layout \begin_layout Plain Layout g8-1) \backslash staccato \end_layout \begin_layout Plain Layout f8 \backslash staccato \end_layout \begin_layout Plain Layout | \end_layout \begin_layout Plain Layout e4 \end_layout \begin_layout Plain Layout r8 \end_layout \begin_layout Plain Layout \backslash afterGrace \end_layout \begin_layout Plain Layout f8( \backslash trill_ \backslash markup { \backslash finger "2-1" } \end_layout \begin_layout Plain Layout { e16[ f16] } \end_layout \begin_layout Plain Layout | \end_layout \begin_layout Plain Layout g8..-1 \end_layout \begin_layout Plain Layout f32 \end_layout \begin_layout Plain Layout e8) \backslash staccato \end_layout \begin_layout Plain Layout d8 \backslash staccato \end_layout \begin_layout Plain Layout | \end_layout \begin_layout Plain Layout c4 \end_layout \begin_layout Plain Layout r4 \end_layout \begin_layout Plain Layout } \end_layout \begin_layout Plain Layout >> \end_layout \begin_layout Plain Layout \end_layout \end_inset \end_layout \end_inset \end_layout \begin_layout Standard \noindent [from \begin_inset Flex URL status collapsed \begin_layout Plain Layout https://lsr.di.unimi.it/LSR/Item?id=627 \end_layout \end_inset ; scheme code removed, centering applied through the paragraph settings] \end_layout \begin_layout Subsection Tablatures template \begin_inset CommandInset label LatexCommand label name "subsec:Tablatures-template" \end_inset \end_layout \begin_layout Standard \begin_inset Preview \begin_layout Standard \begin_inset Flex LilyPond status collapsed \begin_layout Plain Layout upper= \backslash relative c' { \end_layout \begin_layout Plain Layout c4. g4 g c \end_layout \begin_layout Plain Layout } \end_layout \begin_layout Plain Layout lower= \backslash relative c { \end_layout \begin_layout Plain Layout c4 e g, e' \end_layout \begin_layout Plain Layout } \end_layout \begin_layout Plain Layout \backslash score { \end_layout \begin_layout Plain Layout \backslash new StaffGroup << \end_layout \begin_layout Plain Layout \backslash new Staff = "guitar" << \end_layout \begin_layout Plain Layout \backslash context Voice = "upper guitar" { \backslash clef "G_8" \backslash voiceOne \backslash upper } \end_layout \begin_layout Plain Layout \backslash context Voice = "lower guitar" { \backslash clef "G_8" \backslash voiceTwo \backslash lower } \end_layout \begin_layout Plain Layout >> \end_layout \begin_layout Plain Layout \backslash new TabStaff = "tab" << \end_layout \begin_layout Plain Layout \backslash context TabVoice = "upper tab" { \backslash clef "tab" \backslash voiceOne \backslash upper } \end_layout \begin_layout Plain Layout \backslash context TabVoice = "lower tab" { \backslash clef "tab" \backslash voiceTwo \backslash lower } \end_layout \begin_layout Plain Layout >> \end_layout \begin_layout Plain Layout >> \end_layout \begin_layout Plain Layout } \end_layout \end_inset \end_layout \end_inset \end_layout \begin_layout Standard \noindent [from \begin_inset Flex URL status collapsed \begin_layout Plain Layout https://lsr.di.unimi.it/LSR/Item?id=634 \end_layout \end_inset ] \end_layout \end_body \end_document