Emacsのorg-modeには多様な文書形式 (PDF, OpenDocument, markdown, ePubなどなど) に対応した豊富なエクスポート機能があります。通常のエクスポートは手動で org-export-dispatch
(C-c C-e
) を起動しますが、ファイル更新のたびに手動でやるのは少しだけ面倒です。自動化できないかと思っていたら、すでに @skkzsh さんがやり方を公開してくれていました。
ただ、このやり方では、直接 org-html-export-to-html
などのエクスポートコマンドを呼び出しており、フォアグラウンドで実行されます。バックグラウンドで非同期エクスポートをする場合には、少し工夫が必要です。以下のように、org-export-async-start
を呼び出し、その中で非同期プロセスに個別のエクスポートコマンドを送るようにするとうまくいきます。
init.el
(add-hook 'org-mode-hook
(lambda ()
(add-hook 'after-save-hook
(lambda ()
(when (file-exists-p (concat (file-name-sans-extension (buffer-file-name)) ".html"))
(org-export-async-start
(lambda (file)
(message "Exported to %s" file))
'(org-html-export-to-html))
nil)
(when (file-exists-p (concat (file-name-sans-extension (buffer-file-name)) ".pdf"))
(org-export-async-start
(lambda (file)
(message "Exported to %s" file))
'(org-latex-export-to-pdf))
nil))
nil t)))
これで、orgファイルを更新すると自動的にバックグラウンドでエクスポートされるようになりました。