次のコマンドを使用すると、バックエンドを選択して、各最上位サブツリーを個別のファイルにエクスポートできます。
(defun org-export-all (backend)
"Export all subtrees that are *not* tagged with :noexport: to
separate files.
Note that subtrees must have the :EXPORT_FILE_NAME: property set
to a unique value for this to work properly."
(interactive "sEnter backend: ")
(let ((fn (cond ((equal backend "html") 'org-html-export-to-html)
((equal backend "latex") 'org-latex-export-to-latex)
((equal backend "pdf") 'org-latex-export-to-pdf))))
(save-excursion
(set-mark (point-min))
(goto-char (point-max))
(org-map-entries (lambda () (funcall fn nil t)) "-noexport" 'region-start-level))))
現在、これはHTML(html
)、LaTeX(latex
)、およびPDF(pdf
)エクスポートをサポートしています。に句を追加することで、バックエンドのサポートを追加できcond
ます。
docstringが言うように、サブツリーごとに、:EXPORT_FILE_NAME:
プロパティをエクスポート先のファイル名に設定する必要があります。(他のオプションについては以下を参照してください。)
見出しテキストからエクスポートファイル名を自動生成する
:EXPORT_FILE_NAME:
すべてのトップレベルの見出しにプロパティを追加したくない場合はorg-export-all
、:EXPORT_FILE_NAME:
エクスポート中に一時的に設定する、見出しテキストなどからファイル名を自動的に生成するように変更できます。
(defun org-export-all (backend)
"Export all subtrees that are *not* tagged with :noexport: to
separate files.
Subtrees that do not have the :EXPORT_FILE_NAME: property set
are exported to a filename derived from the headline text."
(interactive "sEnter backend: ")
(let ((fn (cond ((equal backend "html") 'org-html-export-to-html)
((equal backend "latex") 'org-latex-export-to-latex)
((equal backend "pdf") 'org-latex-export-to-pdf)))
(modifiedp (buffer-modified-p)))
(save-excursion
(set-mark (point-min))
(goto-char (point-max))
(org-map-entries
(lambda ()
(let ((export-file (org-entry-get (point) "EXPORT_FILE_NAME")))
(unless export-file
(org-set-property
"EXPORT_FILE_NAME"
(replace-regexp-in-string " " "_" (nth 4 (org-heading-components)))))
(funcall fn nil t)
(unless export-file (org-delete-property "EXPORT_FILE_NAME"))
(set-buffer-modified-p modifiedp)))
"-noexport" 'region-start-level))))
この関数は、見出しテキストのスペースを「_」に置き換えることにより、エクスポートファイル名を生成します。他の方法でファイル名を生成する場合は、replace-regexp-in-string
sexpを好きなものに変更します。
:EXPORT_FILE_NAME:
設定時に生成:CUSTOM_ID:
次のアドバイスを使用org-set-property
すると、設定した:EXPORT_FILE_NAME:
ときに適切な値が自動的に設定されます:CUSTOM_ID:
。
(defadvice org-set-property (after set-export-file-name
(property value) activate compile)
(when (equal org-last-set-property "CUSTOM_ID")
(let ((export-file-name
(concat (org-entry-get nil "CUSTOM_ID")
"-"
(replace-regexp-in-string " " "-" (downcase (org-get-heading t t))))))
(org-entry-put nil "EXPORT_FILE_NAME" export-file-name))))
これは値にファイル拡張子を追加:EXPORT_FILE_NAME:
しませんが、特定のバックエンドにエクスポートするときorg-mode
、結果のファイルに適切な拡張子を自動的に選択するため、問題ではないことに注意してください。
追加情報
既存のサブツリーを一括で更新する
:EXPORT_FILE_NAME:
プロパティを設定する必要がある既存のサブツリーが多数ある場合は、キーボードマクロを使用できます。最初のサブツリーにポイントを配置し、次を実行します。
次のサブツリーに対してマクロを繰り返すには、を押しF4ます。残りのすべてのサブツリーに対してマクロを繰り返すには、M-0 F4(ゼロ)を押します。
将来のセッションのためにマクロを保存する
デフォルトでは、キーボードマクロはセッション間で保存されません。後で使用するためにマクロをinitファイルに保存するには、次のようにします。
マクロに名前を付けます。
M-x name-last-kbd-macro
RET org-set-export-file-name
RET
初期化ファイルを見つけて、マクロを挿入したい場所に移動します。
マクロを挿入します。
M-x insert-kbd-macro
RET org-set-export-file-name
RET
Emacsは次のコードをポイントに挿入します:
(fset 'org-set-export-file-name
"\C-c\C-xpCUSTOM_ID\C-m\C-m\C-c\C-f")
目を細めfset
てみると、マクロの記録時に押したキーのシーケンスが2番目の引数に含まれていることがわかります。
(オプション)最良の結果を得るorg-set-export-file-name
には、キーにバインドすることをお勧めします。
(define-key org-mode-map (kbd "<f6>") 'org-set-export-file-name)
セーブ。
:EXPORT_FILE_NAME:
プロパティを設定する方法についてのヒントを教えてください:CUSTOM_ID:+heading-title-lowercased
。