😽

orgファイルの1つのサブツリーを1つの記事にする方法

2021/11/08に公開

orgのサブツリーを1つの記事にするメリット

emacsでは、orgファイル全体をHTMLやmarkdownにエキスポートすることができます。ブログの記事などは1つの記事につき1つのorgファイルを用いることが簡明な使い方でしょう。

この方法とは別に、1つのorgファイルの中の、特定のサブツリー以下をエキスポートすることもできます。 この機能を使うと、全てのブログ記事をまとめて一つのファイルで取り扱い、必要なサブツリーだけエキスポートして公開する、といった使い方が可能です。この方法は、JekyllHugo等の静的サイトジェネレーターで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つの記事を更にサブツリーに分けているときは注意が必要です。カーソルは必ず、記事全体のサブツーリに置きます。

脚注
  1. Property Syntax (The Org Manual) ↩︎

  2. When exporting sub-trees, special node properties can override the above keywords. These properties have an ‘EXPORT_’ prefix. For example, ‘DATE’ becomes, ‘EXPORT_DATE’ when used for a specific sub-tree. Except for ‘SETUPFILE’, all other keywords listed above have an ‘EXPORT_’ equivalent. ↩︎

GitHubで編集を提案

Discussion