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
130
絵文字は構文解析できるのか
puripuri2100
0
120
係り受け解析を用いた法律文書中の略称規定の解析についての報告
puripuri2100
0
3.4k
気胸の胸部CTデータの可視化
puripuri2100
0
340
SATySFiで作成する構文解析器
puripuri2100
0
310
SATySFiの開発についての要望
puripuri2100
0
480
研究の場においてのRust 製ソフトウェアのバージョン管理について
puripuri2100
0
680
法律文書の自動解析
puripuri2100
1
1k
汎用的なコードフォーマットライブラリの作成
puripuri2100
0
360
Other Decks in Technology
See All in Technology
kintoneで在庫管理システムを作るときの要件定義・設計ポイント
kai0707
0
120
小規模OSSモデルは サイバーセキュリティ業務に どこまで使えるか
bbrbbq
0
310
渡米前の準備を制す!re:Invent 2026徹底準備術 / The Ultimate Preparation Guide for re:Invent 2026
yuj1osm
1
370
Snowflake でできることが増えたら、 ABAC が必要になった
kaeton
0
110
外国人エンジニアがVueプロトタイプで仕様を合わせている話 / Vue Fes Japan 2026 LT
eluwing
0
290
正解のない研修に放り出されて / Being thrown into a training program with no right answers
ohnoeight
1
160
AIに任せられるFlutterコードベースを作る 〜仕様をコードで表し、ハーネスで守る〜
myohei
1
350
200人の配信コメント、 全部Jevが仕分けます 〜 マサカリガードを作ってみた 〜
katayamatg
1
360
Let's Change Our World—Again
snoozer05
PRO
6
710
構造で守らせる データ・法務・セキュリティ・開発チームとつくる AI時代のデータガバナンスとデータ基盤のリアル
legalontechnologies
PRO
2
630
自宅サーバと脆弱性
masakiokuda
1
120
生成AI時代、PMは事業責任者に進化するともっと面白い〜PMだからこそ事業構造を動かせる時代に〜
kakehashi
PRO
1
950
Featured
See All Featured
職位にかかわらず全員がリーダーシップを発揮するチーム作り / Building a team where everyone can demonstrate leadership regardless of position
madoxten
70
68k
Visual Storytelling: How to be a Superhuman Communicator
reverentgeek
2
720
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
18k
GraphQLとの向き合い方2022年版
quramy
50
15k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
659
62k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
287
14k
Product Roadmaps are Hard
iamctodd
55
13k
Hiding What from Whom? A Critical Review of the History of Programming languages for Music
tomoyanonymous
3
1.4k
[Rails World 2026] Durable orchestration on Rails: from continuation to workflow
palkan
2
950
Sam Torres - BigQuery for SEOs
techseoconnect
PRO
0
590
Making Projects Easy
brettharned
120
6.8k
Are puppies a ranking factor?
jonoalderson
2
4.1k
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