注意 当サイトは、Typst v0.12.0 公式ドキュメントを、日本語コミュニティが非公式に翻訳したものです。誤訳・未訳・古い情報が含まれている可能性があるため、公式ドキュメント との併用を推奨します。このサイトの内容に誤りを発見された方は、GitHubリポジトリまでご報告を頂けましたら幸いです。我々のコミュニティにご興味のある方は、ぜひ非公式Discordサーバー「くみはんクラブ」にご参加ください。
Warning: This site provides an unofficial translation of the Typst v0.12.0 documentation by the Japanese Community. Please note that there may be some inaccuracies, untranslated sections or outdated information. We highly recommend referring to the latest official documentation as well. If you find any errors in the content, please let us know through our GitHub repository. If you are interested in our community, feel free to join our unofficial Discord server, “Kumihan Club.”
Typst ドキュメント日本語版

スクリプト記述

Typstには強力なスクリプト言語が組み込まれています。これにより、ドキュメントを自動化し、コードを使用してより洗練されたスタイルを作成できます。 以下は、スクリプト記述の概念の概要です。

Typstでは、マークアップとコードが一体となっています。 最も一般的な要素以外のものは 関数 を使って作成されます。 これを可能な限り便利にするため、Typstはコード式をマークアップに埋め込むためのコンパクトな構文を提供しています。式はハッシュ(#)で始まり、 この式が終了すると通常のマークアップの解析が再開されます。 式の直後に通常の文字列として解釈されるべき文字が続く場合、セミコロン(;)を使って式を強制的に終了できます。

#emph[Hello] \
#emoji.face \
#"hello".len()
Preview

上記の例では、関数呼び出しフィールドアクセス、 そしてメソッド呼び出しなどのいくつかの使用可能な式を示しています。 この章の残りでは、より多くの種類の式について説明します。 いくつかの種類の式はハッシュ構文と互換性がありません(例えば二項演算子式)。 このような式をマークアップに埋め込むためには、#(1+2)のように丸括弧を使用します。

ブロック

コードを構造化し、マークアップを埋め込むために、Typstは次の二種類の ブロック を提供します。

コンテンツブロックとコードブロックは任意にネストできます。以下の例では、[hello]a + [ the ] + bの出力と結合され、[hello from the *world*]が生成されます。

#{
  let a = [from]
  let b = [*world*]
  [hello ]
  a + [ the ] + b
}
Preview

バインディングと分割

前述のように、変数はletバインディングで定義できます。 変数には=記号のあとに続く式の値が代入されます。値の代入は任意であり、値が代入されなければ変数はnoneとして初期化されます。 letキーワードは、カスタム名前付き関数を作成するためにも使用できます。 変数は、それが含まれるブロックの残りの部分(または、変数が含まれるブロックがない場合はファイル全体)の中でアクセスできます。

#let name = "Typst"
This is #name's documentation.
It explains #name.

#let add(x, y) = x + y
Sum is #add(2, 3).
Preview

letバインディングは配列辞書の分割にも使用できます。 この場合、代入の左辺は配列や辞書と同じ形式でなければなりません。 ..演算子はパターン内で一度だけ、配列や辞書の残りの項目を受け取るために使用できます。

#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.
]
Preview

分割パターンでアンダースコアを使用して、要素を破棄できます。

#let (_, y, _) = (1, 2, 3)
The y coordinate is #y.
Preview

分割は関数の引数リスト内でも機能します。

#let left = (2, 4, 5)
#let right = (3, 2, 6)
#left.zip(right).map(
  ((a,b)) => a + b
)
Preview

そして通常の代入の左辺でも機能します。これは、変数の値を交換するなどの場合に便利です。

#{
  let a = 1
  let b = 2
  (a, b) = (b, a)
  [a = #a, b = #b]
}
Preview

条件式

条件式を使用すると、ある条件が満たされているかどうかに応じて、異なるものを表示したり計算したりできます。 Typstはif式、else if式、およびelse式をサポートしています。 条件がtrueの場合、条件式はifの部分の結果が得られ、そうでない場合はelseの部分の結果が得られます。

#if 1 < 2 [
  This is shown
] else [
  This is not.
]
Preview

