Vai al contenuto principale
Ricetta numero 165

Ricettario · Capitolo 6 · Riquadri e note

Esempi musicali in MEI con apparato critico nelle note

Blocchi MEI 5 incisi nel testo su un rigo di 5 mm, varianti codificate con app, lem e rdg, e l’apparato per battuta e nota nelle note a piè di pagina.

In questa pagina
Output
Canvas · PDF
Livello
Intermedio
Postext
Provata con Postext 1.54.0
Richiede ≥ 1.54.0 · postext-pdf ≥ 1.54.0
Licenza
Aggiornata il 22 ott 2026
Codice MIT · Testo CC BY 4.0

pp. 2–3 di 5

  • Esempio in inglese: non c’è ancora un’edizione italiana
  • Formato 156 × 234 mm
  • 1 colonna
  • Crimson Pro 11/14,5
  • Cormorant Garamond
  • Source Sans 3
  • 5 pagine
  • Livello
  • Postext 1.54.0
  • Impaginato in 24 ms
  • 145 righe di codice

In breve

Un capitolo di uno studio sulla musica medievale. Brevi passi di un canone inglese del Duecento sono stampati come musica nel testo, e le note in fondo a ogni pagina registrano, battuta per battuta, dove le vecchie edizioni non concordano.

Che cosa comporrai

Il capitolo 3 di uno studio su come gli antiquari inglesi lessero la musica medievale: cinque pagine di 156 × 234 mm su Sumer is icumen in, la rota di Reading, e sugli editori che la misero in partitura tra il 1776 e il 1889. Tre passi del canone sono incisi nel testo, in Leipzig su un rigo di 5 mm, con la numerazione delle battute della partitura di W. S. Rockstro, e ogni commento richiama il suo apparato a piè di pagina: «b. 40, n. 2 la ] sol Hw, Bu». Le note sono brevi e fitte come si conviene a un apparato, la musica occupa la giustezza del testo, e ogni lezione viene dall’articolo di Rockstro nel Dictionary di Grove, come il capitolo dichiara nel secondo paragrafo.

Questa ricetta risponde a

  • Come do agli esempi musicali un apparato critico delle varianti delle fonti in note a piè di pagina?
  • Come faccio le note a piè di pagina?

La risposta breve

script.js · righe 36–60nel codice completo
// In the Markdown each example is a ```mei fence. A variant is encoded where it stands,
// <app><lem>…</lem><rdg source="#Hw #Bu">…</rdg></app>: the staff shows the lemma, and
// the file keeps the reading for anyone who opens the encoding. The apparatus entry is a
// footnote cited from the paragraph that discusses the bar: `[^b40]: **b. 40, n. 2** A ] G`.
const scoreStyle = {
  staffSize: mm(5), // running-text examples: 4.5–5.5 mm
  musicFont: 'Leipzig', // lighter than Bravura, close to a 19th-century plate
  textFont: 'Crimson Pro', // the underlay in the book's own face
  barNumbers: 'system', // the apparatus is keyed by bar: number every system
  spacing: 0.95,
  systemGap: mm(4),
  marginTop: pt(4),
  marginBottom: pt(LEAD / 2),
  color: col('ink'),
  minSystemsAtBreak: 2, // never leave one system of an example alone at a page foot
};
const footnotes = {
  placement: 'column', // the foot of the page in one column
  numbering: 'chapter',
  fontSize: pt(8.5),
  lineHeight: pt(10.75),
  hangingIndent: em(1.2), // turnover lines align past the number
  spaceBetween: pt(2),
  separator: { width: 0.2, lineWidth: pt(0.5), color: col('rubric') },
};

Ingredienti

Tipo
Crimson Pro, Cormorant Garamond, Source Sans 3 (SIL OFL 1.1)
Risorse
Nessuna: ogni immagine è disegnata nel codice

Preparazione

#1 · Scrivi ogni esempio in MEI, con le sue varianti

