Typstの始め方と使い方

# 手順
1. （Macです、Windowsでも同じようにできる？）
1. ``brew install typst``でインストール
1. VS Code拡張機能「Typst LSP」をインストール

（追記：2024年11月7日現在、Typst LSPが使えなくなり、Tinymist Typstに統合された）

# 使い方（文書）
1. 適当に``main.typ``みたいなのを作りましょう
1. 以下のような書き込みをするだけで簡単に始められるます（1チャンク目はLaTeXのようなアウトプットが出るような設定で、2チャンク目は定理環境、3チャンク目はオリジナルコマンド）
1. （その他の基本的なルールは適宜調べてください）

```
#set page(paper: "us-letter", margin: 1.5in)
#set par(leading: 0.55em, first-line-indent: 1.8em, justify: true)
#set text(font: "Linux Libertine", size:12pt)
#set heading(numbering: "1.")
#show par: set block(spacing: 1.10em) // double-spacing
#show heading: set block(above: 1.4em, below: 1em)

#import "@preview/ctheorems:1.1.0": *
#show: thmrules
#let thm = thmbox("theorem", "Theorem", fill: rgb("#FFCCCC"))
#let prop = thmbox("proposition", "Proposition", fill: rgb("#FFE5CC"))
#let exer = thmbox("exercise", "Exercise", fill: rgb("#CCFFCC"))
#let defn = thmbox("definition", "Definition", inset: (x: 0em, top: 1.1em))
#let proof = thmplain(
  "proof",
  "Proof",
  base: "theorem",
  bodyfmt: body => [#body #h(1fr) $square$]
).with(numbering: none)

#let ge = $gt.eq$



= Section #footnote[something]

== Subsection

=== Subsubsection
Hello world

- list
- list

inline math $f(x) = x$
math block $ f(x) = x $
math block (multi lines)
  $
    f(x)
    &= x(x-1) \
    &= x^2 - x
  $

normal text _emphasized text_

// commentout

/*
comment out
comment out
*/

#defn[
  definition
]

#thm("Euler")[
  theorem
] <thm-label>

By @thm-label, something.
```


# 使い方（スライド）（最新版）
「slydst」のパッケージを使うほうが便利なのでこっちを使っている

- リンク：https://typst.app/universe/package/slydst/
- リンク：https://github.com/glambrechts/slydst

```
// https://typst.app/universe/package/slydst/
#import "@preview/slydst:0.1.1": *

#show: slides.with(
  title: "Title", 
  subtitle: none,
  date: none,
  authors: (),
  layout: "medium",
  ratio: 4/3,
  title-color: none,
)

#set text(font: "Arial")

== Title
- Hello

#definition(title: "An interesting definition")[
  #lorem(20)
]

==
No title slide
```


# 使い方（スライド）
メトロポリスのテーマで作ってみた

ポイント
- 英語はAvenir Next、日本語はヒラギノ角ゴシックで和欧混植している
- dateが自動で今日に変わるようにしている


```
// https://polylux.dev/book/themes/gallery/metropolis.html#metropolis-theme
#import "@preview/polylux:0.3.1": *
#import themes.metropolis: *
#show: metropolis-theme.with(aspect-ratio: "4-3") // "4-3" or "16-9"
#set text(size: 24pt)
#set text(font: "Avenir Next")
#show regex("[\p{scx:Han}\p{scx:Hira}\p{scx:Kana}]"): set text(font: "Hiragino Kaku Gothic ProN", size: 22pt)
#set strong(delta: 100)
#set par(justify: true, leading: 0.65em)
#set list(marker: ([•], [◦], [-], [+]), spacing: auto)
#set block(below: 1.2em)
#let today = datetime.today()

#title-slide(
  author: [authors],
  title: "title",
  subtitle: "subtitle",
  date: today.display("[month repr:long] [day], [year]"),
  extra: "Extra notes"
)

#slide(title: "title name")[
  Lists
  - list
  - list

  Wide lists
  - list

  - list

  #alert[very important]
]

#new-section-slide("First section")

#focus-slide[
  FOCUS
]
```


# Typstの仕様

## リスト
- 箇条書きの間を広げたかったら、シンプルに箇条書きごとに改行すれば良いらしい（ちがうブロックとみなされるので）

```
#slide[
  - list 1

  - list 2
]
```

- 以下のような感じでもすべての箇条書き間が広がる

```
#slide[
  - list 1

  - list 2
  - list 3
]
```



# コマンド
``#let something = $something$``でコマンドを作れます。
たとえば、``#let cA = $cal(A)$``で、``cA``にカリグラフィックAを割り当てられます。

## イタリック表記の色を変えたい
``#show emph: it => {text(blue, it.body)}``で、``_text_``で普通の立体・色は青の「text」を出力できる

