Jazzと読書の日々

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

Obsidianのフォルダから目次ファイルを作る

フォルダ内のファイルをリストアップします。

MOC (Map of Contents)

長編小説を書くとき、一つのファイルに文章を書いていっても管理が大変だから、章ごとにファイルを作り、その目次となるファイルがあると便利だなと思い、作りました。 MOCファイルですよね。 章の並び順を考えるためのリスト。

TemplaterスクリプトからDataviewを呼び出す形式なので、両方必要です。

Playlist.md

Templaterに登録してお使いください。

<%*
f = tp.file.title
p = tp.file.folder(true) + "/"
if(f == "playlist"){
  s = tp.file.content
  if(/!\[\[/.test(s)){
    s = s.replace(/!\[\[/mg, "[[")
  }else{
    s = s.replace(/\[\[/mg, "![[")
  }
}else{
  const d = DataviewAPI.pages("")
    .filter(x => x.file.path.includes(p))
    .filter(x => !x.file.name.includes("playlist"))
    .sort(x => x.file.name)
    .map(x => "## [[" + x.file.name + "]]")
  s = "Playlist\n\n" + d.join("\n")
}
f = p + "playlist.md"
p = app.vault.getAbstractFileByPath(f)
if(p){
  await app.vault.modify(p, s)
}else{
  p = await app.vault.create(f, s)
}
app.workspace.activeLeaf.openFile(p)
%>

使い方

スクリプトを実行すると、そのファイルと同じフォルダ内にあるファイルを列挙してplaylist.mdというファイルを作ります。

それぞれ内部リンクになっているので、そこから元のファイルを開いて推敲します。 要らなくなればリンクを消せばいいし、内部リンクを見出し扱いにしているので「アウトライン」で並べ変えることもできます。 Obsidianは、元ファイルの名前を変更しても、リンクの名前も追従して変更されるので便利。

plylist.mdでPlaylistを実行するとファイル埋め込みに変わるので、中身を見ながら全体の流れを検討できます。

問題点

本当はplaylistで実行したとき、ファイルを順番に繋いでマージファイルを作りたかったんだけど、中身の読み込み方がわからなかった。

ここは手作業かなあ。 マージしたあとWord用に変換するとかePubにするとかだと、モバイルでは完結できないし、Ulyssesを使う方が便利かも。

まとめ

MOCの下書きが簡単にできるのがポイントかな。

追記 20:30

深いフォルダだとplaylistが作れなかったりする不具合を修正しました。