| [ < ] | [ > ] | [ << ] | [ Subir ] | [ >> ] | [Arriba] | [Índice general] | [Índice] | [ ? ] |
@translationof Advanced tweaks
Esta sección trata sobre distintos enfoques en la realización de ajustes finos a la apariencia de la partitura impresa.
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] | [ ? ] |
@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.
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.
Establecer directamente X-offset y Y-offset | ||
Uso del side-position-interface | ||
Uso del self-alignment-interface | ||
Uso del break-alignable-interface |
| [ < ] | [ > ] | [ << ] | [ Subir ] | [ >> ] | [Arriba] | [Índice general] | [Índice] | [ ? ] |
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
| [ < ] | [ > ] | [ << ] | [ Subir ] | [ >> ] | [Arriba] | [Índice general] | [Índice] | [ ? ] |
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-axis | direction | |
|---|---|---|
| propiedad | propiedad | colocación |
0 | -1 | izquierda |
0 | 1 | derecha |
1 | -1 | debajo |
1 | 1 | encima |
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] | [ ? ] |
self-alignment-interface@translationof Using the self-alignment-interface
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"
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
| [ < ] | [ > ] | [ << ] | [ Subir ] | [ >> ] | [Arriba] | [Índice general] | [Índice] | [ ? ] |
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 "↓"
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
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
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
| [ < ] | [ > ] | [ << ] | [ Subir ] | [ >> ] | [Arriba] | [Índice general] | [Índice] | [ ? ] |
@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] | [ ? ] |
@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 }
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.
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] | [ ? ] |
@translationof Modifying shapes
| Modificación de ligaduras de unión y de expresión |
| [ < ] | [ > ] | [ << ] | [ Subir ] | [ >> ] | [Arriba] | [Índice general] | [Índice] | [ ? ] |
@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:
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.
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.
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,> } >>
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,> } >>
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,> } >>
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\) }
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) }
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) }
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\) }
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, } } }
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.
Referencia de funcionamiento interno: (internals)TieColumn sección ‘TieColumn’ en Referencia de Funcionamiento Interno.
| [ < ] | [ > ] | [ << ] | [ Subir ] | [ >> ] | [Arriba] | [Índice general] | [Índice] | [ ? ] |
@translationof Modifying broken spanners
Uso de \alterBroken |
| [ < ] | [ > ] | [ << ] | [ Subir ] | [ >> ] | [Arriba] | [Índice general] | [Índice] | [ ? ] |
\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 }
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 }
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\) }
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.
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.
Extender LilyPond: (extending)Trucos difíciles sección ‘Trucos difíciles’ en Extender.
| [ < ] | [ > ] | [ << ] | [ Subir ] | [ >> ] | [Arriba] | [Índice general] | [Índice] | [ ? ] |
@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 }
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.