From unofficial-typst
Use when creating, editing, or compiling Typst (.typ) documents, or when the user asks to generate PDFs, SVGs, or PNGs from markup. Typst is a modern typesetting system — an alternative to LaTeX with simpler syntax.
How this skill is triggered — by the user, by Claude, or both
Slash command
/unofficial-typst:typstThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Typst compiles `.typ` files to PDF (default), SVG, or PNG.
Typst compiles .typ files to PDF (default), SVG, or PNG.
typst compile input.typ output.pdf
typst compile input.typ output.svg
typst compile input.typ output.png
A Typst document is markup by default. Use # to enter code mode inline.
#set page(paper: "us-letter", margin: (x: 1in, y: 1in))
#set text(font: "Linux Libertine", size: 11pt)
#set par(justify: true)
= Top-Level Heading
== Second Level
=== Third Level
*bold text*
_italic text_
`inline code`
*_bold italic_*
- Unordered item
- Another item
- Nested item
+ Ordered item
+ Second item
/ Term: Description
/ Another: Its definition
https://example.com
#link("https://example.com")[click here]
= Introduction <intro>
See @intro for details.
#figure(
image("photo.png", width: 80%),
caption: [A descriptive caption],
)
#table(
columns: (1fr, 2fr, 1fr),
align: (left, center, right),
table.header([Name], [Description], [Value]),
[Alpha], [First item], [100],
[Beta], [Second item], [200],
)
Inline: $x^2 + y^2 = z^2$
Display (note the spaces inside $):
$ sum_(i=0)^n i = (n(n+1)) / 2 $
```python
def hello():
print("world")
```
#let title = "My Document"
#let greet(name) = [Hello, #name!]
#greet("World")
// Make all headings blue
#show heading: set text(fill: blue)
// Custom heading rendering
#show heading.where(level: 1): it => {
set text(size: 20pt, weight: "bold")
block(below: 1em)[#it.body]
}
#pagebreak()
#line(length: 100%)
#set page(paper: "us-letter", margin: 1.5in)
#set text(size: 12pt)
#align(right)[
Your Name \
Your Address \
#datetime.today().display("[month repr:long] [day], [year]")
]
#v(2em)
Dear Recipient,
#lorem(50)
Sincerely, \
Your Name
#set page(paper: "us-letter", margin: 1in)
#set text(size: 11pt)
#set heading(numbering: "1.1")
#align(center)[
#text(size: 24pt, weight: "bold")[Report Title]
#v(1em)
Author Name
#v(0.5em)
#datetime.today().display()
]
#pagebreak()
#outline()
#pagebreak()
= Introduction
#lorem(100)
= Methodology
#lorem(100)
\begin{document} — content starts immediately*bold* not \textbf{bold}_italic_ not \textit{italic}= Heading not \section{Heading}#set for configuration, not preamble commands$...$ for math (same), but display math uses spaces: $ x $- + / prefixes, not \begin{itemize}Typst provides line-numbered error messages. Common errors:
unknown variable — check spelling, ensure #let is before usageexpected ... found ... — type mismatch, check function argumentsfile not found — check path relative to the .typ fileunknown font family — font not available; use typst fonts to list available fontsCreates, edits, and optimizes skills for Claude Code, including drafting, evaluating with test prompts, iterating on performance, and improving skill descriptions for better triggering accuracy.
npx claudepluginhub primary-vector/unofficial-typst-for-claude