+expresión cambiando la propiedad @code{control-points} si hay más
+de una en el mismo momento musical, ni siquiera usando la
+instrucción @code{\tweak}. Sin embargo, se puede sobreescribir la
+propiedad @code{tie-configuration} de @code{TieColumn} para fijar
+la línea de inicio y la dirección según se requiera.
+
+@seealso
+Referencia de funcionamiento interno:
+@rinternals{TieColumn}.
+
+
+@node Modificación de objetos de extensión divididos
+@subsection Modificación de objetos de extensión divididos
+@translationof Modifying broken spanners
+
+@menu
+* Uso de alterBroken::
+@end menu
+
+@node Uso de alterBroken
+@unnumberedsubsubsec Uso de @code{\alterBroken}
+@translationof Using alterBroken
+
+@cindex extensión, modificación de objetos de
+@cindex divididos, modificación de objetos de extensión
+@funindex \alterBroken
+
+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=2]
+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=2]
+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,relative=2]
+% The empty list is conveniently used below, because it is the
+% default setting of dash-definition, resulting in a solid curve.
+c2-\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.
+
+@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.