@c -*- coding: utf-8; mode: texinfo; documentlanguage: es -*-
@c This file is part of lilypond.tely
@ignore
    Translation of GIT committish: 85b54e04be6730bd0781f3135ee741010e099fd8

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


@node Spacing issues
@chapter Spacing issues

La disposición global sobre el papel viene determinada por tres
factores: el diseño de página, los saltos de línea y el espaciado.
Estos factores influyen entre sí.  La elección de uno u otro espaciado
determina qué densidad termina teniendo cada sistema de música.  Esto
influye en el lugar en que se eligen los saltos de línea, y en último
término, en el número de páginas que tiene una partitura.

Considerado globalmente, este proceso se produce en cuatro fases: en
primer lugar se eligen unas distancias elásticas o @q{muelles},
basados en la duración de las figuras.  Se prueban todas las
combinaciones de saltos de línea posibles, y para cada una de ellas se
calcula una puntuación de @q{maldad}.  Después se hace una estimacion
de la altura de cada uno de los posibles sistemas.  Finalmente se
selecciona una combinación de saltos de página y de línea de tal forma
que ni el espaciado horizontal ni el vertical estén demasiado
estrechos ni estirados.

Los ajustes que influyen en la disposición se pueden agrupar en dos
bloques.  El bloque @code{\paper @{...@}} se sitúa fuera de los
bloques @code{\score @{...@}} y contiene ajustes relacionados con el
documento como un todo.  El bloque @code{\layout @{...@}} se sitúa
dentro de un bloque @code{\score @{...@}} y contiene ajustes para
dicha partitura en concreto.  Si sólo tiene un bloque @code{\score
@{...@}}, los dos tienen el mismo efecto.  En general las
instrucciones que se muestran en este capítulo se pueden poner en
cualquiera de los dos.

@menu
* Paper and pages::
* Music layout::
* Breaks::
* Vertical spacing::
* Horizontal spacing::
* Fitting music onto fewer pages::
@end menu


@node Paper and pages
@section Paper and pages

Esta sección se ocupa de los límites que definen la zona del papel en
que se puede imprimir la música.

@menu
* Paper size::
* Page formatting::
@end menu


@node Paper size
@subsection Paper size

@cindex papel, tamaño del
@cindex página, tamaño de la

Existen dos funciones para cambiar el tamaño del papel:
@code{set-default-paper-size} (establecer tamaño de página
predeterminado) y @code{set-paper-size} (establecer tamaño de página).
@code{set-default-paper-size} se puede poner en un bloque
@code{\paper} en el ámbito de nivel superior, y @code{set-paper-size}
se debe poner en un bloque @code{\paper}:

@example
#(set-default-paper-size "a4")
@end example

@example
\paper @{
  #(set-paper-size "a4")
@}
@end example

@noindent
@code{set-default-paper-size} establece el tamaño de todas las
páginas, mientras que @code{set-paper-size} establece sólo el tamaño
de las páginas a las que se aplica el bloque @code{\paper}.  Por
ejemplo, si el bloque @code{\paper} está al principio del archivo,
aplica el tamaño de papel a todas las páginas.  Si el bloque
@code{\paper} está dentro de un bloque @code{\book}, entonces el
tamaño del papel sólo se aplica a ese libro.

Se encuentran disponibles los tamaños de papel más comunes, entre
ellos @code{a4}, @code{letter}, @code{legal} y @code{11x17} (conocido
también como tabloide). Están contemplados muchos más tamaños de papel
de forma predeterminada.  Para ver más detalles, consulte
@file{scm/@/paper@/.scm} y busque la definición de @code{paper-alist}.

@c TODO add a new appendix for paper sizes (auto-generated) -pm

@warning{El tamaño predeterminado del papel es @code{a4}.}

Se pueden añadir tamaños adicionales editando la definición de
@code{paper-alist} en el archivo de inicio @file{scm/@/paper@/.scm},
aunque se sobreescribirán en la siguiente reinstalación del programa.

@cindex orientación
@cindex apaisado
@cindex horizontal, papel

