Kurz gesagt
Ein Kapitel einer Studie über mittelalterliche Musik. Kurze Abschnitte eines englischen Kanons aus dem 13. Jahrhundert stehen als Noten im Text, und die Fußnoten halten Takt für Takt fest, wo die alten Ausgaben abweichen.
Was Sie setzen
Kapitel 3 einer Studie darüber, wie englische Antiquare mittelalterliche Musik lasen: fünf Seiten im Format 156 × 234 mm über Sumer is icumen in, die Rota aus Reading, und über die Herausgeber, die sie zwischen 1776 und 1889 in Partitur setzten. Drei Abschnitte des Kanons stehen im Text, in Leipzig auf einem 5-mm-System gestochen und nach der Taktzählung von W. S. Rockstros Partitur nummeriert, und jede Besprechung verweist auf ihren Apparat am Seitenfuß: „T. 40, N. 2 A ] G Hw, Bu“. Die Fußnoten sind kurz und dicht, wie ein Apparat es ist, die Noten stehen im Satzspiegel des Textes, und jede Lesart stammt aus Rockstros Artikel in Groves Dictionary, was das Kapitel im zweiten Absatz sagt.
Dieses Rezept beantwortet
- Wie gebe ich Notenbeispielen einen kritischen Apparat der Quellenvarianten in Fußnoten?
- Wie mache ich Fußnoten?
Die kurze Antwort
// 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') },
};
Zutaten
- Funktionen
- NotensatzFußnotenNotenstilGestaltete AuftakteÜberschriftenattributeKolumnentitel und SeitenzahlenGespiegelte RänderKopfzeilen nach SeitenrolleAbsatzformateSemantische FarbpalettePapierfarbeWitwen, Waisen und kurze AusgangszeilenPDF-Export
- Schrift
- Crimson Pro, Cormorant Garamond, Source Sans 3 (SIL OFL 1.1)
- Dateien
- Keine: Jedes Bild wird im Code gezeichnet
Zubereitung
#1 · Jedes Beispiel als MEI schreiben, mit seinen Lesarten
Die Einstellungen stehen in der kurzen Antwort oben; die Musik steht im Markdown, ein ```mei-Block je Beispiel. Wo zwei Quellen abweichen, enthält der Takt ein <app> mit der gewählten Lesart in <lem> und der anderen in <rdg source="#Hw #Bu">. Gestochen wird das Lemma: Takt 40 von Beispiel 3.3 zeigt das A, und das G von Hawkins und Burney bleibt in der Datei für alle, die die Kodierung öffnen. Geben Sie jedem Block ein alt in der Sprache der Seite: Das lesen ein Screenreader und das getaggte PDF für die Partitur vor.
#2 · Den Apparat an die Takte binden, die man sieht
barNumbers: 'system' nummeriert den ersten Takt jedes Systems, und das <measure n="37"> jedes Blocks beginnt die Zählung dort, wo der Ausschnitt in der zugrunde gelegten Ausgabe beginnt. Beispiel 3.3 öffnet also mit Takt 37, und eine Fußnote mit „T. 40“ zeigt auf einen Takt, den man findet. Der Apparateintrag ist eine gewöhnliche Fußnote, gesetzt in dem Absatz, der den Takt bespricht: Lemma, schließende Klammer, Lesart, Siglen kursiv. Aus einer Partitur heraus lässt sich keine Fußnote setzen; das Zeichen steht deshalb im Satz, der die Lesart nennt.
#3 · Die Noten für den laufenden Text bemessen
Ein 5-mm-System in Leipzig passt in einen Satzspiegel von 116 mm mit fünf oder sechs Takten im 3/2 je System; die elf Takte von Beispiel 3.3 stehen so in zwei Systemen. textFont setzt die Textunterlegung in Crimson Pro, der Schrift des Fließtexts, und minSystemsAtBreak: 2 verhindert, dass eine Seite mit einem einzelnen System eines Beispiels endet, dessen Rest auf der nächsten Seite steht. Die Überschrift jedes Beispiels ist eine Überschrift dritter Ebene und bleibt deshalb nie ohne ihre Noten am Seitenfuß stehen.
#4 · Eine Seite mit Fußnoten kürzer enden lassen
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) } } },
] },
};
Der Auftakt senkt den Text 50 mm unter einen Titel in Cormorant kursiv ab. Weiter hinten endet eine Seite, deren nächste Zeile eine lange Fußnote mitbrächte, ein paar Zeilen früher, und balancing: { maxLinesPerHeading: 1 } verhindert, dass der Spaltenausgleich diese Lücke über die nächste Abschnittsüberschrift schiebt, wo sie wie ein Bruch im Gedankengang wirkte.
#5 · Das Buch auf die linke Seite, das Kapitel auf die rechte
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' }] };
Die Seitenzahlen in Rubrikenrot am Außenrand, links der Buchtitel, rechts das Kapitel; pages: 'body' hält sie vom Auftakt fern, der eine zentrierte Seitenzahl am Fuß bekommt.
Das ganze Rezept
// ═══ 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),
Das zusammengesetzte script.js läuft unverändert: Fügen Sie es in das Modulskript einer beliebigen Seite ein, oder öffnen Sie das Rezept auf CodePen. Ordner des Rezepts auf GitHub ↗ (öffnet sich in einem neuen Tab)
Varianten
#Jeden Takt nummerieren
Ein Apparat mit vielen Einträgen je System lässt sich mit einer Zahl an jedem Takt leichter verfolgen.
- barNumbers: 'system', // the apparatus is keyed by bar: number every system
+ barNumbers: 'every',#Die Beispiele in Bravura stechen
Die kräftigeren Notenköpfe von Bravura passen zu einem Hausstil im Plattenstich.
- musicFont: 'Leipzig', // lighter than Bravura, close to a 19th-century plate
+ musicFont: 'Bravura',Häufige Fehler
- MEI 5 schreibt die Vorzeichnung als
keysig="1f"anscoreDefoderstaffDef. Das MEI-4-Attributkey.sigwird ohne Meldung übergangen, und das b verschwindet. - Jedes
staffDefbraucht seinlines="5": Ohne es werden Noten und Schlüssel ohne Notenlinien gestochen. - Gestochen wird das
<lem>eines<app>, nicht das<rdg>. Eine Lesart, die man auf der Seite sehen soll, gehört in die Apparatnote oder in ein zweites Beispiel.
Nachweise
- Rezept
- Ignacio Ferro
- 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 · gemeinfrei
- 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
- Schriften
- Crimson Pro (SIL OFL 1.1) · Cormorant Garamond (SIL OFL 1.1) · Source Sans 3 (SIL OFL 1.1)
- Code
- MIT, wie Postext
Diesen Text bearbeiten ↗ (öffnet sich in einem neuen Tab)Ordner des Rezepts auf GitHub ↗ (öffnet sich in einem neuen Tab)


