Manual de aprendizaje de GNU LilyPond: 4.5.1 Mover objetos

### 4.5.1 Mover objetos

Aunque pueda sorprenderle, LilyPond no es perfecto. Ciertos elementos de notación se pueden superponer, lo que es una lástima, pero en realidad es bastante poco frecuente. Normalmente la necesidad de mover objetos es por claridad o razones estéticas: el aspecto es mejor con un poco más o un poco menos de espacio de separación.

Existen tres enfoques principales que llevan a la resolución de superposiciones en la notación. Se deben considerar en el siguiente orden:

1. La dirección de uno de los objetos que se superponen se puede cambiar usando las instrucciones predefinidas que están relacionadas arriba para los objetos dentro-del-pentagrama (véase Objetos interiores al pentagrama). Se pueden recolocar fácilmente las plicas, ligaduras de expresión y de unión, barras de corchea, indicaciones dinámicas, texto y grupos de valoración especial de esta forma. La limitación es que sólo tiene la posibilidad de elegir entre dos posiciones, y podría ser que ninguna de ellas sea la adecuada.
2. Las propiedades del objeto, que LilyPond usa cuando está colocando los objetos de presentación, se pueden modificar usando la instrucción de sobreescritura `\override`. Las ventadas de hacer cambios a este tipo de propiedad son: a) que algún otro objeto se moverá automáticamente si es necesario, para dejarle sitio, y b) una única sobreescritura se puede aplicar a todas las instancias del mismo tipo de objeto. Entre tales propiedades se encuentran:
   - `direction` (dirección)

     Ya se ha estudiado con cierto detalle: véase Objetos interiores al pentagrama.

   - `padding` (relleno), `right-padding` (relleno por la derecha), `staff-padding` (relleno de pentagrama)

     Según un objeto se está colocando, el valor de su propiedad de relleno `padding` especifica el espacio intermedio que se debe dejar entre él mismo y el límite más próximo del objeto contra el que se está colocando. Observe que es el valor de `padding` del objeto que se está colocando el que se usa; el valor de `padding` del objeto que ya está colocado se ignora. Los espacios intermedios especificados mediante `padding` se pueden aplicar a todos los objetos que contemplan el interface `side-position-interface`.

     En lugar de con `padding`, la colocación de los grupos de alteraciones se controla con `right-padding`. Esta propiedad se encuentra en el objeto `AccidentalPlacement` que, observe, vive dentro del contexto de Staff. Durante el proceso tipográfico, las cabezas de las notas se componen tipográficamente en primer lugar, y después las alteraciones, si existen, se añaden a la izquierda de las cabezas utilizando la propiedad de relleno por la derecha `right-padding` para determinar la separación entre la alteración y la cabeza, y de las alteraciones entre sí. Así pues, sólo la propiedad de relleno por la derecha `right-padding` del objeto `AccidentalPlacement` tiene efecto sobre la colocación de las alteraciones.

     La propiedad `staff-padding` está estrechamente relacionada con la propiedad `padding`: `padding` controla la separación mínima entre cualquier objeto que contemple el interface `side-position-interface` y el objeto más cercano (generalmente la nota o las líneas del pentagrama); `staff-padding` se aplica sólo a los objetos que siempre se sitúan fuera del pentagrama: controla la separación mínima entre dicho objeto y el pentagrama. Observe que `staff-padding` no tiene ningún efecto sobre objetos que se posicionan respecto a la nota en vez de hacerlo respecto al pentagrama, incluso aunque puede ser sobreescrito sin error por tales objetos: simplemente se ignora.

     Para descubrir qué propiedad de relleno se necesita para el objeto que quiere recolocar, debe volver al manual de RFI y buscar las propiedades del objeto. Tenga cuidado porque las propiedades de relleno podrían no estar en el objeto más obvio, así que busque en los objetos que puedan tener alguna relación con él.

     Todos los valores de relleno se miden en espacios del pentagrama. Para la mayor parte de los objetos el valor se establece de forma predeterminada en aproximadamente 1.0 o menos (varía con cada objeto). Se puede sobreescribir si se necesita una separación intermedia mayor (o menor).

   - `self-alignment-X` (Auto-alineamiento en el eje X)

     Esta propiedad se puede usar para alinear el objeto a la izquierda, a la derecha, o centrarlo con respecto al punto de referencia del objeto «padre». Se puede usar con todos los objetos que contemplan el interface `self-alignment-interface`. En general son objetos que contienen texto. Los valores son `LEFT`, `RIGHT` o `CENTER`. De forma alternativa se puede especificar un valor numérico entre `-1` y `+1`, donde `-1` es alineado por la izquierda, `+1` es alineado por la derecha, y los números intermedios mueven el texto progresivamente desde alineado por la izquierda hasta alineado por la derecha. Se pueden especificar valores numéricos mayores de `1` para mover el texto incluso más lejos hacia la izquierda, o menos de `-1` para alejarlo más hacia la derecha. Un cambio en `1` en el valor corresponde a un movimiento de la mitad de la longitud total del propio texto.

   - `extra-spacing-width` (anchura de separación adicional)

     Esta propiedad está disponible para todos los objetos que contemplan el interface `item-interface`. Toma dos números, el primero se suma al límite izquierdo y el segundo se suma al límite derecho. Los números negativos desplazan el límite a la izquierda y los positivos a la derecha, por lo que para ensanchar un objeto el primer número debe ser negativo y el segundo positivo. Observe que no todos los objetos ostentan los dos números. Por ejemplo, el objeto `Accidental` (alteración) sólo toma nota del primer número (el borde izquierdo).

   - `staff-position` (posición de pentagrama)

     `staff-position` es una propiedad del interface `staff-symbol-referencer-interface`, que está contemplado por los objetos que se colocan con relación al pentagrama. Especifica la posición vertical del objeto con relación a la tercera línea del pentagrama en medios espacios de pentagrama. Es útil en la resolución de colisiones entre objetos de presentación como silencios multi-compás, ligaduras de unión y notas en distintas voces.

   - `force-hshift` (forzar desplazamiento horizontal)

     Las notas muy juntas de un acorde, o aquellas que ocurren al mismo tiempo en voces distintas, se disponen en dos (y ocasionalmente más) columnas para evitar la superposición de las cabezas. Éstas reciben el nombre de columnas de notas, y se crea un objeto llamado `NoteColumn` para disponer las notas en dicha columna.

     La propiedad `force-hshift` es una propiedad de una `NoteColumn` (realmente lo es del interface `note-column-interface`). Modificarlo permite mover una columna de notas en unidades adecuadas a una columna de notas, por ejemplo la anchura de la cabeza de la nota de la primera voz. Se debe usar en situaciones complejas donde las instrucciones `\shiftOn` normales (véase Voces explícitas) no resuelven el conflicto entre las notas. Es preferible a la propiedad `extra-offset` para este propósito porque no hay necesidad de averiguar la distancia en espacios de pentagrama, y mover las notas dentro o fuera de una `NoteColumn` afecta a otras acciones como a la fusión entre cabezas de nota.

