\book @{
\bookOutputSuffix "Romanze"
\score @{ @dots{} @}
- \layout @{ @dots{} @}
+ \paper @{ @dots{} @}
@}
\book @{
\bookOutputSuffix "Menuetto"
\score @{ @dots{} @}
- \layout @{ @dots{} @}
+ \paper @{ @dots{} @}
@}
\book @{
\bookOutputSuffix "Nocturne"
\score @{ @dots{} @}
- \layout @{ @dots{} @}
+ \paper @{ @dots{} @}
@}
@end example
\book @{
\bookOutputName "Romanze"
\score @{ @dots{} @}
- \layout @{ @dots{} @}
+ \paper @{ @dots{} @}
@}
\book @{
\bookOutputName "Menuetto"
\score @{ @dots{} @}
- \layout @{ @dots{} @}
+ \paper @{ @dots{} @}
@}
\book @{
\bookOutputName "Nocturne"
\score @{ @dots{} @}
- \layout @{ @dots{} @}
+ \paper @{ @dots{} @}
@}
@end example
Each @code{\book} block in a single input file produces a separate
output file, see @ref{File structure}. Within each output file
-two types of titling areas are provided: @emph{Bookpart Titles} at
-the beginning of each bookpart and @emph{Score Titles} at the
-beginning of each score.
+three types of titling areas are provided: @emph{Book Titles} at the
+beginning of each book, @emph{Bookpart Titles} at the beginning of
+each bookpart and @emph{Score Titles} at the beginning of each score.
Values of titling fields such as @code{title} and @code{composer}
are set in @code{\header} blocks. (For the syntax of @code{\header}
blocks and a complete list of the fields available by default see
-@ref{Default layout of bookpart and score titles}). Both Bookpart
-Titles and Score Titles can contain the same fields, although by
-default the fields in Score Titles are limited to @code{piece} and
-@code{opus}.
+@ref{Default layout of bookpart and score titles}). Book Titles,
+Bookpart Titles and Score Titles can all contain the same fields,
+although by default the fields in Score Titles are limited to
+@code{piece} and @code{opus}.
@code{\header} blocks may be placed in four different places to form
a descending hierarchy of @code{\header} blocks:
@itemize
@item
- A Bookpart Title is derived from fields set at the top of the input
+A Book Title is derived from fields set at the top of the input file,
+modified by fields set in the @code{\book} block. The resulting
+fields are used to print the Book Title for that book, providing that
+there is other material which generates a page at the start of the
+book, before the first bookpart. A single @code{\pageBreak} will
+suffice.
+
+@item
+A Bookpart Title is derived from fields set at the top of the input
file, modified by fields set in the @code{\book} block, and further
modified by fields set in the @code{\bookpart} block. The resulting
values are used to print the Bookpart Title for that bookpart.
@cindex breakbefore
+If a @code{\book} block starts immediately with a @code{\bookpart}
+block, no Book Title will be printed, as there is no page on which
+to print it. If a Book Title is required, begin the @code{\book}
+block with some markup material or a @code{\pageBreak} command.
+
Use the @code{breakbefore} variable inside a @code{\header} block
-that is itself in a @code{\score} block, to make the top-level
+that is itself in a @code{\score} block, to make the higher-level
@code{\header} block titles appear on the first page on their own, with
the music (defined in the @code{\score} block) starting on the next.
@example
scoreTitleMarkup = \markup @{ \column @{
- \on-the-fly #print-all-headers @{ \bookTitleMarkup \hspace #1 @}
+ \on-the-fly \print-all-headers @{ \bookTitleMarkup \hspace #1 @}
\fill-line @{
\fromproperty #'header:piece
\fromproperty #'header:opus
@example
@code{variable} = @code{\markup} @{
...
- @code{\on-the-fly} #@var{procedure} @var{markup}
+ @code{\on-the-fly} \@var{procedure} @var{markup}
...
@}
@end example
evenHeaderMarkup = \markup \null
oddFooterMarkup = \markup {
\fill-line {
- \on-the-fly #print-page-number-check-first
+ \on-the-fly \print-page-number-check-first
\fromproperty #'page:page-number-string
}
}
@q{and} operation, for example,
@example
- @code{\on-the-fly #first-page}
- @code{\on-the-fly #last-page}
+ @code{\on-the-fly \first-page}
+ @code{\on-the-fly \last-page}
@code{@{ \markup ... \fromproperty #'header: ... @}}
@end example
@headitem Filter
@tab Result
@item
-Tagged music preceded by @code{\keepWithTag #'@var{name}}
- @tab Untagged music and music tagged with @var{name} is included;
- music tagged with any other tag name is excluded.
+Tagged music preceded by @code{\keepWithTag #'@var{name}} or
+ @code{\keepWithTag #'(@var{name1} @var{name2}@dots{})}
+@tab Untagged music and music tagged with any of the given tag
+ names is included;
+ music tagged with any other tag name is excluded.
@item
-Tagged music preceded by @code{\removeWithTag #'@var{name}}
-@tab Untagged music and music tagged with any tag name other than
- @var{name} is included; music tagged with @var{name} is
+Tagged music preceded by @code{\removeWithTag #'@var{name}} or
+ @code{\removeWithTag #'(@var{name1} @var{name2}@dots{})}
+@tab Untagged music and music not tagged with any of the given tag names
+ is included; music tagged with any of the given tag names is
excluded.
@item
Tagged music not preceded by either @code{\keepWithTag} or
@end example
Multiple tags may be placed on expressions with multiple
-@code{\tag} entries:
+@code{\tag} entries, or by combining multiple tags into one symbol
+list:
@lilypond[quote,verbatim]
music = \relative c'' {
\tag #'a \tag #'both { a4 a a a }
- \tag #'b \tag #'both { b4 b b b }
+ \tag #'(b both) { b4 b b b }
}
<<
\keepWithTag #'a \music
@end lilypond
Multiple @code{\removeWithTag} filters may be applied to a single
-music expression to remove several differently named tagged sections:
+music expression to remove several differently named tagged
+sections. Alternatively, you can use a single
+@code{\removeWithTag} with a list of tags.
@lilypond[verbatim,quote]
music = \relative c'' {
\removeWithTag #'B
\removeWithTag #'C
\music
+\removeWithTag #'(B C)
+\music
}
@end lilypond
expression will cause @emph{all} tagged sections to be removed, as
the first filter will remove all tagged sections except the one
named, and the second filter will remove even that tagged section.
+Usually you would rather want to use a single @code{\keepWithTag}
+command with a list of multiple tags: this will only remove tagged
+sections not given in @emph{any} of the tags.
Sometimes you want to splice some music at a particular place in an
existing music expression. You can use @code{\pushToTag} and
@ref{Automatic part combining},
@ref{Including LilyPond files}.
-@ignore
-@c This warning is more general than this placement implies.
-@c Rests are not merged whether or not they come from tagged sections.
-@c Should be deleted? -td
-
@knownissues
-Multiple rests are not merged if you create a score with more
-than one tagged section at the same place.
-
-@end ignore
+Calling @code{\relative} on a music expression obtained by filtering
+music through @code{\keepWithTag} or @code{\removeWithTag} might cause
+the octave relations to change, as only the pitches actually
+remaining in the filtered expression will be considered. Applying
+@code{\relative} first, before @code{\keepWithTag} or
+@code{\removeWithTag}, avoids this danger as @code{\relative} then
+acts on all the pitches as-input.
@node Using global settings