@c -*- coding: utf-8; mode: texinfo; -*-
@ignore
    Translation of GIT committish: FILL-IN-HEAD-COMMITTISH

    When revising a translation, copy the HEAD committish of the
    version that you are working on.  See TRANSLATION for details.
@end ignore

@c \version "2.11.51"

@node Text
@section Text

@lilypondfile[quote]{text-headword.ly}

This section explains how to include text (with various
formatting) in music scores.

@noindent
Some text elements that are not dealt with here are discussed in other
specific sections: @ref{Vocal music}, @ref{Titles and headers}.


@cindex Text, other languages
@warning{To write accented and special text (such as characters
from other languages), simply insert the characters directly into
the LilyPond file.  The file must be saved as UTF-8.  For more
information, see @ref{Text encoding}.}

@menu
* Writing text::                
* Formatting text::             
* Fonts::                       
@end menu


@node Writing text
@subsection Writing text

This section introduces different ways of adding text to a score.

@menu
* Text scripts::                
* Text spanners::               
* Text marks::                  
* Separate text::               
@end menu


@node Text scripts
@subsubsection Text scripts

@cindex Text scripts
@cindex text items, non-empty
@cindex non-empty texts
@cindex quoted text

Simple @q{quoted text} indications may be added
to a score, as demonstrated in the following example.
Such indications can be manually placed
above or below the staff, using the
syntax described in @ref{Direction and
placement}.

@lilypond[quote,fragment,ragged-right,verbatim,relative=1]
d8^"pizz." e f g a4-"scherz." f
@end lilypond

This syntax is actually a shorthand; more complex text
formatting may be added to a note by explicitly using a
@code{\markup} block, as described in @ref{Formatting text}.

@lilypond[quote,fragment,ragged-right,verbatim,relative=1]
d8^\markup { \italic pizz. } e f g 
a4_\markup { \tiny scherz. \bold molto } f
@end lilypond

By default, text indications do not influence the note spacing.
However, their widths can be taken into account:
in the following example, the first text string does not affect 
spacing, whereas the second one does.

@lilypond[quote,fragment,ragged-right,verbatim,relative=1]
d8^"pizz." e f g
\textLengthOn
a4_"scherzando" f
@end lilypond

@predefined

@funindex \textLengthOn
@code{\textLengthOn},
@funindex \textLengthOff
@code{\textLengthOff}


@seealso

Notation Reference: @ref{Formatting text},
@ref{Direction and placement}.

Snippets:
@rlsr{Text}.

Internals Reference: @rinternals{TextScript}.

@knownissues

Checking to make sure that text scripts and lyrics are within the
margins is a relatively large computational task.  To speed up
processing, LilyPond does not perform such calculations by
default; to enable it, use

@example
\override Score.PaperColumn #'keep-inside-line = ##t
@end example


@node Text spanners
@subsubsection Text spanners

@cindex Text spanners

Some performance indications, e.g., @notation{rallentando} or
@notation{accelerando}, are written as text and are extended over
multiple notes with dotted lines.
Such objects, called @q{spanners}, may be created
from one note to another using the following syntax:

@lilypond[verbatim,quote,ragged-right,fragment,relative=2]
\override TextSpanner #'bound-details #'left #'text = "rit." 
b1\startTextSpan 
e,\stopTextSpan
@end lilypond

@noindent
The string to be printed is set through
object properties.  By default it is printed in italic characters,
but different formatting can be obtained using
@code{\markup} blocks, as described in @ref{Formatting text}.

@lilypond[quote,ragged-right,fragment,relative=2,verbatim]
\override TextSpanner #'bound-details #'left #'text =
  \markup { \upright "rit." } 
b1\startTextSpan c
e,\stopTextSpan
@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}.

@predefined

@funindex textSpannerUp
@code{\textSpannerUp},
@funindex textSpannerDown
@code{\textSpannerDown},
@funindex textSpannerNeutral
@code{\textSpannerNeutral}

@seealso

Notation Reference: @ref{Line styles}.

Snippets:
@rlsr{Text}.

Internals Reference: @rinternals{TextSpanner}.


@node Text marks
@subsubsection Text marks

@cindex coda on bar line
@cindex segno on bar line
@cindex fermata on bar line
@cindex bar lines, symbols on
@funindex \mark

Various text elements can be added to a score using
the syntax described in @ref{Rehearsal marks}:

@lilypond[verbatim,quote,ragged-right,fragment,relative=2]
c4\mark "Allegro" c c c
@end lilypond

This syntax makes it possible to put any text on a bar line;
more complex text formatting may be added using a @code{\markup}
block, as described in @ref{Formatting text}.  This can be used to print
signs like coda, segno or fermata, by specifying the appropriate
symbol name:

@lilypond[fragment,quote,ragged-right,verbatim,relative=2]
c1 \mark \markup { \musicglyph #"scripts.ufermata" }
c1
@end lilypond

@noindent
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 "Allegro" c1
c\mark "assai" \break
c c
@end lilypond


@snippets

@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,doctitle]
{aligning-marks-with-various-notation-objects.ly}

