[ < ] [ > ]   [ << ] [ Subir ] [ >> ]         [Arriba] [Índice general] [Índice] [ ? ]

5.5 Trucos avanzados

@translationof Advanced tweaks

Esta sección trata sobre distintos enfoques en la realización de ajustes finos a la apariencia de la partitura impresa.

Véase también

Manual de aprendizaje: (learning)Trucar la salida sección ‘Trucar la salida’ en Manual de Aprendizaje, (learning)Otras fuentes de información sección ‘Otras fuentes de información’ en Manual de Aprendizaje.

Referencia de la notación: Explicación del Manual de referencia de funcionamiento interno, Modificar las propiedades.

Manual de extensión: (extending)Interfaces para programadores sección ‘Interfaces para programadores’ en Extender.

Archivos de inicio: ‘scm/define-grobs.scm’.

Fragmentos de código: (snippets)Tweaks and overrides sección ‘Tweaks and overrides’ en Fragmentos de código.

Referencia de funcionamiento interno: (internals)All layout objects sección ‘All layout objects’ en Referencia de Funcionamiento Interno.


[ < ] [ > ]   [ << ] [ Subir ] [ >> ]         [Arriba] [Índice general] [Índice] [ ? ]

5.5.1 Alineación de objetos

@translationof Aligning objects

Los objetos gráficos que soportan el interface self-alignment-interface y/o el side-position-interface se pueden alinear contra un objeto colocado previamente, de diversas maneras. Para ver una lista de estos objetos, consulte (internals)self-alignment-interface sección ‘self-alignment-interface’ en Referencia de Funcionamiento Interno y (internals)side-position-interface sección ‘side-position-interface’ en Referencia de Funcionamiento Interno.

Todos los objetos gráficos tienen un punto de referencia, una extensión horizontal y una extensión vertical. La extensión horizontal es una pareja de números que dan los desplazamientos a partir del punto de referencia de los bordes izquierdo y derecho, siendo negativos los desplazamientos hacia la izquierda. La extensión vertical es una pareja de números que dan el desplazamiento a partir del punto de referencia hasta los bordes inferior y superior, siendo negativos los desplazamientos hacia abajo.

La posición de un objeto sobre el pentagrama viene dada por los valores de las propiedades X-offset e Y-offset. El valor de X-offset da el desplazamiento desde la coordenada X del punto de referencia del objeto padre, y el valor de Y-offset da el desplazamiento a partir de la línea central del pentagrama. Los valores de X-offset y Y-offset se pueden establecer directamente o se puede dejar que se calculen por parte de procedimientos para conseguir una alineación con el objeto padre.

Nota: Muchos objetos tienen consideraciones de posicionamiento especiales que hacen que se ignore o se modifique cualquier ajuste realizado a X-offset o a Y-offset, a pesar de que el objeto contemple el interface self-alignment-interface. La sobreescritura de las propiedades X-offset ó Y-offset a un valor fijo hace que se descarte la respectiva propiedad self-alignment.

Por ejemplo, una alteración accidental se puede reposicionar verticalmente estableciendo Y-offset pero los cambios a X-offset no tienen ningún efecto.

Las letras de ensayo se pueden alinear con objetos divisibles como líneas divisorias, claves, armaduras e indicaciones de compás. Hay propiedades especiales que se encuentran en break-aligned-interface para el posicionamiento de las letras de ensayo sobre dichos objetos.

Véase también

Referencia de la notación: Uso del break-alignable-interface.

Manual de extensión: (extending)Funciones de callback sección ‘Funciones de callback’ en Extender.


[ < ] [ > ]   [ << ] [ Subir ] [ >> ]         [Arriba] [Índice general] [Índice] [ ? ]

Establecer directamente X-offset y Y-offset

@translationof Setting X-offset and Y-offset directly

Se pueden dar valores numéricos a las propiedades X-offset y Y-offset de muchos objetos. El ejemplo siguiente muestra tres notas con una digitación en su posición predeterminada y con los valores X-offset y Y-offset modificados.

 
a'-3
a'
-\tweak X-offset #0
-\tweak Y-offset #0
-3
a'
-\tweak X-offset #-1
-\tweak Y-offset #1
-3

