Emacs组织模式 - 导出到另一个目录?

问题描述 投票:19回答:4

我知道这有点小,但它一直在困扰我。我正在使用Org-mode进行项目,而且我倾向于频繁地导出到PDF或HTML,这使得我的目录中充斥着PDF,Tex和HTML文件。有没有办法让Org-mode导出到另一个位置,也许是一个名为./exports的子目录?

org-mode
4个回答
20
投票

除了通过将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.

导出后,它将被放置在“exports”目录中,但仅限于该目录存在。如果它不存在,您将在控制台中收到错误消息。


5
投票

原始问题涉及组织文件的导出,而上述大多数答案实际上与发布有关,这是一个不同的概念。

我认为解决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. 我意识到一个5岁的问题可能不再与OP相关,但希望搜索类似内容的人将从这个答案中受益。
  2. 这是对http://rwx.io/blog/2016/03/11/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淘汰了。所以这里是一个具有相同效果的代码snipet,使用推荐的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
投票

我相信你可以通过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"))))

Eval这个表达式(或重启emacs),在org-mode下按C-c C-e X,然后从列表中选择一个项目。

您可以在http://orgmode.org/worg/org-tutorials/org-publish-html-tutorial.htmlhttp://orgmode.org/manual/Publishing.html#Publishing上查看更多信息


3
投票

当问题第一次被问到时,这可能是不可能的,但最简单的解决方案是将目录添加到:EXPORT_FILE_NAME:属性:

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

就像在接受的答案中一样,目录必须存在才能使其正常工作。

© www.soinside.com 2019 - 2024. All rights reserved.