orgファイルの1つのサブツリーを1つの記事にする方法
orgのサブツリーを1つの記事にするメリット
emacsでは、orgファイル全体をHTMLやmarkdownにエキスポートすることができます。ブログの記事などは1つの記事につき1つのorgファイルを用いることが簡明な使い方でしょう。
この方法とは別に、1つのorgファイルの中の、特定のサブツリー以下をエキスポートすることもできます。 この機能を使うと、全てのブログ記事をまとめて一つのファイルで取り扱い、必要なサブツリーだけエキスポートして公開する、といった使い方が可能です。この方法は、JekyllやHugo等の静的サイトジェネレーターでWebサイトを生成するときに便利に活用できます。
静的サイトジェネレーターでは、1つの記事を1つのファイルとして扱います。この場合、それぞれのファイルはファイル名で区別することになりますが、ファイル名はslugや日付をつけることが一般的です。そうすると、ファイル名だけでは内容が分からない、という問題が発生します。
そうではなく、全てのブログ記事を1つのorgファイルにまとめて、記事にしたいサブツリーを個別のファイルにエキスポートするようにすると、編集したい記事を簡単に追加したり、見つけることができるようになります。
サブツリーにプロパティを設定する
orgファイルには様々なプロパティを設定することができます。例えば、記事のタイトル、著者名、日付などです。これらはファイル全体に1つ設定することが基本的な使い方です。しかし、こういったプロパティをサブツリーにつけることも可能です[1]。
例を見てみましょう。
#+TITLE: 私のブログの記事
#+DATE: 2021-11-01
* 記事
** ある日の日記
:PROPERTIES:
:EXPORT_TITLE: ブログに掲載するタイトル
:EXPORT_DATE: 2021-11-07
:EXPORT_FILE_NAME: articles/20211107-101407
:END:
ある日、こんなことがありました。
最初の2行はファイル全体につけたプロパティです。これに対して、「ある日の日記」の次の行から書かれているのがサブツリーに対するプロパティです。全て、ファイル全体につけられるプロパティの頭に「EXPORT_」をつけたものが、サブツリーのプロパティです[2]。
これらはファイル全体のプロパティを上書きします。上記の例では、ファイル全体のタイトルは「私のブログの記事」ですが、サブツリーのタイトルは「ブログに掲載するタイトル」になります。また、エキスポートするファイルのPATHは EXPORT_FILE_NAME プロパティで設定しています。
このように設定したうえで、 C-c C-e でorgエキスポートのメニューを出し、 C-s を押してから目的のエキスポート形式を選択すれば、カーソルがいまいるサブツリーのみエキスポートすることができます。ただし、1つの記事を更にサブツリーに分けているときは注意が必要です。カーソルは必ず、記事全体のサブツーリに置きます。
Discussion