@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:
@rlsr{Text}.

Internals Reference: @rinternals{RehearsalMark}.

@knownissues
@c  To be removed when Issue 69 in the tracker gets fixed. -vv

If a mark is entered at the end of the last bar of the score (where
there is no next line), then the mark will not be printed at
all.

@node Separate text
@subsubsection Separate text

@cindex separate text
@cindex standalone text
@cindex top-level text
@cindex text, standalone
@funindex \markup

A @code{\markup} block can exist by itself, outside of any
any @code{\score} block, as a @qq{top-level
expression}.  This syntax is described in @ref{File structure}.

@lilypond[verbatim,quote]
\markup {
  Tomorrow, and tomorrow, and tomorrow...
}
@end lilypond

@noindent
This allows printing text separately
from the music, which is particularly 
useful when the input file contains
several music pieces, as described in
@ref{Multiple scores in a book}.

@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{Multi-page markup}.

@predefined

@code{\markup},
@funindex \markuplines
@code{\markuplines}

@ignore
@snippets

TODO: add convenient snippets in input/new -vv
@end ignore

@seealso

Notation Reference: @ref{Formatting text},
@ref{File structure}, 
@ref{Multiple scores in a book},
@ref{Multi-page markup}.

Snippets:
@rlsr{Text}.

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::    
* Common markup commands::      
* Text alignment::              
* Graphic notation inside markup::  
* Music notation inside markup::  
* Multi-page markup::          
@end menu

@node Text markup introduction
@subsubsection Text markup introduction

@cindex markup
@cindex text markup
@cindex markup text
@cindex typeset text
@funindex \markup

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{} @}}.

Unlike simple @q{quoted text} indications, @code{\markup} blocks
may contain nested expressions or specific commands,
entered using the backslash @code{\} character.
Such commands only affect the first following expression.

@lilypond[quote,verbatim,fragment,relative=1]
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

@cindex special characters in markup mode
@cindex markup mode, special characters
@cindex reserved characters, printing
@cindex printing special characters
@cindex quoted text in markup mode

