@c -*- coding: utf-8; mode: texinfo; documentlanguage: es -*-

@ignore
    Translation of GIT committish: b29e4a7ec4796951eb92b596fd04b9f7f719ab02

    When revising a translation, copy the HEAD committish of the
    version that you are working on.  For details, see the Contributors'
    Guide, node Updating translation committishes..
@end ignore

@c \version "2.25.23"

@ignore
GDP TODO list

Negative numbers are allowed:
> Are you sure? The following works well
> \paper{
>   first-page-number = -2
> }
> and prints page number -1 on the second page, for example.


Clarify
https://sourceforge.net/p/testlilyissues/issues/68/

@end ignore


@part Problemas de espaciado

@node Page layout
@anchor{Spacing issues} @c retain old label
@chapter Disposición de la página

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 estimación 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.

Hay dos tipos de bloques que pueden contener ajustes de
disposición: @code{\paper @{@dots{}@}} y @code{\layout
@{@dots{}@}}.  El bloque @code{\paper} contiene ajustes de
disposición de la página que se espera sean los mismos para todas
las partituras de un libro o parte de libro, como la altura de la
hoja o si se imprimen los números de página, etc.  Véase @ref{Page
layout}.  El bloque @code{\layout} contiene ajustes de disposición
de la partitura, como el número de sistemas que utilizar, o la
separación entre grupos de pentagramas, etc.  @xref{Score layout}.




@node The paper block
@section El bloque @code{\paper}

Los bloques @code{\paper} pueden aparecer en tres lugares
diferentes para formar una jerarquía descendente de bloques
@code{\paper}:

@itemize

@item
Al principio del archivo de entrada, antes de cualquier bloque
@code{\book}, @code{\bookpart}, o @code{\score}.

@item
Dentro de un bloque @code{\book} pero fuera de cualquier bloque
@code{\bookpart} o @code{\score} que estén dentro de ese libro.

@item
Dentro de un bloque @code{\bookpart} pero fuera de cualquier
bloque @code{\score} que esté dentro de esa parte de libro.

@end itemize

No se puede poner un bloque @code{\paper} dentro de un bloque
@code{\score}.

Los valores de los campos filtran esta jerarquía, persistiendo los
valores establecidos más arriba en la jerarquía a no ser que se
sobreescriban por algún valor establecido más abajo en la
jerarquía.

Pueden aparecer varios bloques @code{\paper} en cada uno de los
niveles, por ejemplo como parte de distintos archivos incluidos
con @code{\include}.  Si es el caso, los campos en cada nivel se
combinan, tomando precedencia los campos que aparecen más tarde si
se producen campos duplicados.

Entre los ajustes que pueden aparecer dentro de un bloque
@code{\paper} están los siguientes:

@itemize

@item
la función de Scheme @code{set-paper-size},

@item
variables de @code{\paper} utilizadas para personalizar la
disposición de la página, y

@item
definiciones de marcado utilizadas para personalizar la
disposición de los encabezamientos, pies y títulos.

@end itemize

La función @code{set-paper-size} se estudia en la sección
siguiente, @ref{Paper size and automatic scaling}.  Las variables
de @code{\paper} que se ocupan de la disposición de la página se
estudian en secciones posteriores.  Las definiciones de elementos
de marcado que se encargan de los encabezamientos, pies y títulos
se estudian en @ref{Custom titles headers and footers}.

Casi todas las variables de @code{\paper} funcionan solamente
dentro de un bloque @code{\paper}.  Las pocas que funcionan
también en un bloque @code{\layout} están relacionadas en @ref{The
layout block}.

Excepto cuando se especifica lo contrario, todas las variables de
@code{\paper} que corresponden a distancias sobre la página se
miden en milímetros, a no ser que el usuario especifique unas
unidades diferentes.  Por ejemplo, la declaración siguiente
establece el margen superior @code{top-margin} a diez milímetros:

@example
\paper @{
  top-margin = 10
@}
@end example

Para fijarlo en @code{0.5} pulgadas, utilice el sufijo de unidades
@code{\in}:

@example
\paper @{
  top-margin = 0.5\in
@}
@end example

Los sufijos de unidades que están disponibles son @code{\mm},
@code{\cm}, @code{\in} @code{\pt} y @code{\bp}.  Estas unidades
son valores simples para convertir a partir de milímetros; están
definidos en @file{ly/@/paper-@/defaults-@/init.ly}.  Por
claridad, al usar milímetros, se suele escribir el sufijo
@code{\mm} aunque no es necesario técnicamente.

También es posible definir valores de @code{\paper} utilizando
Scheme.  El equivalente de Scheme del ejemplo anterior es:

@example
\paper @{
  #(define top-margin (* 0.5 in))
@}
@end example

@cindex predefinido, variables de papel
@cindex papel, variable, predefinida

Por último, también se pueden predefinir variables del papel.

@example
bigMargin = \paper @{ top-margin = 10\cm @}

\paper @{
  \bigMargin
  indent = 0\mm
@}
@end example

@morerefs
Referencia de la notación:
@ref{Paper size and automatic scaling},
@ref{Custom titles headers and footers},
@ref{The layout block}.

Archivos instalados:
@file{ly/paper-defaults-init.ly}.
@endmorerefs


@need 1500
@node Paper size and automatic scaling
@section Tamaño del papel y escalado automático

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

@funindex \paper


@node Setting paper size
@subsection Fijar el tamaño del papel

@q{A4} es el valor predeterminado si no se establece ningún tamaño
de página explícitamente.  Sin embargo, existen dos funciones que
se pueden usar para modificarlo:

@table @code
@item set-default-paper-size

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

que siempre se debe colocar en el ámbito superior, y

@item set-paper-size

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

que se debe colocar siempre dentro de un bloque @code{\paper}.
@end table

Si se usa la función @code{set-default-paper-size} en el ámbito
superior jerárquico, debe ir antes de cualquier bloque
@code{\paper}.  @code{set-@/default-@/paper-@/size} establece el tamaño
de todas las páginas, mientras que @code{set-@/paper-@/size} establece
solo 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 solo se aplica a ese
libro.

Cuando se usa la función @code{set-paper-size}, se debe colocar
@emph{antes} de cualquier otra función que se utilice dentro del
mismo bloque @code{\paper}.  Véase
@ref{Automatic scaling to paper size}.

Los tamaños de página están definidos en el archivo
@file{scm/paper.scm}; @pxref{Predefined paper sizes} para ver la
lista de todos los tamaños de papel disponibles.

Tanto @code{set-default-paper-size} como @code{set-paper-size}
también aceptan una pareja de números con comilla como argumento
para fijar un tamaño del papel personalizado.  Por ejemplo

@example
#(set-default-paper-size '(cons (* 100 mm) (* 50 mm)))
@end example

@noindent
establece la anchura y altura del papel a 100@dmn{mm} y
50@dmn{mm}, respectivamente.

Las unidades posibles son @code{in} (pulgadas), @code{cm}
(centímetros), @code{mm} (milímetros), @code{pt} (puntos) y
@code{bp} (puntos grandes).

@cindex papel, tamaño, orientación
@cindex página, orientación de la
@cindex papel, tamaño, apaisado

