はじめに
皆さん、Typstをご存知でしょうか?
Typstは、LaTeXにも代わりうる新しい組版システムで、美しいドキュメントを(比較的)簡単に作成できることができます。
Typstは、シンプルで直感的な構文を持ち、リアルタイムプレビュー機能も備えているため、初心者でも扱いやすいのが特徴です。
これまでの僕の記事では、LaTeXを中心にドキュメント作成の方法を紹介してきましたが、Typstも非常に魅力的な選択肢です。
ローカルで環境を整えるというのはインターネット環境に左右されないという利点を強調してきた一方で、実際問題それほど問題になるケースが少なく、オンラインエディタで文書を作成するというのも十分に実用的です。
TypstはOverleafのようなオンラインエディタを提供しており、なおかつリアルタイムプレビューも備えているため、LaTeXのようにコンパイルを待つことなく書いた内容を確認することができます。
この記事では、Typstの基本的な使い方を紹介します。
書き方がLaTeXとは異なるので最初は戸惑うかもしれませんが、慣れれば非常に便利ですので、ぜひ試してみてください。
Typstの準備
Typstはローカルにインストールする必要がなく、オンラインエディタで直接ドキュメントを作成できます。
- Typstにアクセスし、アカウントを作成します。
- 初めてであればSign Upからアカウントを作成してください。
- ログイン後、ダッシュボードから「Empty document」をクリックして新しいドキュメントを作成します。

- ドキュメントエディタが開きます。ここでTypstのコードを記述します。
- ファイルの拡張子は
.typです。
- ファイルの拡張子は

