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
410
カスタマイズ可能なクラスファイルについて
SATySFiのカスタマイズ可能なクラスファイルについてまとめ、新たな手法を2つ提案する
puripuri2100
July 25, 2020
Tweet
Share
More Decks by puripuri2100
See All by puripuri2100
絵文字は構文解析できるのか
puripuri2100
0
25
係り受け解析を用いた法律文書中の略称規定の解析についての報告
puripuri2100
0
1.9k
気胸の胸部CTデータの可視化
puripuri2100
0
230
SATySFiで作成する構文解析器
puripuri2100
0
180
SATySFiの開発についての要望
puripuri2100
0
370
研究の場においてのRust 製ソフトウェアのバージョン管理について
puripuri2100
0
520
法律文書の自動解析
puripuri2100
1
610
汎用的なコードフォーマットライブラリの作成
puripuri2100
0
280
ユーザーがカスタマイズできるクラスファイル ―v0.0.x と v0.1.x それぞれでの実装 ―
puripuri2100
0
310
Other Decks in Technology
See All in Technology
AWSコンテナ本出版から3年経った今、もし改めて執筆し直すなら / If I revise our container book
iselegant
18
4.2k
SNSマーケティングに革新! ABEMA サッカー動画切り出しを生成AIで自動化し、業務効率化を狙う! / abema-ai-marketing
cyberagentdevelopers
PRO
1
120
独自ツール開発でスタジオ撮影をDX!「VLS(Virtual LED Studio)」 / dx-studio-vls
cyberagentdevelopers
PRO
1
200
プロポーザルのつくり方 〜個人技編〜 / How to come up with proposals
ohbarye
4
270
ジョブマッチングサービスにおける相互推薦システムの応用事例と課題
hakubishin3
2
510
物価高なラスベガスでの過ごし方
zakky
0
470
運用イベント対応への生成AIの活用 with Failure Analysis Assistant
suzukyz
0
170
「視座」の上げ方が成人発達理論にわかりやすくまとまってた / think_ perspective_hidden_dimensions
shuzon
2
13k
生成AIの強みと弱みを理解して、生成AIがもたらすパワーをプロダクトの価値へ繋げるために実践したこと / advance-ai-generating
cyberagentdevelopers
PRO
1
210
カメラを用いた店内計測におけるオプトインの仕組みの実現 / ai-optin-camera
cyberagentdevelopers
PRO
1
130
プロダクトエンジニアが活躍する環境を作りたくて 事業責任者になった話 ~プロダクトエンジニアの行き着く先~
gimupop
1
510
AWS re:Invent 2024 Kansai Standby
hiroramos4
PRO
0
120
Featured
See All Featured
GitHub's CSS Performance
jonrohan
1030
460k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
26
2.1k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
7
160
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
355
29k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
191
16k
Typedesign – Prime Four
hannesfritz
39
2.4k
Bootstrapping a Software Product
garrettdimon
PRO
305
110k
Making Projects Easy
brettharned
115
5.9k
Embracing the Ebb and Flow
colly
84
4.4k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
226
22k
How to Ace a Technical Interview
jacobian
275
23k
The Cost Of JavaScript in 2023
addyosmani
45
6.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