@menu
-* Interpretation contexts::
-* Explaining the Internals Reference::
-* Modifying properties::
-* Useful concepts and properties::
-* Common properties::
-* Advanced tweaks::
-* Discussion of specific tweaks::
+* Interpretation contexts::
+* Explaining the Internals Reference::
+* Modifying properties::
+* Useful concepts and properties::
+* Common properties::
+* Advanced tweaks::
+* Discussion of specific tweaks::
@end menu
@node Interpretation contexts
@menu
-* Contexts explained::
-* Creating contexts::
-* Modifying context plug-ins::
-* Changing context default settings::
-* Defining new contexts::
-* Aligning contexts::
+* Contexts explained::
+* Creating contexts::
+* Modifying context plug-ins::
+* Changing context default settings::
+* Defining new contexts::
+* Aligning contexts::
@end menu
@node Contexts explained
@menu
-* Score - the master of all contexts::
-* Top-level contexts - staff containers::
-* Intermediate-level contexts - staves::
-* Bottom-level contexts - voices::
+* Score - the master of all contexts::
+* Top-level contexts - staff containers::
+* Intermediate-level contexts - staves::
+* Bottom-level contexts - voices::
@end menu
@node Score - the master of all contexts
@menu
-* Navigating the program reference::
-* Layout interfaces::
-* Determining the grob property::
-* Naming conventions::
+* Navigating the program reference::
+* Layout interfaces::
+* Determining the grob property::
+* Naming conventions::
@end menu
@node Navigating the program reference
@menu
-* Overview of modifying properties::
-* The \set command::
-* The \override command::
-* \set versus \override::
-* Objects connected to the input::
+* Overview of modifying properties::
+* The set command::
+* The override command::
+* set versus override::
+* The tweak command::
@end menu
@node Overview of modifying properties
@end ifhtml
-@node The \set command
+@node The set command
@subsection The @code{\set} command
@ifhtml
@end ifhtml
-@node The \override command
+@node The override command
@subsection The @code{\override} command
@ifhtml
@end ifhtml
-@node \set versus \override
+@node set versus override
@subsection @code{\set} vs. @code{\override}
@ifhtml
@end ifhtml
-@node Objects connected to the input
-@subsection Objects connected to the input
+@node The tweak command
+@subsection The @code{\tweak} command
@ifhtml
UNTRANSLATED NODE: IGNORE ME
@menu
-* Input modes::
-* Direction and placement::
-* Distances and measurements::
-* Spanners::
+* Input modes::
+* Direction and placement::
+* Distances and measurements::
+* Spanners::
@end menu
@node Input modes
@menu
-* Controlling visibility of objects::
-* Line styles::
-* Rotating objects::
-* Aligning objects::
+* Controlling visibility of objects::
+* Line styles::
+* Rotating objects::
+* Aligning objects::
@end menu
@node Controlling visibility of objects
@menu
-* Removing the stencil::
-* Making objects transparent::
-* Painting objects white::
-* Using break-visibility::
-* Special considerations::
+* Removing the stencil::
+* Making objects transparent::
+* Painting objects white::
+* Using break-visibility::
+* Special considerations::
@end menu
@node Removing the stencil
@menu
-* Vertical grouping of grobs::
-* Modifying ends of spanners::
-* Modifying stencils::
-* Modifying shapes::
+* Vertical grouping of grobs::
+* Modifying ends of spanners::
+* Modifying stencils::
+* Modifying shapes::
@end menu
@node Vertical grouping of grobs
@menu
-* old Contexts explained::
+* old Contexts explained::
@end menu
@node old Contexts explained
@node Changing context default settings
@subsection Changing context default settings
-Los ajustes de las secciones previas ( @ref{The \set command},
+Los ajustes de las secciones previas ( @ref{The set command},
@ref{Modifying context plug-ins} y @ref{Overview of modifying
properties}) también se pueden escribir separados de la música dentro
del bloque @code{\layout}:
@menu
* Overview of modifying properties::
-* The \set command::
-* The \override command::
-* \set versus \override::
-* Objects connected to the input::
+* The set command::
+* The override command::
+* set versus override::
+* The tweak command::
@end menu
abruptas, o las dos cosas.
-@node The \set command
+@node The set command
@subsection The @code{\set} command
@cindex propiedades
-@node The \override command
+@node The override command
@subsection The @code{\override} command
Las instrucciones que modifican la salida tienen por lo general un
Mostraremos a continuación cómo localizar esta información en el
manual de notación y en la referencia de funcionamiento interno.
-@node \set versus \override
+@node set versus override
@subsection @code{\set} vs. @code{\override}
Hemos visto dos formas de cambiar las propiedades: @code{\set} y
(modificada con @code{\set}).
-@node Objects connected to the input
-@subsection Objects connected to the input
+@node The tweak command
+@subsection The @code{\tweak} command
@funindex \tweak
@seealso
Referencia de la notación:
-@ref{List of colors}, @ref{Objects connected to
-the input}.
+@ref{List of colors}, @ref{The
+tweak command}.
Fragmentos de código:
@rlsr{Editorial annotations}.
Las notas de un acorde no se pueden colorear con @code{\override}; en
-su lugar utilice @code{\tweak}. Consulte @ref{Objects connected to
-the input} para ver más detalles.
+su lugar utilice @code{\tweak}. Consulte @ref{The
+tweak command} para ver más detalles.
@node Parentheses
Referencia de la notación:
@ref{Time administration},
@ref{Scaling durations},
-@ref{Objects connected to the input},
+@ref{The tweak command},
@ref{Polymetric notation}.
Fragmentos de código:
@end lilypond
Encontrará más detalles de la instrucción @code{\tweak} en
-@ruser{Objects connected to the input}.
+@ruser{The tweak command}.
Si los grupos anidados no comienzan en el mismo momento, su apariencia
se puede modificar de la forma usual mediante instrucciones
@menu
* Automatic notation::
* Interpretation contexts::
-* The \override command::
+* The override command::
@end menu
possède son propre @code{VerticalAxisGroup}.
-@node The \override command
+@node The override command
@section The @code{\override} command
La commande @code{\override} permet de modifier la mise en page
* Navigating the program reference::
* Layout interfaces::
* Determining the grob property::
-* Objects connected to the input::
-* Using Scheme code instead of \tweak::
-* \set versus \override::
+* The tweak command::
+* Using Scheme code instead of tweak::
+* set versus override::
* Difficult tweaks::
@end menu
@end quotation
-@node Objects connected to the input
-@subsection Objects connected to the input
+@node The tweak command
+@subsection The @code{\tweak} command
@funindex \tweak
Voir pour plus de détails @ref{Displaying music expressions}.
-@node Using Scheme code instead of \tweak
+@node Using Scheme code instead of tweak
@subsection Using Scheme code instead of @code{\tweak}
L'inconvénient principal de la commande @code{\tweak} est la rigidité de sa
@samp{m} lui-même.
-@node \set versus \override
+@node set versus override
@subsection @code{\set} vs. @code{\override}
Si les propriétés peuvent être modifiées de deux façons, par les commandes
Vous ne pouvez pas coloriser des notes à l'intérieur d'un accord avec
@code{\override}. si besoin est, utilisez @code{\tweak}.
-Pour plus de détails, consultez @ref{Objects connected to the input}.
+Pour plus de détails, consultez @ref{The tweak command}.
@node Parentheses
@end lilypond
@item
-A few syntax changes were made:
+The following syntax changes were made, in chronological order. In
+addition, fret diagram properties have been moved to
+@code{fret-diagram-details}, and @code{#'style} property is used to
+select solid/dashed lines instead of @code{#'dash-fraction}.
+
@example
-2.11.23: #'break-align-symbol -> #'break-align-symbols
-2.11.35: scripts.caesura -> scripts.caesura.curved.
-Use #'style not #'dash-fraction to select solid/dashed lines.
-2.11.38: \setEasyHeads -> \easyHeadsOn, \fatText -> \textLengthOn,
+#'break-align-symbol -> #'break-align-symbols
+scripts.caesura -> scripts.caesura.curved
+\setEasyHeads -> \easyHeadsOn
+\easyHeadsOff (new command)
+\fatText -> \textLengthOn
\emptyText -> \textLengthOff
-2.11.46: \set hairpinToBarline -> \override Hairpin #'to-barline
-2.11.48: \compressMusic -> \scaleDurations
-2.11.50: metronomeMarkFormatter uses text markup as second argument,
-fret diagram properties moved to fret-diagram-details.
-2.11.51: \octave -> \octaveCheck, \arpeggioUp -> \arpeggioArrowUp,
-\arpeggioDown -> \arpeggioArrowDown, \arpeggioNeutral -> \arpeggioNormal,
-\setTextCresc -> \crescTextCresc, \setTextDecresc -> \dimTextDecresc,
-\setTextDecr -> \dimTextDecr, \setTextDim -> \dimTextDim,
-\setHairpinCresc -> \crescHairpin, \setHairpinDecresc -> \dimHairpin,
-\sustainUp -> \sustainOff, \sustainDown -> \sustainOn
-\sostenutoDown -> \sostenutoOn, \sostenutoUp -> \sostenutoOff
-2.11.53: infinite-spacing-height -> extra-spacing-height
-2.11.55: #(set-octavation oct) -> \ottava #oct,
+\set hairpinToBarline -> \override Hairpin #'to-barline
+\compressMusic -> \scaleDurations
+\octave -> \octaveCheck
+\arpeggioUp -> \arpeggioArrowUp
+\arpeggioDown -> \arpeggioArrowDown
+\arpeggioNeutral -> \arpeggioNormal
+\setTextCresc -> \crescTextCresc
+\setTextDecresc -> \dimTextDecresc
+\setTextDecr -> \dimTextDecr
+\setTextDim -> \dimTextDim
+\setHairpinCresc -> \crescHairpin
+\setHairpinDecresc -> \dimHairpin
+\sustainUp -> \sustainOff
+\sustainDown -> \sustainOn
+\sostenutoDown -> \sostenutoOn
+\sostenutoUp -> \sostenutoOff
+infinite-spacing-height -> extra-spacing-height
+#(set-octavation oct) -> \ottava #oct
\put-adjacent markup axis dir markup -> \put-adjacent axis dir markup markup
@end example
to guess the line width, thanks to @code{--latex-program} command line
option.
-@item
-@code{\setEasyHeads} has been renamed to @code{\easyHeadsOn}, and a new
-command @code{\easyHeadsOff} reverts note heads to normal heads.
-
-@item
-@code{\fatText}, @code{\emptyText} and @code{\compressMusic} have been
-renamed to @code{\textLengthOn}, @code{\textLengthOff} and
-@code{\scaleDurations}, respectively.
-
@item
Underlining is now possible with the @code{\underline} markup command.
@end lilypond
When typesetting a piece in Gregorian chant notation, the
-@rinternals{Gregorian_ligature_engraver} automatically selects the proper
+@rinternals{Vaticana_ligature_engraver} automatically selects the proper
note heads, so there is no need to explicitly set the note head style.
Still, the note head style can be set, e.g., to @code{vaticana_punctum} to
produce punctum neumes. Similarly, the
@menu
-* Interpretation contexts::
-* Explaining the Internals Reference::
-* Modifying properties::
-* Useful concepts and properties::
-* Common properties::
-* Advanced tweaks::
-* Discussion of specific tweaks::
+* Interpretation contexts::
+* Explaining the Internals Reference::
+* Modifying properties::
+* Useful concepts and properties::
+* Common properties::
+* Advanced tweaks::
+* Discussion of specific tweaks::
@end menu
This section describes what contexts are, and how to modify them.
@menu
-* Contexts explained::
-* Creating contexts::
-* Modifying context plug-ins::
-* Changing context default settings::
-* Defining new contexts::
-* Aligning contexts::
+* Contexts explained::
+* Creating contexts::
+* Modifying context plug-ins::
+* Changing context default settings::
+* Defining new contexts::
+* Aligning contexts::
@end menu
Contexts are arranged heirarchically:
@menu
-* Score - the master of all contexts::
-* Top-level contexts - staff containers::
-* Intermediate-level contexts - staves::
-* Bottom-level contexts - voices::
+* Score - the master of all contexts::
+* Top-level contexts - staff containers::
+* Intermediate-level contexts - staves::
+* Bottom-level contexts - voices::
@end menu
@node Score - the master of all contexts
@subsection Changing context default settings
The adjustments of the previous subsections (
-@ref{The \set command}, @ref{Modifying context plug-ins}, and
+@ref{The set command}, @ref{Modifying context plug-ins}, and
@ref{Overview of modifying properties}) can also be entered
separately from the music in the @code{\layout} block,
All these plug-ins have to cooperate, and this is achieved with a
special plug-in, which must be marked with the keyword @code{\type}.
-This should always be @rinternals{Engraver_group},
+This should always be @code{Engraver_group}.
@example
\type "Engraver_group"
@menu
-* Navigating the program reference::
-* Layout interfaces::
-* Determining the grob property::
-* Naming conventions::
+* Navigating the program reference::
+* Layout interfaces::
+* Determining the grob property::
+* Naming conventions::
@end menu
@node Navigating the program reference
@c outdated info; probably will delete.
@ignore
This fragment points to two parts of the program reference: a page
-on @code{FingerEvent} and one on @code{Fingering}.
+on @code{FingeringEvent} and one on @code{Fingering}.
-The page on @code{FingerEvent} describes the properties of the music
+The page on @code{FingeringEvent} describes the properties of the music
expression for the input @code{-2}. The page contains many links
forward. For example, it says
This engraver creates the following layout objects: @rinternals{Fingering}.
@end quotation
-In other words, once the @code{FingerEvent}s are interpreted, the
+In other words, once the @code{FingeringEvent}s are interpreted, the
@code{Fingering_engraver} plug-in will process them.
@end ignore
@item @rinternals{fingering-event}:
Music event type @code{fingering-event} is in Music expressions named
-@rinternals{FingerEvent}
+@rinternals{FingeringEvent}
@end itemize
This path goes against the flow of information in the program: it
@section Modifying properties
@menu
-* Overview of modifying properties::
-* The \set command::
-* The \override command::
-* \set versus \override::
-* Objects connected to the input::
+* Overview of modifying properties::
+* The set command::
+* The override command::
+* set versus override::
+* The tweak command::
@end menu
-@node The \set command
+@node The set command
@subsection The @code{\set} command
@cindex properties
-@node The \override command
+@node The override command
@subsection The @code{\override} command
Commands which change output generally look like
and the program reference.
-@node \set versus \override
+@node set versus override
@subsection @code{\set} vs. @code{\override}
We have seen two methods of changing properties: @code{\set} and
property (modified with @code{\set}) was created.
-@node Objects connected to the input
-@subsection Objects connected to the input
+@node The tweak command
+@subsection The @code{\tweak} command
TODO: can't use \tweak in a variable
@menu
-* Input modes::
-* Direction and placement::
-* Distances and measurements::
-* Spanners::
+* Input modes::
+* Direction and placement::
+* Distances and measurements::
+* Spanners::
@end menu
@node Input modes
@section Common properties
@menu
-* Controlling visibility of objects::
-* Line styles::
-* Rotating objects::
-* Aligning objects::
+* Controlling visibility of objects::
+* Line styles::
+* Rotating objects::
+* Aligning objects::
@end menu
@node Controlling visibility of objects
considerations.
@menu
-* Removing the stencil::
-* Making objects transparent::
-* Painting objects white::
-* Using break-visibility::
-* Special considerations::
+* Removing the stencil::
+* Making objects transparent::
+* Painting objects white::
+* Using break-visibility::
+* Special considerations::
@end menu
any angle about any point, but the method of doing so differs.
@menu
-* Rotating layout objects::
-* Rotating markup::
+* Rotating layout objects::
+* Rotating markup::
@end menu
@node Rotating layout objects
@section Advanced tweaks
@menu
-* Vertical grouping of grobs::
-* Modifying ends of spanners::
-* Modifying stencils::
-* Modifying shapes::
+* Vertical grouping of grobs::
+* Modifying ends of spanners::
+* Modifying stencils::
+* Modifying shapes::
@end menu
@subsection Modifying ends of spanners
@c FIXME Write this section
+@c See earlier material in Line styles
@node Modifying stencils
@subsection Modifying stencils
-@c FIXME Write this section
+All layout objects have a @code{stencil} property which is part of
+the @code{grob-interface}. By default, this property is usually
+set to a function specific to the object that is tailor-made to
+render the symbol which represents it in the output. For example,
+the standard setting for the @code{stencil} property of the
+@code{MultiMeasureRest} object is @code{ly:multi-measure-rest::print}.
+
+The standard symbol for any object can be replaced by modifying the
+@code{stencil} property to reference a different, specially-written,
+procedure. This requires a high level of knowledge of the internal
+workings of LilyPond, but there is an easier way which can often
+produce adequate results.
+
+This is to set the @code{stencil} property to the procedure which
+prints text -- @code{ly:text-interface::print} -- and to add a
+@code{text} property to the object which is set to contain the
+markup text which produces the required symbol. Due to the
+flexibility of markup, much can be achieved -- see in particular
+@ref{Graphic notation inside markup}.
+
+The following example demonstrates this by changing the note head
+symbol to a cross within a circle.
+
+@lilypond[verbatim,quote]
+XinO = {
+ \once \override NoteHead #'stencil = #ly:text-interface::print
+ \once \override NoteHead #'text = \markup {
+ \combine
+ \halign #-0.7 \draw-circle #0.85 #0.2 ##f
+ \musicglyph #"noteheads.s2cross"
+ }
+}
+\relative c'' {
+ a a \XinO a a
+}
+@end lilypond
+
+Any of the glyphs in the feta Font can be supplied to the
+@code{\musicglyph} markup command -- see @ref{The Feta font}.
+
+@c TODO Add inserting eps files or ref to later
+
+@c TODO Add inserting Postscript or ref to later
+
+@seealso
+
+Notation Reference:
+@ref{Graphic notation inside markup},
+@ref{Formatting text},
+@ref{Text markup commands},
+@ref{The Feta font}.
+
@node Modifying shapes
@subsection Modifying shapes
@section Discussion of specific tweaks
@menu
-* old Contexts explained::
+* old Contexts explained::
@end menu
@c @rlearning{}.
@c Notation Reference:
-@c @ruser{}.
+@c @ref{}.
@c Application Usage:
@c @rprogram{}.
@c @rlearning{}.
@c Notation Reference:
-@c @ruser{}.
+@c @ref{}.
@c Application Usage:
@c @rprogram{}.
@rlsr{Editorial annotations}.
Internals Reference:
-@rinternals{fontSize},
-@rinternals{font-size},
@rinternals{font-interface}.
@seealso
Notation Reference:
-@ref{List of colors}, @ref{Objects connected to
-the input}.
+@ref{List of colors}, @ref{The
+tweak command}.
Snippets:
@rlsr{Editorial annotations}.
Notes in a chord cannot be colored with @code{\override}; use
-@code{\tweak} instead, see @ref{Objects connected to the input}.
+@code{\tweak} instead, see @ref{The tweak command}.
@node Parentheses
@cindex hymn structure
-Here is a example of the first line of a hymn with four
+Here is an example of the first line of a hymn with four
verses, set for SATB. In this case the words for all four
parts are the same. Note how we use variables to separate the
music notation and words from the staff structure. See too
Engravers live and operate in Contexts.
Engravers such as the @code{Metronome_mark_engraver}, whose
-action and output applies to the score as a whole, operate in
+action and output apply to the score as a whole, operate in
the highest level context -- the @code{Score} context.
The @code{Clef_engraver} and @code{Key_engraver} are to be
-found in every Staff Context, as different staves may require
+found in every @code{Staff} Context, as different staves may require
different clefs and keys.
The @code{Note_heads_engraver} and @code{Stem_engraver} live
but occasionally it can be tricky. If the wrong context
is specified, no error message is produced, but the expected
action will not take place. For example, the
-@code{instrumentName} clearly lives in the Staff context, since
+@code{instrumentName} clearly lives in the @code{Staff} context, since
it is the staff that is to be named.
In this example the first staff is labelled, but not the second,
because we omitted the context name.
>>
@end lilypond
-Remember the default context name is Voice, so the second
+Remember the default context name is @code{Voice}, so the second
@code{\set} command set the property @code{instrumentName} in the
-Voice context to @qq{Alto}, but as LilyPond does not look
+@code{Voice} context to @qq{Alto}, but as LilyPond does not look
for any such property in the @code{Voice} context, no
further action took place. This is not an error, and no error
message is logged in the log file.
@seealso
-Notation Reference: @ruser{Changing context default settings},
-@ruser{The set command}.
+Notation Reference:
+@ruser{Changing context default settings}.
+@c FIXME
+@c uncomment when backslash-node-name issue is resolved -pm
+@c @ruser{The set command}.
-Internals Reference: @rinternals{Contexts},
+Internals Reference:
+@rinternals{Contexts},
@rinternals{Tunable context properties}.
Notation Reference:
@ref{Time administration},
@ref{Scaling durations},
-@ref{Objects connected to the input},
+@ref{The tweak command},
@ref{Polymetric notation}.
Snippets:
Internals Reference:
@rinternals{TimeSignature},
-@rinternals{Timing-translator},
+@rinternals{Timing_translator},
@rinternals{Staff}.
@knownissues
@ref{Contexts and engravers}. Here for reference is a list
of the most common object and property types together with
the conventions for naming them and a couple of examples of
-some real names. We have used A to stand for any capitalized
-alphabetic character and aaa to stand for any number of
+some real names. We have used @q{A} to stand for any capitalized
+alphabetic character and @q{aaa} to stand for any number of
lower-case alphabetic characters. Other characters are used
verbatim.
@multitable @columnfractions .33 .33 .33
@headitem Object/property type
@tab Naming convention
- @tab Example
+ @tab Examples
@item Contexts
@tab Aaaa or AaaaAaaaAaaa
@tab Staff, GrandStaff
We have already met the commands @code{\set} and @code{\with},
used to change the properties of @strong{contexts} and to remove
and add @strong{engravers}, in
-@ref{Modifying context properties} and @ref{Adding
+@ref{Modifying context properties}, and @ref{Adding
and removing engravers}. We now must meet some more important
commands.
The general syntax of this command is:
@example
-\override @emph{context}.@emph{layout_object}
- #'@emph{layout_property} = #@emph{value}
+\override @var{Context}.@var{LayoutObject} #'@var{layout-property} = #@var{value}
@end example
@noindent
-This will set the property with the name @emph{layout_property}
+This will set the property with the name @var{layout-property}
of the layout object with the name
-@emph{layout_object}, which is a member of the @emph{context}
-context, to the value @emph{value}.
+@var{LayoutObject}, which is a member of the @var{Context}
+context, to the value @var{value}.
-The @emph{context} can be omitted (and usually is) when the
+The @var{Context} can be omitted (and usually is) when the
required context is unambiguously implied and is one of lowest
level contexts, i.e., @code{Voice}, @code{ChordNames} or
@code{Lyrics}, and we shall omit it in many of the following
commands have been issued.
@example
-\revert @emph{context}.@emph{layout_object} #'@emph{layout_property}
+\revert @var{Context}.@var{LayoutObject} #'@var{layout-property}
@end example
-Again, just like @emph{context} in the @code{\override} command,
-@emph{context} is often not needed. It will be omitted
+Again, just like @var{Context} in the @code{\override} command,
+@var{Context} is often not needed. It will be omitted
in many of the following examples. Here we revert the color
of the note head to the default value for the final two notes:
item in the input stream.
Here's an example. Suppose we wish to change the size of the
-middle note (the E) in a C major chord. Let's first see what
+middle note head (the E) in a C major chord. Let's first see what
@code{\once \override} would do:
@lilypond[quote,fragment,ragged-right,verbatim,relative=1]
<c e g>
@end lilypond
-We see the override affects @emph{all} the notes in the chord.
+We see the override affects @emph{all} the note heads in the chord.
This is because all the notes of a chord occur at the same
@emph{musical moment}, and the action of @code{\once} is to
apply the override to all layout objects of the type specified
The @code{\tweak} command operates in a different way. It acts
on the immediately following item in the input stream. However,
it is effective only on objects which are created directly from
-the input stream, essentially note heads and articulations.
-(Objects such as stems and accidentals are created later and
-cannot be tweaked in this way). Furthermore, when it is applied
+the input stream, essentially note heads and articulations;
+objects such as stems and accidentals are created later and
+cannot be tweaked in this way. Furthermore, when it is applied
to note heads these @emph{must} be within a chord, i.e., within
single angle brackets, so to tweak a single note the @code{\tweak}
command must be placed inside single angle brackets with the
layout object should be specified; in fact, it would generate
an error to do so. These are both implied by the following
item in the input stream. So the general syntax of the
-@code{\tweak} command is simply:
+@code{\tweak} command is simply
@example
-\tweak #'@emph{layout_property} = #@emph{value}
+\tweak #'@var{layout-property} = #@var{value}
@end example
A @code{\tweak} command can also be used to modify just one in
-\tweak #'color #green _Green
@end lilypond
+@noindent
Note that the @code{\tweak} command must be preceded by an
articulation mark as if it were an articulation itself.
}
@end lilypond
-You can find more details of the @code{\tweak} command in
-@ruser{Objects connected to the input}.
-
-If nested tuplets do not begin at the same moment their
+If nested tuplets do not begin at the same moment, their
appearance may be modified in the usual way with
@code{\override} commands:
}
@end lilypond
+@seealso
+
+Notation Reference:
+@ruser{The tweak command}.
+
@node The Internals Reference manual
@section The Internals Reference manual
Let's use a concrete example with a simple fragment of real
music:
-@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
+@lilypond[quote,verbatim,relative=2]
{
\time 6/8
{
The IR for the version of LilyPond you are using may be found
on the LilyPond website at @uref{http://lilypond.org}. Go to the
documentation page and click on the Internals Reference link.
-For learning purposes you should use the standard html version,
+For learning purposes you should use the standard HTML version,
not the @q{one big page} or the PDF. For the next few
paragraphs to make sense you will need to actually do this
as you read.
version of LilyPond, in alphabetic order. Select the link to
Slur, and the properties of Slurs are listed.
-(An alternative way of finding this page is from the Notation
-Reference. On one of the pages that deals with slurs you may
-find a link to the Internals Reference. This link will
-take you directly to this page, but often it is easier to go
-straight to the IR and search there.)
+An alternative way of finding this page is from the Notation
+Reference. On one of the pages that deals with slurs you may find a
+link to the Internals Reference. This link will take you directly to
+this page, but if you have an idea about the name of the layout object
+to be tweaked, it is easier to go straight to the IR and search there.
-This Slur page in the IR tells us first that Slur objects are
-created by the
-Slur_engraver. Then it lists the standard settings. Note
-these are @strong{not} in alphabetic order. Browse down
-them looking for a property that might control the heaviness
-of slurs, and you should find
+This Slur page in the IR tells us first that Slur objects are created
+by the Slur_engraver. Then it lists the standard settings. Note
+these are @strong{not} in alphabetic order. Browse down them looking
+for a property that might control the heaviness of slurs, and you
+should find
@example
@code{thickness} (number)
answer is, @q{Within the music, before the first slur and
close to it.} Let's do that:
-@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
+@lilypond[quote,verbatim,relative=2]
{
\time 6/8
{
@code{\once} must be
repositioned as follows:
-@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
+@lilypond[quote,verbatim,relative=2]
{
\time 6/8
{
@code{\once} placed immediately before each of the notes where
the slurs begin:
-@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
+@lilypond[quote,verbatim,relative=2]
{
\time 6/8
{
to return the @code{thickness} property to its default value
after the second slur:
-@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
+@lilypond[quote,verbatim,relative=2]
{
\time 6/8
{
practice in extracting information from it. These examples will
contain progressively fewer words of guidance and explanation.
+
@node Properties found in interfaces
@subsection Properties found in interfaces
@seealso
-Internals Reference:
-@rinternals{Melisma_translator}.
-
@c @lsr{vocal,lyric@/-combine.ly}.
@knownissues
Internals Reference:
@rinternals{LyricText},
-@rinternals{StanzaNumber},
-@rinternals{VocalName}.
+@rinternals{StanzaNumber}.
{
static Stencil dot (Offset p, Real radius);
static Stencil bracket (Axis a, Interval iv, Real thick, Real protrude, Real blot);
- static Stencil accordion (SCM arg, Real interline_f, Font_metric *fm);
static Stencil rotated_box (Real slope, Real width, Real thick, Real blot);
static Stencil round_filled_polygon (vector<Offset> const &points, Real blotdiameter);
static Stencil frame (Box b, Real thick, Real blot);
#include "warn.hh"
#include "dimensions.hh"
#include "bezier.hh"
-#include "string-convert.hh"
#include "file-path.hh"
#include "main.hh"
#include "lily-guile.hh"
-#include "font-metric.hh"
Stencil
Lookup::dot (Offset p, Real radius)
return Stencil (b, horizontal_bend);
}
-/*
- TODO: junk me.
-*/
-Stencil
-Lookup::accordion (SCM s, Real staff_space, Font_metric *fm)
-{
- Stencil m;
- string sym = ly_scm2string (scm_car (s));
- string reg = ly_scm2string (scm_car (scm_cdr (s)));
-
- if (sym == "Discant")
- {
- Stencil r = fm->find_by_name ("accordion.accDiscant");
- m.add_stencil (r);
- if (reg.substr (0, 1) == "F")
- {
- Stencil d = fm->find_by_name ("accordion.accDot");
- d.translate_axis (staff_space * 2.5 PT, Y_AXIS);
- m.add_stencil (d);
- reg = reg.substr (1);
- }
- int eflag = 0x00;
- if (reg.substr (0, 3) == "EEE")
- {
- eflag = 0x07;
- reg = reg.substr (3);
- }
- else if (reg.substr (0, 2) == "EE")
- {
- eflag = 0x05;
- reg = reg.substr (2);
- }
- else if (reg.substr (0, 2) == "Eh")
- {
- eflag = 0x04;
- reg = reg.substr (2);
- }
- else if (reg.substr (0, 1) == "E")
- {
- eflag = 0x02;
- reg = reg.substr (1);
- }
- if (eflag & 0x02)
- {
- Stencil d = fm->find_by_name ("accordion.accDot");
- d.translate_axis (staff_space * 1.5 PT, Y_AXIS);
- m.add_stencil (d);
- }
- if (eflag & 0x04)
- {
- Stencil d = fm->find_by_name ("accordion.accDot");
- d.translate_axis (staff_space * 1.5 PT, Y_AXIS);
- d.translate_axis (0.8 * staff_space PT, X_AXIS);
- m.add_stencil (d);
- }
- if (eflag & 0x01)
- {
- Stencil d = fm->find_by_name ("accordion.accDot");
- d.translate_axis (staff_space * 1.5 PT, Y_AXIS);
- d.translate_axis (-0.8 * staff_space PT, X_AXIS);
- m.add_stencil (d);
- }
- if (reg.substr (0, 2) == "SS")
- {
- Stencil d = fm->find_by_name ("accordion.accDot");
- d.translate_axis (0.5 * staff_space PT, Y_AXIS);
- d.translate_axis (0.4 * staff_space PT, X_AXIS);
- m.add_stencil (d);
- d.translate_axis (-0.8 * staff_space PT, X_AXIS);
- m.add_stencil (d);
- reg = reg.substr (2);
- }
- if (reg.substr (0, 1) == "S")
- {
- Stencil d = fm->find_by_name ("accordion.accDot");
- d.translate_axis (0.5 * staff_space PT, Y_AXIS);
- m.add_stencil (d);
- reg = reg.substr (1);
- }
- }
- else if (sym == "Freebase")
- {
- Stencil r = fm->find_by_name ("accordion.accFreebase");
- m.add_stencil (r);
- if (reg.substr (0, 1) == "F")
- {
- Stencil d = fm->find_by_name ("accordion.accDot");
- d.translate_axis (staff_space * 1.5 PT, Y_AXIS);
- m.add_stencil (d);
- reg = reg.substr (1);
- }
- if (reg == "E")
- {
- Stencil d = fm->find_by_name ("accordion.accDot");
- d.translate_axis (staff_space * 0.5 PT, Y_AXIS);
- m.add_stencil (d);
- }
- }
- else if (sym == "Bayanbase")
- {
- Stencil r = fm->find_by_name ("accordion.accBayanbase");
- m.add_stencil (r);
- if (reg.substr (0, 1) == "T")
- {
- Stencil d = fm->find_by_name ("accordion.accDot");
- d.translate_axis (staff_space * 2.5 PT, Y_AXIS);
- m.add_stencil (d);
- reg = reg.substr (1);
- }
- /* include 4' reed just for completeness. You don't want to use this. */
- if (reg.substr (0, 1) == "F")
- {
- Stencil d = fm->find_by_name ("accordion.accDot");
- d.translate_axis (staff_space * 1.5 PT, Y_AXIS);
- m.add_stencil (d);
- reg = reg.substr (1);
- }
- if (reg.substr (0, 2) == "EE")
- {
- Stencil d = fm->find_by_name ("accordion.accDot");
- d.translate_axis (staff_space * 0.5 PT, Y_AXIS);
- d.translate_axis (0.4 * staff_space PT, X_AXIS);
- m.add_stencil (d);
- d.translate_axis (-0.8 * staff_space PT, X_AXIS);
- m.add_stencil (d);
- reg = reg.substr (2);
- }
- if (reg.substr (0, 1) == "E")
- {
- Stencil d = fm->find_by_name ("accordion.accDot");
- d.translate_axis (staff_space * 0.5 PT, Y_AXIS);
- m.add_stencil (d);
- reg = reg.substr (1);
- }
- }
- else if (sym == "Stdbase")
- {
- Stencil r = fm->find_by_name ("accordion.accStdbase");
- m.add_stencil (r);
- if (reg.substr (0, 1) == "T")
- {
- Stencil d = fm->find_by_name ("accordion.accDot");
- d.translate_axis (staff_space * 3.5 PT, Y_AXIS);
- m.add_stencil (d);
- reg = reg.substr (1);
- }
- if (reg.substr (0, 1) == "F")
- {
- Stencil d = fm->find_by_name ("accordion.accDot");
- d.translate_axis (staff_space * 2.5 PT, Y_AXIS);
- m.add_stencil (d);
- reg = reg.substr (1);
- }
- if (reg.substr (0, 1) == "M")
- {
- Stencil d = fm->find_by_name ("accordion.accDot");
- d.translate_axis (staff_space * 2 PT, Y_AXIS);
- d.translate_axis (staff_space PT, X_AXIS);
- m.add_stencil (d);
- reg = reg.substr (1);
- }
- if (reg.substr (0, 1) == "E")
- {
- Stencil d = fm->find_by_name ("accordion.accDot");
- d.translate_axis (staff_space * 1.5 PT, Y_AXIS);
- m.add_stencil (d);
- reg = reg.substr (1);
- }
- if (reg.substr (0, 1) == "S")
- {
- Stencil d = fm->find_by_name ("accordion.accDot");
- d.translate_axis (staff_space * 0.5 PT, Y_AXIS);
- m.add_stencil (d);
- reg = reg.substr (1);
- }
- }
- /* ugh maybe try to use regular font for S.B. and B.B and only use one font
- for the rectangle */
- else if (sym == "SB")
- {
- Stencil r = fm->find_by_name ("accordion.accSB");
- m.add_stencil (r);
- }
- else if (sym == "BB")
- {
- Stencil r = fm->find_by_name ("accordion.accBB");
- m.add_stencil (r);
- }
- else if (sym == "OldEE")
- {
- Stencil r = fm->find_by_name ("accordion.accOldEE");
- m.add_stencil (r);
- }
- else if (sym == "OldEES")
- {
- Stencil r = fm->find_by_name ("accordion.accOldEES");
- m.add_stencil (r);
- }
- return m;
-}
-
Stencil
Lookup::repeat_slash (Real w, Real s, Real t)
{
return Font_interface::get_default_font (me)
->find_by_name ("scripts." + ly_scm2string (str));
}
- else if (key == ly_symbol2scm ("accordion"))
- return Lookup::accordion (scm_cdr (s), 1.0,
- Font_interface::get_default_font (me));
else
assert (false);
+++ /dev/null
-\version "2.10.0"
-% Symbols needed to print accordion music
-%
-% 2' = T
-% 4' = F
-% 8' = E
-% 16' = S
-%
-
-accDiscant = #(make-articulation "accDiscant")
-accDiscantF = #(make-articulation "accDiscantF")
-accDiscantE = #(make-articulation "accDiscantE")
-accDiscantEh = #(make-articulation "accDiscantEh")
-accDiscantFE = #(make-articulation "accDiscantFE")
-accDiscantFEh = #(make-articulation "accDiscantFEh")
-accDiscantEE = #(make-articulation "accDiscantEE")
-accDiscantFEE = #(make-articulation "accDiscantFEE")
-accDiscantEEE = #(make-articulation "accDiscantEEE")
-accDiscantFEEE = #(make-articulation "accDiscantFEEE")
-accDiscantS = #(make-articulation "accDiscantS")
-accDiscantFS = #(make-articulation "accDiscantFS")
-accDiscantES = #(make-articulation "accDiscantES")
-accDiscantEhS = #(make-articulation "accDiscantEhS")
-accDiscantFES = #(make-articulation "accDiscantFES")
-accDiscantFEhS = #(make-articulation "accDiscantFEhS")
-accDiscantEES = #(make-articulation "accDiscantEES")
-accDiscantFEES = #(make-articulation "accDiscantFEES")
-accDiscantEEES = #(make-articulation "accDiscantEEES")
-accDiscantFEEES = #(make-articulation "accDiscantFEEES")
-accDiscantSS = #(make-articulation "accDiscantSS")
-accDiscantESS = #(make-articulation "accDiscantESS")
-accDiscantEESS = #(make-articulation "accDiscantEESS")
-accDiscantEEESS = #(make-articulation "accDiscantEEESS")
-
-accFreebase = #(make-articulation "accFreebase")
-accFreebaseF = #(make-articulation "accFreebaseF")
-accFreebaseE = #(make-articulation "accFreebaseE")
-accFreebaseFE = #(make-articulation "accFreebaseFE")
-
-accBayanbase = #(make-articulation "accBayanbase")
-accBayanbaseT = #(make-articulation "accBayanbaseT")
-accBayanbaseE = #(make-articulation "accBayanbaseE")
-accBayanbaseTE = #(make-articulation "accBayanbaseTE")
-accBayanbaseEE = #(make-articulation "accBayanbaseEE")
-accBayanbaseTEE = #(make-articulation "accBayanbaseTEE")
-
-accStdbase = #(make-articulation "accStdbase")
-accStdbaseFE = #(make-articulation "accStdbaseFE")
-accStdbaseTFE = #(make-articulation "accStdbaseTFE")
-accStdbaseMES = #(make-articulation "accStdbaseMES")
-accStdbaseTFMES = #(make-articulation "accStdbaseTFMES")
-
-accSB = #(make-articulation "accSB")
-accBB = #(make-articulation "accBB")
-accOldEE = #(make-articulation "accOldEE")
-accOldEES = #(make-articulation "accOldEES")