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
470
カスタマイズ可能なクラスファイルについて
SATySFiのカスタマイズ可能なクラスファイルについてまとめ、新たな手法を2つ提案する
puripuri2100
July 25, 2020
Tweet
Share
More Decks by puripuri2100
See All by puripuri2100
法律文書の自動解析2024
puripuri2100
0
60
絵文字は構文解析できるのか
puripuri2100
0
91
係り受け解析を用いた法律文書中の略称規定の解析についての報告
puripuri2100
0
3.1k
気胸の胸部CTデータの可視化
puripuri2100
0
300
SATySFiで作成する構文解析器
puripuri2100
0
270
SATySFiの開発についての要望
puripuri2100
0
440
研究の場においてのRust 製ソフトウェアのバージョン管理について
puripuri2100
0
630
法律文書の自動解析
puripuri2100
1
930
汎用的なコードフォーマットライブラリの作成
puripuri2100
0
330
Other Decks in Technology
See All in Technology
「アウトプット脳からユーザー価値脳へ」がそんなに簡単にできたら苦労しない #RSGT2026
aki_iinuma
9
4.3k
技術選定、下から見るか?横から見るか?
masakiokuda
0
180
Introduction to Sansan, inc / Sansan Global Development Center, Inc.
sansan33
PRO
0
2.9k
テストセンター受験、オンライン受験、どっちなんだい?
yama3133
0
210
旬のブリと旬の技術で楽しむ AI エージェント設計開発レシピ
chack411
1
130
業務の煩悩を祓うAI活用術108選 / AI 108 Usages
smartbank
9
19k
re:Invent2025 セッションレポ ~Spec-driven development with Kiro~
nrinetcom
PRO
2
170
産業的変化も組織的変化も乗り越えられるチームへの成長 〜チームの変化から見出す明るい未来〜
kakehashi
PRO
1
380
[PR] はじめてのデジタルアイデンティティという本を書きました
ritou
0
780
マーケットプレイス版Oracle WebCenter Content For OCI
oracle4engineer
PRO
5
1.5k
人工知能のための哲学塾 ニューロフィロソフィ篇 第零夜 「ニューロフィロソフィとは何か?」
miyayou
0
390
AI: The stuff that nobody shows you
jnunemaker
PRO
1
160
Featured
See All Featured
sira's awesome portfolio website redesign presentation
elsirapls
0
110
A Tale of Four Properties
chriscoyier
162
23k
Introduction to Domain-Driven Design and Collaborative software design
baasie
1
540
The Spectacular Lies of Maps
axbom
PRO
1
420
Faster Mobile Websites
deanohume
310
31k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
48
9.8k
Public Speaking Without Barfing On Your Shoes - THAT 2023
reverentgeek
1
280
Believing is Seeing
oripsolob
0
19
The Straight Up "How To Draw Better" Workshop
denniskardys
239
140k
Fantastic passwords and where to find them - at NoRuKo
philnash
52
3.5k
Pawsitive SEO: Lessons from My Dog (and Many Mistakes) on Thriving as a Consultant in the Age of AI
davidcarrasco
0
41
How People are Using Generative and Agentic AI to Supercharge Their Products, Projects, Services and Value Streams Today
helenjbeal
1
94
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