構文
Typstはマークアップ言語です。 これは、シンプルな構文を使用して一般的なレイアウトタスクを簡単に行えるということです。 Typstの軽量なマークアップ構文は、文書を簡単かつ自動的にスタイリングできるsetルールとshowルールによって補完されています。 これらすべては、組み込み関数およびユーザー定義関数を備えた、緊密に統合されたスクリプト言語によって支えられています。
モード
Typstには3種類の構文モードがあります。マークアップモード、数式モード、そしてコードモードです。 Typst文書では、マークアップモードがデフォルトであり、数式モードでは数式を書くことができ、コードモードではTypstのスクリプト機能を利用することができます。
以下の表を参照し、いつでも特定のモードに切り替えることができます。
新たなモード | 構文 | 例 |
---|---|---|
コード | コードの前に# を付ける | Number: #(1 + 2) |
数式 | 式を$..$ で囲む | $-x$ is the opposite of $x$ |
マークアップ | マークアップを[..] で囲む | let name = [*Typst!*] |
一度#
でコードモードに入ると、途中でマークアップモードや数式モードに切り替えない限り、さらにハッシュを使う必要はありません。
マークアップ
Typstは、最も一般的な文書要素に対する組み込みのマークアップを提供します。 ほとんどの構文要素は、対応する関数のショートカットに過ぎません。 以下の表は、利用可能なすべてのマークアップと、その構文と使用法について詳しく学ぶための最適なページへのリンクを示しています。
名称 | 例 | 参照 |
---|---|---|
段落区切り | 空行 | parbreak |
強調(太字) | *strong* | strong |
強調(イタリック) | _emphasis_ | emph |
rawテキスト | `print(1)` | raw |
リンク | https://typst.app/ | link |
ラベル | <intro> | label |
参照 | @intro | ref |
見出し | = Heading | heading |
箇条書きリスト | - item | list |
番号付きリスト | + item | enum |
用語リスト | / Term: description | terms |
数式 | $x^2$ | Math |
改行 | \ | linebreak |
スマートクオート | 'single' or "double" | smartquote |
短縮記号 | ~ , --- | Symbols |
コード構文 | #rect(width: 1cm) | Scripting |
文字エスケープ | Tweet at us \#ad | Below |
コメント | /* block */ , // line | Below |
数式モード
数式モードは、数式を組版するために使用される特別なマークアップモードです。
数式を $
の文字で囲むことによって、数式モードに入ることができます。
これはマークアップモードとコードモードの両方で機能します。
数式が少なくとも1つのスペースで始まり終わる場合、その数式は独自のブロックに組版されます(例:$ x^2 $
)。
インライン数式は、スペースを省略することで作成できます(例:$x^2$
)。
以下に、数式モードに特有の構文の概要を示します。
名称 | 例 | 参照 |
---|---|---|
インライン数式 | $x^2$ | Math |
ブロック数式 | $ x^2 $ | Math |
下付き添え字 | $x_1$ | attach |
上付き添え字 | $x^2$ | attach |
分数 | $1 + (a+b)/5$ | frac |
改行 | $x \ y$ | linebreak |
揃え位置 | $x &= 2 \ &= 3$ | Math |
変数アクセス | $#x$, $pi$ | Math |
フィールドアクセス | $arrow.r.long$ | Scripting |
暗黙の乗算 | $x y$ | Math |
短縮記号 | $->$ , $!=$ | Symbols |
数式内のテキスト/文字列 | $a "is natural"$ | Math |
数式関数呼び出し | $floor(x)$ | Math |
コード構文 | $#rect(width: 1cm)$ | Scripting |
文字エスケープ | $x\^2$ | Below |
コメント | $/* comment */$ | Below |
コードモード
コードブロックや式の中では、新しい式は先頭に#
を付けずに始めることができます。
多くの構文要素は式に特有のものです。
以下に、コードモードで利用可能なすべての構文の一覧表を示します。
名称 | 例 | 参照 |
---|---|---|
none | none | none |
自動 | auto | auto |
ブール値 | false , true | bool |
整数 | 10 , 0xff | int |
浮動小数点数 | 3.14 , 1e5 | float |
長さ | 2pt , 3mm , 1em , .. | length |
角度 | 90deg , 1rad | angle |
比率 | 2fr | fraction |
割合 | 50% | ratio |
文字列 | "hello" | str |
ラベル | <intro> | label |
数式 | $x^2$ | Math |
rawテキスト | `print(1)` | raw |
変数アクセス | x | Scripting |
コードブロック | { let x = 1; x + 2 } | Scripting |
コンテンツブロック | [*Hello*] | Scripting |
括弧付き式 | (1 + 2) | Scripting |
配列 | (1, 2, 3) | Array |
辞書 | (a: "hi", b: 2) | Dictionary |
単項演算子 | -x | Scripting |
二項演算子 | x + y | Scripting |
代入 | x = 1 | Scripting |
フィールドアクセス | x.y | Scripting |
メソッド呼び出し | x.flatten() | Scripting |
関数呼び出し | min(x, y) | Function |
引数展開 | min(..nums) | Arguments |
無名関数 | (x, y) => x + y | Function |
letバインディング | let x = 1 | Scripting |
名前付き関数 | let f(x) = 2 * x | Function |
setルール | set text(14pt) | Styling |
set-ifルール | set text(..) if .. | Styling |
show-setルール | show heading: set block(..) | Styling |
関数付きshowルール | show raw: it => {..} | Styling |
show-everythingルール | show: template | Styling |
コンテキスト式 | context text.lang | Context |
条件式 | if x == 1 {..} else {..} | Scripting |
forループ | for x in (1, 2, 3) {..} | Scripting |
whileループ | while x < 10 {..} | Scripting |
ループ制御フロー | break, continue | Scripting |
関数からのリターン | return x | Function |
モジュールをインクルード | include "bar.typ" | Scripting |
モジュールをインポート | import "bar.typ" | Scripting |
モジュールからのインポート | import "bar.typ": a, b, c | Scripting |
コメント | /* block */ , // line | Below |
コメント
コメントはTypstによって無視され、出力には含まれません。
これは古いバージョンを除外したり、注釈を追加したりするのに便利です。
単一行をコメントアウトするには、行の先頭に//
を付けます。
// our data barely supports
// this claim
We show with $p < 0.05$
that the difference is
significant.

