Typst 用のテンプレートを使う
前回に引き続きページ設定等について調べようと思ったのだが,いいものを見つけてしまった。
Typst について調べていくうちに「思ったより面倒が多いし,独りでフルスクラッチで組むのは不毛じゃないの?」と思い始めていて,使い勝手のよさそうなテンプレートかパッケージを探していたところであった。
そこで今回は予定を変更して typst-js
を導入して簡単な文書を作ってみようと思う。
その上で次回以降から更に Typst の機能について調べていくことにする。
Typst Universe
そのまえに Typst Universe について。
Typst では Typst Universe でパッケージやテンプレートを収集している。
たとえば「工学系の日本語の学会論文テンプレート」である jaconf-mscs
なら
$ typst init @preview/jaconf-mscs my-project
Successfully created new project from @preview/jaconf-mscs:0.1.0 🎉
To start writing, run:
> cd my-project
> typst watch main.typ
という感じに雛形のファイルを生成してくれる。
生成された main.typ
の最初の部分をちょっと見てみると
// MIT No Attribution
// Copyright 2024, 2025 Shunsuke Kimura
#import "@preview/jaconf-mscs:0.1.0": jaconf, definition, lemma, theorem, corollary, proof, appendix
という記述があり,ここでパッケージをリモートからインポートしている。
続く jaconf, definition, ...
はパッケージ内で定義されている関数である。
これでテンプレートの導入は大体分かったかな。
LaTeX jsarticle/jsbook ベースのテンプレート
okumuralab/typst-js は『LaTeX美文書作成入門』でおなじみ奥村晴彦さんによる Typst 用のテンプレート。
奥村晴彦さんは $\mathrm{\LaTeX}$ 用のドキュメントクラスである jsarticle
/jsbook
の作者でもあり,日本語組版のノウハウが反映されることが期待できる(実際には typst-js
はまだ試行錯誤中とのこと)。
ありがたや 🙇
okumuralab/typst-js リポジトリにある template/example.typ
を見ると
#import "@preview/js:0.1.0": *
となっていたので Typst Universe に登録されているのかと思ったが typst init
しようとしたら怒られてしまった。
というわけで template/example.typ
の記述を見ながら手動でファイルを作ってみる。
こんな感じ。
#import "js.typ": *
#show: js.with(
lang: "ja",
seriffont: "New Computer Modern",
seriffont-cjk: "BIZ UDMincho",
sansfont: "Liberation Sans",
sansfont-cjk: "BIZ UDGothic",
paper: "a4",
fontsize: 10pt,
baselineskip: auto,
textwidth: auto,
lines-per-page: auto,
book: false,
cols: 1,
non-cjk: "latin-in-cjk",
cjkheight: 0.88,
)
#maketitle(
title: "Go のエラーハンドリング",
authors: "Spiegel",
abstract: [
Go のエラーハンドリングについて今まで書いた駄文を「全部入り」で本の形にしてみようと思う。
],
keywords: ("golang", "error", "programming"),
date: "2025年2月24日"
)
#outline() #v(1em)
= はじめに
プログラミングにおいて,正常系は基本的に「一本道」だが,異常系は(予期しないものも含めて)無数にある。
エラーハンドリングは巨大迷路パズルを袋小路から順に塗りつぶして「正解」をあぶり出していく作業に似ていると思う。
下手くそな迷路攻略はただの「作業」だが,*よく考えられた迷路は袋小路の配置も美しい*。
こんなふうに考えるなら,プログラム設計の肝は#ruby[エラー][袋小路]をどう記述するかにかかっている,と言えるだろう。
私が Go のエラーハンドリングについて最初に記事にしたのは2015年のことだが,あれから Go も少しずつ変わっているし,私も当時よりは多少なりと理解が進んだと思うので,今まで書き散らかした駄文を「全部入り」で本の形にしてみようと思う。
文章の元ネタは拙文「Go のエラーハンドリング」より(いつか PDF 化したいと思っている)。 インポートは
#import "js.typ": *
としてローカルのカレントディレクトリにある js.typ
を示すようにした。
使用する関数を列挙しなくてもワイルドカード(*
)が使えるんだな。
フォントの選択については前に書いた「ローカルで Typst 環境を整える」を参照のこと。
Book 形式ではないので book
の値は false
とした。
ページ内カラム数は1。
non-cjk
は Typst で定義されている "latin-in-cjk"
とした。
正規表現での指定もできるらしい。
あとはデフォルトのままかな。
ちなみに著者は複数記述でき,かつ所属とアドレスも記述できる。 こんな感じ。
authors: (("何山 何某", "某大", "username@example.org"), ("何野 何某", "某大"))
さて,これをコンパイルしてみる。 このときのコマンドは
$ typst compile --pdf-standard a-2b sample.typ
として PDF/A として構成するようにする1。 結果は以下の通り。

出力した PDF ファイルのプロパティはこんな感じ。

フォントの埋め込みは問題なし。 日本語のタイトルの文字化けもなし。 形式も PDF/A-2b で構成されてるっぽい。 念のため Windows 環境の Adobe Reader でも開いてみたけど,大丈夫かな。

よし。 これでOKにしよう。
履歴書テンプレート
もうひとつテンプレートを紹介しておこう。
データとコードの分離が甘い気もするが,組版の仕上がり を見る限り,かなりよく出来ている。 近年は $\mathrm{\LaTeX}$ では履歴書しか書いてないので Typst で書けるのならいよいよ $\mathrm{\TeX}$ 環境は要らなくなるかなぁ。 フォントファイルだけ何処かに退避させて他は削除してもいいかもしれない。
その他
日本語組版情報にある「日本語テンプレート」を見ると学会による公式テンプレートが既に幾つか公開されているようだ。 他にはソフトウェア設計書のテンプレートもあるみたいでちょっと気になるところである。
探せば他にも色々あるだろうが,ぼちぼち探していこう。
ブックマーク
ブックマークは「Typst に関するブックマーク」にてまとめています。
参考文献
- Typst完全入門: LaTeXより簡単、Markdownより強力、美しいドキュメント作成術
- doitsu (著)
- 2024-12-08 (Release 2024-12-08)
- Kindle版
- B0DPXBNTRS (ASIN)
- 評価
マークアップ言語および組版ツールである Typst についての解説。 Kindle 版のみの提供。固定レイアウトではないためレイアウトが崩れまくって読みにくい。この手の技術解説書は固定レイアウトの Kindle 版か,いっそ PDF で出してほしい。でも Typst についてまとまった解説のある日本語の本は他に見当たらなかったのでありがたい。
- [改訂第9版]LaTeX美文書作成入門
- 奥村 晴彦 (著), 黒木 裕介 (著)
- 技術評論社 2023-12-09 (Release 2023-12-09)
- 単行本(ソフトカバー)
- 4297138891 (ASIN), 9784297138899 (EAN), 4297138891 (ISBN)
- 評価
2023年末に出てるのに気が付かなかった orz
今回は版元で PDF 版を買った。
-
PDF/A については拙文「LuaLaTeX で PDF/A を構成する」を参考にどうぞ。 ↩︎