Typst は何をしますか?
Typstは、組み込みスクリプト言語を備えたマークアップベースの組版システムです。1つのバイナリで .typ → PDF(デフォルト)、PNG、SVG、HTML(実験的)、またはマルチファイルバンドル(実験的)にコンパイルできます。このスキルは Typst 0.15.x(0.15.1で検証)を対象としています。古いバージョンと動作が異なる箇所には注記があります。
Typstに関するトレーニングデータは古くなっていることがよくあります(0.11〜0.13時代)。関数、パラメーター、デフォルト値が不明な場合は、
references/api-signatures.mdを確認してから、プローブファイル(typst eval '<式>'または5行のファイル)をコンパイルして試すことを推奨します。推測はしないでください。
ワークフロー
- 出力形式を明確にする: PDF(デフォルト)、HTML、PNG/SVG、アクセシブルPDF(PDF/UA)、アーカイブPDF(PDF/A)? ページサイズ、言語、フォント、引用スタイル、テンプレート/ジャーナルは?
- スケルトン(下記)または
examples/から開始する: ジャーナル/学位論文/CV/スライドデッキの場合、まずパッケージを検索:python3 scripts/search-packages.py "ieee paper"(references/packages-and-ecosystem.mdを参照)。 - ファイルを作成する:
set/showルールとインポートを先頭に置き、その後にコンテンツを記述します。大規模なプロジェクトは#includeと#importで分割します。 - コンパイルと確認:
typst compile main.typ— 診断メッセージを読みます(行:列とヒントが表示されます)。PNG(typst compile main.typ 'p-{p}.png')で視覚的に確認するか、typst compile main.typ - -f html --features html/pdftotextでテキスト的に確認します。詳細はreferences/pitfalls-and-debugging.mdを参照。 - フォーマット(利用可能な場合):
typstyle -i file.typ。自分の編集範囲に限定されている場合のみ実行します。 - 作成/変更したファイルと再ビルド方法を報告します。
最小限のスケルトン
#set document(title: "My Document", author: "Name")
#set page(paper: "a4", margin: 2.5cm, numbering: "1")
#set text(font: "New Computer Modern", size: 11pt, lang: "en")
#set par(justify: true, leading: 0.65em)
#set heading(numbering: "1.1")
#title()
= Introduction <intro>
Typst supports *bold*, _italic_, `raw`, math $E = m c^2$ and references like @intro.
== A subsection
#lorem(30)
$ integral_0^1 x^2 dif x = 1/3 $
常に安全なデフォルト: #set text(lang: "...")(ハイフネーション、引用符、補足、アクセシビリティ)、#set document(title: ...) + #title()(表示タイトル)、#set par(justify: true)(本文テキスト)。
60秒でわかる構文
| モード | 開始方法 | 例 |
|---|---|---|
| マークアップ(デフォルト) | — | = Heading、*strong*、_emph_、- item、+ numbered、/ Term: desc、@label、<label> |
| コード | #(単一の式)または #{ ... } ブロック | #let x = 3、#f(1)[body]、#if a [yes] else [no]、#for i in range(3) [#i ] |
| 数式 | $...$($ x $ で空白あり = ディスプレイ数式) | $a^2 + b_i$、$sum_(i=1)^n i$、$ vec(1, 2) $ |
| コンテンツブロック | コード内の [...] | #box[hi]、let c = [*x*] |
- コード内では
#を繰り返さない:#figure(image("a.png"), caption: [Hi])。[...]コンテンツブロック内ではマークアップに戻ります:[Total: #x]。 - 配列
(1, 2)、辞書(a: 1, b: 2)、空()/(:)、要素1つ(1,)。タプルはありません。.at(i)でインデックス指定します([i]ではありません)。 - 名前付き引数には
:を使用(f(width: 2cm))。=はlet/コード内でのみ代入です。 - 文字列
"..."、コンテンツ[...]、生の文字`...`。変換はstr(x)、[#s]、eval(s, mode: "markup")を使用。 - コメント:
// line、/* block */。特殊文字は\でエスケープ(\#、\$、\@、\*、\_、\<)。Unicodeは\u{1F600}。 - 長さの単位:
pt mm cm in em、fr(分数)、%、角度deg rad。autoとnoneも値として使用できます。 set= この時点以降の要素に対するデフォルト引数。show= 要素の再スタイル/置換。スタイル/カウンター/位置を読み取るにはcontextが必要(references/introspection.mdを参照)。- パス: スラッシュのみ(0.15)。
"/x.typ"はプロジェクトルート相対(デフォルトルート: メインファイルのディレクトリ。--rootで変更可能)。"x.typ"は現在のファイルからの相対パス。 - メソッド構文はどこでも使用可能:
"abc".len()、(1,2,3).map(x => x*2)、rgb("#f00").lighten(30%)。
参照先
| 目的 | 参照先 |
|---|---|
構文、型、演算子、文字列/配列/辞書メソッド、モジュール、クロージャ、context の基本 | references/syntax-and-scripting.md |
set/show ルール、セレクター、ページ設定、テキスト、段落、ブロック、グリッド、段組み、配置、スペーシング、配置(placement)、変形 | references/styling-and-layout.md |
| 見出し、リスト、図、表、参照、脚注、アウトライン、引用、参考文献/引用/CSL、番号付け、リンク、メタデータ | references/document-model.md |
| 数式、数式構文、記号、行列、配置、フォント、番号付け | references/math.md |
| 図形、曲線、画像、色、グラデーション、タイリング、ストローク、スポットカラー | references/visuals.md |
カウンター、状態、query、locate、metadata、within、レイアウト収束、ランニングヘッダー、measure/layout | references/introspection.md |
CSV/JSON/YAML/TOML/XML/CBOR、read、bytes、sys.inputs、eval、WASMプラグイン、データ駆動型文書 | references/data-and-io.md |
CLIフラグ、フォント、PDF/A/UA、アクセシビリティ、HTML、バンドル、PNG/SVG、typst eval、CI/再現可能なビルド | references/export-and-cli.md |
| スライドデッキ(Touying/Polylux、アニメーション、ハンドアウト、スピーカーノート、pdfpc) | references/slides.md |
テンプレート、typst.toml、パッケージ公開、Universeパッケージのおすすめ(cetz、fletcher、touying、codly など)、エディタツール | references/templates-and-packages.md、references/packages-and-ecosystem.md |
| LaTeX → Typst 変換、Markdown/pandoc 変換、0.11〜0.14 からのアップグレード | references/migration.md |
| エラー、警告、プローブ、視覚確認、パフォーマンス、よくある落とし穴 | references/pitfalls-and-debugging.md |
| 全要素の正確なパラメーター/デフォルト値(0.15.1ソースで検証済み) | references/api-signatures.md |
| すぐにコンパイルできるスターター | examples/*.typ |
主な落とし穴(作成前に読むこと)
- set/showルールは前方に適用され、スコープ内でのみ有効。影響を与えたいコンテンツの前に配置すること。
[...]/{...}内のsetはブロックの終わりで終了します。 - 位置/スタイルに依存するものを読み取るには
contextが必要:#context counter(page).get()、#context text.size。これがないと「can only be used when context is known」エラーが発生します。 - クロージャでキャプチャされた変数は読み取り専用のコピー。累積には
fold、単一コードブロック内のループ、state、counterを使用します。 #は1回のみ必要。マークアップ内で演算子を含む式には#(a + b)を使用。#f(x).gは動作しますが#f (x)(スペース)は関数呼び出しになりません。- 数式はテキストではない: 複数文字の単語は記号/変数(
alpha、sin)。テキストを書くには"text"またはupright(...)を使用。単一文字は斜体の変数です。 - 文字列はコンテンツではない: 見出しの本文はコンテンツです。テキストを取得するには
.body、str()、またはヘルパーto-string(構文リファレンス参照)を使用します。 - フォント: インストール済み/埋め込み/
--font-pathのフォントのみが機能。不明なファミリーは警告を出してフォールバックします。一覧はtypst fontsで表示。可変フォントの場合は名前に「Variable」/「VF」を付けない(0.15)。 - パッケージは正確なバージョンでインポート:
#import "@preview/cetz:0.5.3"。最新バージョンはTypst Universe(scripts/search-packages.py)で確認し、記憶に頼らないこと。新しいコンパイラにパッケージが追いついていない場合があります。 - 0.15での削除点:
path()→curve()、pattern→tiling、pdf.embed→pdf.attach、*.decode(...)→ バイト列をjson(...)などに渡す、typst query→typst eval、パスにバックスラッシュ不可。 - HTML/バンドル出力は実験的で、
--features html/--features bundleが必要。
クイックイディオム
// 再利用可能なテンプレート: showルールと関数
#let conf(title: none, authors: (), body) = {
set page(margin: 2cm)
set par(justify: true)
align(center, text(17pt, weight: "bold", title))
v(1em)
body
}
#show: conf.with(title: [My Paper])
// 見出しレベルのスタイル設定
#show heading.where(level: 1): set text(navy)
#show heading.where(level: 1): it => block(above: 1.5em, below: 1em, it)
// 相互参照と図
#figure(table(columns: 2, [A], [B], [1], [2]), caption: [Data]) <tab:data>
See @tab:data.
// データ駆動型コンテンツ
#for (name, score) in (("Ann", 3), ("Bo", 5)) [- #name: #score]
// 実行時入力: CLIから typst compile --input mode=draft main.typ
#let draft = sys.inputs.at("mode", default: "final") == "draft"
コンパイルチートシート
typst compile main.typ # → main.pdf
typst compile main.typ out.pdf --root .
typst compile main.typ 'page-{0p}.png' --ppi 144
typst watch main.typ # 変更時に再コンパイル
typst eval 'calc.pow(2, 10)' # 式を評価、JSON出力
typst eval --in main.typ 'query(heading).len()'
typst init @preview/charged-ieee # テンプレートから新規プロジェクト
typst fonts --variants # インストール済みフォント
例(すべて0.15.1でコンパイル可能)
| ファイル | 内容 |
|---|---|
examples/memo.typ | 短いメモ、ヘッダーグリッド、シンプルなスタイリング |
examples/report.typ | タイトルページ、アウトライン、ランニングヘッダー、図表/脚注、showルール |
examples/academic-paper.typ (+ refs.bib) | 数式、定理環境、相互参照、引用 |
examples/data-report.typ (+ data.csv) | CSV → テーブル、計算列、--input、簡易棒グラフ |
examples/template.typ + template-usage.typ | 再利用可能なテンプレート関数 + コンポーネント |
examples/accessible.typ | PDF/A-2a + PDF/UA-1(--pdf-standard a-2a,ua-1) |
examples/dual-target.typ | 単一ソース → PDFとHTML(context target()、html.*) |
examples/query-export.typ | metadata + typst eval による構造エクスポート |
examples/slides-plain.typ、examples/letter.typ | パッケージなしのスライドと正式なレター |
examples/packages-demo.typ | cetz、fletcher、lilaq、theorion、codly(固定バージョン、検証済み) |
スクリプト
scripts/check-snippets.py FILE.md…— 全ての```typブロックをコンパイル(説明用/コンパイル不可のブロックは```typ-xを使用)。Typstを含むMarkdownを書いたら、このスクリプトを実行してください。scripts/search-packages.py "keywords" [--category cv] [--name cetz --versions]— Typst Universeのインデックスを検索し、現在のパッケージ名とバージョンを取得します。