+@node Modifying properties
+@section Modifying properties
+
+@menu
+* Overview of modifying properties::
+* The \set command::
+* The \override command::
+* \set versus \override::
+* Objects connected to the input::
+@end menu
+
+
+@node Overview of modifying properties
+@subsection Overview of modifying properties
+
+Cada contexto es responsable de la creación de ciertos tipos de
+objetos gráficos. Los ajustes que se usan para imprimir estos objetos
+también se almacenan por contexto. Mediante la modificación de estos
+ajustes, se puede alterar la apariencia de los objetos.
+
+La sintaxis de esto es
+
+@example
+\override @var{contexto}.@var{nombre} #'@var{propiedad} = #@var{valor}
+@end example
+
+Aquí @var{nombre} es el nombre de un objeto gráfico, como @code{Stem}
+o @code{NoteHead}, y @var{propiedad} es una variable interna del
+sistema de formateo (@q{propiedad del grob} o @q{propiedad de
+disposición}). Este último es un símbolo, y por ello debe ir
+precedido de un apóstrofe. La subsección @ref{Modifying properties}
+explica cómo se deben cumplimentar los conceptos @var{nombre},
+@var{propiedad} y @var{valor}. Aquí sólo nos ocuparemos de la
+funcionalidad des esta instrucción.
+
+La instrucción
+
+@verbatim
+\override Staff.Stem #'thickness = #4.0
+@end verbatim
+
+@noindent
+hace más gruesas las plicas (el valor predeterminado es 1.3, con el
+grosor de una línea del pentagrama como unidad). Puesto que la
+instrucción especifica como contexto a @code{Staff}, sólo se aplica al
+pentagrama actual. Otros pentagramas mantienen su aspecto normal.
+Aquí vemos la instrucción en pleno funcionamiento:
+
+@lilypond[quote,verbatim,relative=2,fragment]
+c4
+\override Staff.Stem #'thickness = #4.0
+c4
+c4
+c4
+@end lilypond
+
+La instrucción @code{\override} modifica la definición de la plica
+@code{Stem} dentro del pentagrama en curso @code{Staff}. Después de
+que la instrucción se ha interpretado, todas las plicas se engrosan.
+
+DE manera análoga a @code{\set}, el argumento @var{contexto} se puede
+omitir, ocasionando que se utilice el contexto predeterminado
+@code{Voice}. Al añadir @code{\once} se aplica el cambio durante un
+solo paso de tiempo.
+
+@lilypond[quote,fragment,verbatim,relative=2]
+c4
+\once \override Stem #'thickness = #4.0
+c4
+c4
+@end lilypond
+
+El @code{\override} se debe hacer antes de que el objeto se inicia.
+Por tanto, al alterar objetos @emph{Spanner} «de extensión» como
+ligaduras o barras, la instrucción @code{\override} se debe ejecutar
+en el momento en que se crea el objeto. En este ejemplo:
+
+@lilypond[quote,fragment,verbatim,relative=2]
+\override Slur #'thickness = #3.0
+c8[( c
+\override Beam #'thickness = #0.6
+c8 c])
+@end lilypond
+
+@noindent
+la ligadura es más gruesa pero la barra no lo es. Esto es así porque
+la instrucción para @code{Beam}, la barra, va después de que la barra
+se ha iniciado, y por ello no tiene ningún efecto.
+
+De forma análoga a @code{\unset}, la instrucción @code{\revert} para
+un contexto deshace una instrucción @code{\override}; como con
+@code{\unset}, solamente afecta a los ajustes que se hicieron dentro
+del mismo contexto. En otras palabras, el @code{\revert} del
+siguiente ejemplo no hace nada.
+
+@example
+\override Voice.Stem #'thickness = #4.0
+\revert Staff.Stem #'thickness
+@end example
+
+Salgunas opciones «trucables» se llaman @q{subpropiedades} y residen
+dentro de las propiedades normales. Para trucarlas, utilice
+instrucciones de la forma
+
+@c leave this as a long long
+@example
+\override @var{context}.@var{name} #'@var{property} #'@var{subproperty} = #@var{value}
+@end example
+
+@noindent
+tales como
+
+@example
+\override Stem #'details #'beamed-lengths = #'(4 4 3)
+@end example
+
+
+@seealso
+
+Referencia de funcionamiento interno:
+@rinternals{OverrideProperty},
+@rinternals{RevertProperty},
+@rinternals{PropertySet},
+@rinternals{Backend} y
+@rinternals{All layout objects}.
+
+
+@knownissues
+
+El «back-end» o motor de salida no es muy estricto en la comprobación
+de tipos de las propiedades de objetos. Las referencias cíclicas en
+valores Scheme de propiedades pueden producir cuelgues o salidas
+abruptas, o las dos cosas.
+
+
+@node The \set command
+@subsection The @code{\set} command
+
+@cindex propiedades
+@funindex \set
+@cindex cambiar propiedades
+
+Cada contexto puede tener distintas @emph{propiedades}, variables
+contenidas dentro de ese contexto. Se pueden cambiar mientras dura el
+paso de interpretación. Se consigue insertando la instrucción
+@code{\set} dentro de la música:
+
+@example
+\set @var{contexto}.@var{propiedad} = #@var{valor}
+@end example
+
+Por ejemplo:
+@lilypond[quote,verbatim,relative=2,fragment]
+R1*2
+\set Score.skipBars = ##t
+R1*2
+@end lilypond
+
+Estas instrucción salta los compases que no tienen notas. El
+resultado es que los silencios multicompás se condensan. El valor
+asignado es un objeto de Scheme. En este caso, es @code{#t}, el valor
+booleano True o verdadero.
+
+Si se omite el argumento @var{context}, entonces se utiliza el
+contexto actual de nivel más bajo (normalmente @code{ChordNames},
+@code{Voice} o @code{Lyrics}). En este ejemplo:
+
+@lilypond[quote,verbatim,relative=2,fragment]
+c8 c c c
+\set autoBeaming = ##f
+c8 c c c
+@end lilypond
+
+@noindent
+el argumento @var{contexto} de la instrucción @code{\set} se omite,
+así pues el barrado automático se desactiva en la voz actual. Observe
+que el contexto de nivel más bajo no siempre contiene la propiedad que
+queremos cambiar (por ejemplo, no tendrá ningún efecto intentar
+establecer un valor para la propiedad @code{skipBars} del contexto de
+nivel más bajo, en este caso @code{Voice}).
+
+@lilypond[quote,verbatim,relative=2,fragment]
+R1*2
+\set skipBars = ##t
+R1*2
+@end lilypond
+
+Los contextos so jerárquicos, y si se ha especificado un contexto
+mayor, por ejemplo @code{Staff}, entonces el cambio se aplicaría
+también a todos los contextos @code{Voice} dentro del pentagrama
+actual. El cambio se aplica @q{al vuelo}, durante la música, de
+manera que el ajuste sólo afecta al segundo grupo de corcheas.
+
+@funindex \unset
+
+También existe una instrucción @code{\unset}:
+@example
+\unset @var{contexto}.@var{propiedad}
+@end example
+
+@noindent
+que elimina la definición de @var{propiedad}. Esta instrucción
+elimina la definición solamente si está establecida dentro de
+@var{contexto}, de manera que
+
+@example
+\set Staff.autoBeaming = ##f
+@end example
+
+@noindent
+introduce un ajuste de la propiedad en el nivel de @code{Staff}. El
+ajuste también se aplica a la @code{Voice} actual. Sin embargo:
+
+@example
+\unset Voice.autoBeaming
+@end example
+
+@noindent
+no tiene ningúun efecto. Para cancelar este ajuste, se debe
+especificar el @code{\unset} en el mismo nivel que el @code{\set}
+original. Dicho de otra forma, para deshacer el efecto de
+@code{Staff.autoBeaming = ##f} se necesita
+@example
+\unset Staff.autoBeaming
+@end example
+
+Como @code{\set}, el argumento @var{contexto} no se tiene que
+especificar para un contexto del nivel más bajo, por lo que los dos
+enunciados
+
+@example
+\set Voice.autoBeaming = ##t
+\set autoBeaming = ##t
+@end example
+
+@noindent
+son equivalentes.
+
+
+@cindex \once
+Los ajustes que se aplican solamente a un único paso de tiempo se
+pueden escribir con @code{\once}, por ejemplo en
+
+@lilypond[quote,verbatim,relative=2,fragment]
+c4
+\once \set fontSize = #4.7
+c4
+c4
+@end lilypond
+
+la propiedad @code{fontSize} se deshace automáticamente después de la
+segunda nota.
+
+En el manual de Referencia de funcionamiento interno hay una
+descripción completa de todas las propiedades de contexto disponibles,
+consulte
+@ifhtml
+@rinternals{Tunable context properties}.
+@end ifhtml
+@ifnothtml
+Traducción @expansion{} Propiedades de contexto modificables por el
+usuario.
+@end ifnothtml
+
+
+
+@node The \override command
+@subsection The @code{\override} command
+
+Las instrucciones que modifican la salida tienen por lo general un
+aspecto como
+
+@example
+\override Voice.Stem #'thickness = #3.0
+@end example
+
+@noindent
+Para construir este truco debemos determinar los siguientes datos:
+
+@itemize
+@item el contexto: aquí @code{Voice}.
+@item el objeto de presentación: aquí @code{Stem}.
+@item la propiedad de presentación: aquí @code{thickness}.
+@item un valor adecuado: aquí @code{3.0}.
+@end itemize
+
+Ciertas opciones ajustables se denominan @q{subpropiedades} y residen
+en el interior de las propiedades normales. Para modificarlas utilice
+instrucciones de la forma
+
+@example
+\override Stem #'details #'beamed-lengths = #'(4 4 3)
+@end example
+
+@cindex documentación interna
+@cindex buscar objetos gráficos
+@cindex gráficos, descripción de los objetos
+@cindex trucos
+@funindex \override
+@cindex interna, documentación
+
+Para muchas propiedades, independientemente del tipo de datos de la
+propiedad, si se establece el valor de la propiedad a falso
+(@code{##f}) se producirá su desactivación, ocasionando que LilyPond
+ignore por completo dicha propiedad. Esto es especialmente útil para
+«apagar» propiedades de grobs (objetos gráficos) que de otra manera
+causarína problemas.
+
+Mostraremos a continuación cómo localizar esta información en el
+manual de notación y en la referencia de funcionamiento interno.
+
+@node \set versus \override
+@subsection @code{\set} vs. @code{\override}
+
+Hemos visto dos formas de cambiar las propiedades: @code{\set} y
+@code{\override}. De hecho, en realidad existen dos clases diferentes
+de propiedades.
+
+Los contextos pueden tener propiedades, que por lo general reciben
+nombres en @code{mayúsculasDeCamello}. Principalmente controlan la
+traducción de la música a la notación, p.ej. @code{localKeySignature}
+(para determinar si hay que imprimir las alteraciones accidentales),
+@code{measurePosition} (para determinar cuándo imprimir una línea
+divisoria). Las propiedades de contexto pueden ver modificado su
+valor con el tiempo según se interpreta una pieza de música;
+@code{measurePosition} es un ejemplo obvio de esto. Las propiedades
+de contexto se modifican con @code{\set}.
+
+Hay un tipo especial de propiedad de contexto: la descripción del
+elemento. Estas propiedades reciben nombres en
+@code{MayúsculasDeCamello} (comenzando en letra mayúscula). Contienen
+los @q{ajustes por defecto} para dicho elemento gráfico como una lista
+asociativa. Consulte @file{scm/@/define@/-grobs@/.scm} para ver qué
+tipos de ajustes hay. Las descripciones de los elementos se pueden
+modificar con @code{\override}.
+
+Realmente, @code{\override} es un atajo;
+
+@example
+\override @var{contexto}.@var{nombre} #'@var{propiedad} = #@var{valor}
+@end example
+
+@noindent
+es más o menos equivalente a
+
+@c leave this long line -gp
+@example
+\set @var{contexto}.@var{nombre} #'@var{propiedad} = #(cons (cons '@var{propiedad} @var{valor}) <valor previo de @var{contexto})
+@end example
+
+El valor de @code{contexto} (la lista-a) se usa para da un valor
+inicial a las propiedades de los objetos gráficos individuales. Los
+objetos gráficos también tienen propiedades, que reciben nombres en el
+estilo de Scheme, con @code{palabras-con-guiones}. Los valores de las
+propiedades de objetos gráficos cambian durante el proceso de
+formateo: el formateo básicamente consiste en calcular las propiedades
+utilizando funciones de callback.
+
+@code{fontSize} es una propiedad especial: equivale a escribir
+@code{\override ... #'font-size} para todos los objetos pertinentes.
+Al ser éste un cambio muy común, se creó la propiedad especial
+(modificada con @code{\set}).
+
+