Letur is an editor for writing that ends as a PDF. You write markdown — with captions, figures, references, math and citations — and beside it the page is set in the type you are reading now.
Open LeturRuns in this browser. Nothing to install, and no server sees your text.
Twelve examples. Beside each source is the page Letur sets from it — or, for the three it refuses, what it says instead — and beneath, closed, the same text as plain HTML, which has no way to show what it means. Open any of them in Letur to change it and watch the page follow. The README lists everything the markdown may contain.
A few short markers that plain markdown prints as ordinary text. Letur turns them into numbered tables, listings, figures and equations, and keeps every reference to them right as the document changes around them. Captions · Groups · Names
A paragraph opening : beneath a table, an image or a code
block is that block's caption.

Table 1, set beneath the table, on a counter tables keep to themselves.
| a | b |
|---|---|
| 1 | 2 |
: The measurements.
One mechanism over three constructs, each counting on its own — so inserting a table above a listing does not renumber the listing.

Listing 1, captioned beneath and standing 2em off the margin the prose stands on, because code is read from where its lines begin.
fn main() {}
: The entry point.
The third construct a caption reaches, and the only one that needs a file —
so the page carries one: pipeline.svg travels inside this page itself.

Figure 1, the caption set beneath the image, on a counter the tables and the listings above do not touch.
: The conversion pipeline, with the emitter in the middle.
::: lines makes several blocks one figureThe members share one caption, one number and one name. No arrangement of
the : marker alone can say that.

One Table 1 with both members side by side, taking a single number between them.
:::
| step | what |
|---|---|
| 1 | parse |
| step | what |
|---|---|
| 2 | typeset |
: The two halves of the pipeline.
:::
End a caption with {#name}, then write [](#name)
— a link with nothing between the brackets — to refer to it.

“As Table 1 shows…”, and it stays true — insert another table above it and the sentence reads Table 2 without your touching it.
$…$ sets in the running text and $$…$$ as a
block of its own, converted in the browser rather than by a service.

The formula typeset as a display block, with the radical, the relation and the bars set as math rather than as characters that resemble it.
\sqrt{x^2 + y^2} \leq |x| + |y|
A title block, notes at the foot of the column, a list of references: things a printed page carries and markdown has never had a way to ask for. Frontmatter · Footnotes · Citations
A leading --- block picks one of two looks, one or two
columns, and whether display formulas are numbered. author takes several names
separated by ;, and a ^ after one points at an
affiliation. date is your text and nothing else —
md2pdf never reads a clock.

A centred title block, the body in one column, and every
$$…$$ numbered (1), (2) down the page.
Body text under a title block the markdown itself asked for.
The definition may sit anywhere in the file, above or below the reference that cites it.

The note at the foot of the column that carries the reference, where a reader's eye already is.
A claim that needs a source1.
The note itself, which may hold emphasis and code.
A tenth frontmatter key names a bibliography — a Hayagriva
.yml or a BibLaTeX .bib, the file you already have — and
[@key] cites it. This page carries one: refs.yml, beside the
diagram.
![A sentence ending in the mark [1], and beneath it a References list giving Knuth’s The TeXbook, Addison-Wesley, 1986](pages/citation.png)
A numbered mark where you cited, and the reference list set at the end of the document under the label the look draws.
Typesetting was rethought from the ground up @knuth1986.
Letur never quietly drops what it cannot set, because a PDF that leaves out part of its source looks finished and is wrong. It names the construct and the line instead, and these are the sentences it shows — checked against the compiler, like every example above.
A PDF has no <div>, and guessing what one should become
is how a converter starts lying.
Letur sets no page, and says:
unsupported markdown construct 'raw HTML block' at line 3
A paragraph the emitter accepts.
A bullet list of - [ ] items compiles, the box drawn where the
bullet was. In a numbered list the number and the box would both claim that place, so the
compiler names the line rather than choosing one.
Letur sets no page, and says:
unsupported markdown construct 'task list marker in an ordered list' at line 1
The dialect accepts a bounded list — the Greek letters, the relations,
sums and integrals, \frac, \sqrt, the accents, the matrix and
aligned environments. A command off it is named rather than dropped.
Letur sets no page, and says:
math error at line 1: unsupported command '\includegraphics'
A formula \includegraphics{fig.png} names a command outside the dialect.
A refusal reads the same in Letur as at a terminal: the window runs the
compiler the md2pdf command-line tool runs, built for your browser.