+Cuando un @qq{spanner} u objeto extenso atraviesa uno o varios
+saltos de línea, cada fragmento hereda los atributos del objeto de
+extensión original. Así, el trucado ordinario de un objeto
+dividido aplica las mismas modificaciones a todos y cada uno de
+sus segmentos. En el ejemplo que aparece a continuación, la
+sobreescritura de @code{thickness} (grosor) afecta a la ligadura a
+ambos lados del salto de línea.
+
+@lilypond[verbatim,quote,ragged-right]
+\relative c'' {
+ r2
+ \once\override Slur.thickness = 10
+ c8( d e f
+ \break
+ g8 f e d) r2
+}
+@end lilypond
+
+Es posible modificar de forma independiente el aspecto de los
+fragmentos individuales de un objeto de extensión dividido, con la
+instrucción @code{\alterBroken}. Esta instrucción puede producir
+un @code{\override} o bien un @code{\tweak} de una propiedad del
+objeto de extensión.
+
+La sintaxis de @code{\alterBroken} es
+
+@example
+[-]@code{\alterBroken} @var{propiedad} @var{valores} @var{elemento}
+@end example
+
+El argumento @var{valores} es una lista de valores, uno por cada
+fragmento. Si @var{elemento} el el nombre de un grob como
+@code{Slur} o @code{Staff.PianoPedalBracket}, el resultado es una
+instrucción de sobreescritura @code{\override} del tipo de grob
+especificado. Si @var{elemento} es una expresión musical como
+@qq{(} o @qq{[} el resultado es la misma expresión musical con el
+correspondiente truco aplicado.
+
+El guión inicial se debe utilizar con la forma de trucaje,
+@code{\tweak}. No lo escriba cuando utilice @code{\alterBroken}
+como una operación de sobreescritura, @code{\override}.
+
+En su uso como @code{\override}, @code{\alterBroken} puede ir
+precedido de @code{\once} o @code{\temporary} y ser revertido con
+@code{\revert} con el argumento @var{propiedad}.
+
+EL código siguiente aplica un @code{\override} independiente a
+cada uno de los fragmentos de la ligadura del ejemplo anterior:
+
+@lilypond[verbatim,quote,ragged-right]
+\relative c'' {
+ r2
+ \alterBroken thickness #'(10 1) Slur
+ c8( d e f
+ \break
+ g8 f e d) r2
+}
+@end lilypond
+
+La instrucción @code{\alterBroken} se puede usar con cualquier
+objeto de extensión, incluidos @code{Tie}, @code{PhrasingSlur},
+@code{Beam} y @code{TextSpanner}. Por ejemplo, un editor que está
+preparando una edición académica podría desear indicar la ausencia
+de parte de una ligadura de fraseo en una fuente haciendo
+discontinuo solamente el segmento que se ha añadido. El siguiente
+ejemplo ilustra de qué manera se puede hacer esto, en este caso
+usando la forma @code{\tweak} de la instrucción:
+
+@lilypond[verbatim,quote,ragged-right]
+% The empty list is conveniently used below, because it is the
+% default setting of dash-definition, resulting in a solid curve.
+\relative {
+ c''2-\alterBroken dash-definition #'(() ((0 1.0 0.4 0.75))) \(e
+ \break
+ g2 e\)
+}
+@end lilypond
+
+Es importante comprender que @code{\alterBroken} fija cada pieza
+del objeto fragmentado al valor correspondiente dentro del
+argumento @var{valores}. Cuando hay menos valores que piezas,
+cualquier fragmento adicional recibe la asignación de la lista
+vacía. Esto puede conllevar resultados no deseados si la
+propiedad de disposición no está establecida a la lista vacía de
+forma predeterminada. En estos casos, se debe asignar a cada
+segmento un valor adecuado.
+
+@knownissues
+Los saltos de línea pueden ocurrir en distintos lugares según
+cambia la disposición de la música. Los ajustes elegidos para
+@code{\alterBroken} podrían no ser adecuados para un objeto de
+extensión que ya no está dividido o que se fragmenta en más piezas
+que antes. El uso explícito (manual) de saltos de línea mediante
+@code{\break} puede prevenir situaciones como ésta.
+
+La instrucción @code{\alterBroken} no es efectiva para propiedades
+de los objetos extensos accedidas antes del salto de línea, como
+@code{direction}.
+
+@seealso
+Extender LilyPond:
+@rextend{Trucos difíciles}.
+
+
+@node Contenedores unpure-pure
+@subsection Contenedores unpure-pure
+@translationof Unpure-pure containers
+
+@cindex Scheme, contenedores puros
+@cindex Scheme, contenedores no-puros
+@cindex puros, contenedores de Scheme
+@cindex no-puros: contenedores de Scheme
+@cindex horizontal, sobreescribir el espaciado
+
+Los contenedores @q{unpure-pure} (pura y no pura) son útiles para
+la sobreescritura de los cálculos del espaciado en el @emph{eje Y}
+(concretamente @code{Y-offset} e @code{Y-extent}) con una función
+de Scheme en lugar de un literal, es decir, un número o una pareja
+de números.
+
+Para ciertos objetos gráficos, las dimensiones @code{Y-extent}
+están basadas en la propiedad @code{stencil}, la sobreescritura de
+la propiedad de sello de éstos requiere una sobreescritura
+adicional de @code{Y-extent} con un contenedor unpure-pure.
+Cuando una función sobreescribe una dimensión @code{Y-offset} y/o
+@code{Y-extent} se supone que esto dispara los cálculos de los
+saltos de línea prematuramente durante la compilación. Así pues,
+la función no se evalúa en absoluto (devolviendo por lo general un
+valor de @samp{0} o @samp{'(0 . 0)}) lo que puede dar lugar a
+colisiones. Una función @q{pura} no afecta a las propiedades,
+objetos o suicidios de grobs, y por ello siempre ven sus valores
+relacionados con el eje Y evaluados correctamente.
+
+Actualmente hay unas treinta funciones que ya se consideran
+@q{puras} y los contenedores Unpure-pure son una manera de
+establecer funciones que no están en esta lista como @q{puras}.
+La función @q{pura} se evalúa @emph{antes} de cualquier salto de
+línea y así el espaciado horizontal se puede ajustar @q{a tiempo}.
+La función @q{impura} se evalúa entonces @emph{después} del salto
+de línea.
+
+@warning{Dado que es difícil saber siempre qué funciones están en
+esta lista, recomendamos que cualquier función @q{pura} que
+estemos creando no utilice los grobs @code{Beam} o
+@code{VerticalAlignment}.}
+
+Un contenedor @q{unpure-pure} se contruye de la manera siguiente:
+
+@code{(ly:make-unpure-pure-container f0 f1)}
+
+donde @code{f0} es una función que toma @var{n} argumentos (@var{n >=
+1}) y el primer argumento siempre debe ser el grob. Ésta es la
+función que da el resultado real. @var{f1} es la función que se
+etiqueta como @q{pura} que toma @var{n + 2} argumentos. De nuevo, el
+primer argumento debe ser siempre el grob pero los argumentos segundo
+y tercero son argumentos de @q{inicio} y de @q{final}.
+
+@var{inicio} y @var{final} son, a todos los efectos, valores mudos
+que sólo tienen importancia para los @code{objetos de extensión}
+(o sea: @code{Hairpin}, regulador, o @code{Beam}, barra), que
+pueden devolver distintas estimaciones de altura basadas en una
+columna de inicio y una de final.
+
+El resto son los otros argumentos para la primera función (que
+puede no ser ninguno si @var{n = 1}).
+
+El resultado de la segunda función se usa como una aproximación del
+valor necesario, que se usa entonces por la primera función para
+obtener el valor real que se usa a continuación para el ajuste de
+precisión mucho más tardío durante el proceso de espaciado.
+
+@c TODO: The following example supposedly showing a collision no longer
+@c 'works' since 2.18.x. Another example of a collision is needed.
+@c Issue #3512
+
+@lilypond[verbatim,quote,ragged-right]
+#(define (square-line-circle-space grob)
+(let* ((pitch (ly:event-property (ly:grob-property grob 'cause) 'pitch))
+ (notename (ly:pitch-notename pitch)))
+ (if (= 0 (modulo notename 2))
+ (make-circle-stencil 0.5 0.0 #t)
+ (make-filled-box-stencil '(0 . 1.0)
+ '(-0.5 . 0.5)))))
+
+squareLineCircleSpace = {
+ \override NoteHead.stencil = #square-line-circle-space
+}
+
+smartSquareLineCircleSpace = {
+ \squareLineCircleSpace
+ \override NoteHead.Y-extent =
+ #(ly:make-unpure-pure-container
+ ly:grob::stencil-height
+ (lambda (grob start end) (ly:grob::stencil-height grob)))
+}
+
+\new Voice \with { \remove "Stem_engraver" }
+\relative c'' {
+ \squareLineCircleSpace
+ cis4 ces disis d
+ \smartSquareLineCircleSpace
+ cis4 ces disis d
+}
+@end lilypond
+
+En el primer compás, sin el contenedor @emph{unpure-pure}, el
+motor de espaciado no conoce la anchura de la cabeza de la nota y
+permite que colisione con las alteraciones accidentales. En el
+segundo compás, el motor de espaciado conoce la anchura de las
+cabezas de las notas y evita la colisión mediante el alargamiento
+de la línea en la medida adecuada.
+
+Normalmente, para cálculos simples se pueden usar funciones casi
+idénticas tanto para las partes @q{no pura} y @q{pura},
+simplemente cambiando el número de argumentos que se pasan a, y el
+ámbito de, la función. Este caso de utilización es lo bastante
+frecuente como para que @code{ly:make-unpure-pure-container}
+construya dicha segunda función de forma predeterminada cuando se
+llama con solo un argumento de función.
+
+@warning{Si una función está caracterizada como @q{pura} y resulta
+que no lo es, el resultado puede ser inesperado.}