Skip to content

Glossary term cards

Key concepts and abbreviations explain themselves. A glossary.yaml beside deck.mdx holds them; the compiler links the first mention of each term on every slide (body text first, a heading only when the body never says it; code, maths, links, controls and self-painting text like <GradientText> are left alone), and the runtime shows the definition in a card.

Rest the pointer on a dotted word: the cursor fills like a pie and the underline draws itself solid, then the card opens, anchored to the word. A click or a tap opens it at once and pins it; f labels every term so the keyboard reaches them; Esc, a press elsewhere or the next step closes it.

# glossary.yaml — the key is the card's title and the first string matched
GNSS: Satellite positioning — GPS, NavIC, Galileo and the rest. # short form
UTM:
full: Universal Transverse Mercator # an abbreviation's expansion
def: Sixty projections that turn latitude and longitude into **metres**. # inline Markdown, $maths$
more: Chennai sits in zone 44N. # a second, quieter paragraph
aliases: [UTM zone 44N] # other spellings; plurals are found on their own
tag: Projection # the category chip
link: https://epsg.io/32644 # a source (or { href, label })
see: [WGS84, EPSG] # chips that swap the card to a related term
auto: false # never linked automatically
<Term>UTM</Term> {/* the entry, by name or alias */}
<Term id="utm">projected metres</Term> {/* other words, same entry */}
<Term def="Root-mean-square error." tag="Statistics">
RMSE
</Term>
{/* a one-off, no entry */}
  • A name with no lowercase letter, or shorter than four characters, matches in its exact case only (WHO, never “who”).
  • Part of a hyphenated compound counts as a mention only for such an abbreviation (GNSS-derived, not cell-level).
  • Definitions — a one-off’s too — are rendered at build time, KaTeX included, so the browser loads no Markdown or maths code for them.
  • A YAML mistake or an unknown <Term> is a build warning, never a failed build.

Per slide: terms: false links nothing automatically; terms: { skip: [GIS] } leaves single terms out.

Deck-wide, in the headmatter: glossary: terms.yaml (another path), glossary: false, or

glossary:
repeat: all # link every mention, not just the first per slide
headings: fallback # false | true | fallback
skip: [MyComponent]
delay: 700 # ms of hover before a card opens
sync: false # start with "Share terms" on

Words that reach a component as a prop are out of the compiler’s reach; link them where they render with <Terms>{label}</Terms>.

A card is the presenter’s own aid until the presenter view’s Share terms is on (off by default, remembered per deck; glossary: { sync: true } starts it on). Then every card the presenter opens also opens on the projector window and on every phone, and closes there when it closes or the deck moves on. What travels through the room is a mention — slide, term, occurrence — not the words, so a late joiner gets the open card too. A viewer’s own cards stay private.