3. Finalmente, cuando todo lo demás falla, los objetos se pueden reposicionar manualmente con relación a la tercera línea del pentagrama verticalmente, o desplazándolas una cierta distancia a una nueva posición. Las desventajas son que los valores correctos para el reposicionamiento se deben adivinar, a menudo por ensayo y error, para cada objeto individual y, puesto que el movimiento se hace después de que LilyPond ha colocado todos los demás objetos es usuario es responsable de evitar cualquier colisión que pudiera producirse. Pero la dificultar principal con este enfoque es que los valores de reposicionado podrían tener que ser vueltos a calcular si la música se modifica más tarde. Las propiedades que se pueden usar para este tipo de posicionamiento manual son:
   `extra-offset (desplazamiento adicional)`

     Esta propiedad se aplica a cualquier objeto de presentación que contemple el `grob-interface`. Toma una pareja de números que especifican el desplazamiento adicional en las direcciones horizontal y vertical. Los números negativos mueven el objeto a la izquierda o hacia abajo. Las unidades son espacios de pentagrama. El desplazamiento adicional se hace después de que la composición tipográfica de los objetos ha terminado, así que un objeto puede ser reposicionado a cualquier lugar sin afectar a ninguna otra cosa.

   `positions (posiciones)`

     Ésta es de la mayor utilidad para ajustar manualmente la inclinación y la altura de las barras de corchea, ligaduras de expresión y corchetes de grupos de valoración especial. Toma una pareja de números que dan la posición de los extremos izquierdo y derecho de la barra, ligadura, etc. con relación a la tercera línea del pentagrama. Las unidades son espacios de pentagrama. Observe, sin embargo, que las ligaduras de expresión y de fraseo no se pueden reposicionar en cantidades arbitrariamente grandes. LilyPond en primer lugar genera una lista de posiciones posibles para la ligadura y de forma predeterminada encuentra la ligadura que tiene “mejor aspecto”. Si la propiedad `positions` se ha sobreescrito, la ligadura que está más cerca de las posiciones que se han solicitado, se selecciona de la lista.

Un objeto en particular podría no tener todas estas propiedades. Es necesario ir al manual RFI para buscar qué propiedades se encuentran disponibles para el objeto en cuestión.

Aquí presentamos una lista de los objetos que es más probable que estén implicados en colisiones, con el nombre del objeto que habría que buscar en el RFI para descubrir qué propiedades se deben usar para moverlos.

Tipo de objeto | Nombre del objeto
--- | ---
Articulaciones | `Script`
Barras | `Beam`
Dinámica (verticalmente) | `DynamicLineSpanner`
Dinámica (horizontalmente) | `DynamicText`
Digitaciones | `Fingering`
Llamadas de ensayo y textuales | `RehearsalMark`
Ligaduras de expresión | `Slur`
Texto, por ejemplo `^"texto"` | `TextScript`
Ligaduras de unión | `Tie`
Grupos de valoración especial | `TupletBracket`

Otros idiomas: English, česky, deutsch, français, italiano, 日本語, nederlands.

#### LilyPond — Manual de aprendizaje