各条件分岐は、その本文としてコードブロックまたはコンテンツブロックを含められます。

ループ

ループを使用すると、コンテンツを繰り返したり、何かを反復的に計算したりできます。 Typstは、forループとwhileループの2つのループをサポートしています。 前者は指定されたコレクションを反復するのに対し、後者は条件が満たされている限り反復を続けます。 ブロックと同様に、ループは各反復からの結果を1つの値に 結合 します。

以下の例では、forループによって作成された3つの文が1つのコンテンツ値に結合され、whileループの中の長さ1の配列が1つの大きな配列に結合されます。

#for c in "ABC" [
  #c is a letter.
]

#let n = 2
#while n < 10 {
  n = (n * 2) - 1
  (n,)
}
Preview

forループはさまざまなコレクションを反復処理できます。

ループの実行を制御するために、Typstはbreakcontinueステートメントを提供しています。 前者はループを早期終了し、後者はループの次の反復を開始します。

#for letter in "abc nope" {
  if letter == " " {
    break
  }

  letter
}
Preview

ループの本体はコードブロックまたはコンテンツブロックにできます。

フィールド

ドット記法 を使用することで値のフィールドにアクセスできます。コンテンツ型の値については、fields関数を使用してフィールドを一覧表示できます。

対象の値は以下のいずれかです。

#let it = [= Heading]
#it.body \
#it.depth \
#it.fields()

#let dict = (greet: "Hello")
#dict.greet \
#emoji.face

Preview

メソッド

メソッド呼び出しは、値ので定義された関数を呼び出す便利な方法です。 例えば、str.len関数は下記の2つの同等の方法で呼び出せます。

#str.len("abc") is the same as
#"abc".len()
Preview

メソッド呼び出しの構造はvalue.method(..args)であり、これと等価である完全な関数呼び出しはtype(value).method(value, ..args)です。各型のドキュメントには、その型に関連付けられた関数が一覧表示されています。現在、独自のメソッドは定義できません

#let values = (1, 2, 3, 4)
#values.pop() \
#values.len() \

#("a, b, c"
    .split(", ")
    .join[ --- ])

#"abc".len() is the same as
#str.len("abc")
Preview

特定の値に対して呼び出された際に、その値を変更する特別な関数がいくつかあります(例: array.push)。 これらの関数は、必ず メソッド形式で呼び出す必要があります。 場合によっては、メソッドが副作用のためだけに呼び出されるとき、その戻り値は無視されるべきです(結合に加わるべきではありません)。 値を破棄する標準的な方法は、let _ = array.remove(1)のように letバインディングを使用することです。

モジュール

Typstプロジェクトを、モジュール と呼ばれる複数のファイルに分割できます。 モジュールは他のモジュールの内容や定義を複数の方法で参照できます。

以下の例に示すように、パスの代わりにモジュール値を使用できます。

#import emoji: face
#face.grin
Preview

パッケージ

プロジェクト間でビルド中のブロックを再利用するために、Typstの パッケージ を作成してインポートできます。 パッケージのインポートは、名前空間、名前、バージョンの3つの組み合わせとして指定されます。

#import "@preview/example:0.1.0": add
#add(2, 7)
Preview

preview名前空間には、コミュニティで共有されているパッケージが含まれています。すべての利用可能なコミュニティパッケージはTypst Universeにあります。

Typstをローカルで使用している場合、独自のシステムローカルパッケージを作成できます。詳細については、パッケージリポジトリを参照してください。

演算子

以下の表は、使用可能なすべての単項および二項演算子の効果、引数の個数(単項あるいは二項)、および優先度(高いほど強く結合)を示しています。

演算子効果引数の個数優先度
-負号単項7
+効果なし (対称性のために存在)単項7
*乗算二項6
/除算二項6
+加算二項5
-減算二項5
==等価性の評価二項4
!=非等価性の評価二項4
<小なりの評価二項4
<=以下の評価二項4
>大なりの評価二項4
>=以上の評価二項4
inコレクション内に存在することの評価二項4
not inコレクション内に存在しないことの評価二項4
not論理否定単項3
and短絡論理積二項3
or短絡論理和二項2
=代入二項1
+=加算代入二項1
-=減算代入二項1
*=乗算代入二項1
/=除算代入二項1