Le impostazioni sono nella risposta breve qui sopra; la musica sta nel Markdown, un blocco ```mei per esempio. Dove due fonti divergono, la battuta contiene un <app> con la lezione accolta in <lem> e l’altra in <rdg source="#Hw #Bu">. Si incide il lemma: la battuta 40 dell’esempio 3.3 mostra il la, e il sol di Hawkins e Burney resta nel file per chi apre la codifica. Dai a ogni blocco un alt nella lingua della pagina: è ciò che leggono della partitura uno screen reader e il PDF con tag.

#2 · Lega l’apparato alle battute che il lettore vede

barNumbers: 'system' numera la prima battuta di ogni sistema, e il <measure n="37"> di ogni blocco fa partire il conto da dove comincia il brano nell’edizione seguita: l’esempio 3.3 si apre quindi a 37, e una nota che dice «b. 40» rimanda a una battuta che il lettore trova. La voce d’apparato è una normale nota a piè di pagina, richiamata dal paragrafo che commenta la battuta: lemma, parentesi quadra di chiusura, variante, sigle in corsivo. Una nota non si può richiamare dall’interno di una partitura, perciò il richiamo va nella frase che nomina la lezione.

#3 · Dimensiona la musica per il testo corrente

Un rigo di 5 mm in Leipzig sta in una giustezza di 116 mm con cinque o sei battute di 3/2 per sistema, e le undici battute dell’esempio 3.3 stanno in due sistemi. textFont compone il testo cantato in Crimson Pro, il carattere del testo, e minSystemsAtBreak: 2 impedisce che una pagina finisca con un solo sistema di un esempio il cui resto passa alla pagina seguente. Il titolo di ogni esempio è un titolo di terzo livello, quindi non resta mai in fondo alla pagina senza la sua partitura.

#4 · Lascia che una pagina con note finisca corta

script.js · righe 64–78nel codice completo
const opener = {
  enabled: true,
  minHeight: mm(50), // every chapter's text starts on the same grid line
  slot: { elements: [
    { kind: 'text', id: 'kicker', content: '{attr.kicker}', ...label, fontSize: pt(8.5),
      letterSpacing: pt(1.8), color: col('rubric'), align: 'left',
      placement: at('container', 'top-left', 0, 8) },
    { kind: 'text', id: 'title', content: '{titleText}', fontFamily: 'Cormorant Garamond',
      italic: true, fontWeight: 500, fontSize: pt(29), lineHeight: 1.05, color: col('ink'),
      align: 'left', overflow: 'wrap', // design text ends in an ellipsis by default
      placement: { ...at('#kicker', 'below', 0, 3), size: { width: mm(100), height: 'auto' } } },
    { kind: 'rule', id: 'rule', direction: 'horizontal', thickness: pt(1), color: col('rubric'),
      placement: { ...at('#title', 'below', 0, 5), size: { width: mm(14) } } },
  ] },
};

L’apertura abbassa il testo di 50 mm sotto un titolo in Cormorant corsivo. Più avanti, una pagina la cui riga seguente si porterebbe dietro una nota lunga finisce qualche riga prima, e balancing: { maxLinesPerHeading: 1 } impedisce al bilanciamento delle colonne di spostare quel vuoto sopra il titolo della sezione seguente, dove sembrerebbe una cesura nel ragionamento.

#5 · Metti il libro sul verso e il capitolo sul recto

script.js · righe 82–99nel codice completo
const head = (id, content, parity, edge, x, extra = {}) => ({
  kind: 'text', id, content, parity, pages: 'body', // never on the opener
  ...label, fontSize: pt(7.5), letterSpacing: pt(1.3), color: col('muted'),
  placement: at('page', edge, x, 13), ...extra,
});
const folio = { color: col('rubric'), fontWeight: 700 };
const header = { elements: [
  head('verso-folio', '{pageNumber}', 'even', 'top-left', MARGIN.outer,
    { ...folio, align: 'left' }),
  head('verso-title', '{title}', 'even', 'top-left', MARGIN.outer + 8, { align: 'left' }),
  head('recto-title', '{chapterTitle}', 'odd', 'top-right', -(MARGIN.outer + 8),
    { align: 'right', overflow: 'ellipsis' }),
  head('recto-folio', '{pageNumber}', 'odd', 'top-right', -MARGIN.outer,
    { ...folio, align: 'right' }),
] };
// The opener carries a drop folio instead, centred under the text block.
const footer = { elements: [{ ...head('drop-folio', '{pageNumber}', 'all', 'bottom', 0,
  { ...folio, align: 'center', placement: at('page', 'bottom', 0, -11) }), pages: 'opener' }] };

I numeri di pagina in rosso di rubrica sul margine esterno, il libro sul verso e il capitolo sul recto; pages: 'body' li toglie dall’apertura, che ha un numero di pagina centrato al piede.

La ricetta completa

Sandbox
// ═══ Postext Cookbook · Nº 165 · MEI music examples with a critical apparatus ═════
// https://postext.dev/en/cookbook/musicology-mei-apparatus
// Code: MIT · Text: original (CC BY 4.0) · Music: Sumer is icumen in, after Rockstro (PD)
// Fonts: Crimson Pro, Cormorant Garamond, Source Sans 3 (SIL OFL 1.1) · Needs postext ≥ 1.54.0
import {
  buildDocumentWithFonts, renderPageToCanvas, initMusicEngine,
} from 'https://esm.sh/postext';
import { renderToPdf, decompressWoff2 } from 'https://esm.sh/postext-pdf';

const LANG = 'en'; // @lang: the language of the sample document ('en' | 'es')
const RECIPE = 'musicology-mei-apparatus';

// ─── 1 · Design ─────────────────────────────────────────────────────────────
// #region palette: a rubric red for kickers, labels and the notes' rule; ink on cream
const palette = {
  ink: '#211d1a', // text and notation: a warm near-black
  rubric: '#8c2f1f', // the one accent, the red of the manuscript's rubrics
  muted: '#6c645b', // running heads, colophon
  rule: '#cbbfae', // hairlines
  paper: '#fcfaf6',
};
// col(id): a colour linked to its palette entry, with the entry's hex beside the id.
const col = (id) => ({ hex: palette[id], model: 'hex', paletteId: id });
const colorPalette = [
  ...Object.entries(palette).map(([id, hex]) => ({ id, name: id, value: { hex, model: 'hex' } })),
  // The engine's defaults link to main-color: point it at the accent, never the default blue.
  { id: 'main-color', name: 'accent (defaults)', value: { hex: palette.rubric, model: 'hex' } },
];
// #endregion
const MARGIN = { top: 22, bottom: 22, inner: 19, outer: 21 }; // 156 × 234 mm, mirrored
const LEAD = 14.5; // body leading in pt: the baseline grid
const at = (to, edge, x = 0, y = 0) => ({ anchor: { to, edge }, offset: { x: mm(x), y: mm(y) } });
const label = { fontFamily: 'Source Sans 3', fontWeight: 600, textTransform: 'uppercase' };

// #region answer: MEI examples engraved in the text, their apparatus in footnotes
// In the Markdown each example is a ```mei fence. A variant is encoded where it stands,
// <app><lem>…</lem><rdg source="#Hw #Bu">…</rdg></app>: the staff shows the lemma, and
// the file keeps the reading for anyone who opens the encoding. The apparatus entry is a
// footnote cited from the paragraph that discusses the bar: `[^b40]: **b. 40, n. 2** A ] G`.
const scoreStyle = {
  staffSize: mm(5), // running-text examples: 4.5–5.5 mm
  musicFont: 'Leipzig', // lighter than Bravura, close to a 19th-century plate
  textFont: 'Crimson Pro', // the underlay in the book's own face
  barNumbers: 'system', // the apparatus is keyed by bar: number every system
  spacing: 0.95,
  systemGap: mm(4),
  marginTop: pt(4),
  marginBottom: pt(LEAD / 2),

Lo script.js composto funziona così com’è: incollalo nello script modulo di qualsiasi pagina, oppure apri la ricetta su CodePen. Cartella della ricetta su GitHub ↗ (si apre in una nuova scheda)

Varianti

#Numera tutte le battute

Un apparato con molte voci per sistema si segue meglio con un numero su ogni battuta.

-  barNumbers: 'system', // the apparatus is keyed by bar: number every system
+  barNumbers: 'every',

#Incidi gli esempi in Bravura

Le teste di nota più piene di Bravura si accordano con uno stile da incisione su lastra.

-  musicFont: 'Leipzig', // lighter than Bravura, close to a 19th-century plate
+  musicFont: 'Bravura',

Errori frequenti

  • MEI 5 scrive l’armatura come keysig="1f" su scoreDef o staffDef. L’attributo key.sig di MEI 4 viene ignorato senza avviso, e il bemolle sparisce.
  • Dai a ogni staffDef il suo lines="5": senza, note e chiavi vengono incise senza rigo.
  • Si incide il <lem> di un <app>, non il <rdg>. Una variante che il lettore deve vedere sulla pagina va nella nota d’apparato o in un secondo esempio.

Crediti

Testo
  • The chapter text and the apparatus notes, in English and Spanish · Ignacio Ferro · CC BY 4.0
  • Sumer is icumen in (13th century), the music examples transcribed from W. S. Rockstro's score and the readings his article reports, in A Dictionary of Music and Musicians, ed. George Grove, vol. 3, pp. 765–768, and vol. 4, pp. 1–3 (Macmillan, 1900 printing), as transcribed on Wikisource · Anonymous; William Smyth Rockstro · pubblico dominio
  • The Latin rubric of Harley MS 978, f. 11v, and the folio, as quoted in the Wikipedia article (fact check) · Wikipedia contributors · CC BY-SA 4.0
Font
Crimson Pro (SIL OFL 1.1) · Cormorant Garamond (SIL OFL 1.1) · Source Sans 3 (SIL OFL 1.1)
SandboxPDF