SATySFiでコミケのためのPOPを組んだ話

はじめに

この記事は SATySFi Advent Calendar 2021 22日目の記事です。

21日目の記事は今のところまだ誰も書いていないみたいです。

たまーにSATySFiで文書を書くMasWagです。主に弊サークル (yabaitech.tokyo) の記事を書くのにSATySFiを使っています。

さて、弊サークルは無事コミックマーケットC99に当選しました🎉

即売会で同人誌を頒布するとなると、頒布している同人誌の概要を書いたPOP(or おしながき)を作りたくなります。せっかくなのでPOPもSATySFiで組んでみよう!というのがこの記事の概要です。

できたもの

まず始めに今回コミケのために組んだPOPを紹介します。このPOPのソースコードはGitHubにてMITライセンスで公開しています。煮るなり焼くなり好きに使ってください。一応詳細な仕様条件はLICENSEを確認してください。

クラスファイルについて

上記の様な組版に対応したクラスファイルは (恐らく) 今のところ存在しないので、自分でクラスファイルを作成する必要がありました。筆者は過去にCV (英文履歴書)向けのクラスファイル (cv-satysfi) を作成したこともありましたので、クラスファイルの作り方については大体把握しているつもりです。クラスファイルの作り方自体については恐らくSATySFiの標準クラスファイルである stdja などを参考にするのが良いと思います。

さて、今回POPを組むにあたり必要な要素は大体以下の様になります。

  • 表紙画像と説明文を左右並行に組む
  • 全体的に新刊を大きめに、既刊を小さめに組む
  • 文字サイズなど再利用可能な部分はできるだけ再利用する
    • cf. DRY原則
    • 但し左右の分割比などある程度個別で指定した方が組版の仕上りが良くなるものについては個別指定できる様にする

二段並行組み

まず、表紙画像と説明文を左右に組むための、二段並行組み (と呼ぶのが適切なのかどうかは良くわかりませんが)必要となります。ちなみに、これは改ページの要領で左右に組む通常の二段組とは別のものとなります。 とはいえ、実は同様の二段並行組みについては以前CV (英文履歴書) をSATySFiで組んだ際 (記事 | GitHub) にも同様の組版を行なっていたので、基本的には使い回しとなります。

処理の流れは以下の様になります。

  • 左右の block-text 及び適切な幅分割の情報を受け取る
  • read-block で左右の block-textblock-boxes に変換
  • embed-block-topembed-block-bottom で上記の block-boxesinline-boxes に変換
  • 上記の inline-boxes を横方向に結合したものをpervasives.satyhform-paragraph によって block-boxes に変換

なお、二段並行組みについては汎用性が高そうですし文書クラスに依存しない処理なので、単体のパッケージ (parallel) として独立させてみました。Satyrographosからも手に入るのでぜひ使ってみてください。

その他の組版

二段並行組み以外の組版は通常の文書用の組版と大きな差はないですが、今回はよりsemanticな組版をできる様に各種コマンドを作成しました。以下では今回作成したコマンドの概要を説明しますが、詳細は pop.satyh を参照してください。

表紙画像の組版

表紙画像の組版は単に画像を表示するだけですが、毎回画像をサイズを指定するのも良くないので、 +front-image という表紙表示専用のコマンドを作成しました。また、新刊は大きめに、旧刊は小さめに表紙を表示したいので、そのための +front-image-new+front-image-old というコマンドも作成しました。シグネチャは以下の様になります。

direct +front-image-new : [string] block-cmd
direct +front-image : [string] block-cmd
direct +front-image-old : [string] block-cmd

巻数の組版

巻数の組版も単純に yabaitech.tokyo vol. 7 の様な文面を適切なフォント設定の元で表示すれば良いだけですが、今回はよりDRYにするということで +vol という専用のコマンドを作成しました。 +vol を使うことで、巻数を int で指定するだけで適切な内容を表示できます。また、巻数についても旧刊用のコマンドを作成しました。シグネチャは以下の様になります。

direct +vol : [int] block-cmd
direct +vol-old : [int] block-cmd

価格を表示するコマンド

価格についても巻数と同様にそのまま組むことができますが、今回はここも +price という専用のコマンドを作成しました。 +price を使うことで、品物の名前を string で指定し、価格を int で指定するだけで適切な内容を表示できます。また、価格の前に「各」と表示したい場合もあるので、価格の前に付ける文字列をオプション引数で与えられる様にしました。シグネチャは以下の様になります。

direct +price: [string?; string; int] block-cmd

pop.satyについて

POPの本体である pop.saty については、基本的に前述の各種コマンドを適宜組み合わせて組むだけです。左右の比や空行の挿入などは適宜バランスを見て調整しています。

まとめ

今回はコミケのためのPOPをSATySFiで組んでみました。同じ様なものをSATySFiで組む際に参考になれば幸いです。

また、同じ要領で学会発表用ポスターの組版等もSATySFiでできると思います。 筆者はスライドやポスターの様に読むのではなく見るものはWYSIWYGで組んだ方が速いと考えているので多分やらないですが