web-dev-qa-db-ja.com

コマンドラインからのorg-modeファイルのバッチエクスポート

特定のディレクトリにいくつかのorg-modeファイル:foo1.orgfoo2.orgなどがあると仮定します。次のようなものを呼び出すことができるスクリプト(おそらくメイクファイル)が欲しいです。

$ generate-pdfs

foo1.pdffoo2.pdfなどが生成されます。

emacs --batch --eval <MAGIC>のようなものは良いスタートだと思いましたが、魔法はわかりません。

inside emacsだけのソリューションも興味深いかもしれません。

31
Dror

あなたが言ったように、EmacsにはシェルからEmacsで操作を実行するための--batchオプションがあります。それに加えて、-lフラグを使用してファイルからEmacsLISPコードをロードして実行したり、-fフラグを使用して単一のLISP関数を実行したりできます。

これは、単一のorg-modeファイルをHTMLにエクスポートする基本的な例です。

emacs myorgfile.org --batch -f org-html-export-to-html --kill

おそらく、完全なorg-modeプロジェクトのエクスポート/公開など、より高度なものが必要です。そのためのサンプルコードはありませんが、それほど複雑ではないはずです。

また、ディレクトリ内のすべてのorg-modeファイルをHTMLにエクスポートする(およびHTMLファイルを別のディレクトリにコピーする)ために、少し前に作成したサンプルのMakefileもあります。

OUT_DIR=/some/output/dir/html
# Using GNU Make-specific functions here
FILES=$(patsubst %.org,$(OUT_DIR)/%.html,$(wildcard *.org))

.PHONY: all clean install-doc

all: install-doc

install-doc: $(OUT_DIR) $(FILES)

$(OUT_DIR):
        mkdir -v -p $(OUT_DIR)

%.html: %.org
        emacs $< --batch -f org-html-export-to-html--kill

$(OUT_DIR)/%.html: %.html
        install -v -m 644 -t $(OUT_DIR) $<
        rm $<

clean:
        rm *.html

編集:

Org-mode 8と新しいエクスポートエンジンにより、HTMLエクスポートの機能が変更されました。

前の例をOrg7以前で機能させるには、org-html-export-to-htmlorg-export-as-htmlに置き換えます。

36
florianlh

diredでいくつかの組織ファイルをマークし、これを呼び出します。

(defun dired-org-to-pdf ()
  (interactive)
  (mapc
   (lambda (f)
     (with-current-buffer
         (find-file-noselect f)
       (org-latex-export-to-pdf)))
   (dired-get-marked-files)))

非同期とは何かがわかっている場合は、時間がかかる可能性があるため、呼び出しをラップします。

更新:

これは、素晴らしいdiredアプローチと他の不完全なアプローチを組み合わせたバージョンです:)

(defun dired-org-to-pdf ()
  (interactive)
  (let ((files
         (if (eq major-mode 'dired-mode)
             (dired-get-marked-files)
           (let ((default-directory (read-directory-name "dir: ")))
             (mapcar #'expand-file-name 
                     (file-expand-wildcards "*.org"))))))
    (mapc
     (lambda (f)
       (with-current-buffer
           (find-file-noselect f)
         (org-latex-export-to-pdf)))
     files)))
1
abo-abo

そのためだけに、MakefileとスタンドアロンのBashスクリプト(Cygwinでも使用可能)のスイートであるOrgMkを(今週の終わりまでに)公開する予定です。さらに:HTML、Ascii、Beamerなどの生成。

私のGitHubアカウントで見つけることができます: https://github.com/fniessen/ (Emacs構成ファイル、カラーテーマ、およびOrg Babelrefcardなどの他のものがすでにあります-で進捗)。

1
fniessen