SATySFi<s>ライトユーザー</s>分かってないマンの所感
おことわり
筆者はThe SATySFi bookをまだ読んでいないライトユーザー、いわゆる分かってないマンです。この記事書き終わったタイミングで読んで買います。この記事を読んであなたのSATySFi力が上がることはおそらくありません。
そうそう
この記事はSATySFi Advent Calendar 2018の23日目の記事です。
内容
「The SATySFi bookをまだ読んでいない素人がSATySFiを使っている様子」を(主にツイートから)振り返ってまとめた記事。(Togetterでよかったのでは?)
何に使っているか
- 数学絡みの授業で毎週出る課題
- 手元の計算用紙の清書(たまにしかやっていない)
使っていてハマった点
分数累乗バグ
@bd_gfngfn +math(${\paren{2x}^{\frac{1}{3}}}); が1枚目の画像のようにバグるのですが、仕様でしょうか?(公開初期に入れたまま更新していないので、後のバージョンで直っている既知の不具合でしたらすみません)(対照: +math(${\paren{2x}^{3}});、2枚目)#SATySFi pic.twitter.com/RbxAKXaI3s
— hsjoihs (@hsjoihs) 2018年4月7日
現在の実装でも再現しました,バグなので直します(報告有難うございます)
— (g∘f)(n) (@bd_gfngfn) 2018年4月7日
SATySFiの数式組版機能にめっちゃしょうもないバグが潜んでいたので{U+F970}した(hsjoihs さんに報告してもらった分数を括弧に対して上附にしたときにカーンされすぎるバグの原因もこれだった)
— (g∘f)(n) (@bd_gfngfn) 2018年5月1日
SATySFiの発展に貢献できた。わーい。
改ページ周り
.@bd_gfngfn #SATySFi
— hsjoihs (@hsjoihs) 2018年2月11日
改変して遊んでいたらこうなった(ページ番号が文章より上に来てしまう)のですが、仕様でしょうか?(必要でしたらソースコードの非共有gistを書いたURLをDMでお送りします) pic.twitter.com/Gvz5XFxZdN
報告有難うございます,一応認識はしているバグです.どうも改ページ不可能な鉛直方向の空白が長く続くと稀にこのような結果を生じてしまうようです
— (g∘f)(n) (@bd_gfngfn) 2018年2月11日
文章を書いていると稀にこれに抵触し、そのたびに空の+pn{}
を挿入する必要が発生している。逆にいえば空の+pn{}
を挿入するだけで解決してしまうため、そんなに困っていない。
SATySFiなんもわからんので、挿入した図がページからあふれるのを防ぐために36行ぐらい+pn{}を書いている(SATySFibookを入手できていないので仕方がない)
— hsjoihs (@hsjoihs) 2018年10月9日
\int^{c}_{\infty}
とは書けない書けなかった
あー、\int^{c}_{\infty}とは書けなくて\int_{\infty}^{c}が強制されるのか #SATySFi
— hsjoihs (@hsjoihs) 2018年2月11日
version 0.0.3で試してみたらちゃんと両方動いた。ということはこれバグだったのか。
長い数式がページから溢れたときの対策方法
JOIerがJOIをしているあいだ、私は #SATySFi をしている(さて、長い数式を途中で改行したいときってどうするんだろう)
— hsjoihs (@hsjoihs) 2018年2月11日
わからないので2つの+mathに分割した
— hsjoihs (@hsjoihs) 2018年2月11日
間違いなくThe SATySFi bookに載っているはずなので調べる。
絶対値とかってどう書くの
\left. foobar \right|_{a}^{b}はどう書くのが正解なのだろう
— hsjoihs (@hsjoihs) 2018年2月11日
定義する能力はありますが,伸縮する括弧の定義の説明は正直なところ大変なので少々お待ちください……(すみません)
— (g∘f)(n) (@bd_gfngfn) 2018年2月11日
とりあえず
— hsjoihs (@hsjoihs) 2018年2月11日
let-math \boundary m a b =
${#m \|_{#a}^{#b}}
と定義しておいて、後でまともな定義に置き換えられるようにしておいた #SATySFi https://t.co/pwMO4JmbYt
これもまたThe SATySFi bookに載っているはずなので調べる。
対症療法
人(ここでは私を指す)は愚かなので、組版を都合通りにするためだけにアドホックな個数のaを背景色と同じ色でSATySFiに描画させている
— hsjoihs (@hsjoihs) 2018年11月6日
local.satyhに
let-inline ctx \hide inner = let ctx-hide = ctx |> set-text-color (CMYK(0., 0., 0., 0.)) in read-inline ctx-hide inner
とかいうものが生まれることになった。
フォントの差
#SATySFi でナブラの上にベクトル記号を出す方法が分からない(バグなのか私がSATySFiを理解していないだけなのかも分からない)
— hsjoihs (@hsjoihs) 2018年11月1日
自己解決。フォントの問題っぽい。https://t.co/AD6LigKsxM
— hsjoihs (@hsjoihs) 2018年11月1日
「とてもフォントの問題っぽいよなー、でも万が一バグだったら見過ごすの申し訳ないしちゃんと書いてまとめるか」→書く→GitHubにpush→出るやん→はいフォントですありがとうございました
— hsjoihs (@hsjoihs) 2018年11月1日
これはスクショを貼らないと分かりづらいので補足する。私のパソコン(Mac)上で件のpdfを表示したときには次のようになる。
一方、GitHubにpushしてからpdfのGitHubでの表示をSafariで見ると
となって、右にズレる代わりに表示はされる。
わからん。つらい。
最初期に入れたのでアプデが面倒だった
SATySFiのパッケージファイルだけを更新しようと思ったら無事失敗したので、ちゃんと再インストールを試みている
— hsjoihs (@hsjoihs) 2018年10月12日
最初期にSATySFiインストールチャレンジをしたタイプの人なので環境周りがグチャッとしてる
— hsjoihs (@hsjoihs) 2018年10月12日
特にhashでハマった。
SATySFiってどのパスからフォント読みに行ってるんだろう(足してるのに動かない)
— hsjoihs (@hsjoihs) 2018年10月12日
~/.satysfi/dist/fontsにJunicode.ttf足してるのになぁ
— hsjoihs (@hsjoihs) 2018年10月12日
hashを上書きしたら直った。なるほど。
— hsjoihs (@hsjoihs) 2018年10月12日
感想としては、
SATySFi再インストールチャレンジ、ハマりポイントがなかなか多くて大変だった(旧環境のバックアップを別名で取っておくことを強くおすすめします)
— hsjoihs (@hsjoihs) 2018年10月19日
というのがある(バックアップを取っていなかったため、途中から「これ途中で諦めるとSATySFiそのものが使えなくなるので、アプデを成功させるしかない」という状況になり、つらかった)。
satisfiedの綴りを間違えそうになる
「ゆーてsatisfyを #SATySFi と打ち間違えることなんてないやろ」と思っていたところ、無事satisfiedをsatysfiedとtypoし終了
— hsjoihs (@hsjoihs) 2018年4月16日
「yの数保存則」として脳内で定式化されてしまったので、satisfyと末尾にyがあれば間違えないがsatisfiedになると途端にミスる
— hsjoihs (@hsjoihs) 2018年4月16日
「satysfi【動詞】(三単現: satysfies, 現在分詞: satysfiing, 過去・過去分詞: satysfied):組版ソフトSATySFiを用いて組版すること。」が辞書に載るようになるぐらいSATySFiを盛り上げていくことで解決される問題である。*1
使っていて思ったこと
フォーマッターほしい
「Rustで何か書きたいけど書くものがない」と思っていたが、ふとSATySFiのフォーマッターが欲しいかもしれないと思い始めたんよな
— hsjoihs (@hsjoihs) 2018年11月1日
フォーマッターほしい。作りたい。
Haskellやっててよかった
まだThe SATySFi bookが紙でしか公開されていなかったタイミング(しかも当時日本にいなかったため紙のにもアクセスできず)で、表の罫線をいじる必要が発生したことがあった。
一方こちらはSATySFiで書いてるのでSATySFibookを入手したいアカウントである(居住地がね)
— hsjoihs (@hsjoihs) 2018年10月11日
具体的には、群論の授業で「九九表*2を書け」という課題が出た。
Haskellをやっていたおかげで、demo.pdfしかヒントのない状況で以下のようなコードを書くことに成功した。
\tabular(fun cellf multif empty -> [ [cellf {Table} ; multif 1 1 {${0}}; multif 1 1 {${3}}; multif 1 1 {${6}}; multif 1 1 {${9}};]; [cellf {${0}}; cellf {${0}}; cellf {${3}}; cellf {${6}}; cellf {${9}};]; [cellf {${3}}; cellf {${3}}; cellf {${6}}; cellf {${9}}; cellf {${0}};]; [cellf {${6}}; cellf {${6}}; cellf {${9}}; cellf {${0}}; cellf {${3}};]; [cellf {${9}}; cellf {${9}}; cellf {${0}}; cellf {${3}}; cellf {${6}};]; ])(fun xs ys -> ( match (ys, List.reverse ys) with | (y0 :: y2 :: _, ylast :: _) -> ( match (xs, List.reverse xs) with | (x0 :: x1 :: x3 :: _, xlast :: _) -> let grlstY2 = [y0; ylast] |> List.map (fun y -> stroke 1pt Color.black (Gr.line (x0, y) (xlast, y))) in let grlstX2 = [x0; xlast] |> List.map (fun x -> stroke 1pt Color.black (Gr.line (x, y0) (x, ylast))) in (stroke 0.5pt Color.black (Gr.line (x1, y0) (x1, ylast)) :: stroke 0.5pt Color.black (Gr.line (x0, y2) (xlast, y2)) :: List.append grlstX2 grlstY2 ) | _ -> [] ) | _ -> [] ));
当時は日本国外でThe SATySFi bookを入手する手段が乏しかったため読んでいなかったのは仕方がないが、この記事を書いている段階ではオンラインでも閲覧ができ、そもそも私が日本国内にいる。そんな状況で読んでいないというのはただの怠慢なので読んでいきたい。本当はネット公開された時点で読もうと思ったのだけれどpixivアカウントを作るのが面倒で放置していた
ブロックコメントってあるんだろうか
あるのか分からないので全部の行頭に%
をつけている。「コメントモード」とやらは%
のみで発生する、みたいな記述を見たことがある気がするし、これが正解なのでは。
ちなみに私は「SATySFiに複数行コメントがほしい」と主張しているわけではなく、
/* */スタイルのコメントがネストできることの欠点って、パーサの処理が少し増える以外に何かあるのだろうか。
— hikalium (@hikalium) 2018年4月19日
ネストできない環境下では コメントの中身に関係なく*/で終わるってのはそれなりに明確だと思うのですが、プログラムをコメントで必ず無効化出来るとすると結構大変で中途半端にやるなら出来なくていいやって考える言語設計者もそれなりにいるだろうなと思います。
— Miura Hideki (@miura1729) 2018年4月19日
などを考えると「複数行コメントなどない」というのも普通によい設計だと考える。(ここまで書いておいて「ありますよ〜」って言われたらどうしよう)
エラーメッセージのわかりやすさって正義ですよね
SATySFi、普通に学校の課題とか出すのにも便利で使っている(ライブラリの少なさによるデメリットよりも、エラーメッセージの分かりやすさのメリットのほうが私にとっては勝るため)
— hsjoihs (@hsjoihs) 2018年4月2日
LaTeX、エラーメッセージがあまりにアなのも相まって最近はSATySFiを使っている https://t.co/tgDWAoxYjT
— hsjoihs (@hsjoihs) 2018年5月23日
利点
— hsjoihs (@hsjoihs) 2018年10月18日
・エラーメッセージが分かりやすい
・エラーメッセージが分かりやすい
欠点
・Essential Copying and Pasting From Stack Overflowが効かない
・SATySFiを理解していないので、欲しいライブラリが無いときは「書いた人いませんかー」とTwitterで呼びかける羽目になる
という(至極当たり前)
The SATySFi book、読まなきゃなんだよなぁ
さて課題の中で行列を書きたいのだがSATySFiなんもわからん
— hsjoihs (@hsjoihs) 2018年10月2日
解決しました?(聞きたい
— れいにー☔️2日目東ツ-32b (@wraikny) 2018年10月7日
してないです(複素数平面で逃げて提出しました)
— hsjoihs (@hsjoihs) 2018年10月7日
遅れてしまいましたが、SATySFi で行列を書くことができたのでライブラリとして公開してみました。ご自由にコピペしてお使いください :) https://t.co/mbVPoPA3ie
— ねっけつ (@nekketsuuu) 2018年10月12日
ありがとうございます!
— hsjoihs (@hsjoihs) 2018年10月12日
The SATySFi bookを読まないとライブラリが足りないときにライブラリを書けないので、The SATySFi bookを読まねばならない。それはそう。
追記
記事を公開した後、
ライトユーザー?(何を言っているんだという気持ち)
— ぷりにゃん (@puripuri2100) 2018年12月23日
hsjoihsさんはヘビーユーザーな気がする
— ぷりにゃん (@puripuri2100) 2018年12月23日
言われてみれば、SATySFiへの理解が足りていないだけで、書いている量はそれなりにあるのかもしれない https://t.co/DgiK9v2Qsn
— hsjoihs (@hsjoihs) 2018年12月23日
自分みたいに「SATySFiで遊んでいる時間は長いけれども書いた文章量は少ない」という人もある程度いますしね
— ぷりにゃん (@puripuri2100) 2018年12月23日
ということになったので、「ライトユーザー」を「分かってないマン」に変更。