22.2.2 Uso de etiquetas
La instrucción \tag marca una expresión musical con un
nombre.
\tag #'fulano { ... }
Las expresiones etiquetadas de esta manera se pueden tratar de una forma muy conveniente como un todo.
Mantenimiento y eliminación de música etiquetada
La instrucción \keepWithTag selecciona música etiquetada.
En cambio, \removeWithTag excluye la música etiquetada.
Filtro Resultado Música etiquetada precedida de \keepWithTag #'nombreo de
\keepWithTag #'(nombre1 nombre2…)
\keepWithTag #'(nombre1 nombre2…)Se incluye la música no etiquetada y la música etiquetada con el nombre o nombres de etiqueta dados; se excluye la música etiquetada con cualquier otro nombre de etiqueta. Música etiquetada precedida de \removeWithTag #'nombreo de
\removeWithTag #'(nombre1 nombre2…)Se incluye la música no etiquetada y la música que no está etiquetada con ninguno de los nombres de etiqueta dados; se excluye la música etiquetada con los nombres de etiqueta dados. Música etiquetada no precedida de \keepWithTagni de\removeWithTagSe incluye toda la música etiquetada y no etiquetada.
Los argumentos de las instrucciones \tag,
\keepWithTag y \removeWithTag deben ser un símbolo o
una lista de símbolos (como #'score o #'(violinI
violinII), seguida de una expresión musical. Si y solo si
los símbolos son identificadores de LilyPond válidos (caracteres
alfabéticos solamente, sin números, guiones bajos ni guiones
normales y que no puedan confundirse con notas), el prefijo
#' se puede omitir y, como abreviatura, una lista de
símbolos puede usar el separador de coma. Por ejemplo, \tag
#'(violinI violinII) se puede escribir como \tag
violinI,violinII. Lo mismo vale para los argumentos de
\keepWithTag y \removeWithTag. Las instrucciones de
etiquetado son funciones musicales, por lo que no se pueden usar
para filtrar elementos que no son expresiones musicales, tales
como bloques \book o \score.
En el ejemplo siguiente vemos dos versiones de una pieza musical, una que muestra trinos con la notación usual y otra con los trinos expandidos explícitamente.
music = \relative { g'8. c32 d \tag #'trills { d8.\trill } \tag #'expand { \repeat unfold 3 { e32 d } } c32 d } \score { \keepWithTag #'trills \music } \score { \keepWithTag #'expand \music }![]()
De forma alternativa, a veces es más fácil excluir secciones de música.
music = \relative { g'8. c32 d \tag #'trills { d8.\trill } \tag #'expand { \repeat unfold 3 { e32 d } } c32 d } \score { \removeWithTag #'expand \music } \score { \removeWithTag #'trills \music }![]()
Si las etiquetas marcan alternativas que tienen una duración no
nula, las alternativas son normalmente simultáneas como concepto.
En este caso es mejor poner las alternativas dentro de una
expresión musical simultánea de manera que la expresión musical
tenga la misma duración sin importar qué etiquetas se están
reteniendo. Esto es importante especialmente si está usando
etiquetas en combinación con instrucciones como \cueDuring.
outputTypeTag = "isScore" firstInstrument = \relative c' { << \tag #'isPart { \cueDuring "quoteSecondInstrument" #UP { r2 } } \tag #'isScore { r2 } >> e4 f | g4 a b c | } secondInstrument= \relative c'' { c4 c r2 | \cueDuring "quoteFirstInstrument" #DOWN { r2 } c4 c | } \addQuote quoteFirstInstrument \firstInstrument \addQuote quoteSecondInstrument \secondInstrument \new Staff { \keepWithTag \outputTypeTag \firstInstrument } \new Staff { \keepWithTag \outputTypeTag \secondInstrument }![]()
El fitrado mediante etiquetas se puede aplicar a articulaciones, textos, etc., anteponiendo
-\tag #'mi-etiqueta
a una articulación. Por ejemplo, lo siguiente define una nota con una indicación opcional de digitación y una nota con una anotación condicional.
c1-\tag #'finger ^4 c1-\tag #'warn ^"¡Ojo!"
Se pueden poner varias etiquetas sobre expresiones con varias
entradas de \tag, o combinando varias etiquetas en una
lista de símbolos.
music = \relative c'' { \tag AA \tag AB { a4 a a a } \tag BB,both { b4 b b b } } << \keepWithTag AA \music \keepWithTag BB \music \keepWithTag AB \music >>![]()
Se pueden aplicar varios filtros \removeWithTag a una sola
expresión musical para quitar varias secciones etiquetadas con
nombres distintos. De forma alternativa, podemos usar una sola
instrucción \removeWithTag con una lista de etiquetas.
music = \relative c'' { \tag AA { a4 a a a } \tag BB { b4 b b b } \tag CC { c4 c c c } \tag DD { d4 d d d } } \new Voice { \removeWithTag BB \removeWithTag CC \music \removeWithTag BB,CC \music }![]()
El uso de dos o más filtros \keepWithTag sobre una sola
expresión musical produce la eliminación de todas las
secciones etiquetadas, que no es lo que queremos: el primer filtro
quita todas excepto la que se nombra, y cualquier filtro posterior
elimina el resto. En su lugar, use una sola instrucción
\keepWithTag con una lista de varias etiquetas para
suprimir todas las secciones etiquetadas que no aparezcan
especificadas en la lista. Como ejemplo, el código siguiente
imprime música etiquetada con violinI y violinII pero
no la etiquetada con viola ni cello.
music = \relative c'' { \tag violinI { a4 a a a } \tag violinII { b4 b b b } \tag viola { c4 c c c } \tag cello { d4 d d d } } \new Staff { \keepWithTag violinI,violinII \music }![]()
Aunque \keepWithTag es útil para el manejo de un
solo conjunto de alternativas, la eliminación de música
etiquetada con otras etiquetas no relacionadas es problemática si
se utilizan para más de un propósito. En ese caso las etiquetas
se pueden agrupar con \tagGroup. El código siguiente
\tagGroup violinI,violinII,viola,cello
sitúa las cuatro etiquetas en un solo grupo de etiquetas. Como resultado, un código como el siguiente
\keepWithTag violinI …
ahora mostrará solamente la música etiquetada a partir del grupo
de etiquetas violinI y cualquier fragmento musical
etiquetado con una de las otras etiquetas resultará suprimido,
como muestra el ejemplo siguiente.
\tagGroup violinI,violinII \tagGroup original,arranged music = \relative { \tag violinI { c''4^"violinI" c c c } \tag violinII { a2 a } \tag original { e8 e e2. } \tag arranged { d'2 d4 d } \tag other { f^"other" f f f } R1^"untagged" } \new Voice { \keepWithTag violinI \music }![]()
Observe que las etiquetas individuales no pueden ser miembros de más de un grupo de etiquetas.
Añadir contenido antes y después de la música etiquetada
A veces podemos desear dividir la música en un determinado lugar
dentro de una expresión musical existente. Podemos usar
\pushToTag y \appendToTag para añadir material
delante o al final de los elements de diversas
construcciones musicales. Los lugares contemplados son
- música secuencial y simultánea
Si etiqueta una construcción completa
{…}o<<…>>, puede añadir expresiones musicales por delante o por detrás.- acordes
Si etiqueta un acorde
<…>, puede añadir notas por delante o bien por detrás, o articulaciones para el acorde completo.- notas y silencios
Si etiqueta una nota (también dentro de un acorde) o un silencio, puede añadir articulaciones por delante o por detrás de las articulaciones existentes. Observe que para añadir otras notas, en cambio, tiene que poner la nota dentro de un acorde y etiquetar el acorde.
Observe también que no se puede etiquetar una sola articulación y añadirla porque no es inherentemente una lista. En lugar de ello, etiquete la nota.
Las dos instrucciones toman una etiqueta, el material en el que separar en cada aparición de la etiqueta, y la expresión etiquetada.
music = { \tag #'here { \tag #'here <<c''>> } } { \pushToTag #'here c' \pushToTag #'here e' \pushToTag #'here g' \music \appendToTag #'here c' \appendToTag #'here e' \appendToTag #'here g' \music }![]()
Etiquetado dentro de elementos de marcado
La instrucción \tag también se puede usar dentro de
entornos \markup. LilyPond aporta las instrucciones de
marcado \keep-with-tag, \remove-with-tag,
\push-to-tag y \append-to-tag de forma análoga a las
instrucciones correspondientes para expresiones musicales.
test = \markup { \tag #'AA a \tag #'BB b \tag #'CC c } \markup { \keep-with-tag #'BB \test } \markup { \remove-with-tag #'BB \test } \markup { \push-to-tag #'CC pre \test } \markup { \append-to-tag #'CC post \test }![]()
Las instrucciones musicales como \keepWithTag y
\removeWithTag filtran etiquetes dentro de las partes
\markup dentro de la música relacionada, también.
music = \relative { c'4^\markup { \tag #'one first \tag #'two second part } c c c } { \keepWithTag #'one \music \removeWithTag #'one \music }![]()
También es posible añadir algo al principio y al final del
\markup de objetos musicales. Sin embargo, no se pueden
usar \pushToTag ni \appendToTag porque solo insertan
música, así que necesitamos las instrucciones
\pushToTagMarkup y \appendToTagMarkup para insertar
elementos de marcado.
music = \relative { c'4^\markup { \tag #'part part } c c c } { \pushToTagMarkup #'part "great" \music \appendToTagMarkup #'part \markup { is also great } \music }![]()
El filtrado de etiquetas también funciona para música empotrada
dentro de bloques \score en instrucciones de marcado.
music = \relative { c'2^\markup { \tag #'first first \tag #'second second } c \tag #'first { d d } \tag #'second { f f } } \markup { \keep-with-tag #'first \score { \music } \remove-with-tag #'first \score { \music } }![]()
El uso de etiquetas con listas de marcado requiere un cuidado
especial. Aunque las funciones de filtrado funcionan como se
espera, no es así con instrucciones como \push-to-tag y
\append-to-tag.
\markup { \remove-with-tag #'test { a \tag #'test { b c } d } } \markup { \push-to-tag #'test "twice" { a \tag #'test { b c } d } }![]()
El motivo de este comportamiento es que LilyPond resuelve
\tag #'test { b c }
internamente a
\tag #'test b \tag #'test c
y por ello el texto dado aparece insertado dos veces. Para
etiquetar una lista para insertar o añadir algo antes o después de
la lista completa, se debe usar la instrucción \tag-list.
\markup { \push-to-tag #'test "once" { a \tag-list #'test { b c } d } }![]()
Véase también
Manual de aprendizaje: Organizar las piezas mediante variables.
Referencia de la notación: Combinación automática de las partes, Inclusión de archivos de LilyPond.
Advertencias y problemas conocidos
Al llamar a \relative sobre una expresión musical obtenida
mediante el filtrado de música con las instrucciones
\keepWithTag o \removeWithTag, podría ocurrir que
cambiaran las relaciones de octava, dado que solo se tienen en
cuenta las alturas de las notas que efectivamente permanecen en la
expresión filtrada. La aplicación de \relative en primer
lugar, antes de \keepWithTag o de \removeWithTag,
evita este peligro porque en este caso \relative actúa
sobre todas las notas tal y como se introducen.
Incluso si se usan grupos de etiquetas, las instrucciones como
\keepWithTag no son conmutativas. Un código como el
siguiente
\keepWithTag violinI,original \someMusic
no produce la misma salida que
\keepWithTag violinI \keepWithTag original \someMusic
![[image of music]](../d8/lily-53aafc83.png)
![[image of music]](../a0/lily-03361fa0.png)
![[image of music]](../91/lily-101c5ade.png)
![[image of music]](../6f/lily-31eb0d70.png)
![[image of music]](../ee/lily-61c7486d.png)
![[image of music]](../1c/lily-8a74710c.png)
![[image of music]](../1d/lily-66f662f9.png)
![[image of music]](../83/lily-4265fc79.png)
![[image of music]](../e1/lily-2a7cc036.png)
![[image of music]](../47/lily-f5e90dc0.png)
![[image of music]](../90/lily-cb58c306.png)
![[image of music]](../e7/lily-a4e65242.png)
![[image of music]](../e4/lily-908941a9.png)
![[image of music]](../10/lily-69909841.png)