4.3.4 Modificar las propiedades de los contextos (Manual de aprendizaje de GNU LilyPond)

#### 4.3.4 Modificar las propiedades de los contextos

Los contextos se responsabilizan de mantener los valores de un cierto número de properties de contexto. Muchas de ellas se pueden cambiar para influir en la interpretación del código de entrada y cambiar así la apariencia de la salida impresa. Se modifican mediante la instrucción `\set`. Esta instrucción toma la forma siguiente:

    \set NombreDelContexto.nombreDeLaPropiedad = valor

Donde el NombreDelContexto es normalmente `Score`, `Staff` o `Voice`. Se puede omitir, en cuyo caso se supone que es `Voice`.

Los nombres de las propiedades de contexto consisten en palabras unidas sin ningún guión o barra baja, y donde todas las palabras excepto la primera empiezan en mayúscula. A continuación podemos ver algunos ejemplos de nombres de propiedades utilizadas con frecuencia. Hay muchas más que las que se muestran aquí.

> Nombre de la propiedad | Tipo | Función | Valor de ejemplo
> --- | --- | --- | ---
> `extraNatural` | booleano | Si es verdadero, poner becuadros adicionales antes de las alteraciones | `##t`, `##f`
> `currentBarNumber` | entero | Ajustar el número del compás actual | `50`
> `doubleSlurs` | Booleano | Si es verdadero, imprimir ligaduras de expresión por encima y por debajo de las notas | `##t`, `##f`
> `instrumentName` | texto | Establecer el nombre del pentagrama, situado a la izquierda | `\markup { ... }`
> `fontSize` | real | Aumentar o disminuir el tamaño de la fuente tipográfica | `2.4`
> `stanza` | texto | Establecer el texto que se imprime antes del comienzo de una estrofa | `"2"`

En la tabla anterior, un valor Booleano es verdadero (`#t`, True) o falso (`#f`, False), un entero es un número entero (normalmente positivo), un número real es un número decimal positivo o negativo, y el texto es una cadena que se encierra entre comillas dobles. Observe el uso de un cuadradillo adicionale, (‘`#`’), que debe usarse siempre que siga una expresión de Scheme.

Antes de poder establecer cualquiera de estas propiedades, tenemos que saber en qué contexto operan. A veces es algo obvio, pero en ocasiones puede ser algo enrevesado. Si especificamos un contexto equivocado, no se produce ningún mensaje de error, pero el funcionamiento esperado no tendrá lugar. Por ejemplo, la propiedad `clefGlyph` (dibujo de la clave) vive claramente dentro del contexto de `Staff`, puesto que es el glifo de la clave del pentagrama lo que se quiere cambiar. En este ejemplo, la primera clave del pentagrama se imprime correctamente, pero no la segunda (que imprime la clave predeterminada de Sol en lugar de la de Fa), porque hemos omitido el nombre del contexto.

>     <<
>       \new Staff \relative {
>         \set Staff.clefGlyph = "clefs.C"
>         c''2 c
>       }
>       \new Staff \relative {
>         \set clefGlyph = "clefs.F"  % Wrong!
>         d'2 d
>       }
>     >>

La segunda instrucción `\set` establece la propiedad `Voice.clefGlyph` a `clefs.F`, pero como LilyPond no cuenta con `clefGlyph` en el contexto `Voice`, ajustar el valor en ese lugar no tiene ningún efecto. Esto no es un error, y no se produce ningún mensaje.

La propiedad `clefGlyph` tendrá efecto solamente si se establece dentro del contexto `Staff`, pero algunas propiedades se pueden establecer en más de un contexto. Por ejemplo, la propiedad `extraNatural` está establecida por defecto al valor `#t` (verdadero) para todos los pentagramas. Si se establece a `#f` (falso) en un contexto de `Staff` determinado, se aplicará solamente a las alteraciones de ese pentagrama. Si se establece a falso en el contexto de la partitura, `Score`, se aplicará a todos los contextos de pentagrama donde no hubiera sido establecido.

Así, esto desactivará los becuadros adicionales en un pentagrama:

>     <<
>       \new Staff \relative {
>         aeses'2 aes
>       }
>       \new Staff \relative {
>         \set Staff.extraNatural = ##f
>         aeses'2 aes
>       }
>     >>

y esto los desactivará en todos los pentagramas:

