Typst Thesis Tutorial
Write your PhD or Master's thesis in Typst. 10x faster compile than LaTeX, cleaner syntax, and the same publication-quality output.
Project structure
my-thesis/
├── main.typ # entry point
├── references.bib # citations
├── chapters/
│ ├── 01-introduction.typ
│ ├── 02-background.typ
│ ├── 03-methods.typ
│ ├── 04-results.typ
│ ├── 05-discussion.typ
│ └── 06-conclusion.typ
├── appendices/
│ ├── a-data.typ
│ └── b-proofs.typ
├── figures/
│ ├── architecture.svg
│ └── results.png
└── template/
└── thesis-template.typ # custom layoutmain.typ: putting it together
#import "template/thesis-template.typ": *
#show: thesis.with(
title: "My Dissertation Title",
author: "Your Name",
university: "University Name",
department: "Department of Computer Science",
degree: "Doctor of Philosophy",
year: 2026,
advisor: "Prof. Advisor Name",
)
// Front matter
#include "chapters/abstract.typ"
#include "chapters/acknowledgments.typ"
// Main matter
#include "chapters/01-introduction.typ"
#include "chapters/02-background.typ"
#include "chapters/03-methods.typ"
#include "chapters/04-results.typ"
#include "chapters/05-discussion.typ"
#include "chapters/06-conclusion.typ"
// Bibliography
#bibliography("references.bib", style: "apa")
// Appendices
#include "appendices/a-data.typ"
#include "appendices/b-proofs.typ"A chapter file
// chapters/01-introduction.typ
= Introduction <ch:intro>
This chapter motivates the dissertation and outlines the structure.
== Motivation
Recent work @smith2024 has shown that ...
== Research Questions
1. RQ1: How does X affect Y?
2. RQ2: What's the optimal Z?
== Contributions
This dissertation makes the following contributions:
- Contribution 1
- Contribution 2
== Outline
The remainder of this thesis is organized as follows.
@ch:background reviews related work...Front matter pagination (Roman → Arabic)
// Title page (no number)
#set page(numbering: none)
... title page ...
#pagebreak()
// Front matter (Roman: i, ii, iii)
#set page(numbering: "i")
#counter(page).update(1)
... abstract, TOC, list of figures ...
#pagebreak()
// Main matter (Arabic: 1, 2, 3)
#set page(numbering: "1")
#counter(page).update(1)
... chapters ...Why Typst beats LaTeX for thesis writing
- 10x faster compile. A 200-page thesis compiles in 1-2 seconds in Typst; LaTeX takes 15-30 seconds (or longer with biber/bibtex). When you're iterating on figures and equations daily, this saves hours.
- One-pass build. No pdflatex → bibtex → pdflatex → pdflatex sequence. Typst does it all in one pass.
- Better error messages. Typst tells you exactly what's wrong with line numbers and a useful explanation. LaTeX shows "Missing $ inserted" from a macro 3 layers deep.
- Simpler customization. Want to change all section headings? One
#show headingrule. In LaTeX you'd redefine titlesec or fight the class file. - Same output quality. Indistinguishable PDF for any reader.
TypeTeX includes thesis templates ready to use — just replace the placeholder content. Real-time collaboration with your advisor, AI writing assistance, and Overleaf-import if you started in LaTeX.
Frequently Asked Questions
Yes — and many PhD students already do. Typst handles the typographic complexity of a thesis (chapter numbering, headers/footers, bibliography, cross-referencing, figures) just as well as LaTeX, with simpler syntax and 10x faster compile. The main consideration: check if your university requires LaTeX source for archival. If they only accept PDF, Typst is fine. If they require .tex, write in LaTeX or convert at the end.
One main.typ file that imports each chapter: #include "chapters/01-introduction.typ", #include "chapters/02-background.typ", etc. Plus references.bib for citations and a templates/ folder for any custom show rules. Typst's #include works like LaTeX's \input — content flows into the main document at that point.
Use #align and formatted text inside a #page (or just at the top): #align(center + horizon)[#text(size: 28pt, weight: "bold")[Thesis Title]] #v(2em) #text(size: 14pt)[by Author Name]. For thesis with university crest, embed the image: #image("crest.png", width: 4cm). Most thesis templates wrap this in a thesis-title() function.
#set heading(numbering: "1."). Then prefix the heading display: #show heading.where(level: 1): it => [Chapter #counter(heading).display() #it.body]. Or use a template that handles this — most thesis templates expose a #chapter("Title") function that does the formatting.
Front matter (TOC, acknowledgments, abstract): #set page(numbering: "i"). Then before the first chapter: #set page(numbering: "1") #counter(page).update(1). The page counter restarts at 1 in Arabic for the main matter. Typical thesis pattern.
Use #bibliography("references.bib", style: "apa") or whatever style your discipline requires. Typst handles BibTeX directly with no separate bibtex/biber compile step. For thesis-scale (200-500 references) Typst compiles in <1s — vs LaTeX where biber adds 5-10s to every compile cycle.
#outline(target: figure) for the list of figures, #outline(target: figure.where(kind: table)) for tables. Place after the main #outline() (table of contents). All auto-populate from your figure() calls.
Use #show heading.where(level: 1): it => { ... } and check if the heading should be styled as an appendix. Or use a template's appendix() function. Most thesis templates use a #counter("appendix") and switch heading numbering to A, B, C with #set heading(numbering: "A.1").
TypeTeX includes pre-built thesis templates: MIT-style, Harvard-style, generic university PhD/Master's. Typst Universe also hosts community templates: 'thesis-typst', 'modern-thesis', etc. Import with #import "@preview/modern-thesis:0.5.0": *.