さらばTex。Typstの文法全集 〜1. マークアップ編〜
Typstとは?
Typstは次世代の組版システムです。組版システムとは、Texのようなものです。
TypstはTexに比べて
- 書き方がシンプルで楽
- コンパイルが速い
- インストール、環境構築が楽
といったメリットがあります。
特に理系の方であれば、Texを使用することは多いと思いますが、「環境構築に時間がかかった」、「書き方が複雑で覚えられない」、「コンパイルが遅い」 などの問題に直面したことがある方も多いでしょう。
Typstは、2023年に一般公開されたシステムで、これらの問題の多くを改善していることが特徴です。
Rustという今熱い言語で書かれていることも注目すべき点でしょう。
新しいシステムのためまだ完璧でない部分も多いですが、TeXでできる基本的な事項の多くは可能ですし、今後さらに発展していくことも期待されます。
実際Typstを使ってみたい! という方はこちらの記事を参考にしてください。
今回、何本かの記事に分けて、そのTypstの文法をなるべく包括的にまとめることを目指しています。
本記事はその第一弾で、文を書くために必要なマークアップ(文字修飾)に関する文法をまとめています。
今後、数式などの詳しい書き方などもまとめる予定です。
マークアップ (文字修飾)
typstには、マークアップ(文字修飾)をする方法として、構文と関数の2つが存在します。(厳密には、ほとんどの構文は関数のショートカットに過ぎません)。
例えば、太字強調をするには
| 構文 | 関数 |
|---|---|
*hoge* |
#strong[hoge] |
の2種類を用いることができます。どちらも、hogeの部分が太字となります。
構文の方がシンプルで書きやすいのに加え、Markdown記法と似た部分も多いため、通常書く際は構文を用いるといいですが、for文中などは関数を使用すると便利ですし、関数の方がより細かい設定を加えることができます。
文字修飾一覧
| 種類 (クリックで詳細) | 構文 | 関数 | 公式説明(英語) |
|---|---|---|---|
| 段落区切り | 1行空白 | #parbreak() |
parbreak |
| 改行 | \ |
#linebreak() |
linebreak |
| 太字強調 | *hoge* |
#strong[] |
strong |
| 斜体強調 | _hoge_ |
#emph[] |
emph |
| 生文字列 | `hoge` |
#raw() |
raw |
| ハイパーリンク |
https:// または http://
|
#link() |
link |
| ラベル | <hoge> |
#label() |
label |
| ヘッダー | = |
#heading() |
heading |
| 引用 | @hoge |
ref | |
| 箇条書きリスト | - |
#list() |
list |
| 番号リスト |
+ または1.
|
#enum() |
enum |
| 用語リスト | / 用語: 説明 |
terms | |
| 数式 | $ hoge $ |
Math | |
| 特殊引用符 |
'hoge' または "hoge"
|
smartquote | |
| 特殊文字 | $ hoge $ |
#sym.hoge |
Symbols |
| エスケープシーケンス | \ |
Escape sequences | |
| コメント |
/* hoge */または// hoge
|
Comment |
文字修飾の詳細な説明
段落区切り
| 構文 | 関数 |
|---|---|
| 1行空白 | #parbreak() |
- 使用例
アイウエオ
アイウエオ #parbreak()
アイウエオ

改行
| 構文 | 関数 |
|---|---|
\ |
#linebreak() |
- 使用例
アイウエオ\
`#parbreak()`と #parbreak()
`#linebreak()` では #linebreak()
行間が異なります。

太字強調
| 構文 | 関数 |
|---|---|
*hoge* |
#strong[hoge] |
アスタリスクで *太字* にできます。\
#strong[このような関数でも]同じ効果です。 \

斜体強調
| 構文 | 関数 |
|---|---|
_hoge_ |
#emph[hoge] |
This is _emphasized._ \
This is #emph[too.]

生文字列
| 構文 | 関数 |
|---|---|
` または ```
|
#raw() |
Markdownでのコードブロックの書き方と全く同じです。
言語を指定することで、自動で色がつきます。
`hoge` に具体的な意味はなく、一時的なものとして使われます。
Rust言語では関数を ```rust fn main()``` と書きますが、
C言語では ```c int main()``` となります。
```rust
fn main() {
println!("Hello World!");
}
```
このようにすると、 ``` `バッククオート` ``` をコードブロック中に入れることができます。

ハイパーリンク
| 構文 | 関数 |
|---|---|
https:// または http:// から始まる文字列 |
#link() |
#show link: underline
https://typst.app \
#link("https://typst.app")
#link("https://typst.app")[
Typst公式HPはこちら
]

ラベル
| 構文 | 関数 |
|---|---|
<hoge> |
#label() |
ラベルをつけることで、その書体を簡単に呼び出すことができます。
以下の例では、<a>に「青字にする」と言う機能を、赤文字にするというラベルに「赤字にする」と言う機能を、明朝太字というラベルに「フォントをヒラギノ明朝Proのボルド体にする」という機能をつけています。
#show <a>: set text(blue)
#show label("赤文字にする"): set text(red)
#show label("明朝太字"): set text(font: "Hiragino Mincho ProN", weight: "bold")
この行は青字になります。 <a>
日本語のラベルも可能です。 #label("赤文字にする")
うまく使うことで、楽で、しかも分かりやすいフォント指定ができます。 <明朝太字>

