$30 off During Our Annual Pro Sale. View Details »

カスタマイズ可能なクラスファイルについて

 カスタマイズ可能なクラスファイルについて

SATySFiのカスタマイズ可能なクラスファイルについてまとめ、新たな手法を2つ提案する

puripuri2100

July 25, 2020
Tweet

More Decks by puripuri2100

Other Decks in Technology

Transcript

  1. カスタマイズ可能なクラスファイルについて
    SATySFi Conf 2020
    @puripuri2100
    2020/7/25

    View Slide

  2. 自己紹介
    所属 開成学園開成高等学校
    学年 高校二年
    SAT
    YSFI歴 中学三年から高校二年までの約 2 年
    twitter @puripuri2100
    mail [email protected]
    1

    View Slide

  3. 自己紹介
    SAT
    YSFI関連のこと:
    • SATySFi Advent Calendar (2018 | 2019) の主催
    2

    View Slide

  4. 自己紹介
    SAT
    YSFI関連のこと:
    • SATySFi Advent Calendar (2018 | 2019) の主催
    • satysfi-siunitx とか satysfi-uline とか色々パッケージを作成
    2

    View Slide

  5. 自己紹介
    SAT
    YSFI関連のこと:
    • SATySFi Advent Calendar (2018 | 2019) の主催
    • satysfi-siunitx とか satysfi-uline とか色々パッケージを作成
    • satysfi-base のお手伝いもしています
    2

    View Slide

  6. 自己紹介
    SAT
    YSFI関連のこと:
    • SATySFi Advent Calendar (2018 | 2019) の主催
    • satysfi-siunitx とか satysfi-uline とか色々パッケージを作成
    • satysfi-base のお手伝いもしています
    • SATySFi-API のようなサイトの整備も少しずつ(最近 SAT
    YSFIのドキュメン
    トを作り始めました)
    2

    View Slide

  7. 自己紹介
    SAT
    YSFI関連のこと:
    • SATySFi Advent Calendar (2018 | 2019) の主催
    • satysfi-siunitx とか satysfi-uline とか色々パッケージを作成
    • satysfi-base のお手伝いもしています
    • SATySFi-API のようなサイトの整備も少しずつ(最近 SAT
    YSFIのドキュメン
    トを作り始めました)
    • 「SATySFi に関すること」のような解説記事も書いていました
    2

    View Slide

  8. 今日話すこと
    • SAT
    YSFIにおけるクラスファイルの役割
    • 既に存在しているクラスファイルの簡単な紹介
    • なぜ「カスタマイズ可能なクラスファイル」が必要なのか
    • 既にあるアプローチ
    • 新しく提案する方法 1:json ファイルからの生成
    • 新しく提案する方法 2:unit list と破壊的代入を使った方法
    • 今後について
    3

    View Slide

  9. SAT
    YSFIにおけるクラスファイルの役割
    • document 関数の提供
    • 版面の設定
    • フォントの設定
    • 相互参照
    • 章節コマンドの提供
    • 浮動環境や脚注などの版面と深くかかわるコマンドの提供
    4

    View Slide

  10. 既存クラスファイルの紹介
    stdja* SATySFi 標準のもの
    5

    View Slide

  11. 既存クラスファイルの紹介
    stdja* SATySFi 標準のもの
    stjarticle stdja にコマンド等を色々付け加えたもの
    5

    View Slide

  12. 既存クラスファイルの紹介
    stdja* SATySFi 標準のもの
    stjarticle stdja にコマンド等を色々付け加えたもの
    exdesign カスタマイズ可能なもの
    5

    View Slide

  13. 既存クラスファイルの紹介
    stdja* SATySFi 標準のもの
    stjarticle stdja にコマンド等を色々付け加えたもの
    exdesign カスタマイズ可能なもの
    jlreq JLReq の準拠を目指すもの
    5

    View Slide

  14. 既存クラスファイルの紹介
    stdja* SATySFi 標準のもの
    stjarticle stdja にコマンド等を色々付け加えたもの
    exdesign カスタマイズ可能なもの
    jlreq JLReq の準拠を目指すもの
    new-cls 改造前提のもの
    5

    View Slide

  15. 既存クラスファイルの紹介
    stdja* SATySFi 標準のもの
    stjarticle stdja にコマンド等を色々付け加えたもの
    exdesign カスタマイズ可能なもの
    jlreq JLReq の準拠を目指すもの
    new-cls 改造前提のもの
    cs-thesis 論文用
    5

    View Slide

  16. 既存クラスファイルの紹介
    stdja* SATySFi 標準のもの
    stjarticle stdja にコマンド等を色々付け加えたもの
    exdesign カスタマイズ可能なもの
    jlreq JLReq の準拠を目指すもの
    new-cls 改造前提のもの
    cs-thesis 論文用
    shinchoku-tairiku 進捗大陸用
    5

    View Slide

  17. 既存クラスファイルの紹介
    stdja* SATySFi 標準のもの
    stjarticle stdja にコマンド等を色々付け加えたもの
    exdesign カスタマイズ可能なもの
    jlreq JLReq の準拠を目指すもの
    new-cls 改造前提のもの
    cs-thesis 論文用
    shinchoku-tairiku 進捗大陸用
    satysfi-class-yabaitech ヤバイテックトーキョー用
    5

    View Slide

  18. 既存クラスファイルの紹介
    stdja* SATySFi 標準のもの
    stjarticle stdja にコマンド等を色々付け加えたもの
    exdesign カスタマイズ可能なもの
    jlreq JLReq の準拠を目指すもの
    new-cls 改造前提のもの
    cs-thesis 論文用
    shinchoku-tairiku 進捗大陸用
    satysfi-class-yabaitech ヤバイテックトーキョー用
    slydifi スライド用
    5

    View Slide

  19. 既存クラスファイルの紹介
    stdja* SATySFi 標準のもの
    stjarticle stdja にコマンド等を色々付け加えたもの
    exdesign カスタマイズ可能なもの
    jlreq JLReq の準拠を目指すもの
    new-cls 改造前提のもの
    cs-thesis 論文用
    shinchoku-tairiku 進捗大陸用
    satysfi-class-yabaitech ヤバイテックトーキョー用
    slydifi スライド用
    steamer スライド用
    5

    View Slide

  20. なぜ「カスタマイズ可能なクラスファイル」が必要なのか
    SAT
    YSFIで作られる文書は大きく分けて 2 通り:
    6

    View Slide

  21. なぜ「カスタマイズ可能なクラスファイル」が必要なのか
    SAT
    YSFIで作られる文書は大きく分けて 2 通り:
    • 同人誌や商業誌、部誌などのしっかりした本
    6

    View Slide

  22. なぜ「カスタマイズ可能なクラスファイル」が必要なのか
    SAT
    YSFIで作られる文書は大きく分けて 2 通り:
    • 同人誌や商業誌、部誌などのしっかりした本
    • レポート
    6

    View Slide

  23. なぜ「カスタマイズ可能なクラスファイル」が必要なのか
    SAT
    YSFIで作られる文書は大きく分けて 2 通り:
    • 同人誌や商業誌、部誌などのしっかりした本
    • レポート
    本のクラスファイルは基本的に「オーダーメイド」
    6

    View Slide

  24. なぜ「カスタマイズ可能なクラスファイル」が必要なのか
    SAT
    YSFIで作られる文書は大きく分けて 2 通り:
    • 同人誌や商業誌、部誌などのしっかりした本
    • レポート
    本のクラスファイルは基本的に「オーダーメイド」
    レポートは「使いまわし」で「少しずつ体裁が変わる」
    6

    View Slide

  25. なぜ「カスタマイズ可能なクラスファイル」が必要なのか
    SAT
    YSFIで作られる文書は大きく分けて 2 通り:
    • 同人誌や商業誌、部誌などのしっかりした本
    • レポート
    本のクラスファイルは基本的に「オーダーメイド」
    レポートは「使いまわし」で「少しずつ体裁が変わる」
    →レポート作成のためには「手軽に」
    「ちょこっと変更を加えられる」クラス
    ファイルの存在がどうしても必要
    6

    View Slide

  26. 既存アプローチの紹介
    既存のカスタマイズ可能なクラスファイル
    7

    View Slide

  27. 既存アプローチの紹介
    既存のカスタマイズ可能なクラスファイル
    • stdja*
    7

    View Slide

  28. 既存アプローチの紹介
    既存のカスタマイズ可能なクラスファイル
    • stdja*
    • exdesign
    7

    View Slide

  29. 既存アプローチの紹介
    既存のカスタマイズ可能なクラスファイル
    • stdja*
    • exdesign
    • jlreq
    7

    View Slide

  30. 既存アプローチの紹介(stdja*の場合)
    • タイトルや著者のデータ、タイトルと目次を表示するかはレコード型で
    指定
    • 基本版面に関することをオプション引数の形で変更できる
    8

    View Slide

  31. 既存アプローチの紹介(stdja*の場合)
    • タイトルや著者のデータ、タイトルと目次を表示するかはレコード型で
    指定
    • 基本版面に関することをオプション引数の形で変更できる
    メリット:
    • ページサイズの変更とかができる
    • with を使うことで好きな値だけ変えられる
    8

    View Slide

  32. 既存アプローチの紹介(stdja*の場合)
    • タイトルや著者のデータ、タイトルと目次を表示するかはレコード型で
    指定
    • 基本版面に関することをオプション引数の形で変更できる
    メリット:
    • ページサイズの変更とかができる
    • with を使うことで好きな値だけ変えられる
    デメリット:
    • 基本版面以外弄れないので、章節のデザインを弄りたい時に若干困る
    8

    View Slide

  33. 既存アプローチの紹介(stdja*の場合)
    @require: stdja
    document (|
    title = {};
    author = {};
    show-title = true;
    show-toc = true;
    |) ?:(|
    StdJa.default-config with
    pager-size = A3Paper;
    show-pages = false;
    |) '<
    +p{段 落}
    >
    9

    View Slide

  34. 既存アプローチの紹介(exdesign の場合)
    • 全てのパラメータに対して値を与える
    • レコード型を上手く使ってパラメータを分類する
    • 分類したパラメータごとに値を設定し、パッケージで使いまわしできる
    ようにする
    10

    View Slide

  35. 既存アプローチの紹介(exdesign の場合)
    • 全てのパラメータに対して値を与える
    • レコード型を上手く使ってパラメータを分類する
    • 分類したパラメータごとに値を設定し、パッケージで使いまわしできる
    ようにする
    メリット:
    • 使いまわし可能
    • 変更が比較的簡単にできる
    10

    View Slide

  36. 既存アプローチの紹介(exdesign の場合)
    • 全てのパラメータに対して値を与える
    • レコード型を上手く使ってパラメータを分類する
    • 分類したパラメータごとに値を設定し、パッケージで使いまわしできる
    ようにする
    メリット:
    • 使いまわし可能
    • 変更が比較的簡単にできる
    デメリット:
    • パラメータ多すぎ
    • パラメータを弄ると簡単に後方互換性が壊れる
    10

    View Slide

  37. 既存アプローチの紹介(exdesign の場合)
    @require: class-exdesign/exdesign
    @require: class-exdesign/article-ja
    document (|
    title = {title};
    author = {puripuri2100};
    date = {2018/11/04};
    show-title = true;
    show-toc = true;
    style = ArticleJa.a4paper;
    design = ArticleJa.article;
    header-footer = ArticleJa.normalHF;
    fonts = ArticleJa.fonts;
    |) '<
    +p{段 落}
    >
    11

    View Slide

  38. 既存アプローチの紹介(jlreq の場合)
    • document 型のオプション引数でレコード型を使ってパラメータを弄る
    • *-scheme 関数があり、これもレコード型を使って設定を弄ることがで
    きる
    12

    View Slide

  39. 既存アプローチの紹介(jlreq の場合)
    • document 型のオプション引数でレコード型を使ってパラメータを弄る
    • *-scheme 関数があり、これもレコード型を使って設定を弄ることがで
    きる
    メリット:
    • 設定の変更が非常に楽
    • 幅広く、良い感じに変更ができる
    12

    View Slide

  40. 既存アプローチの紹介(jlreq の場合)
    • document 型のオプション引数でレコード型を使ってパラメータを弄る
    • *-scheme 関数があり、これもレコード型を使って設定を弄ることがで
    きる
    メリット:
    • 設定の変更が非常に楽
    • 幅広く、良い感じに変更ができる
    デメリット:
    • きちんと版面を練らねばならず、レポート作成用には難易度が高い(設
    定コピペの誘発)
    12

    View Slide

  41. 新しい提案 1:json ファイルからの生成
    • json ファイルからクラスファイルを生成する
    13

    View Slide

  42. 新しい提案 1:json ファイルからの生成
    • json ファイルからクラスファイルを生成する
    メリット:
    • 設定の変更が非常に楽
    • 柔軟な設定ができる
    • Web 上での自動生成等に応用できる
    13

    View Slide

  43. 新しい提案 1:json ファイルからの生成
    • json ファイルからクラスファイルを生成する
    メリット:
    • 設定の変更が非常に楽
    • 柔軟な設定ができる
    • Web 上での自動生成等に応用できる
    デメリット:
    • 生成したクラスファイルのメンテが非常に困難
    13

    View Slide

  44. 新しい提案 1:json ファイルからの生成
    formatcls というソフトウェアを Rust で実装済み
    https://github.com/puripuri2100/formatcls
    14

    View Slide

  45. 新しい提案 1:json ファイルからの生成
    formatcls というソフトウェアを Rust で実装済み
    https://github.com/puripuri2100/formatcls
    formatcls -c demo.json -o demo.satyh のような感じで使用。
    大体 500 行程度のクラスファイルが作成される。
    14

    View Slide

  46. formatcls について

    {
    "page-size": "b5",
    "left-space" : "20mm",
    "right-space" : "20mm",
    "main-font" : {
    "size":"12pt",
    "cjk-name":"ipaexm",
    "cjk-ratio":"0.88",
    "cjk-correction":"0.",
    "latin-name":"lmsans",
    "latin-ratio":"1.",
    "latin-correction":"0."
    },
    "header-fun":"empty",
    "footer-fun":"empty",
    "sec-depth":2,
    "sec-name-list" : ["section", "subsection"]
    }
    15

    View Slide

  47. 新しく提案する方法 2:unit list と破壊的代入を使った方法
    内部で破壊的代入を使ってデフォルトの値を書き換えるような
    inline-text -> unit みたいな型を持つ関数を用意しておき、そこに値
    を与えて unit list を作る。第一引数に設定値をリストで与え、第二引数
    に普通のブロックテキストを与える。document 関数内で第一引数を評価す
    るときに値の書き換えが実行され、組版結果に影響を与える。
    exdesign のレコード型を unit list で置き換えているイメージ。
    document [
    Doc.title {title};
    Doc.page-size Page.b5j;
    Doc.left-space 20mm;
    Doc.right-space 20mm
    ] '<
    +p{text}
    >
    16

    View Slide

  48. 新しく提案する方法 2:unit list と破壊的代入を使った方法
    予想されるメリット:
    • 気軽にパラメータの増減ができる
    • 見た目がシンプルになる
    • ある程度使いまわしができる
    17

    View Slide

  49. 新しく提案する方法 2:unit list と破壊的代入を使った方法
    予想されるメリット:
    • 気軽にパラメータの増減ができる
    • 見た目がシンプルになる
    • ある程度使いまわしができる
    予想されるデメリット:
    • パラメータが多すぎてメンテが大変
    • 予期せぬパラメータの上書きが発生するかも
    17

    View Slide

  50. 今後について
    • formatcls の改良
    18

    View Slide

  51. 今後について
    • formatcls の改良
    • unit list を使ったクラスファイルを作ってみる
    18

    View Slide

  52. 今後について
    • formatcls の改良
    • unit list を使ったクラスファイルを作ってみる
    • 各クラスファイルユーザの感想を集めたい
    18

    View Slide

  53. 今後について
    • formatcls の改良
    • unit list を使ったクラスファイルを作ってみる
    • 各クラスファイルユーザの感想を集めたい
    • どの手法が良いのかわからないので数を撃ちたい
    18

    View Slide

  54. まとめ
    • レポート作成用にカスタマイズ可能なクラスファイルが必要
    • 既存の手法は主にレコード型を使ったもの
    • json ファイルを使って自動生成する方法と、unit list を使う方法の 2
    種類を提案
    • json ファイルからの生成の方は formatcls というソフトウェアを既に実
    装済み
    • unit list の方はこれから実装する必要がある
    • どの方法が良いのかはわからないので、色々な人に使い倒してもらう必
    要がある
    19

    View Slide

  55. 想定質問:なぜ Rust で実装したのか
    • 多くの OS で動く
    • 書きやすい
    • 使いたかった
    satyrographos でインストールしてもらうために OCaml で書き直すのもアリ
    ではある
    20

    View Slide