A @code{\markup} block may also contain quoted text, which
can be useful to print special characters (such as @code{\} and @code{#}).
Quoted text even allows to print double quotation marks, by preceding
them with 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

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 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]
allegro = \markup { \bold \large Allegro }

{
  d''8.^\allegro
  d'16 d'4 r2
}
@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

Syntax errors for markup mode are confusing.


@node Common markup commands
@subsubsection Common markup commands

Markup text may be formatted in different ways.

@cindex font switching
@funindex \italic
@funindex \bold
@funindex \underline

Basic font switching is supported:

@lilypond[quote,verbatim,relative=2]
{
  d1^\markup { 
    \bold { Più mosso } 
    \italic { non troppo \underline Vivo } 
  }
  r2 r4 r8
  d,_\markup { \italic quasi \smallCaps Tromba }
  f1 d2 r
}
@end lilypond

@cindex font size
@cindex text size
@funindex \fontsize
@funindex \smaller
@funindex \larger
@funindex \bigger
@funindex \magnify

The size of the characters can also be altered in different ways:
@itemize
@item
the font size can be defined to an absolute value,

@item
predefined commands allow to easily select standard sizes,

@item
other commands allow to change the size relatively to its previous value.
@end itemize

@noindent
The following example demonstrates these three methods:

@lilypond[quote,verbatim,relative=2]
{
  f1^\markup { \fontsize #5 Sinfonia } 
  a,_\markup { 
    \tiny espressivo
    \large e
    \normalsize intenso 
  }
  bes^\markup { (con 
    \larger grande 
    \smaller emozione 
    \magnify #0.6 { e sentimento } )
  }
  d c2 r8 c bes a g1
}
@end lilypond

@cindex subscript
@cindex superscript
@funindex \super
@funindex \sub

Text may be printed as subscript or superscript. By default
these are printed in a smaller size, but a normal size can be used as well:

@lilypond[quote,verbatim]
\markup {
  \column {
    \line { 1 \super st movement }
    \line { 1 \normal-size-super st movement 
      \sub { (part two) }  }
  }
}
@end lilypond

The markup mode provides an easy way to select alternate
font families.  The default serif font, of roman type, is automatically
selected unless specified otherwise: on the last line of the following example,
there is no difference between the first word and the following words.

@lilypond[quote,verbatim]
\markup {
  \column {
    \line { Act \number 1 }
    \line { \sans { Scene I. } }
    \line { \typewriter { Verona. An open place. } }
    \line { \roman Enter Valentine and Proteus. }
  }
}
@end lilypond

@noindent
Some of these font families, used for specific items
such as numbers or dynamics, do not provide all
characters, as mentioned in @ref{New dynamic marks} and
@ref{Manual repeat marks}.


Defining custom font sets is also possible, as explained in
@ref{Fonts}.  An exhaustive list of font-switching, font-size
and font-families related commands can be found in @ref{Font}.

@predefined

@funindex \teeny
@funindex \tiny
@funindex \small
@funindex \normalsize
@funindex \large
@funindex \huge
@code{\teeny},
@code{\tiny},
@code{\small},
@code{\normalsize},
@code{\large},
@code{\huge}.


@c TODO: add @seealso

@knownissues
When used inside a word, some of these commands may produce an unwanted
blank space.  This can easily be solved by concatenating the text
elements together, using a specific command
described in @ref{Text alignment}.



@node Text alignment
@subsubsection Text alignment

@warning{This subsection discusses how to place text in markup mode,
inside a @code{\markup} block.  However, markup objects can also
be moved as a whole using the syntax described in
@rlearning{Moving objects}.}

Markup objects can be aligned in different ways.  By default,
a text indication is aligned on its left edge: in the following
example, there's no difference between the first and the second
markup.

@lilypond[quote,verbatim,fragment,relative=1]
a1-\markup { poco }
e'
a,-\markup { \left-align poco }
e'
a,-\markup { \center-align { poco } }
e'
a,-\markup { \right-align poco }
@end lilypond

@c FIXME: \center-align actually doesn't belong here
@c \center-align vs \column
@c \center-align vs \hcenter

Horizontal alignment:
\hcenter
\general-align
\halign 


\null
\hspace

\lower
\raise 
\translate 
\translate-scaled
\rotate
\transparent
\whiteout

Vertical alignment: 
\vcenter
\column 
\dir-column 

Building a "large" markup:

\line

\fill-line

\hcenter-in
	
\pad-around
\pad-markup
\pad-to-box
\pad-x
	
Alignment inside a "large" markup:

\justify-field 
\justify
\justify-string

\wordwrap-field
\wordwrap
\wordwrap-string


@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



@end ignore


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 @rinternals{RehearsalMark} is
horizontally centered, so using @code{\mark \markup @{ \left-align
.. @}} has no effect.



@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


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 {
  c4 d^\markup {
    \score {
      \relative { c4 d e f }
      \layout { }
    }
  }
  e f
}
@end lilypond

@seealso

Snippets:
@rlsr{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
of text that can spread over multiple pages:

@verbatim
\markuplines {
  \justified-lines {
    A very long text of justified lines.
    ...
  }
  \justified-lines {
    An other very long paragraph.
    ...
  }
  ...
}
@end verbatim

@code{\markuplines} accepts a list of markup, that is either the
result of a markup list command, or a list of markups or of markup
lists.  The built-in markup list commands are described in
@ref{Text markup list commands}.

@seealso

This manual: @ref{Text markup list commands}, @ref{New
markup list command definition}.

Snippets:
@rlsr{Text}.

@predefined

@funindex \markuplines
@code{\markuplines}


@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
@funindex font-interface

By setting the object properties described below, you can select a
font from the preconfigured font families.  LilyPond has default
support for the feta music fonts.  Text fonts are selected through
Pango/FontConfig.  The serif font defaults to New Century
Schoolbook, the sans and typewriter to whatever the Pango
installation defaults to.


@itemize
@item @code{font-encoding}
is a symbol that sets layout of the glyphs.  This should only be
set to select different types of non-text fonts, e.g.

@code{fetaBraces} for piano staff braces, @code{fetaMusic} the
standard music font, including ancient glyphs, @code{fetaDynamic}
for dynamic signs and @code{fetaNumber} for the number font.

@item @code{font-family}
is a symbol indicating the general class of the typeface.
Supported are @code{roman} (Computer Modern), @code{sans}, and
@code{typewriter}.

@item @code{font-shape}
is a symbol indicating the shape of the font.  There are typically
several font shapes available for each font family.  Choices are
@code{italic}, @code{caps}, and @code{upright}.

@item @code{font-series}
is a symbol indicating the series of the font.  There are
typically several font series for each font family and shape.
Choices are @code{medium} and @code{bold}.

@end itemize

Fonts selected in the way sketched above come from a predefined
style sheet.  If you want to use a font from outside the style
sheet, then set the @code{font-name} property,

@lilypond[fragment,verbatim]
{
  \override Staff.TimeSignature #'font-name = #"Charter"
  \override Staff.TimeSignature #'font-size = #2
  \time 3/4
  c'1_\markup {
    \override #'(font-name . "Vera Bold")
      { This text is in Vera Bold }
  }
}
@end lilypond

@noindent
Any font can be used, as long as it is available to
Pango/FontConfig.  To get a full list of all available fonts, run
the command

@example
lilypond -dshow-available-fonts blabla
@end example

(the last argument of the command can be anything, but has to be
present).


The size of the font may be set with the @code{font-size}
property.  The resulting size is taken relative to the
@code{text-font-size} as defined in the @code{\paper} block.

@cindex font size
@cindex font magnification




@seealso

Snippets:
@rlsr{Text}.


