typeset / jtypeset

縦書き・横書きの日本語組版を 1 つのエンジンで行い、同じ組版結果を PDF / SVG / PNG に出すライブラリです。 Python パッケージ jtypeset と、Markdown から日本語の PDF を作るコマンド jtypeset-md が付いています。

まず何をしたいか

したいこと 読むところ
Markdown を書いて PDF にしたい Markdown → PDF の手引き
ゲームのタグ付きテキストを組みたい タグ記法
Python から段落・表・画像を組んで PDF にしたい Python ガイドPython リファレンス
C++ から使いたい、組み込みたい C++ ガイドC++ リファレンス
ソースからビルドしたい ビルド
中の仕組みを知りたい 技術解説

インストール(Python)

pip install "jtypeset[md]"          # Markdown → PDF まで
jtypeset-md report.md               # → report.pdf

wheel は Windows (x64) / Linux (manylinux_2_28 x86_64) / macOS (Apple Silicon・Intel) の CPython 3.9〜3.13 を用意しています。 ほかの環境は ビルド を見てソースから入れてください。

できること

  • JLReq に沿った約物の詰め・禁則・追い込み/追い出し・ぶら下げ・両端揃え、Greedy / Knuth–Plass の行分割
  • ルビ(グループ/モノ/熟語)・縦中横・圏点・割注・字取り
  • 見出しの採番と PDF のしおり、目次、索引、図表番号と相互参照、脚注(ページごとの番号も可)
  • 箇条書き、コードブロック(色付け)、表(自動列幅・colspan / rowspan・ヘッダ繰り返し・ページまたぎ)、画像と回り込み
  • 段組・段抜き・最終ページの段揃え、柱・ノンブル、見開きの余白
  • LaTeX 数式(同梱の MicroTeX、数式フォントで PDF に埋め込み)、グラフなど外部レンダラの出力(SVG)の差し込み
  • 文字の装飾: 下線・打消し線(縦組みでは傍線)、影(ぼかし)、二重縁取りなどの多層外観、グラデーションの塗り
  • フォント: 同じ family の複数ウェイト/斜体から最近傍を選ぶ、メタデータだけ登録して初回使用時に開く、言語ごとのフォント、 バリアブルフォントの軸指定、OpenType feature(palt など)
  • 欧文の折返しの選択(語/字/折り返さない)とハイフネーション(TeX のパターン)、禁則の強弱、省略記号、タブストップ、 ぶら下げインデント、箱に収まるまでの自動縮小
  • 双方向テキスト(アラビア文字・ヘブライ文字を UAX #9 で並べ替え)
  • ゲーム向けのタグ記法<b> <ruby> <color> <outline> <link> …)と、リンク・ヒットテスト・キャレット・ 段階表示のための取り出し口
  • PDF はフォントをサブセットで埋め込み、埋め込み許可(fsType)を確認。SVG と PNG も同じ組版結果。カラー絵文字も 3 つで同じ色

出力例

同じ Markdown(report.md)を組んだ PDF をそのまま見られます:

1 ページ目の画像と作り方は サンプル(Markdown と PDF) に。C++ のサンプル(台本・小説・技術文書・レポート)は リポジトリの samples/ にあります。