Spaces:
Sleeping
Sleeping
description: Typst's tutorial. | |
# Writing in Typst | |
Let's get started! Suppose you got assigned to write a technical report for | |
university. It will contain prose, maths, headings, and figures. To get started, | |
you create a new project on the Typst app. You'll be taken to the editor where | |
you see two panels: A source panel where you compose your document and a | |
preview panel where you see the rendered document. | |
 | |
You already have a good angle for your report in mind. So let's start by writing | |
the introduction. Enter some text in the editor panel. You'll notice that the | |
text immediately appears on the previewed page. | |
```example | |
In this report, we will explore the | |
various factors that influence fluid | |
dynamics in glaciers and how they | |
contribute to the formation and | |
behaviour of these natural structures. | |
``` | |
_Throughout this tutorial, we'll show code examples like this one. Just like in the app, the first panel contains markup and the second panel shows a preview. We shrunk the page to fit the examples so you can see what's going on._ | |
The next step is to add a heading and emphasize some text. Typst uses simple | |
markup for the most common formatting tasks. To add a heading, enter the `=` | |
character and to emphasize some text with italics, enclose it in | |
`[_underscores_]`. | |
```example | |
= Introduction | |
In this report, we will explore the | |
various factors that influence _fluid | |
dynamics_ in glaciers and how they | |
contribute to the formation and | |
behaviour of these natural structures. | |
``` | |
That was easy! To add a new paragraph, just add a blank line in between two | |
lines of text. If that paragraph needs a subheading, produce it by typing `==` | |
instead of `=`. The number of `=` characters determines the nesting level of the | |
heading. | |
Now we want to list a few of the circumstances that influence glacier dynamics. | |
To do that, we use a numbered list. For each item of the list, we type a `+` | |
character at the beginning of the line. Typst will automatically number the | |
items. | |
```example | |
+ The climate | |
+ The topography | |
+ The geology | |
``` | |
If we wanted to add a bulleted list, we would use the `-` character instead of | |
the `+` character. We can also nest lists: For example, we can add a sub-list to | |
the first item of the list above by indenting it. | |
```example | |
+ The climate | |
- Temperature | |
- Precipitation | |
+ The topography | |
+ The geology | |
``` | |
## Adding a figure { #figure } | |
You think that your report would benefit from a figure. Let's add one. Typst | |
supports images in the formats PNG, JPEG, GIF, and SVG. To add an image file to | |
your project, first open the _file panel_ by clicking the box icon in the left | |
sidebar. Here, you can see a list of all files in your project. Currently, there | |
is only one: The main Typst file you are writing in. To upload another file, | |
click the button with the arrow in the top-right corner. This opens the upload | |
dialog, in which you can pick files to upload from your computer. Select an | |
image file for your report. | |
 | |
