@lilypondfile[quote]{text-headword.ly}
This section explains how to include text (with various
-formatting) in your scores.
+formatting) in music scores.
@noindent
Some text elements that are not dealt with here are discussed in other
@menu
* Writing text::
-* Formatting text::
+* Formatting text::
+* Fonts::
@end menu
@node Writing text
@subsection Writing text
-@menu
+This section introduces different ways of adding text to a score.
+
+@menu
* Text scripts::
* Text spanners::
* Text marks::
-* Separate text::
+* Separate text::
@end menu
Notation Reference: @ref{Formatting text},
@ref{Controlling direction and placement}.
-Snippets: @lsrdir{Text,Text}
+Snippets:
+@rlsr{Text}.
-Internals Reference: @internalsref{TextScript}.
+Internals Reference: @rinternals{TextScript}.
@knownissues
Some performance indications, e.g., @i{rallentando} or
@i{accelerando}, are written as text and are extended over many
measures with dotted lines.
-
Such objects, called @q{spanners}, may be created
-from one note to another by using the following syntax:
+from one note to another using the following syntax:
@lilypond[verbatim,quote,ragged-right,fragment,relative=2]
\override TextSpanner #'bound-details #'left #'text = "rit."
@noindent
The string to be printed is set through
-object properties. By default it is printed in italic characters,
+object properties. By default it is printed in italic characters,
but different formatting can be obtained using
-@code{\markup} blocks:
+@code{\markup} blocks, as described in @ref{Formatting text}.
@lilypond[quote,ragged-right,fragment,relative=2,verbatim]
\override TextSpanner #'bound-details #'left #'text =
@end lilypond
The line style, as well as the text string, can be defined as an
-object property. This syntax is described in @ref{Line styles}.
+object property. This syntax is described in @ref{Line styles}.
@predefined
Notation Reference: @ref{Line styles}.
-Snippets: @lsrdir{Text,Text}
+Snippets:
+@rlsr{Text}.
-Internals Reference: @internalsref{TextSpanner}.
+Internals Reference: @rinternals{TextSpanner}.
@node Text marks
the syntax described in @ref{Rehearsal marks}:
@lilypond[verbatim,quote,ragged-right,fragment,relative=2]
-c4\mark "dolce" c c c
+c4\mark "Allegro" c c c
@end lilypond
This syntax makes possible to put any text on a bar line;
@end lilypond
@noindent
-Such objects are only typeset above the top staff of the score; they
-can be placed above the bar line or between notes, depending on whether
-you specify it at the end or the middle of a bar. When specified at the
-beginning of a score or at a line break, the mark will be printed at
+Such objects are only typeset above the top staff of the score; depending on
+whether they are specified at the end or the middle of a bar, they
+can be placed above the bar line or between notes. When specified at the
+beginning of a score or at a line break, marks will be printed at
the beginning of the line (the next line, in case of a line break).
@lilypond[fragment,quote,ragged-right,verbatim,relative=2]
-\mark "dolce" c1
+\mark "Allegro" c1
c\mark "assai" \break
c c
@end lilypond
@snippets
-@lilypondfile[verbatim,lilyquote,ragged-right,texidoc]
+@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle]
{printing-marks-at-the-end-of-a-line-or-a-score.ly}
-@lilypondfile[verbatim,lilyquote,ragged-right,texidoc]
+@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle]
{aligning-marks-with-various-notation-objects.ly}
-@lilypondfile[verbatim,lilyquote,ragged-right,texidoc]
+@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle]
{printing-marks-on-every-staff.ly}
@seealso
Notation Reference: @ref{Rehearsal marks},
@ref{Formatting text}, @ref{The Feta font}.
-Snippets: @lsrdir{Text,Text}
+Snippets:
+@rlsr{Text}.
-Internals Reference: @internalsref{RehearsalMark}.
+Internals Reference: @rinternals{RehearsalMark}.
@knownissues
@c IMO this is a bug; hopefully it'll be fixed soon, so I can
@funindex \markup
A @code{\markup} block can exist by itself, outside of any
-any @code{\score} block. This syntax is called a @q{top-level
-expression}, and is described in @code{File structure}.
-
-@c TODO: turn this into a @lilypond example
+any @code{\score} block, as a @qq{top-level
+expression}. This syntax is described in @ref{File structure}.
-@example
-\markup @{
- @var{..}
-@}
-@end example
+@lilypond[quote,ragged-right,verbatim]
+\markup {
+ Tomorrow, and tomorrow, and tomorrow...
+}
+@end lilypond
@noindent
This allows to print text separately
several music pieces, as described in
@ref{Multiple scores in a book}.
-@example
-\score @{
- @var{..}
-@}
-\markup @{
- @var{..}
-@}
-\score @{
- @var{..}
-@}
-@end example
+@lilypond[quote,ragged-right,verbatim]
+\score {
+ c'1
+}
+\markup {
+ Tomorrow, and tomorrow, and tomorrow...
+}
+\score {
+ c'1
+}
+@end lilypond
Using a specific syntax, text blocks can be spread
over multiple pages, making possible to print
text documents or books -- and therefore to
use LilyPond as a word processor. This syntax is described in
-@ref{Page wrapping text}.
+@ref{Multi-page markup}.
+
+@predefined
+
+@funindex \markup
+@code{\markup},
+@funindex \markuplines
+@code{\markuplines}
@ignore
@snippets
-TODO: add convenient snippets, e.g.
-"Inserting large plain text sections"
-(this requires the LSR to be updated) -vv
+TODO: add convenient snippets in input/new -vv
@end ignore
@seealso
-Notation Reference: @code{Formatting text},
-@code{File structure},
+Notation Reference: @ref{Formatting text},
+@ref{File structure},
@ref{Multiple scores in a book},
-@ref{Page wrapping text}.
+@ref{Multi-page markup}.
-Snippets: @lsrdir{Text,Text}.
+Snippets:
+@rlsr{Text}.
-Internals Reference: @internalsref{TextScript}.
-
-@predefined
-
-@funindex \markup
-@code{\markup},
-@funindex \markuplines
-@code{\markuplines}
+Internals Reference: @rinternals{TextScript}.
@node Formatting text
@subsection Formatting text
+This section presents basic and advanced text formatting,
+using the @code{\markup} mode specific syntax.
+
@menu
* Text markup introduction::
-* Nested scores::
-* Page wrapping text::
-* Font selection::
+* Common markup commands::
+* Text alignment::
+* Graphic notation inside markup::
+* Music notation inside markup::
+* Multi-page markup::
@end menu
@node Text markup introduction
@cindex markup text
@cindex typeset text
-A @code{\markup} block is used to typeset text with an extensible syntax,
-called @q{markup mode}.
-Specific commands can be entered in this mode, using the
-backslash @code{\} character.
-@c TODO: move the following sentence (and add an example?) -vv
-To @emph{print} such characters as
-@code{\} and @code{#} in the output, use double
-quotation marks.
+A @code{\markup} block is used to typeset text with an extensible
+specific syntax called @qq{markup mode}.
+
+@cindex markup expressions
+@cindex markup syntax
+
+The markup syntax is similar to LilyPond's usual syntax: a
+@code{\markup} expression is enclosed in curly braces @code{@{
+@dots{} @}}.
+
+In markup mode, specific commands are entered using the backslash
+@code{\} character. Such commands only affect the first following
+expression.
+
+Markup expressions may also be enclosed in double quotes
+@code{"..."}. Such expressions are treated as text strings
+and may not contain nested expressions or commands.
+Therefore, braces are generally prefered to double quotes;
+the following example demonstrates both syntaxes.
@lilypond[quote,verbatim,fragment,relative=1]
-c1^\markup { hello }
-c1_\markup { hi there }
-c1^\markup { hi \bold there, is \italic {anyone home?} }
-c1_\markup { "\special {weird} #characters" }
+e1-\markup "intenso"
+a2^\markup { poco \italic piĆ¹ forte }
+c e1
+d2_\markup { \italic "string. assai" }
+e
+b1^\markup { \bold { molto \italic agitato } }
+c
@end lilypond
-@noindent
-An exhaustive list of @code{\markup}-specific commands can be found in
-@ref{Text markup commands}.
+@cindex special characters in markup mode
+@cindex markup mode, special characters
+@cindex reserved characters, printing
+@cindex printing special characters
+
+Special characters such as @code{\} and @code{#}
+can be printed in the output simply using double
+quotes. Double quotation marks are only printed
+in the output when preceded by backslashes:
+
+@lilypond[quote,verbatim,fragment,relative=1]
+\clef bass
+a^\markup "##\ LEPORELLO \##"
+a_\markup "Bravi! \"Cosa rara\"!"
+r a8 d
+cis a r4 r2
+@end lilypond
-@code{\markup} blocks can be used anywhere text is called,
-and not only for @internalsref{TextScript}s objects.
+The way markup expressions are defined affects
+how these expressions will stacked, centered and aligned
+when using the commands explained in @ref{Text alignment}.
+
+@lilypond[quote,verbatim,fragment,relative=1]
+c1^\markup { \column { a bbbb \line { c d } } }
+c1^\markup { \center-align { a bbbb c } }
+c1^\markup { \line { a b c } }
+@end lilypond
+
+Lists of words that are not enclosed with double quotes
+or preceded by a previous command are not kept distinct. In
+the following example, the first two @code{\markup} expressions
+are equivalent:
+
+@lilypond[quote,verbatim,fragment,relative=1]
+c1^\markup { \center-align { a bbb c } }
+c1^\markup { \center-align { a { bbb c } } }
+c1^\markup { \center-align { a \line { bbb c } } }
+@end lilypond
+
+
+Markups can be stored in variables. These variables may be
+directly attached to notes:
@lilypond[quote,verbatim]
-\header{ title = \markup{ \bold { foo \italic { bar! } } } }
-\score{
- \relative c'' {
- \override Score.RehearsalMark
- #'break-visibility = #begin-of-line-invisible
- \override Score.RehearsalMark #'self-alignment-X = #right
-
- \set Staff.instrumentName = \markup{ \column{ Alto solo } }
- c2^\markup{ don't be \flat }
- \override TextSpanner #'bound-details #'left #'text = \markup{\italic rit }
- b2\startTextSpan
- a2\mark \markup{ \large \bold Fine }
- r2\stopTextSpan
- \bar "||"
- }
- \addlyrics { bar, foo \markup{ \italic bar! } }
+allegro = \markup { \bold \large Allegro }
+
+{
+ d''8.^\allegro
+ d'16 d'4 r2
}
@end lilypond
-A @code{\markup} block can also be printed on its own at the top-level
-of the input file, away from
-any @code{\score} block. This syntax is described in
-@ref{Multiple scores in a book}.
-@lilypond[quote,ragged-right,verbatim]
-\markup{ Here is some text. }
-@end lilypond
+@noindent
+An exhaustive list of @code{\markup}-specific commands can be found in
+@ref{Text markup commands}.
+
+
+@seealso
+
+This manual: @ref{Text markup commands}.
+
+Snippets:
+@rlsr{Text}.
+
+Internals Reference: @rinternals{TextScript}.
+
+Init files: @file{scm/@/new@/-markup@/.scm}.
+
+
+@knownissues
+
+@c FIXME: this is totally deprecated, isn't it? -vv
+Kerning or generation of ligatures is only done when the @TeX{}
+backend is used. In this case, LilyPond does not account for them
+so texts will be spaced slightly too wide.
+
+@c is the following sentence really relevant? -vv
+Syntax errors for markup mode are confusing.
+
+
+@node Common markup commands
+@subsubsection Common markup commands
+
+Some basic formatting can be used blah blah
+
+
+
+@ignore
+TODO: here are some commands that could be described here.
+I'm putting them in bulk, prior to working on this section. -vv
+
+\simple
+
+\char
+\fraction
+
+\combine
+\concat
+\put-adjacent
+
+
+\page-ref (see also "Table of contents")
+\fromproperty
+\verbatim-file
+\with-url
+
+\on-the-fly
+\override
+
+
+\null
+\hspace
+
+\lower
+\raise
+\translate
+\translate-scaled
+\rotate
+\transparent
+\whiteout
+
+@end ignore
+
+
@cindex font switching
-Some font switching commands are demonstrated here. Such commands
-apply only to the first following word; several words may be affected
-by enclosing them in braces.
+Some font switching commands are demonstrated here.
-@example
-\markup @{ \bold @{ hi there @} @}
-@end example
+\italic
+\upright
+\bold
+\medium
+\underline
+
-@c TODO: remove the following line and example? -vv
-@noindent
-For clarity, you can also do this for single arguments, e.g.,
+@c TODO: what's the difference between the following commands? -vv
+\smallCaps
+\caps
+\fontCaps
-@example
-\markup @{ is \italic @{ anyone @} home @}
-@end example
-The markup mode can be used to compose expressions, similar to
-mathematical expressions, XML documents, and music expressions.
-Such expressions can be vertically stacked, horizontally centered,
-or aligned in different ways:
+Some alternate font families can easily be selected:
-@lilypond[quote,verbatim,fragment,relative=1]
-c1^\markup { \column { a bbbb \line { c d } } }
-c1^\markup { \center-align { a bbbb c } }
-c1^\markup { \line { a b c } }
-@end lilypond
+\sans
+\typewriter
+\roman
+\number (only for numbers, such as fingerings and time signatures)
+@c TODO: add \slashed-digit here? -vv
-Lists with no previous command are not kept distinct. In
-the following example, the two @code{\markup} expressions
-are equivalent:
+The size can be blah blah blah
-@c TODO: merge these two examples in a @lilypond example -vv
+\fontsize
-@example
-\center-align @{ @{ a b @} @{ c d @} @}
-\center-align @{ a b c d @}
-@end example
+Some predefined font sizes can be used blah blah
-@noindent
+\teeny
+\tiny
+\small
+\normalsize
+\large
+\huge
-To keep lists of words distinct, please use quotes @code{"} or
-the @code{\line} command
+Some shorcuts allow to change the font size relatively to its previous value
-@lilypond[quote,verbatim,fragment,relative=1]
-\textLengthOn
-c4^\markup{ \center-align { on three lines } }
-c4^\markup{ \center-align { "all one line" } }
-c4^\markup{ \center-align { { on three lines } } }
-c4^\markup{ \center-align { \line { on one line } } }
-@end lilypond
+\smaller
+\bigger
+\larger
-Markups can be stored in variables and these variables may be
-attached to notes, like
+\magnify
+
+Text may be printed as subscript or superscript:
+
+\sub
+\super
+
+To obtain subscripts or superscripts in a normal text size, use
+\normal-size-sub
+\normal-size-super
+
+All these settings (except the size) can be reverted to the default font:
+
+\normal-text
+
+
+@node Text alignment
+@subsubsection Text alignment
-@example
-allegro = \markup @{ \bold \large @{ Allegro @} @}
- @{ a^\allegro b c d @}
-@end example
Some objects have alignment procedures of their own, which cancel
out any effects of alignments applied to their markup arguments as
-a whole. For example, the @internalsref{RehearsalMark} is
+a whole. For example, the @rinternals{RehearsalMark} is
horizontally centered, so using @code{\mark \markup @{ \left-align
.. @}} has no effect.
@ref{Text markup commands}, for more details.
-@seealso
+Alignment basics:
+\left-align
+\center-align
+\right-align
-This manual: @ref{Text markup commands}.
+Horizontal alignment:
+\hcenter
+\general-align
+\halign
-Snippets: @lsrdir{Text,Text}
-Internals Reference: @internalsref{TextScript}.
+Vertical alignment:
+\vcenter
+\column
+\dir-column
-Init files: @file{scm/@/new@/-markup@/.scm}.
+Building a "large" markup:
+\line
-@knownissues
+\fill-line
-Kerning or generation of ligatures is only done when the @TeX{}
-backend is used. In this case, LilyPond does not account for them
-so texts will be spaced slightly too wide.
+\hcenter-in
+
+\pad-around
+\pad-markup
+\pad-to-box
+\pad-x
+
+Alignment inside a "large" markup:
-Syntax errors for markup mode are confusing.
+\justify-field
+\justify
+\justify-string
+
+\wordwrap-field
+\wordwrap
+\wordwrap-string
+
+@node Graphic notation inside markup
+@subsubsection Graphic notation inside markup
+Graphics around text:
+\box
+\circle
+
+\bracket
+\hbracket
+
+"Standalone" graphics:
+
+\arrow-head
+\draw-line
+\draw-circle
+\filled-box
+\triangle
+\strut
+\with-color
-@node Nested scores
-@subsubsection Nested scores
-It is possible to nest music inside markups, by adding a
-@code{\score} block to a markup expression. Such a score must
-contain a @code{\layout} block.
+Advanced graphics:
+\stencil
+
+\postscript
+\epsfile
+
+\with-dimensions
+
+@node Music notation inside markup
+@subsubsection Music notation inside markup
+
+Notes can be printed in markup mode blah blah:
+
+\note
+\note-by-number
+
+Accidental symbols can be obtained easily:
+
+\doubleflat
+\sesquiflat
+\flat
+\semiflat
+\natural
+\semisharp
+\sharp
+\sesquisharp
+\doublesharp
+
+Some other notation objects blah blah
+
+\beam
+\finger
+\dynamic
+\tied-lyric
+\markalphabet
+\markletter
+@c TODO: add \text here? -vv
+
+Any musical symbol can be printed
+
+\musicglyph
+@c TODO: add \lookup here? -vv
+
+
+The markup mode has support for fret diagrams:
+
+\fret-diagram
+\fret-diagram-terse
+\fret-diagram-verbose
+
+An entire @code{\score} block can even be nested in a @code{\markup}
+block. In such a case, the @code{\score} must contain a @code{\layout} block.
+
+
+\score
+
@lilypond[quote,verbatim,ragged-right]
\relative {
@seealso
-Snippets: @lsrdir{Text,Text}
+Snippets:
+@rlsr{Text}.
-@node Page wrapping text
-@subsubsection Page wrapping text
+@node Multi-page markup
+@subsubsection Multi-page markup
Whereas @code{\markup} is used to enter a non-breakable block of
text, @code{\markuplines} can be used at top-level to enter lines
This manual: @ref{Text markup list commands}, @ref{New
markup list command definition}.
-Snippets: @lsrdir{Text,Text}
+Snippets:
+@rlsr{Text}.
@predefined
@funindex \markuplines
@code{\markuplines}
-@node Font selection
-@subsubsection Font selection
+
+
+@c TODO: move the following subsubsec into NR3 -vv
+@c maybe. -gp
+@node Fonts
+@subsection Fonts
+
+@menu
+* Entire document fonts::
+* Single entry fonts::
+@end menu
+
+@node Entire document fonts
+@subsubsection Entire document fonts
+
+It is also possible to change the default font family for the
+entire document. This is done by calling the
+@code{make-pango-font-tree} from within the @code{\paper} block.
+The function takes names for the font families to use for roman,
+sans serif and monospaced text. For example,
+
+@cindex font families, setting
+@cindex Pango
+
+
+@lilypond[verbatim]
+\paper {
+ myStaffSize = #20
+
+ #(define fonts
+ (make-pango-font-tree "Times New Roman"
+ "Nimbus Sans"
+ "Luxi Mono"
+ (/ myStaffSize 20)))
+}
+
+{
+ c'^\markup { roman: foo \sans bla \typewriter bar }
+}
+@end lilypond
+
+@c we don't do Helvetica / Courier, since GS incorrectly loads
+@c Apple TTF fonts
+
+
+@node Single entry fonts
+@subsubsection Single entry fonts
@cindex font selection
@cindex font magnification
@cindex font magnification
-It is also possible to change the default font family for the
-entire document. This is done by calling the
-@code{make-pango-font-tree} from within the @code{\paper} block.
-The function takes names for the font families to use for roman,
-sans serif and monospaced text. For example,
-
-@cindex font families, setting
-@cindex Pango
-
-
-@lilypond[verbatim]
-\paper {
- myStaffSize = #20
-
- #(define fonts
- (make-pango-font-tree "Times New Roman"
- "Nimbus Sans"
- "Luxi Mono"
- (/ myStaffSize 20)))
-}
-
-{
- c'^\markup { roman: foo \sans bla \typewriter bar }
-}
-@end lilypond
-
-@c we don't do Helvetica / Courier, since GS incorrectly loads
-@c Apple TTF fonts
-
@seealso
-Snippets: @lsrdir{Text,Text}
+Snippets:
+@rlsr{Text}.