0.128 → 0.129 — footnotes, math and definition lists, and ui.layout: flat is deprecated¶
Three extended markdown constructs join the content: a footnote, an equation and a definition list. Markdown that spelled any of them imported as something else in 0.128, so each section below is a change nothing reports, and the table closing the guide lists every break. The card schema's layout hints change too (§"Layout hints").
Footnotes¶
text[^1] with a [^1]: The note. definition renders a footnote, where
0.128 dropped the definition and kept [^1] as text. The reference stores as
a footnote island at its place in the paragraph, holding the note as one
table cell, {text, marks}; a note cited twice prints twice. Export numbers
the references [^1], [^2], … in reading order and writes each definition
after the body. A Typst plate draws it through Typst's footnote, so
#set footnote(..) styles it.
A note is one passage. What it cannot hold drops and warns
parse::dropped_construct:
- a heading, list, code block, quote, table or rule inside a note keeps its
text as lines of the note and warns
footnote[list]and the like; - a definition nothing references, a second definition of one label, and a
reference inside a table cell, an image's alt text or a note warn
footnote.
footnote warned in 0.128 for every definition, so a host reading it as
"footnotes are unsupported" reads it now as one of these.
Math¶
$x^2$ and $$\frac{a}{b}$$ render equations, where 0.128 rendered the
dollars and the TeX as text. Each stores as a math island holding the TeX
between its dollars under tex, a display one with display: true. A $ that
opens nothing stays text: the opening $ takes no space after it and the
closing one none before it, and braces inside balance, so $5 and $10 reads as
before. To keep a pair of dollars as text, escape one: \$. Export writes
\$ wherever a $ of the text could pair with another.
An equation in a table cell, an image's alt text or a footnote keeps its source
as text and warns parse::dropped_construct (math), as does one whose TeX is
blank once its edge whitespace drops. The authored lanes refuse
a math island whose tex markdown cannot write between its dollars as
ParseError::Shape.
The Typst backend translates the TeX to Typst math. A command outside the
vocabulary Markdown Syntax lists draws
as its own name and warns typst::unsupported_tex. Typst lays an equation out
only in a font with a math table, so the backend embeds Noto Sans Math and has
it answer to New Computer Modern Math, the family Typst sets equations in,
for a quill shipping no font of that family. A plate setting
show math.equation: set text(font: ..) to a font its quill ships draws in
that one. quillmark workspace does not export the embedded face, so Typst's
own tools draw an equation only in a math font the quill ships.
An acroform quill declines both as it declines every construct but the
paragraph, under backend::declined_construct.
Definition lists¶
A paragraph with a : description line under it is a term and its
description, where 0.128 imported both as one paragraph reading Term : description.
The term stores as a term line and the description as a description
container around its blocks; several : lines under one term are several
descriptions. A Typst plate draws each term through Typst's terms.item, so
#set terms(..) styles it. A definition list inside a footnote keeps its text
as lines of the note and warns footnote[definition list].
A line of prose opening : under a paragraph reads as a description now. To
keep it prose, escape the colon: \:. Export writes that escape before every
paragraph line opening :.
An acroform quill declines a definition under backend::declined_construct
(definition), and its text lands as lines.
Layout hints¶
schema() no longer writes ui.layout: flat on an object alone in its
legacy ui.group. Nothing reports the change. An editor that read the flag
to let the group header name that object finds it absent: detect the case
itself, a group whose only field is an object.
ui.layout: flat warns quill::deprecated_flat, one per field, naming its
path. It still loads where it loaded, and schema() still echoes it. No
editor honors it: a card's top-level object is a panel framing its
properties, and a nested one a subform. Drop the key.
A card-level field outside every group, declared after a top-level object
or a grouped field, warns quill::field_after_object. An editor draws it
above the groups. Declare it ahead of them, or move it into an object.
Text values in a plate¶
A one-line value printed in a Typst plate carries no space on either side,
where 0.128 printed one at each edge. Dear #qm.ink(qm.data, "name"),
renders "Dear Mr. Babbage," where it rendered "Dear Mr. Babbage ,". A text
or richtext field without multiline is one such value, and so is each
element of an array of them. A plate that trimmed the spaces itself keeps
working and can drop the trim; one that leaned on them, as
#qm.ink(data, "first")#qm.ink(data, "last"), writes the space between.
Stored rows¶
The storage tag is quillmark/document@0.129.0, the first that can hold a
footnote or math island, a term line or a description container. A row under an older tag loads as before, and its
content does not re-import, so text it stored as $x$ stays text. A save
rewrites it under the new tag, so a hash over stored bytes recomputes once,
though nothing else in the row moves. A 0.128 build refuses a row from then on,
as a build too old for its tag.
Every break¶
| Break | Surface | Action |
|---|---|---|
A footnote reference and its definition render a footnote and import as a footnote island, where the definition dropped and the reference stayed text |
rendered output, imported content | None |
parse::dropped_construct footnote names a definition nothing references, a second definition of one label, or a reference where no note can sit, and footnote[<block>] a block inside a note |
Parsed.warnings, doc.warnings, revise warnings |
Drop the construct, or let the warning stand |
$…$ and $$…$$ render equations and import as a math island, where they were text |
rendered output, imported content | Escape a dollar, \$, to keep the text |
An equation in a table cell, an image's alt text or a footnote warns parse::dropped_construct (math) |
Parsed.warnings, doc.warnings, revise warnings |
Move the equation into prose, or let the warning stand |
A TeX command the Typst backend does not lower draws as its name and warns typst::unsupported_tex |
Typst session warnings, RenderResult.warnings |
Rewrite it with a listed command |
The Typst backend embeds Noto Sans Math, which answers to New Computer Modern Math for a quill shipping no font of that family |
Typst rendered output | None |
An equation whose TeX is blank once its edge whitespace drops stays text and warns parse::dropped_construct (math) |
Parsed.warnings, doc.warnings, revise warnings |
Write TeX between the dollars, or escape one |
A paragraph with a : line under it renders a definition list and imports as a term line and a description container, where it was one paragraph |
rendered output, imported content | Escape the colon, \:, to keep the text |
Export writes \: before a paragraph line opening : |
exported markdown | None |
An acroform render declines a footnote, an equation or a definition under backend::declined_construct |
acroform session warnings, RenderResult.warnings, Quill::validate |
None |
IslandType gains Footnote and Math, LineKind gains Term, Container gains Description, BlockConstruct gains Footnote, Math and Definition, and Dropped gains NoteBlock and Math; StoredDocument gains V0_129_0, and STORAGE_V0_129_0 is the current tag |
Rust | An exhaustive match adds the arms |
ContentIsland gains footnote and math members, props: FootnoteProps and props: MathProps; ContentLineKind gains term and ContentContainer gains description |
WASM | A switch over type, kind or container handles them |
A save writes quillmark/document@0.129.0, and a 0.128 build refuses the row from then on |
stored documents | None to load; a hash over stored bytes recomputes |
| A one-line text value prints with no space at either edge | Typst rendered output | Drop a trim of those spaces; write a space the plate leaned on |
An object alone in a legacy ui.group carries no ui.layout: flat |
schema() |
Detect a group whose only field is an object directly |
ui.layout: flat warns quill::deprecated_flat |
Quill::warnings, every render's warnings, quillmark validate |
Drop the key |
A loose field after a top-level object or a grouped field warns quill::field_after_object |
Quill::warnings, every render's warnings, quillmark validate |
Declare it ahead of the groups, or move it into an object |