Spaces:
Sleeping
Sleeping
| <h1 align="center"> | |
| <img alt="Typst" src="https://user-images.githubusercontent.com/17899797/226108480-722b770e-6313-40d7-84f2-26bebb55a281.png"> | |
| </h1> | |
| <p align="center"> | |
| <a href="https://typst.app/docs/"> | |
| <img alt="Documentation" src="https://img.shields.io/website?down_message=offline&label=docs&up_color=007aff&up_message=online&url=https%3A%2F%2Ftypst.app%2Fdocs" | |
| ></a> | |
| <a href="https://typst.app/"> | |
| <img alt="Typst App" src="https://img.shields.io/website?down_message=offline&label=typst.app&up_color=239dad&up_message=online&url=https%3A%2F%2Ftypst.app" | |
| ></a> | |
| <a href="https://discord.gg/2uDybryKPe"> | |
| <img alt="Discord Server" src="https://img.shields.io/discord/1054443721975922748?color=5865F2&label=discord&labelColor=555" | |
| ></a> | |
| <a href="https://github.com/typst/typst/blob/main/LICENSE"> | |
| <img alt="Apache-2 License" src="https://img.shields.io/badge/license-Apache%202-brightgreen" | |
| ></a> | |
| <a href="https://typst.app/jobs/"> | |
| <img alt="Jobs at Typst" src="https://img.shields.io/badge/dynamic/json?url=https%3A%2F%2Ftypst.app%2Fassets%2Fdata%2Fshields.json&query=%24.jobs.text&label=jobs&color=%23A561FF&cacheSeconds=1800" | |
| ></a> | |
| </p> | |
| Typst is a new markup-based typesetting system that is designed to be as powerful | |
| as LaTeX while being much easier to learn and use. Typst has: | |
| - Built-in markup for the most common formatting tasks | |
| - Flexible functions for everything else | |
| - A tightly integrated scripting system | |
| - Math typesetting, bibliography management, and more | |
| - Fast compile times thanks to incremental compilation | |
| - Friendly error messages in case something goes wrong | |
| This repository contains the Typst compiler and its CLI, which is everything you | |
| need to compile Typst documents locally. For the best writing experience, | |
| consider signing up to our [collaborative online editor][app] for free. | |
| ## Example | |
| A [gentle introduction][tutorial] to Typst is available in our documentation. | |
| However, if you want to see the power of Typst encapsulated in one image, here | |
| it is: | |
| <p align="center"> | |
| <img alt="Example" width="900" src="https://user-images.githubusercontent.com/17899797/228031796-ced0e452-fcee-4ae9-92da-b9287764ff25.png"> | |
| </p> | |
| Let's dissect what's going on: | |
| - We use _set rules_ to configure element properties like the size of pages or | |
| the numbering of headings. By setting the page height to `auto`, it scales to | |
| fit the content. Set rules accommodate the most common configurations. If you | |
| need full control, you can also use [show rules][show] to completely redefine | |
| the appearance of an element. | |
| - We insert a heading with the `= Heading` syntax. One equals sign creates a top | |
| level heading, two create a subheading and so on. Typst has more lightweight | |
| markup like this, see the [syntax] reference for a full list. | |
| - [Mathematical equations][math] are enclosed in dollar signs. By adding extra | |
| spaces around the contents of an equation, we can put it into a separate block. | |
| Multi-letter identifiers are interpreted as Typst definitions and functions | |
| unless put into quotes. This way, we don't need backslashes for things like | |
| `floor` and `sqrt`. And `phi.alt` applies the `alt` modifier to the `phi` to | |
| select a particular symbol variant. | |
| - Now, we get to some [scripting]. To input code into a Typst document, we can | |
| write a hash followed by an expression. We define two variables and a | |
| recursive function to compute the n-th fibonacci number. Then, we display the | |
| results in a center-aligned table. The table function takes its cells | |
| row-by-row. Therefore, we first pass the formulas `$F_1$` to `$F_8$` and then | |
| the computed fibonacci numbers. We apply the spreading operator (`..`) to both | |
| because they are arrays and we want to pass the arrays' items as individual | |
| arguments. | |
| <details> | |
| <summary>Text version of the code example.</summary> | |
| ```typst | |
| #set page(width: 10cm, height: auto) | |
| #set heading(numbering: "1.") | |
| = Fibonacci sequence | |
| The Fibonacci sequence is defined through the | |
| recurrence relation $F_n = F_(n-1) + F_(n-2)$. | |
| It can also be expressed in _closed form:_ | |
| $ F_n = round(1 / sqrt(5) phi.alt^n), quad | |
| phi.alt = (1 + sqrt(5)) / 2 $ | |
| #let count = 8 | |
| #let nums = range(1, count + 1) | |
| #let fib(n) = ( | |
| if n <= 2 { 1 } | |
| else { fib(n - 1) + fib(n - 2) } | |
| ) | |
| The first #count numbers of the sequence are: | |
| #align(center, table( | |
| columns: count, | |
| ..nums.map(n => $F_#n$), | |
| ..nums.map(n => str(fib(n))), | |
| )) | |
| ``` | |
| </details> | |
| ## Installation | |
| Typst's CLI is available from different sources: | |
| - You can get sources and pre-built binaries for the latest release of Typst | |
| from the [releases page][releases]. Download the archive for your platform and | |
| place it in a directory that is in your `PATH`. To stay up to date with future | |
| releases, you can simply run `typst update`. | |
| - You can install Typst through different package managers. Note that the | |
| versions in the package managers might lag behind the latest release. | |
| - Linux: | |
| - View [Typst on Repology][repology] | |
| - View [Typst's Snap][snap] | |
| - macOS: `brew install typst` | |
| - Windows: `winget install --id Typst.Typst` | |
| - If you have a [Rust][rust] toolchain installed, you can install | |
| - the latest released Typst version with | |
| `cargo install --locked typst-cli` | |
| - a development version with | |
| `cargo install --git https://github.com/typst/typst --locked typst-cli` | |
| - Nix users can | |
| - use the `typst` package with `nix-shell -p typst` | |
| - build and run a development version with | |
| `nix run github:typst/typst -- --version`. | |
| - Docker users can run a prebuilt image with | |
| `docker run ghcr.io/typst/typst:latest --help`. | |
| ## Usage | |
| Once you have installed Typst, you can use it like this: | |
| ```sh | |
| # Creates `file.pdf` in working directory. | |
| typst compile file.typ | |
| # Creates PDF file at the desired path. | |
| typst compile path/to/source.typ path/to/output.pdf | |
| ``` | |
| You can also watch source files and automatically recompile on changes. This is | |
| faster than compiling from scratch each time because Typst has incremental | |
| compilation. | |
| ```sh | |
| # Watches source files and recompiles on changes. | |
| typst watch file.typ | |
| ``` | |
| Typst further allows you to add custom font paths for your project and list all | |
| of the fonts it discovered: | |
| ```sh | |
| # Adds additional directories to search for fonts. | |
| typst compile --font-path path/to/fonts file.typ | |
| # Lists all of the discovered fonts in the system and the given directory. | |
| typst fonts --font-path path/to/fonts | |
| # Or via environment variable (Linux syntax). | |
| TYPST_FONT_PATHS=path/to/fonts typst fonts | |
| ``` | |
| For other CLI subcommands and options, see below: | |
| ```sh | |
| # Prints available subcommands and options. | |
| typst help | |
| # Prints detailed usage of a subcommand. | |
| typst help watch | |
| ``` | |
| If you prefer an integrated IDE-like experience with autocompletion and instant | |
| preview, you can also check out [Typst's free web app][app]. | |
| ## Community | |
| The main places where the community gathers are our [Forum][forum] and our | |
| [Discord server][discord]. The Forum is a great place to ask questions, help | |
| others, and share cool things you created with Typst. The Discord server is more | |
| suitable for quicker questions, discussions about contributing, or just to chat. | |
| We'd be happy to see you there! | |
| [Typst Universe][universe] is where the community shares templates and packages. | |
| If you want to share your own creations, you can submit them to our | |
| [package repository][packages]. | |
| If you had a bad experience in our community, please [reach out to us][contact]. | |
| ## Contributing | |
| We love to see contributions from the community. If you experience bugs, feel | |
| free to open an issue. If you would like to implement a new feature or bug fix, | |
| please follow the steps outlined in the [contribution guide][contributing]. | |
| To build Typst yourself, first ensure that you have the | |
| [latest stable Rust][rust] installed. Then, clone this repository and build the | |
| CLI with the following commands: | |
| ```sh | |
| git clone https://github.com/typst/typst | |
| cd typst | |
| cargo build --release | |
| ``` | |
| The optimized binary will be stored in `target/release/`. | |
| Another good way to contribute is by [sharing packages][packages] with the | |
| community. | |
| ## Pronunciation and Spelling | |
| IPA: /taɪpst/. "Ty" like in **Ty**pesetting and "pst" like in Hi**pst**er. When | |
| writing about Typst, capitalize its name as a proper noun, with a capital "T". | |
| ## Design Principles | |
| All of Typst has been designed with three key goals in mind: Power, | |
| simplicity, and performance. We think it's time for a system that matches the | |
| power of LaTeX, is easy to learn and use, all while being fast enough to realize | |
| instant preview. To achieve these goals, we follow three core design principles: | |
| - **Simplicity through Consistency:** | |
| If you know how to do one thing in Typst, you should be able to transfer that | |
| knowledge to other things. If there are multiple ways to do the same thing, | |
| one of them should be at a different level of abstraction than the other. E.g. | |
| it's okay that `= Introduction` and `#heading[Introduction]` do the same thing | |
| because the former is just syntax sugar for the latter. | |
| - **Power through Composability:** | |
| There are two ways to make something flexible: Have a knob for everything or | |
| have a few knobs that you can combine in many ways. Typst is designed with the | |
| second way in mind. We provide systems that you can compose in ways we've | |
| never even thought of. TeX is also in the second category, but it's a bit | |
| low-level and therefore people use LaTeX instead. But there, we don't really | |
| have that much composability. Instead, there's a package for everything | |
| (`\usepackage{knob}`). | |
| - **Performance through Incrementality:** | |
| All Typst language features must accommodate for incremental compilation. | |
| Luckily we have [`comemo`], a system for incremental compilation which does | |
| most of the hard work in the background. | |
| [docs]: https://typst.app/docs/ | |
| [app]: https://typst.app/ | |
| [discord]: https://discord.gg/2uDybryKPe | |
| [forum]: https://forum.typst.app/ | |
| [universe]: https://typst.app/universe/ | |
| [tutorial]: https://typst.app/docs/tutorial/ | |
| [show]: https://typst.app/docs/reference/styling/#show-rules | |
| [math]: https://typst.app/docs/reference/math/ | |
| [syntax]: https://typst.app/docs/reference/syntax/ | |
| [scripting]: https://typst.app/docs/reference/scripting/ | |
| [rust]: https://rustup.rs/ | |
| [releases]: https://github.com/typst/typst/releases/ | |
| [repology]: https://repology.org/project/typst/versions | |
| [contact]: https://typst.app/contact | |
| [architecture]: https://github.com/typst/typst/blob/main/docs/dev/architecture.md | |
| [contributing]: https://github.com/typst/typst/blob/main/CONTRIBUTING.md | |
| [packages]: https://github.com/typst/packages/ | |
| [`comemo`]: https://github.com/typst/comemo/ | |
| [snap]: https://snapcraft.io/typst | |