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

时间:2012-03-04 23:13:00

标签: org-mode

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

6 个答案:

答案 0 :(得分: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”目录中,但仅限于该目录存在。如果它不存在,您将在控制台中收到错误消息。

答案 1 :(得分: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. 中的代码段的略微修改
  4. 上述博客中的原始解决方案允许为每种导出的格式设置不同的目录。但是,如果目标是避免拥有 一个人的目录“乱七八糟的PDF,Tex和HTML文件”,我认为最好只有一个目录包含所有格式的导出文件,这是我上面提到的修改的本质。

  5. 编辑: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文件中。

答案 2 :(得分: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"))))

评估此表达式(或重新启动emacs),在组织模式下按C-c C-e X,然后从列表中选择一个项目。

您可以在http://orgmode.org/worg/org-tutorials/org-publish-html-tutorial.htmlhttp://orgmode.org/manual/Publishing.html#Publishing

上查看更多信息

答案 3 :(得分:3)

首次提出问题时,这可能是不可能的,但最简单的解决方案是将目录添加到:EXPORT_FILE_NAME:属性中:

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

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

答案 4 :(得分:0)

"Export settings"部分所述,我们可以在文件内使用EXPORT_FILE_NAME来设置输出目录。下面显示的报价是文档的相关部分

“ EXPORT_FILE_NAME”

要生成的输出文件的名称。否则,Org将根据缓冲区名称生成文件名,并根据后端格式生成扩展名。

答案 5 :(得分:0)

您必须将以下行放在org文件的开头:

#+EXPORT_FILE_NAME: PATH/filename

PATH是要导出文件的文件夹的路径(例如~/exports),filename是要给导出文件的名称(例如{ {1}}。