[image of music]


[ < ] [ > ]   [ << ] [ Subir ] [ >> ]         [Arriba] [Índice general] [Índice] [ ? ]

Uso del side-position-interface

@translationof Using the side-position-interface

Un objeto que contempla el side-position-interface se puede colocar junto a su objeto padre de forma que los bordes especificados de los dos objetos se toquen. El objeto se puede situar encima, debajo, a la derecha o a la izquierda del objeto padre. El padre no se puede especificar; viene determinado por el orden de los elementos en el flujo de entrada. Casi todos los objetos tienen la cabeza de la nota asociada como padre.

Los valores de las propiedades side-axis y direction determinan dónde colocar el objeto, como sigue:

side-axisdirection
propiedadpropiedadcolocación
0-1izquierda
01derecha
1-1debajo
11encima

Si side-axis es 0, X-offset se debe establecer al procedimiento ly:side-position-interface::x-aligned-side. Este procedimiento devuelve el calor correcto de X-offset para situar el objeto al lado izquierdo o derecho del padre de acuerdo con el valor de direction.

Si side-axis es 1, Y-offset se debe establecer al procedimiento ly:side-position-interface::y-aligned-side. Este procedimiento devuelve el valor correcto de Y-offset para situar el objeto encima o debajo del padre de acuerdo con el valor de direction.


[ < ] [ > ]   [ << ] [ Subir ] [ >> ]         [Arriba] [Índice general] [Índice] [ ? ]

Uso del self-alignment-interface

@translationof Using the self-alignment-interface

Auto-alineación horizontal de los objetos

La alineación horizontal de un objeto que contempla el interface self-alignment-interface está controlada por el valor de la propiedad self-alignment-X, siempre y cuando la propiedad X-offset de este objeto esté establecida a ly:self-alignment-interface::x-aligned-on-self. Se le puede dar a self-alignment-X cualquier valor real, en unidades de la mitad de la extensión X total del objeto. Los valores negativos mueven el objeto a la derecha, los positivos hacia la izquierda. Un valor de 0 centra el objeto sobre el punto de referencia de su padre, un valor de -1 alinea el borde izquierdo del objeto sobre el punto de referencia de su padre, y un valor de 1 alinea el borde derecho del objeto sobre el punto de referencia de su padre. Se pueden usar los símbolos LEFT, CENTER y RIGHT en sustitución de los valores -1, 0 y 1, respectivamente.

Normalmente se usaría la instrucción \override para modificar el valor de self-alignment-X, pero se puede usar la instrucción \tweak para alinear varias anotaciones por separado sobre una sola nota:

 
a'
-\tweak self-alignment-X #-1
^"left-aligned"
-\tweak self-alignment-X #0
^"center-aligned"
-\tweak self-alignment-X #RIGHT
^"right-aligned"
-\tweak self-alignment-X #-2.5
^"aligned further to the right"

[image of music]

Auto-alineación vertical de los objetos

Los objetos se pueden alinear verticalmente en una forma análoga a la alineación horizontal si la propiedad Y-offset está establecida a ly:self-alignment-interface::y-aligned-on-self. Sin embargo, a menudo se encuentran implicados otros mecanismos en la alineación vertical: el valor de Y-offset es tan sólo una variable que se tiene en cuenta. Esto puede hacer que ajustar el valor de ciertos objetos sea una tarea dificultosa. Las unidades son sólo la mitad de las dimensiones verticales del objeto, que suele ser bastante pequeño, por lo que pueden requerirse números bastante grandes. Un valor de -1 alinea el borde inferior del objeto con el punto de referencia del objeto padre, un valor de 0 alinea el centro del objeto con el punto de referencia del padre, y un valor de 1 alinea el borde superior del objeto con el punto de referencia del padre. Se pueden usar los símbolos DOWN, CENTER, UP en sustitución de -1, 0 y 1, respectivamente.

Auto-alineación de objetos en las dos direcciones

Estableciendo tanto X-offset como Y-offset, se puede alinear un objeto en las dos direcciones simultáneamente.