## 2列にしたい
``#set page(columns: 2)``を追加する

## LaTeXとのコマンドの違い
このリストにない場合は、https://typst.app/docs/reference/symbols/sym/ を参照
もしくは、https://qwinsi.github.io/tex2typst-webapp/cheat-sheet.html
Typstのコマンドのほうが優れていると思うけど、LaTeXに慣れすぎてしまったので違いに少し困る
 
<table>

  <thead>
    <tr>
      <th>LaTeX</th> <th>typst</th>
    </tr>
    
  </thead>

  <tr>
    <td> \mathbb{A} </td> <td> AA </td>
  </tr>
  
  <tr>
    <td> \mathcal{A} </td> <td> cal(A) </td>
  </tr>

  <tr>
    <td> \cup </td> <td> union </td>
  </tr>

  <tr>
    <td> \bigcup </td> <td> union.big </td>
  </tr>

  <tr>
    <td> \cap </td> <td> sect </td>
  </tr>

  <tr>
    <td> \bigcap </td> <td> sect.big </td>
  </tr>

  <tr>
    <td> \ge </td> <td> gt.eq </td>
  </tr>

  <tr>
    <td> \le </td> <td> lt.eq </td>
  </tr>

  <tr>
    <td> \ne </td> <td> equiv.not </td>
  </tr>

  <tr>
    <td> \cdots </td> <td> dots.h.c </td>
  </tr>

  <tr>
    <td> \cdot </td> <td> dots.c </td>
  </tr>

  <tr>
    <td> \to </td> <td> arrow.r </td>
  </tr>

  <tr>
    <td> \mapsto </td> <td> arrow.r.bar </td>
  </tr>

   <tr>
    <td> \implies </td> <td> arrow.r.double.long </td>
  </tr>

   <tr>
    <td> \setminus </td> <td> without </td>
  </tr>

   <tr>
    <td> \pm </td> <td> plus.minus </td>
  </tr>

   <tr>
    <td> \infty </td> <td> infinity </td>
  </tr>

  <tr>
    <td> a \text{ and } b </td> <td> a "and" b </td>
  </tr>

  <tr>
    <td> \bar{x} </td> <td> macron(x) </td>
  </tr>

  <tr>
    <td> \textrm{Var} </td> <td> upright(V a r) </td>
  </tr>

  <tr>
    <td> \notin </td> <td> in.not </td>
  </tr>

  <tr>
    <td> ... </td> <td> ... </td>
  </tr>

</table>

その他
```
#let ge = $gt.eq$
#let le = $lt.eq$
#let ne = $eq.not$
#let Union = $union.big$
#let Sect = $sect.big$
#let notin = $in.not$
#let ortho = $perp$
#let oplus = $plus.circle$
#let Oplus = $plus.circle.big$
#let otimes = $times.circle$
#let Otimes = $times.circle.big$

#let to = $arrow.r$
#let mapsto = $arrow.r.bar$
#let asto = $arrow.r^(a s)$
#let pto = $arrow.r^(p)$
#let dto = $arrow.r^(d)$
#let wto = $harpoon.rt$
#let wsto = $harpoon.rt^*$
#let TO(x) = $arrow.r.squiggly^(#x)$

#let from = $tilde.op$
#let ac = $lt.double$
#let contig = $lt.tri$
#let contigg = $gt.tri$

#let circ = $compose$
#let inv = $-1$

#let bar(x) = $macron(#x)$
#let radi(x) = $sqrt(#x)$

#let infty = $infinity$
#let limn = $lim_(n to infty)$
#let plim = $upright(p l i m)$ //FIX
#let pm = $plus.minus$
#let cdots = $dots.h.c$
#let cdot = $dot.c$
#let any = $dot.c$
```



# 使えるフォント
ターミナルで``typst fonts``と打てば自分が使えるフォントの一覧を見られる
もちろん日本語も



# SyncTexみたいなことをする
VSCode拡張機能の``Typst Preview``をインストール
使い方は、コマンドパレットで``Typst Preview: Preview current file in slide mode``を選ぶだけ

使用感
- マークダウンみたいにリアルタイム反映されるので嬉しい、圧倒的に便利
- 1ページごと表示しかできなくて、シームレスな表示のやり方がわからない？
- 日本語ではジャンプできない気がする？

追記
- 2024年11月7日現在、Typst Previewが使えなくなり、Tinymist Typstに統合された
- Tinymist Typstでは、コマンドパレットから似たプレビューを呼び起こせる？
- ふつうのプレビューでもSyncTexしてる？
- 1ページごと表示しかできなくて、シームレスな表示のやり方がわからない？




# 疑問点など
- 全角括弧``（）``の挙動がキモい気がする
- ``$F_X(x)$``がLaTeXの``F_{X(x)}``に対応していて慣れない