Si se añade el símbolo @code{'landscape} como segundo argumento a
la función del tamaño de la página, el papel se gira 90 grados y
se adapta la anchura de las líneas de acuerdo a ello.

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

Se pueden intercambiar las dimensiones del papel @emph{sin que la
impresión resulte girada} (como cuando se imprime en tamaño
tarjeta postal, o al crear gráficos para su inclusión en lugar de
un documento independiente) añadiendo @samp{landscape} después del
nombre del propio tamaño del papel:

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

Cuando el tamaño del papel termina de forma explícita con
@samp{landscape} o con @samp{portrait}, la presencia de un símbolo
@code{'landscape} @emph{solamente} afecta a la orientación de la
impresión, no a las dimensiones del papel que se usan para la
disposición.

@morerefs
Referencia de la notación:
@ref{Automatic scaling to paper size},
@ref{Predefined paper sizes}.

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


@node Automatic scaling to paper size
@subsection Escalado automático al tamaño del papel

Si se cambia el tamaño del papel con una de las funciones de
Scheme (@code{set-default-paper-size} o @code{set-paper-size}),
los valores de algunas variables de @code{\paper} se escalan
automáticamente al nuevo tamaño.  Para sortear el escalado
automático para una variable determinada, fije el valor de la
variable después de establecer el tamaño del papel.  Observe que
el escalado automático no se activa mediante el ajuste de las
variables @code{paper-height} o de @code{paper-width}, incluso
aunque @code{paper-width} puede influir sobre otros valores (esto
es distinto al escalado y se estudia más abajo).  Las funciones
@code{set-default-paper-size} y @code{set-paper-size} se describen
en @ref{Setting paper size}.

Las dimensiones verticales afectadas por el escalado automático
son @code{top-margin} y @code{bottom-margin} (véase @ref{Fixed
vertical spacing paper variables}).  Las dimensiones horizontales
afectadas por el escalado automático son @code{left-margin},
@code{right-margin}, @code{inner-margin}, @code{outer-margin},
@code{binding-offset}, @code{indent} y @code{short-indent} (véase
@ref{Horizontal spacing paper variables}).

Los valores predeterminados para estas dimensiones están fijados
en el archivo @file{ly/paper-defaults-init.ly}, usando variables
internas llamadas @code{top-margin-default},
@code{bottom-margin-default}, etc.  Estos son los valores que
resultan del tamaño predeterminado del papel @code{a4}.  Como
referencia, con el papel @code{a4} la altura @code{paper-height}
es @code{297\mm} y la anchura @code{paper-width} es @code{210\mm}.

@morerefs
Referencia de la notación:
@ref{Fixed vertical spacing paper variables},
@ref{Horizontal spacing paper variables}.

Archivos de inicio:
@file{ly/paper-defaults-init.ly},
@file{scm/paper.scm}.
@endmorerefs


@node Fixed vertical spacing paper variables
@section Variables de espaciado de @code{\paper} verticales fijas

@warning{Algunas dimensiones de @code{@bs{}paper} se escalan
automáticamente al tamaño del papel, lo que puede llevar a un
comportamiento no esperado.  Véase
@ref{Automatic scaling to paper size}.}

Los valores predeterminados (previos al escalado) están definidos
en el archivo @file{ly/@/paper-defaults-init.ly}.

@table @code
@item paper-height (altura del papel)
@funindex paper-height

Altura de la página, no fijada de forma predeterminada.  Observe
que el escalado automático de algunas dimensiones verticales no
resulta afectado por esto.

@item top-margin (margen superior)
@funindex top-margin

Margen entre el extremo superior de la página y la parte superior
de la zona imprimible.  Si se modifica el tamaño del papel, el
valor predeterminado de esta dimensión se escala de acuerdo con
ello.

@item bottom-margin (margen inferior)
@funindex bottom-margin

Margen entre la parte inferior de la zona imprimible y el extremo
inferior de la página.  Si se modifica el tamaño del papel, se
escala de acuerdo con ello el valor predeterminado de esta
dimensión.

@item ragged-bottom (sin justificar por abajo)
@funindex ragged-bottom

Si esto se fija a @code{#t}, los sistemas se disponen según
su espaciado natural, ni comprimido ni ampliado verticalmente para
rellenar la página.

@item ragged-last-bottom (sin justificar la última por abajo)
@funindex ragged-last-bottom

Si se establece a @code{#f}, entonces la última página (tanto
del documento como de cada sección que se hubiera creado con un
bloque @code{\bookpart}) se justifica verticalmente de la misma
forma que las páginas anteriores.
@end table

@morerefs
Referencia de la notación:
@ref{Automatic scaling to paper size}.

Archivos de inicio:
@file{ly/paper-defaults-init.ly}.

Fragmentos de código:
@rlsrnamed{Spacingnotes,Espaciado}.
@endmorerefs

@knownissues
Los títulos (extraídos del bloque @code{\header}) se tratan como
sistemas, así pues @code{ragged-bottom} y
@code{ragged-last-bottom} aumentan la separación entre los títulos
y el primer sistema de la partitura.

Los tamaños de papel definidos explícitamente sobreescriben
cualquier ajuste de los márgenes superior o inferior definidos por
el usuario.


@node Flexible vertical spacing paper variables
@section Variables de espaciado de @code{\paper} verticales flexibles

En casi todos los casos es preferible que las distancias
verticales entre ciertos elementos (como márgenes, títulos,
sistemas y las distintas partituras) sean flexibles, de manera que
se amplíen y compriman adecuadamente dependiendo de la situación.
Están disponibles un cierto número de variables del bloque
@code{\paper} (relacionadas más abajo) para realizar un ajuste
fino del comportamiento de estas dimensiones frente a su
ampliación o compresión.

Observe que las variables de @code{\paper} que se estudian en esta
sección no controlan el espaciado de los pentagramas que están
dentro de los sistemas individuales.  El espaciado dentro de los
sistemas se controla por medio de propiedades de grob, con ajustes
que se escriben normalmente dentro de un bloque @code{\score} o
@code{\layout}, y no dentro del bloque @code{\paper}.  Véase
@ref{Flexible vertical spacing within systems}.


@node Structure of flexible vertical spacing alists
@subsection Estructura de las listas-A de espaciado vertical flexible

Cada una de las variables de espaciado de @code{\paper} flexibles
es una lista-A (lista asociativa) que contiene cuatro
@emph{claves}:

@itemize

@item
@code{basic-distance} (distancia básica):
distancia vertical, medida en espacios de pentagrama, entre los
@emph{puntos de referencia} de los dos elementos, cuando no
resulte ninguna colisión, y no se produzca ninguna ampliación o
compresión.  El punto de referencia de un elemento de marcado (de
título o del nivel jerárquico superior) es su punto más alto, y el
punto de referencia de un sistema es el centro vertical del
@code{StaffSymbol} más cercano (incluso si se trata de una línea
que no es un pentagrama, como un contexto @code{Lyrics}).  Los
valores de @code{distancia básica} menores de @code{padding} o de
@code{minimum-distance} no son significativos, porque la distancia
resultante nunca será menor que @code{padding} o que
@code{minimum-distance}.

@item
@code{minimum-distance} (distancia mínima):
la distancia vertical mínima permitida, medida en espacios de
pentagrama, entre los puntos de referencia de los dos elementos,
cuando se produce una compresión.  Los valores de
@code{minimum-distance} menores de @code{padding} no son
significativos, porque la distancia resultante nunca será menor de
@code{padding}.

@c TODO: explain skylines somewhere and xref to it from here.

@item
@code{padding} (relleno):
mínimo espacio vertical vacío necesario entre los rectángulos
circundantes (o las líneas de horizonte) de los dos elementos,
medido en espacios de pentagrama.

@item
@code{stretchability} (ampliabilidad):
medida sin unidades de la propensión relativa de esta dimensión a
ampliarse.  Si es cero, la distancia no se ampliará (a no ser que
resultasen colisiones).  Si es positiva, la significación del
valor de ampliabilidad de una dimensión concreta depende solamente
de su relación con los valores de @code{stretchability} de las
otras dimensiones.  Por ejemplo, si una dimensión tiene el doble
de @code{stretchability} que otra, se ampliará con el doble de
facilidad.  Los valores deben ser no negativos y finitos.  El
valor @code{+inf.0} desencadena un error de programación y se
ignora, pero se puede usar @code{1.0e7} para un muelle casi
infinitamente ampliable.  Si no se fija un valor, el valor
predeterminado se establece a @code{basic-distance}.  Observe que
la propensión de la dimensión a @emph{comprimirse} no se puede
establecer directamente por el usuario y es igual a
(@code{basic-distance}@tie{}@minus{}@tie{}@code{minimum-distance}).

@end itemize

Si una página tiene un margen inferior no justificado, la
distancia resultante es la mayor de:

@itemize

@item
@code{basic-distance},

@item
@code{minimum-distance}, y

@item
@code{padding} más la menor distancia necesaria para eliminar las
colisiones.

@end itemize

Para partituras de varias páginas con la parte inferior no
justificada en la última página, ésta usará el mismo espaciado que
la página anterior siempre y cuando haya espacio suficiente para
ello.

Los métodos específicos para la modificación de las listas-A se
estudian en @ref{Modifying alists}.  El siguiente
ejemplo muestra las dos formas en que pueden modificarse estas
listas-A.  La primera declaración actualiza un par clave-valor
individualmente, y la segunda redefine la variable completamente:

@example
\paper @{
  system-system-spacing.basic-distance = 8
  score-system-spacing =
    #'((basic-distance . 12)
       (minimum-distance . 6)
       (padding . 1)
       (stretchability . 12))
@}
@end example


@node List of flexible vertical spacing paper variables
@subsection Lista de variables de espaciado de @code{\paper} verticales flexibles

Los nombres de estas variables siguen el formato
@code{@var{superior}-@var{inferior}-spacing}, donde
@code{@var{superior}} e @code{@var{inferior}} son los elementos
que van a ser espaciados.  Cada distancia se mide entre los puntos
de referencia de los dos elementos (véase más arriba la
descripción de la estructura de la lista-A).  Observe que en estos
nombres de variable, el término @q{@code{markup}} se refiere tanto
a @emph{elementos de marcado de título} (@code{bookTitleMarkup} o
@code{scoreTitleMarkup}) como a @emph{elementos de marcado del
nivel superior} (véase @ref{File structure}).  Todas las
distancias se miden en espacios de pentagrama.

Los ajustes predeterminados están definidos en el archivo
@file{ly/paper-defaults-init.ly}.

@c TODO: Where do headers/footers fit in? -mp

@table @code
@item markup-system-spacing
@funindex markup-system-spacing

distancia entre un elemento de marcado (de título o del nivel
superior) y el sistema que le sigue.

@item score-markup-spacing
@funindex score-markup-spacing

distancia entre el último sistema de una partitura y el elemento
de marcado (de título o del nivel superior) que le sigue.

@item score-system-spacing
@funindex score-system-spacing

distancia entre el último sistema de una partitura y el primer
sistema de la partitura que le sigue, cuando no existe ningún
elemento de marcado (de título o del nivel superior) entre ellos.

@item system-system-spacing
@funindex system-system-spacing

distancia entre dos sistemas dentro de la misma partitura.

@item markup-markup-spacing
@funindex markup-markup-spacing

distancia entre dos elementos de marcado (de título o del nivel
superior).

@item last-bottom-spacing
@funindex last-bottom-spacing

distancia desde el último sistema o elemento de marcado del nivel
superior en una página, hasta la parte inferior de la zona
imprimible (es decir, el extremo superior del margen inferior).

@item top-system-spacing
@funindex top-system-spacing

distancia desde la parte superior de la zona imprimible (es decir,
el extremo inferior del margen superior) hasta el primer sistema
de una página, cuando no hay ningún elemento de marcado (de título
o del nivel superior) entre los dos.

@item top-markup-spacing
@funindex top-markup-spacing

distancia desde el extremo superior de la zona imprimible (es
decir, el extremo inferior del margen superior) hasta el primer
elemento de marcado (de título o del nivel superior) sobre una
página, cuando no hay ningún sistema entre los dos.
@end table

@morerefs
Referencia de la notación:
@ref{Flexible vertical spacing within systems}.

Archivos de inicio:
@file{ly/paper-defaults-init.ly}.

Fragmentos de código:
@rlsrnamed{Spacingnotes,Espaciado}.
@endmorerefs


@node Horizontal spacing paper variables
@section Variables de espaciado de @code{\paper} horizontales

@warning{Algunas dimensiones de @code{@bs{}paper} se escalan
automáticamente al tamaño del papel, lo que puede dar lugar a un
comportamiento distinto al esperado.  Véase
@ref{Automatic scaling to paper size}.}


@node paper variables for widths and margins
@subsection Variables de @code{\paper} para la anchura y los márgenes

Los valores predeterminados (antes del escalado) que no están
relacionados aquí se encuentran definidos en el archivo
@file{ly/@/paper-defaults-init.ly}.

@table @code

@item paper-width (anchura del papel)
@funindex paper-width

Anchura de la página, sin fijar de forma predeterminada.  Aunque
@code{paper-width} no tiene ningún efecto sobre el escalado
automático de algunas dimensiones horizontales, sí influye sobre
la variable @code{line-width}.  Si están establecidas las dos
variables @code{paper-width} y @code{line-width}, entonces también
se actualizan @code{left-margin} y @code{right-margin}.  Véase
también @code{check-consistency}.

@item line-width (longitud de la línea)
@funindex line-width

Cuando se especifica dentro de un bloque @code{\paper}, define las
dimensiones horizontales del espacio disponible para las líneas
del pentagrama en los sistemas sin sangrado por la izquierda.  Si
se deja sin especificar, la longitud @code{line-width} del papel
se determina a partir de
@code{(paper-width@tie{}@minus{}@tie{}left-margin@tie{}@minus{}@tie{}right-margin)}.
Si se especifica la longitud @code{line-width} del papel, y no se
especifican el margen izquierdo @code{left-margin} ni el margen
derecho @code{right-margin}, entonces los márgenes se actualizan
de forma que los sistemas se centran automáticamente sobre la
página.  Véase también @code{check-consistency}.

Los valores de @code{line-width} para las partituras individuales
se pueden especificar dentro de los bloques @code{\layout} de las
partituras.  Estos valores controlan la longitud de las líneas
producidas partitura a partitura.  Si la longitud
@code{line-width} no se especifica para una partitura, su valor
predeterminado es el @code{line-width} del bloque paper.  El hecho
de fijar la longitud @code{line-width} de una partitura no tiene
efecto sobre los márgenes del papel.  Las líneas del pentagrama,
de una longitud determinada por el valor @code{line-width} de la
partitura, se alinean por la izquierda dentro del área definida
por la longitud @code{line-width} del papel.  Si la longitud
@code{line-width} del papel y de la partitura son iguales, las
líneas del pentagrama se extienden exactamente desde el margen
izquierdo hasta el margen derecho, pero si la longitud
@code{line-width} de la partitura es mayor que la
@code{line-width} del papel, las líneas del pentagrama se
imprimirán encima del espacio reservado al margen derecho.

@item left-margin (margen izquierdo)
@funindex left-margin

Margen entre el extremo izquierdo de la página y el comienzo de
las líneas del pentagrama en los sistemas sin sangrado.  Si el
tamaño del papel se modifica, el valor predeterminado de esta
dimensión se escala de acuerdo con ello.  Si no se fija el valor
de @code{left-margin}, y tanto @code{line-width} como
@code{right-margin} están fijados, entonces se establece el valor
de @code{left-margin} a
@code{(paper-width@tie{}@minus{}@tie{}line-width@tie{}@minus{}@tie{}right-margin)}.
Si solamente está fijado @code{line-width}, entonces los dos
márgenes se establecen a
@code{((paper-width@tie{}@minus{}@tie{}line-width)@tie{}/@tie{}2)},
y como consecuencia los sistemas se centran sobre la página.
Véase también @code{check-consistency}.

@item right-margin (margen derecho)
@funindex right-margin

Margen entre el extremo derecho de la página y el final de las
líneas del pentagrama en sistemas justificados.  Si el tamaño de
la página se modifica, el valor predeterminado de esta dimensión
se escala de acuerdo con ello.  Si @code{right-margin} está sin
fijar, y tanto @code{line-width} como @code{left-margin} están
fijados, el valor de @code{right-margin} se establece a
@code{(paper-width@tie{}@minus{}@tie{}line-width@tie{}@minus{}@tie{}left-margin)}.
Si solamente está fijado @code{line-width}, los dos márgenes se
establecen a
@code{((paper-width@tie{}@minus{}@tie{}line-width)@tie{}/@tie{}2)},
y como consecuencia los sistemas aparecen centrados sobre la
página.  Véase también @code{check-consistency}.

@item check-consistency (comprobar la consistencia)
@funindex check-consistency

Si esto es verdadero (su valor predeterminado), se imprime una
advertencia en caso de que la suma de @code{left-margin},
@code{line-width} y @code{right-margin} no coincida exactamente
con el valor de @code{paper-width}, y se sustituye cada uno de
estos valores (excepto @code{paper-width}) con su valor
predeterminado (escalado al tamaño del papel si es necesario).  Si
está fijado a @code{#f}, se ignora cualquier inconsistencia y se
permite que los sistemas se salgan del borde del papel.

@item ragged-right (no justificar por la derecha)
@funindex ragged-right

Si está fijado a @code{#t}, los sistemas no cubren el ancho
de la línea.  En lugar de ello, los sistemas finalizan en su
longitud horizontal natural.  Valor predeterminado: @code{#t} para
las partituras con un solo sistema, y @code{#f} para partituras
que tienen dos o más sistemas.  Esta variable también se puede
establecer dentro de un bloque @code{\layout}.

@item ragged-last (no justificar el último)
@funindex ragged-last

Si está fijado a @code{#t}, el último sistema de la
partitura no llena toda la anchura de la línea.  En lugar de ello,
el último sistema finaliza en su longitud horizontal natural.
Valor predeterminado: @code{#f}.  Esta variable también puede
ajustarse dentro de un bloque @code{\layout}.

@end table

@morerefs
Referencia de la notación:
@ref{Automatic scaling to paper size}.

Archivos de inicio:
@file{ly/paper-defaults-init.ly}.
@endmorerefs

@knownissues
Los tamaños de papel definidos explícitamente sobreescriben
cualquier ajuste de los márgenes izquierdo o derecho definidos por
el usuario.


@node paper variables for two-sided mode
@subsection Variables de @code{\paper} para el modo de doble cara

Los valores predeterminados (antes del escalado) se definen en
@file{ly/paper-defaults-init.ly}.

@table @code

@item two-sided (dos caras)
@funindex two-sided

@cindex encuadernación
@cindex margen de encuadernación

Si tiene el valor @code{#t}, utilizar @code{inner-margin},
@code{outer-margin} y @code{binding-offset} para determinar los
márgenes dependiendo de si el número de la página es par o impar.
Esto sobreescribe a @code{left-margin} y a @code{right-margin}.

@item inner-margin (margen interno)
@funindex inner-margin

Margen que todas las páginas tienen en el lado interno si forman
parte de un libro.  Si el tamaño del papel se modifica, el valor
predeterminado de esta dimensión se escala de acuerdo con ello.
Solamente funciona con @code{two-sided} fijado a @code{#t}.

@item outer-margin (margen externo)
@funindex outer-margin

Margen que todas las páginas tienen en el lado externo si forman
parte de un libro.  Si el tamaño del papel se modifica, el valor
predeterminado de esta dimensión se escala de acuerdo con ello.
Solamente funciona con @code{two-sided} fijado a @code{#t}.

@item binding-offset (margen de encuadernación)
@funindex binding-offset

Medida en que se aumenta @code{inner-margin} para asegurar que no
se oculta nada a causa de la encuadernación.  Si el tamaño del
papel se modifica, el valor predeterminado de esta dimensión se
escala de acuerdo con ello.  Solamente funciona con
@code{two-sided} fijado a @code{#t}.

@end table

@morerefs
Referencia de la notación:
@ref{Automatic scaling to paper size}.

Archivos de inicio:
@file{ly/paper-defaults-init.ly}.
@endmorerefs


@node paper variables for shifts and indents
@subsection Variables de @code{\paper} para desplazamientos y sangrados

Los valores predeterminados (antes del escalado) que no se
relacionan aquí están definidos en el archivo
@file{ly/@/paper-@/defaults-@/init.ly}.

@table @code

@item horizontal-shift (desplazamiento horizontal)
@funindex horizontal-shift

@c This default value is buried in the middle of page.scm.  -mp

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 (sangrado)
@funindex indent

Nivel de sangrado para el primer sistema de una partitura.  Si se
modifica el tamaño del papel, el valor predeterminado de esta
dimensión se escala de acuerdo con ello.  El espacio dentro de
@code{line-width} que está disponible para el primer sistema se
reduce en esta cantidad.  @code{indent} se puede también
especificar dentro de los bloques @code{\layout} para ajustar los
sangrados partitura a partitura.

@item short-indent (sangrado reducido)
@funindex short-indent

Nivel de sangrado para todos los sistemas de una partitura excepto
el primero.  Si el tamaño del papel se modifica, el valor
predeterminado de esta dimensión se escala de acuerdo con ello.
El espacio dentro de @code{line-width} que está disponible para
los sistemas que no son el primero, se reduce en esta cantidad.
También se puede especificar @code{short-indent} dentro de los
bloques @code{\layout} para ajustar los sangrados reducidos
partitura a partitura.

@end table

@morerefs
Referencia de la notación:
@ref{Automatic scaling to paper size}.

Archivos de inicio:
@file{ly/paper-defaults-init.ly}.

Fragmentos de código:
@rlsrnamed{Spacingnotes,Espaciado}.
@endmorerefs


@need 1000
@node Other paper variables
@section Otras variables de @code{\paper}


@node paper variables for line breaking
@subsection Variables de @code{\paper} para los saltos de línea

@table @code

@item max-systems-per-page
@funindex max-systems-per-page

Número máximo de sistemas que se colocan sobre una página.  Solo
está contemplado por el algoritmo @code{ly:optimal-breaking}.
Valor predeterminado: no fijado.

@item min-systems-per-page
@funindex min-systems-per-page

Número mínimo de sistemas que se colocan sobre una página.  Puede
causar que las páginas aparezcan atiborradas si el valor es
demasiado grande En el momento actual solo está contemplado por el
algoritmo @code{ly:optimal-breaking}.  Valor predeterminado: no
fijado.

@item systems-per-page
@funindex systems-per-page

Número de sistemas que se deben colocar en cada página.  En el
momento actual solo está contemplado por el algoritmo
@code{ly:optimal-breaking}.  Valor predeterminado: no fijado.

@item system-count
@funindex system-count

Número de sistemas que utilizar para una partitura. Valor
predeterminado: no fijado.  Esta variables también se puede
ajustar dentro de un bloque @code{\layout}.

@end table

@morerefs
Referencia de la notación:
@ref{Line breaking}.
@endmorerefs


@node paper variables for page breaking
@subsection Variables de @code{\paper} para los saltos de página

Los valores predeterminados que no están relacionados aquí, se
definen en el archivo @file{ly/paper-defaults-init.ly}

@table @code

@item page-breaking
@funindex page-breaking

Algoritmo de saltos de página que utilizar.  Se puede elegir entre
@code{ly:@/minimal-@/breaking}, @code{ly:@/page-@/turn-@/breaking},
@code{ly:@/one-@/page-@/breaking}, @code{ly:@/one-@/line-@/breaking},
@code{ly:@/one-@/line-@/auto-@/height-@/breaking} y
@code{ly:@/optimal-@/breaking}.
El predeterminado es @code{ly:@/optimal-@/breaking}.

@item page-breaking-system-system-spacing
@funindex page-breaking-system-system-spacing

Engaña a la parte del programa encargada de los saltos de página
para que piense que @code{system-system-spacing} está establecido
a un valor distinto al que tiene realmente.  Por ejemplo, si
@code{page-@/breaking-@/system-@/system-@/spacing.padding} está
establecido a algo que es mucho mayor que
@code{system-@/system-@/spacing.padding}, entonces el divisor de
páginas pone menos sistemas en cada página.  Valor predeterminado:
sin ajustar.

@item page-count
@funindex page-count

Número de páginas que utilizar en una partitura.  Por omisión: no
establecido.

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

Cuando se usa el algoritmo @code{ly:optimal-breaking} para los
saltos de página, LilyPond tiene que hacer varias negociaciones
entre los estiramientos horizontal y vertical de forma que el
espaciado sea lo más aceptable posible en términos generales.
Este parámetro controla la 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}.

@end table

Las siguientes variables son efectivas solamente cuando
@code{page-breaking} está sijado a
@code{ly:@/page-@/turn-@/breaking}.  Los saltos de página se
seleccionan entonces de forma que se minimice el número de pasos
de página.  Dado que los pasos de página son necesarios cuando se
pasa de una página impar a una página par, normalmente resultará
favorecida aquella disposición en que la última página sea impar.
Los lugares en que se prefieran pasos de página pueden indicarse
manualmente insertando @code{\allowPageTurn} o automáticamente
incluyendo el grabador @code{Page_turn_engraver} (véase
@ref{Optimal page turning}).

Si no hay un número suficiente de posibilidades para escoger a la
hora de insertar unos pasos de página adecuados, LilyPond puede
insertar una página vacía dentro de una partitura, entre
partituras (si hay dos o más partituras) o finalizando una
partitura en una página de numeración par.  Los valores de las
tres siguientes variables pueden incrementarse para que estas
acciones se vuelvan menos probables.

Los valores son penalizaciones, es decir, cuando más alto es el
valor menos probable será la acción asociada relativa a otras
posibilidades.

@table @code

@item blank-page-penalty (penalización por página vacía)
@funindex blank-page-penalty

Penalización por tener una página vacía en mitad de una partitura.
Si @code{blank-@/page-@/penalty} es grande y está seleccionado
@code{ly:page-turn-breaking}, entonces será menos probable que
LilyPond inserte una página en medio de una partitura.  En lugar
de ello, intercala espacio en la música hasta que se rellene la
página vacía y la siguiente.  Predeterminado: 5.

@item blank-last-page-penalty (penalización por última página vacía)
@funindex blank-last-page-penalty

Penalización por terminar la partitura sobre una página par.  Si
@code{blank-@/last-@/page-@/penalty} es grande y está seleccionado
@code{ly:page-turn-breaking}, entonces será menos probable que
LilyPond produzca una partitura en que la última página tenga
numeración par.  En su lugar, ajustará el espaciado de manera que
use una página más o una página menos.  Predeterminado: 0.

@item blank-after-score-page-penalty (penalización por página vacía después de una partitura)
@funindex blank-after-score-page-penalty

Penalización por tener una página vacía después del final de una
partitura y antes de la siguiente.  De forma predeterminada, esta
penalización es más pequeña que @code{blank-page-penalty}, de
forma que se insertan páginas vacías después de las partituras
como preferencia sobre la inserción de páginas vacías dentro de
una partitura.  Predeterminado: 2.

@end table


@morerefs
Referencia de la notación:
@ref{Page breaking},
@ref{Optimal page breaking},
@ref{Optimal page turning},
@ref{Minimal page breaking},
@ref{One-page page breaking},
@ref{One-line page breaking},
@ref{One-line-auto-height page breaking}.

Archivos de inicio:
@file{ly/paper-defaults-init.ly}.
@endmorerefs


@node paper variables for page numbering
@subsection Variables de @code{\paper} para la numeración de las páginas

Los valores predeterminados que no se relacionan aquí están
definidos en el archivo @file{ly/paper-defaults-init.ly}

@table @code

@item auto-first-page-number
@cindex número, de página, automático
@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 a @code{#t}, 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 first-page-number
@cindex número, de página, especificar el primero
@funindex first-page-number

Valor del número de página en la primera página.

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

Si está fijado a @code{#t}, se imprime un número de página en la
primera página.

@item print-page-number
@cindex número, de página, suprimir
@funindex print-page-number

Si está fijado a @code{#f}, no se imprimen los números de página.


@item page-number-type
@cindex números de página, romanos
@funindex page-number-type

Tipo de numeración para los números de las páginas.  Se puede
elegir entre @code{'arabic}, @code{'roman-ij-lower},
@code{'roman-ij-upper}, @code{'roman-lower} y @code{'roman-upper}.
Por omisión: @code{'arabic}.

@item bookpart-level-page-numbering
@cindex página, número, por parte de libro
@cindex página, número, independiente para la introducción
@funindex bookpart-level-page-numbering

Si está fijado a @code{#t}, cada parte de libro tiene su propia
secuencia independiente de números de página, empezando por
@code{first-page-number} (por omisión@tie{}1).

Esto también se puede usar para una sola parte de libro.  El
escenario típico es numerar las páginas de la primera parte de
libro independientemente y en números romanos, como se haría en la
introducción analítica de la obra que se está publicando.

@example
\book @{
  \bookpart @{
    \paper @{
      bookpart-level-page-numbering = ##t
      page-number-type = #'roman-lower
    @}
    \markuplist \wordwrap-lines @{
      Lorem ipsum dolor sit amet.
    @}
  @}
  \bookpart @{
    @dots{}
  @}
@}
@end example

@end table

@morerefs
Archivos de inicio:
@file{ly/paper-defaults-init.ly}.
@endmorerefs

@knownissues
Los números de página impares siempre están a la derecha.  Si
quiere que la música comience en la página@tie{}1 debe haber una
página en blanco en el reverso de la página de cubierta de manera
que la página@tie{}1 esté en el lado derecho.


@node paper variables concerning headers and markups
@subsection Variables de @code{\paper} relativas a los encabezamientos y marcados

@table @code

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

Si está fijado a @code{#t}, imprime todos los encabezamientos para
cada una de las partituras @code{\score} de la salida. Normalmente
solo se imprimen las variables de encabezamiento @code{piece} y
@code{opus}.  Para ver casos de uso consulte @ref{Titles and
headers}.  Valor predeterminado: @code{#f}.

@item reset-footnotes-on-new-page
@funindex reset-footnotes-on-new-page

Si está establecido a @code{#t}, los números de las notas al pie
se reinician después de cada salto de página.  Si queremos notas
al pie numeradas consecutivamente por encima de los saltos de
página, hay que establecerlo a @code{#f}. Valor por omisión:
@code{#t}.

@item system-separator-markup
@funindex system-separator-markup

@funindex \slashSeparator

Objeto de marcado que se inserta entre los sistemas.  Se suele
usar para partituras orquestales.  Predeterminado: sin establecer.
El elemento de marcado @code{\slashSeparator}, definido en el
archivo @file{ly/titling-init.ly}, se aporta como un valor
predeterminado adecuado, por ejemplo:

@lilypond[quote,verbatim,noragged-right,line-width=30\mm]
#(set-default-paper-size "a8")

\book {
  \paper {
    system-separator-markup = \slashSeparator
  }
  \header {
    tagline = ##f
  }
  \score {
    \relative { c''1 \break c1 \break c1 }
  }
}
@end lilypond

@item footnote-separator-markup
@funindex footnote-separator-markup

Un objeto de marcado que se inserta por encima de los textos de la
nota al pie en la parte inferior de la página.  Por omisión: una
línea horizontal centrada, definida en
@file{ly/paper-defaults-init.ly}.

@end table

@morerefs
Archivos de inicio:
@file{ly/titling-init.ly},
@file{ly/paper-defaults-init.ly}.

Fragmentos de código:
@rlsrnamed{Spacingnotes,Espaciado}.
@endmorerefs

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

@node paper variables for debugging
@subsection Variables de @code{\paper} para la depuración

@funindex debug-beam-scoring
@funindex debug-slur-scoring
@funindex debug-tie-scoring

Las variables @code{debug-beam-scoring}, @code{debug-slur-scoring}
y @code{debug-tie-scoring} permiten imprimir información de
depuración para las puntuaciones de las barras y las ligaduras de
unión y de expresión.  Consulte @rcontrib{Debugging scoring
algorithms} para ver una explicación detallada de qué hacen esas
variables.


@node Score layout
@chapter Disposición de la partitura

Esta sección trata de las opciones de disposición de la partitura
para el bloque @code{\layout}.


@node The layout block
@section El bloque @code{\layout}

@funindex \layout

Así como el bloque @code{\paper} contiene ajustes relativos al
formateo de la página para todo el documento, el bloque
@code{\layout} contiene ajustes para la disposición específica de
las partituras.  Para fijar las opciones de disposición de
partituras de forma global, escríbalas en un bloque @code{\layout}
del nivel jerárquico superior.  Para fijar opciones de disposición
para una partitura individual escríbalas dentro de un bloque
@code{\layout} dentro del bloque @code{\score}, después de la
música.  Entre los ajustes que pueden aparecer en un bloque
@code{\layout} se encuentran los siguientes:

@itemize
@item la función de Scheme @code{layout-set-staff-size},
@item las modificaciones de contexto de los bloques @code{\context}, y
@item las variables de @code{\paper} que afectan a la disposición de la partitura.
@end itemize

La función @code{layout-set-staff-size} se estudia en la sección
siguiente, @ref{Setting the staff size}. Las modificaciones de
contexto se estudian en un capítulo distinto; véase @ref{Modifying
context plug-ins} y @ref{Changing context default settings}.

@cindex paper variables, in @code{\layout} block
@cindex @code{\layout}, and paper variables

Las variables de @code{\paper} que pueden aparecer dentro de un
bloque @code{\layout}, son como sigue.

@itemize

@item
@code{line-width}, @code{ragged-right} y @code{ragged-last} (véase
@ref{paper variables for widths and margins})

@item
@code{indent} y @code{short-indent}
(véase @ref{paper variables for shifts and indents})

@item
@code{system-count}
(véase @ref{paper variables for line breaking})

@end itemize

@noindent
Los valores predeterminados para las variables anteriores se toman
del bloque @code{\paper}.

He aquí un ejemplo de un bloque @code{\layout}:

@example
\layout @{
  indent = 2\cm
  \context @{
    \StaffGroup
    \override StaffGrouper.staff-staff-spacing.basic-distance = 8
  @}
  \context @{
    \Voice
    \override TextScript.padding = 1
    \override Glissando.thickness = 3
  @}
@}
@end example

Se pueden escribir varios bloques @code{\layout} como expresiones
del nivel superior.  Esto puede ser útil, por ejemplo, si hay
distintos ajustes almacenados en diversos archivos y se incluyen
opcionalmente.  Internamente, cuando se evalúa un bloque
@code{\layout}, se hace una copia de la configuración de
@code{\layout} actual, y después se aplican los cambios definidos
en el bloque; el resultado se guarda como la nueva configuración
actual.  Desde el punto de vista del usuario, los bloques
@code{\layout} se combinan, pero en situaciones de conflicto
(cuando se cambia la misma propiedad en diferentes bloques) las
definiciones más tardías toman precedencia.

Por ejemplo: si este bloque:

@example
\layout @{
  \context @{
    \Voice
    \override TextScript.color = #magenta
    \override Glissando.thickness = 1.5
  @}
@}
@end example

@noindent
se coloca después del del ejemplo anterior, las sobreescrituras de
@code{padding} y de @code{color} para @code{TextScript} se
combinan, pero la última sobreescritura @code{thickness} para
@code{Glissando} sustituye (u oculta) a la anterior.

Los bloques @code{\layout} se pueden asignar a variables para una
reutilización posterior, pero la forma en que esto funciona es
ligera y significativamente diferente del hecho de escribirlas
literalmente.

Si se define una variable de la siguiente manera

@example
variable_de_Layout = \layout @{
  \context @{
    \Voice
    \override NoteHead.font-size = 4
  @}
@}
@end example

@noindent
guarda la configuración actual de @code{\layout} con la
sobreescritura añadida de @code{NoteHead.font-size}, pero esta
combinación @emph{no} se guarda como la nueva configuración
actual.  Tenga en cuenta que la @q{configuración actual} se lee
cuando la variable se define y no cuando se usa, de manera que el
contenido de la variable depende de su posición dentro del código
fuente.

La variable se puede entonces usar dentro de otro bloque
@code{\layout}, por ejemplo:

@example
\layout @{
  \variable_de_layout
  \context @{
    \Voice
    \override NoteHead.color = #red
  @}
@}
@end example

Un bloque @code{\layout} que contiene una variable, como en el
ejemplo anterior, @emph{no} copia la configuración actual, sino
que en lugar de ello usa el contenido de
@code{\variable_de_layout} como la configuración base para
adiciones posteriores.  Esto significa que cualquier cambio
definido entre la definición y el uso de la variable, se pierde.

Si la @code{variable_de_layout} se define (o se incluye con
@code{\include}) inmediatamente antes de que se utilice, su
contenido es sencillamente la configuración en curso más las
sobreescrituras que se hayan definido dentro de él.  Así pues, en
el ejemplo anterior que muestra el uso de
@code{\variable_de_layout} el último bloque @code{\layout}
consistiría en

@example
TextScript.padding = 1
TextScript.color = #magenta
Glissando.thickness = 1.5
NoteHead.font-size = 4
NoteHead.color = #red
@end example

@noindent
más las sobreescrituras de @code{indent} y de @code{StaffGrouper}.

Pero si la variable ya hubiera sido definida antes del primer
bloque @code{\layout} la configuración actual contendría ahora
solamente

@example
  NoteHead.font-size = 4  % escrita en la definición de la variable
  NoteHead.color = #red   % añadida después del uso de la variable
@end example

Si se planifica cuidadosamente, las variables de @code{\layout}
pueden ser una herramienta valiosa para estructurar el diseño de
la disposición de las fuentes, y también para reiniciar la
configuración de @code{\layout} a un estado conocido.

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

Fragmentos de código:
@rlsrnamed{Spacingnotes,Espaciado}.
@endmorerefs


@node Setting the staff size
@section Establecer el tamaño del pentagrama

@cindex tipografía, fijar el tamaño de
@cindex pentagrama, fijar el tamaño de
@cindex disposición, archivo de
@funindex magnification->font-size
@funindex magstep


El @dfn{tamaño de pentagrama} predeterminado es de 20 puntos,
que corresponde a una altura del pentagrama de 7.03@dmn{mm} (un punto
es 100/7227 de pulgada, o 2540/7227@dmn{mm}).  El tamaño del pentagrama
se puede modificar de tres formas:

@enumerate

@item
@funindex set-global-staff-size
Para establecer globalmente el tamaño del pentagrama para todas
las partituras de un archivo, utilice @code{set-global-staff-size}:

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

@noindent
El ejemplo de arriba establece el tamaño global predeterminado del
pentagrama a 14@dmn{pt} (4.92@dmn{mm}) y escala todas las
tipografías según corresponda.

La función también se puede usar para fijar diferentes tamaños del
pentagrama para cada bloque @code{\book}:

@example
#(set-global-staff-size 30)
\book @{
  @{ c' @}
@}

#(set-global-staff-size 10)
\book @{
  @{ c' @}
@}
@end example

@item
@funindex layout-set-staff-size
Para fijar el tamaño del pentagrama para una sola partitura dentro
de un libro, use @code{layout-set-staff-size} dentro del bloque
@code{\layout} de dicha partitura:

@example
\score @{
  @dots{}
  \layout @{
    #(layout-set-staff-size 14)
  @}
@}
@end example

@item
@funindex \magnifyStaff
Para fijar el tamaño del pentagrama para una sola pauta dentro de
un sistema, use la instrucción @code{\magnifyStaff}.  Por ejemplo,
las partituras de música de cámara editadas de la forma
tradicional, con piano, usan habitualmente pautas de 7@dmn{mm} para el
piano, mientras que los otros pentagramas suelen estar entre 3/5 y
5/7 de reducción (entre el 60% y el 71%).  Para obtener la
proporción de 5/7, escriba:

@example
\score @{
  <<
    \new Staff \with @{
      \magnifyStaff #5/7
    @} @{ @dots{} @}
    \new PianoStaff @{ @dots{} @}
  >>
@}
@end example

En caso de que usted sepa qué tamaño de @code{fontSize} quiere
usar, puede emplear la forma siguiente:

@example
\score @{
  <<
    \new Staff \with @{
      \magnifyStaff #(magstep -3)
    @} @{ @dots{} @}
    \new PianoStaff @{ @dots{} @}
  >>
@}
@end example

Para imitar la apariencia de las ediciones tradicionales, es mejor
evitar reducir el grosor de las líneas del pentagrama.

@end enumerate


@subheading Peso automático de la tipografía a distintos tamaños

La tipografía Emmentaler ofrece el conjunto de glifos musicales
@emph{Feta} en ocho tamaños distintos, cada uno de ellos ajustado
a un tamaño de pentagrama.  Cuanto más pequeño es el tamaño de los
glifos, más @qq{pesados} se vuelven, de manera que armonicen con
las líneas del pentagrama, que son también relativamente más
gruesas.  Los tamaños de glifo recomendados se relacionan en la
tabla siguiente:

@multitable @columnfractions .15 .2 .22 .5

@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

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

Fragmentos de código:
@rlsrnamed{Spacingnotes,Espaciado}.
@endmorerefs

@knownissues

Si se usa @code{\magnifyStaff} solo para algunos pentagramas de un
@code{StaffGroup}, los objetos gráficos @code{BarLine} ya no se
alinean, a causa de las propiedades de @code{BarLine} alteradas
@code{thick-thickness}, @code{hair-thickness} y @code{kern}.

@lilypond[quote,ragged-right,verbatim]
\new StaffGroup
  <<
    \new Staff \with { \magnifyStaff #1/2 } { b1 \bar "|." }
    \new Staff { b }
  >>
@end lilypond

Podemos cancelar el agrandamiento de los objetos gráficos
@code{BarLine}, imitarlos en otros pentagramas o aplicar valores
intermedios para cada @code{Staff}.

@lilypond[quote,ragged-right,verbatim]
#(define bar-line-props
  '((BarLine thick-thickness)
    (BarLine hair-thickness)
    (BarLine kern)))

mus = { b1 \bar "|."}

\markup "Cancel \\magnifyStaff for bar lines:"
\new StaffGroup
  <<
    \new Staff
      \with {
        \magnifyStaff #1/2
        #(revert-props 'magnifyStaff 0 bar-line-props)
      }
      \mus
    \new Staff
      \mus
  >>

\markup "Mimic \\magnifyStaff on other staves:"
\new StaffGroup
  <<
    \new Staff
      \with { \magnifyStaff #1/2 }
      \mus
    \new Staff
      \with {
        #(scale-props 'magnifyStaff 1/2 #t bar-line-props)
      }
      \mus
  >>

\markup "Apply an intermediate value to all staves:"
\new StaffGroup
  <<
    \new Staff
      \with {
        \magnifyStaff #1/2
        #(scale-props 'magnifyStaff 3/2 #t bar-line-props)
      }
      \mus
    \new Staff
      \with {
        #(scale-props 'magnifyStaff 3/4 #t bar-line-props)
      }
      \mus
  >>
@end lilypond


@need 1500
@node Breaks
@chapter Saltos


@node Line breaking
@section Saltos de línea

@cindex salto de línea, manual
@cindex salto de línea

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.

@funindex \break

Para forzar manualmente un salto de línea sobre la línea
divisoria, utilice la instrucción @code{\break}:

@lilypond[quote,ragged-right,verbatim]
\relative c'' {
  c4 c c c | \break
  c4 c c c |
}
@end lilypond

De manera predeterminada, solo se permiten los saltos en las
líneas divisorias.  También hay otros factores que pueden impedir
el salto en una determinada línea divisoria:

@itemize
@item
una cabeza de nota o un silencio que continúa más allá de la línea
divisoria,
@item
la presencia de un objeto de extensión @q{indivisible}, como una
barra o un glissando, que cruza la línea divisoria.
@end itemize

@funindex \allowBreak

La instrucción @code{\break} fuerza un salto en todo caso, sin que
importe si hay una línea divisoria o cualquier otro factor.
También es posible puentear todos estos factores usando la
instrucción @code{\allowBreak}.  En el ejemplo siguiente, los
saltos están permitidos en cualquier sitio, incluso en mitad de un
compás, y a pesar de la presencia de barras de corchea.

@lilypond[verbatim,quote]
\repeat unfold 56 { c'8 \allowBreak }

\paper {
  indent = 0
  line-width = 135\mm
}
@end lilypond

Si vemos que estamos usando muchas veces @code{\allowBreak},
podemos impedir que algunos de los factores que hemos mencionado
bloqueen la posibilidad de saltos.

@itemize
@item
@code{Bar_@/engraver} prohibe los saltos entre barras de compás
cuando @code{forbidBreakBetweenBarLines} está establecido al valor
@code{#t}.  Para inhibir esto, fijamos la propiedad al valor
@code{#f}.

@lilypond[quote,verbatim]
\fixed c' {
  c8 d e f g a b c'
}

\layout {
  \context {
    \Score
    forbidBreakBetweenBarLines = ##f
  }
}

\paper {
  indent = 0
  line-width = 30\mm
}
@end lilypond

@item
Se puede hacer que las notas y silencios que se extienden por
encima de las líneas divisorias no supriman los saltos, quitando
el grabador @code{Forbid_@/line_@/break_@/engraver} del contexto
@code{Voice}.

@lilypond[quote,verbatim]
\new Voice \with {
  \remove Forbid_line_break_engraver
} \relative {
  c''2. \tuplet 3/2 { c4 c c } c2.
}

\paper {
  indent = 0
  line-width = 35\mm
}
@end lilypond

@item
La presencia de barras de corchea y otros objetos de extensión
indivisibles se ignora si su propiedad @code{breakable} está
estblecida al valor @code{#t}.

@lilypond[quote,verbatim]
\relative c'' {
  \override Beam.breakable = ##t
  c2. c8[ c |
  c8 c] c2. |
}

\paper {
  indent = 0
  line-width = 35\mm
}
@end lilypond
@end itemize

@funindex \noBreak

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

@funindex \autoBreaksOff
@funindex \autoBreaksOn
@funindex \autoLineBreaksOff
@funindex \autoLineBreaksOn

Dentro de una partitura, se evitan los saltos de línea automáticos
dento de la música que se encuentra entre las instrucciones
@code{\autoLineBreaksOff} y @code{\autoLineBreaksOn}.  Si también
se quieren evitar los saltos de página automáticos, deben usarse
las instrucciones @code{\autoBreaksOff} y @code{\autoBreaksOn}.
Los saltos manuales no están afectados por estas instrucciones.
Observe que el hecho de inhibir los saltos de línea automáticos
puede hacer que la música se extienda sobre el margen derecho si
no cabe completamente dentro de una sola línea.

Los saltos automáticos de línea (no de página) se pueden habilitar
sobre líneas divisorias individuales mediante el uso de
@code{\once \autoLineBreaksOn} en una barra.  La instrucción
identifica un salto de línea permitido, en lugar de uno prohibido.

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 @code{#t} 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 solo a la última línea de la pieza.

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

@cindex salto de línea, a intervalos
@cindex música de cuatro compases por línea

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 solo en dichos lugares:

@example
<<
  \repeat unfold 7 @{
    s1 \noBreak s1 \noBreak
    s1 \noBreak s1 \break
  @}
  @{ @var{la música real@dots{}} @}
>>
@end example


@predefined
@code{\break},
@code{\allowBreak},
@code{\noBreak},
@code{\autoBreaksOff},
@code{\autoBreaksOn},
@code{\autoLineBreaksOff},
@code{\autoLineBreaksOn}.
@endpredefined


@snippets

@cindex voz adicional, para la gestión de los saltos
@cindex adicional, voz, para gestionar saltos
@cindex salto de página, gestión con una voz adicional
@cindex línea, salto, gestión con una voz adicional
@lilypondfile[verbatim,quote,ragged-right,texidoc,doctitle]
{snippets/using-an-extra-voice-for-breaks.ly}


@morerefs
Referencia de la notación:
@ref{paper variables for line breaking},
@ref{The layout block}.

Fragmentos de código:
@rlsrnamed{Spacingnotes,Espaciado}.

Referencia de funcionamiento interno:
@rinternals{LineBreakEvent}.
@endmorerefs

@knownissues

Si se escribe @code{\autoLineBreaksOff} o @code{\autoBreaksOff}
antes de cualquier contenido musical, aparecerán mensajes de
error.  Escriba siempre estas instrucciones después de algo de
música.


@node Page breaking
@section Saltos de página

Esta sección describe los distintos métodos para crear saltos de
página, y cómo modificarlos.


@node Manual page breaking
@subsection Saltos de página manuales

@funindex \pageBreak
@funindex \noPageBreak
@funindex \autoPageBreaksOn
@funindex \autoPageBreaksOff
@cindex página, saltos manuales

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 en dicha
línea divisoria.  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.

Dentro de una partitura, no se producen saltos de página
automáticos en el interior de la música que se encuentra entre las
instrucciones @code{\autoPageBreaksOff} y
@code{\autoPageBreaksOn}.  Los saltos de página manuales no
reultan afectados por estas instrucciones.

Hay ajustes análogos a @code{ragged-right} y @code{ragged-last}
que tienen el mismo efecto sobre el espaciado vertical.  Si
@code{ragged-bottom} se establece a @code{#t} los sistemas no se
justifican verticalmente.  Cuando el valor de
@code{ragged-last-bottom} se fija a @code{#t}, como lo está de
forma predeterminada, se permite una separación al final de la
última página (o la última página de cada uno de las partes de
libro @code{\bookpart}).  Véase
@ref{Fixed vertical spacing paper variables}.

Los saltos de página se calculan por medio de la función
@code{page-breaking}.  LilyPond ofrece varios algoritmos para el
cómputo de los saltos de página, entre ellos
@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 @{
  page-breaking = #ly:page-turn-breaking
@}
@end example

@funindex \bookpart

Cuando un libro tiene muchas partituras y páginas, puede ser
difícil resolver el problema de los saltos de página, necesitando
mucha memoria y prolongados tiempos de procesamiento.  Para
facilitar el proceso de división en páginas, se usan los bloques
@code{\bookpart} para dividir el libro en varias partes: los
saltos de página se producen de manera independiente en cada
parte.  También se pueden usar diferentes funciones de división en
páginas para las distintas partes del libro.

@example
\bookpart @{
  \header @{
    subtitle = "Prefacio"
  @}
  \paper @{
     %% En una parte que consiste en texto principalmente,
     %% puede ser preferible ly:minimal-breaking
     page-breaking = #ly:minimal-breaking
  @}
  \markup @{ @dots{} @}
  @dots{}
@}
\bookpart @{
  %% En esta parte, consistente en música, se usa la función
  %% óptima predeterminada de saltos de página.
  \header @{
    subtitle = "Primer movimiento"
  @}
  \score @{ @dots{} @}
  @dots{}
@}
@end example

@predefined
@code{\pageBreak},
@code{\noPageBreak},
@code{\autoPageBreaksOn},
@code{\autoPageBreaksOff}.
@endpredefined

@morerefs
Referencia de la notación:
@ref{paper variables for page breaking}.

Fragmentos de código:
@rlsrnamed{Spacingnotes,Espaciado}.
@endmorerefs

@knownissues

El prefijo @code{\once} no es efectivo con
@code{\autoPageBreaksOn} y @code{\autoPageBreaksOff}.  Si se ha
desactivado la división automática de páginas y después se vuelve
a activar para permitir un salto, debe continuar activada durante
algunos compases (cuyo número exacto dependerá de la partitura)
antes de volverse a desactivar, pues en caso contrario podría
perderse la oportunidad de que el salto se produzca.

@node Optimal page breaking
@subsection Saltos de página óptimos

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

@morerefs
Fragmentos de código:
@rlsrnamed{Spacingnotes,Espaciado}.
@endmorerefs


@node Minimal page breaking
@subsection Saltos de página mínimos

@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 @{
  page-breaking = #ly:minimal-breaking
@}
@end example

@morerefs
Snippets:
@rlsrnamed{Spacingnotes,Espaciado}.
@endmorerefs


@node One-page page breaking
@subsection Saltos de página del tipo página única

@funindex ly:one-page-breaking

La función @code{ly:one-page-breaking} (saltos de página única) es
un algoritmo de saltos de página de proósito especial que ajusta
automáticamente la altura de la página para que quepa toda la
música en una sola página.  La variable @code{paper-height} del
bloque @code{paper} se ignora, pero los otros ajustes funcionan de
la manera acostumbrada.  Concretamente, el espaciado entre el
último sistema (o elemento de marcado de nivel superior) y el pie
de página se puede personalizar con @code{last-bottom-spacing}
dentro del bloque @code{paper}. La anchura de la página se queda
sin alterar por omisión, pero se puede fijar con la variable
@code{paper-width} del bloque @code{paper}.

@knownissues
@code{ly:one-page-breaking} no es compatible, de momento, con
@code{\bookpart}.


@node One-line page breaking
@subsection Saltos de página de línea única

@funindex ly:one-line-breaking

La función @code{ly:one-line-breaking} es un algoritmo de saltos
de página para uso especial que pone cada partitura en una página
y en una sola línea.  Esta función de salto de página no compone
los títulos ni los márgenes; solamente se imprime la partitura.

El ancho de la página se ajusta de forma que la partitura más
larga quepa en una línea.  Concretamente, las variables
@code{paper-width}, @code{line-width} y @code{indent} del bloque
@code{\paper} se ignoran, aunque @code{left-margin} y
@code{right-margin} aún se respetan.  La altura de la página se
deja sin cambios.


@node One-line-auto-height page breaking
@subsection Saltos de página del tipo línea única con altura automática

@funindex ly:one-line-auto-height-breaking

La función @code{ly:one-line-auto-height-breaking} funciona igual
que @code{ly:one-line-breaking} excepto que la altura de la página
se modifica automáticamente para hacerse corresponder con la
altura de la música.  De forma específica, la variable
@code{paper-height} del bloque @code{\paper} se ajusta de tal
manera que abarca los extremos superior e inferior de la partitura
más alta más los márgenes superior e inferior @code{top-margin} y
@code{bottom-margin}.

Observe que el ajuste @code{top-system-spacing} afecta a la
posición vertical de la música.  Fíjelo al valor @code{#f} dentro
de un bloque @code{paper} para disponer la música sencillamente
entre los márgenes superior e inferior.


@node Optimal page turning
@subsection Paso de página óptimo

@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 solo 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 busca
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 pageTurnMinimumRestLength
El grabador @code{Page_turn_engraver} lee la propiedad de contexto
@code{pageTurnMinimumRestLength} para determinar qué longitud debe
tener una sección sin notas antes de que se considere la
posibilidad de un paso de página.  El valor predeterminado para
@code{pageTurnMinimumRestLength} es @code{1}.  Si
quiere inhabilitar las vueltas de página, fíjelo a algún valor
@q{muy grande}.

@example
\new Staff \with @{ \consists Page_turn_engraver @}
@{
  a4 b c d |
  R1 | % aquí se permite un salto de página
  a4 b c d |
  \set Staff.pageTurnMinimumRestLength = #5/2
  R1 | % aquí no se permite un salto de página
  a4 b r2 |
  R1*2 | % aquí se permite un salto de página
  a1
@}
@end example

@funindex pageTurnMinimumRepeatLength

Al usar repeticiones de primera y segunda vez, el grabador
@code{Page_turn_engraver} solo 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. Si la
repetición es demasiado corta, se puede usar el grabador
@code{Page_turn_engraver} para @emph{inhabilitar} los pasos de
página mediante el establecimiento de un valor adecuado para la
propiedad de contexto @code{pageTurnMinimumRepeatLength}.  En
este caso el grabador @code{Page_turn_engraver} solo permitirá los
pases de página en las repeticiones cuya duración sea mayor que el
valor especificado.

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, dentro de elementos de marcado
del nivel superior y entre las partituras.

@predefined
@funindex \pageTurn
@funindex \noPageTurn
@funindex \allowPageTurn

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

@morerefs
Referencia de la notación:
@ref{paper variables for line breaking}.

Fragmentos de código:
@rlsrnamed{Spacingnotes,Espaciado}.
@endmorerefs

@knownissues
Utilice un solo grabador @code{Page_turn_engraver} en cada
partitura.  Si hay más de uno, se interferirán entre sí.


@morerefs
Notation Reference:
@ref{Vertical spacing}.

Fragmentos de código:
@rlsrnamed{Spacingnotes,Espaciado}.
@endmorerefs


@node Vertical spacing
@chapter Espaciado vertical

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


@node Flexible vertical spacing within systems
@section Espaciado vertical flexible dentro de los sistemas

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

Tres mecanismos distintos controlan el espaciado vertical flexible
dentro de los sistemas, uno por cada una de las categorías
siguientes:

@itemize

@item
@emph{pautas sin agrupar},

@item
@emph{pautas agrupadas} (pautas dentro de un grupo de pentagramas como
@code{ChoirStaff}, etc.), y

@item
@emph{líneas que no son pautas} (como @code{Lyrics},
@code{ChordNames}, etc.).

@end itemize

@c TODO: Clarify this.  This almost implies that non-staff lines
@c       have NO effect on the spacing between staves.  -mp

La altura de cada sistema se determina en dos fases.  Primero,
todos los pentagramas se disponen según la cantidad de espacio
vacío disponible.  Después, las líneas que no son pautas se
distribuyen entre las pautas.

Observe que los mecanismos de espaciado estudiados en esta sección
solamente controlan el espaciado vertical de las pautas y líneas
que no son pautas dentro de los sistemas individuales.  El
espaciado vertical entre distintos sistemas, partituras, marcados
y márgenes se controla mediante variables de @code{\paper} que se
estudian en @ref{Flexible vertical spacing paper variables}.


@node Within-system spacing properties
@subsection Propiedades de espaciado dentro de los sistemas

@funindex staff-affinity
@funindex staffgroup-staff-spacing
@funindex staff-staff-spacing
@funindex nonstaff-unrelatedstaff-spacing
@funindex nonstaff-relatedstaff-spacing
@funindex nonstaff-nonstaff-spacing
@funindex default-staff-staff-spacing
@funindex minimum-Y-extent
@funindex extra-offset
@funindex self-alignment-X
@funindex X-offset
@funindex VerticalAxisGroup
@funindex StaffGrouper

Los mecanismos de espaciado vertical dentro del sistema están
controlados por dos conjuntos de propiedades de grob.  El primer
conjunto está asociado con el grob @code{VerticalAxisGroup}, que
se crea por parte de todas las pautas y líneas que no son pautas.
El segundo conjunto está asociado con el grob @code{StaffGrouper},
que puede crearse por parte de los grupos de pentagramas, pero
solamente si se le llama explícitamente.  Estas propiedades se
describen individualmente al final de la presente sección.

Los nombres de estas propiedades (excepto para
@code{staff-affinity}) siguen el formato
@code{@var{elemento1}-@/@var{elemento2}-@/spacing}, donde
@code{@var{elemento1}} y @code{@var{elemento2}} son los elementos
que se van a espaciar.  Observe que @code{@var{elemento2}} no está
necesariamente por debajo de @code{@var{elemento1}}; por ejemplo,
@code{nonstaff-relatedstaff-spacing} mide hacia arriba a partir de
la línea del tipo no-pauta si @code{staff-affinity} es @code{UP}.

Cada distancia se mide entre los @emph{puntos de
referencia}@footnote{Esta redacción es un poco imprecisa.  Para
los contextos, las posiciones de los objetos gráficos a lo largo
del eje x se calculan por parte del algoritmo de espaciado de
LilyPond (usando objetos @code{PaperColumn} y otros parecidos para
la alineación); esto significa que la única información relevante
aquí es la posición vertical.  En otras palabras, un @q{punto} de
referencia de un contexto es la coordenada@tie{}y al que otros
objetos gráficos se alinean.} de los dos elementos.  El
@emph{punto de referencia} para un pentagrama y otro tipo de pauta
es el centro vertical de su @code{StaffSymbol} (es decir, la línea
central si @code{line-count} es un número impar; el espacio
central si @code{line-count} es par).  Los puntos de referencia
para las líneas individuales que no son pautas aparecen en la
tabla siguiente:

@indentedblock
@multitable {@b{Línea que no es una pauta}} {línea base del elemento más alto}
@headitem Línea que no es una pauta @tab Punto de referencia
@item @code{ChordNames}  @tab línea de base
@item @code{NoteNames}   @tab línea de base
@item @code{Lyrics}      @tab línea de base
@item @code{Dynamics}    @tab la mitad de la altura de la @q{m}
@item @code{FiguredBass} @tab línea base del elemento más alto
@item @code{FretBoards}  @tab línea superior
@end multitable
@end indentedblock

En la siguiente imagen, las líneas horizontales indican las
posiciones de estos puntos de referencia:

@lilypond[quote]
#(define zero-space '((padding . -inf.0) (basic-distance . 0)))

alignToZero = \with {
  \override VerticalAxisGroup.nonstaff-relatedstaff-spacing = #zero-space
  \override VerticalAxisGroup.nonstaff-nonstaff-spacing = #zero-space
  \override VerticalAxisGroup.staff-affinity = #DOWN

  \remove Text_engraver % avoid having two
  \consists Text_engraver
}

lowerCaseChords = \with {
  chordNameLowercaseMinor = ##t
}

labelContext =
#(define-music-function (context) (string?)
   #{ <>^\markup { \upright \typewriter #context } #})

\layout {
  \context { \ChordNames  \alignToZero \lowerCaseChords }
  \context { \Dynamics    \alignToZero }
  \context { \FiguredBass \alignToZero }
  \context { \FretBoards  \alignToZero }
  \context { \Lyrics      \alignToZero }
  \context { \NoteNames   \alignToZero }

  \context { \Score
    \omit BarLine
    \omit TimeSignature

    \override DynamicText.self-alignment-X = -0.5
    \override FretBoard.X-offset = 1.75
    \override LyricText.self-alignment-X = #LEFT
    \override TextScript.Y-offset = 3

    \textLengthOn
  }
}

%% These contexts have reference points at the baseline:
%%   ChordNames, NoteNames, and Lyrics
<<
  \chords { \labelContext "ChordNames  " g1:m }
  \new NoteNames { s1 | \labelContext "NoteNames  " g1 }
  \lyrics { \skip 1*2 | \labelContext "Lyrics" ghijk1 }
  \new RhythmicStaff \with { instrumentName = "baseline " } s1*3
>>

%% The reference point for Dynamics is the midline of 'm' in the font.
<<
  \new Dynamics { \labelContext "Dynamics" s1\mp s\fp }
  \new RhythmicStaff \with { instrumentName = "mid-height " } s1*2
>>

%% The reference point for FiguredBass is the baseline of the topmost
%% element.
<<
  \figures { \labelContext "FiguredBass" \figuremode { <6 4 2>1 } }
  \new RhythmicStaff \with { instrumentName = "top baseline " } s1
>>

%% The reference point for FretBoards is the top line
\include "predefined-guitar-fretboards.ly"
<<
  \new FretBoards { \labelContext "FretBoards" \chordmode { e1 } }
  \new RhythmicStaff \with { instrumentName = "top line " } s1
>>
@end lilypond

Cada una de las propiedades de grob del espaciado vertical
(excepto @code{staff-affinity}) usa la misma estructura de lista-A
que las variables de espaciado del bloque @code{\paper} que se han
estudiado en @ref{Flexible vertical spacing paper variables}.  En
@ref{Modifying alists} se estudian métodos específicos para la
modificación de las listas-A.  Las propiedades de los grobs deben
ajustarse con un @code{\override} dentro de un bloque
@code{\score} o @code{\layout}, y no dentro de un bloque
@code{\paper}.

El ejemplo que sigue muestra las dos maneras en que pueden
modificarse estas listas-A.  La primera declaración actualiza un
par clave-valor de forma individual, y la segunda redefine la
propiedad completamente:

@example
\new Staff \with @{
  \override VerticalAxisGroup
            .default-staff-staff-spacing.basic-distance = 10
@} @{ @dots{} @}

\new Staff \with @{
  \override VerticalAxisGroup.default-staff-staff-spacing =
    #'((basic-distance . 10)
       (minimum-distance . 9)
       (padding . 1)
       (stretchability . 10))
@} @{ @dots{} @}
@end example

Para modificar globalmente cualquiera de los ajustes de espaciado,
póngalos dentro del bloque @code{\layout}:

@example
\layout @{
  \context @{
    \Staff
    \override VerticalAxisGroup
              .default-staff-staff-spacing
              .basic-distance = 10
  @}
@}
@end example

Los ajustes estándar para las propiedades de grob del espaciado
vertical están relacionadas en @rinternals{VerticalAxisGroup} y en
@rinternals{StaffGrouper}.  Las sobreescrituras predeterminadas
para los tipos específicos de líneas que no son pautas están
relacionadas en las descripciones de contexto correspondientes en
@rinternals{Contexts}.


@subheading Propiedades del grob @code{VerticalAxisGroup}

Las propiedades de @code{VerticalAxisGroup} se suelen ajustar con
una instrucción @code{\override} en el nivel de @code{Staff} (o
equivalente).

@table @code
@item staff-staff-spacing

Se utiliza para determinar la distancia entre la pauta actual y la
pauta que está justo por debajo de ella dentro del mismo sistema,
incluso si hay más líneas que no son pautas (tales como
@code{Lyrics}) entre las dos pautas.  No se aplica a la pauta
inferior de un sistema.

Inicialmente, el valor de espaciado @code{staff-staff-spacing} de
un grupo @code{VerticalAxisGroup} es una función de Scheme que
aplica las propiedades del @code{StaffGrouper} si la pauta forma
parte de un grupo, o el @code{default-staff-staff-spacing} de la
pauta en caso contrario.  Esto hace posible que las pautas estén
espaciadas de forma diferente cuando están agrupadas.  Para
conseguir un espaciado regular sin importar el agrupamiento, esta
función se puede sustituir por una lista-A de espaciado flexible,
utilizando la forma de sobreescritura de redefinición completa que
se ha mostrado más arriba.  Si solo se especifican algunos valores
en una operación de sobreescritura, los valores que faltan se
toman de @code{default-staff-staff-spacing} (si tiene valores para
ellos).

@item default-staff-staff-spacing
Una lista-A de espaciado flexible que define el espacio
@code{staff-staff-spacing} que se usará para las pautas sin
agrupar, a no ser que se haya sobreescrito explícitamente
@code{staff-staff-spacing} con una instrucción @code{\override}.

@item staff-affinity
Dirección de la pauta que utilizar para el espaciado de la línea
actual que no es pauta.  Se puede elegir entre @code{UP} (arriba),
@code{DOWN} (abajo) y @code{CENTER} (centro).  Si es
@code{CENTER}, la línea del tipo no-pauta se coloca equidistante
entre las dos pautas contiguas a ambos lados, a no ser que lo
impidan colisiones u otras restricciones de espaciado.  Las líneas
del tipo no-pauta adyacentes han de llevar valores de
@code{staff-affinity} no crecientes desde la parte superior hasta
la inferior, p.ej. una línea del tipo no-pauta establecida a
@code{UP} no debería seguir inmediatamente a otra que esté
establecida a @code{DOWN}.  Las líneas del tipo no-pauta en la
parte superior de un sistema deben usar @code{DOWN}; las de la
parte inferior deben usar @code{UP}.  El ajuste de
@code{staff-affinity} para una pauta hace que se le trate como una
línea que no es una pauta.  El establecimiento de
@code{staff-affinity} a @code{#f} para una línea que no es una
pauta hace que se trate como una pauta.  Establecer
@code{staff-affinity} a @code{UP}, @code{CENTER}, o @code{DOWN}
hace que el pentagrama resulte espaciado como si fuera una línea
que no es una pauta.

@item nonstaff-relatedstaff-spacing
Distancia entre la línea del tipo no-pauta actual y la pauta más
próxima en la dirección de @code{staff-affinity}, si no hay
ninguna línea que no sea una pauta entre las dos, y
@code{staff-affinity} es @code{UP} o @code{DOWN}.  Si
@code{staff-affinity} es @code{CENTER}, entonces se usa
@code{nonstaff-relatedstaff-spacing} para las pautas más próximas
@emph{a los dos lados}, incluso aunque aparezcan otras líneas del
tipo no-pauta entre la pauta actual y una de las otras.  Esto
significa que la colocación de una línea que no es una pauta
depende tanto de las pautas que la rodean como de las líneas que
no son pautas y que la rodean.  Establecer la ampliabilidad
@code{stretchability} de uno de estos tipos de espaciado a un
valor más pequeño provoca que este espaciado domine.  El
establecimiento de @code{stretchability} a un valor mayor hace que
dicho espaciado tenga un menor efecto.

@item nonstaff-nonstaff-spacing
Distancia entre la línea actual del tipo no-pauta y la siguiente
línea del tipo no-pauta en la dirección de @code{staff-affinity},
si las dos están al mismo lado de la pauta relacionada, y
@code{staff-affinity} es @code{UP} o @code{DOWN}.

@item nonstaff-unrelatedstaff-spacing
Distancia entre la línea actual del tipo no-pauta y la pauta en la
dirección opuesta de @code{staff-affinity}, si no hay ninguna otra
línea del tipo no-pauta entre las dos, y @code{staff-affinity} es
@code{UP} o @code{DOWN}.  Se puede usar, por ejemplo, para
requerir una cantidad de relleno mínima entre una línea de
@code{Lyrics} y la pauta a la que no pertenece.
@end table

@subheading Propiedades del grob @code{StaffGrouper}

Las propiedades de @code{StaffGrouper} se suelen ajustar con una
instrucción @code{\override} en el nivel de @code{StaffGroup} (o
equivalente).

@table @code
@item staff-staff-spacing
Distancia entre pautas consecutivas dentro del grupo de pautas
actual.  La propiedad @code{staff-staff-spacing} del grob
@code{VerticalAxisGroup} de una pauta individual se puede
sobreescribir con distintos ajustes de espaciado para dicha pauta.

@item staffgroup-staff-spacing
Distancia entre la última pauta del grupo en curso y la pauta que
está justo por debajo de ella dentro del mismo sistema, incluso si
existen una o más líneas que no son pautas (tales como
@code{Lyrics}) entre las dos pautas.  No se aplica al pentagrama o
pauta inferior de un sistema.  La propiedad
@code{staff-staff-spacing} del grob @code{VerticalAxisGroup} de
una pauta individual se puede sobreescribir con distintos ajustes
de espaciado para dicha pauta.
@end table

@morerefs
Referencia de la notación:
@ref{Flexible vertical spacing paper variables},
@ref{Modifying alists}.

Archivos de inicio:
@file{ly/engraver-init.ly},
@file{scm/define-grobs.scm}.

Referencia de funcionamiento interno:
@rinternals{Contexts},
@rinternals{VerticalAxisGroup},
@rinternals{StaffGrouper}.
@endmorerefs


@node Spacing of ungrouped staves
@subsection Espaciado de pautas no agrupadas

Las @emph{pautas}, tales como los pentagramas (@code{Staff}),
pautas de percusión (@code{DrumStaff}) o de tablatura
(@code{TabStaff}), etc., son contextos que pueden contener uno o
más contextos de voz, pero no pueden contener otras pautas.

Las siguientes propiedades afectan al espaciado de las pautas
@emph{no agrupadas}:

@itemize
@item Propiedades de @code{VerticalAxisGroup}:
@itemize @minus{}
@item @code{default-staff-staff-spacing}
@item @code{staff-staff-spacing}
@end itemize
@end itemize

Estas propiedades de grob se describen individualmente más arriba;
véase @ref{Within-system spacing properties}.

Están implicadas ciertas propiedades adicionales para las pautas
que son parte de un grupo; véase
@ref{Spacing of grouped staves}.

El ejemplo siguiente muestra cómo la propiedad
@code{default-staff-staff-spacing} puede afectar al espaciado de
pautas no agrupadas.  Las mismas sobreescrituras aplicadas a
@code{staff-staff-spacing} tendrían el mismo efecto, pero también
se aplicaría en caso de que las pautas estuvieran combinadas en un
grupo o grupos.

@lilypond[verbatim,quote,staffsize=16]
\layout {
  \context {
    \Staff
    \override VerticalAxisGroup.default-staff-staff-spacing =
      #'((basic-distance . 8)
         (minimum-distance . 7)
         (padding . 1))
  }
}

<<
  % The very low note here needs more room than 'basic-distance
  % can provide, so the distance between this staff and the next
  % is determined by 'padding.
  \new Staff { b,2 r | }

  % Here, 'basic-distance provides enough room, and there is no
  % need to compress the space (towards 'minimum-distance) to make
  % room for anything else on the page, so the distance between
  % this staff and the next is determined by 'basic-distance.
  \new Staff { \clef bass g2 r | }

  % By setting 'padding to a negative value, staves can be made to
  % collide.  The lowest acceptable value for 'basic-distance is 0.
  \new Staff \with {
    \override VerticalAxisGroup.default-staff-staff-spacing =
      #'((basic-distance . 3.5)
         (padding . -10))
  } { \clef bass g2 r | }
  \new Staff { \clef bass g2 r | }
>>
@end lilypond

@morerefs
Archivos de inicio:
@file{scm/define-grobs.scm}.

Fragmentos de código:
@rlsrnamed{Spacingnotes,Espaciado}.

Referencia de funcionamiento interno:
@rinternals{VerticalAxisGroup}.
@endmorerefs


@node Spacing of grouped staves
@subsection Espaciado de pautas agrupadas

En partituras grandes como las orquestales, es común colocar los
pentagramas en grupos.  El espacio entre los grupos suele ser
mayor que el espacio que hay entre los pentagramas dentro del
mismo grupo.

Los grupos de pautas, @emph{Staff-groups}, tales como
@code{StaffGroup}, @code{ChoirStaff}, etc., son contextos que
pueden contener al mismo tiempo uno o más pentagramas o pautas.

Las siguientes propiedades afectan al espaciado de las pautas
dentro de los grupos:

@itemize
@item Propiedades de @code{VerticalAxisGroup}:
@itemize @minus{}
@item @code{staff-staff-spacing}
@end itemize
@item Propiedades de @code{StaffGrouper}:
@itemize @minus{}
@item @code{staff-staff-spacing}
@item @code{staffgroup-staff-spacing}
@end itemize
@end itemize

Estas propiedades de grob se describen individualmente más arriba;
véase @ref{Within-system spacing properties}.

El ejemplo siguiente muestra cómo pueden afectar las propiedades
del grob @code{StaffGrouper} al espaciado de las pautas agrupadas:

@lilypond[verbatim,quote,staffsize=16]
\layout {
  \context {
    \Score
    \override StaffGrouper.staff-staff-spacing.padding = 0
    \override StaffGrouper.staff-staff-spacing.basic-distance = 1
  }
}

<<
  \new PianoStaff \with {
    \override StaffGrouper
              .staffgroup-staff-spacing
              .basic-distance = 20
  } <<
    \new Staff { c'1 }
    \new Staff { c'1 }
  >>

  \new StaffGroup <<
    \new Staff { c'1 }
    \new Staff { c'1 }
  >>
>>
@end lilypond

@morerefs
Archivos de inicio:
@file{scm/define-grobs.scm}.

Fragmentos de código:
@rlsrnamed{Spacingnotes,Espaciado}.

Referencia de funcionamiento interno:
@rinternals{VerticalAxisGroup},
@rinternals{StaffGrouper}.
@endmorerefs


@node Spacing of non-staff lines
@subsection Espaciado de las líneas que no son pautas

Las @emph{líneas que no son pautas}, tales como @code{Lyrics},
@code{ChordNames}, etc., son contextos cuyos objetos de
presentación se imprimen como pentagramas (es decir, en líneas
horizontales dentro de los sistemas).  Específicamente, las líneas
que no son pautas son contextos del tipo no-pauta que contienen el
grabador @rinternals{Axis_group_engraver}.

Las siguientes propiedades afectan al espaciado de las líneas que
no son pautas:

@itemize
@item Propiedades de @code{VerticalAxisGroup}:
@itemize
@item @code{staff-affinity}
@item @code{nonstaff-relatedstaff-spacing}
@item @code{nonstaff-nonstaff-spacing}
@item @code{nonstaff-unrelatedstaff-spacing}
@end itemize
@end itemize

Estas propiedades de grob se describen individualmente más arriba;
véase @ref{Within-system spacing properties}.

El ejemplo siguiente muestra cómo la propiedad
@code{nonstaff-nonstaff-spacing} puede afectar el espaciado de
líneas consecutivas que no son pautas.  Aquí, mediante el
establecimiento de la clave de ampliabilidad @code{stretchability}
a un valor muy grande, la línea de letra es capaz de ampliarse
mucho más de lo que es usual:

@lilypond[verbatim,quote,staffsize=16]
\layout {
  \context {
    \Lyrics
    \override VerticalAxisGroup
              .nonstaff-nonstaff-spacing
              .stretchability = 1000
  }
}

\new StaffGroup
<<
  \new Staff \with {
    \override VerticalAxisGroup.staff-staff-spacing = #'((basic-distance . 30))
  } { c'1 }
  \new Lyrics \with {
    \override VerticalAxisGroup.staff-affinity = #UP
  } \lyricmode { up }
  \new Lyrics \with {
    \override VerticalAxisGroup.staff-affinity = #CENTER
  } \lyricmode { center }
  \new Lyrics \with {
    \override VerticalAxisGroup.staff-affinity = #DOWN
  } \lyricmode { down }
  \new Staff { c'1 }
>>
@end lilypond

@morerefs
Archivos de inicio:
@file{ly/engraver-init.ly},
@file{scm/define-grobs.scm}.

Fragmentos de código:
@rlsrnamed{Spacingnotes,Espaciado}.

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

Referencia de funcionamiento interno:
@rinternals{Contexts},
@rinternals{VerticalAxisGroup}.
@endmorerefs


@node Explicit staff and system positioning
@section Posicionamiento explícito de los pentagramas y los sistemas

@cindex posicionamiento exacto de las pautas
@cindex exacto, posicionamiento, de las pautas
@cindex pauta, posicionamiento exacto

@funindex line-break-system-details
@funindex NonMusicalPaperColumn

Es posible enfrentarse al espaciado vertical de una forma distinta
(comparado con lo que se ha visto en las secciones previas)
utilizando la propiedad @code{line-break-system-details} del
objeto gráfico @code{NonMusicalPaperColumn}.  Mientras que los
mecanismos del espaciado vertical flexible especifican relleno
vertical, @code{line-break-system-details} puede especificar
posiciones verticales exactas sobre la página.

Esta propiedad contiene cinco subpropiedades diferentes:
@code{X-offset} (desplazamiento en X) @code{Y-offset}
(desplazamiento en Y) @code{extra-offset} (desplazamiento
adicional) @code{alignment-distances} (distancias de alineación) y
@code{bottom-padding} (relleno por debajo).

Para entender cómo funciona cada uno de los distintos ajustes,
empezamos observando un ejemplo que no incluye absolutamente
ninguna sobreescritura.  Mantenemos aisladas tanto la información
de los saltos de línea como los de página en una voz dedicada a
ello, dividiendo la música en líneas de cinco compases cada una.
Esta técnica de crear una voz de saltos ayuda a mantener la
disposición separada de la escritura de notas conforme el ejemplo
se vuelve más complicado.  Consulte @ref{Breaks}.

@c \book { } is required in these examples to ensure the spacing
@c overrides can be seen between systems. -np

@lilypond[verbatim,quote,staffsize=11,papersize=a7]
\book {
  \score {
    <<
      \new Staff <<
        \new Voice {
          s1*5 \break
          s1*5 \break
          s1*5 \break }
        \new Voice { \repeat unfold 15 { c'4 c' c' c' } }
      >>
      \new Staff { \repeat unfold 15 { d'4 d' d' d' } }
    >>
  }
}
@end lilypond

A continuación fijamos los puntos de inicio vertical y horizontal
de cada sistema explícitamente usando las subpropiedades
@code{Y-offset} y @code{X-offset} de
@code{line-break-system-details}.

@lilypond[verbatim,quote,staffsize=11,papersize=a7]
\book {
  \score {
    <<
      \new Staff <<
        \new Voice {
          \once \override
            Score.NonMusicalPaperColumn
                 .line-break-system-details.Y-offset = 0
          s1*5 \break
          \once \override
            Score.NonMusicalPaperColumn
                 .line-break-system-details.Y-offset = 30
          \once \override
            Score.NonMusicalPaperColumn
                 .line-break-system-details.X-offset = 10
          s1*5 \break
          \once \override
            Score.NonMusicalPaperColumn
                 .line-break-system-details.Y-offset = 50
          s1*5 \break }
        \new Voice { \repeat unfold 15 { c'4 c' c' c' } }
      >>
      \new Staff { \repeat unfold 15 { d'4 d' d' d' } }
    >>
  }
}
@end lilypond

En contraste con el posicionado absoluto que está disponible a
través de @code{Y-offset} y de @code{X-offset}, es posible un
posicionamiento relativo con la subpropiedad @code{extra-offset}.
La colocación es relativa a la disposición predeterminada o al
posicionamiento absoluto creado mediante el establecimiento de los
valores de @code{X-offset} y de @code{Y-offset}.  La subpropiedad
@code{extra-offset} acepta una pareja de números (un @code{pair})
que consiste en desplazamientos a lo largo de los ejes X e Y.

@lilypond[verbatim,quote,staffsize=11,papersize=a7]
\book {
  \score {
    <<
      \new Staff <<
        \new Voice {
          s1*5 \break
          \once \override
            Score.NonMusicalPaperColumn
              .line-break-system-details.extra-offset = #'(5 . 5)
          s1*5 \break
          \once \override
            Score.NonMusicalPaperColumn
              .line-break-system-details.extra-offset = #'(0 . 20)
          s1*5 \break }
        \new Voice { \repeat unfold 15 { c'4 c' c' c' } }
      >>
      \new Staff { \repeat unfold 15 { d'4 d' d' d' } }
    >>
  }
}
@end lilypond

Ahora que hemos establecido explícitamente el punto de origen
vertical de cada sistema, podemos también establecer manualmente
las distancias verticales entre los pentagramas dentro de cada
sistema.  Lo hacemos usando la subpropiedad
@code{alignment-distances}.  Como puede verse, usamos una lista-A
para fijar dos subpropiedades @code{line-break-system-details}
diferentes al mismo tiempo.

@lilypond[verbatim,quote,staffsize=11,papersize=a7]
\book {
  \score {
    <<
      \new Staff <<
        \new Voice {
          \once \override
            Score.NonMusicalPaperColumn.line-break-system-details =
              #'((Y-offset . 0)
                 (alignment-distances . (10)))
          s1*5 \break
          \once \override
            Score.NonMusicalPaperColumn.line-break-system-details =
              #'((Y-offset . 30)
                 (alignment-distances . (15)))
          s1*5 \break
          \once \override
            Score.NonMusicalPaperColumn.line-break-system-details =
              #'((Y-offset . 65)
                 (alignment-distances . (20)))
          s1*5 \break }
        \new Voice { \repeat unfold 15 { c'4 c' c' c' } }
      >>
      \new Staff { \repeat unfold 15 { d'4 d' d' d' } }
    >>
  }
}
@end lilypond

El ejemplo siguiente muestra cómo fijar las posiciones verticales
de varios pentagramas dentro de un sistema.  Observe que
@code{alignment-distances} se aplica directamente a los
pentagramas, sin preocuparse de las agrupaciones hechas con
@code{StaffGroup} o similares.  El valor @code{#f} indica que se
debe usar el valor predeterminado.

@lilypond[verbatim,quote,staffsize=11,papersize=a7]
\book {
  \score {
    <<
      \new Staff <<
        \new Voice {
          \once \override
            Score.NonMusicalPaperColumn.line-break-system-details =
              #'((Y-offset . 0)
                 (alignment-distances . (15 8)))
          s1*5 \break
          \once \override
            Score.NonMusicalPaperColumn.line-break-system-details =
              #'((Y-offset . 35)
                 (X-offset . 10)
                 (alignment-distances . (#f 8)))
          s1*5 \break
          \once \override
            Score.NonMusicalPaperColumn.line-break-system-details =
              #'((Y-offset . 65)
                 (alignment-distances . (8 15)))
          s1*5 \break }
        \new Voice { \repeat unfold 15 { c'4 c' c' c' } }
      >>
      \new StaffGroup <<
        \new Staff { \repeat unfold 15 { d'4 d' d' d' } }
        \new Staff { \repeat unfold 15 { e'4 e' e' e' } }
      >>
    >>
  }
}
@end lilypond

@funindex last-bottom-spacing

La última subpropiedad de @code{line-break-system-details},
@code{bottom-padding}, tiene un efecto similar al de
@code{last-bottom-spacing}.  Sin embargo, observe que no guarda
una dimensión de espaciado que se pueda estirar o comprimir, sino
un valor de relleno rígido y fijo a partir del extremo inferior de
la página hasta el pentagrama inferior.  Aquí aparece el fragmento
de prueba con la parte inferior justificada, mostrando la
distancia por omisión.

@lilypond[verbatim,quote,staffsize=11,papersize=a7]
\book {
  \score {
    <<
      \new Staff <<
        \new Voice {
          s1*5 \break
          s1*5 \break
          s1*5 \break }
        \new Voice { \repeat unfold 15 { c'4 c' c' c' } }
      >>
      \new Staff { \repeat unfold 15 { d'4 d' d' d' }
      }
    >>
  }
  \paper { ragged-last-bottom = ##f }
}
@end lilypond

Al fijar un valor para @code{bottom-padding} se obtiene el
resultado siguiente.

@lilypond[verbatim,quote,staffsize=11,papersize=a7]
\book {
  \score {
    <<
      \new Staff <<
        \new Voice {
          s1*5 \break
          s1*5 \break
          \once \override
            Score.NonMusicalPaperColumn.line-break-system-details =
              #'((bottom-padding . 20))
          s1*5 \break }
        \new Voice { \repeat unfold 15 { c'4 c' c' c' } }
      >>
      \new Staff { \repeat unfold 15 { d'4 d' d' d' } }
    >>
  }
  \paper { ragged-last-bottom = ##f }
}
@end lilypond

Algunos puntos que tener en cuenta:

@itemize
@item Al usar @code{alignment-distances}, la letra y otras líneas que no
son pautas, no cuentan como un pentagrama.

@item Las unidades de los números que se pasan a las subpropiedades
@code{X-offset}, @code{Y-offset}, @code{extra-offset} y
@code{alignment-distances} 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.  Para evitarlo, pase unos valores razonables a las
subpropiedades.
@end itemize

@morerefs
Fragmentos de código:
@rlsrnamed{Spacingnotes,Espaciado}.
@endmorerefs


@node Vertical collision avoidance
@section Evitar las colisiones verticales

@funindex outside-staff-priority

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.  Esto
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.

Hay un listado completo de los valores predeterminados de @code{outside-staff-priority} en @ref{Default values for outside-staff-priority}.

@lilypond[quote,ragged-right,verbatim]
\relative c'' {
  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

@funindex outside-staff-padding

El relleno vertical que rodea a los objetos fuera del pentagrama
se puede controlar con la propiedad @code{outside-staff-padding}.

@lilypond[quote,ragged-right,verbatim,staffsize=18]
\relative {
  \once \override TextScript.outside-staff-padding = 0
  a'4-"outside-staff-padding = 0"
  \once \override TextScript.outside-staff-padding = 3
  d-"outside-staff-padding = 3"
  c-"default outside-staff-padding"
  b-"default outside-staff-padding"
  R1
}
@end lilypond

@funindex outside-staff-horizontal-padding

De forma predeterminada, los objetos fuera del pentagrama se
colocan de forma que eviten una colisión horizontal con los grobs
posicionados previamente.  Esto puede llevar a situaciones en las
que los objetos se colocan muy próximos entre sí en el sentido
horizontal.  Como se muestra en el ejemplo que aparece más abajo,
al establecer @code{outside-staff-horizontal-padding} se
incrementa el espacio horicontal necesario, y en este caso mueve
el texto hacia arriba para evitar que quede demasiado cerca de las
líneas adicionales.

@lilypond[quote,ragged-right,verbatim]
\relative {
  c''4^"Word" c c''2
  R1
  \once \override TextScript.outside-staff-horizontal-padding = 1
  c,,4^"Word" c c''2
}
@end lilypond

@morerefs
Fragmentos de código:
@rlsrnamed{Spacingnotes,Espaciado}.
@endmorerefs


@need 1500
@node Horizontal spacing
@chapter Espaciado horizontal

@cindex horizontal, espaciado
@cindex espaciado horizontal


@node Horizontal spacing overview
@section Panorámica del espaciado horizontal

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 suma
@code{spacing-increment} al espacio que ocupa 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,verbatim]
\relative c' {
  c2 c4. c8
  c4. c8 c4. c8
  c8 c c4 c c
}
@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 anchura 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
@option{--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 una corchea), se fija
a través de @code{base-shortest-duration}.

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

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,verbatim]
\relative { c''2 c4. c8 | c4. c16[ c] c4. c8 | c8 c c4 c c }
@end lilypond

Como se explicó en el @emph{Ensayo sobre grabado musical
automatizado}, las direcciones de las plicas influyen en el
espaciado (véase @ressaynamed{Optical spacing, Espaciado óptico})
y se puede ajustar con la propiedad @code{stem-spacing-correction}
del 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 un ajuste exagerado:

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

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

@morerefs
Ensayo sobre grabado musical automatizado:
@ressaynamed{Optical spacing, Espaciado óptico}.

Fragmentos de código:
@rlsrnamed{Spacingnotes,Espaciado}.

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

@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, ajustando el valor
del relleno en la medida necesaria.

@example
 \override Score.NonMusicalPaperColumn.padding = 10
@end example

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


@node New spacing section
@section Sección de espaciado nueva

@funindex \newSpacingSection
@cindex sección de espaciado nueva
@cindex espaciado, nueva seccción de
@cindex nota, espaciar horizontalmente

Se pueden iniciar secciones nuevas con diferentes parámetros de
espaciado, con la instrucción @code{newSpacingSection}.  Esto es
útil para las secciones que tienen distinta noción de las notas
@q{largas} y @q{cortas}.  La instrucción @code{\newSpacingSection}
crea un nuevo objeto @code{SpacingSpanner} en ese momento musical.

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

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

Si los ajustes de espaciado automáticos no dan el espaciado
deseado, pueden aplicarse sobreescrituras manuales a sus
propiedades con @code{\override}.  Las sobreescrituras se deben
aplicar en el mismo momento musical que la propia instrucción
@code{\newSpacingSection} y afectarán entonces al espaciado de
toda la música que venga a continuación hasta que las propiedades
se cambien en una nueva sección de espaciado, por ejemplo:

@lilypond[verbatim,quote]
\relative c' {
  \time 4/16
  c16[ c c8]
  \newSpacingSection
  \override Score.SpacingSpanner.spacing-increment = 2
  c16[ c c8]
  \newSpacingSection
  \revert Score.SpacingSpanner.spacing-increment
  c16[ c c8]
}
@end lilypond


@morerefs
Fragmentos de código:
@rlsrnamed{Spacingnotes,Espaciado}.

Referencia de funcionamiento interno:
@rinternals{SpacingSpanner}.
@endmorerefs


@node Changing horizontal spacing globally
@section Cambiar el espaciado horizontal globalmente

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 producen música más apretada.

@lilypond[verbatim,line-width=12\cm]
\score {
  \relative {
    g'4 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 {
    g'4 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 = \musicLength 16
    }
  }
}
@end lilypond


@node Uniform stretching of tuplets
@subsection Estiramiento uniforme de los grupos especiales

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
solo puede cambiarse al principio de la partitura:

@lilypond[quote,ragged-right,verbatim]
\score {
  <<
    \new Staff \relative c' {
      \tuplet 5/4 { c8 c c c c } c8 c c c
    }
    \new Staff \relative c' {
      c8 c c c \tuplet 5/4 { c8 c c c c }
    }
  >>
  \layout {
    \context {
      \Score
      \override SpacingSpanner.uniform-stretching = ##t
    }
  }
}
@end lilypond


@node Strict note spacing
@subsection Espaciado estricto de las notas

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,fragment,verbatim]
\override Score.SpacingSpanner.strict-note-spacing = ##t
\new Staff \relative {
  c''8[ c \clef alto c \grace { c16 c } c8 c c]  c32[ c] }
@end lilypond

@morerefs
Fragmentos de código:
@rlsrnamed{Spacingnotes,Espaciado}.
@endmorerefs


@node Adjusting horizontal spacing for specific layout objects
@section Ajuste del espaciado horizontal para objetos de disposición específicos

Además de los parámetros de uso general del algoritmo
predeterminado de espaciamiento que se aplican a todos los
elementos de la partitura o de la sección de espaciado, existen
varias propiedades útiles para hacer ajustes sobre los objetos,
tipo po tipo.  Entre los ejemplos se encuentran el ajuste de la
distancia entre la clave y la indicación de compás, pero no entre
la clave y las notas cuando no hay ninguna indicación de compás, o
la distensión entre las notas en presencia de un texto impreso de
tal forma que no se solape con la nota siguiente.  Estos
procedimientos de trucaje requieren que primero se identifique el
tipo de especiado que está en juego.


@node Overview of object-specific horizontal spacing tweaks
@subsection Panorámica de los trucajes de espaciado horizontal específicos de cada objeto

@cindex columna, de papel
@cindex columna
@cindex musical, elemento
@cindex no musical, elemento
@cindex elemento, musical
@cindex elemento, no musical
@cindex introductorio, material
@cindex material, introductorio

@funindex NoteColumn
@funindex NonMusicalPaperColumn

Los objetos de disposición que tienen una posición fija horizontal
se llaman @dfn{items} (elementos) por oposición a los
@dfn{spanners} (objetos de extensión) y respecto al espaciado
horizontal se agrupan en @dfn{columnas}.  Las cabezas de nota y
los silencios, que forman el material musica principal junto con
esos objetos que están enlazados a ellos lógicamente (alteraciones
accidentales, articulaciones, plicas, puntillos, etc.) son todos
parte de @q{columnas musicales} (representadas por objetos
gráficos del tipo @code{NoteColumn}).  El @dfn{material
introductorio}, como las claves, indicaciones de compás y líneas
divisorias, se agrupa en @q{columnas no musicales} (representadas
por objetos gráficos del tipo @code{NonMusicalPaperColumn}).  En
el ejemplo siguiente, los elementos musicales están en color rojo,
y los no musicales en azul.

@lilypond[quote]
musical =
#(define-music-function (grob) (key-list?)
   #{ \override $grob . color = #(universal-color 'vermillion) #})

nonmusical =
#(define-music-function (grob) (key-list?)
   #{ \override $grob . color = #(universal-color 'skyblue) #})

\layout {
  \context {
    \Score
    %% Don't interleave columns for ease of understanding in this
    %% first example.
    \override RehearsalMark.extra-spacing-width = #'(0 . 0)
    \override RehearsalMark.extra-spacing-height = #'(-inf.0 . +inf.0)
  }
}

\relative {
  \nonmusical Staff.Clef
  \nonmusical Staff.TimeSignature
  \nonmusical Staff.BarLine
  \nonmusical BreathingSign
  \nonmusical Score.RehearsalMark
  \musical NoteHead
  \musical Dots
  \musical Accidental
  \musical Stem
  \musical Script
  \time 3/8
  g'4-> 8
  \mark \default
  \clef alto
  aes4.
  \breathe
}
@end lilypond

@noindent
Este ejemplo muestra que existe una alternancia entre columnas
musicales y no musicales.  La primera columna no musical contiene
una clave y una indicación de compás.  La primera columna musical
tiene una cabeza de nota con su plica y una articulación.  La
segunda columna no musical está vacía y por tanto se elimina
durante el proceso de disposición.  La segunda columna musical
tiene, de nuevo, una nota.  La tercera columna no musical contiene
una clave, una barra de compás y una llamada de ensayo, y así
sucesivamente.

Dentro de cada columna, el espaciado es fijo.  Por otro lado, el
espacio de separación entre columnas consecutivas es flexible.
Como veremos, los métodos para ajustar el espaciado dentro de una
columna y entre distintas columnas, son diferentes.


@node Spacing between adjacent non-musical items
@subsection Espaciado entre elementos no musicales adyacentes

@cindex espaciado, horizontal, entre elementos no musicales
@cindex no musical, elemento, espaciado horizontal
@cindex introductorio, material
@cindex material, introductorio

Dentro de una columna no musical, los elementos se van disponiendo
en un orden específico.  Por ejemplo, con el conjunto de elementos
de la imagen que aparece a continuación, el orden predeterminado
sitúa primero el signo de respiración, después la clave, luego la
barra de compás, la armadura de cancelación, la armadura normal, y
por último la indicación de compás (esto se controla por parte de
la propiedad @code{BreakAlignment@/.break@/-align@/-orders}, que
se puede cambiar de forma conveniente usando
@code{\breakAlignInsert}).

@lilypond[verbatim,quote]
\relative {
  \key g \minor
  g'1
  \breathe
  \clef alto
  \time 6/8
  \key a \major
  aes4.
}
@end lilypond

@cindex break-align, símbolo
@cindex símbolo, break-align
@funindex space-alist

La distancia entre dos elementos adyacentes de la misma columna no
musical viene controlada por el valor de la propiedad
@code{space-alist} (lista de asociación de espaciado) de la que
está más a la izquierda de las dos.  @code{space-alist} tiene la
forma de una lista asociativa que asigna símbolos de break-align a
pares @code{(@var{spacing-style} . @var{value})}.  El símbolo
break-align de un elemento divisible viene dado por el valor de su
propiedad @code{break-@/align-@/symbol}; las opciones estándar
están relacionadas en @rinternals{break-alignment-interface}.  Los
estilos de espaciado se relacionan en
@rinternals{break-aligned-interface}.  Entre las opciones que
están disponibles, solo @code{extra-space} y @code{minimum-space}
son relevantes para el trucaje del espacio entre elementos no
musicales.  La diferencia es que @code{extra-space} mide el
espacio de relleno a partir de la derecha del primer objetohasta
la izquierda del segundo objeto, mientras que @code{minimum-space}
cuenta a partir de la izquierda del primer objeto.  De esta forma,
una manera de desplazar la línea divisoria, alejándola de la
clave, sería:

@lilypond[verbatim,quote]
\relative {
  \key g \minor
  g'1
  \override Staff.Clef.space-alist.staff-bar = #'(extra-space . 4)
  \breathe
  \clef alto
  \time 6/8
  \key a \major
  aes4.
}
@end lilypond

Los ajustes de @code{space-alist}, que no se limitan a los dos
estilos de espaciado que se han descrito anteriormente, son
posibles también para sobreescribir el espaciado entre diferentes
columnas.  Sin embargo, este tipo de espaciado es flexible, y no
depende meramente de los tipos de objeto implicados, sino también
de sus formas.  Los métodos específicos para ello se documentan en
el apartado siguiente.

@snippets

@cindex armadura, cancelación, antes de la barra
@funindex break-align-orders

@lilypondfile[verbatim,quote,ragged-right,texidoc,doctitle]
{snippets/separating-key-cancellations-from-key-signature-changes.ly}

@morerefs
Referencia de la notación:
@ref{Using the break-alignable-interface}.

Manual de extensión de LilyPond:
@rextend{Association lists (alists)}.

Referencia de funcionamiento interno:
@rinternals{Break_align_engraver},
@rinternals{BreakAlignGroup},
@rinternals{BreakAlignment},
@rinternals{break-alignable-interface},
@rinternals{break-aligned-interface},
@rinternals{break-alignment-interface}.
@endmorerefs


@node Spacing between adjacent columns
@subsection Espaciado entre columnas adyacentes

@cindex espaciado, horizontal, entre columnas

A diferencia del espaciado dentro de una columna, el espaciado
entre columnas adyacentes es flexible y se amplía o se comprime de
acuerdo a la densidad de la música sobre la línea.  De manera
predeterminada, las columnas pueden incluso solaparse en
determinadas situaciones.  El ejemplo siguiente muestra tres
casos.  La segunda alteración accidental se desliza por detrás de
la barra de compás, mientras que la tercera se solapa con la
clave.  Asimismo, la indicación de tempo @emph{Presto} se extiende
sobre varias columnas.  Fíjese en cómo la primera alteración, que
permanece dentro de los límites verticales de la barra de compás
por el lado izquierdo, se desplaza alejándose.

@lilypond
{
  R1
  cis'4 r2.
  \tempo Presto
  fis16 8 16 4 \clef alto cis4 fis4
}
@end lilypond

@funindex extra-spacing-width
@funindex extra-spacing-height

Estas reglas de espaciado se pueden configurar.  Esto se hace
modificando la anchura y altura que ocupa un objero en el
espaciado horizontal.  Las propiedades de relevancia son
@code{extra-@/spacing-@/width} y @code{extra-@/spacing-@/height}.
Cuando no están establecidas, un objeto ocupa tanto espacio en
horizontal como le permitan sus propiedades @code{X-extent} y
@code{Y-extent}.  Estos son valres precisos de sus dimensiones.
Las propiedades @code{extra-@/spacing-@/width} y
@code{extra-@/spacing-@/height} hacen que un objeto se haga más
grande o más pequeño a los efectos del cálculo del espaciado
horizontal entre columnas solamente, pero preservan sus
dimensiones para otros tipos de espaciado.

@lilypond[verbatim,quote]
{
  \textMark "Default"
  c'2 2 cis'2 2
}

{
  \textMark "Modified X-extent"
  \override NoteHead.X-extent = #'(-2 . 2)
  c'2 2 cis'2 2
}

{
  \textMark "Modified extra-spacing-width"
  \override NoteHead.extra-spacing-width = #'(-2 . 2)
  c'2 2 cis'2 2
}
@end lilypond

@code{extra-@/spacing-@/width} y @code{extra-@/spacing-@/height}
son pares de números, que se añaden a las dimensiones sobre cada
uno de los ejes.  Por ejemplo, establecer
@code{extra-@/spacing-@/height} a @code{'(-2 . 3)} hace que el
objeto sea tres unidades mayor en la parte superior, y dos
unidades mayor en la parte de abajo (el límite reducido
en@tie{}2).  El ejemplo siguiente muestra cómo usar
@code{extra-@/spacing-@/height} para modificar el límite después
del cual las alteraciones accidentales ya no se solapan con las
barras de compás.

@lilypond[verbatim,quote]
music = \relative {
  \time 1/4
  cis8 8 | dis8 8 | eis8 8 | fis8 8 |
  gis8 8 | ais8 8 | bis8 8 | cis8 8 |
}

{
  \music
}

{
  \override Accidental.extra-spacing-height = #'(0 . 1.0)
  \music
}
@end lilypond

El valor @code{'(+inf.0 . -inf.0)} para
@code{extra-@/spacing-@/width} o para
@code{extra-@/spacing-@/height} suprime la presencia del objeto.

@lilypond[verbatim,quote]
music = \relative {
  \time 1/4
  cis8 8 | dis8 8 | eis8 8 | fis8 8 |
  gis8 8 | ais8 8 | bis8 8 | cis8 8 |
}

{
  \override Accidental.extra-spacing-height = #'(+inf.0 . -inf.0)
  \music
}
@end lilypond

De forma recíproca, un valor para @code{extra-@/spacing-@/height}
de @code{'(-inf.0 . +inf.0)} hace al objeto infinitamente alto,
impidiendo completamente la superposición con otra columna.  El
ejemplo que aparece a continuación muestra esta técnica sobre
@code{Accidental} y @code{Metronome@/Mark}.  En el caso de
@code{Metronome@/Mark}, es necesario ajustar el valor de
@code{extra-@/spacing-@/width} a @code{'(0 . 0)} porque el valor
predeterminado es @code{'(+inf.0 . -inf.0)}, e incluso un objeto
infinitamente alto no ocupa ningún espacio si no tiene anchura.

@lilypond[verbatim,quote]
{
  \override Score.MetronomeMark.extra-spacing-width =
    #'(0 . 0)
  \override Score.MetronomeMark.extra-spacing-height =
    #'(-inf.0 . +inf.0)
  \override Accidental.extra-spacing-height =
    #'(-inf.0 . +inf.0)
  cis'4 r2.
  \tempo Presto
  fis16 8 16 4 \clef alto cis4 fis4
}
@end lilypond

@morerefs
Referencia de funcionamiento interno:
@rinternals{item-interface},
@rinternals{separation-item-interface}.
@endmorerefs


@node Line width
@section Longitud de la línea

@cindex salto de página
@cindex página, salto de

@funindex indent
@funindex line-width

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

@funindex ragged-right

Si se fija el valor @code{#t} 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.  El valor normal predeterminado es falso, pero
si la partitura tiene un solo sistema, el valor predeterminado es
verdadero.

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

La opción @code{ragged-last} es similar a @code{ragged-right},
pero afecta solo 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.

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

@morerefs
Fragmentos de código:
@rlsrnamed{Spacingnotes,Espaciado}.
@endmorerefs


@node Proportional notation
@section Notación proporcional

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.

Están contemplados los siguiente ajustes 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}
@end itemize

En los ejemplos que siguen, exploramos el uso de los distintos
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.

@c The initial pitch is not necessary as long as RhythmicStaff is
@c not preceded by other material in the score, but we don't want
@c to explain that.
@lilypond[quote,verbatim,ragged-right]
\new RhythmicStaff {
  c2 16 16 16 16 \tuplet 5/4 { 16 16 16 16 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 queremos 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 RhythmicStaff {
  c2 16 16 16 16 \tuplet 5/4 { 16 16 16 16 16 }
}
\layout {
  \context {
    \Score
    proportionalNotationDuration = #1/20
  }
}
@end lilypond

La blanca al principio del compás y las notas rápidas de la
segunda mitad del compás ocupan ahora 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 para espaciar toda la
música.  El valor @code{#1/20} especifica un veinteavo de redonda.

¿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) 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]
rhythm = { c2 16 16 16 16 \tuplet 5/4 { 16 16 16 16 16 } }

\new RhythmicStaff {
  \set Score.proportionalNotationDuration = #1/8
  % Allow overlapping of note heads.
  \override NoteHead.extra-spacing-width = #'(+inf.0 . -inf.0)
  \rhythm
}

\new RhythmicStaff {
  \set Score.proportionalNotationDuration = #1/16
  \rhythm
}

\new RhythmicStaff {
  \set Score.proportionalNotationDuration = #1/32
  \rhythm
}
@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.  En general, la notación proporcional 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 RhythmicStaff {
    c2 16 16 16 16 \tuplet 5/4 { 16 16 16 16 16 }
  }
  \new RhythmicStaff {
    \tuplet 9/8 { c8 8 8 8 8 8 8 8 8 }
  }
>>
@end lilypond

El espaciado es defectuoso porque las notas regularmente
espaciadas del pentagrama inferior no se amplían de manera
uniforme.  Los grabados clásicos incluyen muy pocos tresillos
complejos y así las reglas del grabado clásico pueden generar este
tipo de resultado.  El establecimiento de
@code{proportionalNotationDuration} lo soluciona.

@lilypond[quote,verbatim,ragged-right]
<<
  \new RhythmicStaff {
    c2 16 16 16 16 \tuplet 5/4 { 16 16 16 16 16 }
  }
  \new RhythmicStaff {
    \tuplet 9/8 { c8 8 8 8 8 8 8 8 8 }
  }
>>
\layout {
  \context {
    \Score
    proportionalNotationDuration = #1/20
  }
}
@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 RhythmicStaff {
    c2 16 16 16 16 \tuplet 5/4 { 16 16 16 16 16 }
  }
  \new RhythmicStaff {
    \tuplet 9/8 { c8 8 8 8 8 8 8 8 8 }
  }
>>
\layout {
  \context {
    \Score
    proportionalNotationDuration = #1/20
    \override SpacingSpanner.uniform-stretching = ##t
  }
}
@end lilypond

Nuestro ejemplo de dos pentagramas 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.

Siempre se recomienda fijar el valor de la propiedad
@code{uniform-@/stretching} de @code{SpacingSpanner} a @code{#t}
si estamos usando @code{proportional@/Notation@/Duration}.  Por
ejemplo, omitirlo hace que los silencios de separación consuman
una cantidad incorrecta de espacio horizontal.

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

De manera predeterminada, solo hay un @code{SpacingSpanner} por
@code{Score}.  Esto supone que @code{uniform-@/stretching} está
activado para la partitura completa o desactivado para la
partitura completa.  Sin embargo, podemos sobreescribir este
comportamiento y activar distintas posibilidades de espaciado en
distintos lugares de la partitura usando la instrucción
@code{\newSpacingSection}.  @xref{New spacing section} 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{preliminar} 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 preliminar es la misma sin importar que
después haya una indicación de compás, una armadura o una clave.
El grabador @code{Separating_line_group_engraver} es responsable
de este espacio, y su elminiación 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,
especialmente para las partituras que incluyen una línea de tiempo
graduada u otro gráfico.  Sin embargo, 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]
{
  \set Score.proportionalNotationDuration = #1/16
  c''8 8 8 \clef alto d'2 d'8
}

{
  \set Score.proportionalNotationDuration = #1/16
  \override Score.SpacingSpanner.strict-note-spacing = ##t
  c''8 8 8 \clef alto d'2 d'8
}
@end lilypond

@noindent
Las dos partituras son proporcionales, pero el espaciado de la
primera es muy suelto a causa del cambio de clave. Sin embargo, el
espaciado de la segunda partitura se mantiene estricto, porque
@code{strict-note-spacing} está activado.  La activación de esta
propiedad 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.

@indentedblock
@table @code
@item \override SpacingSpanner.strict-grace-spacing = ##t
espaciar las notas de adorno de forma estricta (@pxref{Positioning
grace notes with floating space})
@item \set tupletFullLength = ##t
extender los corchetes de tresillo para que marquen los dos puntos
rítmicos, el de comienzo y el de final
@item \override Beam.breakable = ##t
permitir barras divididas (@pxref{Beams across line breaks})
@item \override Glissando.breakable = ##t
permitir glissandos divididos (@pxref{Making glissandi breakable})
@item \remove Forbid_line_break_engraver
permitir saltos de línea incluso si un elemento musical sigue
activo (@pxref{Line breaking})
@end table
@end indentedblock

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

Fragmentos de código:
@rlsrnamed{Spacingnotes,Espaciado}.
@endmorerefs


@node Fitting music onto fewer pages
@chapter Encajar la música en menos páginas

En ocasiones, podemos terminar con uno o dos pentagramas en una
segunda página (o tercera, o cuarta@dots{}).  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}.


@node Displaying spacing
@section Mostrar el espaciado

@funindex annotate-spacing
@cindex espaciado, mostrar la disposición
@cindex depuración, espaciado vertical
@cindex vertical, espaciado, depuración
@cindex disposición, vertical, depuración
@cindex mostrar, disposición vertical

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}:

@lilypond[verbatim,quote,papersize=a6landscape]
\book {
  \score { { c4 } }
  \paper { annotate-spacing = ##t }
}
@end lilypond

@noindent
Todas las dimensiones de disposición se muestran en espacios de
pentagrama, independientemente de las unidades especificadas en
los bloques @code{\paper} o @code{\layout}. En el ejemplo
anterior, @code{paper-height} tiene un valor de 59.75 espacios de
pentagrama, y el @code{staff-size} (tamaño del pentagrama) es de
20 puntos, el valor predeterminado. Observe que:

@multitable {1 staff space} {= (@code{staff-size})/4 * (25.4/72.27) mm}

@item 1 punto
@tab = (25.4/72.27) mm

@item 1 espacio de pentagrama
@tab = (@code{staff-size})/4 pts
@item
@tab = (@code{staff-size})/4 * (25.4/72.27) mm

@end multitable

@noindent
En este caso, un espacio de pentagrama equivale aproximadamente a
1.757@dmn{mm}.  Así, la medida @code{paper-height} de 59.75
espacios de pentagrama equivale a 105 milímetros, la altura de una
hoja @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.

@morerefs
Referencia de la notación:
@ref{Setting the staff size}.

Fragmentos de código:
@rlsrnamed{Spacingnotes,Espaciado}.
@endmorerefs


@node Changing spacing
@section Cambiar el espaciado

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

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 @{
  system-system-spacing = #'((basic-distance . 0.1) (padding . 0))
  ragged-last-bottom = ##f
  ragged-bottom = ##f
@}
@end example

@item
Forzar el número de sistemas.  Puede ser de utilidad de dos
formas.  Si tan solo se establece un valor, incluso el mismo valor
que el número de sistemas que se están trazando de forma
predeterminada, ello ocasionará a veces que se traten de
introducir más sistemas en cada página, pues en este caso se omite
un paso en que se produce una estimación, dando así un encaje
mejor en cada página.  Asimismo, el forzar una reducción neta en
el número de sistemas puede producir el ahorro de una página
adicional.  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
Forzar el número de páginas.  Por ejemplo, la asignación siguiente
fuerza una disposición con dos páginas.

@example
\paper @{
  page-count = 2
@}
@end example

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

@lilypond[verbatim,quote]
\relative e' {
  e4 c g\f c
  e4 c g-\tweak X-offset -2.7 \f c
}
@end lilypond

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

@lilypond[verbatim,quote]
\score {
  \relative {
    g'4 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 {
    g'4 e e2 |
    f4 d d2 |
    c4 d e f |
    g4 g g2 |
    g4 e e2 |
  }
  \layout {
    \context {
      \Score
      \override SpacingSpanner.common-shortest-duration =
        \musicLength 2
    }
  }
}
@end lilypond

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

@end itemize

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

Fragmentos de código:
@rlsrnamed{Spacingnotes,Espaciado}.
@endmorerefs