El ejemplo siguiente muestra cómo ajustar una digitación de forma que se acerque a la cabeza dela nota.

 
a'
-\tweak self-alignment-X #0.5  % move horizontally left
-\tweak Y-offset #ly:self-alignment-interface::y-aligned-on-self
-\tweak self-alignment-Y #-1  % move vertically up
-3  % third finger

[image of music]


[ < ] [ > ]   [ << ] [ Subir ] [ >> ]         [Arriba] [Índice general] [Índice] [ ? ]

Uso del break-alignable-interface

@translationof Using the break-alignable-interface

Las letras de ensayo se pueden alinear con objetos de notación distintos a las barras de compás. Estos objetos son ambitus, breathing-sign, clef, custos, staff-bar, left-edge, key-cancellation, key-signature y time-signature.

Cada tipo de objeto tiene su propio punto de referencia predeterminado, con el que se alinean las marcas de ensayo:

 
% The rehearsal mark will be aligned to the right edge of the Clef
\override Score.RehearsalMark.break-align-symbols = #'(clef)
\key a \major
\clef treble
\mark "↓"
e'1
% The rehearsal mark will be aligned to the left edge of the Time Signature
\override Score.RehearsalMark.break-align-symbols = #'(time-signature)
\key a \major
\clef treble
\time 3/4
\mark "↓"
e'2.
% The rehearsal mark will be centered above the Breath Mark
\override Score.RehearsalMark.break-align-symbols = #'(breathing-sign)
\key a \major
\clef treble
\time 4/4
e'1
\breathe
\mark "↓"

[image of music]

Se puede especificar una lista de posibles objetos para la alineación. Si algunos de los objetos son invisibles en ese punto debido al valor de break-visibility o a valores de visibilidad explícitos para las armaduras y las claves, la letra de ensayo o número de compás se alinean con el primer objeto de la lista que sea visible. Si ningún objeto de la lista es visible, el objeto se alinea con la línea divisoria. Si la línea divisoria es invisible, el objeto se alinea con el punto en el que se encontraría la línea divisoria.

 
% The rehearsal mark will be aligned to the right edge of the Key Signature
\override Score.RehearsalMark.break-align-symbols = #'(key-signature clef)
\key a \major
\clef treble
\mark "↓"
e'1
% The rehearsal mark will be aligned to the right edge of the Clef
\set Staff.explicitKeySignatureVisibility = #all-invisible
\override Score.RehearsalMark.break-align-symbols = #'(key-signature clef)
\key a \major
\clef bass
\mark "↓"
gis,1
% The rehearsal mark will be centered above the Bar Line
\set Staff.explicitKeySignatureVisibility = #all-invisible
\set Staff.explicitClefVisibility = #all-invisible
\override Score.RehearsalMark.break-align-symbols = #'(key-signature clef)
\key a \major
\clef treble
\mark "↓"
e'1

[image of music]

La alineación de la letra de ensayo con relación al objeto de notación se puede cambiar, como se ve en el ejemplo siguiente. En una partitura con varios pentagramas, este ajuste se debe hacer para todos los pentagramas.

 
% The RehearsalMark will be aligned with the right edge of the Key Signature
\override Score.RehearsalMark.break-align-symbols = #'(key-signature)
\key a \major
\clef treble
\time 4/4
\mark "↓"
e'1
% The RehearsalMark will be centered above the Key Signature
\once \override Score.KeySignature.break-align-anchor-alignment = #CENTER
\mark "↓"
\key a \major
e'1
% The RehearsalMark will be aligned with the left edge of the Key Signature
\once \override Score.KeySignature.break-align-anchor-alignment = #LEFT
\key a \major
\mark "↓"
e'1

[image of music]

La letra de ensayo también se puede desplazar al borde derecho o izquierdo en una medida arbitraria. Las unidades son espacios de pentagrama:

 
% The RehearsalMark will be aligned with the left edge of the Key Signature
% and then shifted right by 3.5 staff-spaces
\override Score.RehearsalMark.break-align-symbols = #'(key-signature)
\once \override Score.KeySignature.break-align-anchor = #3.5
\key a \major
\mark "↓"
e'1
% The RehearsalMark will be aligned with the left edge of the Key Signature
% and then shifted left by 2 staff-spaces
\once \override Score.KeySignature.break-align-anchor = #-2
\key a \major
\mark "↓"
e'1

