Scrapboxで技術同人誌を書いている話 (daiiz)
20:25~
こんばんは
daiizです

京都でScrapboxを開発しています
ユーザー時代からScrapboxを色々な活用法を実験している
今日はScrapboxで技術同人誌を書く話です
Scrapbox実験コーナー
バックナンバー
目標
これまでScrapboxに書き溜めたページを再構成して一冊の薄い本を書く
Scrapbox上で執筆する
ボタン一発で印刷所に入稿可能なPDFファイルを生成する
Scrapboxのページグラフ
privateなprojectではまた違った様相
育ってきたノードについて書く
思い入れのあるネタ、気づいたら詳しくなっていたネタが見えてくる
ネタは十分にある、という状態
Scrapboxは執筆前のネタ集めに最適
ページグラフのシリアライズ
ページグラフは日々刻々と成長している
ある時点での成果をシリアライズして放出する価値があるのではないか?
人生の節目で撮る写真みたいに
目次を書く
プリアンブルも書ける
コンパイル時にここに書いた設定が反映される
章を書く
普段どおり書く
書きやすさを求めた工夫
Scrapbox上で連続する行を一行として出力する
空行を挟むと別の行として認識される
さらに行頭に [ ]
を書いて字下げすると改段落される
節を別ページに切り出せる
1ページが長くなりすぎてしまうと見通しが悪い
将来的にエクスポートしたJSONファイルを配布することも考えているので、普段のスクボのように小粒なページで表現されている方が嬉しい
付録
参照されているが目次には存在しないページをAppendixとして巻末に収録する
節を別ページに切り出せる
執筆時も小さいページを組み合わせる体験をしたい
章や節を個別にPDFプレビューできる
章ページにリンクを張っておけば展開されるようにした
記法の拡張
上級者向けの機能として文字装飾記法の拡張がある
執筆に便利な記法を定義した
UserCSSで見た目を書く
自作の文書変換器で解釈できるようにする
定義した記法
コメント
[# ここはコメントです]
節の埋め込み
[! []]
図のキャプションと表示サイズ
脚注 (footnote)
Scrapboxの1ページは、直列化すると結構なボリュームになる
ページ自体は短くても関係するストーリーが分厚かったりする
面白そうなページを理解しやすい流れで一つにまとめあげないといけない
背景知識や目的を改めて述べる必要がある
しっかり説明しようとするとそれなりの分量になる
リンクによるコンテキストがないので各章の導入部も力を入れる
トピックごとに小さいページを沢山書いてリンクで関連付けるのはラク
本題をいきなり書ける気軽さは日々のメモとしてはやはり強力、と再認識した
Page Menu
ページをPDFで表示するボタン
ローカルサーバーにアップロードするボタン
製本するボタン
デモ
執筆環境用のプロジェクトを作った
原稿、進捗管理、ボツ案、その他のメモがすべてここにある
仕組み
Scrapboxページ ->
(content_script.js) --postMessage--> (background.js)
--POST--> ローカルサーバー
下線部はブラウザ拡張機能で実行
専用のブラウザ拡張機能
ページのHTML要素のclassNameなどを読んで記法を解釈
LaTeXとして出力
ローカルサーバーにアップロード
そのうち公開予定
ドッグフーディングの真っ最中
ローカルサーバー
LaTeX文書からPDF/X-1a形式のPDFファイルを生成する
画像をRGB → CMYKに変換する
ページに含まれる画像をfetchして一括変換
こちらもDocker image を公開予定
TeXコンパイル環境を一瞬で構築できて便利
おまけ
PDF/X-1a
LuaTeXで
\usepackage[x-1a1]{pdfx}
を指定すれば生成できる
画像の変換はやってくれないので自分で処理する
この規格に沿っていれば印刷所でのトラブルは避けられる
主な制約
画像がすべて
CMYKまたはGrayscaleカラースペースで表現されていること
フォント埋め込みされていること
トリムボックス (仕上がりサイズ)、ブリードボックス (裁ち落としサイズ) 指定されていること
プリアンブルの
gentombo
を消せばトンボなしでも出力できるので
電子書籍向けファイルも簡単に生成できる
まとめ
日頃書き溜めたページを組み合わせて本を書こう