22.2.2 Uso de etiquetas

La instrucción \tag #'parteA marca una expresión musical con el nombre parteA. Las expresiones etiquetadas de esta manera se pueden seleccionar o filtrar más tarde por su nombre, usando bien \keepWithTag #'nombre o bien \removeWithTag #'nombre. El resultado de la aplicación de estos filtros a la música etiquetada es como sigue:

FiltroResultado
Música etiquetada precedida de
\keepWithTag #'nombre

o 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 #'nombre

o 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 \keepWithTag ni 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 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) que no puedan confundirse con notas, la porción #' se puede omitir y, como abreviatura, una lista de símbolos puede usar el separador de coma, es decir: \tag #'(violinI violinII) se puede escribir como \tag violinI,violinII. Lo mismo vale para \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
}
[image of 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
}
[image of music]

Si las etiquetas marcan alternativas que tienen una duración no nula, las alternativas son normalmente simultáneas como concepto, en cuyo 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
}
[image of music]

El fitrado mediante etiquetas se puede aplicar a articulaciones, textos, etc., anteponiendo

-\tag #'mi-etiqueta

a una articulación. Por ejemplo, esto 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 #'a \tag #'both { a4 a a a }
  \tag #'(b both) { b4 b b b }
}
<<
\keepWithTag #'a \music
\keepWithTag #'b \music
\keepWithTag #'both \music
>>
[image of 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 #'A { a4 a a a }
  \tag #'B { b4 b b b }
  \tag #'C { c4 c c c }
  \tag #'D { d4 d d d }
}
\new Voice {
  \removeWithTag #'B
  \removeWithTag #'C
  \music
  \removeWithTag #'(B C)
  \music
}
[image of 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. El primer filtro quita todas excepto la que se nombra, y cualquier filtro posterior elimina el resto. Usando una sola instrucción \keepWithTag con una lista de varias etiquetas se suprimirán solamente las secciones etiquetadas que no aparezcan especificadas en la lista.

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
}
[image of music]

will print \tags violinI and violinII but not viola or cello.

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 pueden declararse ‘grupos de etiquetas’:

\tagGroup #'(violinI violinII viola cello)

Ahora todas las etiquetas pertenecen a un solo ‘grupo de etiquetas’. Observe que las etiquetas individuales no pueden ser miembros de más de un grupo de etiquetas.

\keepWithTag #'violinI …

mostrará solamente la música etiquetada a partir del grupo de etiquetas de violinI y cualquier fragmento musical etiquetado con una de las otras etiquetas resultará suprimido.

music = \relative {
  \tagGroup #'(violinI violinII)
  \tagGroup #'(viola cello)
  \tag #'violinI { c''4^"violinI" c c c }
  \tag #'violinII { a2 a }
  \tag #'viola { e8 e e2. }
  \tag #'cello { d'2 d4 d }
  \tag #'other { f^"other" f f f }
  R1^"untagged"
}

\new Voice {
  \keepWithTag #'violinI
  \music
}
[image of music]

Al usar la instrucción \keepWithTag solo son visibles las etiquetas de los grupos de aquellas etiquetas se se incluyen en la instrucción.

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 ha etiquetado una construcción completa {…} o <<…>>, puede añadir expresiones musicales por delante o por detrás.

Acordes

Si ha etiquetado un acorde <…>, puede añadir notas por delante o bien por detrás, o articulaciones para el acorde completo.

Notas y silencios

Si ha etiquetado 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.

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
}
[image of music]

Las dos instrucciones admiten una etiqueta, el material que dividir en cada ocurrencia de la etiqueta, y la expresión etiquetada.

La instrucción \tag también se puede usar dentro de entornos \markup. Están disponibles también las instrucciones \keep-with-tag, \remove-with-tag, \push-to-tag y \append-to-tag y se comportan como sus instrucciones correspondientes para expresiones musicales.

test = \markup {
  \tag #'a a
  \tag #'b b
  \tag #'c c
}

\markup { \keep-with-tag #'b \test }
\markup { \remove-with-tag #'b \test }
\markup { \push-to-tag #'c pre \test }
\markup { \append-to-tag #'c post \test }
[image of music]

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
}
[image of music]

También es posible añadir algo al principio y al final del \markup de objetos musicales. No se pueden usar \pushToTag ni \appendToTag porque solo insertan música, así que necesitamos \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
}
[image of music]

El filtrado de etieutas 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 }
}
[image of music]

Tenga cuidado con el uso de etiquetas con listas de marcado. Las funciones de filtrado funcionan como se espera

\markup {
  \remove-with-tag #'test { a \tag #'test { b c } d }
}
[image of music]

pero las instrucciones como \push-to-tag y \append-to-tag tienen algunos problemas.

\markup {
  \push-to-tag #'test "twice" { a \tag #'test { b c } d }
}
[image of music]

El motivo de este comportamiento es que LilyPond cambia

\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 }
}
[image of music]

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 tendrán 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.


Referencia de la notación de GNU LilyPond v2.25.30 (development-branch).