[image of music]


[ < ] [ > ]   [ << ] [ Subir ] [ >> ]         [Arriba] [Índice general] [Índice] [ ? ]

5.5.2 Agrupación vertical de objetos gráficos

@translationof Vertical grouping of grobs

Los grobs (objetos gráficos) VerticalAlignment y VerticalAxisGroup trabajan de manera coordinada. VerticalAxisGroup agrupa distintos grobs como Staff, Lyrics, etc. Después, VerticalAlignment alinea los distintos grobs agrupados previamente por VerticalAxisGroup. Normalmente sólo existe un VerticalAlignment por cada partitura, pero cada Staff, Lyrics, etc. tiene su propio VerticalAxisGroup.


[ < ] [ > ]   [ << ] [ Subir ] [ >> ]         [Arriba] [Índice general] [Índice] [ ? ]

5.5.3 Modificación de los sellos

@translationof Modifying stencils

Todos los objetos de presentación tienen una propiedad stencil que es parte del grob-interface. De forma predeterminada, esta propiedad suele estar establecida a una función específica del objeto que está hecha a medida para disponer el símbolo que lo representa en la salida. Por ejemplo, el ajuste estándar para la propiedad stencil del objeto MultiMeasureRest es ly:multi-measure-rest::print.

El símbolo estándar de cualquier objeto se puede sustituir modificando la propiedad stencil para que haga referencia a un procedimiento diferente escrito especialmente. Esto requiere un alto nivel de conocimiento del funcionamiento interno de LilyPond, pero hay una forma más fácil que a menudo puede dar resultados adecuados.

El procedimiento es establecer la propiedad stencil al procedimiento que imprime texto (ly:text-interface::print) y añadir una propiedad text al objeto ajustada para que contenga el texto de marcado que produce el símbolo requerido. Debido a la flexibilidad del marcado, se pueden conseguir muchas cosas; en particular, consulte Notación gráfica dentro de elementos de marcado.

El ejemplo siguiente muestra esto cambiando el símbolo de la cabeza de la nota a unas aspas dentro de una circunferencia.

 
XinO = {
  \once \override NoteHead.stencil = #ly:text-interface::print
  \once \override NoteHead.text = \markup {
    \combine
      \halign #-0.7 \draw-circle #0.85 #0.2 ##f
      \musicglyph "noteheads.s2cross"
  }
}
\relative {
  a' a \XinO a a
}

[image of music]

Cualquiera de los glifos de Feta usados en la fuente tipográfica Emmentaler se puede pasar a la instrucción de marcado \musicglyph: véase La tipografía Emmentaler.

Se pueden insertar en línea tanto imágenes en formato ‘EPS’ como instrucciones de Postscript usando las instrucciones de marcado \epsfile y \postscript respectivamente; véase Graphic.

Véase también

Referencia de la notación: Notación gráfica dentro de elementos de marcado, Formatear el texto, @ref{Text markup commands}, La tipografía Emmentaler, Graphic.


[ < ] [ > ]   [ << ] [ Subir ] [ >> ]         [Arriba] [Índice general] [Índice] [ ? ]

5.5.4 Modificación de las formas

@translationof Modifying shapes


[ < ] [ > ]   [ << ] [ Subir ] [ >> ]         [Arriba] [Índice general] [Índice] [ ? ]

Modificación de ligaduras de unión y de expresión

@translationof Modifying ties and slurs

Las ligaduras de unión (Ties), de expresión (Slurs), de fraseo (PhrasingSlurs), de dejar vibrar (LaissezVibrerTies) y de repetición (RepeatTies) se trazan como curvas de Bézier de tercer orden. Si la forma de la ligadura calculada automáticamente no resulta óptima, se puede modificar su forma manualmente de dos formas:

  1. mediante la especificación de los desplazamientos que se quieren realizar sobre los puntos de control de la curva de Bézier calculada automáticamente, o bien
  2. mediante la especificación explícita de las posiciones de los cuatro puntos de control que se requieren para definir la curva deseada.

A continuación se explican ambos métodos. El primer método es más adecuado cuando solo se requieren ligeros ajustes de la curva; el segundo puede ser mejor para crear curvas que tienen relación con una única nota.

