Typst で製本用PDF を作りたい

2023/06/18に公開

Typst で製本用PDF を作りたい

なんで Typst?

製本用 PDF をつくることがあり。

差分を管理したいのでテキストがいいということで、 AsciiDoctor で作ることにした。
しかし。
AsciiDoctor だと禁則処理がいまいち正しくないとか色々あって、改造 して対応した。

でも。
レンダリング結果がいまいちとか AsciiDoc の文法が好きになれないとかいろいろあって乗り換えたい。

しかし TEX はしんどいのでもうちょっとライトなやつで行きたい。

そんなときに Typst を発見したので、使えるかどうか調べた。

できないと困ること

できないと困ることを思いつくままに。
ヌケモレあると思う。

フォントが埋め込まれる

PDF 内にフォントが埋め込まれてないと画面での見栄えと印刷の出来上がりが全然合わなくなるし、印刷屋から電話がかかってきていろいろめんどくさいことになる。

確認方法は Adobe Reader で見る以外に知らないんだけど、Typst でつくった PDF を見てみたらちゃんと「埋め込みサブセット」になっていたので OK っぽい。

日本語フォント

Mac の場合は --font-path /System/Library/Fonts 、 Windows の場合は --font-path c:\Windows\Fonts などと指定すると日本語フォントが使えるようになる。

AsciiDoctor とちがって ヒラギノ も使えるのでありがたい。

禁則処理

主たる開発者が日本語話者では無さそう(未調査)で、若いソフトウェアなので全然期待してなかったんだけど、これが万全。

まあ、 (U+30fc) と - (U+002d) で振る舞いが違うとか、もうちょっとこうした方がと思うところは無くはないけど、全然困らないレベルになっている。この点では AsciiDoctor よりずっと優れている。

表内表

Re:VIEW を諦めた理由は、Re:VIEW では表内表が書けないからだった。

Typst はどうかというと

万全。

AsciiDoctor と違って、表内と表外で文法が同じなので悩みがない。

セルの結合

ちょっと手軽な感じではないけど

https://github.com/typst/typst/issues/131#issuecomment-1479547933

によると、できる。

あるいは tablex を使うといいのかな。

PDFブックマーク

PDF を Adobe Reader で開いたときに、左のペインにでる「しおり」ってやつ。

outline で普通にできる。

我慢できるけどできてほしいこと

ページ番号を外側に

これは必須の要件ではないんだけど、書籍にしたときにページ番号をノドから遠い方に書きたい。

つまり、右ページならページ番号は右側、左ページなら左側にしたい。
AsciiDoctor なら recto / verso という指定があって、それぞれ別の ヘッダ を指定できる(フッタも)ので、困らない。

Typst にはそんな指定ないよなぁと思ったら。

#set page(
  // 略
  header: locate(loc => {
    if calc.odd(loc.page()){
      [
        #loc.page()
        #h(1fr)
        hoge
      ]
    } else {
      [
        hoge
        #h(1fr)
        #loc.page()
      ]
    }
  })
)

なければ実装すればいいのであった。

すばらしい。

ページ番号なしのページ

普通にできる。

#set page(
  numbering: (..nums) => nums.pos().at(0)-2,
  // 略
  )

のように計算し放題なので、そうしたければページ番号を
3 → 3.1 → 3.14 → 3.141 → ...
のようにすることだって、ページ番号が素数のときだけフォント変えることだってできる。

リンクありのテキストに下線や色をつけない

まだはっきり方法はわかってないけど、できそう。

背表紙

日本語の本で、背表紙がある。
本文は横書きだけど、背表紙は縦書きにするしかない。

CSS でいうところの writing-mode: vertical-rl; で書きたいけど、そういう指定をする場所が見つからない。

しかたがないので縦書き svg

を作って、これを

#image("spine.svg", width: 100%),

埋め込むと、

惜しい。括弧は縦書き用風になっているけど、句読点がおかしい。
音引きは一見正しそうだけど、よく見ると左右反転になっている。
「記号類は横書き用のフォントを適当に回転して使う」という実装になっている雰囲気。

コントリビュートしたいなぁ。Rust の経験が実質ゼロなので厳しいけど。

できないとちょっと困るけど未調査のこと

  • 図番号・表番号 を中途半端な数字から始める。
  • "3.2.1 ほげ" や "図 1 - ふが" へのリンクのテキストを "3.2.1 ほげ" や "図 1 - ふが" にする。

ということで

ということで、思いつく範囲内でできないと困ることは全部できる。
PDF の「文書のプロパティ」を入れる方法なんかがまだわかってないけど、まあ無理なら無理でいい。

Discussion