Typstの基本的な書き方
Typstを使い始める前に、まずは基本的な構文から説明します。
ここで紹介する内容はTypst全般に共通する基本事項であり、テンプレートを使わない場合でも役立つ知識です。
最初はややこしいかもしれませんが、慣れてしまえばLaTeXよりもシンプルだと思いますので、ぜひ挑戦してみてください。
はじめてのTypst文書
まずは最もシンプルなTypst文書を作成してみましょう。
- オンラインエディタを開き、新しいドキュメントを作成します。
- 以下のようにシンプルなテキストを書いてみてください。
= はじめに
これはTypstで書いた文書です。
Typstではリアルタイムでプレビューが表示されるので、すぐに結果を確認できます。たったこれだけで、セクション見出し付きの文書が完成します。LaTeXのように\documentclassや\begin{document}といった複雑な設定は不要です。
セクション
セクションは=を使って作成し、サブセクションは==というようにイコールの数で階層を表現します1。
= セクション1
== サブセクション1.1ちなみに今回の設定ではセクション番号が表示されるようになっているので、「1 セクション1」のように自動的に番号が振られます。
段落
段落を改める場合、2通りの方法が使えます。
- 空行を挟む
これは1つ目の段落です。
これは2つ目の段落です。- バックスラッシュを使う
これは1つ目の段落です。\
これは2つ目の段落です。この場合は空行を入れなくても段落が分かれます。
強調
強調したい部分は*で囲みます。
これは*強調*されたテキストです。また、イタリック体にしたい場合は_で囲みます。
これは_イタリック体_のテキストです。箇条書き
箇条書きは-を使って作成します。
- アイテム1
- アイテム2
- サブアイテム2.1
- サブアイテム2.2番号付きリスト
番号付きリストは1.を使って作成します。
1. アイテム1
2. アイテム2数式
$...$で囲むことでインライン数式を作成できます。
これはインライン数式の例です:$E=mc^2$。ブロック数式は同じく$...$で囲みますが、改行をしてください。
$
E = m c^2
$文字を並べる場合にはスペースを空けてください。mc^2と詰めて書くと表示されなくなってしまいます。
図の挿入
図は#figure(...)を使って挿入します。
#figure(
image(
"path_to_image.png",
width: 30%
),
caption: [これは図のキャプションです。]
)<my-fig>#figure(...)内でimage(...)を使って画像を指定し、caption引数でキャプションを設定します。width引数で画像の幅を指定できます。
また、<my-fig>のように任意のラベルを付けることで、後で参照することができます。文書内で引用したい場合は@my-figと書きます。
表の挿入
表は#figure(...)内でtable(...)を使って挿入します。
#figure(
table(
columns: 12,
align: (left, right, right, right, right, right, right, right, right, right, right, right),
table.hline(),
table.header(repeat: true,
[model], [mpg], [cyl], [disp], [hp], [drat], [wt], [qsec], [vs], [am], [gear], [carb],
),
table.hline(),
[Mazda RX4], [21.0], [6], [160], [110], [3.90], [2.620], [16.46], [0], [1], [4], [4],
[Mazda RX4 Wag], [21.0], [6], [160], [110], [3.90], [2.875], [17.02], [0], [1], [4], [4],
[Datsun 710], [22.8], [4], [108], [93], [3.85], [2.320], [18.61], [1], [1], [4], [1],
[Hornet 4 Drive], [21.4], [6], [258], [110], [3.08], [3.215], [19.44], [1], [0], [3], [1],
[Hornet Sportabout], [18.7], [8], [360], [175], [3.15], [3.440], [17.02], [0], [0], [3], [2],
[Valiant], [18.1], [6], [225], [105], [2.76], [3.460], [20.22], [1], [0], [3], [1],
table.hline(),
table.footer(repeat: false,
table.cell(align: left, colspan: 12,
text([
#text(style: "italic")[Note:] This table shows the first few rows of the mtcars dataset.
])
),
),
),
caption: [mtcars data],
)<mtcars>ポイント:
table(...)内で列数や配置、ヘッダー、フッター、データ行を指定します。columns引数で列数を指定し、align引数で各列の配置を設定します。table.header(...)でヘッダー行を、table.footer(...)でフッター行を設定します。フッターは複雑ですが、colspanとフッター文をうまく変えながら調整してください。- データ行はカンマ区切りで各セルの内容を指定します。
- 表も図と同様に
<mtcars>のようにラベルを付けることができ、@mtcarsで参照できます。
表の設定は少々ややこしいのですが、Rで作った表をTypstで出力するというのが1つ手としてあるかと思います。
今回はその方法については書きませんが、必要であれば調べてみてください。
また、Typstの公式ドキュメントのページも参考にしてみてください。
脚注
脚注は#footnote[...]を使って挿入します。
これは脚注の例です#footnote[これは脚注の内容です。]。引用文献
引用文献は#bibliography(...)を使って挿入します。
#bibliography("references.bib")このセクションの見出しを変更したい場合は、以下のように前もって書いておきます。
#set bibliography(
title: "参考文献"
)
#bibliography("references.bib")references.bibはBibTeX形式の文献データファイルです。自分で用意した.bibファイルをアップロードして指定してください。
文中で引用したい場合は、#cite(<notsu_indirect_2025>, form: "prose")のように書きます。<notsu_indirect_2025>は.bibファイル内で指定したラベルです。form: "prose"は引用形式を指定するオプションで、省略可能です。この設定だと
Notsu et al. (2025)
のように表示されます。
(Notsu et al. 2025)
のように表示したい場合は@notsu_indirect_2025のように書きます。こちらは楽でいいですね。
2つ以上並べたい場合は@notsu_indirect_2025 @martinez_how_2022のようにスペースで区切ってください。
後に僕が作成したテンプレートを用いた例を示しますが、そこでは引用スタイルとしてtemplate.typ内でchicago_author_date.cslを指定しています。別のスタイルに変更したい場合は、他のCSLファイルをダウンロードしてアップロードし、template.typ内の該当部分を書き換えてください。
Typst基本文法のまとめ
ここまでで、Typstの基本的な文法を一通り学びました。
- セクション:
=、==でレベルを表現 - 段落: 空行またはバックスラッシュ
\で区切る - 強調:
*太字*、_イタリック_ - 箇条書き:
-で開始 - 番号付きリスト:
1.、2.で開始 - 数式:
$...$で囲む(インライン・ブロック両対応) - 図表:
#figure(...)で挿入し、<label>でラベル付け、@labelで参照 - 脚注:
#footnote[...] - 引用:
@cite-keyまたは#cite(...) - 改ページ:
#pagebreak()
これらの基本文法は、テンプレートを使う場合も使わない場合も共通です。次のセクションでは、これらの知識を活用しながら、テンプレートを使った実践的な文書作成に進みます。
テンプレートを使った実践
基本的な書き方を学んだところで、次は僕が作成した経済学論文向けのテンプレートを使って、より本格的な文書を作成してみましょう。
テンプレートを使うことで、表紙のレイアウトや文献スタイル、フォーマットなどの細かい設定を自分で行う必要がなくなります。 もっと根本的に学びたい方はTypstの公式ドキュメントを参照してください。
テンプレートの準備
まず、以下の2ファイルをダウンロードするか、GitHubからご利用ください。
2つのファイルを準備できたら、Typstのエディタにアップロードします。サイドバーの「・・・」メニューから「Upload a new file」を選択してアップロードするか、ドラッグアンドドロップでアップロードします。 template.typとchicago_author_date.cslが表示されている状態でスタートします。
テンプレートを使った表紙の作成
先に完成イメージを共有しておきます。
テンプレートの最大の利点は、複雑な表紙を簡単に作成できることです。表紙のイメージは以下です。

