Saltar al contingut principal
Recepta número 165

Receptari · Capítol 6 · Requadres i notes

Exemples musicals en MEI amb aparat crític a les notes

Blocs MEI 5 gravats dins del text amb un pentagrama de 5 mm, variants codificades amb app, lem i rdg, i l’aparat per compàs i nota en notes a peu de pàgina.

En aquesta pàgina
Sortida
Canvas · PDF
Nivell
Intermedi
Postext
Provada amb Postext 1.54.0
Requereix ≥ 1.54.0 · postext-pdf ≥ 1.54.0
Llicència
Actualitzada el 22 d’oct. del 2026
Codi MIT · Text CC BY 4.0
  • Mostra en castellà: encara no hi ha edició en català
  • Format 156 × 234 mm
  • 1 columna
  • Crimson Pro 11/14,5
  • Cormorant Garamond
  • Source Sans 3
  • 5 pàgines
  • Nivell
  • Postext 1.54.0
  • Compost en 19 ms
  • 145 línies de codi

En poques paraules

Un capítol d’un estudi sobre música medieval. Passatges breus d’una rota anglesa del segle XIII s’imprimeixen com a música dins del text, i les notes al peu de cada pàgina recullen, compàs a compàs, on discrepen les edicions antigues.

Què compondràs

El capítol 3 d’un estudi sobre com van llegir la música medieval els antiquaris anglesos: cinc pàgines de 156 × 234 mm sobre Sumer is icumen in, la rota de Reading, i els editors que la van posar en partitura entre 1776 i 1889. Tres passatges de la rota van gravats dins del text, en Leipzig i amb un pentagrama de 5 mm, amb la numeració de compassos de la partitura de W. S. Rockstro, i cada comentari cita el seu aparat al peu de la pàgina: «c. 40, n. 2 la ] sol Hw, Bu». Les notes són breus i denses, com pertoca a un aparat; la música ocupa la mesura del text, i cada lectura prové de l’article de Rockstro al Dictionary de Grove, cosa que el capítol declara al segon paràgraf.

Aquesta recepta respon a

  • Com dono als exemples musicals un aparat crític de variants de les fonts en notes a peu de pàgina?
  • Com faig notes a peu de pàgina?

La resposta curta

script.js · línies 36–60al codi complet
// 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') },
};

Ingredients

Tipografia
Crimson Pro, Cormorant Garamond, Source Sans 3 (SIL OFL 1.1)
Recursos
Cap: totes les imatges es dibuixen en codi

Elaboració

#1 · Escriu cada exemple en MEI, amb les seves variants

Els ajustos són la resposta curta de dalt; la música va al Markdown, un bloc ```mei per exemple. On dues fonts discrepen, el compàs porta un <app> amb la lectura adoptada a <lem> i l’altra a <rdg source="#Hw #Bu">. El gravador imprimeix el lema: el c. 40 de l’exemple 3.3 mostra el la, i el sol de Hawkins i Burney continua a l’arxiu per a qui obri la codificació. Dona a cada bloc un alt en la llengua de la pàgina: és el que llegeixen de la partitura un lector de pantalla i el PDF etiquetat.

#2 · Lliga l’aparat als compassos que veu el lector

barNumbers: 'system' numera el primer compàs de cada sistema, i el <measure n="37"> de cada bloc comença el compte on comença el fragment a l’edició que segueix, de manera que l’exemple 3.3 obre al 37 i una nota que diu «c. 40» remet a un compàs que el lector troba. L’entrada de l’aparat és una nota a peu de pàgina corrent, citada des del paràgraf que comenta el compàs: lema, claudàtor de tancament, variant i sigles en cursiva. Una nota no es pot citar des de dins d’una partitura, així que la crida va a la frase que anomena la lectura.

#3 · Ajusta la música al text corregut

Un pentagrama de 5 mm en Leipzig cap en una mesura de 116 mm amb cinc o sis compassos de 3/2 per sistema, i els onze compassos de l’exemple 3.3 queden en dos sistemes. textFont compon la lletra en Crimson Pro, la lletra del text, i minSystemsAtBreak: 2 impedeix que una pàgina acabi amb un sol sistema d’un exemple mentre la resta passa a la següent. El rètol de cada exemple és un títol de tercer nivell, de manera que mai no es queda al peu d’una pàgina sense la seva partitura.

#4 · Deixa que una pàgina amb notes acabi curta

script.js · línies 64–78al codi complet
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’obertura baixa el text 50 mm sota un títol en Cormorant cursiva. Més endavant, una pàgina la línia següent de la qual arrossegaria una nota llarga acaba unes línies abans, i balancing: { maxLinesPerHeading: 1 } evita que l’equilibrat de columnes pugi aquest buit damunt del títol de la secció següent, on semblaria un tall en l’argument.

#5 · Posa el llibre a la pàgina parella i el capítol a la senar

script.js · línies 82–99al codi complet
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' }] };

Els folis van en vermell de rúbrica a la vora exterior, el llibre a la pàgina parella i el capítol a la senar; pages: 'body' els treu de l’obertura, que porta un foli centrat al peu.

La recepta 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 = 'es'; // @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),

L'script.js compost funciona tal com és: enganxa'l com a script de mòdul en qualsevol pàgina o obre la recepta a CodePen. Carpeta de la recepta a GitHub ↗ (s'obre en una pestanya nova)

Variants

#Numera tots els compassos

Un aparat amb moltes entrades per sistema se segueix millor amb un número a cada compàs.

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

#Grava els exemples en Bravura

Els caps de nota de Bravura, més gruixuts, lliguen amb un estil de gravat en planxa.

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

Errors freqüents

  • MEI 5 escriu l’armadura com a keysig="1f" a scoreDef o staffDef. L’atribut key.sig de MEI 4 s’ignora sense avís, i el bemoll desapareix.
  • Posa lines="5" a cada staffDef: sense això, notes i claus es graven sense pentagrama.
  • El gravador imprimeix el <lem> d’un <app>, no el <rdg>. Una variant que el lector hagi de veure a la pàgina va a la nota de l’aparat o en un segon exemple.

Crèdits

Text
  • 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 · domini públic
  • 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
Fonts
Crimson Pro (SIL OFL 1.1) · Cormorant Garamond (SIL OFL 1.1) · Source Sans 3 (SIL OFL 1.1)
SandboxPDF