Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
カスタマイズ可能なクラスファイルについて
Search
puripuri2100
July 25, 2020
Technology
510
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
カスタマイズ可能なクラスファイルについて
SATySFiのカスタマイズ可能なクラスファイルについてまとめ、新たな手法を2つ提案する
puripuri2100
July 25, 2020
More Decks by puripuri2100
See All by puripuri2100
法律文書の自動解析2024
puripuri2100
0
110
絵文字は構文解析できるのか
puripuri2100
0
120
係り受け解析を用いた法律文書中の略称規定の解析についての報告
puripuri2100
0
3.4k
気胸の胸部CTデータの可視化
puripuri2100
0
330
SATySFiで作成する構文解析器
puripuri2100
0
300
SATySFiの開発についての要望
puripuri2100
0
470
研究の場においてのRust 製ソフトウェアのバージョン管理について
puripuri2100
0
670
法律文書の自動解析
puripuri2100
1
1k
汎用的なコードフォーマットライブラリの作成
puripuri2100
0
360
Other Decks in Technology
See All in Technology
今話題のAI「Jev」って何? 宇宙最速で学ぶ会
minorun365
PRO
21
13k
range over func 2年間の軌跡 Issue #56413 はGoのエコシステムをどう変えたか
ryujicre8ive
0
190
DEFCON34-Write-up_HYCu-MYCu
daikiokazaki
0
160
iOSDC Japan 2026 day1 TrackC 10:50
feedtailor
1
160
映像変換サーバーなしで端末内でHLSを生成してライブ配信
hikarusato
0
110
幾何アルゴリズムで なめらかなピン操作を / iOSDC Japan 2026 / smoothpin
kazumanagano
0
350
10分で知る最近のOmarchy
komagata
0
330
Claude Codeを「使うほど育つ」AI秘書にするノウハウ
minorun365
PRO
27
22k
Genieを崇めよ
kameitomohiro
0
130
データ_AIの事業の勝敗をわけるもの
nek0128
0
360
HHKBエバンジェリストになる方法
941
0
100
SREは、MCPとAutopilotをこう使え!
kazumax55
2
810
Featured
See All Featured
The innovator’s Mindset - Leading Through an Era of Exponential Change - McGill University 2025
jdejongh
PRO
1
330
A designer walks into a library…
pauljervisheath
211
25k
Self-Hosted WebAssembly Runtime for Runtime-Neutral Checkpoint/Restore in Edge–Cloud Continuum
chikuwait
0
800
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
128
56k
Music & Morning Musume
bryan
48
7.4k
Facilitating Awesome Meetings
lara
57
7.1k
The SEO identity crisis: Don't let AI make you average
varn
0
560
A brief & incomplete history of UX Design for the World Wide Web: 1989–2019
jct
2
510
HDC tutorial
michielstock
2
870
How to Align SEO within the Product Triangle To Get Buy-In & Support - #RIMC
aleyda
2
1.8k
We Have a Design System, Now What?
morganepeng
55
8.3k
Collaborative Software Design: How to facilitate domain modelling decisions
baasie
1
320
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