Community画像github.com

Typst

Typst文書(.typ)の作成、編集、デバッグ、コンパイル、パッケージ化を行います。論文、レポート、学位論文、CV、レター、スライド、ポスター、数式が多い文書、データ駆動型文書に対応。

Typst とは?

このスキルは、マークアップベースの組版システム「Typst」(バージョン0.15.x)を扱うための総合的なガイドです。Typstは1つのバイナリで`.typ`ファイルをPDF(デフォルト)、PNG、SVG、HTML(実験的)、またはマルチファイルバンドル(実験的)にコンパイルできます。このスキルは、開発者やAIエージェントがTypst文書を作成・デバッグ・コンパイルする際に、正確かつ効率的に作業を進められるよう支援します。具体的には、構文/スクリプティング、スタイリング/レイアウト、ドキュメントモデル(見出し、リスト、図表、参考文献など)、数式、図形/画像、イントロスペクション(カウンター、状態、クエリ)、データ入出力、CLIオプション、アクセシビリティ(PDF/A、PDF/UA)、テンプレート、Typst Universeパッケージ、LaTeX/Markdownからの移行など、ほぼすべての側面をカバーする詳細なリファレンスが用意されています。特に、古いトレーニングデータ(0.11〜0.13時代)に頼らず、`references/api-signatures.md`の確認と`typst eval`によるプローブを推奨する点が特徴で、正確な情報に基づいた開発を可能にします。また、一般的な落とし穴(set/showルールのスコープ、contextの必要性、クロージャの変数コピー、パッケージバージョン管理など)を事前に提示し、初心者から上級者までスムーズに作業を進められるよう設計されています。

対応~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/AnisAbdellatif/skills/tree/main/skills/typst

Installed? Explore more 画像 skills: steipete/songsee, affaan-m/frontend-design, mattpocock/improve-codebase-architecture · View all 6 →

お気に入りのAIに質問する

このエージェントスキルを事前に読み込んだ状態で新しいチャットを開きます。

ドキュメント

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行のファイル)をコンパイルして試すことを推奨します。推測はしないでください。

ワークフロー

  1. 出力形式を明確にする: PDF(デフォルト)、HTML、PNG/SVG、アクセシブルPDF(PDF/UA)、アーカイブPDF(PDF/A)? ページサイズ、言語、フォント、引用スタイル、テンプレート/ジャーナルは?
  2. スケルトン(下記)または examples/ から開始する: ジャーナル/学位論文/CV/スライドデッキの場合、まずパッケージを検索: python3 scripts/search-packages.py "ieee paper"(references/packages-and-ecosystem.md を参照)。
  3. ファイルを作成する: set/show ルールとインポートを先頭に置き、その後にコンテンツを記述します。大規模なプロジェクトは #include と #import で分割します。
  4. コンパイルと確認: 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 を参照。
  5. フォーマット(利用可能な場合): typstyle -i file.typ。自分の編集範囲に限定されている場合のみ実行します。
  6. 作成/変更したファイルと再ビルド方法を報告します。

最小限のスケルトン

#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/layoutreferences/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

主な落とし穴(作成前に読むこと)

  1. set/showルールは前方に適用され、スコープ内でのみ有効。影響を与えたいコンテンツの前に配置すること。[...]/{...} 内の set はブロックの終わりで終了します。
  2. 位置/スタイルに依存するものを読み取るには context が必要: #context counter(page).get()、#context text.size。これがないと「can only be used when context is known」エラーが発生します。
  3. クロージャでキャプチャされた変数は読み取り専用のコピー。累積には fold、単一コードブロック内のループ、state、counter を使用します。
  4. # は1回のみ必要。マークアップ内で演算子を含む式には #(a + b) を使用。#f(x).g は動作しますが #f (x)(スペース)は関数呼び出しになりません。
  5. 数式はテキストではない: 複数文字の単語は記号/変数(alpha、sin)。テキストを書くには "text" または upright(...) を使用。単一文字は斜体の変数です。
  6. 文字列はコンテンツではない: 見出しの本文はコンテンツです。テキストを取得するには .body、str()、またはヘルパー to-string(構文リファレンス参照)を使用します。
  7. フォント: インストール済み/埋め込み/--font-path のフォントのみが機能。不明なファミリーは警告を出してフォールバックします。一覧は typst fonts で表示。可変フォントの場合は名前に「Variable」/「VF」を付けない(0.15)。
  8. パッケージは正確なバージョンでインポート: #import "@preview/cetz:0.5.3"。最新バージョンはTypst Universe(scripts/search-packages.py)で確認し、記憶に頼らないこと。新しいコンパイラにパッケージが追いついていない場合があります。
  9. 0.15での削除点: path() → curve()、pattern → tiling、pdf.embed → pdf.attach、*.decode(...) → バイト列を json(...) などに渡す、typst query → typst eval、パスにバックスラッシュ不可。
  10. 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.typPDF/A-2a + PDF/UA-1(--pdf-standard a-2a,ua-1)
examples/dual-target.typ単一ソース → PDFとHTML(context target()、html.*)
examples/query-export.typmetadata + typst eval による構造エクスポート
examples/slides-plain.typ、examples/letter.typパッケージなしのスライドと正式なレター
examples/packages-demo.typcetz、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のインデックスを検索し、現在のパッケージ名とバージョンを取得します。

Individual skills in this repo

This repo contains 1 individual skill — each has its own dedicated page.

関連スキル