ScrapRun
動作例
https://gyazo.com/ea18169ee7493b2f2886f3178d6053f8
https://gyazo.com/64ff48f5c85f737963013d08cf3e1896
https://gyazo.com/f3cfdb5aa4e4ddf2d7f1a9b933c35eb8
https://gyazo.com/464f96d9b30f97fdf6e10380fbecd210
https://img.shields.io/github/v/release/takker99/ScrapRun?display_name=tag&sort=semver#.svg
使い方
very easy ver.
ここをクリックして生成されたコードを自分のページのscript.jsに貼り付けてください TikZも使いたい人ver.
1. ここをクリックして生成されたコードを、適当なページの適当なコードブロックに複数回に分けて貼り付けてください コピペ一回では貼りきれないコードサイズなので、複数回に分けてください
以降、/project/workerのmod.jsに貼り付けたとします
2. 以下のURLの"https://scrapbox.io/api/code/takker-dist/scrapbox-tikz/mod.js"を"https://scrapbox.io/api/code/project/worker/mod.js"に書き換えてアクセスしてください
3. 生成されたコードを自分のページのscript.jsに貼り付けてください
installation
⚠ScrapRunだけでは何も動きません
コードブロックの中身をどうpreviewするかは、各自で実装する必要がある
Userが自由にpreviewerを作れるよう設計しているため
TikZのpreviewer以外はいつものtakker.icon製UserScriptと要領は同じです
TikZのpreviewerはweb workerを使っているため、worker codeもbuildする必要があります
code:with-tikz.ts
setup({ previewers: [
{ when: /(?:^|\.)svg$/, preview: previewSVG },
{ when: /(?:^|\.)glsl$/, preview: previewGLSL },
{ when: /(?:^|\.)(?:plantuml|puml|pu)$/, preview: previewPlantUML },
{ when: /(?:^|\.)tikz\(tex\)$/, preview: previewTikZ(WORKER_URL, ASSETS_URL) },
]});
previewers(型:Previewer[])に使いたいpreviewerの設定を書く
Previewerのwhenに指定した正規表現に一致するファイルネームのコードブロックに対して、previewを実行する
previewTikZにはworker codeのURLと、texのwasmやpackages,フォントデータを圧縮したzipファイルへのURLを渡す必要がある
Previewerの作成方法
previewの型定義は以下の通り
https://code2svg.vercel.app/svg/https://raw.githubusercontent.com/takker99/ScrapRun/0.3.1/preview.ts#.svg https://github.com/takker99/ScrapRun/blob/0.3.1/preview.ts
引数にコードブロックのfilenameと、更新前のコードブロック情報before、更新後のコードブロック情報afterが渡される
Preview内で表示するDOMを組み立てたあと、renderにわたして描画する
cleanup函数を返却できる
reference実装の技術概要
SVG:Data URLにして<img>に表示しているだけ
TikZ:Web WorkerでTikZJaxを動かして作ったSVGをData URLにして<img>で表示 画像を右クリックしてダウンロードできる
システムカラーを認識してlight theme/dark themeが勝手に変わるように作ってある
takker.icon
TikZのpreviewが死ぬほど便利
日本語圏で主流のLuaLaTeXはcompileが遅いので、TikZのrendering結果を確認するのにかなり時間がかかり、try and errorを素早く回せない
scrapbox-TikZjax(TIkZのpreviewerの名前)は複雑な3D plotを使わない限り一瞬でrenderingされるため、編集速度をと同じ速さでrendering結果を確認できる code:very-easy.ts
setup({ previewers: [
{ when: /(?:^|\.)svg$/, preview: previewSVG },
{ when: /(?:^|\.)glsl$/, preview: previewGLSL },
{ when: /(?:^|\.)(?:plantuml|puml|pu)$/, preview: previewPlantUML },
]});