+@quotation
+ @code{padding} (dimension, in staff space):
+
+ @code{0.6}
+@end quotation
+
+which means that the number will be kept at a distance of at least 0.6
+of the note head.
+
+
+Each layout object may have several functions as a notational or
+typographical element. For example, the Fingering object
+has the following aspects
+
+@itemize @bullet
+@item Its size is independent of the horizontal spacing, unlike slurs or beams.
+
+@item It is a piece of text. Granted, it is usually a very short text.
+
+@item That piece of text is typeset with a font, unlike slurs or beams.
+@item Horizontally, the center of the symbol should be aligned to the
+center of the notehead
+@item Vertically, the symbol is placed next to the note and the staff.
+
+@item The
+ vertical position is also coordinated with other super and subscript
+symbols.
+@end itemize
+
+Each of these aspects is captured in a so-called @emph{interface},
+which are listed on the @internalsref{Fingering} page at the bottom
+
+@quotation
+This object supports the following interfaces:
+@internalsref{item-interface},
+@internalsref{self-alignment-interface},
+@internalsref{side-position-interface}, @internalsref{text-interface},
+@internalsref{text-script-interface}, @internalsref{font-interface},
+@internalsref{finger-interface}, and @internalsref{grob-interface}.
+@end quotation
+
+Clicking any of the links will take you to the page of the respective
+object interface. Each interface has a number of properties. Some of
+them are not user-serviceable (``Internal properties''), but others
+are.
+
+We have been talking of `the' @code{Fingering} object, but actually it
+does not amount to much. The initialization file
+@file{scm/define-grobs.scm} shows the soul of the `object',
+
+@verbatim
+ (Fingering
+ . (
+ (print-function . ,Text_interface::print)
+ (padding . 0.6)
+ (staff-padding . 0.6)
+ (self-alignment-X . 0)
+ (self-alignment-Y . 0)
+ (script-priority . 100)
+ (font-encoding . number)
+ (font-size . -5)
+ (meta . ((interfaces . (finger-interface font-interface
+ text-script-interface text-interface
+ side-position-interface self-alignment-interface
+ item-interface))))
+ ))
+@end verbatim
+
+@noindent
+As you can see, the @code{Fingering} object is nothing more than a
+bunch of variable settings, and the webpage in the Program Reference
+is directly generated from this definition.
+
+@node Determining the grob property
+@subsection Determining the grob property
+
+
+Recall that we wanted to change the position of the @b{2} in
+
+@lilypond[fragment,relative=2,verbatim]
+c-2
+\stemUp
+f
+@end lilypond
+
+Since the @b{2} is vertically positioned next to its note, we have to
+meddle with the interface associated with this positioning. This is
+done using @code{side-position-interface}. The page for this interface
+says
+
+@quotation
+@code{side-position-interface}
+
+ Position a victim object (this one) next to other objects (the
+ support). The property @code{direction} signifies where to put the
+ victim object relative to the support (left or right, up or down?)
+@end quotation
+
+@cindex padding
+@noindent
+below this description, the variable @code{padding} is described as
+@quotation
+@table @code
+@item padding
+ (dimension, in staff space)
+
+ Add this much extra space between objects that are next to each
+ other.
+@end table
+@end quotation
+
+By increasing the value of @code{padding}, we can move away the
+fingering. The following command inserts 3 staff spaces of white
+between the note and the fingering:
+@example
+\once \override Voice.Fingering #'padding = #3
+@end example
+
+Inserting this command before the Fingering object is created,
+i.e. before @code{c2}, yields the following result:
+
+@lilypond[relative=2,fragment,verbatim]
+\once \override Voice.Fingering #'padding = #3
+c-2
+\stemUp
+f
+@end lilypond
+
+
+In this case, the context for this tweak is @context{Voice}. This
+fact can also be deduced from the program reference, for the page for
+the @internalsref{Fingering_engraver} plug-in says
+
+@quotation
+ Fingering_engraver is part of contexts: @dots{} @b{@internalsref{Voice}}
+@end quotation
+
+@node Difficult tweaks
+@subsection Difficult tweaks
+
+There are two classes of difficult adjustments. First, when there are
+several of the same objects at one point, and you want to adjust only
+one. For example, if you want to change only one note head in a chord.
+
+In this case, the @code{\applyoutput} function must be used. The
+next example defines a Scheme function @code{set-position-font-size}
+that sets the @code{font-size} property, but only
+on objects that have @internalsref{note-head-interface} and are at the
+right Y-position.
+
+@lilypond[verbatim]
+#(define ((set-position-font-size pos size) grob origin current)
+ (let*
+ ((interfaces (ly:grob-property grob 'interfaces))
+ (position (ly:grob-property grob 'staff-position)))
+ (if (and
+
+ ; is this a note head?
+ (memq 'note-head-interface interfaces)
+
+ ; is the Y coordinate right?
+ (= pos position))
+
+ ; then do it.
+ (set! (ly:grob-property grob 'font-size) size))))
+
+\relative {
+ c
+ \applyoutput #(set-position-font-size -2 4)
+ <c e g>
+}
+@end lilypond
+
+@noindent
+A similar technique can be used for accidentals. In that case, the
+function should check for @code{accidental-interface}.
+
+Another difficult adjustment is the appearance of spanner objects,
+such as slur and tie. Initially, only one of these objects is created,
+and they can be adjust with the normal mechanism. However, in some
+cases the spanners cross line breaks. If this happens, these objects
+are cloned. A separate object is created for every system that it is
+in. These are clones of the original object and inherit all
+properties, including @code{\override}s.
+
+In other words, an @code{\override} always affects all pieces of a
+broken spanner. To change only one part of a spanner at a line break,
+it is necessary to hook into the formatting process. The
+@code{after-line-breaking-callback} property contains the Scheme procedure
+that is called after line breaks have been determined, and layout
+objects have been split over different systems.
+
+In the following example, we define a procedure
+@code{my-callback}. This procedure
+
+@itemize @bullet
+@item
+determines if we have been split across line breaks
+@item
+if yes, retrieves all the split objects
+@item
+checks if we are the last of the split objects
+@item
+if yes, it sets @code{extra-offset}.
+@end itemize
+
+This procedure is installed into @internalsref{Tie}, so the last part
+of broken tie is translated up.