Typst showed up in Homebrew the other day, and I’ve been playing around with it a little bit. I like it.
It took me a bit to figure out how to style code blocks, though. Raw text in Typst come in two types:
- not-block, which is what you get if you use single backticks (`) as delimiters
- block, which is what you get if you use triple backticks (```) as delimiters
Changing style for all text is easy:
#set text( font: "Seravek", size: 18pt )
Changing style for all headings is a bit more complicated:
#show heading: (it) => block[ #set text(font: "Recent Grotesk") #block(it.body) ]
For raw text, though, you’ll want to handle the block and not-block styles separately:
#show raw.where(block: false): (it) => text[ #set text(font: "Cascadia Code") #text(it.text) ] #show raw.where(block: true): (it) => block[ #set text(font: "Cascadia Code") #block(it.text) ]
If you neglect to put in the
.where(…) clause and duplicate everything for the other style, like I did at first, you’ll end up forcing all your raw text to be either block or not-block, depending on whether you put
block right after the arrow.
Finally, you could do something even simpler, and dispose of the redundant
text bits and consolidate into one show rule with a function:
#show raw: (it) => [ #set text(font: "Cascadia Code") #it ]