Jazzと読書の日々

iPadを筆記具として使う方法を模索します

Obsidian Playlistで分割執筆をしてみよう

章ごとに原稿を書いて、あとで連結する。 それが分割執筆です。 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テーマだと様々なボックスが使えるので、背景設定やキャラ付けに関するファイルは[?]などにしておくといいかもしれません。