# Typst documentation

See [typst.app/docs](https://typst.app/docs) for typst's documentation. \
All typst handouts are based on [`handout@0.1.0`](./lib/typst/local/handout/0.1.0).

The best way to start a new document is to make a copy of an existing one.
- [Advanced/Tropical Polynomials](./src/Advanced/Tropical%20Polynomials) is a good place to start.
- [Warm-Ups/Painting](./src/Warm-Ups/Painting) is a good example of tikz-like pictures.


## Notes
- Typst's equivalent of tikz is cetz ([homepage](https://cetz-package.github.io), [docs](https://cetz-package.github.io/docs/api))
- Typst handouts are always compiled with solutions. \
  Handouts without solutions are automatically compiled and published at [betalupi.com/handouts](https://static.betalupi.com/ormc). \
  If you'd like to compile a student handout manually, run the following command in a handout directory:
```bash
typst compile main.typ --package-path ../../../lib/typst --input show_solutions=false
```
Where `package_path` is a relative path to [./lib/typst](./lib/typst).

## Document Options

All typst handouts start with the following:
```typst
#show: handout.with(
  // Should match `meta.toml`
  title: [handout title],

  // Authors
  by: "Mark",

  // Subtitle (optional)
  subtitle: "Based on a handout by Bryant Mathews",

  // Group (optional)
  group: "Advanced 2",
)
```

## Notable commands
- `#v(1fr)`: Like LaTeX's `\vfill`. Creates whitespace that grows automatically. \
  `fr` means "fraction". `#v(2fr)` will fill twice as much space as `#v(1fr)` on the same page.

## Utilities
- `#note([content], type: "Note type")`: Makes a note. `type` is optional.
- `#hint([content])`: Shorthand for `#note([content], type: "Hint")`
- `#solution([content])`: A pretty box for solutions. Hidden in student handouts.
- `#examplesolution([content])`: Like `#solution()`, but is never hidden.
- `#if_solutions([content])`: Shows content only if we are showing solutions.
- `#if_no_solutions([content])`: Shows content only if we **aren't** showing solutions.

## Sections
High-level sections are denoted with `=`. \
Subsections start with `==`, subsubsections with `===`, and so on. \
**`handout@0.1.0` is only designed to use `=`, subsections might be ugly.**


`handout@0.1.0` also provides the following commands:
- `problem`
- `definition`
- `theorem`
- `example`
- `remark`

These all have the same syntax: `#problem("title", label: "label")`
- `title` is the problem's title, and may be omitted.
- `label` is the problem's label. This is optional. \
  If a label is provided, this problem can be referenced with `@label`

**Examples:**
- `#problem()`
- `#problem("Bonus")`
- `#problem(label: "gcd")`, which may be referenced with `@gcd`

### Complete example:

```typst
// Import definition(), problem(), etc.
// Must be at the top of each file.
#import "@local/handout:0.1.0": *

// Make a section called "Tropical Cubic Polynomials"
= Tropical Cubic Polynomials

// Make a problem with a label
#problem(label: "imaproblem")
Consider the polynomial $f(x) = x^3 + 1x^2 + 3x + 6$.
- sketch a graph of this polynomial

// Make an untitled problem that references `problem`.
#problem()
Recall @imaproblem.
- use this graph to find the roots of $f$
```