We have seen before that specific symbols (called _markup_) have specific | |
meaning in Typst. We can use `=`, `-`, `+`, and `_` to create headings, lists | |
and emphasized text, respectively. However, having a special symbol for | |
everything we want to insert into our document would soon become cryptic and | |
unwieldy. For this reason, Typst reserves markup symbols only for the most | |
common things. Everything else is inserted with _functions._ For our image to | |
show up on the page, we use Typst's [`image`] function. | |
```example | |
#image("glacier.jpg") | |
``` | |
In general, a function produces some output for a set of _arguments_. When you | |
_call_ a function within markup, you provide the arguments and Typst inserts the | |
result (the function's _return value_) into the document. In our case, the | |
`image` function takes one argument: The path to the image file. To call a | |
function in markup, we first need to type the `#` character, immediately | |
followed by the name of the function. Then, we enclose the arguments in | |
parentheses. Typst recognizes many different data types within argument lists. | |
Our file path is a short [string of text]($str), so we need to enclose it in | |
double quotes. | |
The inserted image uses the whole width of the page. To change that, pass the | |
`width` argument to the `image` function. This is a _named_ argument and | |
therefore specified as a `name: value` pair. If there are multiple arguments, | |
they are separated by commas, so we first need to put a comma behind the path. | |
```example | |
#image("glacier.jpg", width: 70%) | |
``` | |
The `width` argument is a [relative length]($relative). In our case, we | |
specified a percentage, determining that the image shall take up `{70%}` of the | |
page's width. We also could have specified an absolute value like `{1cm}` or | |
`{0.7in}`. | |
Just like text, the image is now aligned at the left side of the page by | |
default. It's also lacking a caption. Let's fix that by using the [figure] | |
function. This function takes the figure's contents as a positional argument and | |
an optional caption as a named argument. | |
Within the argument list of the `figure` function, Typst is already in code | |
mode. This means, you now have to remove the hash before the image function call. | |
The hash is only needed directly in markup (to disambiguate text from function | |
calls). | |
The caption consists of arbitrary markup. To give markup to a function, we | |
enclose it in square brackets. This construct is called a _content block._ | |
```example | |
#figure( | |
image("glacier.jpg", width: 70%), | |
caption: [ | |
_Glaciers_ form an important part | |
of the earth's climate system. | |
], | |
) | |
``` | |
You continue to write your report and now want to reference the figure. To do | |
that, first attach a label to figure. A label uniquely identifies an element in | |
your document. Add one after the figure by enclosing some name in angle | |
brackets. You can then reference the figure in your text by writing an `[@]` | |
symbol followed by that name. Headings and equations can also be labelled to | |
make them referenceable. | |
```example | |
Glaciers as the one shown in | |
@glaciers will cease to exist if | |
we don't take action soon! | |
#figure( | |
image("glacier.jpg", width: 70%), | |
caption: [ | |
_Glaciers_ form an important part | |
of the earth's climate system. | |
], | |
) <glaciers> | |
``` | |
<div class="info-box"> | |
So far, we've passed content blocks (markup in square brackets) and strings | |
(text in double quotes) to our functions. Both seem to contain text. What's the | |
difference? | |
A content block can contain text, but also any other kind of markup, function | |
calls, and more, whereas a string is really just a _sequence of characters_ and | |
nothing else. | |
For example, the image function expects a path to an image file. | |
It would not make sense to pass, e.g., a paragraph of text or another image as | |
the image's path parameter. That's why only strings are allowed here. | |
In contrast, strings work wherever content is expected because text is a | |
valid kind of content. | |
</div> | |
## Adding a bibliography { #bibliography } | |
As you write up your report, you need to back up some of your claims. You can | |
add a bibliography to your document with the [`bibliography`] function. This | |
function expects a path to a bibliography file. | |
Typst's native bibliography format is | |
[Hayagriva](https://github.com/typst/hayagriva/blob/main/docs/file-format.md), | |
but for compatibility you can also use BibLaTeX files. As your classmate has | |
already done a literature survey and sent you a `.bib` file, you'll use that | |
one. Upload the file through the file panel to access it in Typst. | |
Once the document contains a bibliography, you can start citing from it. | |
Citations use the same syntax as references to a label. As soon as you cite a | |
source for the first time, it will appear in the bibliography section of your | |
document. Typst supports different citation and bibliography styles. Consult the | |
[reference]($bibliography.style) for more details. | |
```example | |
= Methods | |
We follow the glacier melting models | |
established in @glacier-melt. | |
#bibliography("works.bib") | |
``` | |
## Maths | |
After fleshing out the methods section, you move on to the meat of the document: | |
Your equations. Typst has built-in mathematical typesetting and uses its own | |
math notation. Let's start with a simple equation. We wrap it in `[$]` signs | |
to let Typst know it should expect a mathematical expression: | |
```example | |
The equation $Q = rho A v + C$ | |
defines the glacial flow rate. | |
``` | |
The equation is typeset inline, on the same line as the surrounding text. If you | |
want to have it on its own line instead, you should insert a single space at its | |
start and end: | |
```example | |
The flow rate of a glacier is | |
defined by the following equation: | |
$ Q = rho A v + C $ | |
``` | |
We can see that Typst displayed the single letters `Q`, `A`, `v`, and `C` as-is, | |
while it translated `rho` into a Greek letter. Math mode will always show single | |
letters verbatim. Multiple letters, however, are interpreted as symbols, | |
variables, or function names. To imply a multiplication between single letters, | |
put spaces between them. | |
If you want to have a variable that consists of multiple letters, you can | |
enclose it in quotes: | |
```example | |
The flow rate of a glacier is given | |
by the following equation: | |
$ Q = rho A v + "time offset" $ | |
``` | |
You'll also need a sum formula in your paper. We can use the `sum` symbol and | |
then specify the range of the summation in sub- and superscripts: | |
```example | |
Total displaced soil by glacial flow: | |
$ 7.32 beta + | |
sum_(i=0)^nabla Q_i / 2 $ | |
``` | |
To add a subscript to a symbol or variable, type a `_` character and then the | |
subscript. Similarly, use the `^` character for a superscript. If your | |
sub- or superscript consists of multiple things, you must enclose them | |
in round parentheses. | |
The above example also showed us how to insert fractions: Simply put a `/` | |
character between the numerator and the denominator and Typst will automatically | |
turn it into a fraction. Parentheses are smartly resolved, so you can enter your | |
expression as you would into a calculator and Typst will replace parenthesized | |
sub-expressions with the appropriate notation. | |
```example | |
Total displaced soil by glacial flow: | |
$ 7.32 beta + | |
sum_(i=0)^nabla | |
(Q_i (a_i - epsilon)) / 2 $ | |
``` | |
Not all math constructs have special syntax. Instead, we use functions, just | |
like the `image` function we have seen before. For example, to insert a column | |
vector, we can use the [`vec`]($math.vec) function. Within math mode, function | |
calls don't need to start with the `#` character. | |
```example | |
$ v := vec(x_1, x_2, x_3) $ | |
``` | |
Some functions are only available within math mode. For example, the | |
[`cal`]($math.cal) function is used to typeset calligraphic letters commonly | |
used for sets. The [math section of the reference]($category/math) provides a | |
complete list of all functions that math mode makes available. | |
One more thing: Many symbols, such as the arrow, have a lot of variants. You can | |
select among these variants by appending a dot and a modifier name to a symbol's | |
name: | |
```example | |
$ a arrow.squiggly b $ | |
``` | |
This notation is also available in markup mode, but the symbol name must be | |
preceded with `#sym.` there. See the [symbols section]($category/symbols/sym) | |
for a list of all available symbols. | |
## Review | |
You have now seen how to write a basic document in Typst. You learned how to | |
emphasize text, write lists, insert images, align content, and typeset | |
mathematical expressions. You also learned about Typst's functions. There are | |
many more kinds of content that Typst lets you insert into your document, such | |
as [tables]($table), [shapes]($category/visualize), and [code blocks]($raw). You | |
can peruse the [reference] to learn more about these and other features. | |
For the moment, you have completed writing your report. You have already saved a | |
PDF by clicking on the download button in the top right corner. However, you | |
think the report could look a bit less plain. In the next section, we'll learn | |
how to customize the look of our document. | |