章ごとに原稿を書いて、あとで連結する。 それが分割執筆です。 ScrivenerやUlyssesで使われる方法ですが、あんなに複雑ではありません。 もっと雑で丈夫です。
分割執筆
文章が長くなると全体像の把握が大変になります。 目次ファイルを作り、そこをハブにすると書きやすくなるんじゃないか。 そうした仕組みを考えてみました。
Playlist.md
Templaterスクリプト。 内部でdataviewを使います。
<%* p = tp.file.folder(true) + "/" q = "playlist" t = tp.file.title if(t == q){ s = tp.file.content q = "merge" d = s.match(/\[x\] \[\[.+?\]\]/mg) s = "" for(i=0; i<d.length; i++){ f = p + d[i].replace(/\[x\] \[\[(.+?)\]\]/, "$1.md") b = app.vault.getAbstractFileByPath(f) s+= await app.vault.read(b) + "\n" } }else{ const d = DataviewAPI.pages("") .filter(x => x.file.path.includes(p)) .filter(x => !x.file.name.includes(q)) .filter(x => !x.file.name.includes("merge")) .sort(x => x.file.name) .map(x => "- [x] " + x.file.name + " ") s = p + "\n\n" + d.join("\n") } f = p + q + ".md" p = app.vault.getAbstractFileByPath(f) if(p){ if(q != "merge"){ s = await app.vault.read(p) if(s.search("\[\[" + t + "\]\]") < 0) s+= "\n- [x] " + t +" " } await app.vault.modify(p, s) }else{ p = await app.vault.create(f, s) } app.workspace.activeLeaf.openFile(p) %>
Commanderでタブバーに置くと便利です。
使い方
Playlistスクリプトを実行すると、同じフォルダ内のファイルを並べた目次ファイルを作成します。 これを「プレイリスト」と呼びます。
一度プレイリストを作ると、それ以降はこのプレイリストを開きます。 未登録のファイルでPlaylistスクリプトを実行した場合は、そのファイルへのリンクをプレイリストに追記します。 これでプレイリストを育てていく。
アウトライナー形式
プレイリストはOutlinerの形式に準拠しました。 「Move list and sublists up/down」で順番の入れ替えができます。 インデントでグループ化すると移動も楽になります。
マージ
プレイリストでPlaylistスクリプトを実行するとマージになります。 マージは、プレイリストの順番でファイルの連結を行います。 結果をmerge.mdとして出力します。
内部リンクにはチェックボックスがつきます。 そのボックスにチェックがついているとマージの対象になります。 チェックを外せば連結ファイルには含みません。
まとめ
Minimalテーマだと様々なボックスが使えるので、背景設定やキャラ付けに関するファイルは[?]
などにしておくといいかもしれません。