+@example
+ \property Voice.Slur \set #'attachment = #'(stem . stem)
+@end example
+
+More precisely, this command extends the definition of the @code{Slur}
+object in the current @code{Voice}. The variable @code{attachment} is
+set to the pair of symbols @code{'(stem . stem)}.
+
+Although this is useful information, it is not very helpful: the
+lilypond backend supports approximately 240 variables like
+@code{attachment}, each with their own meaning and own type
+(eg. number, symbol, list, etc). Besides slur, LilyPond has 80
+different types of Grobs, that may be created in 14 different context
+types besides Voice.
+
+@cindex internal documentation
+@cindex finding grobs
+@cindex grob descriptiosn
+
+The interesting information is how you can figure out which properties
+to tune for your own scores. To discover this, you must have a copy of
+the internals document. This is a set of HTML pages, which should be
+included if you run a binary distribution@footnote{You can also
+compile them by executing @code{make -C Documentation/user/
+out/lilypond-internals.html} in the source package.}. This document is
+also available on the web: go to the lilypond website, click
+``Documentation: other'' on the side bar, click
+``lilypond-internals'', under information for users.
+
+You might want to bookmark either the HTML files on disk, or the one
+on the web. One word of caution is in place here: the internals
+documentation is generated from the definitions that lily uses. For
+that reason, it is strongly tied to the version of LilyPond that you
+use. Before you proceed, please make sure that you are using the
+documentation that corresponds to the LilyPond version that you use.
+
+Suppose that you wanted to tune the behavior of the slur. The first
+step is to get some general information on slurs in lilypond. Turn to
+the index, and look up ``slur''. The section on slurs says
+@quotation
+The grob for this object is @internalsref{Slur}, generally in
+@internalsref{Voice} context.
+@end quotation
+
+So the grob for this object is called @code{Slur}, and slurs are
+created in the @code{Voice} context. If you are reading this tutorial
+in the HTML version, then you can simply click Slur, otherwise, you
+must look it up the internal documentation: click ``grob overview'' ,
+and select ``slur'' (the list is alphabetical.)
+
+Now you get a list of all the properties that the slur object
+supports, along with their default values. Among the properties we
+find the @code{attachment} property with its default setting.
+The property documentation explains that the following setting will
+produce the desired effect:
+@example
+ \property Voice.Slur \set #'attachment = #'(stem . stem)
+@end example
+
+If you ran the previous example, you have unknowingly already used
+this kind of command. The @file{ly/property-init.ly} contains the
+definition of @code{\stemUp}
+@example
+ stemUp = \property Voice.Stem \set #'direction = #1
+@end example
+
+
+We also want to move around the fingering `3'. In the printed edition
+it is not above the stem, but a little lower, slightly left of the
+stem. From the user manual, we find that the associated grob is called
+@code{Fingering}, but how do we know if we should use @code{Voice} or
+@code{Staff}. In many cases, @code{Voice} is a safe bet, but you can
+also deduce this information from the internals documentation: if you
+visit the documentation of @code{Fingering}, you will notice
+@example
+Fingering grobs are created by: Fingering_engraver
+@end example
+
+
+
+Clicking @code{Fingering_engraver} will show you the documentation of
+the module responsible for interpreting the fingering instructions and
+translating them to a @code{Fingering} grob. Such a module is called
+an @emph{engraver}. The documentation of the @code{Fingering_engraver}
+says,
+@example
+Fingering_engraver is part of contexts: Voice and TabVoice
+@end example
+so tuning the settings for Fingering should be done using either
+@example
+ \property Voice.Fingering \set @dots{}
+@end example
+or
+@example
+ \property TabVoice.Fingering \set @dots{}
+@end example
+
+Since the @code{TabVoice} is only used for tab notation, we see that
+the first guess @code{Voice} was indeed correct.
+
+@cindex setting grob properties
+@cindex @code{extra-offset}
+
+For shifting the fingering, we use the grob property
+@code{extra-offset}. The following command manually adds an offset to
+the object. We move it a little to the left, and 1.8 staff space
+downwards.
+@example
+ \property Voice.Fingering \set #'extra-offset = #'(-0.3 . -1.8)
+@end example
+The @code{extra-offset} is a low-level feature: it moves around
+objects in the printout; the formatting engine is completely oblivious
+to these offsets. The unit of these offsets are staff-spaces.
+
+@cindex reverting grob properties
+@cindex undoing grob properties
+
+We only want to offset a single grob, so after the F-sharp, we must
+undo the setting. The technical term is to revert the grob property.
+@example
+ \property Voice.Fingering \revert #'extra-offset
+@end example
+
+@cindex property types
+@cindex translator properties
+@cindex grob properties
+@cindex music properties
+
+
+There is three different types of variables in LilyPond, something
+which is confusing at first (and for some, it stays like that).
+Variables such as @code{extra-offset} and @code{attachment} are called
+grob properties. They are something different from the translator
+properties, like @code{autoBeaming}. Finally, music expressions are
+internally also stored using properties, so-called music
+properties. You will encounter the latter type if you run Scheme
+functions on music using @code{\apply}.
+
+The second fingering instruction should be moved up a little, to avoid
+a collision with the slur. This could be achieved with
+@code{extra-offset}, but in this case, a simpler mechanism also
+works. We insert an empty text between the 5 and the note. The empty
+text pushes the fingering instruction away:
+@example
+ a^" "^#'(finger "5")
+@end example
+
+Lilypond tries to put fingering instructions closer to the notes as
+text instructions. To insert an empty text (@code{^" "}) between the
+finger and the note, we have disguised the fingering instruction as a
+text: @code{(finger "5")}.
+
+Normally, one would specify dynamics in a single voice, and start and
+end dynamics (such as @b{f} and @b{p}) will be aligned with
+hairpins. In this case, we want the decrescendo to be in a different
+place from the piano sign. We achieve this by putting the dynamic
+markings in different voices. The crescendo should be above the upper
+staff. This can be forced by the precooked command
+@example
+ \dynamicsUp
+@end example
+
+However, if you do that, the decrescendo will be too close to the
+upper voice, and collide with the stems. Looking at the manual for
+dynamics, we notice that ``Vertical positioning of these symbols is
+handled by the @internalsref{DynamicLineSpanner} grob.''. If we turn
+to the documentation of @code{DynamicLineSpanner}, we find that the
+@code{DynamicLineSpanner} supports several so-called
+`interfaces'. This grob not only puts dynamic objects next to the
+staff (@code{side-position-interface}), but it also groups dynamic
+objects (@code{axis-group-interface}), is considered a dynamic sign
+itself (@code{dynamic-interface}) and is a grob: it has the
+@code{grob-interface}, with all the variables that come with it.
+
+For the moment, we are interested in the side positioning:
+@quotation
+ side-position-interface
+
+ Position a victim object (this one) next to other objects (the
+ support). In this case, the direction signifies where to put the
+ victim object relative to the support (left or right, up or down?)
+@end quotation
+Between the grob and its support (in this case: the notes in the voice
+going down), there should be more space. This space is controlled by
+@code{padding}, so we increase it.
+@example
+ \property Voice.DynamicLineSpanner \override #'padding = #5.0
+@end example
+
+This command is almost like the command for setting slur attachments,
+but subtly different in its details. Grob properties can be
+manipulated with two commands: @code{\override} extends the grob
+variables with a setting, and @code{\revert} releases this
+setting. This has a certain theoretical appeal: the operations are
+simple and symmetric. For practical use, it can be cumbersome. Both
+commands act like parentheses: you should carefully balance the use of
+@code{\override} and @code{\revert}. The @code{\set} command is more
+friendly: it first does a @code{\revert} followed by @code{\override}.
+
+Finally, Brahms uses music notation is a slightly unorthodox way. Ties
+usually happen only within one voice. In this piece, the composer
+gladly produces ties that jump voices. We deal with this by faking
+these ties: whenever we need such a tie, we insert a notehead in a
+different voice, and blank the stem. This is done in the following
+snippet of code.
+
+@example
+ \property Voice.Stem \set #'transparent = ##t
+ d'
+ \property Voice.Stem \revert #'transparent
+@end example
+
+Finally, the last tie is forced up using @code{\tieUp}.
+
+
+@node An orchestral score
+@section An orchestral score
+
+@menu
+* The full score::
+* Extracting an individual part::
+@end menu
+
+
+Our last two examples show a way to setup the music for an orchestral
+score. When typesetting a piece for several instruments, you'll want to
+create a conductor's full score, alongside several individual parts.
+
+LilyPond is well suited for this task. We will declare the music for
+each instrument individually, giving the music of each instrument its
+own name. These pieces of music are then combined in different
+@code{\score} blocks to produce different combinations of the score.
+
+This orchestral score example consists of three input files. In the
+first file, @file{os-music.ly}, we define the music for all
+instruments. This file will be used both for producing the score and
+the separate parts. Other files reference this file by doing
+@code{\include "os-music.ly"}.
+
+If you were to run LilyPond on this file, no printable output would be
+produced.
+
+@example
+% os-music.ly
+\header @{
+ title = "Zo, goed lieverd?"
+ subtitle = "How's, this babe?"
+ composer = "JCN"
+ opus = "1"
+ piece = "Laid back"
+@}
+global = @{
+ \time 2/4
+ \skip 2*4 \bar "|."
+@}
+Key = \notes \key as \major
+flautoI = \notes\relative c'' @{
+ f8 g f g f g f g
+ bes as bes as bes as bes as
+@}
+flautoII = \notes\relative c'' @{
+ as8 bes as bes R1 d4 ~ d
+@}
+tromboI = \notes\relative c'' @{
+ c4. c8 c8 c4. es4 r as, r
+@}
+tromboII = \notes\relative c'' @{
+ as4. as8 as8 as4. R1*1/2 as4 es'
+@}
+timpani = \notes\relative c, @{
+ \times 2/3 @{ f4 f f @}
+ \times 4/5 @{ as8 as as as as @}
+ R1
+@}
+corno = \notes\relative c' @{
+ bes4 d f, bes d f, bes d
+@}
+@end example
+
+We will not go through the input line by line, but only indicate and
+explain the new elements.
+
+
+@separate
+@example
+global = @{
+ \time 2/4
+ \skip 2*4 \bar "|.";
+@}
+@end example
+
+Declare setting to be used globally. The @code{\skip} command produces
+no output, but moves forward in time: in this case, the duration of a
+half note (@code{2}), and that four times (@code{*4}). This brings us
+to the end of the piece, and we can set the end bar.
+
+@separate
+@example
+Key = \notes \key as \major
+@end example
+Declare the key signature of the piece and assign it to the identifier
+@var{Key}. Later on, we'll use @code{\Key} for all staves except those
+for transposing instruments.
+
+@node The full score
+@subsection The full score
+
+
+The second file, @file{os-score.ly} reads the definitions of the first
+(@file{os-music.ly}), and defines the @code{\score} block for the full
+conductor's score.
+
+
+@example
+% os-score.ly
+\include "os-music.ly"
+\include "paper13.ly"
+
+#(set! point-and-click line-column-location)
+#(define text-flat '((font-relative-size . -2)
+ (music "accidentals--1")))
+
+\score @{
+ <
+ \global
+ \property Score.BarNumber \override #'padding = #3
+ \context StaffGroup = woodwind <
+ \context Staff = flauti <
+ \property Staff.midiInstrument = #"flute"
+ \property Staff.instrument = "2 Flauti"
+ \property Staff.instr = "Fl."
+ \Key
+ \context Voice=one @{ \voiceOne \flautoI @}
+ \context Voice=two @{ \voiceTwo \flautoII @}
+ >
+ >
+ \context StaffGroup = timpani <
+ \context Staff = timpani <
+ \property Staff.midiInstrument = #"timpani"
+ \property Staff.instrument = #'(lines "Timpani" "(C-G)")
+ \property Staff.instr = #"Timp."
+ \clef bass
+ \Key
+ \timpani
+ >
+ >
+ \context StaffGroup = brass <
+ \context Staff = trombe <
+ \property Staff.midiInstrument = #"trumpet"
+ \property Staff.instrument = #`(lines "2 Trombe" "(C)")
+ \property Staff.instr = #`(lines "Tbe." "(C)")
+ \Key
+ \context Voice=one \partcombine Voice
+ \context Thread=one \tromboI
+ \context Thread=two \tromboII
+ >
+ \context Staff = corni <
+ \property Staff.midiInstrument = #"french horn"
+ \property Staff.instrument = #`(lines "Corno"
+ (columns "(E" ,text-flat ")"))
+ \property Staff.instr = #`(lines "Cor."
+ (columns "(E" ,text-flat ")"))
+ \property Staff.transposing = #3
+ \notes \key bes \major
+ \context Voice=one \corno
+ >
+ >
+ >
+ \paper @{
+ indent = 15 * \staffspace
+ linewidth = 60 * \staffspace
+ textheight = 90 * \staffspace
+ \translator@{
+ \HaraKiriStaffContext
+ @}
+ @}
+ \midi @{
+ \tempo 4 = 75
+ @}
+@}
+@end example
+
+@center @strong{Zo, goed lieverd?}
+@sp 1
+@center How's, this babe?
+@flushright
+Opus 1.
+@end flushright
+@flushleft
+@sc{Laid back}
+@end flushleft
+
+@lilypondfile{os-score.ly}
+
+@separate
+@example
+\include "os-music.ly"
+@end example
+First, we need to include the music definitions we made in
+@file{os-music.ly}.
+
+@separate
+@example
+#(set! point-and-click line-column-location)
+@end example
+
+This piece of Scheme code sets the Scheme variable
+@code{point-and-click} to the value @var{line-column-location} (which
+itself is a Scheme procedure).
+
+Editing input files can be complicated if you're working with large
+files: if you're digitizing existing music, you have to synchronize
+the .ly file, the sheet music on your lap and the sheet music on the
+screen. The point-and-click mechanism makes it easy to find the
+origin of an error in the LY file: when you view the file with Xdvi
+and click on a note, your editor will jump to the spot where that note
+was entered. For more information, see @ref{Point and click}.
+
+
+@separate
+@example
+#(define text-flat '((font-relative-size . -2)
+ (music "accidentals--1")))
+@end example
+
+When naming the tuning of the french horn, we'll need a piece of text
+with a flat sign. LilyPond has a mechanism for font selection and
+kerning called Scheme markup text (See @ref{Text markup}). The flat
+sign is taken from the music font, and its name is @code{accidentals--1}
+(The natural sign is called @code{accidentals-0}). The default font is
+too big for text, so we select a relative size of @code{-2}.
+
+@separate
+@example
+ <
+ \global
+@end example
+Of course, all staves are simultaneous and use the same global settings.
+
+@separate
+@example
+ \property Score.BarNumber \override #'padding = #3
+@end example
+LilyPond prints bar numbers at the start of each line, but
+unfortunately, they end up a bit too close to the staff in this
+example. A bar number internally is a Grob called @var{BarNumber}.
+BarNumber Grobs can be manipulated through their
+@var{side-position-interface}. One of the properties of a
+@var{side-position-interface} that can be tweaked is the
+@var{padding}: the amount of extra space that is put between this Grob
+and other Grobs. We set the padding to three staff spaces.
+
+You can find information on all these kind of properties in LilyPond's
+automatically generated documentation in
+@ifnottex
+@ref{ (lilypond-internals)lilypond-internals, LilyPond Internals}.
+@end ifnottex
+@iftex
+the online documentation.
+@end iftex
+
+@separate
+@example
+ \context StaffGroup = woodwind <
+ \context Staff = flauti <
+@end example
+A new notation context: the @code{StaffGroup}. @code{StaffGroup} can
+hold one or more @code{Staff}'s, and will print a big bracket at the
+left of the score. Start a new staff group for the woodwind section
+(just the flutes in this case). Immediately after that, we start the
+staff for the two flutes, that also play simultaneously.
+
+@separate
+@example
+ \property Staff.midiInstrument = #"flute"
+@end example
+Specify the instrument for MIDI output (see @ref{MIDI instrument
+names}).
+
+@separate
+@example
+ \property Staff.instrument = "2 Flauti"
+ \property Staff.instr = "Fl."
+@end example
+And define the instrument names to be printed in the margin,
+@code{instrument} for the first line of the score, @code{instr} for the
+rest of the score.
+
+@separate
+@example
+ \Key
+@end example
+The flutes play in the default key.
+
+@separate
+@example
+ \context Voice=one @{ \voiceOne \flautoI @}
+ \context Voice=two @{ \voiceTwo \flautoII @}
+@end example
+Last come the actual flute parts. Remember that we're still in
+simultaneous mode. We name both voices differently, so that LilyPond
+will actually create two Voice contexts. The flute parts are simple, so
+we specify manually which voice is which: @code{\voiceOne} forces the
+direction of stems, beams, slurs and ties up, @code{\voiceTwo} sets
+directions down.
+
+@separate
+@example
+ >
+ >
+@end example
+Close the flutes staff and woodwind staff group.
+
+@separate
+@example
+ \property Staff.instrument = #'(lines "Timpani" "(C-G)")
+@end example
+The timpani staff only shows a new piece of scheme markup, it sets two
+lines of text.
+
+@separate
+@example
+ \context Voice=one \partcombine Voice
+ \context Thread=one \tromboI
+ \context Thread=two \tromboII
+@end example
+You have seen the notation contexts Staff and Voice, but here's a new
+one: Thread. One or more Threads can be part of a Voice. The Thread
+takes care of note heads and rests, the Voice combine note heads onto a
+stem.
+
+For the trumpets we use the automatic part combiner (see @ref{Automatic
+part combining}) to combine the two simultaneous trumpet parts onto the
+trumpet staff. Each trumpet gets its own Thread context, which must be
+named @code{one} and @code{two}). The part combiner makes these two
+threads share a Voice when they're similar, and splits the threads up
+when they're different.
+
+@separate
+@example
+ \property Staff.instrument = #`(lines "Corno"
+ (columns "(E" ,text-flat ")"))
+@end example
+The french horn has the most complex scheme markup name, made up of two
+lines of text. The second line has three elements (columns), the @code{(E},
+the flat sign @code{text-flat} that we defined before and a final @code{")"}.
+Note that we use a backquote instead of an ordinary quote at the
+beginning of the Scheme expression to be able to access the
+@code{text-flat} identifier, `unquoting' it with a @code{,}.
+
+@separate
+@example
+ \property Staff.transposing = #3
+@end example
+The french horn is to be tuned in E-flat, so we tell the MIDI backend to
+transpose this staff by three steps.
+
+Note how we can choose different tuning for entering, printing and
+playing, using @code{\transpose} and the MIDI Staff property
+@var{transposing}.
+
+@separate
+@example
+ \notes \key bes \major
+@end example
+Therefore, it has a different key.
+
+@separate
+@example
+ indent = 15 * \staffspace
+ linewidth = 60 * \staffspace
+@end example
+We specify a big indent for the first line and a small linewidth for this
+tutorial.
+
+@separate
+
+Usually, LilyPond's predefined setup of notation contexts (Thread,
+Voice, Staff, Staffgroup, Score) is just fine. But in this case, we
+want a different type of Staff context.
+
+@example
+ \translator@{
+ \HaraKiriStaffContext
+ @}
+@end example
+
+In orchestral scores, it often happens that one instrument has only
+rests during one line of the score. The @code{HaraKiriStaffContext} can
+be used as a regular @code{StaffContext} drop-in and will take care of
+the automatic removing of empty staves.
+
+@node Extracting an individual part
+@subsection Extracting an individual part
+
+The third file, @file{os-flute-2.ly} also reads the definitions of the
+first (@file{os-music.ly}), and defines the @code{\score} block for the
+second flute part.
+
+@example
+\include "os-music.ly"
+\include "paper16.ly"
+
+\score @{
+ \context Staff <
+ \property Score.skipBars = ##t
+ \property Staff.midiInstrument = #"flute"
+ \global
+ \Key
+ \flautoII
+ >
+ \header @{
+ instrument = "Flauto II"
+ @}
+ \paper @{
+ linewidth = 80 * \staffspace
+ textheight = 200 * \staffspace
+ @}
+ \midi @{
+ \tempo 4 = 75
+ @}
+@}
+@end example
+
+@center @strong{Zo, goed lieverd?}
+@sp 1
+@center How's, this babe?
+@center @emph{Flauto II}
+@flushright
+Opus 1.
+@end flushright
+@flushleft
+@sc{Laid back}
+@end flushleft
+@lilypondfile{os-flute-2.ly}
+
+
+Because we separated the music definitions from the @code{\score}
+instantiations, we can easily define a second score with the music of
+the second flute. This then is the part for the second flute player.
+Of course, we make separate parts for all individual instruments.
+
+@separate
+@example
+ \flautoII
+@end example
+In this individual part the second flute has a whole staff for itself,
+so we don't want to force stem or tie directions.
+
+@separate
+@example
+ \header @{
+ instrument = "Flauto II"
+ @}
+@end example
+The @code{\header} definitions were also read from @file{os-music.ly},
+but we need to set the instrument for this particular score.
+
+@separate
+@example
+ \property Score.skipBars = ##t
+@end example
+In the conductor's full score, all bars with rests are printed, but for
+the individual parts, we want to contract pieces of consecutive empty
+bars. LilyPond will do this if Score's @var{skipBars} property to
+true.
+
+
+@node Integrating text and music
+@section Integrating text and music
+
+Sometimes, you might want to use music examples in a text that you are
+writing. For example, if you are writing a musicological treatise, a
+songbook, or (like us) the LilyPond manual. You can make such texts by
+hand, simply by importing a PostScript figure into your wordprocessor.
+However, there is a also an automated procedure:
+
+If you use HTML, La@TeX{} or texinfo, you can mix text and LilyPond
+code. A script called @code{lilypond-book} will extract the music
+fragments, run LilyPond on them, and put back the resulting notation.
+This utility program is described fully in the chapter @ref{Merging text
+and music with lilypond-book}. Here we show a small example. Since the
+example also contains explanatory text, we won't comment on the
+contents.
+
+@example
+\documentclass[a4paper]@{article@}
+\begin@{document@}
+
+In a lilypond-book document, you can freely mix music and text. For
+example:
+\begin@{lilypond@}
+ \score @{ \notes \relative c' @{
+ c2 g'2 \times 2/3 @{ f8 e d @} c'2 g4
+ @} @}
+\end@{lilypond@}
+Notice that the music line length matches the margin settings of the
+document.
+
+If you have no \verb+\score+ block in the fragment,
+\texttt@{lilypond-book@} will supply one:
+
+\begin@{lilypond@}
+ c'4
+\end@{lilypond@}
+
+In the example you see here, a number of things happened: a
+\verb+\score+ block was added, and the line width was set to natural
+length. You can specify many more options using \LaTeX style options
+in brackets:
+
+\begin[verbatim,11pt,singleline,
+ fragment,relative,intertext="hi there!"]@{lilypond@}
+ c'4 f bes es
+\end@{lilypond@}
+
+\texttt@{verbatim@} also shows the LilyPond code, \texttt@{11pt@} selects
+the default music size, \texttt@{fragment@} adds a score block,
+\texttt@{relative@} uses relative mode for the fragment, and
+\texttt@{intertext@} specifies what to print between the
+\texttt@{verbatim@} code and the music.
+
+If you include large examples into the text, it may be more convenient
+to put the example in a separate file:
+
+\lilypondfile[printfilename]@{sammartini.ly@}
+
+The \texttt@{printfilename@} option adds the file name to the output.
+
+\end@{document@}
+@end example
+
+Under Unix, you can view the results as follows.
+@example
+$ cd input/tutorial
+$ lilypond-book --outdir=out/ lilbook.tex
+lilypond-book (GNU LilyPond) 1.3.146
+Reading `input/tutorial/lilbook.tex'
+Reading `input/tutorial/sammartini.ly'
+@var{lots of stuff deleted}
+Writing `out/lilbook.latex'
+$ cd out
+$ latex lilbook.latex
+@var{lots of stuff deleted}
+$ xdvi lilbook
+@end example
+
+Notice the @code{outdir} option to lilypond-book. Running lilypond-book
+and running latex creates a lot of temporary files, and you wouldn't want
+those to clutter up your working directory. Hence, we have them created
+in a separate subdirectory.
+
+The result more or less looks like this:
+
+@separate
+
+In a lilypond-book document, you can freely mix music and text. For
+example:
+@lilypond
+ \score { \notes \relative c' {
+ c2 g'2 \times 2/3 { f8 e d } c'2 g4
+ } }
+@end lilypond
+Notice that the music line length matches the margin settings of the
+document.
+
+If you have no @code{\score} block in the fragment,
+@code{lilypond-book} will supply one:
+
+@lilypond
+ c'4
+@end lilypond
+
+In the example you see here, a number of things happened: a
+@code{\score} block was added, and the line width was set to natural
+length. You can specify many more options using La@TeX{} style options
+in brackets:
+
+@lilypond[verbatim,11pt,singleline,
+ fragment,relative,intertext="hi there!"]
+ c'4 f bes es
+@end lilypond
+
+@code{verbatim} also shows the LilyPond code, @code{11pt} selects
+the default music size, @code{fragment} adds a score block,
+@code{relative} uses relative mode for the fragment, and
+@code{intertext} specifies what to print between the
+@code{verbatim} code and the music.
+
+If you include large examples into the text, it may be more convenient
+to put the example in a separate file:
+
+@lilypondfile[printfilename]{sammartini.ly}
+
+The @code{printfilename} option adds the file name to the output.
+@node End of tutorial
+@section End of tutorial