3.3.3 Caratteri speciali


Codifica del testo

LilyPond usa il repertorio di caratteri definito dall’Unicode Consortium e dalla ISO/IEC 10646. Questo sistema di codifica definisce un nome e un numero univoci per gli insiemi di caratteri utilizzati in tutte le lingue moderne e anche in molte altre. Unicode può essere implementato in varie codifiche diverse. LilyPond usa la codifica UTF-8 (UTF sta per Unicode Transformation Format) che rappresenta tutti i comuni caratteri latini con un byte, e gli altri caratteri con un formato di lunghezza variabile fino a quattro byte.

L’aspetto grafico dei caratteri è determinato dai glifi definiti nei tipi di carattere disponibili - un tipo di carattere definisce la mappatura tra un sottoinsieme dei numeri Unicode e i glifi. LilyPond usa la libreria Pango per rappresentare e formattare i testi multilingua.

LilyPond non esegue alcuna conversione della codifica dell’input. Ciò significa che qualsiasi testo, sia esso un titolo, un testo vocale o un’istruzione musicale contenente caratteri non-ASCII, deve essere codificato in UTF-8. Il modo più semplice per inserire tale testo è usare un editor che sappia riconoscere la codifica Unicode e salvare il file con la codifica UTF-8. La maggior parte dei moderni editor supporta la codifica UTF-8, per esempio vim, Emacs, jEdit e Gedit. Tutti i sistemi MS Windows successivi a NT usano Unicode come codifica dei caratteri nativa, quindi perfino Notepad può modificare e salvare un file in formato UTF-8. Un’alternativa più efficiente per Windows è BabelPad.

Se un file di input LilyPond contenente un caratter non-ASCII non viene salvato in formato UTF-8, apparirà il seguente messaggio di errore:

FT_Get_Glyph_Name () error: invalid argument

Ecco un esempio che mostra del testo cirillico, ebraico e portoghese:

[image of music]


Unicode

Per inserire un singolo carattere per il quale è noto il codice Unicode ma che non è disponibile nell’editor in uso, usare \char ##xhhhh o \char #dddd dentro un blocco \markup, dove hhhh è il codice esadecimale del carattere richiesto e dddd è il valore decimale corrispondente. Gli zero iniziali possono essere omessi, ma di norma nella rappresentazione esadecimale si specificano tutti e quattro i caratteri. (Fare attenzione al fatto che la codifica UTF-8 del codice non deve essere usata dopo \char, perché le codifiche UTF-8 contengono bit extra che indicano il numero di ottetti.) Le tabelle dei codici Unicode e un indice dei nomi dei caratteri col proprio codice esadecimale sono disponibili sul sito dell’Unicode Consortium, https://www.unicode.org/.

Per esempio, \char ##x03BE e \char #958 corrispondono entambi al carattere Unicode U+03BE, che ha il nome Unicode “Greek Small Letter Xi”.

Qualsiasi codice Unicode può essere inserito in questo modo e se tutti i caratteri speciali sono inseriti in questo formato non è necessario salvare il file di input in formato UTF-8. Ovviamente, un tipo di carattere contenente tutti questi caratteri codificati deve essere installato e disponibile per LilyPond.

L’esempio seguente mostra valori esadecimali Unicode inseriti in quattro posti diversi: come numero di chiamata, come articolazione, nel testo vocale e come testo separato sotto il brano:

\score {
  \relative {
    c''1 \mark \markup { \char ##x03A8 }
    c1_\markup { \tiny { \char ##x03B1 " a " \char ##x03C9 } }
  }
  \addlyrics { O \markup { \concat { Ph \char ##x0153 be! } } }
}
\markup { "Copyright 2008--2022" \char ##x00A9 }

[image of music]

Per inserire il segno del copyright nell’apposito campo usare:

\header {
  copyright = \markup { \char ##x00A9 "2008" }
}

Alias ASCII

È possibile includere una lista di alias ASCII per i caratteri speciali:

\paper {
  #(include-special-characters)
}

\markup "&flqq; – &OE;uvre incomplète… &frqq;"

\score {
  \new Staff { \repeat unfold 9 a'4 }
  \addlyrics {
    Fun -- ziona an -- che nel~tes -- to: –_&OE;…
  }
}

\markup \column {
  "La sostituzione può essere disabilitata:"
  "– &OE; …"
  \override #'(replacement-alist . ()) "– &OE; …"
}

[image of music]

Si possono creare i propri alias, sia globalmente:

\paper {
  #(add-text-replacements!
    '(("100" . "hundred")
      ("dpi" . "dots per inch")))
}
\markup "A 100 dpi."

[image of music]

che localmente:

\markup \replace #'(("100" . "hundred")
                    ("dpi" . "dots per inch")) "A 100 dpi."

[image of music]

Vedi anche

Guida alla notazione: Elenco dei caratteri speciali.

File installati: ‘ly/text-replacements.ly’.


LilyPond — Guida alla Notazione v2.24.4 (ramo stabile).