Universe

Create project in app

Version française

A Typst template for the final-year project (PFE) thesis at ESI Algiers (École nationale Supérieure d’Informatique), following the school’s formatting standards. It suits both State Engineer and Master theses.

See the compiled template in the example PDF.

Preview of the cover page

Features

  • ESI cover page with the bilingual state header, supervisors, jury, and host organization
  • Roman page numbers in the frontmatter, Arabic from the introduction onward
  • Running header showing the current chapter or appendix
  • Optional Part I / Part II dividers, with chapter numbering running continuously across parts
  • English, French, and Arabic (RTL) abstract pages, plus dedication, acknowledgments, and abbreviations
  • Table captions above tables, figure captions below; tables numbered per chapter (Table 2.1) and per appendix (Table A.1)
  • Table, algorithm, and code-block helpers

Usage

Open the template in the Typst web app, or create a project from the command line:

typst init @preview/clean-esi:0.1.0 my-thesis
cd my-thesis
typst watch main.typ

Fill in the metadata in main.typ, then write your chapters in chapters/. main.typ is the only place that controls chapter order: to add a chapter, create a file and #include it there.

Before it is on Typst Universe

Clone this repository into Typst’s local package directory, then run the same typst init command:

# Windows (PowerShell)
git clone https://github.com/Chamiln17/clean-esi "$env:APPDATA\typst\packages\preview\clean-esi\0.1.0"
# Linux
git clone https://github.com/Chamiln17/clean-esi ~/.local/share/typst/packages/preview/clean-esi/0.1.0
# macOS
git clone https://github.com/Chamiln17/clean-esi ~/Library/Application\ Support/typst/packages/preview/clean-esi/0.1.0

The package does not ship the ESI logo. Download it from this repository or the school website, put it next to main.typ, and set logo: image("esi_logo.png", width: 6cm).

Fonts

The body text uses New Computer Modern, which Typst includes. The Arabic parts (cover header, Arabic abstract) use Amiri. Install it on your system, upload it to your web-app project, or point the CLI at a folder containing it:

typst watch main.typ --font-path fonts/

Configuration

thesis sets up the cover page and the frontmatter. Apply it with a show rule:

#import "@preview/clean-esi:0.1.0": *

#show: thesis.with(
  title: "Your Thesis Title",
  authors: ("Surname Name",),
  supervisor: "Dr. Supervisor Name (ESI)",
  jury: (("Dr. President Name", "ESI", "President"),),
)

Fixed labels (“Supervised by”, “Chapter”, list titles) are in English; only the abstracts come in three languages.

Argument Type Default
title str or content "Thesis Title"
authors array of str ()
supervisor str or none none
co-supervisor array of str ()
report-type str "Final Year Thesis"
institution str "National Higher School of Computer Science"
option str "Computer Systems (SIQ)"
degree-type str "State Engineer Degree in Computer Science"
host-organization str "" (renders a blank line)
promotion str, the academic year "2024/2025"
defense-date str "XX/XX/2025"
jury array of (name, affiliation, role) () (jury block hidden)
logo content, e.g. image(...), or none none
page-margin dictionary 2.5cm on all sides

Document structure

Function Effect
main-content[...] Resets to Arabic page numbers and adds the running header
part-divider(label, title, summary) Full-page Part divider with its own PDF bookmark
numbered-part[...] Nests the chapters it wraps under the preceding Part
appendix-content[...] A.1 heading numbering, tables reset per appendix
table-of-contents(), list-of-figures(), list-of-tables() Contents and lists, each on its own page

Parts are optional. Without them, drop the part-divider calls and the numbered-part wrappers and include the chapters directly inside main-content. To keep the introduction and conclusion unnumbered, wrap them in #[ #set heading(numbering: none) ... ], as main.typ does.

Label chapters <ch:...>, figures <fig:...>, and tables <tab:...>, and reference them with @label. References to chapters render as “Chapter N”.

Frontmatter pages

Function Effect
abstract-page-en(abstract-content: [...], keywords: (...)) English abstract; -fr and -ar (RTL) variants take the same arguments
dedication-page[...] Centered, italic dedication
arabic-dedication-page(verse, body) RTL dedication with a highlighted opening verse
acknowledgments-page[...] Acknowledgments
abbreviations-page(((abbr, meaning), ...)) Two-column list of abbreviations

Content helpers

Function Effect
thesis-table(..args) table with the thesis rules, header fill, and zebra rows
thesis-readable-table, thesis-compact-table, thesis-wide-table, thesis-schema-table Same style at smaller text sizes (size: argument) for dense tables
thesis-descriptive-table(header: (...), ..cells), thesis-booktabs-table(header: (...), ..cells) Plain and booktabs-style tables
table-lines(..items), table-code-lines(..items) Several lines, or code lines, in one cell
thesis-algorithm(caption: [...])[+ step ...] Numbered pseudocode figure, numbered per chapter
thesis-code-block(numbering: true)[...], with a fenced raw block inside Code listing with zebra lines; thesis-json-block is an alias
info-box(title, body), warning-box(title, body) Highlighted boxes
definition(term, description), quote-block(body, author: ...) Definition line and quotation block
todo(body), divider() Draft marker and horizontal rule

Wrap tables and algorithms in #figure(..., caption: [...]) to number them and list them in the List of Tables. template/chapters/ has a working example of each helper.

Other schools and departments

The cover page text (institution, degree, option) comes from the thesis arguments, so the template adapts to other ESI programs or to other Algerian schools with the same thesis layout. Adaptations and fixes are welcome as issues or pull requests.

Packages used

Contributing

Report bugs or propose changes in the GitHub issues.

License

The code and the template are under MIT-0, so you can use them in your thesis without keeping any notice. The ESI logo in assets/ belongs to ESI Algiers, is not covered by this license, and is not part of the Typst package.