summaryrefslogtreecommitdiff
path: root/docs/src/reference
diff options
context:
space:
mode:
authorLaurenz <laurmaedje@gmail.com>2023-07-02 19:59:52 +0200
committerLaurenz <laurmaedje@gmail.com>2023-07-02 20:07:43 +0200
commitebfdb1dafa430786db10dad2ef7d5467c1bdbed1 (patch)
tree2bbc24ddb4124c4bb14dec0e536129d4de37b056 /docs/src/reference
parent3ab19185093d7709f824b95b979060ce125389d8 (diff)
Move everything into `crates/` directory
Diffstat (limited to 'docs/src/reference')
-rw-r--r--docs/src/reference/details.yml174
-rw-r--r--docs/src/reference/groups.yml76
-rw-r--r--docs/src/reference/scripting.md345
-rw-r--r--docs/src/reference/styling.md145
-rw-r--r--docs/src/reference/syntax.md138
-rw-r--r--docs/src/reference/types.md1190
-rw-r--r--docs/src/reference/welcome.md29
7 files changed, 0 insertions, 2097 deletions
diff --git a/docs/src/reference/details.yml b/docs/src/reference/details.yml
deleted file mode 100644
index 8e9af3a0..00000000
--- a/docs/src/reference/details.yml
+++ /dev/null
@@ -1,174 +0,0 @@
-types: |
- To style your document, you need to work with values of different kinds: Lengths
- specifying the size of your elements, colors for your text and shapes, and more.
- Typst categorizes these into clearly defined _types_ and tells you where it
- expects which type of value.
-
- Apart from very basic types for numeric values and typical types known from
- programming languages, Typst provides a special type for _content._ A value of
- this type can hold anything that you can enter into your document: Text,
- elements like headings and shapes, and style information.
-
- In some places of Typst more specialized data types are used. Instead of listing
- all of them here, they are explained where they are relevant.
-
-text: |
- Text styling.
-
- The [text function]($func/text) is of particular interest.
-
-math: |
- Typst has special [syntax]($syntax/#math) and library functions
- to typeset mathematical formulas. Math formulas can be displayed inline with
- text or as separate blocks. They will be typeset into their own block if they
- start and end with at least one space (e.g. `[$ x^2 $]`).
-
- In math, single letters are always displayed as is. Multiple letters, however,
- are interpreted as variables and functions. To display multiple letters
- verbatim, you can place them into quotes and to access single letter
- variables, you can use the
- [hashtag syntax]($scripting/#expressions).
-
- ```example
- $ A = pi r^2 $
- $ "area" = pi dot "radius"^2 $
- $ cal(A) :=
- { x in RR | x "is natural" } $
- #let x = 5
- $ #x < 17 $
- ```
-
- Math mode makes a wide selection of [symbols]($category/symbols/sym) like
- `pi`, `dot`, or `RR` available. Many mathematical symbols are available in
- different variants. You can select between different variants by applying
- [modifiers]($type/symbol) to the symbol. Typst further recognizes a number of
- shorthand sequences like `=>` that approximate a symbol. When such a shorthand
- exists, the symbol's documentation lists it.
-
- ```example
- $ x < y => x gt.eq.not y $
- ```
-
- Formulas can also contain line breaks. Each line can contain one or multiple
- _alignment points_ (`&`) which are then aligned.
- ```example
- $ sum_(k=0)^n k
- &= 1 + ... + n \
- &= (n(n+1)) / 2 $
- ```
-
- Math mode supports special function calls without the hashtag prefix. In these
- "math calls", the argument list works a little differently than in code:
-
- - Within them, Typst is still in "math mode". Thus, you can write math directly
- into them, but need to use hashtag syntax to pass code expressions (except
- for strings, which are available in the math syntax).
- - They support positional and named arguments, but don't support
- trailing content blocks and argument spreading.
- - They provide additional syntax for 2-dimensional argument lists. The
- semicolon (`;`) merges preceding arguments separated by commas into an array
- argument.
-
- ```example
- $ frac(a^2, 2) $
- $ vec(1, 2, delim: "[") $
- $ mat(1, 2; 3, 4) $
- $ lim_x =
- op("lim", limits: #true)_x $
- ```
-
- To write a verbatim comma or semicolon in a math call, escape it with a
- backslash. The colon on the other hand is only recognized in a special way if
- directly preceded by an identifier, so to display it verbatim in those cases,
- you can just insert a space before it.
-
- Functions calls preceded by a hashtag are normal code function calls and not
- affected by these rules.
-
- All math functions are part of the `math` [module]($scripting/#modules), which
- is available by default in equations. Outside of equations, they can be
- accessed with the `math.` prefix. For example, to set the font used for
- equations, write:
-
- ```example
- #show math.equation: set text(font: "Fira Math")
- $ sum_(i in NN) 1 + i $
- ```
-
-layout: |
- Arranging elements on the page in different ways.
-
- By combining layout functions, you can create complex and automatic layouts.
-
-visualize: |
- Drawing and data visualization.
-
- _Note:_ Functions for plotting and diagrams are not yet available. They will
- be in the future.
-
-meta: |
- Document structuring, introspection, and metadata configuration.
-
- Here, you can find functions to structure your document and interact with that
- structure. This includes section headings and figures, bibliography
- management, cross-referencing and more.
-
- Moreover, this category is home to Typst's introspection capabilities: With
- the `counter` function, you can access and manipulate page, section, figure,
- and equation counters or create custom ones. And the `query` function lets you
- search for elements in the document to construct things like a list of
- figures or headers which show the current chapter title.
-
-symbols: |
- These two modules give names to symbols and emoji to make them easy to insert
- with a normal keyboard. Alternatively, you can also always directly enter
- Unicode symbols into your text and formulas. In addition to the symbols listed
- below, math mode defines `dif` and `Dif`. These are not normal symbol values
- because they also affect spacing and font style.
-
-sym: |
- Named general symbols.
-
- For example, `#sym.arrow` produces the → symbol. Within
- [formulas]($category/math), these symbols can be used without the `#sym.`
- prefix.
-
- The `d` in an integral's `dx` can be written as `[$dif x$]`.
- Outside math formulas, `dif` can be accessed as `math.dif`.
-
-emoji: |
- Named emoji.
-
- For example, `#emoji.face` produces the 😀 emoji. If you frequently use
- certain emojis, you can also import them from the `emoji` module (`[#import
- emoji: face]`) to use them without the `#emoji.` prefix.
-
-foundations: |
- Foundational functions for computation.
-
-calculate: |
- Calculations and processing of numeric values.
-
- These functions are part of the `calc` module and not imported by default. In
- addition to the functions listed below, the `calc` module also defines the
- constants `pi`, `e`, `inf`, and `nan`.
-
-construct: |
- Construction of and conversions between values of different types.
-
-data-loading: |
- Data loading from external files.
-
- These functions help you with embedding data from experiments in your
- documents.
-
-utility: |
- Useful utility functions.
-
-packages: |
- Typst [packages]($scripting/#packages) encapsulate reusable building blocks
- and make them reusable across projects. Below is a list of Typst packages
- created by the community. Due to the early and experimental nature of Typst's
- package management, they all live in a `preview` namespace. Click on a
- package's name to view its documentation and use the copy button on the right
- to get a full import statement for it.
diff --git a/docs/src/reference/groups.yml b/docs/src/reference/groups.yml
deleted file mode 100644
index 3bc80339..00000000
--- a/docs/src/reference/groups.yml
+++ /dev/null
@@ -1,76 +0,0 @@
-# This is responsible for the fact that certain math functions are grouped
-# together into one documentation page although they are not part of any scope.
-
-- name: variants
- display: Variants
- functions: ["serif", "sans", "frak", "mono", "bb", "cal"]
- description: |
- Alternate typefaces within formulas.
-
- These functions are distinct from the [`text`]($func/text) function because
- math fonts contain multiple variants of each letter.
-
-- name: styles
- display: Styles
- functions: ["upright", "italic", "bold"]
- description: |
- Alternate letterforms within formulas.
-
- These functions are distinct from the [`text`]($func/text) function because
- math fonts contain multiple variants of each letter.
-
-- name: sizes
- display: Sizes
- functions: ["display", "inline", "script", "sscript"]
- description: |
- Forced size styles for expressions within formulas.
-
- These functions allow manual configuration of the size of equation elements
- to make them look as in a display/inline equation or as if used in a root or
- sub/superscripts.
-
-- name: underover
- display: Under/Over
- functions: [
- "underline",
- "overline",
- "underbrace",
- "overbrace",
- "underbracket",
- "overbracket",
- ]
- description: |
- Delimiters above or below parts of an equation.
-
- The braces and brackets further allow you to add an optional annotation
- below or above themselves.
-
-- name: roots
- display: Roots
- functions: ["root", "sqrt"]
- description: Square and non-square roots.
-
-- name: attach
- display: Attach
- functions: ["attach", "scripts", "limits"]
- description: |
- Subscript, superscripts, and limits.
-
- The `attach` function backs the `[$a_b^c$]` syntax that adds top and bottom
- attachments to a part of an equation. Attachments can be displayed either as
- sub/superscripts, or limits. Typst automatically decides which is more
- suitable depending on the base, but you can also control this manually with
- the `scripts` and `limits` functions.
-
-- name: lr
- display: Left/Right
- functions: ["lr", "abs", "norm", "floor", "ceil", "round"]
- description: |
- Delimiter matching.
-
- The `lr` function allows you to match two delimiters and scale them with the
- content they contain. While this also happens automatically for delimiters
- that match syntactically, `lr` allows you to match two arbitrary delimiters
- and control their size exactly. Apart from the `lr` function, Typst provides
- a few more functions that create delimiter pairings for absolute, ceiled,
- and floored values as well as norms.
diff --git a/docs/src/reference/scripting.md b/docs/src/reference/scripting.md
deleted file mode 100644
index c18bdc4b..00000000
--- a/docs/src/reference/scripting.md
+++ /dev/null
@@ -1,345 +0,0 @@
----
-description: Automate your document with Typst's scripting capabilities.
----
-
-# Scripting
-Typst embeds a powerful scripting language. You can automate your documents and
-create more sophisticated styles with code. Below is an overview over the
-scripting concepts.
-
-## Expressions { #expressions }
-In Typst, markup and code are fused into one. All but the most common elements
-are created with _functions._ To make this as convenient as possible, Typst
-provides compact syntax to embed a code expression into markup: An expression is
-introduced with a hashtag (`#`) and normal markup parsing resumes after the
-expression is finished. If a character would continue the expression but should
-be interpreted as text, the expression can forcibly be ended with a semicolon
-(`;`).
-
-```example
-#emph[Hello] \
-#emoji.face \
-#"hello".len()
-```
-
-The example above shows a few of the available expressions, including
-[function calls]($type/function),
-[field accesses]($scripting/#fields), and
-[method calls]($scripting/#methods). More kinds of expressions are
-discussed in the remainder of this chapter. A few kinds of expressions are not
-compatible with the hashtag syntax (e.g. binary operator expressions). To embed
-these into markup, you can use parentheses, as in `[#(1 + 2)]`.
-
-## Blocks { #blocks }
-To structure your code and embed markup into it, Typst provides two kinds of
-_blocks:_
-
-- **Code block:** `{{ let x = 1; x + 2 }}` \
- When writing code, you'll probably want to split up your computation into
- multiple statements, create some intermediate variables and so on. Code blocks
- let you write multiple expressions where one is expected. The individual
- expressions in a code block should be separated by line breaks or semicolons.
- The output values of the individual expressions in a code block are joined to
- determine the block's value. Expressions without useful output, like `{let}`
- bindings yield `{none}`, which can be joined with any value without effect.
-
-- **Content block:** `{[*Hey* there!]}` \
- With content blocks, you can handle markup/content as a programmatic value,
- store it in variables and pass it to [functions]($type/function). Content
- blocks are delimited by square brackets and can contain arbitrary markup. A
- content block results in a value of type [content]($type/content). An
- arbitrary number of content blocks can be passed as trailing arguments to
- functions. That is, `{list([A], [B])}` is equivalent to `{list[A][B]}`.
-
-Content and code blocks can be nested arbitrarily. In the example below,
-`{[hello]}` is joined with the output of `{a + [ the ] + b}` yielding
-`{[hello from the *world*]}`.
-
-```example
-#{
- let a = [from]
- let b = [*world*]
- [hello ]
- a + [ the ] + b
-}
-```
-
-## Bindings and Destructuring { #bindings }
-As already demonstrated above, variables can be defined with `{let}` bindings.
-The variable is assigned the value of the expression that follows the `=` sign.
-The assignment of a value is optional, if no value is assigned, the variable
-will be initialized as `{none}`. The `{let}` keyword can also be used to create
-a [custom named function]($type/function/#definitions). Let bindings can be
-accessed for the rest of the containing block or document.
-
-```example
-#let name = "Typst"
-This is #name's documentation.
-It explains #name.
-
-#let add(x, y) = x + y
-Sum is #add(2, 3).
-```
-
-Let bindings can also be used to destructure [arrays]($type/array) and
-[dictionaries]($type/dictionary). In this case, the left-hand side of the
-assignment should mirror an array or dictionary. The `..` operator can be used
-once in the pattern to collect the remainder of the array's or dictionary's
-items.
-
-```example
-#let (x, y) = (1, 2)
-The coordinates are #x, #y.
-
-#let (a, .., b) = (1, 2, 3, 4)
-The first element is #a.
-The last element is #b.
-
-#let books = (
- Shakespeare: "Hamlet",
- Homer: "The Odyssey",
- Austen: "Persuasion",
-)
-
-#let (Austen,) = books
-Austen wrote #Austen.
-
-#let (Homer: h) = books
-Homer wrote #h.
-
-#let (Homer, ..other) = books
-#for (author, title) in other [
- #author wrote #title.
-]
-```
-
-You can use the underscore to discard elements in a destructuring pattern:
-
-```example
-#let (_, y, _) = (1, 2, 3)
-The y coordinate is #y.
-```
-
-Destructuring also work in argument lists of functions ...
-
-```example
-#let left = (2, 4, 5)
-#let right = (3, 2, 6)
-#left.zip(right).map(
- ((a,b)) => a + b
-)
-```
-
-... and on the left-hand side of normal assignments. This can be useful to
-swap variables among other things.
-
-```example
-#{
- let a = 1
- let b = 2
- (a, b) = (b, a)
- [a = #a, b = #b]
-}
-```
-
-## Conditionals { #conditionals }
-With a conditional, you can display or compute different things depending on
-whether some condition is fulfilled. Typst supports `{if}`, `{else if}` and
-`{else}` expression. When the condition evaluates to `{true}`, the conditional
-yields the value resulting from the if's body, otherwise yields the value
-resulting from the else's body.
-
-```example
-#if 1 < 2 [
- This is shown
-] else [
- This is not.
-]
-```
-
-Each branch can have a code or content block as its body.
-
-- `{if condition {..}}`
-- `{if condition [..]}`
-- `{if condition [..] else {..}}`
-- `{if condition [..] else if condition {..} else [..]}`
-
-## Loops { #loops }
-With loops, you can repeat content or compute something iteratively. Typst
-supports two types of loops: `{for}` and `{while}` loops. The former iterate
-over a specified collection whereas the latter iterate as long as a condition
-stays fulfilled. Just like blocks, loops _join_ the results from each iteration
-into one value.
-
-In the example below, the three sentences created by the for loop join together
-into a single content value and the length-1 arrays in the while loop join
-together into one larger array.
-
-```example
-#for c in "ABC" [
- #c is a letter.
-]
-
-#let n = 2
-#while n < 10 {
- n = (n * 2) - 1
- (n,)
-}
-```
-
-For loops can iterate over a variety of collections:
-
-- `{for letter in "abc" {..}}` \
- Iterates over the characters of the [string]($type/string).
- (Technically, iterates over the grapheme clusters of the string. Most of the
- time, a grapheme cluster is just a single character/codepoint. However, some
- constructs like flag emojis that consist of multiple codepoints are still only
- one cluster.)
-
-- `{for value in array {..}}` \
- Iterates over the items in the [array]($type/array). The destructuring syntax
- described in [Let binding]($scripting/#bindings) can also be used here.
-
-- `{for pair in dict {..}}` \
- Iterates over the key-value pairs of the [dictionary]($type/dictionary).
- The pairs can also be destructured by using `{for (key, value) in dict {..}}`.
-
-To control the execution of the loop, Typst provides the `{break}` and
-`{continue}` statements. The former performs an early exit from the loop while
-the latter skips ahead to the next iteration of the loop.
-
-```example
-#for letter in "abc nope" {
- if letter == " " {
- break
- }
-
- letter
-}
-```
-
-The body of a loop can be a code or content block:
-
-- `{for .. in collection {..}}`
-- `{for .. in collection [..]}`
-- `{while condition {..}}`
-- `{while condition [..]}`
-
-## Fields { #fields }
-You can use _dot notation_ to access fields on a value. The value in question
-can be either:
-- a [dictionary]($type/dictionary) that has the specified key,
-- a [symbol]($type/symbol) that has the specified modifier,
-- a [module]($type/module) containing the specified definition,
-- [content]($type/content) consisting of an element that has the specified
- field. The available fields match the arguments of the
- [element function]($type/function/#element-functions) that were given when
- the element was constructed.
-
-```example
-#let dict = (greet: "Hello")
-#dict.greet \
-#emoji.face
-
-#let it = [= Heading]
-#it.body \
-#it.level
-```
-
-## Methods { #methods }
-A method is a kind of a [function]($type/function) that is tightly coupled with
-a specific type. It is called on a value of its type using the same dot notation
-that is also used for fields: `{value.method(..)}`. The
-[type documentation]($type) lists the available methods for each of the built-in
-types. You cannot define your own methods.
-
-```example
-#let array = (1, 2, 3, 4)
-#array.pop() \
-#array.len() \
-
-#("a, b, c"
- .split(", ")
- .join[ --- ])
-```
-
-Methods are the only functions in Typst that can modify the value they are
-called on.
-
-## Modules { #modules }
-You can split up your Typst projects into multiple files called _modules._ A
-module can refer to the content and definitions of another module in multiple
-ways:
-
-- **Including:** `{include "bar.typ"}` \
- Evaluates the file at the path `bar.typ` and returns the resulting
- [content]($type/content).
-
-- **Import:** `{import "bar.typ"}` \
- Evaluates the file at the path `bar.typ` and inserts the resulting
- [module]($type/module) into the current scope as `bar` (filename without
- extension).
-
-- **Import items:** `{import "bar.typ": a, b}` \
- Evaluates the file at the path `bar.typ`, extracts the values of the variables
- `a` and `b` (that need to be defined in `bar.typ`, e.g. through `{let}`
- bindings) and defines them in the current file.Replacing `a, b` with `*` loads
- all variables defined in a module.
-
-Instead of a path, you can also use a [module value]($type/module), as shown in
-the following example:
-
-```example
-#import emoji: face
-#face.grin
-```
-
-## Packages { #packages }
-To reuse building blocks across projects, you can also create and import Typst
-_packages._ A package import is specified as a triple of a namespace, a name,
-and a version.
-
-```example
->>> #let add(x, y) = x + y
-<<< #import "@preview/example:0.1.0": add
-#add(2, 7)
-```
-
-The `preview` namespace contains packages shared by the community. You can find
-a searchable list of available community packages in the [packages]($packages)
-section.
-
-If you are using Typst locally, you can also create your own system-local
-packages. For more details on this, see the
-[package repository](https://github.com/typst/packages).
-
-## Operators { #operators }
-The following table lists all available unary and binary operators with effect,
-arity (unary, binary) and precedence level (higher binds stronger).
-
-| Operator | Effect | Arity | Precedence |
-|:----------:|---------------------------------|:------:|:----------:|
-| `{-}` | Negation | Unary | 7 |
-| `{+}` | No effect (exists for symmetry) | Unary | 7 |
-| `{*}` | Multiplication | Binary | 6 |
-| `{/}` | Division | Binary | 6 |
-| `{+}` | Addition | Binary | 5 |
-| `{-}` | Subtraction | Binary | 5 |
-| `{==}` | Check equality | Binary | 4 |
-| `{!=}` | Check inequality | Binary | 4 |
-| `{<}` | Check less-than | Binary | 4 |
-| `{<=}` | Check less-than or equal | Binary | 4 |
-| `{>}` | Check greater-than | Binary | 4 |
-| `{>=}` | Check greater-than or equal | Binary | 4 |
-| `{in}` | Check if in collection | Binary | 4 |
-| `{not in}` | Check if not in collection | Binary | 4 |
-| `{not}` | Logical "not" | Unary | 3 |
-| `{and}` | Short-circuiting logical "and" | Binary | 3 |
-| `{or}` | Short-circuiting logical "or | Binary | 2 |
-| `{=}` | Assignment | Binary | 1 |
-| `{+=}` | Add-Assignment | Binary | 1 |
-| `{-=}` | Subtraction-Assignment | Binary | 1 |
-| `{*=}` | Multiplication-Assignment | Binary | 1 |
-| `{/=}` | Division-Assignment | Binary | 1 |
-
-[semver]: https://semver.org/
diff --git a/docs/src/reference/styling.md b/docs/src/reference/styling.md
deleted file mode 100644
index 85095e34..00000000
--- a/docs/src/reference/styling.md
+++ /dev/null
@@ -1,145 +0,0 @@
----
-description: All concepts needed to style your document with Typst.
----
-
-# Styling
-Typst includes a flexible styling system that automatically applies styling of
-your choice to your document. With _set rules,_ you can configure basic
-properties of elements. This way, you create most common styles. However, there
-might not be a built-in property for everything you wish to do. For this reason,
-Typst further supports _show rules_ that can completely redefine the appearance
-of elements.
-
-## Set rules { #set-rules }
-With set rules, you can customize the appearance of elements. They are written
-as a [function call]($type/function) to an
-[element function]($type/function/#element-functions) preceded by the `{set}`
-keyword (or `[#set]` in markup). Only optional parameters of that function can
-be provided to the set rule. Refer to each function's documentation to see which
-parameters are optional. In the example below, we use two set rules to change
-the [font family]($func/text.font) and
-[heading numbering]($func/heading.numbering).
-
-```example
-#set heading(numbering: "I.")
-#set text(
- font: "New Computer Modern"
-)
-
-= Introduction
-With set rules, you can style
-your document.
-```
-
-A top level set rule stays in effect until the end of the file. When nested
-inside of a block, it is only in effect until the end of that block. With a
-block, you can thus restrict the effect of a rule to a particular segment of
-your document. Below, we use a content block to scope the list styling to one
-particular list.
-
-```example
-This list is affected: #[
- #set list(marker: [--])
- - Dash
-]
-
-This one is not:
-- Bullet
-```
-
-Sometimes, you'll want to apply a set rule conditionally. For this, you can use
-a _set-if_ rule.
-
-```example
-#let task(body, critical: false) = {
- set text(red) if critical
- [- #body]
-}
-
-#task(critical: true)[Food today?]
-#task(critical: false)[Work deadline]
-```
-
-## Show rules { #show-rules }
-With show rules, you can deeply customize the look of a type of element. The
-most basic form of show rule is a _show-set rule._ Such a rule is written as the
-`{show}` keyword followed by a [selector]($type/selector), a colon and then a set rule. The most basic form of selector is an
-[element function]($type/function/#element-functions). This lets the set rule
-only apply to the selected element. In the example below, headings become dark
-blue while all other text stays black.
-
-```example
-#show heading: set text(navy)
-
-= This is navy-blue
-But this stays black.
-```
-
-With show-set rules you can mix and match properties from different functions to
-achieve many different effects. But they still limit you to what is predefined
-in Typst. For maximum flexibility, you can instead write a show rule that
-defines how to format an element from scratch. To write such a show rule,
-replace the set rule behind the colon with an arbitrary
-[function]($type/function). This function receives the element in question and
-can return arbitrary content. Different
-[fields]($scripting/#fields) are available on the element passed
-to the function. Below, we define a show rule that formats headings for a
-fantasy encyclopedia.
-
-```example
-#set heading(numbering: "(I)")
-#show heading: it => block[
- #set align(center)
- #set text(font: "Inria Serif")
- \~ #emph(it.body)
- #counter(heading).display() \~
-]
-
-= Dragon
-With a base health of 15, the
-dragon is the most powerful
-creature.
-
-= Manticore
-While less powerful than the
-dragon, the manticore gets
-extra style points.
-```
-
-Like set rules, show rules are in effect until the end of the current block or
-file.
-
-Instead of a function, the right-hand side of a show rule can also take a
-literal string or content block that should be directly substituted for the
-element. And apart from a function, the left-hand side of a show rule can also
-take a number of other _selectors_ that define what to apply the transformation
-to:
-
-- **Everything:** `{show: rest => ..}` \
- Transform everything after the show rule. This is useful to apply a more
- complex layout to your whole document without wrapping everything in a giant
- function call.
-
-- **Text:** `{show "Text": ..}` \
- Style, transform or replace text.
-
-- **Regex:** `{show regex("\w+"): ..}` \
- Select and transform text with a regular expression for even more flexibility.
- See the documentation of the [`regex` function]($func/regex) for details.
-
-- **Function with fields:** `{show heading.where(level: 1): ..}` \
- Transform only elements that have the specified fields. For example, you might
- want to only change the style of level-1 headings.
-
-- **Label:** `{show <intro>: ..}` \
- Select and transform elements that have the specified label.
- See the documentation of the [`label` function]($func/label) for more details.
-
-```example
-#show "Project": smallcaps
-#show "badly": "great"
-
-We started Project in 2019
-and are still working on it.
-Project is progressing badly.
-```
diff --git a/docs/src/reference/syntax.md b/docs/src/reference/syntax.md
deleted file mode 100644
index d0cd80d7..00000000
--- a/docs/src/reference/syntax.md
+++ /dev/null
@@ -1,138 +0,0 @@
----
-description: |
- A compact reference for Typst's syntax. Learn more about the language within
- markup, math, and code mode.
----
-
-# Syntax
-Typst is a markup language. This means that you can use simple syntax to
-accomplish common layout tasks. The lightweight markup syntax is complemented by
-set and show rules, which let you style your document easily and automatically.
-All this is backed by a tightly integrated scripting language with built-in and
-user-defined functions.
-
-## Markup { #markup }
-Typst provides built-in markup for the most common document elements. Most of
-the syntax elements are just shortcuts for a corresponding function. The table
-below lists all markup that is available and links to the best place to learn
-more about their syntax and usage.
-
-| Name | Example | See |
-| ------------------ | ------------------------ | ---------------------------- |
-| Paragraph break | Blank line | [`parbreak`]($func/parbreak) |
-| Strong emphasis | `[*strong*]` | [`strong`]($func/strong) |
-| Emphasis | `[_emphasis_]` | [`emph`]($func/emph) |
-| Raw text | ``[`print(1)`]`` | [`raw`]($func/raw) |
-| Link | `[https://typst.app/]` | [`link`]($func/link) |
-| Label | `[<intro>]` | [`label`]($func/label) |
-| Reference | `[@intro]` | [`ref`]($func/ref) |
-| Heading | `[= Heading]` | [`heading`]($func/heading) |
-| Bullet list | `[- item]` | [`list`]($func/list) |
-| Numbered list | `[+ item]` | [`enum`]($func/enum) |
-| Term list | `[/ Term: description]` | [`terms`]($func/terms) |
-| Math | `[$x^2$]` | [Math]($category/math) |
-| Line break | `[\]` | [`linebreak`]($func/linebreak) |
-| Smart quote | `['single' or "double"]` | [`smartquote`]($func/smartquote) |
-| Symbol shorthand | `[~, ---]` | [Symbols]($category/symbols/sym) |
-| Code expression | `[#rect(width: 1cm)]` | [Scripting]($scripting/#expressions) |
-| Character escape | `[Tweet at us \#ad]` | [Below](#escapes) |
-| Comment | `[/* block */, // line]` | [Below](#comments) |
-
-## Math mode { #math }
-Math mode is a special markup mode that is used to typeset mathematical
-formulas. It is entered by wrapping an equation in `[$]` characters. The
-equation will be typeset into its own block if it starts and ends with at least
-one space (e.g. `[$ x^2 $]`). Inline math can be produced by omitting the
-whitespace (e.g. `[$x^2$]`). An overview over the syntax specific to math mode
-follows:
-
-| Name | Example | See |
-| ---------------------- | ------------------------ | ------------------------ |
-| Inline math | `[$x^2$]` | [Math]($category/math) |
-| Block-level math | `[$ x^2 $]` | [Math]($category/math) |
-| Bottom attachment | `[$x_1$]` | [`attach`]($category/math/attach) |
-| Top attachment | `[$x^2$]` | [`attach`]($category/math/attach) |
-| Fraction | `[$1 + (a+b)/5$]` | [`frac`]($func/math.frac) |
-| Line break | `[$x \ y$]` | [`linebreak`]($func/linebreak) |
-| Alignment point | `[$x &= 2 \ &= 3$]` | [Math]($category/math) |
-| Variable access | `[$#x$, $pi$]` | [Math]($category/math) |
-| Field access | `[$arrow.r.long$]` | [Scripting]($scripting/#fields) |
-| Implied multiplication | `[$x y$]` | [Math]($category/math) |
-| Symbol shorthand | `[$->, !=$]` | [Symbols]($category/symbols/sym) |
-| Text/string in math | `[$a "is natural"$]` | [Math]($category/math) |
-| Math function call | `[$floor(x)$]` | [Math]($category/math) |
-| Code expression | `[$#rect(width: 1cm)$]` | [Scripting]($scripting/#expressions) |
-| Character escape | `[$x\^2$]` | [Below](#escapes) |
-| Comment | `[$/* comment */$]` | [Below](#comments) |
-
-## Code mode { #code }
-Within code blocks and expressions, new expressions can start without a leading
-`#` character. Many syntactic elements are specific to expressions. Below is
-a table listing all syntax that is available in code mode:
-
-| Name | Example | See |
-| ------------------------ | ----------------------------- | ---------------------------------- |
-| Variable access | `{x}` | [Scripting]($scripting/#blocks) |
-| Any literal | `{1pt, "hey"}` | [Types]($types) |
-| Code block | `{{ let x = 1; x + 2 }}` | [Scripting]($scripting/#blocks) |
-| Content block | `{[*Hello*]}` | [Scripting]($scripting/#blocks) |
-| Parenthesized expression | `{(1 + 2)}` | [Scripting]($scripting/#blocks) |
-| Array | `{(1, 2, 3)}` | [Array]($type/array) |
-| Dictionary | `{(a: "hi", b: 2)}` | [Dictionary]($type/dictionary) |
-| Unary operator | `{-x}` | [Scripting]($scripting/#operators) |
-| Binary operator | `{x + y}` | [Scripting]($scripting/#operators) |
-| Assignment | `{x = 1}` | [Scripting]($scripting/#operators) |
-| Field access | `{x.y}` | [Scripting]($scripting/#fields) |
-| Method call | `{x.flatten()}` | [Scripting]($scripting/#methods) |
-| Function call | `{min(x, y)}` | [Function]($type/function) |
-| Unnamed function | `{(x, y) => x + y}` | [Function]($type/function) |
-| Let binding | `{let x = 1}` | [Scripting]($scripting/#bindings) |
-| Named function | `{let f(x) = 2 * x}` | [Function]($type/function) |
-| Set rule | `{set text(14pt)}` | [Styling]($styling/#set-rules) |
-| Set-if rule | `{set text(..) if .. }` | [Styling]($styling/#set-rules) |
-| Show-set rule | `{show par: set block(..)}` | [Styling]($styling/#show-rules) |
-| Show rule with function | `{show raw: it => {..}}` | [Styling]($styling/#show-rules) |
-| Show-everything rule | `{show: columns.with(2)}` | [Styling]($styling/#show-rules) |
-| Conditional | `{if x == 1 {..} else {..}}` | [Scripting]($scripting/#conditionals) |
-| For loop | `{for x in (1, 2, 3) {..}}` | [Scripting]($scripting/#loops) |
-| While loop | `{while x < 10 {..}}` | [Scripting]($scripting/#loops) |
-| Loop control flow | `{break, continue}` | [Scripting]($scripting/#loops) |
-| Return from function | `{return x}` | [Function]($type/function) |
-| Include module | `{include "bar.typ"}` | [Scripting]($scripting/#modules) |
-| Import module | `{import "bar.typ"}` | [Scripting]($scripting/#modules) |
-| Import items from module | `{import "bar.typ": a, b, c}` | [Scripting]($scripting/#modules) |
-| Comment | `[/* block */, // line]` | [Below](#comments) |
-
-## Comments { #comments }
-Comments are ignored by Typst and will not be included in the output. This
-is useful to exclude old versions or to add annotations.
-To comment out a single line, start it with `//`:
-```example
-// our data barely supports
-// this claim
-
-We show with $p < 0.05$
-that the difference is
-significant.
-```
-
-Comments can also be wrapped between `/*` and `*/`. In this case, the comment
-can span over multiple lines:
-```example
-Our study design is as follows:
-/* Somebody write this up:
- - 1000 participants.
- - 2x2 data design. */
-```
-
-## Escape sequences { #escapes }
-Escape sequences are used to insert special characters that are hard to type or
-otherwise have special meaning in Typst. To escape a character, precede it with
-a backslash. To insert any Unicode codepoint, you can write a hexadecimal
-escape sequence: `[\u{1f600}]`. The same kind of escape sequences also work in
-[strings]($type/string).
-
-```example
-I got an ice cream for
-\$1.50! \u{1f600}
-```
diff --git a/docs/src/reference/types.md b/docs/src/reference/types.md
deleted file mode 100644
index 3e08d670..00000000
--- a/docs/src/reference/types.md
+++ /dev/null
@@ -1,1190 +0,0 @@
-# None
-A value that indicates the absence of any other value.
-
-The none type has exactly one value: `{none}`.
-
-When inserted into the document, it is not visible.
-This is also the value that is produced by empty code blocks.
-It can be [joined]($scripting/#blocks) with any value, yielding
-the other value.
-
-## Example
-```example
-Not visible: #none
-```
-
-# Auto
-A value that indicates a smart default.
-
-The auto type has exactly one value: `{auto}`.
-
-Parameters that support the `{auto}` value have some smart default or contextual
-behaviour. A good example is the [text direction]($func/text.dir) parameter.
-Setting it to `{auto}` lets Typst automatically determine the direction from the
-[text language]($func/text.lang).
-
-# Boolean
-Either `{true}` or `{false}`.
-
-The boolean type has two values: `{true}` and `{false}`. It denotes whether
-something is active or enabled.
-
-## Example
-```example
-#false \
-#true \
-#(1 < 2)
-```
-
-# Integer
-A whole number.
-
-The number can be negative, zero, or positive. As Typst uses 64 bits to store
-integers, integers cannot be smaller than `{-9223372036854775808}` or larger than
-`{9223372036854775807}`.
-
-The number can also be specified as hexadecimal, octal, or binary by starting it
-with a zero followed by either `x`, `o`, or `b`.
-
-## Example
-```example
-#(1 + 2) \
-#(2 - 5) \
-#(3 + 4 < 8)
-
-#0xff \
-#0o10 \
-#0b1001
-```
-
-# Float
-A floating-pointer number.
-
-A limited-precision representation of a real number. Typst uses 64 bits to
-store floats. Wherever a float is expected, you can also pass an
-[integer]($type/integer).
-
-## Example
-```example
-#3.14 \
-#1e4 \
-#(10 / 4)
-```
-
-# Length
-A size or distance, possibly expressed with contextual units.
-Typst supports the following length units:
-
-- Points: `{72pt}`
-- Millimeters: `{254mm}`
-- Centimeters: `{2.54cm}`
-- Inches: `{1in}`
-- Relative to font size: `{2.5em}`
-
-## Example
-```example
-#rect(width: 20pt)
-#rect(width: 2em)
-#rect(width: 1in)
-```
-
-# Angle
-An angle describing a rotation.
-Typst supports the following angular units:
-
-- Degrees: `{180deg}`
-- Radians: `{3.14rad}`
-
-## Example
-```example
-#rotate(10deg)[Hello there!]
-```
-
-# Ratio
-A ratio of a whole.
-
-Written as a number, followed by a percent sign.
-
-## Example
-```example
-#set align(center)
-#scale(x: 150%)[
- Scaled apart.
-]
-```
-
-# Relative Length
-A length in relation to some known length.
-
-This type is a combination of a [length]($type/length) with a
-[ratio]($type/ratio). It results from addition and subtraction
-of a length and a ratio. Wherever a relative length is expected, you can also
-use a bare length or ratio.
-
-## Example
-```example
-#rect(width: 100% - 50pt)
-```
-
-# Fraction
-Defines how the the remaining space in a layout is distributed.
-
-Each fractionally sized element gets space based on the ratio of its fraction to
-the sum of all fractions.
-
-For more details, also see the [h]($func/h) and [v]($func/v) functions and the
-[grid function]($func/grid).
-
-## Example
-```example
-Left #h(1fr) Left-ish #h(2fr) Right
-```
-
-# Color
-A color in a specific color space.
-
-Typst supports:
-- sRGB through the [`rgb` function]($func/rgb)
-- Device CMYK through [`cmyk` function]($func/cmyk)
-- D65 Gray through the [`luma` function]($func/luma)
-
-Furthermore, Typst provides the following built-in colors:
-
-`black`, `gray`, `silver`, `white`, `navy`, `blue`, `aqua`, `teal`, `eastern`,
-`purple`, `fuchsia`, `maroon`, `red`, `orange`, `yellow`, `olive`, `green`, and
-`lime`.
-
-## Methods
-### lighten()
-Lightens a color.
-
-- amount: ratio (positional, required)
- The factor to lighten the color by.
-- returns: color
-
-### darken()
-Darkens a color.
-
-- amount: ratio (positional, required)
- The factor to darken the color by.
-- returns: color
-
-### negate()
-Produces the negative of the color.
-
-- returns: color
-
-# Datetime
-Represents a date, a time, or a combination of both. Can be created by either
-specifying a custom datetime using the [`datetime`]($func/datetime) function or
-getting the current date with [`datetime.today`]($func/datetime.today).
-
-## Example
-```example
-#let date = datetime(
- year: 2020,
- month: 10,
- day: 4,
-)
-
-#date.display() \
-#date.display(
- "y:[year repr:last_two]"
-)
-
-#let time = datetime(
- hour: 18,
- minute: 2,
- second: 23,
-)
-
-#time.display() \
-#time.display(
- "h:[hour repr:12][period]"
-)
-```
-
-## Format
-You can specify a customized formatting using the
-[`display`]($type/datetime.display) method. The format of a datetime is
-specified by providing _components_ with a specified number of _modifiers_. A
-component represents a certain part of the datetime that you want to display,
-and with the help of modifiers you can define how you want to display that
-component. In order to display a component, you wrap the name of the component
-in square brackets (e.g. `[[year]]` will display the year). In order to add
-modifiers, you add a space after the component name followed by the name of the
-modifier, a colon and the value of the modifier (e.g. `[[month repr:short]]`
-will display the short representation of the month).
-
-The possible combination of components and their respective modifiers is as
-follows:
-
-* `year`: Displays the year of the datetime.
- * `padding`: Can be either `zero`, `space` or `none`. Specifies how the year
- is padded.
- * `repr` Can be either `full` in which case the full year is displayed or
- `last_two` in which case only the last two digits are displayed.
- * `sign`: Can be either `automatic` or `mandatory`. Specifies when the sign
- should be displayed.
-* `month`: Displays the month of the datetime.
- * `padding`: Can be either `zero`, `space` or `none`. Specifies how the month
- is padded.
- * `repr`: Can be either `numerical`, `long` or `short`. Specifies if the month
- should be displayed as a number or a word. Unfortunately, when choosing the
- word representation, it can currently only display the English version. In
- the future, it is planned to support localization.
-* `day`: Displays the day of the datetime.
- * `padding`: Can be either `zero`, `space` or `none`. Specifies how the day
- is padded.
-* `week_number`: Displays the week number of the datetime.
- * `padding`: Can be either `zero`, `space` or `none`. Specifies how the week
- number is padded.
- * `repr`: Can be either `ISO`, `sunday` or `monday`. In the case of `ISO`,
- week numbers are between 1 and 53, while the other ones are between 0
- and 53.
-* `weekday`: Displays the weekday of the date.
- * `repr` Can be either `long`, `short`, `sunday` or `monday`. In the case of
- `long` and `short`, the corresponding English name will be displayed (same
- as for the month, other languages are currently not supported). In the case
- of `sunday` and `monday`, the numerical value will be displayed (assuming
- Sunday and Monday as the first day of the week, respectively).
- * `one_indexed`: Can be either `true` or `false`. Defines whether the
- numerical representation of the week starts with 0 or 1.
-* `hour`: Displays the hour of the date.
- * `padding`: Can be either `zero`, `space` or `none`. Specifies how the hour
- is padded.
- * `repr`: Can be either `24` or `12`. Changes whether the hour is displayed in
- the 24-hour or 12-hour format.
-* `period`: The AM/PM part of the hour
- * `case`: Can be `lower` to display it in lower case and `upper` to display it
- in upper case.
-* `minute`: Displays the minute of the date.
- * `padding`: Can be either `zero`, `space` or `none`. Specifies how the minute
- is padded.
-* `second`: Displays the second of the date.
- * `padding`: Can be either `zero`, `space` or `none`. Specifies how the second
- is padded.
-
-Keep in mind that not always all components can be used. For example, if
-you create a new datetime with `{datetime(year: 2023, month: 10, day: 13)}`, it
-will be stored as a plain date internally, meaning that you cannot use
-components such as `hour` or `minute`, which would only work on datetimes
-that have a specified time.
-
-## Methods
-### display()
-Displays the datetime in a certain way. Depending on whether you have defined
-just a date, a time or both, the default format will be different.
-If you specified a date, it will be `[[year]-[month]-[day]]`. If you specified a
-time, it will be `[[hour]:[minute]:[second]]`. In the case of a datetime, it
-will be `[[year]-[month]-[day] [hour]:[minute]:[second]]`.
-
-- pattern: string (positional)
- The format used to display the datetime.
-- returns: string
-
-### year()
-Returns the year of the datetime, if it exists. Otherwise, it returns `{none}`.
-
-- returns: integer or none
-
-### month()
-Returns the month of the datetime, if it exists. Otherwise, it returns `{none}`.
-
-- returns: integer or none
-
-### weekday()
-Returns the weekday of the datetime as a number starting with 1 from Monday, if
-it exists. Otherwise, it returns `{none}`.
-
-- returns: integer or none
-
-### day()
-Returns the day of the datetime, if it exists. Otherwise, it returns `{none}`.
-
-- returns: integer or none
-
-### hour()
-Returns the hour of the datetime, if it exists. Otherwise, it returns `{none}`.
-
-- returns: integer or none
-
-### minute()
-Returns the minute of the datetime, if it exists. Otherwise, it returns
-`{none}`.
-
-- returns: integer or none
-
-### second()
-Returns the second of the datetime, if it exists. Otherwise, it returns
-`{none}`.
-
-- returns: integer or none
-
-# Symbol
-A Unicode symbol.
-
-Typst defines common symbols so that they can easily be written with standard
-keyboards. The symbols are defined in modules, from which they can be accessed
-using [field access notation]($scripting/#fields):
-
-- General symbols are defined in the [`sym` module]($category/symbols/sym)
-- Emoji are defined in the [`emoji` module]($category/symbols/emoji)
-
-Moreover, you can define custom symbols with the [symbol]($func/symbol)
-function.
-
-```example
-#sym.arrow.r \
-#sym.gt.eq.not \
-$gt.eq.not$ \
-#emoji.face.halo
-```
-
-Many symbols have different variants, which can be selected by appending the
-modifiers with dot notation. The order of the modifiers is not relevant. Visit
-the documentation pages of the symbol modules and click on a symbol to see its
-available variants.
-
-```example
-$arrow.l$ \
-$arrow.r$ \
-$arrow.t.quad$
-```
-
-# String
-A sequence of Unicode codepoints.
-
-You can iterate over the grapheme clusters of the string using a
-[for loop]($scripting/#loops). Grapheme clusters are basically characters but
-keep together things that belong together, e.g. multiple codepoints that
-together form a flag emoji. Strings can be added with the `+` operator,
-[joined together]($scripting/#blocks) and multiplied with integers.
-
-Typst provides utility methods for string manipulation. Many of these methods
-(e.g., `split`, `trim` and `replace`) operate on _patterns:_ A pattern can be
-either a string or a [regular expression]($func/regex). This makes the methods
-quite versatile.
-
-All lengths and indices are expressed in terms of UTF-8 characters. Indices are
-zero-based and negative indices wrap around to the end of the string.
-
-### Example
-```example
-#"hello world!" \
-#"\"hello\n world\"!" \
-#"1 2 3".split() \
-#"1,2;3".split(regex("[,;]")) \
-#(regex("\d+") in "ten euros") \
-#(regex("\d+") in "10 euros")
-```
-
-### Escape sequences
-Just like in markup, you can escape a few symbols in strings:
-- `[\\]` for a backslash
-- `[\"]` for a quote
-- `[\n]` for a newline
-- `[\r]` for a carriage return
-- `[\t]` for a tab
-- `[\u{1f600}]` for a hexadecimal Unicode escape sequence
-
-## Methods
-### len()
-The length of the string in UTF-8 encoded bytes.
-
-- returns: integer
-
-### first()
-Extract the first grapheme cluster of the string.
-Fails with an error if the string is empty.
-
-- returns: any
-
-### last()
-Extract the last grapheme cluster of the string.
-Fails with an error if the string is empty.
-
-- returns: any
-
-### at()
-Extract the first grapheme cluster after the specified index. Returns the
-default value if the index is out of bounds or fails with an error if no default
-value was specified.
-
-- index: integer (positional, required)
- The byte index.
-- default: any (named)
- A default value to return if the index is out of bounds.
-- returns: string
-
-### slice()
-Extract a substring of the string.
-Fails with an error if the start or end index is out of bounds.
-
-- start: integer (positional, required)
- The start byte index (inclusive).
-- end: integer (positional)
- The end byte index (exclusive). If omitted, the whole slice until the end of the
- string is extracted.
-- count: integer (named)
- The number of bytes to extract. This is equivalent to passing `start + count`
- as the `end` position. Mutually exclusive with `end`.
-- returns: string
-
-### clusters()
-Returns the grapheme clusters of the string as an array of substrings.
-
-- returns: array
-
-### codepoints()
-Returns the Unicode codepoints of the string as an array of substrings.
-
-- returns: array
-
-### contains()
-Whether the string contains the specified pattern.
-
-This method also has dedicated syntax: You can write `{"bc" in "abcd"}` instead
-of `{"abcd".contains("bc")}`.
-
-- pattern: string or regex (positional, required)
- The pattern to search for.
-- returns: boolean
-
-### starts-with()
-Whether the string starts with the specified pattern.
-
-- pattern: string or regex (positional, required)
- The pattern the string might start with.
-- returns: boolean
-
-### ends-with()
-Whether the string ends with the specified pattern.
-
-- pattern: string or regex (positional, required)
- The pattern the string might end with.
-- returns: boolean
-
-### find()
-Searches for the specified pattern in the string and returns the first match
-as a string or `{none}` if there is no match.
-
-- pattern: string or regex (positional, required)
- The pattern to search for.
-- returns: string or none
-
-### position()
-Searches for the specified pattern in the string and returns the index of the
-first match as an integer or `{none}` if there is no match.
-
-- pattern: string or regex (positional, required)
- The pattern to search for.
-- returns: integer or none
-
-### match()
-Searches for the specified pattern in the string and returns a dictionary
-with details about the first match or `{none}` if there is no match.
-
-The returned dictionary has the following keys:
-* `start`: The start offset of the match
-* `end`: The end offset of the match
-* `text`: The text that matched.
-* `captures`: An array containing a string for each matched capturing group. The
- first item of the array contains the first matched capturing, not the whole
- match! This is empty unless the `pattern` was a regex with capturing groups.
-
-- pattern: string or regex (positional, required)
- The pattern to search for.
-- returns: dictionary or none
-
-### matches()
-Searches for the specified pattern in the string and returns an array of
-dictionaries with details about all matches. For details about the returned
-dictionaries, see above.
-
-- pattern: string or regex (positional, required)
- The pattern to search for.
-- returns: array
-
-### replace()
-Replaces all or a specified number of matches of a pattern with a replacement
-string and returns the resulting string.
-
-- pattern: string or regex (positional, required)
- The pattern to search for.
-- replacement: string or function (positional, required)
- The string to replace the matches with or a function that gets a dictionary for each match and can return individual replacement strings.
-- count: integer (named)
- If given, only the first `count` matches of the pattern are placed.
-- returns: string
-
-### trim()
-Removes matches of a pattern from one or both sides of the string, once or
-repeatedly and returns the resulting string.
-
-- pattern: string or regex (positional, required)
- The pattern to search for.
-- at: alignment (named)
- Can be `start` or `end` to only trim the start or end of the string.
- If omitted, both sides are trimmed.
-- repeat: boolean (named)
- Whether to repeatedly removes matches of the pattern or just once.
- Defaults to `{true}`.
-- returns: string
-
-### split()
-Splits a string at matches of a specified pattern and returns an array of
-the resulting parts.
-
-- pattern: string or regex (positional)
- The pattern to split at. Defaults to whitespace.
-- returns: array
-
-# Content
-A piece of document content.
-
-This type is at the heart of Typst. All markup you write and most
-[functions]($type/function) you call produce content values. You can create a
-content value by enclosing markup in square brackets. This is also how you pass
-content to functions.
-
-```example
-Type of *Hello!* is
-#type([*Hello!*])
-```
-
-Content can be added with the `+` operator,
-[joined together]($scripting/#blocks) and multiplied with
-integers. Wherever content is expected, you can also pass a
-[string]($type/string) or `{none}`.
-
-## Representation
-Content consists of elements with fields. When constructing an element with
-its _element function,_ you provide these fields as arguments and when you have
-a content value, you can access its fields with
-[field access syntax]($scripting/#field-access).
-
-Some fields are required: These must be provided when constructing an element
-and as a consequence, they are always available through field access on content
-of that type. Required fields are marked as such in the documentation.
-
-Most fields are optional: Like required fields, they can be passed to the
-element function to configure them for a single element. However, these can also
-be configured with [set rules]($styling/#set-rules) to apply them to all
-elements within a scope. Optional fields are only available with field access
-syntax when they are were explicitly passed to the element function, not when
-they result from a set rule.
-
-Each element has a default appearance. However, you can also completely
-customize its appearance with a [show rule]($styling/#show-rules). The show rule
-is passed the element. It can access the element's field and produce arbitrary
-content from it.
-
-In the web app, you can hover over a content variable to see exactly which
-elements the content is composed of and what fields they have. Alternatively,
-you can inspect the output of the [`repr`]($func/repr) function.
-
-## Methods
-### func()
-The content's element function. This function can be used to create the element
-contained in this content. It can be used in set and show rules for the element.
-Can be compared with global functions to check whether you have a specific
-kind of element.
-
-- returns: function
-
-### has()
-Whether the content has the specified field.
-
-- field: string (positional, required)
- The field to look for.
-- returns: boolean
-
-### at()
-Access the specified field on the content. Returns the default value if the
-field does not exist or fails with an error if no default value was specified.
-
-- field: string (positional, required)
- The field to access.
-- default: any (named)
- A default value to return if the field does not exist.
-- returns: any
-
-### fields()
-Return the fields of this content.
-
-```example
-#rect(
- width: 10cm,
- height: 10cm,
-).fields()
-```
-
-### location()
-The location of the content. This is only available on content returned by
-[query]($func/query), for other content it will fail with an error. The
-resulting location can be used with [counters]($func/counter),
-[state]($func/state) and [queries]($func/query).
-
-- returns: location
-
-# Array
-A sequence of values.
-
-You can construct an array by enclosing a comma-separated sequence of values
-in parentheses. The values do not have to be of the same type.
-
-You can access and update array items with the `.at()` method. Indices are
-zero-based and negative indices wrap around to the end of the array. You can
-iterate over an array using a [for loop]($scripting/#loops).
-Arrays can be added together with the `+` operator,
-[joined together]($scripting/#blocks) and multiplied with
-integers.
-
-**Note:** An array of length one needs a trailing comma, as in `{(1,)}`. This is
-to disambiguate from a simple parenthesized expressions like `{(1 + 2) * 3}`.
-An empty array is written as `{()}`.
-
-## Example
-```example
-#let values = (1, 7, 4, -3, 2)
-
-#values.at(0) \
-#(values.at(0) = 3)
-#values.at(-1) \
-#values.find(calc.even) \
-#values.filter(calc.odd) \
-#values.map(calc.abs) \
-#values.rev() \
-#(1, (2, 3)).flatten() \
-#(("A", "B", "C")
- .join(", ", last: " and "))
-```
-
-## Methods
-### len()
-The number of values in the array.
-
-- returns: integer
-
-### first()
-Returns the first item in the array.
-May be used on the left-hand side of an assignment.
-Fails with an error if the array is empty.
-
-- returns: any
-
-### last()
-Returns the last item in the array.
-May be used on the left-hand side of an assignment.
-Fails with an error if the array is empty.
-
-- returns: any
-
-### at()
-Returns the item at the specified index in the array. May be used on the
-left-hand side of an assignment. Returns the default value if the index is out
-of bounds or fails with an error if no default value was specified.
-
-- index: integer (positional, required)
- The index at which to retrieve the item.
-- default: any (named)
- A default value to return if the index is out of bounds.
-- returns: any
-
-### push()
-Add a value to the end of the array.
-
-- value: any (positional, required)
- The value to insert at the end of the array.
-
-### pop()
-Remove the last item from the array and return it.
-Fails with an error if the array is empty.
-
-- returns: any
- The removed last value.
-
-### insert()
-Insert a value into the array at the specified index.
-Fails with an error if the index is out of bounds.
-
-- index: integer (positional, required)
- The index at which to insert the item.
-- value: any (positional, required)
- The value to insert into the array.
-
-### remove()
-Remove the value at the specified index from the array and return it.
-
-- index: integer (positional, required)
- The index at which to remove the item.
-- returns: any
-
-### slice()
-Extract a subslice of the array.
-Fails with an error if the start or index is out of bounds.
-
-- start: integer (positional, required)
- The start index (inclusive).
-- end: integer (positional)
- The end index (exclusive). If omitted, the whole slice until the end of the
- array is extracted.
-- count: integer (named)
- The number of items to extract. This is equivalent to passing `start +
- count` as the `end` position. Mutually exclusive with `end`.
-- returns: array
-
-### contains()
-Whether the array contains the specified value.
-
-This method also has dedicated syntax: You can write `{2 in (1, 2, 3)}` instead
-of `{(1, 2, 3).contains(2)}`.
-
-- value: any (positional, required)
- The value to search for.
-- returns: boolean
-
-### find()
-Searches for an item for which the given function returns `{true}` and
-returns the first match or `{none}` if there is no match.
-
-- searcher: function (positional, required)
- The function to apply to each item. Must return a boolean.
-- returns: any or none
-
-### position()
-Searches for an item for which the given function returns `{true}` and
-returns the index of the first match or `{none}` if there is no match.
-
-- searcher: function (positional, required)
- The function to apply to each item. Must return a boolean.
-- returns: integer or none
-
-### filter()
-Produces a new array with only the items from the original one for which the
-given function returns true.
-
-- test: function (positional, required)
- The function to apply to each item. Must return a boolean.
-- returns: array
-
-### map()
-Produces a new array in which all items from the original one were
-transformed with the given function.
-
-- mapper: function (positional, required)
- The function to apply to each item.
-- returns: array
-
-### enumerate()
-Returns a new array with the values alongside their indices.
-
-The returned array consists of `(index, value)` pairs in the form of length-2
-arrays. These can be [destructured]($scripting/#bindings) with a let binding or
-for loop.
-
-- returns: array
-
-### zip()
-Zips the array with another array. If the two arrays are of unequal length, it
-will only zip up until the last element of the smaller array and the remaining
-elements will be ignored. The return value is an array where each element is yet
-another array of size 2.
-
-- other: array (positional, required)
- The other array which should be zipped with the current one.
-- returns: array
-
-### fold()
-Folds all items into a single value using an accumulator function.
-
-- init: any (positional, required)
- The initial value to start with.
-- folder: function (positional, required)
- The folding function. Must have two parameters: One for the accumulated value
- and one for an item.
-- returns: any
-
-### sum()
-Sums all items (works for any types that can be added).
-
-- default: any (named)
- What to return if the array is empty. Must be set if the array can be empty.
-- returns: any
-
-### product()
-Calculates the product all items (works for any types that can be multiplied)
-
-- default: any (named)
- What to return if the array is empty. Must be set if the array can be empty.
-- returns: any
-
-### any()
-Whether the given function returns `{true}` for any item in the array.
-
-- test: function (positional, required)
- The function to apply to each item. Must return a boolean.
-- returns: boolean
-
-### all()
-Whether the given function returns `{true}` for all items in the array.
-
-- test: function (positional, required)
- The function to apply to each item. Must return a boolean.
-- returns: boolean
-
-### flatten()
-Combine all nested arrays into a single flat one.
-
-- returns: array
-
-### rev()
-Return a new array with the same items, but in reverse order.
-
-- returns: array
-
-### join()
-Combine all items in the array into one.
-
-- separator: any (positional)
- A value to insert between each item of the array.
-- last: any (named)
- An alternative separator between the last two items
-- returns: any
-
-### sorted()
-Return a new array with the same items, but sorted.
-
-- key: function (named)
- If given, applies this function to the elements in the array to determine the keys to sort by.
-- returns: array
-
-# Dictionary
-A map from string keys to values.
-
-You can construct a dictionary by enclosing comma-separated `key: value` pairs
-in parentheses. The values do not have to be of the same type. Since empty
-parentheses already yield an empty array, you have to use the special `(:)`
-syntax to create an empty dictionary.
-
-A dictionary is conceptually similar to an array, but it is indexed by strings
-instead of integers. You can access and create dictionary entries with the
-`.at()` method. If you know the key statically, you can alternatively use
-[field access notation]($scripting/#fields) (`.key`) to access
-the value. Dictionaries can be added with the `+` operator and
-[joined together]($scripting/#blocks).
-To check whether a key is present in the dictionary, use the `in` keyword.
-
-You can iterate over the pairs in a dictionary using a
-[for loop]($scripting/#loops). This will iterate in the order the pairs were
-inserted / declared.
-
-## Example
-```example
-#let dict = (
- name: "Typst",
- born: 2019,
-)
-
-#dict.name \
-#(dict.launch = 20)
-#dict.len() \
-#dict.keys() \
-#dict.values() \
-#dict.at("born") \
-#dict.insert("city", "Berlin ")
-#("name" in dict)
-```
-
-## Methods
-### len()
-The number of pairs in the dictionary.
-
-- returns: integer
-
-### at()
-Returns the value associated with the specified key in the dictionary. May be
-used on the left-hand side of an assignment if the key is already present in the
-dictionary. Returns the default value if the key is not part of the dictionary
-or fails with an error if no default value was specified.
-
-- key: string (positional, required)
- The key at which to retrieve the item.
-- default: any (named)
- A default value to return if the key is not part of the dictionary.
-- returns: any
-
-### insert()
-Insert a new pair into the dictionary and return the value.
-If the dictionary already contains this key, the value is updated.
-
-- key: string (positional, required)
- The key of the pair that should be inserted.
-- value: any (positional, required)
- The value of the pair that should be inserted.
-
-### keys()
-Returns the keys of the dictionary as an array in insertion order.
-
-- returns: array
-
-### values()
-Returns the values of the dictionary as an array in insertion order.
-
-- returns: array
-
-### pairs()
-Returns the keys and values of the dictionary as an array of pairs. Each pair is
-represented as an array of length two.
-
-- returns: array
-
-### remove()
-Remove a pair from the dictionary by key and return the value.
-
-- key: string (positional, required)
- The key of the pair that should be removed.
-- returns: any
-
-# Function
-A mapping from argument values to a return value.
-
-You can call a function by writing a comma-separated list of function
-_arguments_ enclosed in parentheses directly after the function name.
-Additionally, you can pass any number of trailing content blocks arguments to a
-function _after_ the normal argument list. If the normal argument list would
-become empty, it can be omitted. Typst supports positional and named arguments.
-The former are identified by position and type, while the later are written as
-`name: value`.
-
-Within math mode, function calls have special behaviour. See the
-[math documentation]($category/math) for more details.
-
-### Example
-```example
-// Call a function.
-#list([A], [B])
-
-// Named arguments and trailing
-// content blocks.
-#enum(start: 2)[A][B]
-
-// Version without parentheses.
-#list[A][B]
-```
-
-Functions are a fundamental building block of Typst. Typst provides functions
-for a variety of typesetting tasks. Moreover, the markup you write is backed by
-functions and all styling happens through functions. This reference lists all
-available functions and how you can use them. Please also refer to the
-documentation about [set]($styling/#set-rules) and
-[show]($styling/#show-rules) rules to learn about additional ways
-you can work with functions in Typst.
-
-### Element functions { #element-functions }
-Some functions are associated with _elements_ like [headings]($func/heading) or
-[tables]($func/table). When called, these create an element of their respective
-kind. In contrast to normal functions, they can further be used in
-[set rules]($styling/#set-rules), [show rules]($styling/#show-rules), and
-[selectors]($type/selector).
-
-### Function scopes { #function-scopes }
-Functions can hold related definitions in their own scope, similar to a
-[module]($scripting/#modules). Examples of this are
-[`assert.eq`]($func/assert.eq) or [`list.item`]($func/list.item). However, this
-feature is currently only available for built-in functions.
-
-### Defining functions { #definitions }
-You can define your own function with a
-[let binding]($scripting/#bindings) that has a parameter list after
-the binding's name. The parameter list can contain positional parameters,
-named parameters with default values and
-[argument sinks]($type/arguments).
-The right-hand side of the binding can be a block or any other expression. It
-defines the function's return value and can depend on the parameters.
-
-```example
-#let alert(body, fill: red) = {
- set text(white)
- set align(center)
- rect(
- fill: fill,
- inset: 8pt,
- radius: 4pt,
- [*Warning:\ #body*],
- )
-}
-
-#alert[
- Danger is imminent!
-]
-
-#alert(fill: blue)[
- KEEP OFF TRACKS
-]
-```
-
-### Unnamed functions { #unnamed }
-You can also created an unnamed function without creating a binding by
-specifying a parameter list followed by `=>` and the function body. If your
-function has just one parameter, the parentheses around the parameter list are
-optional. Unnamed functions are mainly useful for show rules, but also for
-settable properties that take functions like the page function's
-[`footer`]($func/page.footer) property.
-
-```example
-#show "once?": it => [#it #it]
-once?
-```
-
-### Notable fact
-In Typst, all functions are _pure._ This means that for the same
-arguments, they always return the same result. They cannot "remember" things to
-produce another value when they are called a second time.
-
-The only exception are built-in methods like
-[`array.push(value)`]($type/array.push). These can modify the values they are
-called on.
-
-## Methods
-### with()
-Returns a new function that has the given arguments pre-applied.
-
-- arguments: any (variadic)
- The named and positional arguments to apply.
-- returns: function
-
-### where()
-Returns a selector that filters for elements belonging to this function
-whose fields have the values of the given arguments.
-
-- fields: any (named, variadic)
- The field values to filter by.
-- returns: selector
-
-# Arguments
-Captured arguments to a function.
-
-Like built-in functions, custom functions can also take a variable number of
-arguments. You can specify an _argument sink_ which collects all excess
-arguments as `..sink`. The resulting `sink` value is of the `arguments` type. It
-exposes methods to access the positional and named arguments and is iterable
-with a [for loop]($scripting/#loops). Inversely, you can spread
-arguments, arrays and dictionaries into a function call with the spread operator:
-`{func(..args)}`.
-
-## Example
-```example
-#let format(title, ..authors) = [
- *#title* \
- _Written by #(authors
- .pos()
- .join(", ", last: " and "));._
-]
-
-#format("ArtosFlow", "Jane", "Joe")
-```
-
-## Methods
-### pos()
-Returns the captured positional arguments as an array.
-
-- returns: array
-
-### named()
-Returns the captured named arguments as a dictionary.
-
-- returns: dictionary
-
-# Selector
-A filter for selecting elements within the document.
-
-You can construct a selector in the following ways:
-- you can use an element [function]($type/function)
-- you can filter for an element function with
- [specific fields]($type/function.where)
-- you can use a [string]($type/string) or [regular expression]($func/regex)
-- you can use a [`{<label>}`]($func/label)
-- you can use a [`location`]($func/locate)
-- call the [`selector`]($func/selector) function to convert any of the above
- types into a selector value and use the methods below to refine it
-
-Selectors are used to [apply styling rules]($styling/#show-rules) to elements.
-You can also use selectors to [query]($func/query) the document for certain
-types of elements.
-
-Furthermore, you can pass a selector to several of Typst's built-in functions to
-configure their behaviour. One such example is the [outline]($func/outline)
-where it can be used to change which elements are listed within the outline.
-
-Multiple selectors can be combined using the methods shown below. However, not
-all kinds of selectors are supported in all places, at the moment.
-
-## Example
-```example
-#locate(loc => query(
- heading.where(level: 1)
- .or(heading.where(level: 2)),
- loc,
-))
-
-= This will be found
-== So will this
-=== But this will not.
-```
-
-## Methods
-### or()
-Allows combining any of a series of selectors. This is used to
-select multiple components or components with different properties
-all at once.
-
-- other: selector (variadic, required)
- The list of selectors to match on.
-
-### and()
-Allows combining all of a series of selectors. This is used to check
-whether a component meets multiple selection rules simultaneously.
-
-- other: selector (variadic, required)
- The list of selectors to match on.
-
-### before()
-Returns a modified selector that will only match elements that occur before the
-first match of the selector argument.
-
-- end: selector (positional, required)
- The original selection will end at the first match of `end`.
-- inclusive: boolean (named)
- Whether `end` itself should match or not. This is only relevant if both
- selectors match the same type of element. Defaults to `{true}`.
-
-### after()
-Returns a modified selector that will only match elements that occur after the
-first match of the selector argument.
-
-- start: selector (positional, required)
- The original selection will start at the first match of `start`.
-- inclusive: boolean (named)
- Whether `start` itself should match or not. This is only relevant if both
- selectors match the same type of element. Defaults to `{true}`.
-
-# Module
-An evaluated module, either built-in or resulting from a file.
-
-You can access definitions from the module using
-[field access notation]($scripting/#fields) and interact with it using the
-[import and include syntaxes]($scripting/#modules).
-
-## Example
-```example
-<<< #import "utils.typ"
-<<< #utils.add(2, 5)
-
-<<< #import utils: sub
-<<< #sub(1, 4)
->>> #7
->>>
->>> #(-3)
-```
diff --git a/docs/src/reference/welcome.md b/docs/src/reference/welcome.md
deleted file mode 100644
index fc526f52..00000000
--- a/docs/src/reference/welcome.md
+++ /dev/null
@@ -1,29 +0,0 @@
----
-description: |
- The Typst reference is a systematic and comprehensive guide to the Typst
- typesetting language.
----
-
-# Reference
-This reference documentation is a comprehensive guide to all of Typst's
-syntax, concepts, types, and functions. If you are completely new to Typst, we
-recommend starting with the [tutorial]($tutorial) and then coming back to
-the reference to learn more about Typst's features as you need them.
-
-## Language { #language }
-The reference starts with a language part that gives an overview over [Typst's
-syntax]($syntax) and contains information about concepts involved in
-[styling documents,]($styling) using
-[Typst's scripting capabilities,]($scripting) and a detailed documentation of
-all [data types]($types) in Typst.
-
-## Functions { #functions }
-The second part includes chapters on all functions used to insert, style, transform,
-and layout content in Typst documents. Each function is documented with a
-description of its purpose, a list of its parameters, and examples of how to use
-it.
-
-The final part of the reference explains all functions that are used within
-Typst's code mode to manipulate and transform data. Just as in the previous
-part, each function is documented with a description of its purpose, a list of
-its parameters, and examples of how to use it.