Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
カスタマイズ可能なクラスファイルについて
Search
puripuri2100
July 25, 2020
Technology
0
420
カスタマイズ可能なクラスファイルについて
SATySFiのカスタマイズ可能なクラスファイルについてまとめ、新たな手法を2つ提案する
puripuri2100
July 25, 2020
Tweet
Share
More Decks by puripuri2100
See All by puripuri2100
絵文字は構文解析できるのか
puripuri2100
0
38
係り受け解析を用いた法律文書中の略称規定の解析についての報告
puripuri2100
0
2.5k
気胸の胸部CTデータの可視化
puripuri2100
0
260
SATySFiで作成する構文解析器
puripuri2100
0
200
SATySFiの開発についての要望
puripuri2100
0
390
研究の場においてのRust 製ソフトウェアのバージョン管理について
puripuri2100
0
550
法律文書の自動解析
puripuri2100
1
720
汎用的なコードフォーマットライブラリの作成
puripuri2100
0
290
ユーザーがカスタマイズできるクラスファイル ―v0.0.x と v0.1.x それぞれでの実装 ―
puripuri2100
0
330
Other Decks in Technology
See All in Technology
Amazon Aurora バージョンアップについて、改めて理解する ~バージョンアップ手法と文字コードへの影響~
smt7174
1
450
もし今からGraphQLを採用するなら
kazukihayase
10
4.5k
EDRからERM: PFN-SIRTが関わるセキュリティとリスクへの取り組み
pfn
PRO
0
140
マルチデータプロダクト開発・運用に耐えるためのデータ組織・アーキテクチャの遷移
mtpooh
1
390
NOSTR, réseau social et espace de liberté décentralisé
rlifchitz
0
160
20250208_OpenAIDeepResearchがやばいという話
doradora09
PRO
0
140
ゆもつよがこの30年間自ら経験してきたQA、テストの歴史と未来
ymty
3
620
Creative Pair
kawaguti
PRO
1
150
君はPostScriptなウィンドウシステム 「NeWS」をご存知か?/sunnews
koyhoge
0
640
Women in Agile
kawaguti
PRO
3
190
ソフトウェアアーキテクトのための意思決定術: Software Architecture and Decision-Making
snoozer05
PRO
20
4.4k
A Hidden Pitfall of K8s DNS with Spring Webflux
musaprg
0
290
Featured
See All Featured
Rebuilding a faster, lazier Slack
samanthasiow
79
8.8k
How STYLIGHT went responsive
nonsquared
98
5.3k
A Philosophy of Restraint
colly
203
16k
BBQ
matthewcrist
86
9.4k
Reflections from 52 weeks, 52 projects
jeffersonlam
348
20k
How GitHub (no longer) Works
holman
313
140k
Six Lessons from altMBA
skipperchong
27
3.6k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
29
1k
Adopting Sorbet at Scale
ufuk
74
9.2k
Stop Working from a Prison Cell
hatefulcrawdad
267
20k
Become a Pro
speakerdeck
PRO
26
5.1k
Into the Great Unknown - MozCon
thekraken
34
1.6k
Transcript
カスタマイズ可能なクラスファイルについて SATySFi Conf 2020 @puripuri2100 2020/7/25
自己紹介 所属 開成学園開成高等学校 学年 高校二年 SAT YSFI歴 中学三年から高校二年までの約 2 年
twitter @puripuri2100 mail
[email protected]
1
自己紹介 SAT YSFI関連のこと: • SATySFi Advent Calendar (2018 | 2019)
の主催 2
自己紹介 SAT YSFI関連のこと: • SATySFi Advent Calendar (2018 | 2019)
の主催 • satysfi-siunitx とか satysfi-uline とか色々パッケージを作成 2
自己紹介 SAT YSFI関連のこと: • SATySFi Advent Calendar (2018 | 2019)
の主催 • satysfi-siunitx とか satysfi-uline とか色々パッケージを作成 • satysfi-base のお手伝いもしています 2
自己紹介 SAT YSFI関連のこと: • SATySFi Advent Calendar (2018 | 2019)
の主催 • satysfi-siunitx とか satysfi-uline とか色々パッケージを作成 • satysfi-base のお手伝いもしています • SATySFi-API のようなサイトの整備も少しずつ(最近 SAT YSFIのドキュメン トを作り始めました) 2
自己紹介 SAT YSFI関連のこと: • SATySFi Advent Calendar (2018 | 2019)
の主催 • satysfi-siunitx とか satysfi-uline とか色々パッケージを作成 • satysfi-base のお手伝いもしています • SATySFi-API のようなサイトの整備も少しずつ(最近 SAT YSFIのドキュメン トを作り始めました) • 「SATySFi に関すること」のような解説記事も書いていました 2
今日話すこと • SAT YSFIにおけるクラスファイルの役割 • 既に存在しているクラスファイルの簡単な紹介 • なぜ「カスタマイズ可能なクラスファイル」が必要なのか • 既にあるアプローチ
• 新しく提案する方法 1:json ファイルからの生成 • 新しく提案する方法 2:unit list と破壊的代入を使った方法 • 今後について 3
SAT YSFIにおけるクラスファイルの役割 • document 関数の提供 • 版面の設定 • フォントの設定 •
相互参照 • 章節コマンドの提供 • 浮動環境や脚注などの版面と深くかかわるコマンドの提供 4
既存クラスファイルの紹介 stdja* SATySFi 標準のもの 5
既存クラスファイルの紹介 stdja* SATySFi 標準のもの stjarticle stdja にコマンド等を色々付け加えたもの 5
既存クラスファイルの紹介 stdja* SATySFi 標準のもの stjarticle stdja にコマンド等を色々付け加えたもの exdesign カスタマイズ可能なもの 5
既存クラスファイルの紹介 stdja* SATySFi 標準のもの stjarticle stdja にコマンド等を色々付け加えたもの exdesign カスタマイズ可能なもの jlreq
JLReq の準拠を目指すもの 5
既存クラスファイルの紹介 stdja* SATySFi 標準のもの stjarticle stdja にコマンド等を色々付け加えたもの exdesign カスタマイズ可能なもの jlreq
JLReq の準拠を目指すもの new-cls 改造前提のもの 5
既存クラスファイルの紹介 stdja* SATySFi 標準のもの stjarticle stdja にコマンド等を色々付け加えたもの exdesign カスタマイズ可能なもの jlreq
JLReq の準拠を目指すもの new-cls 改造前提のもの cs-thesis 論文用 5
既存クラスファイルの紹介 stdja* SATySFi 標準のもの stjarticle stdja にコマンド等を色々付け加えたもの exdesign カスタマイズ可能なもの jlreq
JLReq の準拠を目指すもの new-cls 改造前提のもの cs-thesis 論文用 shinchoku-tairiku 進捗大陸用 5
既存クラスファイルの紹介 stdja* SATySFi 標準のもの stjarticle stdja にコマンド等を色々付け加えたもの exdesign カスタマイズ可能なもの jlreq
JLReq の準拠を目指すもの new-cls 改造前提のもの cs-thesis 論文用 shinchoku-tairiku 進捗大陸用 satysfi-class-yabaitech ヤバイテックトーキョー用 5
既存クラスファイルの紹介 stdja* SATySFi 標準のもの stjarticle stdja にコマンド等を色々付け加えたもの exdesign カスタマイズ可能なもの jlreq
JLReq の準拠を目指すもの new-cls 改造前提のもの cs-thesis 論文用 shinchoku-tairiku 進捗大陸用 satysfi-class-yabaitech ヤバイテックトーキョー用 slydifi スライド用 5
既存クラスファイルの紹介 stdja* SATySFi 標準のもの stjarticle stdja にコマンド等を色々付け加えたもの exdesign カスタマイズ可能なもの jlreq
JLReq の準拠を目指すもの new-cls 改造前提のもの cs-thesis 論文用 shinchoku-tairiku 進捗大陸用 satysfi-class-yabaitech ヤバイテックトーキョー用 slydifi スライド用 steamer スライド用 5
なぜ「カスタマイズ可能なクラスファイル」が必要なのか SAT YSFIで作られる文書は大きく分けて 2 通り: 6
なぜ「カスタマイズ可能なクラスファイル」が必要なのか SAT YSFIで作られる文書は大きく分けて 2 通り: • 同人誌や商業誌、部誌などのしっかりした本 6
なぜ「カスタマイズ可能なクラスファイル」が必要なのか SAT YSFIで作られる文書は大きく分けて 2 通り: • 同人誌や商業誌、部誌などのしっかりした本 • レポート 6
なぜ「カスタマイズ可能なクラスファイル」が必要なのか SAT YSFIで作られる文書は大きく分けて 2 通り: • 同人誌や商業誌、部誌などのしっかりした本 • レポート 本のクラスファイルは基本的に「オーダーメイド」
6
なぜ「カスタマイズ可能なクラスファイル」が必要なのか SAT YSFIで作られる文書は大きく分けて 2 通り: • 同人誌や商業誌、部誌などのしっかりした本 • レポート 本のクラスファイルは基本的に「オーダーメイド」
レポートは「使いまわし」で「少しずつ体裁が変わる」 6
なぜ「カスタマイズ可能なクラスファイル」が必要なのか SAT YSFIで作られる文書は大きく分けて 2 通り: • 同人誌や商業誌、部誌などのしっかりした本 • レポート 本のクラスファイルは基本的に「オーダーメイド」
レポートは「使いまわし」で「少しずつ体裁が変わる」 →レポート作成のためには「手軽に」 「ちょこっと変更を加えられる」クラス ファイルの存在がどうしても必要 6
既存アプローチの紹介 既存のカスタマイズ可能なクラスファイル 7
既存アプローチの紹介 既存のカスタマイズ可能なクラスファイル • stdja* 7
既存アプローチの紹介 既存のカスタマイズ可能なクラスファイル • stdja* • exdesign 7
既存アプローチの紹介 既存のカスタマイズ可能なクラスファイル • stdja* • exdesign • jlreq 7
既存アプローチの紹介(stdja*の場合) • タイトルや著者のデータ、タイトルと目次を表示するかはレコード型で 指定 • 基本版面に関することをオプション引数の形で変更できる 8
既存アプローチの紹介(stdja*の場合) • タイトルや著者のデータ、タイトルと目次を表示するかはレコード型で 指定 • 基本版面に関することをオプション引数の形で変更できる メリット: • ページサイズの変更とかができる •
with を使うことで好きな値だけ変えられる 8
既存アプローチの紹介(stdja*の場合) • タイトルや著者のデータ、タイトルと目次を表示するかはレコード型で 指定 • 基本版面に関することをオプション引数の形で変更できる メリット: • ページサイズの変更とかができる •
with を使うことで好きな値だけ変えられる デメリット: • 基本版面以外弄れないので、章節のデザインを弄りたい時に若干困る 8
既存アプローチの紹介(stdja*の場合) @require: stdja document (| title = {}; author =
{}; show-title = true; show-toc = true; |) ?:(| StdJa.default-config with pager-size = A3Paper; show-pages = false; |) '< +p{段 落} > 9
既存アプローチの紹介(exdesign の場合) • 全てのパラメータに対して値を与える • レコード型を上手く使ってパラメータを分類する • 分類したパラメータごとに値を設定し、パッケージで使いまわしできる ようにする 10
既存アプローチの紹介(exdesign の場合) • 全てのパラメータに対して値を与える • レコード型を上手く使ってパラメータを分類する • 分類したパラメータごとに値を設定し、パッケージで使いまわしできる ようにする メリット:
• 使いまわし可能 • 変更が比較的簡単にできる 10
既存アプローチの紹介(exdesign の場合) • 全てのパラメータに対して値を与える • レコード型を上手く使ってパラメータを分類する • 分類したパラメータごとに値を設定し、パッケージで使いまわしできる ようにする メリット:
• 使いまわし可能 • 変更が比較的簡単にできる デメリット: • パラメータ多すぎ • パラメータを弄ると簡単に後方互換性が壊れる 10
既存アプローチの紹介(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
既存アプローチの紹介(jlreq の場合) • document 型のオプション引数でレコード型を使ってパラメータを弄る • *-scheme 関数があり、これもレコード型を使って設定を弄ることがで きる 12
既存アプローチの紹介(jlreq の場合) • document 型のオプション引数でレコード型を使ってパラメータを弄る • *-scheme 関数があり、これもレコード型を使って設定を弄ることがで きる メリット:
• 設定の変更が非常に楽 • 幅広く、良い感じに変更ができる 12
既存アプローチの紹介(jlreq の場合) • document 型のオプション引数でレコード型を使ってパラメータを弄る • *-scheme 関数があり、これもレコード型を使って設定を弄ることがで きる メリット:
• 設定の変更が非常に楽 • 幅広く、良い感じに変更ができる デメリット: • きちんと版面を練らねばならず、レポート作成用には難易度が高い(設 定コピペの誘発) 12
新しい提案 1:json ファイルからの生成 • json ファイルからクラスファイルを生成する 13
新しい提案 1:json ファイルからの生成 • json ファイルからクラスファイルを生成する メリット: • 設定の変更が非常に楽 •
柔軟な設定ができる • Web 上での自動生成等に応用できる 13
新しい提案 1:json ファイルからの生成 • json ファイルからクラスファイルを生成する メリット: • 設定の変更が非常に楽 •
柔軟な設定ができる • Web 上での自動生成等に応用できる デメリット: • 生成したクラスファイルのメンテが非常に困難 13
新しい提案 1:json ファイルからの生成 formatcls というソフトウェアを Rust で実装済み https://github.com/puripuri2100/formatcls 14
新しい提案 1:json ファイルからの生成 formatcls というソフトウェアを Rust で実装済み https://github.com/puripuri2100/formatcls formatcls -c
demo.json -o demo.satyh のような感じで使用。 大体 500 行程度のクラスファイルが作成される。 14
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
新しく提案する方法 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
新しく提案する方法 2:unit list と破壊的代入を使った方法 予想されるメリット: • 気軽にパラメータの増減ができる • 見た目がシンプルになる •
ある程度使いまわしができる 17
新しく提案する方法 2:unit list と破壊的代入を使った方法 予想されるメリット: • 気軽にパラメータの増減ができる • 見た目がシンプルになる •
ある程度使いまわしができる 予想されるデメリット: • パラメータが多すぎてメンテが大変 • 予期せぬパラメータの上書きが発生するかも 17
今後について • formatcls の改良 18
今後について • formatcls の改良 • unit list を使ったクラスファイルを作ってみる 18
今後について • formatcls の改良 • unit list を使ったクラスファイルを作ってみる • 各クラスファイルユーザの感想を集めたい
18
今後について • formatcls の改良 • unit list を使ったクラスファイルを作ってみる • 各クラスファイルユーザの感想を集めたい
• どの手法が良いのかわからないので数を撃ちたい 18
まとめ • レポート作成用にカスタマイズ可能なクラスファイルが必要 • 既存の手法は主にレコード型を使ったもの • json ファイルを使って自動生成する方法と、unit list を使う方法の
2 種類を提案 • json ファイルからの生成の方は formatcls というソフトウェアを既に実 装済み • unit list の方はこれから実装する必要がある • どの方法が良いのかはわからないので、色々な人に使い倒してもらう必 要がある 19
想定質問:なぜ Rust で実装したのか • 多くの OS で動く • 書きやすい •
使いたかった satyrographos でインストールしてもらうために OCaml で書き直すのもアリ ではある 20