5.7.3 Fogli di stile

L’output prodotto da LilyPond può essere ampiamente modificato, come abbiamo visto nel capitolo Modifica dell’output. Ma se avessi molti file di input a cui voler applicare delle modifiche? O se volessi semplicemente separare le modifiche dalla musica vera e propria? È molto semplice.

Prendiamo un esempio. Non ti preoccupare se non capisci le parti che hanno #(); verranno spiegate nel capitolo Modifiche avanzate con Scheme.

mpdolce =
  \tweak self-alignment-X #-0.6
  #(make-dynamic-script
    #{ \markup { \dynamic mp \normal-text \italic \bold dolce } #})

inst =
#(define-music-function
     (string)
     (string?)
   #{ <>^\markup \bold \box #string #})

\relative {
  \tempo 4=50
  a'4.\mpdolce d8 cis4--\glissando a |
  b4 bes a2 |
  \inst "Clarinet"
  cis4.\< d8 e4 fis |
  g8(\! fis)-. e( d)-. cis2 |
}

[image of music]

Facciamo qualcosa a proposito delle definizioni di mpdolce e inst. Producono l’output che desideriamo, ma potremmo volerle usare in un altro brano. Potremmo semplicemente copiarle e incollarle in cima a ogni file, ma sarebbe una seccatura e lascerebbe queste definizioni nel file di input; personalmente trovo tutti quei #() piuttosto brutti, dunque nascondiamoli in un altro file:

%%% salva queste righe in un file chiamato "definitions.ily"
mpdolce =
  \tweak self-alignment-X #-0.6
  #(make-dynamic-script
    #{ \markup { \dynamic mp \normal-text \italic \bold dolce } #})


inst =
#(define-music-function
     (string)
     (string?)
   #{ <>^\markup \bold \box #string #})

Ci riferiremo a questo file tramite il comando \include in cima al file dove c’è la musica. Si usa l’estensione .ily per distinguere il file da includere, che non intendiamo compilare da solo, dal file principale. Ora modifichiamo la musica (e salviamo questo file come music.ly).

\include "definitions.ily"

\relative {
  \tempo 4=50
  a'4.\mpdolce d8 cis4--\glissando a |
  b4 bes a2 |
  \inst "Clarinet"
  cis4.\< d8 e4 fis |
  g8(\! fis)-. e( d)-. cis2 |
}

[image of music]

L’aspetto è migliore, ma facciamo ancora qualche modifica. Il glissando si vede appena, rendiamolo quindi più spesso e più vicino alle teste di nota. Mettiamo l’indicazione metronomica al di sopra della chiave invece che della prima nota. E, infine, dato che il mio professore di composizione odia l’indicazione di tempo “C”, usiamo “4/4” al suo posto.

Ma non devi cambiare music.ly bensì definitions.ily, in questo modo:

%%%  definitions.ily
mpdolce =
  \tweak self-alignment-X #-0.6
  #(make-dynamic-script
    #{ \markup { \dynamic mp \normal-text \italic \bold dolce } #})

inst =
#(define-music-function
     (string)
     (string?)
   #{ <>^\markup \bold \box #string #})

\layout{
  \context {
    \Score
    \override MetronomeMark.extra-offset = #'(-5 . 0)
    \override MetronomeMark.padding = #'3
  }
  \context {
    \Staff
    \override TimeSignature.style = #'numbered
  }
  \context {
    \Voice
    \override Glissando.thickness = #3
    \override Glissando.gap = #0.1
  }
}

[image of music]

Ora l’aspetto è decisamente migliore! Supponiamo ora di voler pubblicare questo brano. Il mio professore di composizione non ama il segno di tempo “C”, mentre a me piace. Copiamo l’attuale file definitions.ily in web-publish.ily e modifichiamolo. Dato che questa musica verrà distribuita su un pdf da leggere a schermo, aumenteremo anche la dimensione complessiva dell’output.

%%%  web-publish.ily
mpdolce =
  \tweak self-alignment-X #-0.6
  #(make-dynamic-script
    #{ \markup { \dynamic mp \normal-text \italic \bold dolce } #})

inst =
#(define-music-function
     (string)
     (string?)
   #{ <>^\markup \bold \box #string #})

#(set-global-staff-size 23)

\layout{
  \context {
    \Score
    \override MetronomeMark.extra-offset = #'(-5 . 0)
    \override MetronomeMark.padding = #'3
  }
  \context {
    \Staff
  }
  \context {
    \Voice
    \override Glissando.thickness = #3
    \override Glissando.gap = #0.1
  }
}

[image of music]

Nel file che contiene la musica non rimane che sostituire \include "definitions.ily" con \include "web-publish.ily". Potremmo usare un sistema ancora più conveniente: creare un file definitions.ily che contenga solo le definizioni di mpdolce e inst, un file web-publish.ily che contenga solo la sezione \layout vista prima, e un file university.ily che contenga solo le modifiche necessarie per produrre l’output preferito dal mio professore. L’inizio di music.ly apparirebbe così:

\include "definitions.ily"

%%% Una sola di queste linee deve essere commentata
\include "web-publish.ily"
%\include "university.ily"

Questo approccio può essere utile anche se si sta creando un insieme di parti. Uso una mezza dozzina di diversi ‘fogli di stile’ per i miei progetti. Faccio iniziare ogni file musicale con \include "../global.ily", che contiene

%%%   global.ily
\version "2.25.21"

#(ly:set-option 'point-and-click #f)

\include "../init/init-defs.ly"
\include "../init/init-layout.ly"
\include "../init/init-headers.ly"
\include "../init/init-paper.ly"

Manuale di apprendimento di LilyPond v2.25.21 (ramo di sviluppo).