はじめに

最近、長い文章を書く時に Obsidian の Outliner を使用している
Outliner はバレットリストとインデントを使用して、構造化したリストを作成しやすくするプラグイン

公式サイトより

このように、依存関係や構造を組み直すのが簡単なので、細かく構造化した長文を書く際にとても便利
ただ、アウトラインで文章を書いても、最終的にはつなぎ直さなければならず、それがちょっと面倒くさかった

chatGPT に「文字を変えずに繋げて文章にして」というとそれなりに繋げてくれるが、遅いのと微妙に改変が入るときがあるので、ちょっと使いづらい

今回 Templater を使用してアウトラインを文章に変換するスクリプトを書いてみたので記録しておく

アウトラインの書き方のルール

これは私がアウトラインで文章を書く際のルール (というか自然と大体こうなっていた)

  • Section
    • Paragraph
      • 日本語の本文
        • 英語の本文
          • 備考、引用など

このルールで記載されたアウトラインを英語の繋がった文章にする

Templater のスクリプト

以下の処理を行う

  1. ノートの内容を改行で区切ったリストを作成
  2. 各行に繰り返し処理を行う
  3. - で開始する行 (Section) は文字だけを残して改行
  4. \t- で開始する行 (Paragraph) は改行だけ
  5. \t\t\t- で開始する行 (英文) は文字だけを残しスペースを挟む
  6. その他は無視
  7. 抽出・編集された行をつなげる

以下がスクリプト

const lines = tp.file.content.split('\n');
let result = [];
lines.forEach(line => {
	if (line.startsWith(`- `)){
	    result.push(`\n\n${line.trim().slice(2)}`);
	} else if (line.startsWith(`\t- `)){
		result.push(`\n\n`);
	} else if (line.startsWith(`\t\t\t- `)) {
		result.push(`${line.trim().slice(2)} `);
	}
});
const finalResult = result.join('');
return finalResult;

以下に PPAP の歌詞がアウトラインで2回連続で書かれている (ふと思い出した…なつかしい…)

  • PPAP
    • A メロ
      • ペンを持っている
        • I have a pen.
      • リンゴを持っている
        • I have an apple.
      • リンゴペン!
        • Apple pen!
      • ペンを持っている
        • I have a pen.
      • パイナップルを持っている
        • I have a pineapple.
      • パイナップルペン!
        • Pineapple pen!
    • サビ
      • リンゴペン…パイナップルペン…
        • Apple pen… pineapple pen…
      • ペンパイナップルアップルペン!
        • Pen-Pineapple-Apple-Pen!
          • 繋げただけ
    • 締め
      • ペンパイナップルアップルペン
        • Pen-Pineapple-Apple-Pen!
          • 繋げただけ
  • PPAP(2回目)
    • A メロ
      • ペンを持っている
        • I have a pen.
      • リンゴを持っている
        • I have an apple.
      • リンゴペン!
        • Apple pen!
      • ペンを持っている
        • I have a pen.
      • パイナップルを持っている
        • I have a pineapple.
      • パイナップルペン!
        • Pineapple pen!
    • サビ
      • リンゴペン…パイナップルペン…
        • Apple pen… pineapple pen…
      • ペンパイナップルアップルペン!
        • Pen-Pineapple-Apple-Pen!
          • 繋げただけ
    • 締め
      • ペンパイナップルアップルペン
        • Pen-Pineapple-Apple-Pen!
          • 繋げただけ

これが書かれたノートにスクリプトを適応すると…↓↓

PPAP

I have a pen. I have an apple. Apple pen! I have a pen. I have a pineapple. Pineapple pen!

Apple pen… pineapple pen… Pen-Pineapple-Apple-Pen!

Pen-Pineapple-Apple-Pen!

PPAP(2回目)

I have a pen. I have an apple. Apple pen! I have a pen. I have a pineapple. Pineapple pen!

Apple pen… pineapple pen… Pen-Pineapple-Apple-Pen!

Pen-Pineapple-Apple-Pen!

↑↑完成した

おわりに

今回のスクリプト、要するに行ごとに条件を当てはめて編集したり抽出したりできるということなので他にも応用できそう
Obsidian は Dataview と Templater の柔軟性が非常に高くて、やろうと思ったことがほぼできるのでほんと助かる