Curvas de Bézier cúbicas

Las curvas Bézier de tercer orden o cúbicas están definidas por cuatro puntos de control. El primer y cuarto puntos de control son exactamente los puntos extremos de comienzo y de final de la curva. Los dos puntos de control intermedios definen la forma. Se pueden encontrar en la web animaciones que muestran cómo se traza la curva, pero la descripción siguiente puede ser de ayuda. La curva comienza a partir del primer punto de control dirigiéndose directamente hacia el segundo, curvándose progresivamente para dirigirse hacia el tercero y continuando la curva hacia el cuarto, llegando a éste en viaje directo desde el tercer punto de control. La curva está contenida enteramente dentro del cuadrilátero definido por los cuatro puntos de control. Todas las traslaciones, rotaciones y escalado de los puntos de control producen exactamente las mismas operaciones sobre la curva.

Especificar desplazamientos a partir de los puntos de control actuales

En este ejemplo, la colocación automática de la ligadura no resulta óptima, y \tieDown no es la solución.

 
<<
  { e'1~ 1 }
\\
  \relative { r4 <g' c,> <g c,> <g c,> }
>>

[image of music]

El ajuste de los puntos de control de la ligadura mediante la instrucción \shape permite evitar las colisiones.

La sintaxis de \shape es:

 
[-]\shape desplazamientos elemento

Esta instrucción recoloca los puntos de control de elemento en las cantidades dadas por desplazamientos. El argumento desplazamientos es una lista de parejas de números o una lista de tales listas. Cada elemento de una pareja representa el desplazamiento de una de las coordenadas de un punto de control. Si el elemento es una cadena de caracteres, el resultado es \once\override para el tipo de grob especificado. Si elemento es una expresión musical, el resultado es la misma expresión musical con la consiguiente modificación aplicada.

En otras palabras, la función \shape puede actuar como una instrucción \once\override o como una instrucción \tweak dependiendo de si el argumento elemento es el nombre de un grob, como “Slur”, o una expresión musical, como “(”. El argumento desplazamientos especifica los desplazamientos de los cuatro puntos de control como una lista de cuatro parejas de valores (dx . dy) en unidades de espacios de pentagrama (o una lista de tales listas si la curva tiene más de un segmento).

El guión precedente se exige si, y sólo si, se usa la forma \tweak.

Así, usando el mismo ejemplo de arriba y la forma \once\override de la instrucción \shape, lo siguiente tiene el efecto de elevar la ligadura de unión en la mitad de un espacio de pentagrama:

 
<<
  {
    \shape #'((0 . 0.5) (0 . 0.5) (0 . 0.5) (0 . 0.5)) Tie
    e'1~ 1
  }
\\
  \relative { r4 <g' c,> <g c,> <g c,> }
>>

[image of music]

Este posicionamiento de la ligadura de unión es mejor, pero quizá debería elevarse más en la parte central. El ejemplo siguiente hace esto, esta vez usando la forma alternativa \tweak:

 
<<
  {
    e'1-\shape #'((0 . 0.5) (0 . 1) (0 . 1) (0 . 0.5)) ~ e'
  }
\\
  \relative { r4 <g' c,> <g c,> <g c,> }
>>

[image of music]

Los cambios en las posiciones horizontales de los puntos de control se pueden hacer de la misma forma, y dos curvas distintas que dan comienzo en el mismo momento musical se pueden conformar también:

 
\relative {
  c''8(\( a) a'4 e c\)
  \shape #'((0.7 . -0.4) (0.5 . -0.4) (0.3 . -0.3) (0 . -0.2)) Slur
  \shape #'((0 . 0) (0 . 0.5) (0 . 0.5) (0 . 0)) PhrasingSlur
  c8(\( a) a'4 e c\)
}

[image of music]

La función \shape también puede desplazar los puntos de control de las curvas que se extienden atravesando saltos de línea. Cada pieza de la curva dividida puede recibir su propia lista de desplazamientos. Si no se necesita hacer cambios a uno de los segmentos en particular, se puede usar una lista vacía como contenedor. En este ejemplo, el salto de línea hace que la única ligadura de expresión aparezca como si fueran dos:

 
\relative {
  c'4( f g c
  \break
  d,4 c' f, c)
}

[image of music]

Los cambios en la forma de las dos mitades de la ligadura de expresión deja más claro que la ligadura continúa más allá del salto de línea:

 
% () may be used as a shorthand for ((0 . 0) (0 . 0) (0 . 0) (0 . 0))
% if any of the segments does not need to be changed
\relative c' {
  \shape #'(
             (( 0 . 0) (0 . 0) (0 . 0) (0 . 1))
             ((0.5 . 1.5) (1 . 0) (0 . 0) (0 . -1.5))
           ) Slur
  c4( f g c
  \break
  d,4 c' f, c)
}

[image of music]

En una curva en forma de «S» siempre es necesario ajustar manualmente los puntos de control: LilyPond nunca escoge tales formas automáticamente.

 
\relative c'' {
  c8( e b-> f d' a e-> g)
  \shape #'((0 . -1) (5.5 . -0.5) (-5.5 . -10.5) (0 . -5.5)) PhrasingSlur
  c8\( e b-> f d' a e-> g\)
}

[image of music]

Especificar los puntos de control explícitamente

Las coordenadas de los puntos de contro de Bézier se especifican en unidades de espacios de pentagrama. La coordenada X es relativa al punto de referencia al que se adjunta la ligadura, y la coordenada Y es relativa a la línea central del pentagrama. Las coordenadas se especifican como una lista de cuatro parejas de números decimales (reales). Un enfoque consiste en estimar las coordenadas de los dos extremos, y después adivinar los dos puntos intermedios. Los valores óptimos se encuentran después por ensayo y error. Tenga en cuenta que estos valores podrían requerir un ajuste manual si se hace posteriormente cualquier cambio manual a la música o a la disposición.

Una situación en la que es preferible especificar los puntos de control explícitamente a especificar los desplazamientos es cuando se necesita especificarlos de forma relativa a una nota única. A continuación presentamos un ejemplo de esto. Muestra una forma de indicar una ligadura que se extiende hacia el interior de las casillas de primera y segunda vez de una repetición.

 
\relative {
  c''1
  \repeat volta 3 { c4 d( e f }
  \alternative {
    { g2) d }
    {
      g2
      % create a slur and move it to a new position
      % the <> is just an empty chord to carry the slur termination
      -\tweak control-points #'((-2 . 3.8) (-1 . 3.9) (0 . 4) (1 . 3.4)) ( <> )
      f,
    }
    {
      e'2
      % create a slur and move it to a new position
      -\tweak control-points #'((-2 . 3) (-1 . 3.1) (0 . 3.2) (1 . 2.4)) ( <> )
      f,
    }
  }
}

[image of music]

Advertencias y problemas conocidos

No es posible modificar la forma de las ligaduras de unión o de expresión cambiando la propiedad control-points si hay más de una en el mismo momento musical, ni siquiera usando la instrucción \tweak. Sin embargo, se puede sobreescribir la propiedad tie-configuration de TieColumn para fijar la línea de inicio y la dirección según se requiera.

Véase también

Referencia de funcionamiento interno: (internals)TieColumn sección ‘TieColumn’ en Referencia de Funcionamiento Interno.


[ < ] [ > ]   [ << ] [ Subir ] [ >> ]         [Arriba] [Índice general] [Índice] [ ? ]

5.5.5 Modificación de objetos de extensión divididos

@translationof Modifying broken spanners


[ < ] [ > ]   [ << ] [ Subir ] [ >> ]         [Arriba] [Índice general] [Índice] [ ? ]

Uso de \alterBroken

@translationof Using alterBroken

Cuando un “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 thickness (grosor) afecta a la ligadura a ambos lados del salto de línea.

 
\relative c'' {
  r2
  \once\override Slur.thickness = 10
  c8( d e f
  \break
  g8 f e d) r2
}

[image of music]

Es posible modificar de forma independiente el aspecto de los fragmentos individuales de un objeto de extensión dividido, con la instrucción \alterBroken. Esta instrucción puede producir un \override o bien un \tweak de una propiedad del objeto de extensión.

La sintaxis de \alterBroken es

 
[-]\alterBroken propiedad valores elemento

El argumento valores es una lista de valores, uno por cada fragmento. Si elemento el el nombre de un grob como Slur o Staff.PianoPedalBracket, el resultado es una instrucción de sobreescritura \override del tipo de grob especificado. Si elemento es una expresión musical como “(” o “[” 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, \tweak. No lo escriba cuando utilice \alterBroken como una operación de sobreescritura, \override.

En su uso como \override, \alterBroken puede ir precedido de \once o \temporary y ser revertido con \revert con el argumento propiedad (véase (extending)Funciones de sustitución intermedias sección ‘Funciones de sustitución intermedias’ en Extender).

EL código siguiente aplica un \override independiente a cada uno de los fragmentos de la ligadura del ejemplo anterior:

 
\relative c'' {
  r2
  \alterBroken thickness #'(10 1) Slur
  c8( d e f
  \break
  g8 f e d) r2
}

[image of music]

La instrucción \alterBroken se puede usar con cualquier objeto de extensión, incluidos Tie, PhrasingSlur, Beam y 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 \tweak de la instrucción:

 
% 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\)
}

[image of music]

Es importante comprender que \alterBroken fija cada pieza del objeto fragmentado al valor correspondiente dentro del argumento 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.

Advertencias y problemas conocidos

Los saltos de línea pueden ocurrir en distintos lugares según cambia la disposición de la música. Los ajustes elegidos para \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 \break puede prevenir situaciones como ésta.

La instrucción \alterBroken no es efectiva para propiedades de los objetos extensos accedidas antes del salto de línea, como direction.

Véase también

Extender LilyPond: (extending)Trucos difíciles sección ‘Trucos difíciles’ en Extender.


[ < ] [ > ]   [ << ] [ Subir ] [ >> ]         [Arriba] [Índice general] [Índice] [ ? ]

5.5.6 Contenedores unpure-pure

@translationof Unpure-pure containers

Los contenedores ‘unpure-pure’ (pura y no pura) son útiles para la sobreescritura de los cálculos del espaciado en el eje Y (concretamente Y-offset e 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 Y-extent están basadas en la propiedad stencil, la sobreescritura de la propiedad de sello de éstos requiere una sobreescritura adicional de Y-extent con un contenedor unpure-pure. Cuando una función sobreescribe una dimensión Y-offset y/o 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 ‘0’ o ‘'(0 . 0)’) lo que puede dar lugar a colisiones. Una función ‘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 ‘puras’ y los contenedores Unpure-pure son una manera de establecer funciones que no están en esta lista como ‘puras’. La función ‘pura’ se evalúa antes de cualquier salto de línea y así el espaciado horizontal se puede ajustar ‘a tiempo’. La función ‘impura’ se evalúa entonces después del salto de línea.

Nota: Dado que es difícil saber siempre qué funciones están en esta lista, recomendamos que cualquier función ‘pura’ que estemos creando no utilice los grobs Beam o VerticalAlignment.

Un contenedor ‘unpure-pure’ se contruye de la manera siguiente:

(ly:make-unpure-pure-container f0 f1)

donde f0 es una función que toma n argumentos (n >= 1) y el primer argumento siempre debe ser el grob. Ésta es la función que da el resultado real. f1 es la función que se etiqueta como ‘pura’ que toma n + 2 argumentos. De nuevo, el primer argumento debe ser siempre el grob pero los argumentos segundo y tercero son argumentos de ‘inicio’ y de ‘final’.

inicio y final son, a todos los efectos, valores mudos que sólo tienen importancia para los objetos de extensión (o sea: Hairpin, regulador, o 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 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.

 
#(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
}

[image of music]

En el primer compás, sin el contenedor 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 ‘no pura’ y ‘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 ly:make-unpure-pure-container construya dicha segunda función de forma predeterminada cuando se llama con solo un argumento de función.

Nota: Si una función está caracterizada como ‘pura’ y resulta que no lo es, el resultado puede ser inesperado.


[ < ] [ > ]   [ << ] [ Subir ] [ >> ]

Este documento ha sido generado por gub el el 13 julio 2020 utilizando texi2html 1.82.

Otros idiomas: English, català, deutsch, français, italiano, 日本語.
Acerca de la selección automática del idioma.