Manual de aprendizaje de GNU LilyPond: 5.1.4 Métodos de trucaje

### 5.1.4 Métodos de trucaje

La instrucción \override

#### La instrucción `\override`

Ya hemos visto las instrucciones `\set` y `\with`, que se usan para cambiar las propiedades de los contextos y para quitar y poner grabadores, en Modificar las propiedades de los contextos y Añadir y eliminar grabadores. Ahora debemos examinar algunas otras instrucciones importantes.

La instrucción que cambia las propiedades de los objetos de presentación es `\override`. Puesto que esta instrucción debe modificar propiedades internas que se encuentran en un lugar profundo dentro de LilyPond, su sintaxis no es tan simple como la del resto de las instrucciones que hemos usado hasta ahora. Tiene que saber exactamente qué propiedad de qué objeto y en qué contexto se debe modificar, y cuál debe ser su nuevo valor. Veamos cómo se hace.

La sintaxis genérica de esta instrucción es:

>     \override Contexto.ObjetoDePresentación.propiedad-de-presentación =
>     #valor

Esto establecerá la propiedad de nombre propiedad-de-presentación del objeto de presentación con el nombre ObjetoDePresentación, que es miembro del contexto Contexto, al valor valor.

El contexto se puede omitir (y normalmente así es) cuando el contexto requerido se encuentra implicado sin ambigüedad y es uno de los contextos del nivel más bajo, es decir: `Voice`, `ChordNames` o `Lyrics`, y lo omitiremos en muchos de los ejemplos siguientes. Veremos más tarde cuándo se debe especificar.

Las últimas secciones tratan de forma exhaustiva las propiedades y sus valores, véase Tipos de propiedades. Pero en esta sección usaremos sólo unas cuantas propiedades y valores sencillos que sean fáciles de entender, para ilustrar el formato y la utilización de estas instrucciones.

Las expresiones principales de LilyPond son elementos musicales como notas y duraciones, así como cadenas y elementos de marcado. Las expresiones más específicas como números, símbolos y listas se procesan en el ‘modo de Scheme’, que se invoca por medio del prefijo ‘`#`’ escrito antes del valor. Para ver más información acerca del modo de Scheme, consulte Sintaxis del Scheme de LilyPond.

`\override` es la instrucción de uso más común dentro del trucaje, y durante la mayor parte del resto de este capítulo presentaremos ejemplos de cómo se usa. A continuación hay un ejemplo sencillo para cambiar el color de una cabeza:

>     \relative {
>       c'4 d
>       \override NoteHead.color = "red"
>       e4 f |
>       \override NoteHead.color = "green"
>       g4 a b c |
>     }

#### La instrucción `\revert`

Una vez sobreescrita, la propiedad retiene su nuevo valor hasta que se sobreescribe de nuevo o se encuentra una instrucción `\revert`. La instrucción `\revert` tiene la siguiente sintaxis y ocasiona que el valor de la propiedad se devuelva a su valor predeterminado original; observe que no es a su valor previo si se han utilizado varias instrucciones `\override`.

>     \revert Contexto.ObjetoDePresentación.propiedad-de-presentación

Una vez más, igual que Contexto dentro de la instrucción `\override`, con frecuencia no es necesario especificar el Contexto. Se omitirá en muchos de los ejemplos siguientes. Aquí devolvemos el color de la cabeza al valor predeterminado para las dos últimas notas:

>     \relative {
>       c'4 d
>       \override NoteHead.color = "red"
>       e4 f |
>       \override NoteHead.color = "green"
>       g4 a
>       \revert NoteHead.color
>       b4 c |
>     }

#### El prefijo `\once`

`\override`, `\revert`, `\set` y `\unset` se pueden hacer preceder por `\once`. Esto hace que la instrucción sea efectiva solamente durante el tiempo musical en curso y antes de que la propiedad vuelva a tener otra vez su valor anterior (que puede ser distinto de su valor predeterminado si aún se está aplicando otra instrucción `\override` de sobreescritura). Utilizando el mismo ejemplo, podemos cambiar el color de una sola nota de la siguiente manera:

>     \relative {
>       c'4 d
>       \override NoteHead.color = "red"
>       e4 f |
>       \once \override NoteHead.color = "green"
>       g4 a
>       \once \revert NoteHead.color
>       b c |
>       \revert NoteHead.color
>       f2 c |
>     }

El prefijo `\once` también se puede usar delante de muchas instrucciones predefinidas para limitar su efecto a un solo momento musical:

>     \relative {
>       c'4( d)
>       \once \slurDashed
>       e4( f) |
>       g4( a)
>       \once \hideNotes
>       b( c) |
>     }

#### La instrucción `\overrideProperty`

Hay otra forma para la instrucción de sobreescritura, `\overrideProperty`, que ocasionalmente es necesaria. La mencionamos aquí con un propósito de exhaustividad, pero para ver más detalles consulte Trucos difíciles.

#### La instrucción `\tweak`

La última instrucción de trucaje que está disponible es `\tweak`. Se debe utilizar cuando varios objetos tienen lugar en el mismo momento musical pero solo queremos cambiar las propiedades de algunos de ellos, como una sola nota dentro de un acorde. El uso de `\override` para la sobreescritura afectaría a todas las notas del acorde, mientras que `\tweak` afecta solamente al siguiente elemento del flujo de entrada.

He aquí un ejemplo. Suponga que queremos cambiar el tamaño de la cabeza de la nota intermedia (el Mi) en un acorde de Do mayor. En primer lugar, veamos lo que haría `\once \override`:

>     \relative {
>       <c' e g>4
>       \once \override NoteHead.font-size = #-3
>       <c e g>4
>       <c e g>4
>     }

