関数でデザインを設定するSATySFiのクラスファイルについて

これは

の25日目の記事です。

概要

satysfi-class-templateというクラスファイルを作りました。これは

  • タイトル
  • 概要
  • 目次
  • 節構造
  • 参考文献
  • 付録
  • 浮動図
  • 多段組
  • 参照
  • 脚注
  • リンク
  • フォント設定

に対応しています。これにより、現実的なコード量でデザインについて変更することができ、そして高品質な組版をすることができます。具体的には、既存の学会テンプレートを再現することができました。

使い方

インストール

ドキュメントがまだ整備しきれていないため安定リリースはしていませんが、以下のコマンドによりインストールすることができます。依存ソフトウェアはSATySFi, satyrographos, gitです。

git clone git@github.com:puripuri2100/satysfi-class-template.git
cd satysfi-class-template
opam pin add -y "file://$PWD"
satyrographos install

簡単な使い方

ドキュメントファイル冒頭で

@require: class-template/class-template

とすることで読み込むことができ、たとえば以下のようにして使うことができます。詳細はhttps://github.com/puripuri2100/satysfi-class-template/blob/master/doc/demo.satyから見ることができます。

@require: class-template/class-template

open ClassTemplate
in

document (
  default-setting
  |> set-title {タイトル\footnote{title}}
  |> set-author {\@puripuri2100\thanks{\url(`https://github.com/puripuri2100`);} \@puripuri2100\thanks{\url(`https://github.com/puripuri2100`);}}
  |> set-show-toc true
  |> set-title-page false
  |> set-multicolumn 2
  |> set-abstract ('<
    +abstract ?:({Abstract}) <
      +p{Cras bibendum elit vel tellus ultrices vestibulum. Curabitur euismod tempus ex. Aliquam sed lectus at nulla porttitor ornare vitae ac odio. Donec volutpat augue ac quam elementum sollicitudin. Donec ac metus in urna auctor lobortis volutpat dictum quam. Cras id quam sed erat tempor tempor id et leo.}
    >
  >)
  |> set-paragraph-margin-top-ratio 1.5
  |> set-paragraph-margin-bottom-ratio 0.5
  |> set-table-title-fun (fun i -> (let i = i |> arabic |> embed-string in {Table\ #i;:\ }))
  |> set-introduction '<
    +section ?* ?:(true) {はじめに} <
      +p{はじめにです}
    >
  >
  |> set-doc-link-color (1pt, Color.red)
  |> set-url-link-color (1pt, Color.blue)
) '<
  +section {section} <
    +section {sub section} <
      +section ?:(`ref`) ?:(false) {sub sub section} <
        +p{text\ref(`ref`);}
      >
    >
  >
>

以上のコードをPDFに変換すると

デモ

という見た目になり、多段組や様々なデザインの変更ができることが解ると思います。set-*という関数で設定を変更し、実現したいデザインや挙動に近づけていきます。

拡張

これらの関数を組み合わせることで実現していきますが、組み合わせが事前に用意できるものについてはすでに用意しています。具体的には紙面サイズやフォントの設定などです。

読み込みと使用は次のようにします。

@require: class-template/expand

open ClassTemplateExpand

in

document (
  default-setting
  |> set-a0
  |> set-fonts-noto-regular
) '<
  +p{text}
>

高度な使い方

class-templateを下地にした上でコマンドや設定を加えた新しくクラスファイルを作ることができます。これがtemplateの由来です。

具体例としては、自身が現在も使っているレポートのテンプレートがあります:https://github.com/puripuri2100/report-template

今後に向けて

ドキュメントを充実させ、リリースを目指しています。また、拡張を多数用意したいと考えています。

簡単にはなりましたが、コントリビュートをお待ちしています。