Pular para o conteúdo principal
Receita número 165

Receitas · Capítulo 6 · Boxes e notas

Exemplos musicais em MEI com aparato crítico nas notas

Blocos MEI 5 gravados no texto numa pauta de 5 mm, variantes codificadas com app, lem e rdg, e o aparato por compasso e nota nas notas de rodapé.

Nesta página
Saída
Canvas · PDF
Postext
Testada com o Postext 1.54.0
Requer ≥ 1.54.0 · postext-pdf ≥ 1.54.0
Licença
Atualizada em 22 de out. de 2026
Código MIT · Texto CC BY 4.0
  • Amostra em inglês: ainda sem edição em português
  • Refile 156 × 234 mm
  • 1 coluna
  • Crimson Pro 11/14,5
  • Cormorant Garamond
  • Source Sans 3
  • 5 páginas
  • Nível
  • Postext 1.54.0
  • Diagramado em 24 ms
  • 145 linhas de código

Em poucas palavras

Um capítulo de um estudo sobre música medieval. Trechos curtos de um cânone inglês do século XIII são impressos como música no texto, e as notas no pé de cada página registram, compasso a compasso, onde as edições antigas divergem.

O que você vai compor

O capítulo 3 de um estudo sobre como os antiquários ingleses leram a música medieval: cinco páginas de 156 × 234 mm sobre Sumer is icumen in, a rota de Reading, e sobre os editores que a puseram em partitura entre 1776 e 1889. Três trechos do cânone são gravados no texto, em Leipzig numa pauta de 5 mm, com a numeração de compassos da partitura de W. S. Rockstro, e cada comentário chama o seu aparato no pé da página: “c. 40, n. 2 lá ] sol Hw, Bu”. As notas são curtas e densas, como um aparato costuma ser, a música ocupa a medida do texto, e cada lição vem do artigo de Rockstro no Dictionary de Grove, o que o capítulo diz já no segundo parágrafo.

Esta receita responde a

  • Como dou aos exemplos musicais um aparato crítico das variantes das fontes em notas de rodapé?
  • Como faço notas de rodapé?

A resposta curta

script.js · linhas 36–60no código 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') },
};

Ingredientes

Tipografia
Crimson Pro, Cormorant Garamond, Source Sans 3 (SIL OFL 1.1)
Materiais
Nenhum: todas as imagens são desenhadas em código

Preparo

#1 · Escrever cada exemplo em MEI, com as suas variantes

As configurações estão na resposta curta acima; a música fica no Markdown, um bloco ```mei por exemplo. Onde duas fontes divergem, o compasso leva um <app> com a lição adotada em <lem> e a outra em <rdg source="#Hw #Bu">. Grava-se o lema: o compasso 40 do exemplo 3.3 mostra o lá, e o sol de Hawkins e Burney continua no arquivo para quem abrir a codificação. Dê a cada bloco um alt no idioma da página: é o que um leitor de tela e o PDF com tags leem da partitura.

#2 · Prender o aparato aos compassos que o leitor vê

barNumbers: 'system' numera o primeiro compasso de cada sistema, e o <measure n="37"> de cada bloco começa a contagem onde o trecho começa na edição seguida: o exemplo 3.3 abre no 37, e uma nota que diz “c. 40” aponta para um compasso que o leitor encontra. A entrada do aparato é uma nota de rodapé comum, chamada no parágrafo que comenta o compasso: lema, colchete de fechamento, variante, siglas em itálico. Não dá para chamar uma nota de dentro de uma partitura, por isso a chamada vai na frase que nomeia a lição.

#3 · Dimensionar a música para o texto corrido

Uma pauta de 5 mm em Leipzig cabe numa medida de 116 mm com cinco ou seis compassos de 3/2 por sistema, e os onze compassos do exemplo 3.3 ficam em dois sistemas. textFont compõe a letra cantada em Crimson Pro, a fonte do texto, e minSystemsAtBreak: 2 impede que uma página termine com um só sistema de um exemplo cujo resto passa para a seguinte. O título de cada exemplo é um título de terceiro nível, de modo que nunca fica no pé da página sem a sua partitura.

#4 · Deixar uma página com notas terminar curta

script.js · linhas 64–78no código 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) } } },
  ] },
};

A abertura rebaixa o texto 50 mm sob um título em Cormorant itálico. Mais adiante, uma página cuja linha seguinte traria consigo uma nota longa termina algumas linhas antes, e balancing: { maxLinesPerHeading: 1 } evita que o equilíbrio de colunas leve esse vazio para cima do título da seção seguinte, onde pareceria um corte no argumento.

#5 · Pôr o livro na página par e o capítulo na ímpar

script.js · linhas 82–99no código 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' }] };

Os fólios em vermelho de rubrica na margem externa, o livro na página par e o capítulo na ímpar; pages: 'body' tira-os da abertura, que recebe um fólio centrado no pé.

A receita 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),

O script.js montado funciona como está: cole-o como script de módulo em qualquer página ou abra a receita no CodePen. Pasta da receita no GitHub ↗ (abre em uma nova aba)

Variações

#Numerar todos os compassos

Um aparato com muitas entradas por sistema fica mais fácil de seguir com um número em cada compasso.

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

#Gravar os exemplos em Bravura

As cabeças de nota mais cheias da Bravura combinam com um estilo de gravura em chapa.

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

Erros comuns

  • MEI 5 escreve a armadura como keysig="1f" em scoreDef ou staffDef. O atributo key.sig do MEI 4 é ignorado sem aviso, e o bemol some.
  • Dê a cada staffDef o seu lines="5": sem ele, notas e claves são gravadas sem pauta.
  • Grava-se o <lem> de um <app>, não o <rdg>. Uma variante que o leitor precisa ver na página vai na nota do aparato ou num segundo exemplo.

Créditos

Texto
  • 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 · domínio público
  • 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
Fontes
Crimson Pro (SIL OFL 1.1) · Cormorant Garamond (SIL OFL 1.1) · Source Sans 3 (SIL OFL 1.1)
SandboxPDF