ヘッダー
| 構文 | 関数 |
|---|---|
= |
#heading() |
Markdownで言うところの#の役割を、typstでは=が担っています。
#set heading(numbering: "1.a)")のようにすることで、自動でナンバリング規則を定められます。
2023/10/17時点では、ナンバリングは、1.a, 1.A, 1.1, 1.などからの開始に対応しています。(1.0や1.bなどから開始しようとするとバグります)
#set heading(numbering: "1.a")
= はじめに
近年、日本近海では...
== 既存の問題点
さて、既存の最大の問題点は...
== 本研究の目的
本研究では...
= 本研究の概要

引用
| 構文 | 関数 |
|---|---|
@hoge |
なし |
<hoge>で設定した引用元を、@hogeで呼び出すことができ、自動でSection 1 やEquation 1などに変換されます。
.bibファイルにも対応しており、ここでのラベルを引用することもできます。
#set heading(numbering: "1.")
#set math.equation(numbering: "(1)")
= はじめに <intro>
本章では、...について述べる。
...は、ここ数年で注目を集めている。@hoge
さて、@results での結果から、...である。
さらに、@discussion で考察する。
= 結果 <results>
このような結果が得られた。
= 考察 <discussion>
この結果から、...である。
== 計算量 <perf>
@order から、いかに計算量が大きいかがわかる。
$ O(n) = 2^n $ <order>
#bibliography("works.bib")

箇条書きリスト
| 構文 | 関数 |
|---|---|
- |
#list() |
- 北海道
- 青森県
- 岩手県
- ...
- 文章が長くなり複数行にまたがる場合は、自動的にインテンドされることがわかります。
#list(
[ヘリウム],
[ネオン],
[アルゴン],
)

番号リスト
| 構文 | 関数 |
|---|---|
+または1.
|
#enum() |
1.を使うと手動で番号設定ができるため、番号をいじりたいときには便利です。
#set enum(numbering: "a)")などと設定することで、番号以外にもabcやいろはでのリストが作成できます。
+ 北海道
+ 青森県
10. このように番号を変えると
+ 番号が引き継がれます。
#enum([水素], [ヘリウム])
#enum(
enum.item(1)[水素],
enum.item(6)[炭素],
)
#set enum(numbering: "a)")
+ あいうえお
+ かきくけこ

用語リスト
| 構文 | 関数 |
|---|---|
/ 用語: 説明 |
なし |
用語の説明などに使用するためのもので、ぶら下がりインデントが使用されます。
/ Typst : 今注目されている新しい組版システム。2019年に開発が開始され、2023年3月にベータ版が一般公開された。Rustで書かれており、シンプルな文法やコンパイルの速さが利点。
/ Rust : メモリ安全性を保証しつつ、低レベルのシステムプログラミングが可能な言語。所有権システムを採用しており、ガベージコレクタがなくてもメモリリークやデータ競合を防ぐ。

数式
| 構文 | 関数 |
|---|---|
$ |
なし |
$で囲むと数式扱いとなります。TeXと違い、\などの入力は不要です。分数もそのまま2 / 3などとすればいいです(frac(2, 3)のような書き方もできます)。
$ x^2 + y^2 = 1 $
$ pi / 2 approx 1.57 $

特殊引用符
| 構文 | 関数 |
|---|---|
'または""
|
なし |
デフォルトだと""は普通の引用符となりますが、#set text(lang: "de")などとすることで、その言語の引用符を使用できます。
"普通の引用符"
#set text(lang: "de")
"ドイツ語の引用符"
#set text(lang: "fr")
"フランス語の引用符"

特殊文字
| 構文 | 関数 |
|---|---|
$ |
sym.hoge |
特殊文字を#sym.hogeのような形(または$で囲む)でショートカットで呼び出せます。
特殊文字の一覧はこちらの公式ドキュメントを参考にしてください。
アットマークは #sym.at で表示できます。
$ xor.big $
$ suit.spade $
などのように `$` で囲むと、その中の文字列を特殊文字として扱います。

エスケープシーケンス
| 構文 | 関数 |
|---|---|
\ |
なし |
\$1.50 でアイスを買った!

コメント
| 構文 | 関数 |
|---|---|
/* hoge */ または //
|
なし |
通常の文章 //これはコメントです。
/*
このようにすると、
複数行に渡った
コメントアウトができます。
*/
アイウエオ

最後に
Typstは非常に最近公開されたシステムのため、2023/10現在においてはそれらを日本語で解説する記事などは非常に少ないです。
日本語の記事で 2023/10 現在で見つけられるものを挙げておきます。 cd
この記事が皆様のお役に立てば幸いです!
今後もTypstの数式の書き方などその他の使い方についての記事を更新予定です。
Discussion
ref()関数の引数はlabel型なので、@hogeと同値の関数呼出は#ref(<foo>)です。(もちろん
#ref(label("foo"))とも書けますが。)用語リストについては、
terms()の可変長引数の部分にterms.item()を書きます。(
enum()とenum.item()の関係と同じです。)と同値になる関数呼出は
です。ただし
terms.itemは「2要素の配列」で代用できるようです。