Si se añade el símbolo @code{'landscape} (apaisado) como argumento a
@code{set-default-paper-size}, las páginas se giran 90 grados y se
establecen en consonancia un longitud mayor de las líneas.

@example
#(set-default-paper-size "a6" 'landscape)
@end example

al establecer el tamaño del papel se ajustan un cierto número de
variables del @code{\paper}, tales como los márgenes.  Para utilizar
un tamaño de página determinado con variables de @code{\paper}
alteradas, establezca el tamaño de página antes de dar valores a las
variables.


@seealso

Archivos instalados:
@file{scm/@/paper@/.scm}.

Fragmentos de código:
@rlsr{Spacing}.


@node Page formatting
@subsection Page formatting

Los márgenes, encabezamientos y pies de página y otras variables de
diseño de página se establecen automáticamente de acuerdo con el
tamaño del papel.

Esta sección relaciona y describe cierto número de variables del papel
que se pueden alterar.

@menu
* Vertical dimensions::
* Horizontal dimensions::
* Other layout variables::
@end menu


@node Vertical dimensions
@unnumberedsubsubsec Vertical dimensions

Estas variables se utilizan para establecer las diferentes dimensiones
verticales de la página:

@funindex \paper

@table @code

@item after-title-space
@funindex after-title-space

Espacio entre el título y el primer sistema.
Predeterminado: @code{5\mm}.

@item before-title-space
@funindex before-title-space

Distancia entre el último sistema de la pieza anterior y el título de
la siguiente.  Predeterminado: @code{10\mm}.

@item between-system-padding
@funindex between-system-padding

Distancia mínima que se deja siempre entre el símbolo más bajo de un
sistema y el más alto del siguiente.  Predeterminado: @code{4\mm}.

El aumento de este valor separa más los sistemas cuyas cajas
circundantes casi se tocan.

@item between-system-space
@funindex between-system-space

Distancia entre los sistemas.  Es la distancia ideal desde el centro
del pentagrama inferior de un sistema hasta el centro del pentagrama
superior del sistema siguiente.  Predeterminado: @code{20\mm}.

El aumento de este valor da a la página un aspecto más regular a costa
de utilizar más espacio vertical.

@item between-title-space
@funindex between-title-space

Distancia entre títulos consecutivos (p.ej., el título del libro y el
título de una pieza).  Predeterminado: @code{2\mm}.

@item bottom-margin
@funindex bottom-margin

Margen entre el pie de página y la parte inferior del papel.
Predeterminado: @code{6\mm}.

@item foot-separation
@funindex foot-separation

Distancia entre el sistema situado más abajo y el pie de página.
Predeterminado: @code{4\mm}.

@item head-separation
@funindex head-separation

Distancia entre el sistema situado más arriba y el encabezamiento de
la página.  Predeterminado: @code{4\mm}.

@item page-top-space
@funindex page-top-space

Distancia desde la parte alte del área imprimible hasta el centro del
primer pentagrama.  Esto sólo funciona para pentagramas con una
anchura vertical pequeña.  Los pentagramas grandes se establecen con
la parte alta de su caja circundante alineada a la parte alta del área
imprimible.  Predeterminado: @code{12\mm}.

@item paper-height
@funindex paper-height

Altura de la página.  Predeterminado: altura del tamaño actual del
papel.  Para ver más detalles, consulte @ref{Paper size}.

@item top-margin
@funindex top-margin

Margen entre el encabezamiento y la parte alta del papel.
Predeteminado: @code{5\mm}.

@end table


@snippets

El encabezamiento y el pie se crean por parte de las funciones
@code{make-footer} y @code{make-header}, definidas dentro de
@code{\paper}.  Las implementaciones predeterminadas están en
@file{ly/paper-defaults.ly} y en @file{ly/titling-init.ly}.

El diseño de la página en sí está realizado por dos funciones dentro
del bloque @code{\paper}, @code{page-music-height} y
@code{page-make-stencil}.  El primero informa al algoritmo de saltos
de línea de la cantidad de espacio que está disponible en una página,
y el último crea la propia página dado el sistema que poner sobre
ella.

Se pueden definir valores del bloque @code{\paper} en Scheme.  En tal
caso, @code{mm}, @code{in}, @code{pt}, y @code{cm} son variables que
están definidas en @file{paper-defaults.ly} con valores en milímetros.
Por ello el valor 2 cm se debe multiplicar en el siguiente ejemplo:

@example
\paper @{
 #(define bottom-margin (* 2 cm))
@}
@end example


Ejemplo:

@example
\paper@{
  paper-width = 2\cm
  top-margin = 3\cm
  bottom-margin = 3\cm
  ragged-last-bottom = ##t
@}
@end example

Este segundo ejemplo centra los números de página en la parte baja del
papel.

@example
\paper @{
  print-page-number = ##t
  print-first-page-number = ##t
  oddHeaderMarkup = \markup \fill-line @{ " " @}
  evenHeaderMarkup = \markup \fill-line @{ " " @}
  oddFooterMarkup = \markup @{ \fill-line @{
     \bold \fontsize #3 \on-the-fly #print-page-number-check-first
     \fromproperty #'page:page-number-string @} @}
  evenFooterMarkup = \markup @{ \fill-line @{
     \bold \fontsize #3 \on-the-fly #print-page-number-check-first
     \fromproperty #'page:page-number-string @} @}
@}
@end example


@seealso

Referencia de la notación:
@ref{Vertical spacing between systems}.

Fragmentos de código:
@rlsr{Spacing}.


@node Horizontal dimensions
@unnumberedsubsubsec Horizontal dimensions

@warning{Si se establece @code{paper-width} manualmente,
@code{line-width}, @code{left-margin}, @code{indent} y
@code{short-indent} pueden necesitar ajustarse también.}

Existe un cierto número de variables que determinan las dimensiones
horizontales de una página:

@table @code

@item horizontal-shift
@funindex horizontal-shift

Medida en que todos los sistemas (incluidos los títulos de cabecera y
los separadores de sistemas) se desplazan a la derecha.
Predeterminado: @code{0.0}.

@item indent
@funindex indent

Nivel de sangrado para el primer sistema de una partitura.
Predeterminado: @code{paper-width} dividido por @code{14}, tal y como
viene determinado por @code{set-default-paper-size} o
@code{set-paper-size}.

@item left-margin
@funindex left-margin

El margen entre el límite izquierdo del papel y el comienzo de los
sistemas.  Predeterminado: @code{10\mm}, tal y como se define por
parte de @code{set-default-paper-size} o de @code{set-paper-size}.

@item line-width
@funindex line-width

Ancho de los sistemas.  Predeterminado: @code{paper-width} menos
@code{20\mm}, como viene determinado por @code{set-default-paper-size}
o por @code{set-paper-size}.

@item paper-width
@funindex paper-width

Ancho de la página.  Predeterminado: la anchura del tamaño actual del
papel.  Para ver más detalles, consulte @ref{Paper size}.

@item short-indent
@funindex short-indent

Nivel de sangrado para todos los sistemas de una partitura excepto el
primero.  Predeterminado: @code{0}, como se determina en
@code{set-default-paper-size} o en @code{set-paper-size}.

@end table


@seealso

Fragmentos de código:
@rlsr{Spacing}.


@knownissues

La opción @code{right-margin} está definida pero no establece aún el
margen derecho.  El valor del margen derecho se debe definir ajustando
los valores de @code{left-margin} y de @code{line-width}.


@node Other layout variables
@unnumberedsubsubsec Other layout variables

Estas variables se pueden usar para ajustar el diseño de la página en
general.

@table @code

@item auto-first-page-number
@funindex auto-first-page-number

EL algoritmo de división de páginas está afectado por el hecho de que
el número de la primera página sea par o impar.  Si está establecido
al valor verdadero, el algoritmo de división de páginas decide si
comenzar con un número par o impar.  Esto hace que el número de la
primera página se quede como está, o que se aumente en una unidad.
Predeterminado: @code{##f}.

@item blank-last-page-force
@funindex blank-last-page-force

Penalización por terminar la partitura en una página de numeración
impar.  Predeterminado: @code{0}.

@item blank-page-force
@funindex blank-page-force

Penalización por tener una página en blanco en medio de una partitura.
Esto no se usa por parte de @code{ly:optimal-breaking} porque éste
nunca considera la posibilidad de tener páginas en blanco en mitad de
una partitura.  Predeterminado: @code{5}.

@item blank-after-score-page-force
@funindex blank-after-score-page-force

HACER.  Predeterminado: @code{2}.

@item first-page-number
@funindex first-page-number

Valor del número de la primera página.  Predeterminado: @code{#1}.

@item packed
@funindex packed

HACER

@item page-breaking-between-system-padding
@funindex page-breaking-between-system-padding

Engaña al divisor de páginas para que crea que
@code{between-system-padding} está establecido a algo distinto de lo
que está realmente.  Por ejemplo, si esta variable se establece a algo
mucho mayor que @code{between-system-padding}, entonces el divisor de
páginas colocará menos sistemas en cada página.  Predeterminado: no
establecido.

@item page-count
@funindex page-count

HACER

@item page-limit-inter-system-space
@funindex page-limit-inter-system-space

Si tiene un valor verdadero, limita el espacio entre los sistemas de
una página en la que sobra mucho espacio.  Predeterminado: @code{##f}.
Para ver más detalles, consulte @ref{Vertical spacing between
systems}.

@item page-limit-inter-system-space-factor
@funindex page-limit-inter-system-space-factor

Factor usado por @code{page-limit-inter-system-space}.
Predeterminado: @code{1.4}.  Para ver más detalles, consulte
@ref{Vertical spacing between systems}.

@item page-spacing-weight
@funindex page-spacing-weight

Importancia relativa del espacio (vertical) de las páginas y el
espaciado (horizontal) de las líneas.  Los valores altos hacen que el
espaciado de la página tenga más importancia.  Predeterminado:
@code{#10}.

@item print-all-headers
@funindex print-all-headers

Si está establecido a un valor verdadero, imprime todas las cabeceras
para cada una de las @code{\score} en la salida impresa.  Normalmente
sólo se imprimen las variables de encabezamiento de pieza y opus.
Predeterminado: @code{##f}.

@item print-first-page-number
@funindex print-first-page-number

Si está establecido a un valor verdadero, se imprime un número de
página en la primera página.  Predeterminado: @code{##f}.

@item print-page-number
@funindex print-page-number

Si está establecido a un valor falso, no se imprimen los números de
página.  Predeterminado: @code{##t}.

@item ragged-bottom
@funindex ragged-bottom

Si está establecido a un valor verdadero, los sistemas no ocuparán
verticalmente toda la altura de la página.  Esto no afecta a la última
página.  Predeterminado: @code{##f}.

Esto se debería establecer al valor verdadero para piezas que tienen
sólo dos o tres sistemas por página, por ejemplo partituras
orquestales.

@item ragged-last
@funindex ragged-last

Si está establecido a un valor verdadero, el último sistema de la
partitura no llenará la anchura de la línea.  En su lugar, el últim
sistema termina en su longitud horizontal natural.  Predeterminado:
@code{##f}.

@item ragged-last-bottom
@funindex ragged-last-bottom

Si está establecido a un valor falso, los sistemas se repartirán
verticalmente por toda la última página.  Predeterminado: @code{##t}.

Las piezas que llenan generosamente dos o más páginas deberían tener
esto establecido al valor verdadero.

@item ragged-right
@funindex ragged-right

Si está establecido a un valor verdadero, los sistemas no llenarán el
ancho de línea disponible.  En su lugar, los sistemas terminan en su
longitud horizontal natural.  Predeterminado: @code{##f}.

Si la partitura sólo tiene un sistema, el valor predeterminado es
@code{##t}.

@item systemSeparatorMarkup
@funindex systemSeparatorMarkup

Objeto de marcado que se inserta entre los sistemas.  Se suele usar
para partituras orquestales.  Predeterminado: sin establecer.

Se ofrece la instrucción de marcado @code{\slashSeparator} como un
valor predeterminado apropiado, por ejemplo

@lilypond[quote,ragged-right]
#(set-default-paper-size "a6" 'landscape)
\book {
  \score {
    \relative { c1 \break c1 }
  }
  \paper {
    systemSeparatorMarkup = \slashSeparator
  }
}
@end lilypond

@item system-count
@funindex system-count

Cantidad de sistemas que usar por parte de la partitura.
Predeterminado: sin establecer.

@end table


@seealso

Fragmentos de código:
@rlsr{Spacing}.


@knownissues

El encabezamiento de página predeterminado pone el número de página y
el campo @code{instrument} del bloque @code{\header} sobre la misma
línea.

Los títulos de cabecera (tomados de la sección @code{\header@{@}}) se
tratan como un sistema, por lo que @code{ragged-bottom} y
@code{ragged-last-bottom} añaden espacio entre los títulos y el primer
sistema de la partitura.


@node Music layout
@section Music layout

@menu
* Setting the staff size::
* Score layout::
@end menu


@node Setting the staff size
@subsection Setting the staff size

@cindex tipografía, establecer tamaño de
@cindex pentagrama, establecer tamaño de
@funindex layout file

El @strong{tamaño de pentagrama} predeterminado se establece en 20
puntos.  Esto se puede modificar de dos maneras:

Para establecer globalmente el tamaño del pentagrama para todas las
partituras de un archivo (o en un bloque @code{book}, para ser
exactos), utilice @code{set-global-staff-size}.

@example
#(set-global-staff-size 14)
@end example

@noindent
Esto establece el tamaño global predeterminado a una altura de
pentagrama de 14pt y escala todas las tipografías de manera
correspondiente.

Para establecer el tamaño del pentagrama de forma individual para cada
partitura, use
@example
\score@{
  ...
  \layout@{
  #(layout-set-staff-size 15)
  @}
@}
@end example

La fuente tipográfica Feta ofrece símbolos musicales a ocho tamaños
distintos.  Cada fuente tipográfica está afinada para un tamaño de
pentagrama distinto: a un tamaño menor la tipografía se vuelve más
pesada, para que coincida con las líneas de pentagrama relativamente
más gruesas.  Los tamaños de tipografía recomendados están
relacionados en la tabla siguiente:

@quotation
@multitable @columnfractions .15 .2 .22 .2

@item @b{nombre de la fuente}
@tab @b{altura del pentagrama (pt)}
@tab @b{altura del pentagrama (mm)}
@tab @b{usos}

@item feta11
@tab 11.22
@tab 3.9
@tab partituras de bolsillo

@item feta13
@tab 12.60
@tab 4.4
@tab

@item feta14
@tab 14.14
@tab 5.0
@tab

@item feta16
@tab 15.87
@tab 5.6
@tab

@item feta18
@tab 17.82
@tab 6.3
@tab cancioneros

@item feta20
@tab 20
@tab 7.0
@tab particellas estándar

@item feta23
@tab 22.45
@tab 7.9
@tab

@item feta26
@tab 25.2
@tab 8.9
@tab
@c modern rental material?

@end multitable
@end quotation

Estas tipografías están disponibles en cualquier tamaño.  La propiedad
de contexto @code{fontSize} y la propiedad de disposición
@code{staff-space} (en @rinternals{StaffSymbol}) se pueden usar para
afinar el tamaño de los pentagramas individuales.  Los tamaños de
pentagrama individuales están en relación al tamaño global.

@example

@end example


@seealso

Referencia de la notación:
@ref{Selecting notation font size}.

Fragmentos de código:
@rlsr{Spacing}.


@knownissues

@code{layout-set-staff-size} no cambia la distancia entre las líneas
del pentagrama.


@node Score layout
@subsection Score layout

@funindex \layout

Mientras que @code{\paper} conteine ajustes relativos al formato de
página del documento completo, @code{\layout} contiene ajustes para la
disposición específica de cada partitura.

@example
\layout @{
  indent = 2.0\cm
  \context @{ \Staff
    \override VerticalAxisGroup #'minimum-Y-extent = #'(-6 . 6)
  @}
  \context @{ \Voice
    \override TextScript #'padding = #1.0
    \override Glissando #'thickness = #3
  @}
@}
@end example


@seealso

Referencia de la notación:
@ref{Changing context default settings}.

Fragmentos de código:
@rlsr{Spacing}.


@node Breaks
@section Breaks

@menu
* Line breaking::
* Page breaking::
* Optimal page breaking::
* Optimal page turning::
* Minimal page breaking::
* Explicit breaks::
* Using an extra voice for breaks::
@end menu


@node Line breaking
@subsection Line breaking

@cindex saltos de línea
@cindex línea, saltos de

Normalmente los saltos de línea se determinan automáticamente. Se
eligen de forma que las líneas no aparezcan demasiado apretadas ni
demasiado sueltas, y que las líneas consecutivas tengan una densidad
similar.  Ocasionalmente podemos querer sobreescribir los saltos
automáticos; podemos hacerlo especficando @code{\break}. Esto fuerza
un salto de línea en ese punto.  Sin embargo, los saltos de línea sólo
pueden suceder al final de los compases @q{completos}, es decir, donde
no queda ninguna nota o grupo especial @q{colgando} por encima de la
línea divisoria.  Si queremos poner un salto de línea donde no hay
línea divisoria, podemos forzar una barra de compás invisible
introduciendo @code{\bar ""}, aunque de nuevo no deben quedar notas
colgando en ninguno de los pentagramas en este punto, o se ignorarán.

La instrucción opuesta, @code{\noBreak}, prohíbe un salto de línea en
la barra divisoria en que se inserta.

Los ajustes más básicos que influyen sobre el espaciado de las líneas
son @code{indent} y @code{line-width}. Se establecen dentro del bloque
@code{\layout}.  Controlan el sangrado de la primera línea de música,
y la longitud de las líneas.

Si se establece @code{ragged-right} a verdadero en el bloque
@code{\layout}, los sistemas terminan en su longitud horizontal
natural, en lugar de distribuirse horizontalmente para llenar toda la
línea. Esto es de utilidad para fragmentos cortos, y para efectuar una
comprobación de lo apretado que es el espaciado natural.

@c TODO Check and add para on default for ragged-right

La opción @code{ragged-last} es similar a @code{ragged-right}, pero
afecta sólo a la última línea de la pieza.

@example
\layout @{
indent = #0
line-width = #150
ragged-last = ##t
@}
@end example



@cindex regular line breaks
@cindex four bar music.

Para saltos de línea a intervalos regulares utilice @code{\break}
separado mediante desplazamientos con @code{\skip} y repetidos con
@code{\repeat}.  Por ejemplo, esto haría que los 28 compases
siguientes (suponiendo un compás de 4/4) se dividan cada cuatro
compases, y sólo en dichos lugares:

@example
<< \repeat unfold 7 @{
         s1 \noBreak s1 \noBreak
         s1 \noBreak s1 \break @}
   @emph{the real music}
>>
@end example

@c TODO Check this
Una configuración de división de líneas se puede guardar como archivo
@code{.ly} automáticamente.  Ello permite que alineaciones verticales
se estiren para que encajen en las páginas durante una segunda
ejecución del proceso de formateo.  Esta posibilidad es bastante
novedosa y difícil.  Hay más detalles disponibles en @rlsr{Spacing}.


@predefined

@funindex \break
@code{\break},
@funindex \noBreak
@code{\noBreak}.


@seealso

Referencia de funcionamiento interno:
@rinternals{LineBreakEvent}.

Fragmentos de código:
@rlsr{Spacing}.


@knownissues

Sólo pueden ocurrir saltos de línea si hay una @q{buena} línea
divisoria.  Una nota colgando de una línea divisoria no es adecuada,
como

@lilypond[quote,ragged-right,relative=2,fragment,verbatim]
c4 c2 << c2 {s4 \break } >>  % this does nothing
c2 c4 |           % a break here would work
c4 c2 c4 ~ \break % as does this break
c4 c2 c4
@end lilypond

Esto se puede evitar eliminando el grabador
@code{Forbid_line_break_engraver}.  Observe que los saltos de línea
forzados manualmente breaks se tienen que añadir en paralelo con la
música.

@lilypond[quote,ragged-right,verbatim]
\new Voice \with {
  \remove Forbid_line_break_engraver
} {
  c4 c2 << c2 {s4 \break } >>  % now the break is allowed
  c2 c4
}
@end lilypond

De forma parecida, los saltos de línea están prohibidos normalmente
cuando las barras cruzan a las líneas divisorias.  Este comportamiento
se puede modificar con el establecimiento de @code{\override Beam
#'breakable = ##t}.


@node Page breaking
@subsection Page breaking

Se puede sobreescribir el mecanismo predeterminado de salto de página
insertando instrucciones @code{\pageBreak} o @code{\noPageBreak}.
Estas instrucciones son análogas a @code{\break} y @code{\noBreak}.
Se deben insertar en una línea divisoria.  Estas instrucciones fuerzan
y prohíben, respectivamente, la eventualidad de un salto de página.
Por supuesto, la instrucción @code{\pageBreak} también fuerza un salto
de línea.

Las instrucciones @code{\pageBreak} y @code{\noPageBreak} también se
pueden insertar en el nivel más alto, entre las partituras y los
elementos de marcado situados en el nivel superior.

Hay ajustes análogos a @code{ragged-right} y @code{ragged-last} que
tienen el mismo efecto sobre el espaciado vertical:
@code{ragged-bottom} y @code{ragged-last-bottom}.  Si están
establecidos a @code{##t} los sistemas de todas las páginas o sólo de
la última página, respectivamente, no se verán justificados
verticalmente.

Para ver más detalles, consulte @ref{Vertical spacing}.

Los saltos de página se calculan por medio de la función
@code{page-breaking}.  LilyPond ofrece tres algoritmos para el cómputo
de los saltos de página: @code{ly:optimal-breaking},
@code{ly:page-turn-breaking} y @code{ly:minimal-breaking}.  El
predeterminado es @code{ly:optimal-breaking}, pero el valor se puede
cambiar en el bloque @code{\paper}:

@example
\paper@{
  #(define page-breaking ly:page-turn-breaking)
@}
@end example

@c TODO Check this -td
El antiguo algoritmo de división de páginas se llama
@code{optimal-page-breaks}.  Si tiene problemas con los nuevos
divisores de página, puede habilitar el antiguo como forma de rodear
el problema.


@predefined

@funindex \pageBreak
@code{\pageBreak},
@funindex \noPageBreak
@code{\noPageBreak}.


@seealso

Fragmentos de código:
@rlsr{Spacing}.


@node Optimal page breaking
@subsection Optimal page breaking

@funindex ly:optimal-breaking

La función @code{ly:optimal-breaking} es el método predeterminado de
LilyPond para determinar los saltos de página.  Intenta hallar una
división de páginas que haga mínimos el apretujamiento y la
distensión, tanto horizontal como verticalmente.  A diferencia de
@code{ly:page-turn-breaking}, no tiene un concepto de los pasos de
página.


@seealso

Fragmentos de código:
@rlsr{Spacing}.


@node Optimal page turning
@subsection Optimal page turning

@funindex ly:page-turn-breaking

Con frecuencia es necesario encontrar una configuración de división de
páginas de manera que haya un silencio al final de una página de cada
dos.  De esta forma, el músico puede pasar la página sin perder notas.
La función @code{ly:page-turn-breaking} trata de encontrar una
división de páginas que haga mínimos el apretujamiento y el
estiramiento, pero con la restricción añadida de que sólo se permite
introducir vueltas de página en los lugares especificados.

Hay dos etapas en el uso de esta función de división de páginas.  En
primer lugar debemos habilitarlo en el bloque @code{\paper}, como se
explicó en @ref{Page breaking}.  Entonces debemos decirle a la función
dónde nos gustaría permitir los saltos de página.

Hay dos formas de conseguir la segunda tarea.  Primero, podemos
especificar manualmente cada uno de los pasos de página potenciales,
insertando @code{\allowPageTurn} en nuestro archivo de entrada en los
lugares adecuados.

Si esto es demasiado tedioso, podemos añadir un grabador
@code{Page_turn_engraver} a un contexto Staff o Voice.  El grabador
@code{Page_turn_engraver} analizará el contexto en biusca de secciones
sin notas (observe que no busca silencios, sino la ausencia de notas.
Se hace así para que la polifonía en un solo pentagrama con silencios
en una de las voces no arruine la labor del grabador
@code{Page_turn_engraver}).  Cuando encuentra una sección sin notas
suficientemente larga, el grabador @code{Page_turn_engraver} inserta
un @code{\allowPageTurn} en la última barra de compás de dicha
sección, a no ser que haya una barra @q{especial} de compás (como una
doble barra), en cuyo caso se insertará el @code{\allowPageTurn} en la
última barra @q{especial} de compás de la sección.

@funindex minimumPageTurnLength
El grabador @code{Page_turn_engraver} lee la propiedad de contexto
@code{minimumPageTurnLength} para determinar qué longitud debe tener
una sección sin notas antesd e que se considere la posibilidad de un
paso de página.  El valor predeterminado para
@code{minimumPageTurnLength} es @code{#(ly:make-moment 1 1)}.  Si
quiere inhabilitar las vueltas de página, puede establecerlo a algún
valor muy grande.

@example
\new Staff \with @{ \consists "Page_turn_engraver" @}
@{
  a4 b c d |
  R1 | % a page turn will be allowed here
  a4 b c d |
  \set Staff.minimumPageTurnLength = #(ly:make-moment 5 2)
  R1 | % a page turn will not be allowed here
  a4 b r2 |
  R1*2 | % a page turn will be allowed here
  a1
@}
@end example

@funindex minimumRepeatLengthForPageTurn
El grabador @code{Page_turn_engraver} detecta las repeticiones de
primera y segunda vez.  Sólo permite un pase de página durante la
repetición si hay suficiente tiempo al principio y al final de la
repetición para volver a pasar la página hacia atrás. El grabador
@code{Page_turn_engraver} también puede inhabilitar los pasos de
página si la repetición es muy corta.  Si establecemos la propiedad de
contexto @code{minimumRepeatLengthForPageTurn} entonces el grabador
@code{Page_turn_engraver} sólo permitirá los pases de página en las
repeticiones cuya duración sea mayor que este valor.

Las instrucciones de paso de página, @code{\pageTurn},
@code{\noPageTurn} y @code{\allowPageTurn}, se pueden usar también en
el nivel más elevado del código, entre las partituras y los elementos
de marcado del nivel superior.


@predefined

@funindex \pageTurn
@code{\pageTurn},
@funindex \noPageTurn
@code{\noPageTurn},
@funindex \allowPageTurn
@code{\allowPageTurn}.


@seealso

Fragmentos de código:
@rlsr{Spacing}.


@knownissues

Sólo debería haber un grabador @code{Page_turn_engraver} dentro de una
partitura.  Si hay más de uno, se interferirán entre sí.


@node Minimal page breaking
@subsection Minimal page breaking

@funindex ly:minimal-breaking

La función @code{ly:minimal-breaking} efectúa unos cálculos mínimos
para determinar los saltos de página: completa una página con tantos
sistemas como sea posible antes de continuar con la siguiente.  Así,
puede preferirse para partituras con muchas páginas, donde las otras
funciones de salto de página pueden resultar demasiado lentas o ávidas
de memoria, o con una gran cantidad de textos.  Se habilita utilizando:

@example
\paper @{
  #(define page-breaking ly:minimal-breaking)
@}
@end example


@seealso

Fragmentos de código:
@rlsr{Spacing}.


@node Explicit breaks
@subsection Explicit breaks

Lily a veces rechaza las instrucciones @code{\break} y
@code{\pageBreak} explícitas.  Hay dos instrucciones para
sobreescribir este comportamiento:

@example
\override NonMusicalPaperColumn #'line-break-permission = ##f
\override NonMusicalPaperColumn #'page-break-permission = ##f
@end example

Cuando se sobreescribe el valor de @code{line-break-permission} a
falso, Lily inserta saltos de línea en las instrucciones @code{\break}
explícitas y en ningún otro lugar. Cuando se sobreescribe el valor de
@code{page-break-permission} a falso, Lily inserta saltos de página en
las instrucciones @code{\pageBreak} explícitas y en ningún otro lugar.

@lilypond[quote,verbatim]
\paper {
  indent = #0
  ragged-right = ##t
  ragged-bottom = ##t
}

\score {
  \new Score \with {
    \override NonMusicalPaperColumn #'line-break-permission = ##f
    \override NonMusicalPaperColumn #'page-break-permission = ##f
  } {
    \new Staff {
      \repeat unfold 2 { c'8 c'8 c'8 c'8 } \break
      \repeat unfold 4 { c'8 c'8 c'8 c'8 } \break
      \repeat unfold 6 { c'8 c'8 c'8 c'8 } \break
      \repeat unfold 8 { c'8 c'8 c'8 c'8 } \pageBreak
      \repeat unfold 8 { c'8 c'8 c'8 c'8 } \break
      \repeat unfold 6 { c'8 c'8 c'8 c'8 } \break
      \repeat unfold 4 { c'8 c'8 c'8 c'8 } \break
      \repeat unfold 2 { c'8 c'8 c'8 c'8 }
    }
  }
}
@end lilypond


@seealso

Fragmentos de código:
@rlsr{Spacing}.


@node Using an extra voice for breaks
@subsection Using an extra voice for breaks

La información sobre saltos de línea y de página suele aparecer
directamente intermezclado dentro del código de notas.

@example
\new Score @{
  \new Staff @{
    \repeat unfold 2 @{ c'4 c'4 c'4 c'4 @}
    \break
    \repeat unfold 3 @{ c'4 c'4 c'4 c'4 @}
  @}
@}
@end example

Esto hace sencillas de introducir a las instrucciones @code{\break} y
@code{\pageBreak}, pero mezcla la escritura de música con información
que especifica cómo se debe disponer la música sobre la página.
Podemos mantener la introducción de música y la información de saltos
de línea y de página en dos lugares separados mediante la introducción
de una voz adicional que contenga los saltos.  Esta voz adicional
contiene solamente desplazamientos o @q{skips} junto con los
@code{\break}, @code{pageBreak} y otras informaciones sobre la
disposición de los saltos.

@lilypond[quote,verbatim]
\new Score {
  \new Staff <<
     \new Voice {
        s1 * 2 \break
        s1 * 3 \break
        s1 * 6 \break
        s1 * 5 \break
     }
     \new Voice {
        \repeat unfold 2 { c'4 c'4 c'4 c'4 }
        \repeat unfold 3 { c'4 c'4 c'4 c'4 }
        \repeat unfold 6 { c'4 c'4 c'4 c'4 }
        \repeat unfold 5 { c'4 c'4 c'4 c'4 }
     }
  >>
}
@end lilypond

Este patrón resulta especialmente útil cuando se sobreescribe
@code{line-break-system-details} y las otras útiles (pero largas)
propiedades de @code{NonMusicalPaperColumnGrob}, como se explica en
@ref{Vertical spacing}.

@lilypond[quote,verbatim]
\new Score {
  \new Staff <<
     \new Voice {

        \overrideProperty "Score.NonMusicalPaperColumn"
        #'line-break-system-details #'((Y-offset . 0))
        s1 * 2 \break

        \overrideProperty "Score.NonMusicalPaperColumn"
        #'line-break-system-details #'((Y-offset . 35))
        s1 * 3 \break

        \overrideProperty "Score.NonMusicalPaperColumn"
        #'line-break-system-details #'((Y-offset . 70))
        s1 * 6 \break

        \overrideProperty "Score.NonMusicalPaperColumn"
        #'line-break-system-details #'((Y-offset . 105))
        s1 * 5 \break
     }
     \new Voice {
        \repeat unfold 2 { c'4 c'4 c'4 c'4 }
        \repeat unfold 3 { c'4 c'4 c'4 c'4 }
        \repeat unfold 6 { c'4 c'4 c'4 c'4 }
        \repeat unfold 5 { c'4 c'4 c'4 c'4 }
     }
  >>
}
@end lilypond


@seealso

Referencia de la notación:
@ref{Vertical spacing}.

Fragmentos de código:
@rlsr{Spacing}.


@node Vertical spacing
@section Vertical spacing

@cindex espaciado vertical
@cindex vertical, espaciado

El espaciado vertical está controlado por tres factores: la cantidad
de espacio disponible (es decir, el tamaño del papel y los márgenes),
la separación entre los sistemas, y la separación entre los
pentagramas dentro de un sistema.

@menu
* Vertical spacing inside a system::
* Vertical spacing between systems::
* Explicit staff and system positioning::
* Two-pass vertical spacing::
* Vertical collision avoidance::
@end menu


@node Vertical spacing inside a system
@subsection Vertical spacing inside a system

@cindex distancia entre pentagramas
@cindex pentagrama, distancia entre los
@cindex espacio entre pentagramas
@cindex espacio dentro de los sistemas

La altura de cad sistema se determina automáticamente.  Para evitar
que los pentagramas se superpongan unos encima de otros, se establecen
algunas distancias mínimas.  Al modificarlas, podemos poner los
pentagramas más cerca unos de otros.  Esto reduce el espacio que
requiere cada sistema y puede resultar en la obtención de más sistemas
por página.

Normalmente los pentagramas se apilan verticalmente.  Para hacer que
los pentagramas guarden una distancia, se rellena su tamaño vertical.
Esto se hace con la propiedad @code{minimum-Y-extent}.  Si se aplica a
@rinternals{VerticalAxisGroup}, controla el tamaño de una línea
horizontal, como un pentagrama o una línea de letra.
@code{minimum-Y-extent} acepta una pareja de números, de forma que si
queremos hacerlo más pequeño que su valor predeterminado @code{#'(-4
. 4)} entonces podemos establecer

@example
\override Staff.VerticalAxisGroup #'minimum-Y-extent = #'(-3 . 3)
@end example

@noindent
Esto fija el tamaño vertical del pentagrama en curso a 3 espacios de
pentagrama a cada lado de la tercera línea.  El valor @code{(-3 . 3)}
se interpreta como un intervalo, donde la línea central es el 0, por
lo que el primer número es negativo en general.  Los números no tienen
que coincidir; por ejemplo, el pentagrama se puede hacer mayor por
debajo dándole el valor @code{(-6 . 4)}.

Después de que se han determinado los saltos de página, se reevalúa el
espaciado vertical dentrod e cada sistema para llenar la página de
forma más regular; si una página tiene más espacio de sobra, se
amplían los sistemas para poder llenar este espacio.  La magnitud de
esta ampliación se puede configurar a través de la propiedad
@code{max-stretch} del grob @rinternals{VerticalAlignment}. De forma
predeterminada, @code{max-stretch} se establece a cero, inhabilitando
la ampliación. Para habilitar la ampliación, un valor prudente para
@code{max-stretch} es @code{ly:align-interface::calc-max-stretch}.

En ciertas situaciones, podemos querer ampliar la mayor parte de un
sistema y al mismo tiempo dejar algunas partes fijas.  Por ejemplo, si
una parte de piano aparece en el medio de una partitura orquestal,
podemos querer dejar los pentagramas de piano cercanos entre sí
mientras se estira el resto de la partitura.  Se puede usar la
propiedad @code{keep-fixed-while-stretching} de
@rinternals{VerticalAxisGroup} para conseguirlo.  Cuando se establece
al valor @code{##t}, esta propiedad evita que su pentagrama (o línea
de letra) se desplace en relación al que está directamente encima de
él.  En el ejemplo anterior, podríamos sobreescribir
@code{keep-fixed-while-stretching} al valor @code{##t} en el segundo
pentagrama del piano:

@lilypond[verbatim]
#(set-default-paper-size "a6")
#(set-global-staff-size 14.0)

\book {
\paper {
  ragged-last-bottom = ##f
}

\new Score \with
{
  \override VerticalAlignment #'max-stretch = #ly:align-interface::calc-max-stretch
}
{
\new GrandStaff
<<
  \new StaffGroup
  <<
    \new Staff {c' d' e' f'}
    \new Staff {c' d' e' f'}
    \new Staff {c' d' e' f'}
  >>

  \new PianoStaff
  <<
    \new Staff {c' d' e' f'}
    \new Staff \with {
      \override VerticalAxisGroup #'keep-fixed-while-stretching = ##t
    }
    {c' d' e' f'}
  >>

  \new StaffGroup
  <<
    \new Staff {c' d' e' f'}
    \new Staff {c' d' e' f'}
  >>
>>
}
}
@end lilypond

La alineación vertical de los pentagramas está manejada por el objeto
@code{VerticalAlignment}.  Los parámetros de contexto que especifican
las dimensiones verticales están descritas en conexión con el grabador
@code{Axis_group_engraver}.


@seealso

Fragmentos de código:
@rlsr{Spacing}.

@c @lsr{spacing,page-spacing.ly},
@c @lsr{spacing,alignment-vertical-spacing.ly}.

Referencia de funcionamiento interno:
@rinternals{VerticalAlignment},
@rinternals{Axis_group_engraver}.


@node Vertical spacing between systems
@subsection Vertical spacing between systems

La separación entre los sistemas está controlada por cuatro variables
del papel:

@example
\paper @{
  between-system-space = 1.5\cm
  between-system-padding = #1
  ragged-bottom=##f
  ragged-last-bottom=##f
@}
@end example

Cuando sólo se ponen dos simples sistemas en una página, el espaciado
vertical resultante puede ser bastante poco elegante: un sistema en la
parte alta de la página y el otro en la parte baja, con un enorme
hueco entre ellos.  Para evitar esta situación se puede limitar el
espacio que se añade entre los sistemas.  Esta posibilidad se activa
mediante el establecimiento al valor @code{#t} de la variable
@code{page-limit-inter-system-space} en el bloque @code{\paper}.  La
variable del papel @code{page-limit-inter-system-space-factor}
determina en qué cantidad se puede incrementar el espacio: por
ejemplo, el valor @code{1.3} sisgnifica que el espacio puede ser un
30% mayor que lo que sería en una página no justificada hasta abajo.

En el ejemplo siguiente, si el espacio entre los sistemas no estuviese
limitado, el segundo sistema de la página 1 se situaría en la parte de
abajo de la página.  Activando la limitación de espacio, el segundo
sistema se coloca más cerca del primero.  Estableciendo
@code{page-limit-inter-system-space-factor} a @code{1}, el espacio
sería el mismo que en una página sin justificar por abajo, como la
última página.

@lilypond[verbatim]
#(set-default-paper-size "a6")
\book {
  \paper {
    page-limit-inter-system-space = ##t
    page-limit-inter-system-space-factor = 1.3

    oddFooterMarkup = \markup "page bottom"
    evenFooterMarkup = \markup "page bottom"
    oddHeaderMarkup = \markup \fill-line {
      "page top" \fromproperty #'page:page-number-string }
    evenHeaderMarkup = \markup \fill-line {
      "page top" \fromproperty #'page:page-number-string }
  }
  \new Staff << \repeat unfold 4 { g'4 g' g' g' \break }
                { s1*2 \pageBreak } >>
}
@end lilypond


@seealso

Fragmentos de código:
@rlsr{Spacing}.


@node Explicit staff and system positioning
@subsection Explicit staff and system positioning

Una forma de entender los ajustes de @code{VerticalAxisGroup} y de
@code{\paper} que se explicaron en las dos secciones anteriores es
como una colección de distintos ajustes que conciernen principalmente
a la cantidad de relleno vertical que adquieren los distintos
pentagramas y sistemas al ocupar la página.

Es posible abordar el problema del espaciado vertical de una forma
distinta utilizando @code{NonMusicalPaperColumn
#'line-break-system-details}.  Donde los ajustes de
@code{VerticalAxisGroup} y de @code{\paper} especifican el relleno
vertical, @code{NonMusicalPaperColumn #'line-break-system-details}
especifica las posiciones verticales exactas en la página.

@code{NonMusicalPaperColumn #'line-break-system-details} acepta una
lista asociativa de cinco ajustes distintos:

@itemize
@item @code{X-offset}
@item @code{Y-offset}
@item @code{alignment-offsets}
@item @code{alignment-extra-space}
@item @code{fixed-alignment-extra-space}
@end itemize

Las sobreescrituras de los objetos gráficos, entre ellas las de
@code{NonMusicalPaperColumn} que aparece más abajo, pueden ocurrir en
tres lugares distintos dentro de un archivo de entrada:

@itemize
@item directamente en medio de las notas
@item en un bloque @code{\context}
@item en el bloque @code{\with}
@end itemize

Cuando sobreescribimos @code{NonMusicalPaperColumn}, usamos la
instrucción @code{\override} usual en los bloques @code{\context} y en
el bloque @code{\with}.  Por otra parte, cuando sobreescribimos
@code{NonMusicalPaperColumn} en medio de las notas, debemos usar la
instrucción especial @code{\overrideProperty}.  He aquí algunas
sebreescrituras de @code{NonMusicalPaperColumn} de ejemplo con la
instrucción especial @code{\overrideProperty}:

@example
\overrideProperty NonMusicalPaperColumn
  #'line-break-system-details #'((X-offset . 20))

\overrideProperty NonMusicalPaperColumn
  #'line-break-system-details #'((Y-offset . 40))

\overrideProperty NonMusicalPaperColumn
  #'line-break-system-details #'((X-offset . 20) (Y-offset . 40))

\override NonMusicalPaperColumn
  #'line-break-system-details #'((alignment-offsets . (0 -15)))

\override NonMusicalPaperColumn
  #'line-break-system-details #'((X-offset . 20) (Y-offset . 40)
                                 (alignment-offsets . (0 -15)))
@end example

Para entender cómo funciona cada uno de los distintos ajustes,
empezamos observando un ejemplo que no incluye absolutamente ninguna
sobreescritura.

@lilypond[quote,ragged-right]
\new Score <<
  \new Staff <<
    \new Voice {
      s1 * 6 \break
      s1 * 6 \break
      s1 * 6 \break
    }
    \new Voice { \repeat unfold 18 { c'4 c'4 c'4 c'4 } }
  >>
  \new Staff {
    \repeat unfold 18 { d'4 d'4 d'4 d'4 }
  }
>>
@end lilypond

Esta partitura mantiene aislada la información de los saltos de línea
y de página en una voz dedicada a ello.  Esta técnica de crear una voz
de saltos ayuda a mantener separada de la escritura de notas conforme
el ejemplo se vuelve más complicado.  Consulte @ref{Using an extra
voice for breaks}.

Los saltos explícitos dividen la música de forma regular en seis
compases por línea.  El espaciado vertical es el resultado de los
ajustes predeterminados de LilyPond.  Para establecer explícitamente
el punto de origen vertical de cada sistema, podemos establecer el par
@code{Y-offset} en el atributo @code{line-break-system-details} del
grob (objeto gráfico) @code{NonMusicalPaperColumn}:

@lilypond[quote,ragged-right]
\new Score <<
  \new Staff <<
    \new Voice {
      \overrideProperty #"Score.NonMusicalPaperColumn"
        #'line-break-system-details #'((Y-offset . 0))
      s1 * 6 \break
      \overrideProperty #"Score.NonMusicalPaperColumn"
        #'line-break-system-details #'((Y-offset . 40))
      s1 * 6 \break
      \overrideProperty #"Score.NonMusicalPaperColumn"
        #'line-break-system-details #'((Y-offset . 80))
      s1 * 6 \break
    }
    \new Voice { \repeat unfold 18 { c'4 c'4 c'4 c'4 } }
  >>
  \new Staff {
    \repeat unfold 18 { d'4 d'4 d'4 d'4 }
  }
>>
@end lilypond

Observe que @code{line-break-system-details} toma una lista asociativa
de una cantidad de valores potencialmente elevada, pero aquí sólo
fijamos un valor.  Observe también que aquí la propiedad
@code{Y-offset} determina la posición vertical exacta sobre la página
en la que se trazará cada uno de los nuevos sistemas.

Ahora que hemos establecido explícitamente el punto de origen vertical
de cada sistema, podemos también establecer manualmente el punto de
origen vertical de cada pentagrama dentro de cada sistema.  Lo hacemos
usando la subpropiedad @code{alignment-offsets} de
@code{line-break-system-details}.

@lilypond[quote,ragged-right]
\new Score <<
  \new Staff <<
    \new Voice {
      \overrideProperty #"Score.NonMusicalPaperColumn"
        #'line-break-system-details #'((Y-offset . 20)
          (alignment-offsets . (0 -15)))
      s1 * 6 \break
      \overrideProperty #"Score.NonMusicalPaperColumn"
        #'line-break-system-details #'((Y-offset . 60)
          (alignment-offsets . (0 -15)))
      s1 * 6 \break
      \overrideProperty #"Score.NonMusicalPaperColumn"
        #'line-break-system-details #'((Y-offset . 100)
          (alignment-offsets . (0 -15)))
      s1 * 6 \break
    }
    \new Voice { \repeat unfold 18 { c'4 c'4 c'4 c'4 } }
  >>
  \new Staff {
    \repeat unfold 18 { d'4 d'4 d'4 d'4 }
  }
>>
@end lilypond

Aobserve que aquí asignamos dos valores distintos al atributo
@code{line-break-system-details} del grob
@code{NonMusicalPaperColumn}.  Aunque el atributo alist de
@code{line-break-system-details} acepta muchos parámetros de espaciado
adicionales (entre ellos, por ejemplo, un par @code{X-offset}
correspondiente), sólo tenemos que establecer el desplazamiento
@code{Y-offset} y los pares @code{alignment-offsets} para controlar el
punto de origen vertical de cada sistema y pentagrama.  Finalmente,
observe que @code{alignment-offsets} especifica el posicionamiento
vertical de los pentagramas pero no de los grupos de pentagramas.

@lilypond[quote,ragged-right]
\new Score <<
  \new Staff <<
    \new Voice {
      \overrideProperty #"Score.NonMusicalPaperColumn"
      #'line-break-system-details #'((Y-offset . 0)
        (alignment-offsets . (0 -30 -40)))
      s1 * 6 \break
      \overrideProperty #"Score.NonMusicalPaperColumn"
      #'line-break-system-details #'((Y-offset . 60)
        (alignment-offsets . (0 -10 -20)))
      s1 * 6 \break
      \overrideProperty #"Score.NonMusicalPaperColumn"
      #'line-break-system-details #'((Y-offset . 100)
        (alignment-offsets . (0 -10, -40)))
      s1 * 6 \break
    }
    \new Voice { \repeat unfold 18 { c'4 c'4 c'4 c'4 } }
  >>
  \new StaffGroup <<
    \new Staff {
      \repeat unfold 18 { d'4 d'4 d'4 d'4 }
    }
    \new Staff {
      \repeat unfold 18 { e'4 e'4 e'4 e'4 }
    }
  >>
>>
@end lilypond

Algunos puntos que tener en cuenta:

@itemize
@item Al usar @code{alignment-offsets}, la letra cuenta como un pentagrama.

@item Las unidades de los números que se pasan a @code{X-offset},
@code{Y-offset} y @code{alignment-offsets} se interpretan como
múltiplos de la distancia entre líneas de pentagrama adyacentes.  Los
valores positivos mueven a los pentagramas y a la letra hacia arriba,
los valores negativos mueven los pentagramas y la letra hacia abajo.

@item A causa de que los ajustes a @code{NonMusicalPaperColumn #'line-break-system-details}
dados aquí permiten el posicionamiento de pentagramas y sistemas en
cualquier lugar de la página, es posible violar los márgenes o los
límites del papel, o incluso imprimir pentagramas o sistemas unos
encima de otros.  Esto se evitaría pasando a los diferentes ajustes
unos valores razonables.
@end itemize


@seealso

Fragmentos de código:
@rlsr{Spacing}.


@node Two-pass vertical spacing
@subsection Two-pass vertical spacing

@warning{El espaciado vertical en dos pasadas está obsoleto y se
eliminará en una versión futura de LilyPond.  Ahora los sistemas se
amplían automáticamente en un solo paso.  Véase @ref{Vertical spacing
inside a system}.}

In order to automatically stretch systems so that they should fill the
space left on a page, a two-pass technique can be used:

@enumerate
@item In the first pass, the amount of vertical space used to increase
the height of each system is computed and dumped to a file.
@item In the second pass, spacing inside the systems are
stretched according to the data in the page layout file.
@end enumerate

The @code{ragged-bottom} property adds space between systems, while
the two-pass technique adds space between staves inside a system.

To allow this behavior, a @code{tweak-key} variable has to be set in
each score @code{\layout} block, and the tweaks included in each score
music, using the @code{\scoreTweak} music function.

@quotation
@verbatim
%% include the generated page layout file:
\includePageLayoutFile

\score {
  \new StaffGroup <<
    \new Staff <<
      %% Include this score tweaks:
      \scoreTweak "scoreA"
      { \clef french c''1 \break c''1 }
    >>
    \new Staff { \clef soprano g'1 g'1 }
    \new Staff { \clef mezzosoprano e'1 e'1 }
    \new Staff { \clef alto g1 g1 }
    \new Staff { \clef bass c1 c1 }
  >>
  \header {
    piece = "Score with tweaks"
  }
  %% Define how to name the tweaks for this score:
  \layout { #(define tweak-key "scoreA") }
}
@end verbatim
@end quotation

For the first pass, the @code{dump-tweaks} option should be set to
generate the page layout file.

@example
lilypond -dbackend=null -d dump-tweaks <file>.ly
lilypond <file>.ly
@end example


@seealso

Fragmentos de código:
@rlsr{Spacing}.


@node Vertical collision avoidance
@subsection Vertical collision avoidance

@funindex outside-staff-priority
@funindex outside-staff-padding
@funindex outside-staff-horizontal-padding

Podemos decir intuitivamente que algunos objetos de la notación
musical pertenecen al pentagrama y otros se sitúan fuera del
pentagrama.  Entre los objetos que pertenecen al exterior del
pentagrama están las marcas de ensayo, las marcas textuales y las
indicaciones de dinámica (en lo sucesivo, les llamaremos objetos fuera
del pentagrama).  La regla de LilyPond para la colocación vertical de
los objetos fuera del pentagrama es ponerlos tan cerca del pentagrama
como sea posible pero no tan próximos como para que choquen con otro
objeto.

LilyPond utiliza la propiedad @code{outside-staff-priority} para
determinar si un grob es un objeto fuera del pentagrama: si
@code{outside-staff-priority} es un número, el grob es un objeto fuera
del pentagrama.  Además, @code{outside-staff-priority} informa a
LilyPond en qué orden se debe situar los objetos.

En primer lugar, LilyPond sitúa todos los objetos que no pertenecen al
exterior del pentagrama.  Después ordena los objetos fuera del
pentagrama de acuerdo a su prioridad @code{outside-staff-priority} (en
orden creciente).  LilyPond toma los objetos fuera del pentagrama uno
a uno y los coloca de forma que no choquen con ningún objeto que ya
haya sido colocado.  Eesto es, si dos grobs fuera del pentagrama
compiten por el mismo espacio, el que tiene la prioridad
@code{outside-staff-priority} más baja se colocará más próximo al
pentagrama.

@lilypond[quote,ragged-right,relative=2,fragment,verbatim]
c4_"Text"\pp
r2.
\once \override TextScript #'outside-staff-priority = #1
c4_"Text"\pp % this time the text will be closer to the staff
r2.
% by setting outside-staff-priority to a non-number,
% we disable the automatic collision avoidance
\once \override TextScript #'outside-staff-priority = ##f
\once \override DynamicLineSpanner #'outside-staff-priority = ##f
c4_"Text"\pp % now they will collide
@end lilypond

El relleno vertical entre un objeto fuera del pentagrama y los grobs
posicionados previamente se puede controlar con
@code{outside-staff-padding}.

@lilypond[quote,ragged-right,relative=2,fragment,verbatim]
\once \override TextScript #'outside-staff-padding = #0
a'^"This text is placed very close to the note"
\once \override TextScript #'outside-staff-padding = #3
c^"This text is padded away from the previous text"
c^"This text is placed close to the previous text"
@end lilypond

HACER: ¿este ejemplo ya no funciona?

De forma predeterminada, los objetos fuera del pentagrama se sitúan
sin tener en cuenta su distancia horizontal a partir de los grobs
posicionados previamente.  Esto puede llevar a situiaciones en las que
los objetos se colocan muy próximos entre sí en el sentido horizontal.
El establecimiento del relleno horizontal
@code{outside-staff-horizontal-padding} ocasiona que un objeto se
desplace verticalmente para que tal situiación no ocurra.

@lilypond[quote,ragged-right,relative=2,fragment,verbatim]
% the markup is too close to the following note
c2^"Text"
c''2
% setting outside-staff-horizontal-padding fixes this
R1
\once \override TextScript #'outside-staff-horizontal-padding = #1
c,,2^"Text"
c''2
@end lilypond


@seealso

Fragmentos de código:
@rlsr{Spacing}.


@node Horizontal spacing
@section Horizontal spacing

@cindex horizontal, espaciado
@cindex espaciado horizontal

@menu
* Horizontal spacing overview::
* New spacing area::
* Changing horizontal spacing::
* Line length::
* Proportional notation::
@end menu


@node Horizontal spacing overview
@subsection Horizontal spacing overview

El motor de espaciado traduce las diferencias en las duraciones a
distancias ampliables (@q{muelles}) de distintas longitudes.  Las
duraciones más largas reciben un espacio mayor y las duraciones más
cortas reciben menos.  Las duraciones más breves reciben un espacio de
tamaño fijo (que se controla mediante @code{shortest-duration-space}
en el objeto @rinternals{SpacingSpanner}).  Cuanto más larga es la
duración, más espacio recibe: al doblar una duración se añade un
espacio de tamaño fijo (este tamaño se controla mediante
@code{spacing-increment}) a la nota.

Por ejemplo, la pieza siguiente contiene numerosas blancas, negras y
corcheas; la corchea va seguida de un ancho de cabeza de blanca (ACB).
La negra va seguida de 2 ACB, la blanca por 3 ACB, etc.

@lilypond[quote,fragment,verbatim,relative=1]
c2 c4. c8 c4. c8 c4. c8 c8
c8 c4 c4 c4
@end lilypond

Normalmente, el valor de @code{spacing-increment} está establecido en
1.2 espacios de pentagrama, lo que es aproximadamente el ancho de una
cabeza, y @code{shortest-duration-space} está establecido en 2.0, lo
que significa que la nota más breve recibe 2.4 espacios de pentagrama
(2.0 multiplicado por el @code{spacing-increment}) de espacio
horizontal.  Este espacio se cuenta a partir del borde izquierdo del
símbolo, de manera que las notas más breves van seguidas generalmente
por un espacio de 1 ACB.

Si siguiésemos el procedimiento anterior exactamente, entonces la
adición de una sola fusa a una partitura que usa corcheas y
semicorcheas, aumentaría enormemente la anchuta de la partitura
completa.  La nota más breve ya no es la semicorchea, sino la fusa,
añadiendo así 1 ACB a cada una de las notas.  Para evitarlo, la
duración más breve a efectos de espaciado no es la nota más breve de
la partitura, sino la que ocurre con más frecuencia.

La duración más breve que es más común se determina de la siguiente
manera: en cada compás se determina la duración más breve.  La menor
duración más común se toma como base para el espaciado, habiendo
estipulado que esta duración menor siempre debe ser igual o menor que
una corchea.  La duración más breve se imprime cuando se ejecuta
@code{lilypond} con la opción @code{--verbose}.

Estas duraciones también se pueden personalizar.  Si establecemos la
@code{common-shortest-duration} en @rinternals{SpacingSpanner},
entonces éste establece la duración base para el espaciado.  La
duración máxima para esta base (normalmente un a corchea), se fija a
través de @code{base-shortest-duration}.

@funindex common-shortest-duration
@funindex base-shortest-duration
@funindex stem-spacing-correction
@funindex spacing

Las notas que son aún más breves que la nota común más breve van
seguidas por un espacio proporcional a su duración en relación con la
nota común más breve.  Así pues, si fuésemos a añadir tan sólo algunas
semicorcheas al ejemplo anterior, irían seguidas por medio ACB:

@lilypond[quote,fragment,verbatim,relative=2]
c2 c4. c8 c4. c16[ c] c4. c8 c8 c8 c4 c4 c4
@end lilypond

En la introducción (véase @rlearning{Engraving}), se explicó que las
direcciones de las plicas influyen en el espaciado.  Esto se controla
con la propiedad @code{stem-spacing-correction} en el objeto
@rinternals{NoteSpacing}.  Estos se generan para cada uno de los
contextos de @rinternals{Voice}.  El objeto @code{StaffSpacing}
(generado en el contexto de @rinternals{Staff}) contiene la misma
propiedad para controlar el espaciado de las líneas de plica o
divisorias.  El ejemplo siguiente muestra estas correcciones, una vez
con los valores predeterminados y otra con correcciones exageradas:

@lilypond[quote,ragged-right]
{
  c'4 e''4 e'4 b'4 |
  b'4 e''4 b'4 e''4|
  \override Staff.NoteSpacing #'stem-spacing-correction = #1.5
  \override Staff.StaffSpacing #'stem-spacing-correction = #1.5
  c'4 e''4 e'4 b'4 |
  b'4 e''4 b'4 e''4|
}
@end lilypond

Está contemplada la notación proporcional; consulte @ref{Proportional
notation}.


@seealso

Fragmentos de código:
@rlsr{Spacing}.

Referencia de funcionamiento interno:
@rinternals{SpacingSpanner},
@rinternals{NoteSpacing},
@rinternals{StaffSpacing},
@rinternals{SeparationItem}.


@knownissues

No existe ningún mecanismo conveniente para sobreescribir el espaciado
manualmente.  Se puede usar el siguiente rodeo para insertar espacio
adicional en una partitura.

@example
 \once \override Score.SeparationItem #'padding = #1
@end example

No existe ningún rodeo para disminuir la magnitud de la separación.


@node New spacing area
@subsection New spacing area

Se pueden inicar secciones nuevas con diferentes parámetros de
espaciado, con @code{newSpacingSection}.  Esto es útil cuando hay
secciones que tienen distinta noción de las notas largas y cortas.

En el ejemplo siguiente, el cambio de compás introduce una sección
nueva, y por ello las semicorcheas se separan de manera más amplia.

@lilypond[relative,fragment,verbatim,quote]
\time 2/4
c4 c8 c
c8 c c4 c16[ c c8] c4
\newSpacingSection
\time 4/16
c16[ c c8]
@end lilypond

La instrucción @code{\newSpacingSection} crea un nuevo objeto
@code{SpacingSpanner}, y de ahí que se puedan usar nuevas
instrucciones de sobreescritura @code{\override} en dicho punto.


@seealso

Fragmentos de código:
@rlsr{Spacing}.

Referencia de funcionamiento interno:
@rinternals{SpacingSpanner}.


@node Changing horizontal spacing
@subsection Changing horizontal spacing

Se puede alterar el espaciado horizontal con la propiedad
@code{base-shortest-duration}.  Aquí compararemos la misma música, una
vez sin alterar la propiedad, y luego alterándola.  Los valores
mayores de @code{ly:make-moment} producen música más pequeña.  Observe
que @code{ly:make-moment} construye una duración, por lo que @code{1
4} es una duración mayor que @code{1 16}.

@lilypond[verbatim,line-width=12\cm]
\score {
  \relative c'' {
    g4 e e2 | f4 d d2 | c4 d e f | g4 g g2 |
    g4 e e2 | f4 d d2 | c4 e g g | c,1 |
    d4 d d d | d4 e f2 | e4 e e e | e4 f g2 |
    g4 e e2 | f4 d d2 | c4 e g g | c,1 |
  }
}
@end lilypond

@lilypond[verbatim,line-width=12\cm]
\score {
  \relative c'' {
    g4 e e2 | f4 d d2 | c4 d e f | g4 g g2 |
    g4 e e2 | f4 d d2 | c4 e g g | c,1 |
    d4 d d d | d4 e f2 | e4 e e e | e4 f g2 |
    g4 e e2 | f4 d d2 | c4 e g g | c,1 |
  }
  \layout {
    \context {
      \Score
      \override SpacingSpanner
                #'base-shortest-duration = #(ly:make-moment 1 16)
    }
  }
}
@end lilypond


@snippets

De forma predeterminada, el espaciado en los grupos de valoración
especial depende de varios factores ajenos a la duración (como
alteraciones, cambios de clave, etc.).  Para pasar por alto estos
símbolos y forzar un espaciado de duraciones iguales uniforme, use
@code{Score.SpacingSpanner #'uniform-stretching}.  Esta propiedad sólo
puede cambiarse al principio de la partitura:

@lilypond[quote,ragged-right,relative=2,fragment,verbatim]
\new Score \with {
  \override SpacingSpanner #'uniform-stretching = ##t
} <<
  \new Staff{
    \times 4/5 {
      c8 c8 c8 c8 c8
    }
    c8 c8 c8 c8
  }
  \new Staff{
    c8 c8 c8 c8
    \times 4/5 {
      c8 c8 c8 c8 c8
    }
  }
>>
@end lilypond

Cuando se establece @code{strict-note-spacing}, las notas se separan
sin tener en cuenta las claves, líneas divisorias ni notas de adorno:

@lilypond[quote,ragged-right,relative=2,fragment,verbatim]
\override Score.SpacingSpanner #'strict-note-spacing = ##t
\new Staff { c8[ c \clef alto c \grace { c16[ c] } c8 c c]  c32[ c32] }
@end lilypond


@seealso

Fragmentos de código:
@rlsr{Spacing}.


@node Line length
@subsection Line length

@cindex saltos de página
@cindex página, saltos de

@funindex indent
@funindex line-width
@funindex ragged-right
@funindex ragged-last

@c Although line-width can be set in \layout, it should be set in paper
@c block, to get page layout right.
@c Setting indent in \paper block makes not much sense, but it works.

@c Bit verbose and vague, use examples?
Los ajustes más básicos que influyen en el espaciado son @code{indent}
y @code{line-width}.  Se definen en el bloque @code{\layout}.
Controlan el sangrado de la primera línea de música y la longitud de
las líneas.

Si se fija un valor verdadero para @code{ragged-right} en el bloque
@code{\layout}, entonces los sistemas terminan en su longitud
horizontal natural, en lugar de repartirse horizontalmente hasta
llenar toda la línea.  Esto es útil para fragmentos cortos, y para
comprobar qué tan apretado es el espaciado natural.

@cindex diseño de página
@cindex página, disposición de la
@cindex vertical, espaciado

La opción @code{ragged-last} es similar a @code{ragged-right}, pero
afecta sólo a la última línea de la pieza.  No se efectúa ninguna
restricción sobre dicha línea.  El resultado es similar al formateo de
los párrafos de texto.  En un párrafo, la última línea sencillamente
ocupa su longitud horizontal natural.
@c Note that for text there are several options for the last line.
@c While Knuth TeX uses natural length, lead typesetters use the same
@c stretch as the previous line.  eTeX uses \lastlinefit to
@c interpolate between both these solutions.

@c interesting! -FV

@example
\layout @{
  indent = #0
  line-width = #150
  ragged-last = ##t
@}
@end example


@seealso

Fragmentos de código:
@rlsr{Spacing}.


@node Proportional notation
@subsection Proportional notation

LilyPond contempla la notación proporcional, un tipo de espaciado
horizontal en el que cada nota consume una medida horizontal que
equivale exactamente a su duración rítmica.  Este tipo de espaciado
proporcional es comparable al espaciado horizontal hecho sobre un
papel milimetrado.  Ciertas partituras del finales del s.XX y
principios del s.XXI utilizan notación proporcional para clarificar
relaciones rítmicas complejas o para facilitar la colocación de líneas
cronométricas u otros gráficos directamente en la partitura.

LilyPond contempla cinco ajustes distintos para la notación
proporcional, que se pueden usar solos o combinados:

@itemize
@item @code{proportionalNotationDuration}
@item @code{uniform-stretching}
@item @code{strict-note-spacing}
@item @code{\remove Separating_line_group_engraver}
@item @code{\override PaperColumn #'used = ##t}
@end itemize

En los ejemplos que siguen, exploramos el uso de estos cinco ajustes
de la notación proporcional y examinamos la forma en que interactúan.

Comenzamos con el siguiente ejemplo de un solo compás, que usa un
espaciado clásico sin justificación por la derecha.

@lilypond[quote,verbatim,ragged-right]
\new Score <<
  \new RhythmicStaff {
    c'2
    c'16 c'16 c'16 c'16
    \times 4/5 {
      c'16 c'16 c'16 c'16 c'16
    }
  }
>>
@end lilypond

Observe que la blanca que inicia el compás ocupa mucho menos de la
mitad de todo el espacio horizontal del compás.  De forma similar, las
semicorcheas y el cinquillo de semicorcheas con que finaliza el compás
ocupan en conjunto mucho más de la mitad de todo el espacio horizontal
del compás.

En el grabado clásico, este espaciado puede ser exactamente el que
deseamos porque podemos tomar prestado el espacio horizontal de la
blanca y conservar el espacio horizontal a lo largo del compás como un
todo.

Por otro lado, si quieremos insertar una línea de tiempo graduada o
algún otro gráfico encima o debajo de la partitura, necesitamos la
notación proporcional.  Se activa la notación proporcional con el
ajuste @code{proportionalNotationDuration}.

@lilypond[quote,verbatim,ragged-right]
\new Score \with {
  proportionalNotationDuration = #(ly:make-moment 1 20)
} <<
  \new RhythmicStaff {
    c'2
    c'16 c'16 c'16 c'16
    \times 4/5 {
      c'16 c'16 c'16 c'16 c'16
    }
  }
>>
@end lilypond

La blanca al princpio del compás y las notas rápidas de la segunda
mitad del compás ocupan ahora igual cantidades iguales de espacio
horizontal.  Podríamos colocar una línea de tiempo graduada o un
gráfico encima o debajo de este ejemplo.

El ajuste @code{proportionalNotationDuration} es un ajuste de contexto
que reside en @code{Score}.  Recordemos que los ajustes de contexto
aparecen en uno de tres posibles lugares del archivo de entrada: en un
bloque @code{\with}, en un bloque @code{\context}, o directamente
entre la música precedido por la instrucción @code{\set}.  Como con
todos los ajustes de contexto, el usuario puede elegir en cuál de los
tres lugares diferentes prefiere establecer el valor de
@code{proportionalNotationDuration}.

El ajuste @code{proportionalNotationDuration} acepta un solo
argumento, que es la duración de referencia contra el que se aplica el
espaciado de toda la música.  La función Scheme de LilyPond
@code{make-moment} acepta dos argumentos: un numerador y un
denominador que, juntos, expresan una cierta fracción de redonda.  La
llamada @code{#(ly:make-moment 1 20)}, por tanto, produce una duración
de referencia de una nota de un veinteavo de redonda (semicorcheas de
cinquillo).  Los valores @code{#(ly:make-moment 1 16)},
@code{#(ly:make-moment 1 8)} y @code{#(ly:make-moment 3 97)} son
también posibles.

¿Cómo seleccionamos la duración correcta de referencia para pasarla a
@code{proportionalNotationDuration}?  Normalmente mediante un proceso
de ensayo y error, comenzando con una duración cercana a la más rápida
(o más breve) duración de la pieza.  Las duraciones de referencia más
pequeñas aplican un espaciado más suelto; las duraciones de referencia
más largas aplican un espaciado más apretado.

@lilypond[quote,verbatim,ragged-right]
\new Score \with {
  proportionalNotationDuration = #(ly:make-moment 1 8)
} <<
  \new RhythmicStaff {
    c'2
    c'16 c'16 c'16 c'16
    \times 4/5 {
      c'16 c'16 c'16 c'16 c'16
    }
  }
>>

\new Score \with {
  proportionalNotationDuration = #(ly:make-moment 1 16)
} <<
  \new RhythmicStaff {
    c'2
    c'16 c'16 c'16 c'16
    \times 4/5 {
      c'16 c'16 c'16 c'16 c'16
    }
  }
>>

\new Score \with {
  proportionalNotationDuration = #(ly:make-moment 1 32)
} <<
  \new RhythmicStaff {
    c'2
    c'16 c'16 c'16 c'16
    \times 4/5 {
      c'16 c'16 c'16 c'16 c'16
    }
  }
>>
@end lilypond

Observe que una duración de referencia demasiado grande (como la
corchea, en el ejemplo de arriba) produce un espaciado excesivamente
apretado y puede ser causa de colisiones entre las cabezas de nota.
Observe también que la notación proporcional en general ocupa más
espacio horizontal que el espaciado clásico.  El espaciado
proporcional aporta claridad rítmica a expensas del espacio
horizontal.

Ahora veremos cómo espaciar de forma óptima grupos de valoración
especial que se superponen.

Empezamos por examinar qué le ocurre a nuestro ejemplo original, con
espaciado clásico, cuando añadimos un segundo pentagrama con un tipo
diferente de grupo especial.

@lilypond[quote,verbatim,ragged-right]
\new Score <<
  \new RhythmicStaff {
    c'2
    c'16 c'16 c'16 c'16
    \times 4/5 {
      c'16 c'16 c'16 c'16 c'16
    }
  }
  \new RhythmicStaff {
    \times 8/9 {
      c'8 c'8 c'8 c'8 c'8 c'8 c'8 c'8 c'8
    }
  }
>>
@end lilypond

El espaciado es defectuoso porque las notas regularmente espaciadas
del pentagrama inferior no se amplían de manera uniforme.  El grabado
clásico incluye muy pocos tresillos complejos y así las reglas del
grabado clásico pueden generar este tipo de resultado.  El
establecimiento de @code{proportionalNotationDuration} remedia esta
situación considerablemente.

@lilypond[quote,verbatim,ragged-right]
\new Score \with {
  proportionalNotationDuration = #(ly:make-moment 1 20)
} <<
  \new RhythmicStaff {
    c'2
    c'16 c'16 c'16 c'16
    \times 4/5 {
      c'16 c'16 c'16 c'16 c'16
    }
  }
  \new RhythmicStaff {
    \times 8/9 {
      c'8 c'8 c'8 c'8 c'8 c'8 c'8 c'8 c'8
    }
  }
>>
@end lilypond

Pero si observamos con mucho cuidado podremos ver que las notas de la
segunda mitad del 9-illo están espaciadas de forma ligeramente más
ancha que las de la primera mitad del 9-illo.  Para asegurar una
ampliación uniforme, activamos @code{uniform-stretching}, que es una
propiedad de @code{SpacingSpanner}.

@lilypond[quote,verbatim,ragged-right]
\new Score \with {
  proportionalNotationDuration = #(ly:make-moment 1 20)
  \override SpacingSpanner #'uniform-stretching = ##t
} <<
  \new RhythmicStaff {
    c'2
    c'16 c'16 c'16 c'16
    \times 4/5 {
      c'16 c'16 c'16 c'16 c'16
    }
  }
  \new RhythmicStaff {
    \times 8/9 {
      c'8 c'8 c'8 c'8 c'8 c'8 c'8 c'8 c'8
    }
  }
>>
@end lilypond

Nuestro ejemplo de dos pentagramase ahora está espaciado exactamente,
nuestras relaciones rítmicas son visualmente claras, y podemos incluir
una línea de tiempo graduada o un gráfico, si queremos.

Observe que el paquere de notación proporcional de LilyPond espera que
todas las partituras proporcionales establezcan el atributo
@code{uniform-stretching} de @code{SpacingSpanner} al valor ##t.  El
establecimiento de @code{proportionalNotationDuration} sin ajustar
también el atributo @code{uniform-stretching} de @code{SpacingSpanner}
al valor ##t causará, por ejemplo, que los desplazamientos
(@code{skips}) consuman una cantidad de espacio horizontal incorrecta.

El @code{SpacingSpanner} es un grob abstracto que reside en el
contexto de @code{Score}. Como con nuestros ajustes de
@code{proportionalNotationDuration}, las sobreescrituras al
@code{SpacingSpanner} sólo pueden ocurrir en uno de estos tres lugares
dentro del archivo de entrada: en el bloque @code{\with}, en el bloque
@code{\context} o directamente dentro de la escritura de notas.

De manera predeterminada, sólo hay un @code{SpacingSpanner} por
@code{Score}.  Esto supone que, por omisión, @code{uniform-stretching}
está activado para la partitura completa o desactivado para la
partitura completa.  Sin embargo, podemos sobreesacibir este
comportamiento y activar distintas posibilidades de espaciado en
distintos lugares de la partitura.  Lo hacemos con la instrucción
@code{\newSpacingSection}.  Consulte @ref{New spacing area} para más
información.

A continuación examinamos los efectos del grabador
@code{Separating_line_group_engraver} y veremos por qué las partituras
proporcionales con frecuencia eliminan este grabador.  El ejemplo
siguiente muestra que hay una pequeña cantidad de espacio
@qq{preparatorio} justo antes de la primera nota de cada sistema.

@lilypond[quote,verbatim,ragged-right]
\paper {
  indent = #0
}

\new Staff {
  c'1
  \break
  c'1
}
@end lilypond


Esta cantidad de espacio preparatorio es la misma ya sea después de
una indicación de compás, una armadura o una clave.  El grabador
@code{Separating_line_group_engraver} es responsable de este espacio.
La eliminación de @code{Separating_line_group_engraver} reduce este
espacio a cero.

@lilypond[quote,verbatim,ragged-right]
\paper {
  indent = #0
}

\new Staff \with {
  \remove Separating_line_group_engraver
} {
  c'1
  \break
  c'1
}
@end lilypond

Los elementos no musicales como la indicación de compás, la armadura,
la clave y las alteraciones son problemáticos en notación
proporcional.  Ninguno de estos elementos tiene duración rítmica.
Pero todos ellos consumen espacio horizontal.  Las distintas
partituras proporcionales abordan este problema de distinta manera.

Sería posible evitar los problemas de espaciado con las armaduras,
simplemente evitando tenerlas.  Esta es una opción válida pues casi
todas las partituras proporcionales son música contemporánea.  Lo
mismo puede valer para las indicaciones de compás, espacialmente para
las partituras que incluyen ula línea de tiempo graduada u otro
gráfico.  Pero estas partituras son excepcionales y casi todas las
partituras proporcionales incluyen al menos unas pocas indicaciones de
compás.  Las claves y las alteraciones son aún más esenciales.

Así pues ¿qué estrategias existen para el espaciado de los elementos
no musicales en un contexto proporcional?  Una buena opción es la
propiedad @code{strict-note-spacing} de @code{SpacingSpanner}.
Compare las dos partituras siguientes:

@lilypond[quote,verbatim,ragged-right]
\new Staff {
  \set Score.proportionalNotationDuration = #(ly:make-moment 1 16)
  c''8
  c''8
  c''8
  \clef alto
  d'8
  d'2
}

\new Staff {
  \set Score.proportionalNotationDuration = #(ly:make-moment 1 16)
  \override Score.SpacingSpanner #'strict-note-spacing = ##t
  c''8
  c''8
  c''8
  \clef alto
  d'8
  d'2
}
@end lilypond

Las dos poartituras son proporcionales, pero el espaciado de la
primera es muy suelto a causa del cmabio de clave. Sin embargo, el
espaciado de la segunda partitura se mantiene estricto, porque
@code{strict-note-spacing} está activado.  La activación de
@code{strict-note-spacing} hace que el ancho de las indicaciones de
compás, armaduras, cambios de clave y alteraciones no tomen parte en
el algoritmo de espaciado.

Además de los ajustes dados aquí, hay otros que aparecen con
frecuencia en las partituras proporcionales.  Entre ellos están:

@itemize
@item @code{\override SpacingSpanner #'strict-grace-spacing = ##t}
@item @code{tupletFullLength = ##t}
@item @code{\override Beam #'breakable = ##t}
@item @code{\override Glissando #'breakable = ##t}
@item @code{\override TextSpanner #'breakable = ##t}
@item @code{\remove Forbid_line_break_engraver in the Voice context}
@end itemize

Estos ajustes dan a las notas de adorno un espaciado estricto,
extienden los corchetes de grupo especial para que marquen tanto los
puntos de comienzo como de final, y permiten que los elementos de
extensión se dividan entre los sistemas y las páginas.  Consulte las
partes respectivas del manual para ver estos ajustes relacionados.

@seealso

Referencia de la notación:
@ref{New spacing area}.

Fragmentos de código:
@rlsr{Spacing}.


@node Fitting music onto fewer pages
@section Fitting music onto fewer pages

En ocasiones, podemos terminar con uno o dos pentagramas en una
segunda página (o tercera, o cuarta...).  Es fastidioso, especialmente
cuando vemos que las páginas anteriores parecen tener espacio de
sobra.

Al investigar los problemas de disposición, una herramienta de valor
incalculable es @code{annotate-spacing}.  Esta instrucción imprime los
valores de un cierto número de variables de espaciado; para ver más
detalles consulte la sección siguiente, @ref{Displaying spacing}.

@menu
* Displaying spacing::
* Changing spacing::
@end menu


@node Displaying spacing
@subsection Displaying spacing

@cindex espaciado, presentación del
@funindex annotate-spacing

Para presentar gráficamente las dimensiones de las variables de
disposición vertical que pueden verse alteradas por el formato de la
página, establezca @code{annotate-spacing} en el bloque @code{\paper}:

@c need to have \book{} otherwise we get the separate systems. -hwn
@lilypond[verbatim,quote]
#(set-default-paper-size "a6" 'landscape)
\book {
  \score { { c4 } }
  \paper { annotate-spacing = ##t }
}
@end lilypond

@noindent
Todas las dimensiones de disposición se muestran en espacios de
pentagrama, independientemenre de las unidades especificadas en los
bloques @code{\paper} o @code{\layout}.  Por ejemmplo,
@code{paper-height} tiene un valor de 59.75 espacios de pentagrama,
usando el tamaño predeterminado de pentagrama de 20 puntos, que
equivale a 148 milímetros, la altura de una hoja de papel @code{a6} en
orientación apaisada.  Las parejas (@var{a},@var{b}) son intervalos,
donde @var{a} es el límite inferior y @var{b} es el límite superior
del intervalo.


@seealso

Fragmentos de código:
@rlsr{Spacing}.


@node Changing spacing
@subsection Changing spacing

La salida de @code{annotate-spacing} revela las dimensiones verticales
con gran detalle.  Para ver más detalles acerda de la modificación de
los márgenes y otras variables de diseño de la página, consulte
@ref{Page formatting}.

Aparte de los márgenes, hay algunas otras opciones para ahorrar espacio:

@itemize
@item
Forzar los sistemas para que se junten lo más posible entre sí (de
forma que quepan la mayor cantidad de ellos en la página) y al mismo
tiempo estén espaciados de forma que no exista un espacio vacío en la
parte baja del papel.

@example
\paper @{
  between-system-padding = #0.1
  between-system-space = #0.1
  ragged-last-bottom = ##f
  ragged-bottom = ##f
@}
@end example

@item
Forzar el número de sistemas.  Por ejemplo, si la disposición
predeterminada tiene 11 sistemas, la asignación siguiente fuerza una
disposición con 10 sistemas.

@example
\paper @{
  system-count = #10
@}
@end example

@item
Evitar (o reducir en número) los objetos que aumentan el tamaño
vertical de un sistema.  Por ejemplo, las repeticiones de primera y
segunda vez (o repeticiones con finales alternativos) necesitan
espacio adicional.  Si estas repeticiones se reparten a lo lardo de
dos sistemas, ocupan más espacio que un sistema con las casillas de
repetición y otro sistema sin ellas.  Por ejemplo, las indicaciones
dinámicas que se @q{salen} de un sistema se pueden acercar al
pentagrama:

@lilypond[verbatim,quote,relative=1]
e4 c g\f c
\override DynamicText #'extra-offset = #'( -2.2 . 2.0)
e4 c g\f c
@end lilypond

@item
Alterar el espaciado horizontal por medio de @code{SpacingSpanner}.
Para ver más detalles, consulte @ref{Changing horizontal spacing}.  El
ejemplo siguiente ilustra el espaciado predeterminado:

@lilypond[verbatim,quote]
\score {
  \relative c'' {
    g4 e e2 |
    f4 d d2 |
    c4 d e f |
    g4 g g2 |
    g4 e e2 |
  }
}
@end lilypond

@noindent
El ejemplo siguiente modifica @code{common-shortest-duration} de un
valor de @code{1/4} (negra) a @code{1/2} (blanca).  La negra es la
nota más común y la más breve del ejemplo, por lo que al agrandar esta
duración se produce un efecto de @q{apretujamiento}:

@lilypond[verbatim,quote]
\score {
  \relative c'' {
    g4 e e2 |
    f4 d d2 |
    c4 d e f |
    g4 g g2 |
    g4 e e2 |
  }
  \layout {
    \context {
      \Score
      \override SpacingSpanner
        #'common-shortest-duration = #(ly:make-moment 1 2)
    }
  }
}
@end lilypond

@noindent
La propiedad @code{common-shortest-duration} no se puede modificar de
manera dinámica, por lo que se debe situar siemmpre dentro de un
bloque @code{\context} de forma que se aplique a la partitura
completa.

@end itemize


@seealso

Referencia de la notación:
@ref{Page formatting},
@ref{Changing horizontal spacing}.

Fragmentos de código:
@rlsr{Spacing}.