これを目指していきたいと思います。
- サイドバーの アイコンから新規ファイルを作成します。
- ファイル名は
main.typとしますが、任意の名前で構いません。
- ファイル名は
main.typに以下のコードを記述します。
#import "template.typ": articleこれはtemplate.typからarticleコンポーネントをインポートするコードです。このarticleに表紙の設定が含まれています。 今回は設定は既定のまま使用しますが、template.typ内のarticleコンポーネントを編集することで、諸々の細かい点を調整できます。
- 次に、表紙の内容を記述します。
main.typに以下のコードを追加します。
#show: article.with(
title: [Minimal Article Template (Test)#footnote[#lorem(150)]],
authors: (
(
name: "Yosuke Abe",
affiliation: "Example University",
email: "yosuke.abe0507@gmail.com"
),
(
name: "Taro Yamada",
affiliation: "Example University",
email: "taro@example.jp"
)
),
date: datetime.today().display("[month repr:long] [day], [year]"),
abstract: [
#lorem(150)
],
jel-codes: (
"A1",
"A2",
"A3",
"A4"
),
keywords: (
"Keyword 1",
"Keyword 2",
"Keyword 3"
)
)ポイント:
#show: article.with(...)は、articleコンポーネントを表示するためのコードです。title、authors、date、abstract、jel-codes、keywordsなどの引数を指定して、表紙の内容を設定します。titleには#footnote[...]を使って脚注を追加しています。謝辞を入れたい場合などに便利です。 著者は1人でも構いませんし、3人まで対応しています。また、jel-codesやkeywordsも任意です。dateは現在の日付を自動的に取得して表示します。文字列で直接指定することも可能です。abstract内の#lorem(150)はダミーテキストを生成する関数ですので、実際の文章に置き換えてください。
Typstはコンパイルが要りませんから、コードを記述するとリアルタイムでプレビューが表示されます。上の設定で先ほどの表紙が表示されるはずです2。
テンプレートを使った本文の作成
表紙ができたら、次は本文を書いていきます。先述の基本文法を使って、実際の文書を作成してみましょう。
テンプレートではセクション番号が自動的に振られるようになっているので、「1 Introduction」のように表示されます。先ほどの基本文法(セクション、数式、図表、引用など)をそのまま使えば、美しいレイアウトで文書が完成します。
Appendix
基本文法のところで参考文献の書き方を説明しましたが、アペンディクスを参考文献の後に差し込みたいかもしれません。参考文献はデフォルトでは1番最後のセクションになるので少々やっかいですが、以下のように記述し、その下に文章を書いていってください。
#block[
#heading(
level: 1,
numbering: none,
[Appendix]
)
]これでアペンディクスのセクションが作成されます。
完成例のコード全文
ここまでの内容をまとめた、完成版のコード全文を以下に示します。テンプレートのインポートから表紙設定、本文の記述まで、全てが含まれています。長いので折りたたんで置いておきますので、開いてご確認ください。
#import "template.typ": article
#show: article.with(
title: [Minimal Article Template (Test)#footnote[#lorem(150)]],
authors: (
(
name: "Yosuke Abe",
affiliation: "Example University",
email: "yosuke.abe0507@gmail.com"
),
(
name: "Taro Yamada",
affiliation: "Example University",
email: "taro@example.jp"
)
),
date: datetime.today().display("[month repr:long] [day], [year]"),
abstract: [
#lorem(150)
],
jel-codes: (
"A1",
"A2",
"A3",
"A4"
),
keywords: (
"Keyword 1",
"Keyword 2",
"Keyword 3"
)
)
= Introduction
#lorem(500)#footnote[#lorem(100)]
$
E = m c^2
$
#lorem(500)
= Section
Insert an image. #lorem(100)
#figure(
image(
"seiji_souridaijin_woman_kaiken.png",
width: 30%
),
caption: [Prime Minister]
)<prime-minister>
@prime-minister depicts a _female_ prime minister.
- item 1
- item 2
- item2.1
1. item 1
2. item 2
#lorem(100)
Insert an table. #lorem(100) According to @notsu_indirect_2025 @martinez_how_2022, hogehoge.
#figure(
table(
columns: 12,
align: (left, right, right, right, right, right, right, right, right, right, right, right),
table.hline(),
table.header(repeat: true,
[model], [mpg], [cyl], [disp], [hp], [drat], [wt], [qsec], [vs], [am], [gear], [carb],
),
table.hline(),
[Mazda RX4], [21.0], [6], [160], [110], [3.90], [2.620], [16.46], [0], [1], [4], [4],
[Mazda RX4 Wag], [21.0], [6], [160], [110], [3.90], [2.875], [17.02], [0], [1], [4], [4],
[Datsun 710], [22.8], [4], [108], [93], [3.85], [2.320], [18.61], [1], [1], [4], [1],
[Hornet 4 Drive], [21.4], [6], [258], [110], [3.08], [3.215], [19.44], [1], [0], [3], [1],
[Hornet Sportabout], [18.7], [8], [360], [175], [3.15], [3.440], [17.02], [0], [0], [3], [2],
[Valiant], [18.1], [6], [225], [105], [2.76], [3.460], [20.22], [1], [0], [3], [1],
table.hline(),
table.footer(repeat: false,
table.cell(align: left, colspan: 12,
text([
#text(style: "italic")[Note:] This table shows the first few rows of the mtcars dataset.
])
),
),
),
caption: [mtcars data],
)<mtcars>
@mtcars is mtcars data. #lorem(500)
#bibliography("references.bib")
#pagebreak()
#block[
#heading(
level: 1,
numbering: none,
[Appendix]
)
]
#lorem(500)このコードでは、前半で説明したTypstの基本文法(セクション、数式、図表、箇条書き、引用など)を活用しながら、テンプレートが提供する表紙機能や自動番号付けなどの恩恵を受けています。
おわりに
ここまでTypstの基本的な使い方と、テンプレートを使った実践的な文書作成方法を紹介しました。
内容の振り返り
この記事では、大きく2つに分けて説明をしました。
- Typstの基本文法 - セクション、段落、強調、箇条書き、数式、図表、脚注、引用など、Typst全般で使える基本的な書き方
- テンプレートを使った応用 - 経済学論文向けのテンプレートを使って、表紙や本文を効率的に作成する方法
基本文法をしっかり理解しておけば、テンプレートを使わない場合や別のテンプレートを使う場合でも応用が利きます。一方、テンプレートを活用することで、複雑な設定を気にせず、内容の執筆に集中できるようになります。
さらに学ぶために
ある程度の機能はご紹介できたかと思いますが、実際に論文を書くとなるともっと細かい設定が必要になることもあるかと思います。
より高度な使い方を学びたい場合は、Typstの公式ドキュメントをご参照ください。また、気づいた点があれば随時テンプレートを更新していきたいと思います。
Typstは非常に強力で柔軟な組版システムです。LaTeXに比べてシンプルで直感的な構文を持ちながら、リアルタイムプレビュー機能によって執筆体験が大幅に向上します。ぜひこの記事を参考に、Typstでの文書作成にチャレンジしてみてください。