>     <<
>       \new Staff \relative {
>         aeses'2 aes
>       }
>       \new Staff \relative {
>         \set Score.extraNatural = ##f
>         aeses'2 aes
>       }
>     >>

Como un ejemplo más, si se establece `clefTransposition` dentro del contexto de `Score`, se modifica la transposición para los contextos de `Staff` actuales y futuros en donde no esté establecido de otra manera.

El comando opuesto, `\unset`, elimina la propiedad del contexto. Con frecuencia, otro comando `\set` puede lograr el mismo resultado observable que un `\unset`. La principal consideración es si el valor del contexto circundante debería mostrarse. `\set` lo enmascara y `\unset` lo hace visible.

Las instrucciones `\set` y `\unset` pueden aparecer en cualquier lugar del archivo de entrada y tendrán efecto a partir del tiempo en que se encuentran y hasta el final de la partitura o hasta que la propiedad se establezca de nuevo mediante `\set` o `\unset`. Probemos a modificar el tamaño de la fuente tipográfica, lo que afecta al tamaño de las cabezas de las notas (entre otras cosas) varias veces. El valor se establece de forma relativa al tamaño de fuente predeterminado, no al valor en curso.

>     \relative {
>       c'4 d
>       % make note heads smaller
>       \set fontSize = -4
>       e4 f |
>       % make note heads larger
>       \set fontSize = 2.5
>       g4 a
>       % return to default size
>       \unset fontSize
>       b4 c |
>     }

Hemos podido ver cómo establecer los valores de diversos tipos de propiedad diferentes. Observe que las expresiones de Scheme van siempre precedidas de un símbolo de cuadradillo, ‘`#`’, de forma que los valores booleanos ‘verdadero’ y ‘falso’ se especifican respectivamente mediante `##t` y `##f`, con dos cuadradillos. Una propiedad de texto se debe encerrar entre comillas dobles, como antes, aunque veremos más adelante que el texto realmente se puede especificar de una forma mucho más general utilizando la potentísima instrucción `markup`.

#### Cambiar las propiedades de un contexto con `\with`

