Pandoc probably uses latex under the hood, and Typst is order of magnitudes faster. Also, much better error messages.
Typst is vastly superior for usage in automation or when developing document classes.
If that's not your use case, don't bother.
I use this command to create pdf from my md file.
Downloads/pandoc-3.9/bin/pandoc \
README.md \
-o "my-output.pdf" \
--pdf-engine=typst \
-V papersize=a4 \
-V fontsize=10pt \
-V margin-left=2.5cm \
-V margin-right=2.5cm \
-V margin-top=2.5cm \
-V margin-bottom=2.5cm \
-V title="My title" \
-V lang=de \
--include-in-header=typst-header.typ \
--toc --toc-depth=3 2>&1
That's the typst-header.typ #set figure(placement: none)
#show figure: set block(breakable: true)
#set table(
inset: 5pt,
stroke: 0.5pt + rgb("#cccccc"),
)
#show table: set text(size: 8pt)
#show table.cell: it => {
set text(hyphenate: true)
show raw: set text(size: 6.5pt)
it
}
#set par(justify: true)
#show heading: it => block(sticky: true, it)I use typst in visual studio code using tiny mist extension. I can generate PDF without installing any new software other than vscode which I already have and the tiny mist extension. The live preview is also nice.
The one thing that bothers me is the dollar sign and the hash sign so to write something like saved $50 million using c#, I write something like saved USD 50 million using #csharp
And near the top I add a variable like this
#let csharp = "C#"I am an author of a fairly popular (and early) math plugin for markdown and I resisted (albeit not very hard). I made $$ the default delimiter but I noticed very soon that my users hated it, and finally I gave up and made $ the default delimiter.
What I would have preferred is for $ to behave exactly like backticks (except a minimum of two to start inline math) So you could do stuff like $$ f $ x $$ to render f $ x meaning function f applied with x. And write stuff like:
$$$optional-tag
f $ x
$$$
for block math. I even wrote a competing plugin to my older one where I do this, but I don‘t think anybody uses is, because most people writing math in markdown are expecting it to behave exactly like latex.Gives you a nice, block level element, and it's easy to reason about
Djot solves this with tagged literals, but no one seems to want to use djot
pandoc -r markdown -w pdf --pdf-engine=typst input.md -o output.pdf
- formatting math blocks is mostly not a thing; some formatters will straight up break the document depending on the flavor you use
- lsp
- live preview; you could use e.g. a neovim plugin for that, but it's built on top of mathjax
- pandoc isn't even a single flavor, as you have a bunch of feature flags and multiple ways to do the same thing
- rendering with pandoc is pretty slow even for a few pages of lecture notes (especially compared to typst)
- latex (required by pandoc) is huge, meanwhile typst binary was something like 50M last time I checked
- syntax highlighting: markdown treesitter grammar only supports the common extensions, e.g. the esoteric latex block variants break the entire document
I guess if I didn't need math rendering, the only major complaint I'd have is performance, but at that point .txt is enough
No.
`--pdf-engine=typst`
applicative’s comment is correct. Every one of your bullet points is wrong, except perhaps the one about treesitter highlighting, but what should one expect? Why should a Markdown parser know anything about arbitrary Markdown extensions?
why are you even talking to me?
Latex is a typical route to produce pdfs according to your specification, but typst is what I use; occasionally groff. I use latex when what I am typesetting uses greek, arabic or hebrew text, but only because I haven't yet bothered to learn the typst approach to them.