コメントは /*
と */
で囲むこともできます。この場合、コメントを複数行にわたって書くことができます。
Our study design is as follows:
/* Somebody write this up:
- 1000 participants.
- 2x2 data design. */

エスケープシーケンス
エスケープシーケンスは、Typstで入力が難しい特殊文字や他に特別な意味を持つ文字を挿入するために使用されます。
文字をエスケープするには、バックスラッシュをその前に置きます。
任意のUnicodeコードポイントを挿入するためには、16進エスケープシーケンス(\u{1f600}
)を使用できます。
このエスケープシーケンスは文字列でも機能します。
I got an ice cream for
\$1.50! \u{1f600}

パス
Typstは、画像、Typstファイル、データファイルなどのリソース(他ファイル)を参照するためにファイルパスを必要とするさまざまな機能を持ちます。 パスは文字列型で指定し、相対パスと絶対パスの2種類があります。
-
相対パスは、その機能を呼び出すTypstファイルの場所からのパスを指定します。デフォルトはこれです。
#image("images/logo.png")
-
絶対パスはプロジェクトの ルートディレクトリ からのパスを指定します。先頭を
/
から始めます。#image("/assets/logo.png")
プロジェクトのルートディレクトリ
デフォルトでは、プロジェクトのルートディレクトリはメインのTypstファイルの親ディレクトリです。 セキュリティ上の理由により、ルートディレクトリの外にあるファイルは読み取れません。
プロジェクトのルートディレクトリとして特定のフォルダーを設定したい場合は、CLIの--root
フラグを使用できます。
対象のファイルがそのフォルダーのサブディレクトリ内に含まれていることを確認してください。
typst compile --root .. file.typ
Webアプリでは、プロジェクト自体がルートディレクトリとして扱われます。 どのファイルをプレビューしていても(プレビューはファイルパネル内の各Typstファイルの横にある目のアイコンで切り替え可能)、 その中にあるすべてのファイルを常に読み取れます。
パスとパッケージ
パッケージは、それ自身のディレクトリ内にあるファイルしか読み込むことができません。
その中では、絶対パスはプロジェクトのルートディレクトリではなく、パッケージのルートディレクトリを指します。
このため、パッケージはプロジェクトディレクトリ内のファイルを直接読み込むことができません。
パッケージがプロジェクトのリソース(たとえばロゴ画像など)を必要とする場合は、
あらかじめ読み込んだ画像をlogo: image("mylogo.svg")
のように名前付きパラメーターとして渡す必要があります。
その後でも、パッケージ内でsetルールを記述することで画像の見た目をカスタマイズすることも可能です。
将来的には、パスが文字列とは異なるパス専用の型になるかもしれません。 そうすることで、そのパスがどこで生成されたかという情報を保持できるようになります。 これにより、異なるルートからリソースを読み込むことも可能になるでしょう。