Typstでファイルを分割して本を書く
はじめに
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には組み込みの関数で include
や import
といったものがあるようで、こちらを使ってtyp
ファイルの内容を読み込むことが出来ます。なお、include
の場合は、その内容をテキストとして読み込み、import
の場合には名前空間付きで読み込むようです。
== タイトル
説明
// 目次
#outline()
// 分割したファイルをinclude命令で読み込む
#include "1-chapter.typ"
#include "2-chapter.typ"
=== チャプター1 王の帰還
#lorem(12)
=== チャプター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や配列の機能があるようなので、こちらの機能を使って読み込みを簡略化してみましょう。
例えばこんな感じです。
== タイトル
説明
// 目次
#outline()
// 読み込みたいファイル名の配列を作成。
// 章を追加したらここにファイル名を追加する。
#let chapters = (
"1-chapter.typ",
"2-chapter.typ"
)
// For Loopで各チャプターを読み込む
#for chapter in (chapters) {
// 改ページ命令
pagebreak()
include(chapter)
}
出力結果はこのようになります。
1ページ目
2ページ目
3ページ目
参考文献を追加する
参考文献はファイルを分割した時にどうなるのか、と思い、実際にやってみました。まず、参考文献のリストを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
ファイルで参考文を呼び出す関数を記述します。
// ~~ 前略 ~~
#bibliography("Hayagriva.yaml", title: "参考文献")
あとは各チャプターで引用した項目を #cite(<key>)
で引用すると、引用番号が自動で付与されます。
=== チャプター1 王の帰還
#lorem(12) #cite(<electronic>)
// @electronic の記法でも可
=== チャプター2 王の出発
#lorem(12) #cite(<harry>)
出力結果はこのようになります。
分割先でもbibliography
を参照してくれた
終わりに
まだ情報が少ないTypstですが、コンパイルがとにかく早く、Latexと比べて日本語を導入するコストがほとんどないということが気に入っています。組み込みの機能も便利そうに見えますし、今後Typstを使って本を書いていこうと思っています。
また現状ではEpubへの出力の実装がないようなのですが、pandocを使うと完全ではないものの変換ができるようなので、そちらの機能を使ってみた時にはまた記事にしたいと思っています。
Discussion