MD to PDF

Which Markdown features
survive PDF export

Every cell below was produced by converting the construct and inspecting the resulting PDF, not by reading anyone’s feature list. Measured on 2026-10-22.

Construct by construct

Markdown constructs and whether each survives conversion to PDF
ConstructThis toolPandoc
GitHub-flavoured Markdown
Tables●survives●survives
Task lists●survives●survives
Strikethrough●survives●survives
Footnotes●survives●survives
Nested lists●survives●survives
Ordered list starting at n●survives●survives
Bare URL autolinking●survives●survives
Hard line breaks●survives●survives
Code
Fenced code with language●survives●survives
HTML inside a code fence stays literal●survives●survives
Long code lines wrap rather than clip●survives○does not survive
Diagrams and maths
Mermaid diagramsnote●survives●survives
Mermaid nested in a list item●survives●survives
Inline LaTeX maths●survives●survives
Display LaTeX maths●survives●survives
Invalid TeX degrades instead of failing●survives●survives
Images
Images embedded as data URIs●survives●survives
A page-busting tall image stays wholenote●survives●survives
Alt text reaches the PDF's structure treenote●survives●survives
Text and scripts
Chinese, Japanese and Korean text●survives●survives
Right-to-left scripts●survives●survives
Emoji●survives●survives
Two currency amounts in one sentencenote●survives●survives
A currency range●survives●survives
Embedded HTML
<details> disclosure blocks●survives●survives
<sub> and <sup>●survives●survives
<script> is stripped, not executed●survives●survives
Platform-specific syntax
GitHub alert boxes ([!NOTE])note●survives●survives
Obsidian wikilinks become working linksnote◐partly survives◐partly survives
YAML front matter is metadata, not content●survives●survives
At the limits
Definition listsnote◐partly survives●survives
Pandoc superscript and subscript (x^2^)note◐partly survives●survives
Emoji shortcodes (:rocket:)note◐partly survives◐partly survives
Mermaid inside a table cellnote○does not survive○does not survive
Markdown nested inside an HTML block●survives●survives
A code fence inside a block quote●survives●survives
A table wider than the pagenote◐partly survives◐partly survives
Headings to six levelsnote●survives●survives
Reference-style links●survives●survives
Setext headings (underlined with =)●survives●survives
Abbreviation definitionsnote◐partly survives◐partly survives
Obsidian transclusions expand into the notenote◐partly survives◐partly survives

● survives◐ partly survives○ does not survive– not tested

Is the output a real document

Most comparisons stop at whether a construct renders. These are the properties that decide whether the file behaves like a document once it exists: whether a screen reader can read it, whether a reader’s sidebar shows its structure, and whether the type looks the same on someone else’s machine.

PropertyThis toolPandoc
Tagged for accessibility●survives●survives
Headings become PDF bookmarks●survives●survives
Links stay clickable●survives●survives
Text is selectable, not an image●survives●survives
Fonts embedded in the file●survives○does not survive

Notes on particular rows

Mermaid diagrams
Checks the label text survives, which is where clipping shows up.
A page-busting tall image stays whole
A 3000px image. Passes only if top and bottom land on one page.
Alt text reaches the PDF's structure tree
An image with no visible content is treated as decorative and is correctly left out of the structure tree; this probe uses a visible one.
Two currency amounts in one sentence
Two dollar signs are read as inline maths by many renderers, which collapses the prose between them.
GitHub alert boxes ([!NOTE])
A GitHub extension. The text survives as a block quote; the coloured box is GitHub's own styling.
Definition lists
A pandoc extension rather than GitHub-flavoured Markdown.
Pandoc superscript and subscript (x^2^)
Pandoc's own syntax. GitHub-flavoured Markdown has no equivalent; use <sub> and <sup>.
Emoji shortcodes (:rocket:)
GitHub renders these server-side. Neither converter expands them; paste the emoji itself.
Mermaid inside a table cell
Markdown tables cannot contain a fenced block at all, so no converter can render this. Keep diagrams at the top level.
A table wider than the page
Fourteen columns on A4. Passes only if the last column is still in the text layer rather than off the page edge.
Headings to six levels
All six render. The sixth level is set in uppercase by the stylesheet, so its glyphs differ from the source while the text is unchanged.
Abbreviation definitions
Another pandoc extension with no GitHub-flavoured equivalent.
Obsidian transclusions expand into the note
A transclusion embeds another note live inside Obsidian. Nothing can resolve that reference once the text leaves the vault, so the content is never pulled in. Paste it by hand if it needs to appear.

How this was measured

Each construct is a small Markdown document converted through each tool. The resulting PDF is then inspected rather than eyeballed: pdftotext for whether the content reached the text layer and whether raw syntax leaked through unrendered, pdfinfo for tagging and page count, pdffonts for font embedding, and the raw file for link annotations and the outline tree. A construct counts as surviving only when its content appears and no unrendered syntax is left behind.

  • Pandoc was pandoc 3.12.1, rendering through the typst engine. A different engine gives different results, particularly for raw HTML and diagrams
  • The VS Code extensions and Obsidian's own export are absent rather than guessed at. Neither can be driven headlessly from this harness, and filling the columns in from their documentation would not be a measurement
  • A page-busting case is included on purpose: the tall-image row uses a 3000px image, which is taller than a page and is where break-inside stops helping
  • The probe is in the repository as scripts/feature-matrix.mts and writes the data file this page reads, so the numbers cannot drift from the page

The converter these measurements describe is a free Markdown to PDF converter, with no account and no watermark.