📖

さらばTex。Typstの文法全集 〜1. マークアップ編〜

2023/10/19に公開
1

Typstとは?

Typstは次世代の組版システムです。組版システムとは、Texのようなものです。
TypstはTexに比べて

  • 書き方がシンプルで楽
  • コンパイルが速い
  • インストール、環境構築が楽

といったメリットがあります。
特に理系の方であれば、Texを使用することは多いと思いますが、「環境構築に時間がかかった」「書き方が複雑で覚えられない」「コンパイルが遅い」 などの問題に直面したことがある方も多いでしょう。

Typstは、2023年に一般公開されたシステムで、これらの問題の多くを改善していることが特徴です。
Rustという今熱い言語で書かれていることも注目すべき点でしょう。
新しいシステムのためまだ完璧でない部分も多いですが、TeXでできる基本的な事項の多くは可能ですし、今後さらに発展していくことも期待されます。

実際Typstを使ってみたい! という方はこちらの記事を参考にしてください。
https://zenn.dev/yuhi_ut/articles/how2start-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()
アイウエオ

Alt text

改行

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

Alt text

太字強調

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

Alt text

斜体強調

構文 関数
_hoge_ #emph[hoge]
This is _emphasized._ \
This is #emph[too.]

Alt text

生文字列

構文 関数
` または ``` #raw()

Markdownでのコードブロックの書き方と全く同じです。
言語を指定することで、自動で色がつきます。

`hoge` に具体的な意味はなく、一時的なものとして使われます。

Rust言語では関数を ```rust fn main()``` と書きますが、
C言語では ```c int main()``` となります。

```rust
fn main() {
    println!("Hello World!");
}
```

このようにすると、 ``` `バッククオート` ``` をコードブロック中に入れることができます。

Alt text

ハイパーリンク

構文 関数
https:// または http:// から始まる文字列 #link()
#show link: underline

https://typst.app \

#link("https://typst.app") 

#link("https://typst.app")[
  Typst公式HPはこちら
]

Alt text

ラベル

構文 関数
<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("赤文字にする")

うまく使うことで、楽で、しかも分かりやすいフォント指定ができます。 <明朝太字>

Alt text

ヘッダー

構文 関数
= #heading()

Markdownで言うところの#の役割を、typstでは=が担っています。
#set heading(numbering: "1.a)")のようにすることで、自動でナンバリング規則を定められます。
2023/10/17時点では、ナンバリングは、1.a, 1.A, 1.1, 1.などからの開始に対応しています。(1.01.bなどから開始しようとするとバグります)

#set heading(numbering: "1.a")
= はじめに
近年、日本近海では...

== 既存の問題点
さて、既存の最大の問題点は...

== 本研究の目的
本研究では...

= 本研究の概要

Alt text

引用

構文 関数
@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")

Alt text

箇条書きリスト

構文 関数
- #list()
- 北海道
- 青森県
- 岩手県
- ...


- 文章が長くなり複数行にまたがる場合は、自動的にインテンドされることがわかります。

#list(
  [ヘリウム],
  [ネオン],
  [アルゴン],
)

Alt text

番号リスト

構文 関数
+または1. #enum()

1.を使うと手動で番号設定ができるため、番号をいじりたいときには便利です。
#set enum(numbering: "a)")などと設定することで、番号以外にもabcいろはでのリストが作成できます。

+ 北海道
+ 青森県
10. このように番号を変えると
+ 番号が引き継がれます。

#enum([水素], [ヘリウム])

#enum(
  enum.item(1)[水素],
  enum.item(6)[炭素],
)

#set enum(numbering: "a)")

+ あいうえお
+ かきくけこ

Alt text

用語リスト

構文 関数
/ 用語: 説明 なし

用語の説明などに使用するためのもので、ぶら下がりインデントが使用されます。

/ Typst : 今注目されている新しい組版システム。2019年に開発が開始され、2023年3月にベータ版が一般公開された。Rustで書かれており、シンプルな文法やコンパイルの速さが利点。

/ Rust : メモリ安全性を保証しつつ、低レベルのシステムプログラミングが可能な言語。所有権システムを採用しており、ガベージコレクタがなくてもメモリリークやデータ競合を防ぐ。

Alt text

数式

構文 関数
$ なし

$で囲むと数式扱いとなります。TeXと違い、\などの入力は不要です。分数もそのまま2 / 3などとすればいいです(frac(2, 3)のような書き方もできます)。

$ x^2 + y^2 = 1 $

$ pi / 2 approx 1.57 $

Alt text

特殊引用符

構文 関数
'または"" なし

デフォルトだと""は普通の引用符となりますが、#set text(lang: "de")などとすることで、その言語の引用符を使用できます。

"普通の引用符"

#set text(lang: "de")
"ドイツ語の引用符"

#set text(lang: "fr")
"フランス語の引用符"

Alt text

特殊文字

構文 関数
$ sym.hoge

特殊文字を#sym.hogeのような形(または$で囲む)でショートカットで呼び出せます。
特殊文字の一覧はこちらの公式ドキュメントを参考にしてください。
https://typst.app/docs/reference/symbols/sym/

アットマークは #sym.at で表示できます。
$ xor.big $ 
$ suit.spade $
などのように `$` で囲むと、その中の文字列を特殊文字として扱います。

Alt text

エスケープシーケンス

構文 関数
\ なし
\$1.50 でアイスを買った!

Alt text

コメント

構文 関数
/* hoge */ または // なし
通常の文章 //これはコメントです。

/*
このようにすると、
複数行に渡った
コメントアウトができます。
*/

アイウエオ

Alt text

最後に

Typstは非常に最近公開されたシステムのため、2023/10現在においてはそれらを日本語で解説する記事などは非常に少ないです。

日本語の記事で 2023/10 現在で見つけられるものを挙げておきます。
https://zenn.dev/yuhi_ut/articles/how2start-typst
cd

この記事が皆様のお役に立てば幸いです!

今後もTypstの数式の書き方などその他の使い方についての記事を更新予定です。

Discussion

某ZR某ZR

それで記述ができないため関数欄は空欄にしています。

ref()関数の引数はlabel型なので、@hogeと同値の関数呼出は#ref(<foo>)です。
(もちろん#ref(label("foo"))とも書けますが。)

用語リストについては、terms()の可変長引数の部分にterms.item()を書きます。
enum()enum.item()の関係と同じです。)

/ Foo: Hoge
/ Bar: Fuga

と同値になる関数呼出は

#terms(terms.item[Foo][Hoge], terms.item[Bar][Fuga])

です。ただしterms.itemは「2要素の配列」で代用できるようです。

#terms(([Foo], [Hoge]), ([Bar], [Fuga]))