El valor de las propiedades de contexto se puede establecer en el momento en que se crea el contexto. Cuando se crea un contexto con una instrucción `\new` puede ir inmediatamente seguido de un bloque `\with { … }` en el que se establecen los valores iniciales de las propiedades. Por ejemplo, si quisiéramos suprimir la impresión de becuadros adicionales, escribiríamos

    \new Staff \with { extraNatural = ##f }

de la siguiente forma:

>     <<
>       \new Staff {
>         \relative {
>           gisis'4 gis aeses aes
>         }
>       }
>       \new Staff \with { extraNatural = ##f } {
>         \relative {
>           gisis'4 gis aeses aes
>         }
>       }
>     >>

`\with` puede ser una forma clara de establecer valores que se quieren mantener fijos para toda la duración del contexto. Sin embargo, no hace nada para forzarlo; las propiedades inicializadas de esta manera aún pueden cambiarse dinámicamente utilizando `\set` y `\unset`.

#### Cambiar las propiedades de un contexto con `\context`

Los valores de propiedad de los contextos se pueden establecer para todos los contextos de un tipo determinado, como por ejemplo todos los contextos de `Staff`, con una única instrucción. El tipo de contexto se identifica mediante la utilización del nombre de su tipo, como `Staff`, precedido de una barra invertida: `\Staff`. El enunciado que establece el valor de la propiedad es el mismo que el que está en un bloque `\with`, presentado anteriormente. Se coloca en un bloque `\context` dentro de un bloque `\layout`. Cada bloque `\context` afecta a todos los contextos del tipo especificado a lo largo del bloque `\score` o `\book` en el que aparece el bloque `\layout`. A continuación presentamos un ejemplo que muestra el formato:

>     \score {
>       \new Staff {
>         \relative {
>           cisis''4 e d cis
>         }
>       }
>       \layout {
>         \context {
>           \Staff
>           extraNatural = ##t
>         }
>       }
>     }

Si se quiere aplicar la sobreescritura de propiedades a todos los pentagramas de la partitura:

>     \score {
>       <<
>         \new Staff {
>           \relative {
>             gisis'4 gis aeses aes
>           }
>         }
>         \new Staff {
>           \relative {
>             gisis'4 gis aeses aes
>           }
>         }
>       >>
>       \layout {
>         \context {
>           \Score
>           extraNatural = ##f
>         }
>       }
>     }

Las propiedades de contexto establecidas de esta forma se pueden sobreescribir para ejemplares concretos de contextos mediante enunciados dentro de un bloque `\with`, y mediante instrucciones `\set` intercaladas dentro de enunciados musicales.

#### Véase también

Referencia de la notación: Cambiar los valores por omisión de los contextos, Set and unset.

Referencia de funcionamiento interno: Contexts, Tunable context properties.

#### Manual de aprendizaje de GNU LilyPond v2.26.0 (stable-branch).

- 1 Installing
  - 1.1 Graphical setup
  - 1.2 Command line setup
- 2 Tutorial
  - 2.1 Compilación del archivo
  - 2.2 Cómo escribir archivos de entrada
    - 2.2.1 Notación sencilla
      - Alturas
      - Duraciones (valores rítmicos)
      - Silencios
      - Indicación de compás
      - Indicaciones de tempo
      - Clave
      - Todo junto
    - 2.2.2 Trabajar sobre los archivos de entrada
  - 2.3 Tratar con los errores
    - 2.3.1 Consejos generales de solución de problemas
    - 2.3.2 Algunos errores comunes
  - 2.4 Cómo leer los manuales
    - 2.4.1 Material omitido
    - 2.4.2 Ejemplos con enlace
    - 2.4.3 Panorámica de los manuales
- 3 Notación corriente
  - 3.1 Notación en un solo pentagrama
    - 3.1.1 Líneas divisorias y comprobaciones de compás
      - Líneas divisorias
      - Comprobaciones de compás
    - 3.1.2 Alturas y armaduras
      - Alteraciones accidentales
      - Armaduras
      - Advertencia: armaduras y alturas
    - 3.1.3 Ligaduras de unión y de expresión
      - Ligaduras de unión
      - Ligaduras de expresión
      - Ligaduras de fraseo
      - Advertencias: ligaduras de expresión frente a ligaduras de unión
    - 3.1.4 Articulaciones y matices dinámicos
      - Articulaciones
      - Indicaciones de digitación
      - Matices dinámicos
    - 3.1.5 Añadir texto
    - 3.1.6 Barras automáticas y manuales
    - 3.1.7 Instrucciones rítmicas avanzadas
      - Compás parcial
      - Grupos especiales
      - Notas de adorno
  - 3.2 Varias notas a la vez
    - 3.2.1 Explicación de las expresiones musicales
      - Analogía: expresiones matemáticas
      - Expresiones musicales simultáneas: varios pentagramas
      - Expresiones musicales simultáneas: un solo pentagrama
    - 3.2.2 Varios pentagramas
    - 3.2.3 Grupos de pentagramas
    - 3.2.4 Combinar notas para formar acordes
    - 3.2.5 Polifonía en un solo pentagrama
  - 3.3 Canciones
    - 3.3.1 Elaborar canciones sencillas
    - 3.3.2 Alineación de la letra a una melodía
    - 3.3.3 Letra en varios pentagramas
  - 3.4 Retoques finales
    - 3.4.1 Organizar las piezas mediante variables
    - 3.4.2 Añadir títulos
    - 3.4.3 Nombres de nota absolutos
    - 3.4.4 Más allá del tutorial
- 4 Conceptos fundamentales
  - 4.1 Cómo funcionan los archivos de entrada de LilyPond
    - 4.1.1 Introducción a la estructura de los archivos de LilyPond
    - 4.1.2 La partitura es una (única) expresión musical compuesta
    - 4.1.3 Anidado de expresiones musicales
    - 4.1.4 Estructura de un elemento de nota
    - 4.1.5 Acerca de la no anidabilidad de llaves y ligaduras
  - 4.2 Las voces contienen música
    - 4.2.1 Oigo voces
    - 4.2.2 Voces explícitas
    - 4.2.3 Voces y música vocal
  - 4.3 Contextos y grabadores
    - 4.3.1 Explicación de los contextos
    - 4.3.2 Crear contextos
    - 4.3.3 Explicación de los grabadores
    - 4.3.4 Modificar las propiedades de los contextos
    - 4.3.5 Añadir y eliminar grabadores
  - 4.4 Extender las plantillas
    - 4.4.1 Soprano y violoncello
    - 4.4.2 Partitura vocal a cuatro voces SATB
    - 4.4.3 Crear una partitura partiendo de cero
    - 4.4.4 Ahorrar tecleo mediante variables y funciones
    - 4.4.5 Partituras y particellas
- 5 Trucar la salida
  - 5.1 Elementos de trucaje
    - 5.1.1 Objetos e interfaces
    - 5.1.2 Convenciones de nombres de objetos y propiedades
    - 5.1.3 Métodos de trucaje
      - La instrucción `\override`
      - La instrucción `\revert`
      - El prefijo `\once`
      - Las instrucciones `\tweak` y `\offset`
      - El prefijo `\single`
  - 5.2 Manual de referencia de funcionamiento interno
    - 5.2.1 Propiedades de los objetos de presentación
    - 5.2.2 Propiedades de las interfaces
    - 5.2.3 Tipos de propiedades
  - 5.3 Apariencia de los objetos
    - 5.3.1 Visibilidad y color de los objetos
      - La propiedad `stencil` (sello)
      - La propiedad `break-visibility` (visibilidad en el salto)
      - La propiedad `transparent` (transparente)
      - La propiedad `color`
    - 5.3.2 Tamaño de los objetos
    - 5.3.3 Longitud y grosor de los objetos
  - 5.4 Desplazamientos y alineaciones
  - 5.5 Colocación de los objetos
    - 5.5.1 Comportamiento automático
    - 5.5.2 Objetos interiores al pentagrama
      - La propiedad `direction` (dirección)
      - Digitaciones
    - 5.5.3 Objetos fuera del pentagrama
      - La propiedad `outside-staff-priority` (prioridad fuera del pentagrama)
      - La instrucción `\textLengthOn`
      - Posicionamiento de los matices dinámicos
      - Escalado de un «Grob»
  - 5.6 Espaciado vertical
  - 5.7 Colisiones de objetos
    - 5.7.1 Mover objetos
    - 5.7.2 Arreglar notación con superposiciones
      - La propiedad `padding` (relleno)
      - La propiedad `right-padding` (relleno por la derecha)
      - La propiedad `staff-padding` (relleno de pentagrama)
      - La propiedad `self-alignment-X` (auto-alineación en X)
      - La propiedad `staff-position` (posición en el pentagrama)
      - La propiedad `extra-offset` (desplazamiento adicional)
      - La propiedad `positions` (posiciones)
      - La propiedad `force-hshift` (forzar desplazamiento horizontal)
    - 5.7.3 Ejemplos reales de música
  - 5.8 Trucajes adicionales
    - 5.8.1 Otras aplicaciones de los trucos
      - Unir notas entre voces distintas
      - Simulación de un calderón en el MIDI
    - 5.8.2 Uso de variables para los ajustes de disposición
    - 5.8.3 Hojas de estilo
    - 5.8.4 Otras fuentes de información
    - 5.8.5 Trucos avanzados con Scheme
- Appendix A Plantillas
  - A.1 Plantillas incorporadas
    - A.1.1 Plantilla coral SATB
    - A.1.2 Plantilla coral SSAATTBB
  - A.2 Plantillas de pentagrama único
    - A.2.1 Sólo notas
    - A.2.2 Notas y letra
    - A.2.3 Notas y acordes
    - A.2.4 Notas, letra y acordes
  - A.3 Plantillas de piano
    - A.3.1 Piano solo
    - A.3.2 Piano y melodía con letra
    - A.3.3 Piano con letra centrada
  - A.4 Plantillas de cuarteto de cuerda
    - A.4.1 Cuarteto de cuerda simple
    - A.4.2 Particellas de cuarteto de cuerda
  - A.5 Plantillas de conjuntos vocales
    - A.5.1 Partitura vocal SATB
    - A.5.2 Partitura vocal SATB y reducción para piano automática
    - A.5.3 SATB con contextos alineados
    - A.5.4 SATB sobre cuatro pentagramas
    - A.5.5 Estrofas a solo y estribillo a dos voces
    - A.5.6 Melodías de himnos
    - A.5.7 Salmos
  - A.6 Plantillas orquestales
    - A.6.1 Orquesta, coro y piano
  - A.7 Plantillas para notación antigua
    - A.7.1 Transcripción de música mensural
    - A.7.2 Plantilla para transcripción de canto gregoriano
  - A.8 Otras plantillas
    - A.8.1 Combo de jazz
- Appendix B GNU Free Documentation License
- Appendix C Índice