Vemos que la sobreescritura con override afecta a todas las cabezas de las notas del acorde. Esto es así porque todas las notas de un acorde ocurren en el mismo momento musical, y la acción de `\once` es aplicar la sobreescritura a todos los objetos de presentación del tipo especificado que ocurren en el mismo momento musical que la propia instrucción de sobreescritura `\override`.

La instrucción `\tweak` opera de una forma distinta. Actúa sobre el elemento inmediatamente siguiente dentro del flujo de entrada. En su forma más sencilla es efectivo solamente sobre objetos que se crean directamente a partir del elemento siguiente, en esencia las cabezas y las articulaciones.

Así pues, volviendo a nuestro ejemplo, el tamaño de la nota intermedia se cambiaría de la siguiente forma:

>     \relative {
>       <c' e g>4
>       <c \tweak font-size #-3 e g>4
>     }

Observe que la sintaxis de `\tweak` no es igual que la de `\override`. El contexto no se debe especificar; de hecho, generaría un error hacerlo. Tanto el contexto como el objeto de presentación están implícitos por el siguiente elemento del flujo de entrada. Observe también que no debe haber un signo igual. Así que la sintaxis de la instrucción `\tweak` en su forma sencilla es:

>     \tweak propiedad-de-presentación #valor

Una instrucción `\tweak` también se puede usar para modificar sólo una de una serie de articulaciones, como se muestra aquí:

>     a'4^"Black"
>       -\tweak color "red" ^"Red"
>       -\tweak color "green" _"Green"

Observe que la instrucción `\tweak` debe venir precedida de una marca de articulación porque la propia expresión trucada debe aplicarse como una articulación. En el caso de más de una sobreescritura de dirección (`^` o `_`), gana la sobreescritura situada más a la izquierda porque se aplica en último lugar.

Los objetos tales como plicas y alteraciones accidentales se crean más tarde, y no directamente a partir del evento que viene a continuación. Aún es posible utilizar `\tweak` sobre tales objetos creados indirectamente mediante el nombrado explícito del objeto de presentación, siempre y cuando LilyPond pueda rastrear su origen hasta el evento original:

>     <\tweak Accidental.color "red"   cis''4
>      \tweak Accidental.color "green" es''
>      g''>

Esta forma extensa de la instrucción `\tweak` se puede describir como

>     \tweak LayoutObject.layout-property #value

La instrucción `\tweak` también se debe usar para cambiar la apariencia de uno solo de un conjunto de grupos especiales anidados que comiencen en el mismo instante musical. En el siguiente ejemplo, el corchete del tresillo largo y el primero de los tres corchetes cortos empiezan en el mismo momento musical, y por ello cualquier instrucción `\override` se aplicaría a los dos. En el ejemplo se usa `\tweak` para distinguir entre ellos. La primera instrucción `\tweak` especifica que el corchete del tresillo largo se debe colocar por encima de las notas y el segundo especifica que el número del tresillo se debe imprimir en rojo sobre el corchete del primer tresillo corto.

>     \relative c'' {
>       \tweak direction #up
>       \tuplet 3/4 {
>         \tweak color "red"
>         \tuplet 3/2 { c8[ c c] }
>         \tuplet 3/2 { c8[ c c] }
>         \tuplet 3/2 { c8[ c c] }
>       }
>     }

Si los grupos anidados no comienzan en el mismo momento, su apariencia se puede modificar de la forma usual mediante instrucciones `\override`:

>     \relative {
>       \tuplet 3/2 { c'8[ c c] }
>       \once \override TupletNumber.text = #tuplet-number::calc-fraction-text
>       \tuplet 3/2 {
>         c8[ c]
>         c8[ c]
>         \once \override TupletNumber.transparent = ##t
>         \tuplet 3/2 { c8[ c c] }
>         \tuplet 3/2 { c8[ c c] }
>       }
>     }

#### Véase también

Referencia de la notación: La instrucción tweak.

#### El prefijo `\single`

Supongamos que queremos enfatizar la cabeza de algunas notas trazándolas de color e incrementando su tamaño, y supongamos también hemos programado una función para hacer la tarea más cómoda:

>     emphNoteHead = {
>       \override NoteHead.color = "red"
>       \override NoteHead.font-size = 2
>     }
>     \relative {
>       c''4 a \once \emphNoteHead f d |
>     }

El prefijo `\once` funciona perfectamente para enfatizar notas únicas o acordes completos, pero no se puede usar para enfatizar una sola nota dentro de un acorde. Anteriormente vimos cómo se puede usar la instrucción `\tweak` para hacerlo, véase La instrucción `\tweak`. Pero `\tweak` no se puede usar con una función; ahí es donde entra la instrucción `\single`:

>     emphNoteHead = {
>       \override NoteHead.color = "red"
>       \override NoteHead.font-size = 2
>     }
>     \relative {
>        <c'' a \single \emphNoteHead f d>4
>     }

En resumen, `\single` convierte las sobreescrituras hechas con`\override` en trucos hechos con `\tweak` de tal manera que cuando hay varios objetos en el mismo instante de tiempo musical (como las notas de un acorde), `\single` afecta a una única nota, la que se genera por la expresión que sigue inmediatamente, a diferencia de `\once` que afecta a todos esos objetos.

El uso de `\single` de esta forma con una función cualquiera que contenga solamente sobreescrituras, puede aplicarse a las notas individuales de un acorde. Sin embargo, `\single` no convierte `\revert`, `\set` ni `\unset` en trucos de `\tweak`.

#### Véase también

Manual de aprendizaje: La instrucción `\tweak`, Uso de variables para los ajustes de disposición.

#### LilyPond — Manual de aprendizaje v2.24.4 (rama estable).