Подтвердить что ты не робот

Emacs Org-mode - экспортировать в другой каталог?

Я знаю, что это немного второстепенное, но это меня подслушивало. Я использую Org-mode для проекта, и я склонен экспортировать его в PDF или HTML довольно часто, и он оставляет мой каталог, замусоренный файлами PDF, Tex и HTML. Есть ли способ экспортировать Org-mode в другое место, возможно, подкаталог под названием./exports?

4b9b3361

Ответ 1

В дополнение к использованию публикации, изменив вашу переменную org-publish-project-alist как предлагается @user1248256, вы можете напрямую указать переменную org-export-publishing-directory в вашем файле:

#+bind: org-export-publishing-directory "./exports"

* This is a test headline
Some text here.  This should be exported to the "./exports" directory.

При экспорте он будет помещен в каталог "export", но только если этот каталог существует. Если он не существует, вы получите сообщение об ошибке в консоли.

Ответ 2

Первоначальный вопрос касался экспорта org файлов, в то время как большинство приведенных выше ответов на самом деле имеют отношение к публикации, что является другой концепцией.

Я считаю, что лучший способ решить проблему, поставленную OP, - добавить в файл инициализации emacs (.emacs) следующее:

(defadvice org-export-output-file-name (before org-add-export-dir activate)
  "Modifies org-export to place exported files in a different directory"
  (when (not pub-dir)
      (setq pub-dir "exported-org-files")
      (when (not (file-directory-p pub-dir))
       (make-directory pub-dir))))

PS:

  1. Я понимаю, что пятилетний вопрос может больше не относиться к ОП, но, надеюсь, люди, ищущие похожие вещи, получат пользу от этого ответа.

  2. Это небольшая модификация фрагмента кода, найденного в http://rwx.io/posts/org-export-configurations/

  3. Исходное решение, найденное в приведенном выше блоге, позволяет создавать разные каталоги для каждого экспортируемого формата. Однако, если цель состоит в том, чтобы избежать один каталог, "усеянный файлами PDF, Tex и HTML", я думаю, что лучше всего иметь только один каталог, содержащий экспортированные файлы всех форматов, что является сутью модификации, предложенной мной выше.


Редактировать: Руководство emacs (https://www.gnu.org/software/emacs/manual/html_node/elisp/Porting-old-advice.html#Porting-old-advice) гласит, что механизм defadvice устарел новым advice-add. Итак, вот фрагмент кода с тем же эффектом с использованием рекомендованного advice-add:

(defun org-export-output-file-name-modified (orig-fun extension &optional subtreep pub-dir)
  (unless pub-dir
    (setq pub-dir "exported-org-files")
    (unless (file-directory-p pub-dir)
      (make-directory pub-dir)))
  (apply orig-fun extension subtreep pub-dir nil))
(advice-add 'org-export-output-file-name :around #'org-export-output-file-name-modified)

Как и прежде, это должно быть помещено в ваш файл .emacs.

Ответ 3

Возможно, это было невозможно, когда вопрос был впервые задан, но самым простым решением было бы добавить каталог в свойство :EXPORT_FILE_NAME::

:PROPERTIES:
:EXPORT_FILE_NAME: exports/<filename>
:END:

Как и в принятом ответе, каталог должен существовать, чтобы это работало.

Ответ 4

Я считаю, что вы можете получить это с помощью org-publish. Добавьте в конфигурационный файл emacs что-то вроде этого:

(setq org-publish-project-alist
  '(("html"
     :base-directory "~/org/"
     :base-extension "org"
     :publishing-directory "~/org/exports"
     :publishing-function org-publish-org-to-html)
    ("pdf"
     :base-directory "~/org/"
     :base-extension "org"
     :publishing-directory "~/org/exports"
     :publishing-function org-publish-org-to-pdf)
    ("all" :components ("html" "pdf"))))

Измените это выражение (или перезапустите emacs), нажмите C-c C-e X в org-mode, затем выберите проект из списка.

Вы можете увидеть дополнительную информацию на http://orgmode.org/worg/org-tutorials/org-publish-html-tutorial.html и http://orgmode.org/manual/Publishing.html#Publishing