⌨️

Typstでファイルを分割して本を書く

2024/06/19に公開

はじめに

TypstはRust製の組版ソフトウェアで、Latexの後続に当たるものです。
まだ出来てから歴史が浅く情報が少ない中で、ファイルの分割をどうするのか分からなかったので、調べたことをまとめました。

Typst CLIを導入する

TypstにはVSCodeの便利なプラグインがあり、ローカルで執筆する際にはこちらを使われている方も多いと思うのですが、このプラグインではPDFをレンダリングする際に、パスの指定に少し不便があります。そこでPDFのレンダリングにはCLIを直接つかいましょう。

CLIのインストール

Windowsの場合はScoopに登録されていたのでそちらがおススメです。

scoop install typst

Macの人はbrewにあったのでコチラを使ってもいいのではないでしょうか。

brew install typst

もちろん公式レポジトリから手動でインストールしてもらっても構いません。

CLIを用いたコンパイルと監視

導入できたら、適当なtypファイルをコンパイルしてみてください。コマンドは下記のようなものです。

typst compile ./path/to/src/main.typ ./path/to/output/main.pdf

このようなコマンドでPDFを出力することで、例えば/srcディレクトリに置いてあるtypファイルを/outputディレクトリに書き出すことが出来ます。

また、ファイルの変更時に自動でコンパイルを行うwatchコマンドも同じようにパスを受け付けます。

typst watch ./path/to/src/main.typ ./path/to/output/main.pdf

Typstでチャプターを分割する

調べるとTypstには組み込みの関数で includeimportといったものがあるようで、こちらを使ってtypファイルの内容を読み込むことが出来ます。なお、includeの場合は、その内容をテキストとして読み込み、importの場合には名前空間付きで読み込むようです。

main.typ
== タイトル

説明

// 目次
#outline()

// 分割したファイルをinclude命令で読み込む
#include "1-chapter.typ"
#include "2-chapter.typ"
1-chapter.typ
=== チャプター1 王の帰還
#lorem(12)
2-chapter.typ
=== チャプター2 王の出発
#lorem(12)

こちらをコンパイルするには大本のmain.typだけをコンパイル指定します。
今回の場合はこのようなコマンドになります。

ディレクトリ構造
├───.vscode
│       settings.json
│       
├───output
└───src
        1-chapter.typ
        2-chapter.typ
        main.typ
typst compile ./src/main.typ ./output/main.pdf

出力結果はこのようになりました。

チャプターの追加を簡略化する

Typstには組み込みでFor Loopや配列の機能があるようなので、こちらの機能を使って読み込みを簡略化してみましょう。
例えばこんな感じです。

main.typ
== タイトル

説明

// 目次
#outline()

// 読み込みたいファイル名の配列を作成。
// 章を追加したらここにファイル名を追加する。
#let chapters = (
  "1-chapter.typ",
  "2-chapter.typ"
)

// For Loopで各チャプターを読み込む
#for chapter in (chapters) {
  // 改ページ命令
  pagebreak()
  include(chapter)
} 

出力結果はこのようになります。


1ページ目

2ページ目

3ページ目

参考文献を追加する

参考文献はファイルを分割した時にどうなるのか、と思い、実際にやってみました。まず、参考文献のリストをyaml 形式で作成します。

Hayagriva.yaml
harry:
  type: Book
  title: Harry Potter and the Order of the Phoenix
  author: Rowling, J. K.
  volume: 5
  page-total: 768
  date: 2003-06-21

electronic:
  type: Web
  title: Ishkur's Guide to Electronic Music
  serial-number: v2.5
  author: Ishkur
  url: http://www.techno.org/electronic-music-guide/

その後、メインとなるtyp ファイルで参考文を呼び出す関数を記述します。

main.typ
// ~~ 前略 ~~
#bibliography("Hayagriva.yaml", title: "参考文献")

あとは各チャプターで引用した項目を #cite(<key>)で引用すると、引用番号が自動で付与されます。

1-chapter.typ
=== チャプター1 王の帰還
#lorem(12) #cite(<electronic>)
// @electronic の記法でも可
2-chapter.typ
=== チャプター2 王の出発
#lorem(12) #cite(<harry>)

出力結果はこのようになります。


分割先でもbibliographyを参照してくれた

終わりに

まだ情報が少ないTypstですが、コンパイルがとにかく早く、Latexと比べて日本語を導入するコストがほとんどないということが気に入っています。組み込みの機能も便利そうに見えますし、今後Typstを使って本を書いていこうと思っています。
また現状ではEpubへの出力の実装がないようなのですが、pandocを使うと完全ではないものの変換ができるようなので、そちらの機能を使ってみた時にはまた記事にしたいと思っています。

Discussion